From 1634c50231fe4b8ccbf130661527ff71b90bc2e0 Mon Sep 17 00:00:00 2001 From: Alessevan <44125445+Alessevan@users.noreply.github.com> Date: Mon, 24 Aug 2026 12:41:00 -0400 Subject: [PATCH] Decompiling SWSW (#144) * feat: init decompiling * feat: increase matching * feat: better matching * feat: match up jp * fix: used ifdef instand of if * doc: more explicit comment Co-authored-by: Yanis <35189056+Yanis002@users.noreply.github.com> * style: add brackets for switch cases which define variables --------- Co-authored-by: Yanis <35189056+Yanis002@users.noreply.github.com> --- config/eur/arm9/itcm/symbols.txt | 2 +- config/eur/arm9/overlays/ov000/symbols.txt | 2 +- config/eur/arm9/overlays/ov032/delinks.txt | 3 +- config/eur/arm9/overlays/ov032/relocs.txt | 10 +- config/eur/arm9/overlays/ov032/symbols.txt | 39 +- config/eur/arm9/overlays/ov036/relocs.txt | 2 +- config/eur1/arm9/overlays/ov000/symbols.txt | 2 +- config/jp/arm9/itcm/symbols.txt | 2 +- config/jp/arm9/overlays/ov000/symbols.txt | 2 +- config/jp/arm9/overlays/ov032/delinks.txt | 3 +- config/jp/arm9/overlays/ov032/relocs.txt | 10 +- config/jp/arm9/overlays/ov032/symbols.txt | 50 +- config/jp/arm9/symbols.txt | 2 +- include/Actor/ActorUnkNSSW.hpp | 18 +- include/MapObject/MapObjectUnkSWSW.hpp | 93 +++- include/Render/ModelRender.hpp | 8 +- src/000_Second/Actor/ActorUnkSWOB.cpp | 6 +- src/031_Land/Actor/ActorItemBoomerang.cpp | 4 +- src/032_MapA1/Actor/ActorUnkNSSW.cpp | 2 +- src/032_MapA1/MapObject/MapObjectUnkSWSW.cpp | 528 ++++++++++++++++++- src/063_Shrine/Actor/ActorUnkCANS.cpp | 3 +- 21 files changed, 673 insertions(+), 118 deletions(-) diff --git a/config/eur/arm9/itcm/symbols.txt b/config/eur/arm9/itcm/symbols.txt index a8b132cd..561545e4 100644 --- a/config/eur/arm9/itcm/symbols.txt +++ b/config/eur/arm9/itcm/symbols.txt @@ -128,7 +128,7 @@ func_01ffc520 kind:function(arm,size=0x5c) addr:0x01ffc520 _ZN11ModelRender8vfunc_0CEv kind:function(arm,size=0x24) addr:0x01ffc57c func_01ffc5a0 kind:function(arm,size=0x94) addr:0x01ffc5a0 func_01ffc634 kind:function(arm,size=0xa0) addr:0x01ffc634 -_ZN19UnkSystem6_Derived213func_01ffc6d4E14UnkAngleStructP7VecFx32 kind:function(arm,size=0x70) addr:0x01ffc6d4 +_ZN15ModelRenderBase13func_01ffc6d4E14UnkAngleStructP7VecFx32 kind:function(arm,size=0x70) addr:0x01ffc6d4 func_01ffc744 kind:function(arm,size=0x24) addr:0x01ffc744 _ZN24UnkStruct_ov000_020b4ec413func_01ffc768Ei kind:function(arm,size=0x3c) addr:0x01ffc768 _ZN20ModelRender_Derived18vfunc_1CEP19UnkSystem4_vfunc_1C kind:function(arm,size=0xb4) addr:0x01ffc7a4 diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index e05f2c58..37e5c3db 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -101,7 +101,7 @@ _ZN11ModelRender8vfunc_1CEP19UnkSystem4_vfunc_1C kind:function(arm,size=0x4) add _ZN11ModelRender19func_ov000_02057c38Eii kind:function(arm,size=0x34) addr:0x02057c38 func_ov000_02057c6c kind:function(arm,size=0x2c) addr:0x02057c6c _ZN11ModelRender19func_ov000_02057c98EP10UnkSystem5 kind:function(arm,size=0x18) addr:0x02057c98 -func_ov000_02057cb0 kind:function(arm,size=0x18) addr:0x02057cb0 +_ZN15ModelRenderBase19func_ov000_02057cb0Ev kind:function(arm,size=0x18) addr:0x02057cb0 func_ov000_02057cc8 kind:function(arm,size=0x2c) addr:0x02057cc8 _ZN11ModelRender19func_ov000_02057cf4Ev kind:function(arm,size=0x2c) addr:0x02057cf4 _ZN11ModelRender19func_ov000_02057d20Eh kind:function(thumb,size=0x1c) addr:0x02057d20 diff --git a/config/eur/arm9/overlays/ov032/delinks.txt b/config/eur/arm9/overlays/ov032/delinks.txt index 3ea9a984..9f0e3a1f 100644 --- a/config/eur/arm9/overlays/ov032/delinks.txt +++ b/config/eur/arm9/overlays/ov032/delinks.txt @@ -2,7 +2,7 @@ .rodata start:0x02121ed0 end:0x02121f34 kind:rodata align:4 .init start:0x02121f34 end:0x0212212c kind:code align:4 .ctor start:0x0212212c end:0x02122140 kind:rodata align:4 - .data start:0x02122160 end:0x02122820 kind:data align:32 + .data start:0x02122160 end:0x02122818 kind:data align:32 .bss start:0x02122820 end:0x02122bc0 kind:bss align:32 src/032_MapA1/Actor/ActorUnkKURI.cpp: @@ -34,4 +34,5 @@ src/032_MapA1/MapObject/MapObjectUnkSWSW.cpp: .text start:0x02120e90 end:0x02121ed0 .init start:0x021220dc end:0x0212212c .ctor start:0x0212213c end:0x02122140 + .data start:0x02122744 end:0x02122818 .bss start:0x02122aa8 end:0x02122ad8 diff --git a/config/eur/arm9/overlays/ov032/relocs.txt b/config/eur/arm9/overlays/ov032/relocs.txt index 59f59c2f..3767b74f 100644 --- a/config/eur/arm9/overlays/ov032/relocs.txt +++ b/config/eur/arm9/overlays/ov032/relocs.txt @@ -916,14 +916,14 @@ from:0x02120eac kind:arm_call to:0x02011f3c module:main from:0x02120eb8 kind:arm_call to:0x02121104 module:overlay(32) from:0x02120ed0 kind:arm_call to:0x0209c9a8 module:overlay(0) from:0x02120ee0 kind:arm_call to:0x0207c018 module:overlay(0) -from:0x02120f64 kind:load to:0x02122768 module:overlay(32) -from:0x02120f68 kind:load to:0x02122784 module:overlay(32) -from:0x02120f6c kind:load to:0x0212274c module:overlay(32) +from:0x02120f64 kind:load to:0x02122760 module:overlay(32) add:0x8 +from:0x02120f68 kind:load to:0x0212277c module:overlay(32) add:0x8 +from:0x02120f6c kind:load to:0x02122744 module:overlay(32) add:0x8 from:0x02120f80 kind:arm_call_thumb to:0x02057b54 module:overlay(0) from:0x02120fa8 kind:arm_call to:0x02057f18 module:overlay(0) from:0x02120fb8 kind:arm_call to:0x02057f18 module:overlay(0) from:0x02120fcc kind:arm_call to:0x02057c38 module:overlay(0) -from:0x02120fd8 kind:load to:0x021227ac module:overlay(32) +from:0x02120fd8 kind:load to:0x021227a4 module:overlay(32) add:0x8 from:0x02120fdc kind:load to:0x02121f14 module:overlay(32) from:0x02120fe0 kind:load to:0x02121f24 module:overlay(32) from:0x02121040 kind:arm_call_thumb to:0x01ffa184 module:itcm @@ -933,7 +933,7 @@ from:0x0212110c kind:arm_call to:0x0209cfe0 module:overlay(0) from:0x02121130 kind:arm_call to:0x0200f05c module:main from:0x0212114c kind:arm_call to:0x02120f78 module:overlay(32) from:0x02121160 kind:arm_call_thumb to:0x0205778c module:overlay(0) -from:0x021211b8 kind:load to:0x021227d8 module:overlay(32) +from:0x021211b8 kind:load to:0x021227d0 module:overlay(32) add:0x8 from:0x021211bc kind:load to:0x02122ab8 module:overlay(32) from:0x021211c0 kind:load to:0x02121ef4 module:overlay(32) from:0x021211c4 kind:load to:0x02122b8c module:overlay(32) diff --git a/config/eur/arm9/overlays/ov032/symbols.txt b/config/eur/arm9/overlays/ov032/symbols.txt index ae41dfb9..d0aacdba 100644 --- a/config/eur/arm9/overlays/ov032/symbols.txt +++ b/config/eur/arm9/overlays/ov032/symbols.txt @@ -185,7 +185,7 @@ _ZN12ActorUnkNSSW19func_ov032_02120b6cEv kind:function(arm,size=0x10) addr:0x021 _ZN12ActorUnkNSSW19func_ov032_02120b7cEv kind:function(arm,size=0x44) addr:0x02120b7c _ZN12ActorUnkNSSW19func_ov032_02120bc0Ev kind:function(arm,size=0x3c) addr:0x02120bc0 _ZN12ActorUnkNSSW19func_ov032_02120bfcEv kind:function(arm,size=0x68) addr:0x02120bfc -_ZN12ActorUnkNSSW19func_ov032_02120c64Ev kind:function(arm,size=0x8c) addr:0x02120c64 +_ZN12ActorUnkNSSW19func_ov032_02120c64EP16MapObjectUnkSWSW kind:function(arm,size=0x8c) addr:0x02120c64 _ZN12ActorUnkNSSW19func_ov032_02120cf0Ev kind:function(arm,size=0x34) addr:0x02120cf0 _ZN12ActorUnkNSSW19func_ov032_02120d24Ev kind:function(arm,size=0x3c) addr:0x02120d24 _ZN12ActorUnkNSSW19func_ov032_02120d60Ev kind:function(arm,size=0x1c) addr:0x02120d60 @@ -199,22 +199,22 @@ _ZN19ActorProfileUnkNSSWD1Ev kind:function(arm,size=0x14) addr:0x02120e7c _ZN23MapObjectProfileUnkSWSW10GetProfileEv kind:function(arm,size=0xc) addr:0x02120e90 _ZN23MapObjectProfileUnkSWSW6CreateEv kind:function(arm,size=0x24) addr:0x02120e9c _ZN23MapObjectProfileUnkSWSWC1Ev kind:function(arm,size=0xb8) addr:0x02120ec0 -_ZN16MapObjectUnkSWSW19func_ov032_02120f78Ev kind:function(arm,size=0x6c) addr:0x02120f78 -_ZN16MapObjectUnkSWSW19func_ov032_02120fe4Ev kind:function(arm,size=0xbc) addr:0x02120fe4 -_ZN16MapObjectUnkSWSW19func_ov032_021210a0Ev kind:function(arm,size=0x64) addr:0x021210a0 +_ZN19MapObjectUnkSWSW_40C1EP10G3d_Model_ kind:function(arm,size=0x6c) addr:0x02120f78 +_ZN19MapObjectUnkSWSW_408vfunc_1CEP19UnkSystem4_vfunc_1C kind:function(arm,size=0xbc) addr:0x02120fe4 +_ZN19MapObjectUnkSWSW_4019func_ov032_021210a0Ei kind:function(arm,size=0x64) addr:0x021210a0 _ZN16MapObjectUnkSWSWC1Ev kind:function(arm,size=0xc4) addr:0x02121104 -_ZN16MapObjectUnkSWSW19func_ov032_021211c8Ev kind:function(arm,size=0x14) addr:0x021211c8 -_ZN16MapObjectUnkSWSW19func_ov032_021211dcEv kind:function(arm,size=0x240) addr:0x021211dc -_ZN16MapObjectUnkSWSW19func_ov032_0212141cEv kind:function(arm,size=0x4b4) addr:0x0212141c -_ZN16MapObjectUnkSWSW19func_ov032_021218d0Ev kind:function(arm,size=0x278) addr:0x021218d0 -_ZN16MapObjectUnkSWSW19func_ov032_02121b48Ev kind:function(arm,size=0x48) addr:0x02121b48 +_ZN19MapObjectUnkSWSW_40D1Ev kind:function(arm,size=0x14) addr:0x021211c8 +_ZN16MapObjectUnkSWSW8vfunc_00Ev kind:function(arm,size=0x240) addr:0x021211dc +_ZN16MapObjectUnkSWSW8vfunc_08Ev kind:function(arm,size=0x4b4) addr:0x0212141c +_ZN16MapObjectUnkSWSW8vfunc_1CE8ActorRefiP7VecFx32 kind:function(arm,size=0x278) addr:0x021218d0 +_ZN16MapObjectUnkSWSW8vfunc_38Ev kind:function(arm,size=0x48) addr:0x02121b48 _ZN16MapObjectUnkSWSW19func_ov032_02121b90Ev kind:function(arm,size=0x88) addr:0x02121b90 -_ZN16MapObjectUnkSWSW19func_ov032_02121c18Ev kind:function(arm,size=0x158) addr:0x02121c18 -_ZN16MapObjectUnkSWSW19func_ov032_02121d70Ev kind:function(arm,size=0x58) addr:0x02121d70 -_ZN16MapObjectUnkSWSW19func_ov032_02121dc8Ev kind:function(arm,size=0x90) addr:0x02121dc8 -_ZN16MapObjectUnkSWSWD0Ev kind:function(arm,size=0x1c) addr:0x02121e58 +_ZN16MapObjectUnkSWSW8vfunc_3CEi kind:function(arm,size=0x158) addr:0x02121c18 +_ZN16MapObjectUnkSWSW8vfunc_14Ev kind:function(arm,size=0x58) addr:0x02121d70 +_ZN16MapObjectUnkSWSW19func_ov032_02121dc8EP7VecFx32 kind:function(arm,size=0x90) addr:0x02121dc8 +_ZN19MapObjectUnkSWSW_40D0Ev kind:function(arm,size=0x1c) addr:0x02121e58 _ZN16MapObjectUnkSWSWD1Ev kind:function(arm,size=0x20) addr:0x02121e74 -_ZN16MapObjectUnkSWSW19func_ov032_02121e94Ev kind:function(arm,size=0x28) addr:0x02121e94 +_ZN16MapObjectUnkSWSWD0Ev kind:function(arm,size=0x28) addr:0x02121e94 _ZN23MapObjectProfileUnkSWSWD1Ev kind:function(arm,size=0x14) addr:0x02121ebc data_ov032_02121ed4 kind:data(any) addr:0x02121ed4 data_ov032_02121ee4 kind:data(any) addr:0x02121ee4 @@ -266,12 +266,11 @@ data_ov032_02122694 kind:data(any) addr:0x02122694 data_ov032_021226ac kind:data(any) addr:0x021226ac _ZTV19data_ov032_021226c0 kind:data(any) addr:0x021226c0 _ZTV19data_ov032_021226e4 kind:data(any) addr:0x021226e4 -data_ov032_0212274c kind:data(any) addr:0x0212274c -data_ov032_02122768 kind:data(any) addr:0x02122768 -data_ov032_02122784 kind:data(any) addr:0x02122784 -data_ov032_021227ac kind:data(any) addr:0x021227ac -data_ov032_021227d8 kind:data(any) addr:0x021227d8 -data_ov032_02122810 kind:data(any) addr:0x02122810 ambiguous +_ZTV23MapObjectProfileUnkSWSW kind:data(any) addr:0x02122744 +_ZTV28MapObjectProfileUnkSWSW_Base kind:data(any) addr:0x02122760 +_ZTV17MapObject_10_SWSW kind:data(any) addr:0x0212277c +_ZTV19MapObjectUnkSWSW_40 kind:data(any) addr:0x021227a4 +_ZTV16MapObjectUnkSWSW kind:data(any) addr:0x021227d0 _ZGVN15ProfileInstanceI19ActorProfileUnkKURIE8sProfileE kind:bss addr:0x02122820 @11136 kind:bss addr:0x02122824 _ZN15ProfileInstanceI19ActorProfileUnkKURIE8sProfileE kind:bss addr:0x02122830 diff --git a/config/eur/arm9/overlays/ov036/relocs.txt b/config/eur/arm9/overlays/ov036/relocs.txt index 7ecb54c2..80610bb1 100644 --- a/config/eur/arm9/overlays/ov036/relocs.txt +++ b/config/eur/arm9/overlays/ov036/relocs.txt @@ -1246,7 +1246,7 @@ from:0x02120e9c kind:arm_call to:0x0203ce74 module:main from:0x02120eb0 kind:load to:0x02122764 module:overlay(36) from:0x02120eb4 kind:load to:0x02122774 module:overlay(36) from:0x02120eb8 kind:load to:0x0211b214 module:overlay(36) -from:0x02120ebc kind:load to:0x02122768 module:overlay(36) +from:0x02120ebc kind:load to:0x02122760 module:overlay(36) add:0x8 from:0x02120edc kind:arm_call to:0x0211b278 module:overlay(36) from:0x02120eec kind:arm_call to:0x0203ce74 module:main from:0x02120f00 kind:load to:0x0212284c module:overlay(36) diff --git a/config/eur1/arm9/overlays/ov000/symbols.txt b/config/eur1/arm9/overlays/ov000/symbols.txt index 3c879212..581860fa 100644 --- a/config/eur1/arm9/overlays/ov000/symbols.txt +++ b/config/eur1/arm9/overlays/ov000/symbols.txt @@ -101,7 +101,7 @@ func_ov000_02057c34 kind:function(arm,size=0x4) addr:0x02057c34 func_ov000_02057c38 kind:function(arm,size=0x34) addr:0x02057c38 func_ov000_02057c6c kind:function(arm,size=0x2c) addr:0x02057c6c func_ov000_02057c98 kind:function(arm,size=0x18) addr:0x02057c98 -func_ov000_02057cb0 kind:function(arm,size=0x18) addr:0x02057cb0 +_ZN15ModelRenderBase19func_ov000_02057cb0Ev kind:function(arm,size=0x18) addr:0x02057cb0 func_ov000_02057cc8 kind:function(arm,size=0x2c) addr:0x02057cc8 func_ov000_02057cf4 kind:function(arm,size=0x2c) addr:0x02057cf4 func_ov000_02057d20 kind:function(thumb,size=0x1c) addr:0x02057d20 diff --git a/config/jp/arm9/itcm/symbols.txt b/config/jp/arm9/itcm/symbols.txt index a8b132cd..561545e4 100644 --- a/config/jp/arm9/itcm/symbols.txt +++ b/config/jp/arm9/itcm/symbols.txt @@ -128,7 +128,7 @@ func_01ffc520 kind:function(arm,size=0x5c) addr:0x01ffc520 _ZN11ModelRender8vfunc_0CEv kind:function(arm,size=0x24) addr:0x01ffc57c func_01ffc5a0 kind:function(arm,size=0x94) addr:0x01ffc5a0 func_01ffc634 kind:function(arm,size=0xa0) addr:0x01ffc634 -_ZN19UnkSystem6_Derived213func_01ffc6d4E14UnkAngleStructP7VecFx32 kind:function(arm,size=0x70) addr:0x01ffc6d4 +_ZN15ModelRenderBase13func_01ffc6d4E14UnkAngleStructP7VecFx32 kind:function(arm,size=0x70) addr:0x01ffc6d4 func_01ffc744 kind:function(arm,size=0x24) addr:0x01ffc744 _ZN24UnkStruct_ov000_020b4ec413func_01ffc768Ei kind:function(arm,size=0x3c) addr:0x01ffc768 _ZN20ModelRender_Derived18vfunc_1CEP19UnkSystem4_vfunc_1C kind:function(arm,size=0xb4) addr:0x01ffc7a4 diff --git a/config/jp/arm9/overlays/ov000/symbols.txt b/config/jp/arm9/overlays/ov000/symbols.txt index 1bb21683..edae9362 100644 --- a/config/jp/arm9/overlays/ov000/symbols.txt +++ b/config/jp/arm9/overlays/ov000/symbols.txt @@ -101,7 +101,7 @@ _ZN11ModelRender8vfunc_1CEP19UnkSystem4_vfunc_1C kind:function(arm,size=0x4) add _ZN11ModelRender19func_ov000_02057c38Eii kind:function(arm,size=0x34) addr:0x020591b8 func_ov000_020591ec kind:function(arm,size=0x2c) addr:0x020591ec _ZN11ModelRender19func_ov000_02057c98EP10UnkSystem5 kind:function(arm,size=0x18) addr:0x02059218 -func_ov000_02059230 kind:function(arm,size=0x18) addr:0x02059230 +_ZN15ModelRenderBase19func_ov000_02057cb0Ev kind:function(arm,size=0x18) addr:0x02059230 func_ov000_02059248 kind:function(arm,size=0x2c) addr:0x02059248 _ZN11ModelRender19func_ov000_02057cf4Ev kind:function(arm,size=0x2c) addr:0x02059274 _ZN11ModelRender19func_ov000_02057d20Eh kind:function(thumb,size=0x1c) addr:0x020592a0 diff --git a/config/jp/arm9/overlays/ov032/delinks.txt b/config/jp/arm9/overlays/ov032/delinks.txt index 2d66135c..3d6ad75e 100644 --- a/config/jp/arm9/overlays/ov032/delinks.txt +++ b/config/jp/arm9/overlays/ov032/delinks.txt @@ -2,7 +2,7 @@ .rodata start:0x02123ea8 end:0x02123f0c kind:rodata align:4 .init start:0x02123f0c end:0x02124104 kind:code align:4 .ctor start:0x02124104 end:0x02124118 kind:rodata align:4 - .data start:0x02124120 end:0x02124800 kind:data align:32 + .data start:0x02124120 end:0x021247f4 kind:data align:32 .bss start:0x02124800 end:0x02124ba0 kind:bss align:32 src/032_MapA1/Actor/ActorUnkKURI.cpp: @@ -34,4 +34,5 @@ src/032_MapA1/MapObject/MapObjectUnkSWSW.cpp: .text start:0x02122e68 end:0x02123ea8 .init start:0x021240b4 end:0x02124104 .ctor start:0x02124114 end:0x02124118 + .data start:0x02124720 end:0x021247f4 .bss start:0x02124a88 end:0x02124ab8 diff --git a/config/jp/arm9/overlays/ov032/relocs.txt b/config/jp/arm9/overlays/ov032/relocs.txt index 56d11203..63c25218 100644 --- a/config/jp/arm9/overlays/ov032/relocs.txt +++ b/config/jp/arm9/overlays/ov032/relocs.txt @@ -937,14 +937,14 @@ from:0x02122e84 kind:arm_call to:0x02011f3c module:main from:0x02122e90 kind:arm_call to:0x021230dc module:overlay(32) from:0x02122ea8 kind:arm_call to:0x0209e16c module:overlay(0) from:0x02122eb8 kind:arm_call to:0x0207d6d0 module:overlay(0) -from:0x02122f3c kind:load to:0x02124744 module:overlay(32) -from:0x02122f40 kind:load to:0x02124760 module:overlay(32) -from:0x02122f44 kind:load to:0x02124728 module:overlay(32) +from:0x02122f3c kind:load to:0x0212473c module:overlay(32) add:0x8 +from:0x02122f40 kind:load to:0x02124758 module:overlay(32) add:0x8 +from:0x02122f44 kind:load to:0x02124720 module:overlay(32) add:0x8 from:0x02122f58 kind:arm_call_thumb to:0x020590d4 module:overlay(0) from:0x02122f80 kind:arm_call to:0x02059498 module:overlay(0) from:0x02122f90 kind:arm_call to:0x02059498 module:overlay(0) from:0x02122fa4 kind:arm_call to:0x020591b8 module:overlay(0) -from:0x02122fb0 kind:load to:0x02124788 module:overlay(32) +from:0x02122fb0 kind:load to:0x02124780 module:overlay(32) add:0x8 from:0x02122fb4 kind:load to:0x02123eec module:overlay(32) from:0x02122fb8 kind:load to:0x02123efc module:overlay(32) from:0x02123018 kind:arm_call_thumb to:0x01ffa184 module:itcm @@ -954,7 +954,7 @@ from:0x021230e4 kind:arm_call to:0x0209e7a4 module:overlay(0) from:0x02123108 kind:arm_call to:0x0200f05c module:main from:0x02123124 kind:arm_call to:0x02122f50 module:overlay(32) from:0x02123138 kind:arm_call_thumb to:0x02058d0c module:overlay(0) -from:0x02123190 kind:load to:0x021247b4 module:overlay(32) +from:0x02123190 kind:load to:0x021247ac module:overlay(32) add:0x8 from:0x02123194 kind:load to:0x02124a98 module:overlay(32) from:0x02123198 kind:load to:0x02123ecc module:overlay(32) from:0x0212319c kind:load to:0x02124b6c module:overlay(32) diff --git a/config/jp/arm9/overlays/ov032/symbols.txt b/config/jp/arm9/overlays/ov032/symbols.txt index 0c46c8d1..6e7d8ee3 100644 --- a/config/jp/arm9/overlays/ov032/symbols.txt +++ b/config/jp/arm9/overlays/ov032/symbols.txt @@ -187,7 +187,7 @@ _ZN12ActorUnkNSSW19func_ov032_02120b7cEv kind:function(arm,size=0x44) addr:0x021 _ZN12ActorUnkNSSW19func_ov032_02120bc0Ev kind:function(arm,size=0x3c) addr:0x02122a2c _ZN12ActorUnkNSSW19func_ov032_02122a68Ev kind:function(arm,size=0xa4) addr:0x02122a68 _ZN12ActorUnkNSSW19func_ov032_02122b0cEv kind:function(arm,size=0x6c) addr:0x02122b0c -_ZN12ActorUnkNSSW19func_ov032_02120c64Ev kind:function(arm,size=0x8c) addr:0x02122b78 +_ZN12ActorUnkNSSW19func_ov032_02120c64EP16MapObjectUnkSWSW kind:function(arm,size=0x8c) addr:0x02122b78 _ZN12ActorUnkNSSW19func_ov032_02120cf0Ev kind:function(arm,size=0x34) addr:0x02122c04 _ZN12ActorUnkNSSW19func_ov032_02120d24Ev kind:function(arm,size=0x3c) addr:0x02122c38 _ZN12ActorUnkNSSW19func_ov032_02120d60Ev kind:function(arm,size=0x1c) addr:0x02122c74 @@ -203,29 +203,29 @@ _ZN19ActorProfileUnkNSSWD1Ev kind:function(arm,size=0x14) addr:0x02122e54 _ZN23MapObjectProfileUnkSWSW10GetProfileEv kind:function(arm,size=0xc) addr:0x02122e68 _ZN23MapObjectProfileUnkSWSW6CreateEv kind:function(arm,size=0x24) addr:0x02122e74 _ZN23MapObjectProfileUnkSWSWC1Ev kind:function(arm,size=0xb8) addr:0x02122e98 -_ZN16MapObjectUnkSWSW19func_ov032_02120f78Ev kind:function(arm,size=0x6c) addr:0x02122f50 -_ZN16MapObjectUnkSWSW19func_ov032_02120fe4Ev kind:function(arm,size=0xbc) addr:0x02122fbc -_ZN16MapObjectUnkSWSW19func_ov032_021210a0Ev kind:function(arm,size=0x64) addr:0x02123078 +_ZN19MapObjectUnkSWSW_40C1EP10G3d_Model_ kind:function(arm,size=0x6c) addr:0x02122f50 +_ZN19MapObjectUnkSWSW_408vfunc_1CEP19UnkSystem4_vfunc_1C kind:function(arm,size=0xbc) addr:0x02122fbc +_ZN19MapObjectUnkSWSW_4019func_ov032_021210a0Ei kind:function(arm,size=0x64) addr:0x02123078 _ZN16MapObjectUnkSWSWC1Ev kind:function(arm,size=0xc4) addr:0x021230dc -_ZN16MapObjectUnkSWSW19func_ov032_021211c8Ev kind:function(arm,size=0x14) addr:0x021231a0 -_ZN16MapObjectUnkSWSW19func_ov032_021211dcEv kind:function(arm,size=0x240) addr:0x021231b4 -_ZN16MapObjectUnkSWSW19func_ov032_0212141cEv kind:function(arm,size=0x4b4) addr:0x021233f4 -_ZN16MapObjectUnkSWSW19func_ov032_021218d0Ev kind:function(arm,size=0x278) addr:0x021238a8 -_ZN16MapObjectUnkSWSW19func_ov032_02121b48Ev kind:function(arm,size=0x48) addr:0x02123b20 +_ZN19MapObjectUnkSWSW_40D1Ev kind:function(arm,size=0x14) addr:0x021231a0 +_ZN16MapObjectUnkSWSW8vfunc_00Ev kind:function(arm,size=0x240) addr:0x021231b4 +_ZN16MapObjectUnkSWSW8vfunc_08Ev kind:function(arm,size=0x4b4) addr:0x021233f4 +_ZN16MapObjectUnkSWSW8vfunc_1CE8ActorRefiP7VecFx32 kind:function(arm,size=0x278) addr:0x021238a8 +_ZN16MapObjectUnkSWSW8vfunc_38Ev kind:function(arm,size=0x48) addr:0x02123b20 _ZN16MapObjectUnkSWSW19func_ov032_02121b90Ev kind:function(arm,size=0x88) addr:0x02123b68 -_ZN16MapObjectUnkSWSW19func_ov032_02121c18Ev kind:function(arm,size=0x158) addr:0x02123bf0 -_ZN16MapObjectUnkSWSW19func_ov032_02121d70Ev kind:function(arm,size=0x58) addr:0x02123d48 -_ZN16MapObjectUnkSWSW19func_ov032_02121dc8Ev kind:function(arm,size=0x90) addr:0x02123da0 -_ZN16MapObjectUnkSWSWD0Ev kind:function(arm,size=0x1c) addr:0x02123e30 +_ZN16MapObjectUnkSWSW8vfunc_3CEi kind:function(arm,size=0x158) addr:0x02123bf0 +_ZN16MapObjectUnkSWSW8vfunc_14Ev kind:function(arm,size=0x58) addr:0x02123d48 +_ZN16MapObjectUnkSWSW19func_ov032_02121dc8EP7VecFx32 kind:function(arm,size=0x90) addr:0x02123da0 +_ZN19MapObjectUnkSWSW_40D0Ev kind:function(arm,size=0x1c) addr:0x02123e30 _ZN16MapObjectUnkSWSWD1Ev kind:function(arm,size=0x20) addr:0x02123e4c -_ZN16MapObjectUnkSWSW19func_ov032_02123e6cEv kind:function(arm,size=0x28) addr:0x02123e6c +_ZN16MapObjectUnkSWSWD0Ev kind:function(arm,size=0x28) addr:0x02123e6c _ZN23MapObjectProfileUnkSWSWD1Ev kind:function(arm,size=0x14) addr:0x02123e94 data_ov032_02123eac kind:data(any) addr:0x02123eac data_ov032_02123ebc kind:data(any) addr:0x02123ebc -data_ov032_02123ecc kind:data(any) addr:0x02123ecc -data_ov032_02123edc kind:data(any) addr:0x02123edc -data_ov032_02123eec kind:data(any) addr:0x02123eec -data_ov032_02123efc kind:data(any) addr:0x02123efc +data_ov032_02121ef4 kind:data(any) addr:0x02123ecc +data_ov032_02121f04 kind:data(any) addr:0x02123edc +data_ov032_02121f14 kind:data(any) addr:0x02123eec +data_ov032_02121f24 kind:data(any) addr:0x02123efc __sinit_ActorUnkKURI.cpp kind:function(arm,size=0x6c) addr:0x02123f0c __sinit_ActorUnkMKUR.cpp kind:function(arm,size=0x80) addr:0x02123f78 __sinit_ActorUnkKETH.cpp kind:function(arm,size=0x6c) addr:0x02123ff8 @@ -270,11 +270,11 @@ data_ov032_0212466c kind:data(any) addr:0x0212466c data_ov032_02124688 kind:data(any) addr:0x02124688 _ZTV19data_ov032_0212469c kind:data(any) addr:0x0212469c _ZTV19data_ov032_021246c0 kind:data(any) addr:0x021246c0 -data_ov032_02124728 kind:data(any) addr:0x02124728 -data_ov032_02124744 kind:data(any) addr:0x02124744 -data_ov032_02124760 kind:data(any) addr:0x02124760 -data_ov032_02124788 kind:data(any) addr:0x02124788 -data_ov032_021247b4 kind:data(any) addr:0x021247b4 +_ZTV23MapObjectProfileUnkSWSW kind:data(any) addr:0x02124720 +_ZTV28MapObjectProfileUnkSWSW_Base kind:data(any) addr:0x0212473c +_ZTV17MapObject_10_SWSW kind:data(any) addr:0x02124758 +_ZTV19MapObjectUnkSWSW_40 kind:data(any) addr:0x02124780 +_ZTV16MapObjectUnkSWSW kind:data(any) addr:0x021247ac _ZGVN15ProfileInstanceI19ActorProfileUnkKURIE8sProfileE kind:bss addr:0x02124800 @31136 kind:bss addr:0x02124804 _ZN15ProfileInstanceI19ActorProfileUnkKURIE8sProfileE kind:bss addr:0x02124810 @@ -292,5 +292,5 @@ _ZN15ProfileInstanceI19ActorProfileUnkNSSWE8sProfileE kind:bss addr:0x02124a4c _ZGVN15ProfileInstanceI23MapObjectProfileUnkSWSWE8sProfileE kind:bss addr:0x02124a88 @31149 kind:bss addr:0x02124a8c _ZN15ProfileInstanceI23MapObjectProfileUnkSWSWE8sProfileE kind:bss addr:0x02124a98 -data_ov032_02124ab8 kind:bss addr:0x02124ab8 -data_ov032_02124b6c kind:bss addr:0x02124b6c +data_ov032_02122ad8 kind:bss addr:0x02124ab8 +data_ov032_02122b8c kind:bss addr:0x02124b6c diff --git a/config/jp/arm9/symbols.txt b/config/jp/arm9/symbols.txt index d1fbfb8f..2d95c153 100644 --- a/config/jp/arm9/symbols.txt +++ b/config/jp/arm9/symbols.txt @@ -841,7 +841,7 @@ func_020168f0 kind:function(arm,size=0x38) addr:0x020168f0 func_02016928 kind:function(arm,size=0x44) addr:0x02016928 func_020169d4 kind:function(arm,size=0x9c) addr:0x0201696c func_02016a08 kind:function(arm,size=0x70) addr:0x02016a08 -func_02016a78 kind:function(arm,size=0xac) addr:0x02016a78 +func_02016ae0 kind:function(arm,size=0xac) addr:0x02016a78 func_02016b8c kind:function(arm,size=0xdc) addr:0x02016b24 func_02016c00 kind:function(arm,size=0x88) addr:0x02016c00 func_02016c88 kind:function(arm,size=0x8c) addr:0x02016c88 diff --git a/include/Actor/ActorUnkNSSW.hpp b/include/Actor/ActorUnkNSSW.hpp index 00bfb98a..e860419b 100644 --- a/include/Actor/ActorUnkNSSW.hpp +++ b/include/Actor/ActorUnkNSSW.hpp @@ -4,6 +4,7 @@ #include "Actor/Actor.hpp" #include "Actor/ActorProfile.hpp" +#include "MapObject/MapObjectUnkSWSW.hpp" #include "global.h" #include "types.h" @@ -19,8 +20,19 @@ public: class ActorUnkNSSW : public Actor { public: - /* 00 (base) */ - /* 94 */ + /* 000 (base) */ + /* 094 */ STRUCT_PAD(0x094, 0x0BC); + /* 0BC */ unk32 mUnk_0BC; + /* 0C0 */ STRUCT_PAD(0x0C0, 0x184); +#if IS_JP + /* 184 */ STRUCT_PAD(0x184, 0x190); + /* 190 */ MapObjectUnkSWSW *mUnk_184_eur; + /* 194 */ MapObjectUnkSWSW *mUnk_188_eur; +#else + /* 184 */ MapObjectUnkSWSW *mUnk_184_eur; + /* 188 */ MapObjectUnkSWSW *mUnk_188_eur; +#endif + /* 18C */ ActorUnkNSSW(); @@ -42,7 +54,7 @@ public: void func_ov032_02120b7c(void); void func_ov032_02120bc0(void); void func_ov032_02120bfc(void); - void func_ov032_02120c64(void); + void func_ov032_02120c64(MapObjectUnkSWSW *param1); void func_ov032_02120cf0(void); void func_ov032_02120d24(void); void func_ov032_02120d60(void); diff --git a/include/MapObject/MapObjectUnkSWSW.hpp b/include/MapObject/MapObjectUnkSWSW.hpp index 4a5aa63b..476d5d30 100644 --- a/include/MapObject/MapObjectUnkSWSW.hpp +++ b/include/MapObject/MapObjectUnkSWSW.hpp @@ -1,5 +1,3 @@ -//! TODO: This file was generated automatically and might contain errors - #pragma once #include "MapObject/MapObject.hpp" @@ -7,38 +5,91 @@ #include "global.h" #include "types.h" -class MapObjectUnkSWSW : public MapObject { +class ActorUnkNSSW; + +class MapObjectUnkSWSW_40 : public ModelRender { public: /* 00 (base) */ - /* 40 */ + /* 60 */ unk32 mUnk_60; + /* 64 */ unk32 mUnk_64; + /* 68 */ unk16 mUnk_68; + /* 6A */ unk16 mUnk_6A; + /* 6C */ + + MapObjectUnkSWSW_40(G3d_Model *pModel); + + // data_ov032_021227ac + /* 1C */ virtual void vfunc_1C(UnkSystem4_vfunc_1C *param1) override; + + void func_ov032_021210a0(fx32 param1); +}; + +class MapObjectUnkSWSW : public MapObject { +public: + /* 000 (base) */ + /* 040 */ MapObjectUnkSWSW_40 mUnk_040; + /* 0AC */ UnkSystem5 mUnk_0AC; + /* 0CC */ unk32 mUnk_0CC; + /* 0E0 */ STRUCT_PAD(0xD0, 0xEC); + /* 0EC */ VecFx32 mUnk_0EC; + /* 0F8 */ ActorUnkNSSW *mUnk_0F8; + /* 0FC */ unk32 mUnk_0FC; + /* 100 */ volatile u16 mUnk_100; + /* 102 */ u16 mUnk_102; + /* 104 */ u8 mUnk_104; + /* 105 */ u8 mUnk_105; + /* 106 */ STRUCT_PAD(0x106, 0x108); + /* 108 */ fx32 mUnk_108; + /* 10C */ unk16 mUnk_10C; + /* 10E */ volatile u16 mUnk_10E; + /* 110 */ u16 mUnk_110; + /* 114 */ ActorUnkNSSW *mUnk_114; + /* 118 */ MapObjectUnkSWSW(); - /* 30 */ virtual ~MapObjectUnkSWSW() override; + bool IsInternalTimerOut() { + if (this->mUnk_100 < this->mUnk_102) { + ++this->mUnk_100; + return false; + } + return true; + } - void func_ov032_02120f78(void); - void func_ov032_02120fe4(void); - void func_ov032_021210a0(void); - void func_ov032_021211c8(void); - void func_ov032_021211dc(void); - void func_ov032_0212141c(void); - void func_ov032_021218d0(void); - void func_ov032_02121b48(void); - void func_ov032_02121b90(void); - void func_ov032_02121c18(void); - void func_ov032_02121d70(void); - void func_ov032_02121dc8(void); - void func_ov032_02121e94(void); + /* 00 */ virtual bool vfunc_00() override; + /* 08 */ virtual void vfunc_08() override; + /* 14 */ virtual void vfunc_14() override; + /* 1C */ virtual bool vfunc_1C(ActorRef param1, unk32 param2, VecFx32 *param3) override; + /* 38 */ virtual void vfunc_38(); + /* 3C */ virtual void vfunc_3C(unk32 param1); + + void func_ov032_02121b90(); + ActorUnkNSSW *func_ov032_02121dc8(VecFx32 *param1); }; -class MapObjectProfileUnkSWSW : public MapObjectProfile { +class MapObject_10_SWSW : public MapObject_10 { +public: + // data_ov032_02122784 +}; + +class MapObjectProfileUnkSWSW_Base : public MapObjectProfile_Derived2 { public: /* 00 (base) */ + /* D4 */ MapObject_10_SWSW mUnk_D4; + /* F8 */ + + MapObjectProfileUnkSWSW_Base(MapObjectId id) : + MapObjectProfile_Derived2(id, id) {} +}; + +class MapObjectProfileUnkSWSW : public MapObjectProfileUnkSWSW_Base { +public: + /* 00 (base) */ + /* F8 */ MapObjectProfileUnkSWSW(); - ~MapObjectProfileUnkSWSW(); - /* 0C */ virtual MapObject *Create(); + /* 00 */ virtual MapObject *Create(); static MapObjectProfileUnkSWSW *GetProfile(); }; diff --git a/include/Render/ModelRender.hpp b/include/Render/ModelRender.hpp index ef7bf543..e5fbdb3e 100644 --- a/include/Render/ModelRender.hpp +++ b/include/Render/ModelRender.hpp @@ -23,7 +23,8 @@ typedef void (*UnkSystem4_UnkCallback)(void *, unk32); class UnkSystem4_vfunc_1C_B4 { public: /* 00 */ unk32 mUnk_00; - /* 00 */ STRUCT_PAD(0x04, 0x4C); + /* 00 */ STRUCT_PAD(0x04, 0x28); + /* 28 */ Mat3p mUnk_28; /* 4C */ unk32 mUnk_4C; /* 50 */ unk32 mUnk_50; /* 54 */ unk32 mUnk_54; @@ -56,6 +57,9 @@ public: /* 18 */ virtual void vfunc_18(VecFx32 *param1) = 0; /* 1C */ + void func_01ffc6d4(UnkAngleStruct angleStruct, VecFx32 *pos); + + void func_ov000_02057cb0(); unk32 func_ov000_02057f18(const void *param1); unk32 func_ov000_02057f40(const void *param1); const G3d_Model_14 *func_ov000_02057ee0() const; @@ -118,8 +122,6 @@ public: // data_ov000_020b1968 /* 00 */ virtual ~UnkSystem6_Derived2() {} /* 0C */ virtual void vfunc_0C() override; - - void func_01ffc6d4(UnkAngleStruct angleStruct, VecFx32 *pos); }; class ModelRender_ov000_020b198c : public ModelRenderBase { diff --git a/src/000_Second/Actor/ActorUnkSWOB.cpp b/src/000_Second/Actor/ActorUnkSWOB.cpp index 0a1f8d5f..c3f0a091 100644 --- a/src/000_Second/Actor/ActorUnkSWOB.cpp +++ b/src/000_Second/Actor/ActorUnkSWOB.cpp @@ -6,7 +6,7 @@ #include "Unknown/UnkStruct_027e0ce0.hpp" #include "Unknown/UnkStruct_ov000_020b5214.hpp" -extern "C" void func_01ffedac(u16 *, VecFx32 *); +extern "C" void func_01ffedac(Vec2bCpp *, VecFx32 *); extern "C" void func_01ffb9cc(void *, VecFx32 *); DECL_PROFILE(ActorProfileUnkSWOB); @@ -85,7 +85,7 @@ void ActorUnkSWOB::func_ov000_0209aa30(void) { VecFx32 vec2; VecFx32 vec; ActorParams AStack_7c; - u16 auStack_80[2]; + Vec2bCpp auStack_80; int j; u32 i; @@ -109,7 +109,7 @@ void ActorUnkSWOB::func_ov000_0209aa30(void) { VecFx32_Add(&vec, &vec2, &vec); if (j < 10) { - func_01ffedac(auStack_80, &vec); + func_01ffedac(&auStack_80, &vec); func_01ffb9cc(&temp, &vec); i--; j++; diff --git a/src/031_Land/Actor/ActorItemBoomerang.cpp b/src/031_Land/Actor/ActorItemBoomerang.cpp index b57878f6..82b888f8 100644 --- a/src/031_Land/Actor/ActorItemBoomerang.cpp +++ b/src/031_Land/Actor/ActorItemBoomerang.cpp @@ -15,7 +15,7 @@ extern "C" void func_01ff97c8(VecFx32 *, int); extern "C" void func_01ffb714(VecFx32 *, VecFx32 *, void *); extern "C" unk32 func_01ffb9cc(VecFx32 *, VecFx32 *); extern "C" void func_01ffe6c4(Actor **, ActorRef, VecFx32 *, VecFx32 *, s32, VecFx32 *, UnkStruct_ov031_Items_00 *); -extern "C" void func_01ffedac(u16 *, VecFx32 *); +extern "C" void func_01ffedac(Vec2bCpp *, VecFx32 *); extern "C" bool func_ov000_0205aeac(); extern "C" bool func_ov000_020982d8(); @@ -199,7 +199,7 @@ void ActorItemBoomerang::vfunc_20() { this->func_ov031_020e49b0(0x8D70); } - u16 spC; + Vec2bCpp spC; VecFx32 sp3C; VecFx32_Copy(data_027e0ce0->func_01fff148(0x0), &sp3C); diff --git a/src/032_MapA1/Actor/ActorUnkNSSW.cpp b/src/032_MapA1/Actor/ActorUnkNSSW.cpp index 153ffd92..bd5e80a0 100644 --- a/src/032_MapA1/Actor/ActorUnkNSSW.cpp +++ b/src/032_MapA1/Actor/ActorUnkNSSW.cpp @@ -30,7 +30,7 @@ void ActorUnkNSSW::func_ov032_02120b6c(void) {} void ActorUnkNSSW::func_ov032_02120b7c(void) {} void ActorUnkNSSW::func_ov032_02120bc0(void) {} void ActorUnkNSSW::func_ov032_02120bfc(void) {} -void ActorUnkNSSW::func_ov032_02120c64(void) {} +void ActorUnkNSSW::func_ov032_02120c64(MapObjectUnkSWSW *param1) {} void ActorUnkNSSW::func_ov032_02120cf0(void) {} void ActorUnkNSSW::func_ov032_02120d24(void) {} void ActorUnkNSSW::func_ov032_02120d60(void) {} diff --git a/src/032_MapA1/MapObject/MapObjectUnkSWSW.cpp b/src/032_MapA1/MapObject/MapObjectUnkSWSW.cpp index b2f6af24..9110be22 100644 --- a/src/032_MapA1/MapObject/MapObjectUnkSWSW.cpp +++ b/src/032_MapA1/MapObject/MapObjectUnkSWSW.cpp @@ -1,32 +1,522 @@ -//! TODO: This file was generated automatically and might contain errors +#define VECFX32_CTORS #include "MapObject/MapObjectUnkSWSW.hpp" + +#include "Actor/Actor.hpp" +#include "Actor/ActorManager.hpp" +#include "Actor/ActorUnkNSSW.hpp" +#include "System/Random.hpp" #include "System/SysNew.hpp" +#include "Unknown/UnkStruct_027e09a8.hpp" +#include "Unknown/UnkStruct_027e0cd8.hpp" + +extern "C" char data_ov032_02121ef4; +extern "C" char data_ov032_02121f04; +extern "C" unk32 data_ov032_02121f14; // ig these variables should be 0x10-byte long +extern "C" unk32 data_ov032_02121f24; // same as above +extern "C" MapObjectProfile_Derived2_20_Base data_ov032_02122ad8; +extern "C" MapObject_10 data_ov032_02122b8c; + +extern "C" void func_01ff9218(fx32 *, fx32, fx32); +extern "C" void func_01ff91b8(unk16 *, fx32, fx32); +extern "C" fx32 func_01ffbbe0(fx32 x, fx32 z); +extern "C" void func_01ffedac(Vec2bCpp *, VecFx32 *); +extern "C" fx32 func_02015a18(u16, unk32, unk32, unk32, u16, unk32, unk32); +extern "C" unk32 func_02016ae0(VecFx32 *, VecFx32 *, UnkAngleStruct, unk32, unk32); DECL_PROFILE(MapObjectProfileUnkSWSW); MapObject *MapObjectProfileUnkSWSW::Create() { - return new(HeapIndex_2) MapObjectUnkSWSW(); + return new(HeapIndex_ITCM) MapObjectUnkSWSW(); } MapObjectProfileUnkSWSW::MapObjectProfileUnkSWSW() : - MapObjectProfile(MapObjectId_SWSW) {} + MapObjectProfileUnkSWSW_Base(MapObjectId_SWSW) { + this->mUnk_D4.mUnk_08 = 0x7007; -MapObjectUnkSWSW::MapObjectUnkSWSW() {} + VecFx32_Init(FLOAT_TO_FX32(-0.5002f), FLOAT_TO_FX32(-1.0002), FLOAT_TO_FX32(-1.0002), &this->mUnk_D4.mUnk_0C); + VecFx32_Init(FLOAT_TO_FX32(0.5f), FLOAT_TO_FX32(1.0f), FLOAT_TO_FX32(0.0f), &this->mUnk_D4.mUnk_18); -void MapObjectUnkSWSW::func_ov032_02120f78(void) {} -void MapObjectUnkSWSW::func_ov032_02120fe4(void) {} -void MapObjectUnkSWSW::func_ov032_021210a0(void) {} -void MapObjectUnkSWSW::func_ov032_021211c8(void) {} -void MapObjectUnkSWSW::func_ov032_021211dc(void) {} -void MapObjectUnkSWSW::func_ov032_0212141c(void) {} -void MapObjectUnkSWSW::func_ov032_021218d0(void) {} -void MapObjectUnkSWSW::func_ov032_02121b48(void) {} -void MapObjectUnkSWSW::func_ov032_02121b90(void) {} -void MapObjectUnkSWSW::func_ov032_02121c18(void) {} -void MapObjectUnkSWSW::func_ov032_02121d70(void) {} -void MapObjectUnkSWSW::func_ov032_02121dc8(void) {} -void MapObjectUnkSWSW::func_ov032_02121e94(void) {} + this->mUnk_D4.mUnk_04 |= 0x2; + this->mUnk_06 = -0x1; + this->mUnk_1E &= 0xFFFE; + this->mUnk_20.mUnk_15 = 0x1; +} -MapObjectUnkSWSW::~MapObjectUnkSWSW() {} -MapObjectProfileUnkSWSW::~MapObjectProfileUnkSWSW() {} +MapObjectUnkSWSW_40::MapObjectUnkSWSW_40(G3d_Model *pModel) : + ModelRender(pModel), + mUnk_60(0x0), + mUnk_64(0x0), + mUnk_68(0x0), + mUnk_6A(0x0) { + + this->mUnk_60 = this->ModelRenderBase::func_ov000_02057f18(&data_ov032_02121f14); + this->mUnk_64 = this->ModelRenderBase::func_ov000_02057f18(&data_ov032_02121f24); + + this->ModelRender::func_ov000_02057c38(0x6, 0x2); +} + +void MapObjectUnkSWSW_40::vfunc_1C(UnkSystem4_vfunc_1C *param1) { + if (param1->mUnk_00[0x1] == this->mUnk_60) { + param1->mUnk_B4->mUnk_00 &= ~0x2; + Mat3p_InitXRotation(¶m1->mUnk_B4->mUnk_28, SIN((u16) this->mUnk_68), COS((u16) this->mUnk_68)); + } + + if (param1->mUnk_00[0x1] != this->mUnk_64) { + return; + } + param1->mUnk_B4->mUnk_00 &= ~0x2; + Mat3p_InitXRotation(¶m1->mUnk_B4->mUnk_28, SIN((u16) this->mUnk_6A), COS((u16) this->mUnk_6A)); +} + +struct UnkStruct_ov032_021210a0 { + /* 00 */ s16 mUnk_00; + /* 02 */ s16 mUnk_02; + /* 04 */ u16 mUnk_04; + /* 06 */ u16 mUnk_06; + /* 08 */ +}; + +// non-matching (stack not used) +void MapObjectUnkSWSW_40::func_ov032_021210a0(fx32 param1) { + UnkStruct_ov032_021210a0 stack; + if (param1 < 0) { + param1 = 0; + } + if (param1 > 0x1000) { + param1 = 0x1000; + } + fx32 temp_r2 = -0xB6 - (((param1 * 0xE39) << 0x4) >> 0x10); + fx32 temp_r1 = (param1 << 0xD) >> 0xC; + stack.mUnk_06 = temp_r2; + stack.mUnk_04 = temp_r1; + stack.mUnk_02 = stack.mUnk_06; + stack.mUnk_00 = stack.mUnk_04; + this->mUnk_68 = stack.mUnk_02; + this->mUnk_6A = stack.mUnk_00; +} + +MapObjectUnkSWSW::MapObjectUnkSWSW() : + mUnk_040(G3d_GetUnkPtr(GET_PROFILE(MapObjectProfileUnkSWSW)->mUnk_20.mUnk_50, &data_ov032_02121ef4)), + mUnk_0AC(&this->mUnk_0CC, NULL), + mUnk_0EC(FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.5f), FLOAT_TO_FX32(-0.4202f)), + mUnk_0F8(NULL), + mUnk_0FC(0x4), + mUnk_100(0x0), + mUnk_102(0x0), + mUnk_104(0x0), + mUnk_105(0x0), + mUnk_10C(0x0), + mUnk_10E(0x0), + mUnk_110(0x0), + mUnk_114(NULL) { + this->mUnk_10 = &data_ov032_02122b8c; +} + +bool MapObjectUnkSWSW::vfunc_00() { + Vec2bCpp sp00; + + UnkStruct_027e0cd8_0C_Base *data_027e0cd8_0C = data_027e0cd8->mUnk_0C; + + func_01ffedac(&sp00, &this->mPos); + if (data_027e0cd8_0C->func_ov000_02080180(&sp00) == 0x14) { + this->mPos.y = FLOAT_TO_FX32(0.0f); + } + + if (this->mUnk_20.mParams[2] != 0x0) { + this->mPos.y += MUL_FX32(this->mUnk_20.mParams[2] << 0xC, 0x1333); + } + + this->mUnk_0AC.mpModel = this->mUnk_040.mpModel; + unk32 param2 = data_ov032_02122ad8.func_ov000_02058a24(); + UnkStruct_ov000_02058a84 *param1 = data_ov032_02122ad8.func_ov000_02058a84(0x3, &data_ov032_02121f04); + + this->mUnk_0AC.func_ov000_020577a4(param1, param2, 0x1); + + this->mUnk_040.func_ov000_02057cb0(); + this->mUnk_040.func_ov000_02057c98(&this->mUnk_0AC); + + this->mUnk_0AC.func_ov000_020577f8(0x0); + + this->mUnk_104 = 0x0; + this->mUnk_105 = 0x0; + + if (this->mUnk_20.mParams[3] == 0x1 || this->mUnk_20.mParams[3] == 0x3) { + this->mUnk_104 = 0x1; + } + + if ((u16) (this->mUnk_20.mParams[3] + 0xFFFE) <= 0x1) { + this->mUnk_105 = 0x1; + } + + if (this->mUnk_105 != 0x0 && this->MapObject::func_ov000_0209d29c(0x1)) { + this->vfunc_3C(0x3); + return true; + } + + if (this->mUnk_20.mParams[0] == 0x0) { + VecFx32 sp04; + VecFx32_Init(this->mPos.x + this->mUnk_0EC.x, this->mPos.y + this->mUnk_0EC.y, this->mPos.z + this->mUnk_0EC.z, &sp04); + + ActorUnkNSSW *actorNSSW = this->func_ov032_02121dc8(&sp04); + this->mUnk_0F8 = actorNSSW; + this->mUnk_114 = actorNSSW; + + this->vfunc_3C(0x0); + + this->mUnk_108 = FLOAT_TO_FX32(0.0f); + + this->MapObject::func_ov000_0209d2c4(0x1, true); + + if (this->mUnk_104 != 0x0) { + this->MapObject::func_ov000_0209d2c4(0x0, false); + } + } else { + this->vfunc_3C(0x2); + + this->mUnk_108 = FLOAT_TO_FX32(1.0f); + + this->MapObject::func_ov000_0209d2c4(0x0, true); + + if (this->mUnk_104 != 0x0) { + this->MapObject::func_ov000_0209d2c4(0x1, false); + } + } + + return true; +} + +// non-matching +void MapObjectUnkSWSW::vfunc_08() { + switch (this->mUnk_0FC) { + case 0x0: + func_01ff9218(&this->mUnk_108, 0x0, 0x99A); + func_01ff91b8(&this->mUnk_10C, 0x0, 0x4CD); + break; + + case 0x2: { + if (this->mUnk_102 != 0x0 && this->mUnk_100 >= this->mUnk_102) { + this->MapObject::func_ov000_0209d2c4(0x0, true); + + if (this->mUnk_104 != 0x0) { + this->MapObject::func_ov000_0209d2c4(0x1, false); + } + } + + if (this->mUnk_0F8 == NULL && this->mUnk_20.mParams[1] != 0x0) { + this->vfunc_3C(0x1); + return; + } + + VecFx32 *vec = data_027e0ce0->func_01fff148(0x0); + VecFx32 sp48; + VecFx32_Init(vec->x - this->mPos.x, vec->y - this->mPos.y, vec->z - this->mPos.z, &sp48); + VecFx32_Normalize(&sp48, &sp48); + + VecFx32 sp3C; + VecFx32_Init(FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(1.0f), &sp3C); + + bool var_r5 = false; + if (VecFx32_Dot(&sp48, &sp3C) > FLOAT_TO_FX32(0.4f)) { + s16 param = (s16) func_01ffbbe0(sp48.x, sp48.z); + func_01ff91b8(&this->mUnk_10C, param, 0x333); + + var_r5 = true; + } else { + func_01ff91b8(&this->mUnk_10C, 0x0, 0x333); + } + + if (var_r5 && this->mUnk_110 != 0x0) { + fx16 var_r3 = COS((u16) (this->mUnk_10E * 0xFFFF / this->mUnk_110)); + + if (var_r3 < 0) { + var_r3 = -var_r3; + } + + this->mUnk_108 = var_r3; + + if (this->mUnk_10E < this->mUnk_110) { + ++this->mUnk_10E; + } + + if (this->mUnk_10E >= this->mUnk_110) { + this->mUnk_110 = 0x0; + this->mUnk_10E = 0x0; + } + } else { + if (gRandom.Next32(0x33) != 0x0) { + this->mUnk_110 = 0x0; + } else { + this->mUnk_110 = gRandom.Next32(0x29) + 0xA; + } + + this->mUnk_10E = 0x0; + + if (!var_r5) { + this->mUnk_110 = 0x0; + this->mUnk_10E = 0x0; + func_01ff9218(&this->mUnk_108, 0x0, 0x800); + } else { + func_01ff9218(&this->mUnk_108, 0x1000, 0x800); + } + } + break; + } + + case 0x1: { + VecFx32 sp30; + VecFx32 sp24; + VecFx32 sp18; + VecFx32 sp0C; + if (this->mUnk_100 >= this->mUnk_102) { + VecFx32_Init(this->mPos.x + this->mUnk_0EC.x, this->mPos.y + this->mUnk_0EC.y, this->mPos.z + this->mUnk_0EC.z, + &sp30); + sp18 = sp30; + + ActorUnkNSSW *actorNSSW = this->mUnk_0F8; + VecFx32_Copy(&sp18, &actorNSSW->mPos); + VecFx32_Copy(&sp18, &actorNSSW->mPrevPos); + + this->MapObject::func_ov000_0209d2c4(0x1, true); + if (this->mUnk_104 != 0x0) { + this->MapObject::func_ov000_0209d2c4(0x0, false); + } + + this->vfunc_3C(0x0); + } else { + fx32 z = this->mPos.z + this->mUnk_0EC.z + + func_02015a18(this->mUnk_100 << 0xC, 0, -0x1000, 0, this->mUnk_102 << 0xC, 0, 0); + VecFx32_Init(this->mPos.x + this->mUnk_0EC.x, this->mPos.y + this->mUnk_0EC.y, z, &sp24); + + sp0C = sp24; + + ActorUnkNSSW *actorNSSW = this->mUnk_0F8; + VecFx32_Copy(&sp0C, &actorNSSW->mPos); + VecFx32_Copy(&sp0C, &actorNSSW->mPrevPos); + } + break; + } + + case 0x3: + func_01ff9218(&this->mUnk_108, 0x0, 0x99A); + func_01ff91b8(&this->mUnk_10C, 0x0, 0x4CD); + break; + + default: + break; + } + + this->IsInternalTimerOut(); + this->mUnk_040.func_ov032_021210a0(this->mUnk_108); + + if (this->mUnk_10C > 0x2AAB) { + this->mUnk_10C = 0x2AAB; + } + + if (this->mUnk_10C < -0x2AAB) { + this->mUnk_10C = -0x2AAB; + } + + if (this->mUnk_114 != NULL) { + (*(u16 *) &this->mUnk_20.mUnk_08) = this->mUnk_10C; + } + this->mAngle = this->mUnk_10C; +} + +bool MapObjectUnkSWSW::vfunc_1C(ActorRef param1, unk32 param2, VecFx32 *param3) { + if (this->mUnk_0FC != 0x2) { + if (param1.type != 0x0) { + Actor *actor = gpActorManager->func_01fff3b4(param1); + + if (actor != NULL) { + if (actor->GetActorId() == ActorId_NSSW) { + return false; + } + } + } + + return true; + } + + if (param1.type != 0x0) { + ActorUnkNSSW *actorNSSW = (ActorUnkNSSW *) gpActorManager->func_01fff3b4(param1); + + if (actorNSSW != NULL) { + if (actorNSSW->GetActorId() == ActorId_NSSW) { + if (actorNSSW->mUnk_0BC != 0x4) { + return true; + } + + UnkAngleStruct angle = {.angle = actorNSSW->mAngle}; + VecFx32 *vec = data_027e0ce0->func_01fff148(0x0); + + if (!func_02016ae0(&actorNSSW->mPos, vec, angle, 0x2AAB, 0x1)) { + return false; + } + + this->mUnk_114 = actorNSSW; + actorNSSW->func_ov032_02120c64(this); + + VecFx32 sp14; + VecFx32 sp08; + + VecFx32_Init(this->mPos.x + this->mUnk_0EC.x, this->mPos.y + this->mUnk_0EC.y, this->mPos.z + this->mUnk_0EC.z, + &sp14); + sp08 = sp14; + + ActorUnkNSSW *nssw114 = this->mUnk_114; + VecFx32_Init(sp08.x, sp08.y, sp08.z, &nssw114->mPos); + VecFx32_Init(sp08.x, sp08.y, sp08.z, &nssw114->mPrevPos); + + this->vfunc_3C(0x0); + + this->MapObject::func_ov000_0209d2c4(0x1, true); + + if (this->mUnk_104 != 0x0) { + this->MapObject::func_ov000_0209d2c4(0x0, false); + } + + data_027e09a8->func_ov000_02071b30(0x12A, &this->mPos, 0x0); + + if (this->mUnk_105 != 0x0) { + data_027e09a8->func_ov000_02071b30(0x12B, &this->mPos, 0x0); + + this->vfunc_3C(0x3); + } + + return false; + } + } + } + + return true; +} + +void MapObjectUnkSWSW::vfunc_38() { + if (this->mUnk_0FC == 0x3) { + this->mUnk_114 = NULL; + return; + } + + this->vfunc_3C(0x2); + + this->mUnk_102 = 0xF; + this->mUnk_100 = 0x0; + this->mUnk_114 = NULL; +} + +void MapObjectUnkSWSW::func_ov032_02121b90() { + this->mUnk_0F8 = NULL; + + if (this->mUnk_114 != NULL) { + if (this->mUnk_114->mUnk_184_eur != NULL && this != this->mUnk_114->mUnk_184_eur) { + this->mUnk_114->mUnk_184_eur->func_ov032_02121b90(); + } + + this->mUnk_0F8 = this->mUnk_114; + this->mUnk_114->mUnk_184_eur = this; + this->mUnk_0F8->mUnk_188_eur = this; + + this->vfunc_3C(0x0); + return; + } + + if (this->mUnk_0FC != 0x2) { + return; + } + + if (this->mUnk_20.mParams[1] == 0x0) { + return; + } + + this->vfunc_3C(0x1); +} + +// non-matching (last copies) +void MapObjectUnkSWSW::vfunc_3C(unk32 param1) { + this->mUnk_0FC = param1; + this->mUnk_102 = 0xFFFF; + this->mUnk_100 = 0x0000; + + switch (param1) { + case 0x2: + this->mUnk_102 = 0x0; + this->mUnk_100 = 0x0; + this->mUnk_0AC.func_ov000_020577f8(0x1000); + break; + + case 0x1: { + VecFx32 sp18; + VecFx32 sp0C; + VecFx32 sp00; + + VecFx32_Init(this->mPos.x + this->mUnk_0EC.x, this->mPos.y + this->mUnk_0EC.y, this->mPos.z + this->mUnk_0EC.z, + &sp0C); + + ActorUnkNSSW *actorNSSW = this->func_ov032_02121dc8(&sp0C); + this->mUnk_0F8 = actorNSSW; + this->mUnk_114 = actorNSSW; + + this->mUnk_102 = 0x28; + this->mUnk_100 = 0x00; + + this->mUnk_0AC.func_ov000_020577f8(0x1000); + + VecFx32_Init(this->mPos.x + this->mUnk_0EC.x, this->mPos.y + this->mUnk_0EC.y, + this->mPos.z + this->mUnk_0EC.z - FLOAT_TO_FX32(1.0f), &sp18); + sp00 = sp18; + + ActorUnkNSSW *nssw0F8 = this->mUnk_0F8; + VecFx32_Copy(&sp00, &nssw0F8->mPos); + VecFx32_Copy(&sp00, &nssw0F8->mPrevPos); + break; + } + + case 0x0: + this->mUnk_0AC.func_ov000_020577f8(0x1000); + break; + + case 0x3: + this->mUnk_0AC.func_ov000_020577f8(0x0); + break; + + default: + break; + } +} + +void MapObjectUnkSWSW::vfunc_14() { + VecFx32 vec; + VecFx32_Init(this->mPos.x + this->mUnk_0EC.x, this->mPos.y + this->mUnk_0EC.y, this->mPos.z + this->mUnk_0EC.z, &vec); + + this->mUnk_040.func_01ffc6d4(this->mAngleStruct, &vec); +} + +struct UnkStack_ov032_02121dc8 { + /* 00 */ ActorRef ref; + /* 04 */ STRUCT_PAD(0x04, 0x08); + /* 08 */ +}; + +// non-matching (vec copy) +ActorUnkNSSW *MapObjectUnkSWSW::func_ov032_02121dc8(VecFx32 *param1) { + ActorParams params; + UnkStack_ov032_02121dc8 unk; + + params.mUnk_28 = 0; + params.func_ov000_020975f8(); + + params.mInitialAngle = this->mAngle; + params.mUnk_28 = *(unk32 *) &this->mUnk_38; + + VecFx32_Init(param1->x, param1->y, param1->z, ¶ms.mInitialPos); + + Actor::func_ov000_020973f4(&unk.ref, &data_ov000_020b539c_eur, ActorId_NSSW, ¶ms, 0x0); + + ActorUnkNSSW *actor = (ActorUnkNSSW *) gpActorManager->func_01fff3b4(unk.ref); + + actor->mUnk_184_eur = this; + actor->mUnk_188_eur = this; + + return actor; +} diff --git a/src/063_Shrine/Actor/ActorUnkCANS.cpp b/src/063_Shrine/Actor/ActorUnkCANS.cpp index a4ed7e49..7a7bc260 100644 --- a/src/063_Shrine/Actor/ActorUnkCANS.cpp +++ b/src/063_Shrine/Actor/ActorUnkCANS.cpp @@ -51,7 +51,6 @@ extern "C" void func_01ffad5c(Mat4x3p *, Mat4x3p *, Mat4x3p *); extern "C" fx32 func_01ffb428(unk32, unk32); extern "C" void func_01ffb714(VecFx32 *, VecFx32 *, VecFx32 *); extern "C" unk32 func_01ffbbe0(fx32 param1, fx32 param2); -extern "C" void func_01ffc6d4(ModelRender *param1, UnkAngleStruct param2, VecFx32 *param3); extern "C" void func_0200eab0(G3d_Model *, unk32, u8); // Overlay 0 @@ -453,7 +452,7 @@ void ActorUnkCANS::vfunc_2C(unk32 param1) { return; } - ((UnkSystem6_Derived2 *) &mUnk_0B0)->func_01ffc6d4(mAngleStruct, &mPos); + mUnk_0B0.func_01ffc6d4(mAngleStruct, &mPos); if (mUnk_268 != NULL) { VecFx32 vec;