From 0fe5959c6d3f56fbfd77dcfc370ec002e8921d83 Mon Sep 17 00:00:00 2001 From: Alessevan <44125445+Alessevan@users.noreply.github.com> Date: Fri, 17 Jul 2026 18:49:02 +0200 Subject: [PATCH] Decompiling part of ActorUnkITTD (#111) * feat: update * feat: update * feat: cleanup * feat: rc * refactor: rename UnkITTD to ItemTornado --- config/eur/arm9/itcm/symbols.txt | 2 +- config/eur/arm9/overlays/ov000/symbols.txt | 4 +- config/eur/arm9/overlays/ov031/delinks.txt | 3 +- config/eur/arm9/overlays/ov031/relocs.txt | 4 +- config/eur/arm9/overlays/ov031/symbols.txt | 60 ++-- config/jp/arm9/itcm/symbols.txt | 2 +- config/jp/arm9/overlays/ov031/delinks.txt | 2 +- config/jp/arm9/overlays/ov031/symbols.txt | 46 +-- include/Actor/ActorItemTornado.hpp | 75 +++++ include/Actor/ActorUnkITTD.hpp | 53 --- include/Physics/Cylinder.hpp | 8 + include/Render/ModelRender.hpp | 2 + include/Unknown/Common.hpp | 7 +- include/Unknown/UnkStruct_027e0958.hpp | 4 +- include/Unknown/UnkStruct_027e0d38.hpp | 1 + include/Unknown/UnkStruct_ov000_020b4ec4.hpp | 2 + include/Unknown/UnkStruct_ov031_Items.hpp | 6 +- src/031_Land/Actor/ActorItemBoomerang.cpp | 38 +-- src/031_Land/Actor/ActorItemTornado.cpp | 325 +++++++++++++++++++ src/031_Land/Actor/ActorRollingStone.cpp | 23 +- src/031_Land/Actor/ActorShotArrow.cpp | 19 +- src/031_Land/Actor/ActorUnkITTD.cpp | 31 -- src/110_PlayerGet/PlayerGet.cpp | 5 +- tools/configure.py | 2 +- 24 files changed, 526 insertions(+), 198 deletions(-) create mode 100644 include/Actor/ActorItemTornado.hpp delete mode 100644 include/Actor/ActorUnkITTD.hpp create mode 100644 src/031_Land/Actor/ActorItemTornado.cpp delete mode 100644 src/031_Land/Actor/ActorUnkITTD.cpp diff --git a/config/eur/arm9/itcm/symbols.txt b/config/eur/arm9/itcm/symbols.txt index 4553694c..37464969 100644 --- a/config/eur/arm9/itcm/symbols.txt +++ b/config/eur/arm9/itcm/symbols.txt @@ -130,7 +130,7 @@ func_01ffc5a0 kind:function(arm,size=0x94) addr:0x01ffc5a0 func_01ffc634 kind:function(arm,size=0xa0) addr:0x01ffc634 _ZN19UnkSystem6_Derived213func_01ffc6d4EtP7VecFx32 kind:function(arm,size=0x70) addr:0x01ffc6d4 func_01ffc744 kind:function(arm,size=0x24) addr:0x01ffc744 -func_01ffc768 kind:function(arm,size=0x3c) addr:0x01ffc768 +_ZN24UnkStruct_ov000_020b4ec413func_01ffc768Ei kind:function(arm,size=0x3c) addr:0x01ffc768 _ZN20ModelRender_Derived18vfunc_1CEP19UnkSystem4_vfunc_1C kind:function(arm,size=0xb4) addr:0x01ffc7a4 func_01ffc858 kind:function(arm,size=0x88) addr:0x01ffc858 func_01ffc8e0 kind:function(arm,size=0x2b4) addr:0x01ffc8e0 diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 7141dd3e..a24c6295 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -100,7 +100,7 @@ func_ov000_02057c14 kind:function(arm,size=0x20) addr:0x02057c14 _ZN11ModelRender8vfunc_1CEP19UnkSystem4_vfunc_1C kind:function(arm,size=0x4) addr:0x02057c34 _ZN11ModelRender19func_ov000_02057c38Eii 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 +_ZN11ModelRender19func_ov000_02057c98EP10UnkSystem5 kind:function(arm,size=0x18) addr:0x02057c98 func_ov000_02057cb0 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 @@ -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 -func_ov000_02058fc4 kind:function(arm,size=0x34) addr:0x02058fc4 +_ZN18UnkStruct_027e095819func_ov000_02058fc4EP7VecFx32S1_ 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 diff --git a/config/eur/arm9/overlays/ov031/delinks.txt b/config/eur/arm9/overlays/ov031/delinks.txt index 1f3ef488..616d9281 100644 --- a/config/eur/arm9/overlays/ov031/delinks.txt +++ b/config/eur/arm9/overlays/ov031/delinks.txt @@ -33,10 +33,11 @@ src/031_Land/Actor/ActorItemBoomerang.cpp: .data start:0x02112efc end:0x02112fd0 .bss start:0x021164e8 end:0x02116534 -src/031_Land/Actor/ActorUnkITTD.cpp: +src/031_Land/Actor/ActorItemTornado.cpp: .text start:0x020e58c8 end:0x020e64d8 .init start:0x02111138 end:0x021111ac .ctor start:0x021127ac end:0x021127b0 + .data start:0x02112fec end:0x02113088 .bss start:0x02116534 end:0x02116580 src/031_Land/Actor/ActorUnkSWBM.cpp: diff --git a/config/eur/arm9/overlays/ov031/relocs.txt b/config/eur/arm9/overlays/ov031/relocs.txt index d1883d9a..6af2648b 100644 --- a/config/eur/arm9/overlays/ov031/relocs.txt +++ b/config/eur/arm9/overlays/ov031/relocs.txt @@ -1445,7 +1445,7 @@ from:0x020e5ae4 kind:arm_call to:0x02057c98 module:overlay(0) from:0x020e5b00 kind:load to:0x0211302c add:0x8 module:overlay(31) from:0x020e5b04 kind:load to:0x02110a88 module:overlay(31) from:0x020e5b08 kind:load to:0x027e0ce0 module:dtcm -from:0x020e5b0c kind:load to:0x02112ff4 module:overlay(31) +from:0x020e5b0c kind:load to:0x02112fec module:overlay(31) add:0x8 from:0x020e5b10 kind:load to:0x02112fd0 add:0x8 module:overlay(31) from:0x020e5b14 kind:load to:0x020b27c8 module:overlay(0) from:0x020e5b18 kind:load to:0x020a02d4 module:overlay(0) @@ -1527,7 +1527,7 @@ from:0x020e6628 kind:arm_call to:0x020f409c module:overlay(31) from:0x020e66ac kind:arm_call to:0x021875e8 module:overlay(105) from:0x020e66b4 kind:arm_call to:0x0218795c module:overlay(105) from:0x020e66e0 kind:load to:0x021130a4 add:0x8 module:overlay(31) -from:0x020e66e4 kind:load to:0x02113090 module:overlay(31) +from:0x020e66e4 kind:load to:0x02113088 module:overlay(31) add:0x8 from:0x020e66f4 kind:arm_call to:0x0207bffc module:overlay(0) from:0x020e6708 kind:arm_call to:0x0207b6c0 module:overlay(0) from:0x020e6728 kind:arm_call to:0x020e67dc module:overlay(31) diff --git a/config/eur/arm9/overlays/ov031/symbols.txt b/config/eur/arm9/overlays/ov031/symbols.txt index c09436a9..3b880a09 100644 --- a/config/eur/arm9/overlays/ov031/symbols.txt +++ b/config/eur/arm9/overlays/ov031/symbols.txt @@ -100,7 +100,7 @@ func_ov031_020d9ba8 kind:function(thumb,size=0xc) addr:0x020d9ba8 func_ov031_020d9bb4 kind:function(thumb,size=0xc) addr:0x020d9bb4 func_ov031_020d9bc0 kind:function(arm,size=0x10) addr:0x020d9bc0 func_ov031_020d9bd0 kind:function(thumb,size=0x1a) addr:0x020d9bd0 -func_ov031_020d9bec kind:function(arm,size=0x18) addr:0x020d9bec +_ZN18UnkStruct_027e0d3819func_ov031_020d9becEv kind:function(arm,size=0x18) addr:0x020d9bec _ZN18UnkStruct_027e0d3819func_ov031_020d9c04Eiii kind:function(arm,size=0x10) addr:0x020d9c04 func_ov031_020d9c14 kind:function(arm,size=0x20) addr:0x020d9c14 func_ov031_020d9c34 kind:function(arm,size=0x10) addr:0x020d9c34 @@ -449,28 +449,28 @@ _ZN26ActorItemBoomerang_Unknown19func_ov031_020e5704Ev kind:function(arm,size=0x _ZN21ActorItemBoomerang_A0D0Ev kind:function(arm,size=0x1c) addr:0x020e5710 _ZN21ActorItemBoomerang_CCD0Ev kind:function(arm,size=0x1c) addr:0x020e572c _ZN25ActorProfileItemBoomerangD1Ev kind:function(arm,size=0x14) addr:0x020e5748 -func_ov031_020e575c kind:function(arm,size=0x28) addr:0x020e575c -func_ov031_020e5784 kind:function(arm,size=0x114) addr:0x020e5784 +_ZN24UnkStruct_ov031_02112ff48vfunc_08EPK24UnkStruct_ov031_020f3310 kind:function(arm,size=0x28) addr:0x020e575c +_ZN24UnkStruct_ov031_02112ff48vfunc_0CEPK24UnkStruct_ov031_020e54d4i kind:function(arm,size=0x114) addr:0x020e5784 func_ov031_020e5898 kind:function(arm,size=0x30) addr:0x020e5898 -_ZN19ActorProfileUnkITTD10GetProfileEv kind:function(arm,size=0xc) addr:0x020e58c8 -_ZN19ActorProfileUnkITTD6CreateEv kind:function(arm,size=0x24) addr:0x020e58d4 -_ZN19ActorProfileUnkITTDC1Ev kind:function(arm,size=0x44) addr:0x020e58f8 -_ZN12ActorUnkITTDC1Ev kind:function(arm,size=0x1e4) addr:0x020e593c -_ZN12ActorUnkITTD19func_ov031_020e5b20Ev kind:function(arm,size=0x14) addr:0x020e5b20 -_ZN12ActorUnkITTD19func_ov031_020e5b34Ev kind:function(arm,size=0xcc) addr:0x020e5b34 -_ZN12ActorUnkITTD19func_ov031_020e5c00Ev kind:function(arm,size=0x118) addr:0x020e5c00 -_ZN12ActorUnkITTD19func_ov031_020e5d18Ev kind:function(arm,size=0x430) addr:0x020e5d18 -_ZN12ActorUnkITTD19func_ov031_020e6148Ev kind:function(arm,size=0x10) addr:0x020e6148 -_ZN12ActorUnkITTD19func_ov031_020e6158Ev kind:function(arm,size=0x44) addr:0x020e6158 -_ZN12ActorUnkITTD19func_ov031_020e619cEv kind:function(arm,size=0x124) addr:0x020e619c -_ZN12ActorUnkITTD19func_ov031_020e62c0Ev kind:function(arm,size=0x54) addr:0x020e62c0 -_ZN12ActorUnkITTD19func_ov031_020e6314Ev kind:function(arm,size=0x2c) addr:0x020e6314 -_ZN12ActorUnkITTD19func_ov031_020e6340Ev kind:function(arm,size=0x58) addr:0x020e6340 -_ZN12ActorUnkITTD19func_ov031_020e6398Ev kind:function(arm,size=0x78) addr:0x020e6398 -_ZN12ActorUnkITTDD0Ev kind:function(arm,size=0x1c) addr:0x020e6410 -_ZN12ActorUnkITTDD1Ev kind:function(arm,size=0x48) addr:0x020e642c -_ZN12ActorUnkITTD19func_ov031_020e6474Ev kind:function(arm,size=0x50) addr:0x020e6474 -_ZN19ActorProfileUnkITTDD1Ev kind:function(arm,size=0x14) addr:0x020e64c4 +_ZN23ActorProfileItemTornado10GetProfileEv kind:function(arm,size=0xc) addr:0x020e58c8 +_ZN23ActorProfileItemTornado6CreateEv kind:function(arm,size=0x24) addr:0x020e58d4 +_ZN23ActorProfileItemTornadoC1Ev kind:function(arm,size=0x44) addr:0x020e58f8 +_ZN16ActorItemTornadoC1Ev kind:function(arm,size=0x1e4) addr:0x020e593c +_ZN24UnkStruct_ov031_02112ff4D1Ev kind:function(arm,size=0x14) addr:0x020e5b20 +_ZN16ActorItemTornado8vfunc_18Ei kind:function(arm,size=0xcc) addr:0x020e5b34 +_ZN16ActorItemTornado8SetStateEs kind:function(arm,size=0x118) addr:0x020e5c00 +_ZN16ActorItemTornado19func_ov031_020e5d18Ei kind:function(arm,size=0x430) addr:0x020e5d18 +_ZN16ActorItemTornado8vfunc_20Ev kind:function(arm,size=0x10) addr:0x020e6148 +_ZN16ActorItemTornado8vfunc_24Ev kind:function(arm,size=0x44) addr:0x020e6158 +_ZN16ActorItemTornado8vfunc_2CEi kind:function(arm,size=0x124) addr:0x020e619c +_ZN16ActorItemTornado19func_ov031_020e62c0Ev kind:function(arm,size=0x54) addr:0x020e62c0 +_ZN16ActorItemTornado19func_ov031_020e6314Et kind:function(arm,size=0x2c) addr:0x020e6314 +_ZN16ActorItemTornado19func_ov031_020e6340EP7VecFx32ss kind:function(arm,size=0x58) addr:0x020e6340 +_ZN16ActorItemTornado19func_ov031_020e6398Ev kind:function(arm,size=0x78) addr:0x020e6398 +_ZN24UnkStruct_ov031_02112ff4D0Ev kind:function(arm,size=0x1c) addr:0x020e6410 +_ZN16ActorItemTornadoD1Ev kind:function(arm,size=0x48) addr:0x020e642c +_ZN16ActorItemTornadoD0Ev kind:function(arm,size=0x50) addr:0x020e6474 +_ZN23ActorProfileItemTornadoD1Ev kind:function(arm,size=0x14) addr:0x020e64c4 func_ov031_020e64d8 kind:function(arm,size=0x70) addr:0x020e64d8 func_ov031_020e6548 kind:function(arm,size=0xd8) addr:0x020e6548 func_ov031_020e6620 kind:function(arm,size=0xcc) addr:0x020e6620 @@ -2074,7 +2074,7 @@ __sinit_ActorUnkBOMB.cpp kind:function(arm,size=0x50) addr:0x02110ff8 __sinit_ActorUnkBLST.cpp kind:function(arm,size=0x50) addr:0x02111048 __sinit_ActorUnkTLKT.cpp kind:function(arm,size=0x50) addr:0x02111098 __sinit_ActorItemBoomerang.cpp kind:function(arm,size=0x50) addr:0x021110e8 -__sinit_ActorUnkITTD.cpp kind:function(arm,size=0x74) addr:0x02111138 +__sinit_ActorItemTornado.cpp kind:function(arm,size=0x74) addr:0x02111138 __sinit_ActorUnkSWBM.cpp kind:function(arm,size=0x74) addr:0x021111ac __sinit_ActorUnkROCK.cpp kind:function(arm,size=0x50) addr:0x02111220 __sinit_ActorRupee.cpp kind:function(arm,size=0x98) addr:0x02111270 @@ -2138,7 +2138,7 @@ __sinit_MapObjectUnkSWFS.cpp kind:function(arm,size=0x70) addr:0x02112724 .p__sinit_ActorUnkBLST.cpp kind:data(word) addr:0x021127a0 .p__sinit_ActorUnkTLKT.cpp kind:data(word) addr:0x021127a4 .p__sinit_ActorItemBoomerang.cpp kind:data(word) addr:0x021127a8 -.p__sinit_ActorUnkITTD.cpp kind:data(word) addr:0x021127ac +.p__sinit_ActorItemTornado.cpp kind:data(word) addr:0x021127ac .p__sinit_ActorUnkSWBM.cpp kind:data(word) addr:0x021127b0 .p__sinit_ActorUnkROCK.cpp kind:data(word) addr:0x021127b4 .p__sinit_ActorRupee.cpp kind:data(word) addr:0x021127b8 @@ -2264,10 +2264,10 @@ _ZTV25ActorProfileItemBoomerang kind:data(any) addr:0x02112f50 _ZTV18ActorItemBoomerang kind:data(any) addr:0x02112f74 _ZTV19data_ov031_02112fd8 kind:data(any) addr:0x02112fd0 data_ov031_02112fdc kind:data(any) addr:0x02112fdc -data_ov031_02112ff4 kind:data(any) addr:0x02112ff4 -_ZTV19data_ov031_02113008 kind:data(any) addr:0x02113008 -_ZTV19data_ov031_0211302c kind:data(any) addr:0x0211302c -data_ov031_02113090 kind:data(any) addr:0x02113090 +_ZTV24UnkStruct_ov031_02112ff4 kind:data(any) addr:0x02112fec +_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 data_ov031_02113114 kind:data(any) addr:0x02113114 @@ -2532,9 +2532,9 @@ _ZN15ProfileInstanceI19ActorProfileUnkTLKTE8sProfileE kind:bss addr:0x021164ac _ZGVN15ProfileInstanceI25ActorProfileItemBoomerangE8sProfileE kind:bss addr:0x021164e8 @10793 kind:bss addr:0x021164ec _ZN15ProfileInstanceI25ActorProfileItemBoomerangE8sProfileE kind:bss addr:0x021164f8 -_ZGVN15ProfileInstanceI19ActorProfileUnkITTDE8sProfileE kind:bss addr:0x02116534 +_ZGVN15ProfileInstanceI23ActorProfileItemTornadoE8sProfileE kind:bss addr:0x02116534 @10799 kind:bss addr:0x02116538 -_ZN15ProfileInstanceI19ActorProfileUnkITTDE8sProfileE kind:bss addr:0x02116544 +_ZN15ProfileInstanceI23ActorProfileItemTornadoE8sProfileE kind:bss addr:0x02116544 _ZGVN15ProfileInstanceI19ActorProfileUnkSWBME8sProfileE kind:bss addr:0x02116580 @10805 kind:bss addr:0x02116584 _ZN15ProfileInstanceI19ActorProfileUnkSWBME8sProfileE kind:bss addr:0x02116590 diff --git a/config/jp/arm9/itcm/symbols.txt b/config/jp/arm9/itcm/symbols.txt index 4553694c..37464969 100644 --- a/config/jp/arm9/itcm/symbols.txt +++ b/config/jp/arm9/itcm/symbols.txt @@ -130,7 +130,7 @@ func_01ffc5a0 kind:function(arm,size=0x94) addr:0x01ffc5a0 func_01ffc634 kind:function(arm,size=0xa0) addr:0x01ffc634 _ZN19UnkSystem6_Derived213func_01ffc6d4EtP7VecFx32 kind:function(arm,size=0x70) addr:0x01ffc6d4 func_01ffc744 kind:function(arm,size=0x24) addr:0x01ffc744 -func_01ffc768 kind:function(arm,size=0x3c) addr:0x01ffc768 +_ZN24UnkStruct_ov000_020b4ec413func_01ffc768Ei kind:function(arm,size=0x3c) addr:0x01ffc768 _ZN20ModelRender_Derived18vfunc_1CEP19UnkSystem4_vfunc_1C kind:function(arm,size=0xb4) addr:0x01ffc7a4 func_01ffc858 kind:function(arm,size=0x88) addr:0x01ffc858 func_01ffc8e0 kind:function(arm,size=0x2b4) addr:0x01ffc8e0 diff --git a/config/jp/arm9/overlays/ov031/delinks.txt b/config/jp/arm9/overlays/ov031/delinks.txt index f175ab68..461a6580 100644 --- a/config/jp/arm9/overlays/ov031/delinks.txt +++ b/config/jp/arm9/overlays/ov031/delinks.txt @@ -32,7 +32,7 @@ src/031_Land/Actor/ActorItemBoomerang.cpp: .ctor start:0x02114534 end:0x02114538 .bss start:0x02118288 end:0x021182d4 -src/031_Land/Actor/ActorUnkITTD.cpp: +src/031_Land/Actor/ActorItemTornado.cpp: .text start:0x020e72b4 end:0x020e7ec4 .init start:0x02112ea8 end:0x02112f1c .ctor start:0x02114538 end:0x0211453c diff --git a/config/jp/arm9/overlays/ov031/symbols.txt b/config/jp/arm9/overlays/ov031/symbols.txt index 21ed1bef..bc8f43e5 100644 --- a/config/jp/arm9/overlays/ov031/symbols.txt +++ b/config/jp/arm9/overlays/ov031/symbols.txt @@ -452,25 +452,25 @@ _ZN25ActorProfileItemBoomerangD1Ev kind:function(arm,size=0x14) addr:0x020e7134 func_ov031_020e7148 kind:function(arm,size=0x28) addr:0x020e7148 func_ov031_020e7170 kind:function(arm,size=0x114) addr:0x020e7170 func_ov031_020e7284 kind:function(arm,size=0x30) addr:0x020e7284 -_ZN19ActorProfileUnkITTD10GetProfileEv kind:function(arm,size=0xc) addr:0x020e72b4 -_ZN19ActorProfileUnkITTD6CreateEv kind:function(arm,size=0x24) addr:0x020e72c0 -_ZN19ActorProfileUnkITTDC1Ev kind:function(arm,size=0x44) addr:0x020e72e4 -_ZN12ActorUnkITTDC1Ev kind:function(arm,size=0x1e4) addr:0x020e7328 -_ZN12ActorUnkITTD19func_ov031_020e5b20Ev kind:function(arm,size=0x14) addr:0x020e750c -_ZN12ActorUnkITTD19func_ov031_020e5b34Ev kind:function(arm,size=0xcc) addr:0x020e7520 -_ZN12ActorUnkITTD19func_ov031_020e5c00Ev kind:function(arm,size=0x118) addr:0x020e75ec -_ZN12ActorUnkITTD19func_ov031_020e5d18Ev kind:function(arm,size=0x430) addr:0x020e7704 -_ZN12ActorUnkITTD19func_ov031_020e6148Ev kind:function(arm,size=0x10) addr:0x020e7b34 -_ZN12ActorUnkITTD19func_ov031_020e6158Ev kind:function(arm,size=0x44) addr:0x020e7b44 -_ZN12ActorUnkITTD19func_ov031_020e619cEv kind:function(arm,size=0x124) addr:0x020e7b88 -_ZN12ActorUnkITTD19func_ov031_020e62c0Ev kind:function(arm,size=0x54) addr:0x020e7cac -_ZN12ActorUnkITTD19func_ov031_020e6314Ev kind:function(arm,size=0x2c) addr:0x020e7d00 -_ZN12ActorUnkITTD19func_ov031_020e6340Ev kind:function(arm,size=0x58) addr:0x020e7d2c -_ZN12ActorUnkITTD19func_ov031_020e6398Ev kind:function(arm,size=0x78) addr:0x020e7d84 -_ZN12ActorUnkITTDD0Ev kind:function(arm,size=0x1c) addr:0x020e7dfc -_ZN12ActorUnkITTDD1Ev kind:function(arm,size=0x48) addr:0x020e7e18 -_ZN12ActorUnkITTD19func_ov031_020e6474Ev kind:function(arm,size=0x50) addr:0x020e7e60 -_ZN19ActorProfileUnkITTDD1Ev kind:function(arm,size=0x14) addr:0x020e7eb0 +_ZN23ActorProfileItemTornado10GetProfileEv kind:function(arm,size=0xc) addr:0x020e72b4 +_ZN23ActorProfileItemTornado6CreateEv kind:function(arm,size=0x24) addr:0x020e72c0 +_ZN23ActorProfileItemTornadoC1Ev kind:function(arm,size=0x44) addr:0x020e72e4 +_ZN16ActorItemTornadoC1Ev kind:function(arm,size=0x1e4) addr:0x020e7328 +_ZN24UnkStruct_ov031_02112ff4D1Ev kind:function(arm,size=0x14) addr:0x020e750c +_ZN16ActorItemTornado8vfunc_18Ei kind:function(arm,size=0xcc) addr:0x020e7520 +_ZN16ActorItemTornado8SetStateEs kind:function(arm,size=0x118) addr:0x020e75ec +_ZN16ActorItemTornado19func_ov031_020e5d18Ei kind:function(arm,size=0x430) addr:0x020e7704 +_ZN16ActorItemTornado8vfunc_20Ev kind:function(arm,size=0x10) addr:0x020e7b34 +_ZN16ActorItemTornado8vfunc_24Ev kind:function(arm,size=0x44) addr:0x020e7b44 +_ZN16ActorItemTornado8vfunc_2CEi kind:function(arm,size=0x124) addr:0x020e7b88 +_ZN16ActorItemTornado19func_ov031_020e62c0Ev kind:function(arm,size=0x54) addr:0x020e7cac +_ZN16ActorItemTornado19func_ov031_020e6314Et kind:function(arm,size=0x2c) addr:0x020e7d00 +_ZN16ActorItemTornado19func_ov031_020e6340EP7VecFx32ss kind:function(arm,size=0x58) addr:0x020e7d2c +_ZN16ActorItemTornado19func_ov031_020e6398Ev kind:function(arm,size=0x78) addr:0x020e7d84 +_ZN24UnkStruct_ov031_02112ff4D0Ev kind:function(arm,size=0x1c) addr:0x020e7dfc +_ZN16ActorItemTornadoD1Ev kind:function(arm,size=0x48) addr:0x020e7e18 +_ZN16ActorItemTornadoD0Ev kind:function(arm,size=0x50) addr:0x020e7e60 +_ZN23ActorProfileItemTornadoD1Ev kind:function(arm,size=0x14) addr:0x020e7eb0 func_ov031_020e7ec4 kind:function(arm,size=0x70) addr:0x020e7ec4 func_ov031_020e7f34 kind:function(arm,size=0xd8) addr:0x020e7f34 func_ov031_020e800c kind:function(arm,size=0xcc) addr:0x020e800c @@ -2071,7 +2071,7 @@ __sinit_ActorUnkBOMB.cpp kind:function(arm,size=0x50) addr:0x02112d68 __sinit_ActorUnkBLST.cpp kind:function(arm,size=0x50) addr:0x02112db8 __sinit_ActorUnkTLKT.cpp kind:function(arm,size=0x50) addr:0x02112e08 __sinit_ActorItemBoomerang.cpp kind:function(arm,size=0x50) addr:0x02112e58 -__sinit_ActorUnkITTD.cpp kind:function(arm,size=0x74) addr:0x02112ea8 +__sinit_ActorItemTornado.cpp kind:function(arm,size=0x74) addr:0x02112ea8 __sinit_ActorUnkSWBM.cpp kind:function(arm,size=0x74) addr:0x02112f1c __sinit_ActorUnkROCK.cpp kind:function(arm,size=0x50) addr:0x02112f90 __sinit_ActorRupee.cpp kind:function(arm,size=0x98) addr:0x02112fe0 @@ -2135,7 +2135,7 @@ __sinit_MapObjectUnkSWFS.cpp kind:function(arm,size=0x70) addr:0x021144b0 .p__sinit_ActorUnkBLST.cpp kind:data(word) addr:0x0211452c .p__sinit_ActorUnkTLKT.cpp kind:data(word) addr:0x02114530 .p__sinit_ActorItemBoomerang.cpp kind:data(word) addr:0x02114534 -.p__sinit_ActorUnkITTD.cpp kind:data(word) addr:0x02114538 +.p__sinit_ActorItemTornado.cpp kind:data(word) addr:0x02114538 .p__sinit_ActorUnkSWBM.cpp kind:data(word) addr:0x0211453c .p__sinit_ActorUnkROCK.cpp kind:data(word) addr:0x02114540 .p__sinit_ActorRupee.cpp kind:data(word) addr:0x02114544 @@ -2528,9 +2528,9 @@ _ZN15ProfileInstanceI19ActorProfileUnkTLKTE8sProfileE kind:bss addr:0x0211824c _ZGVN15ProfileInstanceI25ActorProfileItemBoomerangE8sProfileE kind:bss addr:0x02118288 @30793 kind:bss addr:0x0211828c _ZN15ProfileInstanceI25ActorProfileItemBoomerangE8sProfileE kind:bss addr:0x02118298 -_ZGVN15ProfileInstanceI19ActorProfileUnkITTDE8sProfileE kind:bss addr:0x021182d4 +_ZGVN15ProfileInstanceI23ActorProfileItemTornadoE8sProfileE kind:bss addr:0x021182d4 @30799 kind:bss addr:0x021182d8 -_ZN15ProfileInstanceI19ActorProfileUnkITTDE8sProfileE kind:bss addr:0x021182e4 +_ZN15ProfileInstanceI23ActorProfileItemTornadoE8sProfileE kind:bss addr:0x021182e4 _ZGVN15ProfileInstanceI19ActorProfileUnkSWBME8sProfileE kind:bss addr:0x02118320 @30805 kind:bss addr:0x02118324 _ZN15ProfileInstanceI19ActorProfileUnkSWBME8sProfileE kind:bss addr:0x02118330 diff --git a/include/Actor/ActorItemTornado.hpp b/include/Actor/ActorItemTornado.hpp new file mode 100644 index 00000000..91bb657c --- /dev/null +++ b/include/Actor/ActorItemTornado.hpp @@ -0,0 +1,75 @@ +#pragma once + +#include "Actor/Actor.hpp" +#include "Actor/ActorProfile.hpp" +#include "Player/PlayerGet.hpp" +#include "global.h" +#include "types.h" + +class UnkStruct_ov031_02112ff4 : public UnkStruct_ov031_Items_00 { +public: + // data_ov031_02112ff4 + /* 08 */ virtual bool vfunc_08(const UnkStruct_ov031_020f3310 *param1); + /* 0C */ virtual bool vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 param2); +}; + +enum ActorItemTornadoState_ { + ActorItemTornadoState_0 = 0, + ActorItemTornadoState_1 = 1, + ActorItemTornadoState_2 = 2, + ActorItemTornadoState_MAX, +}; + +class ActorItemTornado : public Actor { +public: + /* 000 (base) */ + /* 094 */ ModelRender mUnk_94; + /* 0F4 */ UnkSystem5 mUnk_F4; + /* 114 */ unk32 mUnk_114; + /* 118 */ STRUCT_PAD(0x118, 0x134); + /* 134 */ UnkSystem5 mUnk_134; + /* 154 */ unk32 mUnk_154; + /* 158 */ STRUCT_PAD(0x158, 0x174); + /* 174 */ UnkStruct_ov031_02112ff4 mUnk_174; + /* 178 */ STRUCT_PAD(0x178, 0x17C); + /* 17C */ UnkStruct_PlayerGet_74 mUnk_17C; + /* 194 */ UnkStruct_ov031_Items_01 mUnk_194; + /* 1C0 */ VecFx32 mUnk_1C0; + /* 1CC */ u16 mUnk_1CC; + /* 1CE */ bool mUnk_1CE; + /* 1CF */ bool mUnk_1CF; + /* 1D0 */ u8 mUnk_1D0; + /* 1D1 */ u8 mUnk_1D1; + /* 1D2 */ u16 mUnk_1D2; + /* 1D4 */ u16 mUnk_1D4; + /* 1D6 */ u16 mUnk_1D6; + /* 1D8 */ unk32 mUnk_1D8; + /* 1DC */ fx32 mUnk_1DC; + /* 1E0 */ UnkStruct_PlayerGet_ec mUnk_1E0[0x3]; + /* 1EC */ + + ActorItemTornado(); + + /* 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 SetState(ActorState state); + void func_ov031_020e5d18(unk32 param1); + bool func_ov031_020e62c0(); + bool func_ov031_020e6314(u16 param1); + bool func_ov031_020e6340(VecFx32 *param1, unk16 param2, unk16 param3); + bool func_ov031_020e6398(); +}; + +class ActorProfileItemTornado : public ActorProfile { +public: + /* 00 (base) */ + + ActorProfileItemTornado(); + + /* 0C */ virtual Actor *Create(); + + static ActorProfileItemTornado *GetProfile(); +}; diff --git a/include/Actor/ActorUnkITTD.hpp b/include/Actor/ActorUnkITTD.hpp deleted file mode 100644 index 30569b5c..00000000 --- a/include/Actor/ActorUnkITTD.hpp +++ /dev/null @@ -1,53 +0,0 @@ -//! TODO: This file was generated automatically and might contain errors - -#pragma once - -#include "Actor/Actor.hpp" -#include "Actor/ActorProfile.hpp" -#include "global.h" -#include "types.h" - -class ActorUnkITTD_C4 : public Actor_C4 { -public: - ActorUnkITTD_C4(Actor *param1); - - /* 00 */ virtual bool vfunc_00(ActorRef ref, unk32 param2) override; - /* 04 */ virtual void vfunc_04() override; - /* 08 */ virtual void vfunc_08() override; - /* 0C */ virtual void vfunc_0C(unk32 param1) override; -}; - -class ActorUnkITTD : public Actor { -public: - /* 00 (base) */ - /* 94 */ - - ActorUnkITTD(); - - /* 4C */ virtual ~ActorUnkITTD() override; - - void func_ov031_020e5b20(void); - void func_ov031_020e5b34(void); - void func_ov031_020e5c00(void); - void func_ov031_020e5d18(void); - void func_ov031_020e6148(void); - void func_ov031_020e6158(void); - void func_ov031_020e619c(void); - void func_ov031_020e62c0(void); - void func_ov031_020e6314(void); - void func_ov031_020e6340(void); - void func_ov031_020e6398(void); - void func_ov031_020e6474(void); -}; - -class ActorProfileUnkITTD : public ActorProfile { -public: - /* 00 (base) */ - - ActorProfileUnkITTD(); - ~ActorProfileUnkITTD(); - - /* 0C */ virtual Actor *Create(); - - static ActorProfileUnkITTD *GetProfile(); -}; diff --git a/include/Physics/Cylinder.hpp b/include/Physics/Cylinder.hpp index 36886c57..564053ee 100644 --- a/include/Physics/Cylinder.hpp +++ b/include/Physics/Cylinder.hpp @@ -22,6 +22,14 @@ struct Cylinder { this->size = size; } + void Init(fx32 x, fx32 y, fx32 z, fx32 size) { + this->pos.x = x; + this->pos.y = y; + this->pos.z = z; + + this->size = size; + } + void MakeEmpty() { pos = gVecFx32_ZERO; size = -1; diff --git a/include/Render/ModelRender.hpp b/include/Render/ModelRender.hpp index 27ff6087..62b9b96f 100644 --- a/include/Render/ModelRender.hpp +++ b/include/Render/ModelRender.hpp @@ -6,6 +6,7 @@ #include +class UnkSystem5; extern "C" void *func_ov000_02057750(size_t allocSize); typedef void (*UnkSystem4_UnkCallback)(void); @@ -74,6 +75,7 @@ public: void func_ov000_02057d20(u8 numBones); void func_ov000_02057d3c(G3d_BoneMtxStruct *pCacheJntAnm); void func_ov000_0209a7b8(void *param1, UnkSystem4_UnkCallback param2); + void func_ov000_02057c98(UnkSystem5 *param1); }; class UnkSystem6_Derived1 : public ModelRenderBase { diff --git a/include/Unknown/Common.hpp b/include/Unknown/Common.hpp index 95345ee6..bf0d59fa 100644 --- a/include/Unknown/Common.hpp +++ b/include/Unknown/Common.hpp @@ -914,11 +914,16 @@ struct UnkStackStruct1 { }; extern "C" void func_ov000_02072fd0(UnkStackStruct1 *); -struct UnkSystem7_UnkStruct_00_20 { +struct UnkSystem7_UnkStruct_00_20_00 { /* 00 */ STRUCT_PAD(0x00, 0x04); /* 04 */ VecFx32 mUnk_04; }; +struct UnkSystem7_UnkStruct_00_20 { + /* 00 */ UnkSystem7_UnkStruct_00_20_00 *mUnk_00; + /* 04 */ VecFx32 *mUnk_04; +}; + struct UnkSystem7_UnkStruct_00 { /* 00 */ STRUCT_PAD(0x00, 0x20); /* 20 */ UnkSystem7_UnkStruct_00_20 *mUnk_20; diff --git a/include/Unknown/UnkStruct_027e0958.hpp b/include/Unknown/UnkStruct_027e0958.hpp index 73ac1afe..0761e98d 100644 --- a/include/Unknown/UnkStruct_027e0958.hpp +++ b/include/Unknown/UnkStruct_027e0958.hpp @@ -1,6 +1,6 @@ #pragma once -#include "global.h" +#include "Player/PlayerGet.hpp" #include "types.h" class UnkStruct_027e0958 : public AutoInstance { @@ -13,6 +13,8 @@ public: // overlay 0 static UnkStruct_027e0958 *Create(); static void Destroy(); + + void func_ov000_02058fc4(UnkStruct_PlayerGet_74 *param1, VecFx32 *param2); }; extern UnkStruct_027e0958 *data_027e0958; diff --git a/include/Unknown/UnkStruct_027e0d38.hpp b/include/Unknown/UnkStruct_027e0d38.hpp index 8f5a073c..0ca0d5cf 100644 --- a/include/Unknown/UnkStruct_027e0d38.hpp +++ b/include/Unknown/UnkStruct_027e0d38.hpp @@ -10,6 +10,7 @@ public: UnkStruct_027e0d38(); ~UnkStruct_027e0d38(); + bool func_ov031_020d9bec(); bool func_ov031_020d9c04(unk32 param1, unk32 param2, unk32 param3); void func_ov031_020d9c44(unk32 param1); }; diff --git a/include/Unknown/UnkStruct_ov000_020b4ec4.hpp b/include/Unknown/UnkStruct_ov000_020b4ec4.hpp index 35e5d45c..46fb5b43 100644 --- a/include/Unknown/UnkStruct_ov000_020b4ec4.hpp +++ b/include/Unknown/UnkStruct_ov000_020b4ec4.hpp @@ -14,6 +14,8 @@ public: UnkStruct_ov000_020b4ec4(); ~UnkStruct_ov000_020b4ec4(); + + unk32 func_01ffc768(unk32 param1); }; extern UnkStruct_ov000_020b4ec4 data_ov000_020b4ec4; diff --git a/include/Unknown/UnkStruct_ov031_Items.hpp b/include/Unknown/UnkStruct_ov031_Items.hpp index 25357e35..8ccee82d 100644 --- a/include/Unknown/UnkStruct_ov031_Items.hpp +++ b/include/Unknown/UnkStruct_ov031_Items.hpp @@ -19,8 +19,7 @@ public: /* 04 */ ActorRef mUnk_04; /* 08 */ unk16 mUnk_08; /* 08 */ unk16 mUnk_0A; - /* 0C */ VecFx32 mUnk_0C; - /* 18 */ fx32 mUnk_18; + /* 0C */ Cylinder mUnk_0C; /* 1C */ unk32 mUnk_1C; /* 20 */ unk32 mUnk_20; /* 24 */ unk32 mUnk_24; @@ -30,8 +29,7 @@ public: UnkStruct_ov031_Items_01() { this->mUnk_04 = 0; this->mUnk_08 = 0; - VecFx32_Init(0, 0, 0, &this->mUnk_0C); - this->mUnk_18 = 0; + this->mUnk_0C.Init(FLOAT_TO_FX32(0.0f)); this->mUnk_1C = 0; this->mUnk_20 = 0; this->mUnk_24 = 0; diff --git a/src/031_Land/Actor/ActorItemBoomerang.cpp b/src/031_Land/Actor/ActorItemBoomerang.cpp index 7021feaf..86802ac9 100644 --- a/src/031_Land/Actor/ActorItemBoomerang.cpp +++ b/src/031_Land/Actor/ActorItemBoomerang.cpp @@ -46,10 +46,7 @@ ActorItemBoomerang::ActorItemBoomerang() : bool ActorItemBoomerang::vfunc_18(unk32 param1) { this->mUnk_CC.mUnk_30.func_ov031_020e45fc(); - this->mUnk_A0.mUnk_0C.x = FLOAT_TO_FX32(0.0f); - this->mUnk_A0.mUnk_0C.y = FLOAT_TO_FX32(-0.1003f); - this->mUnk_A0.mUnk_0C.z = FLOAT_TO_FX32(0.0f); - this->mUnk_A0.mUnk_18 = FLOAT_TO_FX32(0.4f); + this->mUnk_A0.mUnk_0C.Init(FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(-0.1003f), FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.4f)); this->mUnk_10C.x = FLOAT_TO_FX32(0.0f); this->mUnk_10C.y = FLOAT_TO_FX32(-0.1003f); @@ -108,10 +105,7 @@ void ActorItemBoomerang::vfunc_20() { bool var2 = false; switch (this->mState) { case ActorItemBoomerangState_0: - this->mUnk_A0.mUnk_0C.z = this->mPos.z; - this->mUnk_A0.mUnk_0C.y = this->mPos.y + FLOAT_TO_FX32(-0.1003f); - this->mUnk_A0.mUnk_0C.x = this->mPos.x; - this->mUnk_A0.mUnk_18 = FLOAT_TO_FX32(0.3f); + this->mUnk_A0.mUnk_0C.Init(this->mPos.x, this->mPos.y, this->mPos.z, FLOAT_TO_FX32(0.3f)); data_027e09c0->func_ov000_0207e58c(this->mRef, 0xC, 0x8, &this->mUnk_A0); @@ -147,10 +141,10 @@ void ActorItemBoomerang::vfunc_20() { } if (sp14.type != 0) { - this->mUnk_CC.mUnk_0C.z = this->mPos.z; - this->mUnk_CC.mUnk_0C.y = this->mPos.y + FLOAT_TO_FX32(-0.1003f); - this->mUnk_CC.mUnk_18 = 0xA000; - this->mUnk_CC.mUnk_0C.x = this->mPos.x; + this->mUnk_CC.mUnk_0C.pos.z = this->mPos.z; + this->mUnk_CC.mUnk_0C.pos.y = this->mPos.y + FLOAT_TO_FX32(-0.1003f); + this->mUnk_CC.mUnk_0C.size = 0xA000; + this->mUnk_CC.mUnk_0C.pos.x = this->mPos.x; data_027e09c0->func_ov000_0207e58c(this->mRef, 0xC, 0x8, &this->mUnk_CC); return; } @@ -183,10 +177,7 @@ void ActorItemBoomerang::vfunc_20() { this->func_ov031_020e49b0(0x8D70); break; case ActorItemBoomerangState_1: - this->mUnk_A0.mUnk_0C.z = this->mPos.z; - this->mUnk_A0.mUnk_0C.y = this->mPos.y + FLOAT_TO_FX32(-0.1003f); - this->mUnk_A0.mUnk_0C.x = this->mPos.x; - this->mUnk_A0.mUnk_18 = FLOAT_TO_FX32(0.3f); + this->mUnk_A0.mUnk_0C.Init(this->mPos.x, this->mPos.y, this->mPos.z, FLOAT_TO_FX32(0.3f)); data_027e09c0->func_ov000_0207e58c(this->mRef, 0xC, 0x8, &this->mUnk_A0); Actor *sp24; /* actor* ? */ @@ -307,15 +298,18 @@ void ActorItemBoomerang::func_ov031_020e5220() { // non-matching void ActorItemBoomerang::func_ov031_020e52a0() { if (this->mUnk_128 == 0x1 || this->mUnk_128 == 0x2) { - for (UnkStruct_PlayerGet_ec *ptr = this->mUnk_12C; ptr != (void *) &this->mUnk_138; ++ptr) { - // non sense - ptr->mUnk_00->mUnk_28 = this->mPos.x + ptr->mUnk_00->mUnk_24; - ptr->mUnk_00->mUnk_2C = this->mPos.y + ptr->mUnk_00->mUnk_28; - ptr->mUnk_00->mUnk_30 = this->mPos.z + ptr->mUnk_00->mUnk_2C; + for (UnkStruct_PlayerGet_ec *ptr = this->mUnk_12C; ptr != this->mUnk_12C + 0x3; ++ptr) { + UnkSystem7_UnkStruct_00 *data = ptr->mUnk_00; + if (data == NULL) { + continue; + } + data->mUnk_28 = this->mPos.x + data->mUnk_20->mUnk_00->mUnk_04.x; + data->mUnk_2C = this->mPos.y + data->mUnk_20->mUnk_00->mUnk_04.y; + data->mUnk_30 = this->mPos.z + data->mUnk_20->mUnk_00->mUnk_04.z; } return; } - for (UnkStruct_PlayerGet_ec *ptr = this->mUnk_12C; ptr != (void *) &this->mUnk_138; ++ptr) { + for (UnkStruct_PlayerGet_ec *ptr = this->mUnk_12C; ptr != this->mUnk_12C + 0x3; ++ptr) { ptr->func_ov000_020a0334(); } } diff --git a/src/031_Land/Actor/ActorItemTornado.cpp b/src/031_Land/Actor/ActorItemTornado.cpp new file mode 100644 index 00000000..04a40404 --- /dev/null +++ b/src/031_Land/Actor/ActorItemTornado.cpp @@ -0,0 +1,325 @@ +#include "Actor/ActorItemTornado.hpp" +#include "System/SysNew.hpp" +#include "Unknown/UnkStruct_027e0958.hpp" +#include "Unknown/UnkStruct_027e09a8.hpp" +#include "Unknown/UnkStruct_027e09c0.hpp" +#include "Unknown/UnkStruct_027e0cec.hpp" +#include "Unknown/UnkStruct_027e0d38.hpp" +#include "Unknown/UnkStruct_ov000_020b4ec4.hpp" + +struct UnkStruct_ov031_020e5d18_00 { + Actor *mUnk_00; + u8 mUnk_04[0x14]; +}; + +extern "C" char *data_ov031_02110a88; +extern "C" Cylinder data_ov031_02112fdc; + +extern "C" void func_01ff916c(void *, unk32, unk32); +extern "C" void func_01ff93c0(VecFx32 *, unk32); +extern "C" void func_01ff993c(VecFx32 *, VecFx32 *, unk32); +extern "C" fx32 func_01ffb66c(unk32, u16); +extern "C" void func_01ffe6c4(UnkStruct_ov031_020e5d18_00 *, ActorRef, VecFx32 *, VecFx32 *, s32, VecFx32 *, + UnkStruct_ov031_Items_00 *); +extern "C" void func_0200ea38(G3d_Model *, unk32, unk32); +extern "C" void func_0200ef9c(G3d_Model *); + +extern "C" bool func_ov000_02080998(VecFx32 *); + +DECL_PROFILE(ActorProfileItemTornado); + +Actor *ActorProfileItemTornado::Create() { + return new(HeapIndex_2) ActorItemTornado(); +} + +ActorProfileItemTornado::ActorProfileItemTornado() : + ActorProfile(ActorId_ITTD) { + this->mUnk_04.Init(FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.25f), FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.20f)); +} + +// non-matching +ActorItemTornado::ActorItemTornado() : + mUnk_94(data_027e0ce0->func_ov000_0208ed30(0x0, 0x1, data_ov031_02110a88)), + mUnk_F4(&this->mUnk_114, this->mUnk_94.mpModel), + mUnk_134(&this->mUnk_154, this->mUnk_94.mpModel), + mUnk_17C(NULL), + mUnk_1CC(0x0), + mUnk_1D1(this->mUnk_94.func_ov000_02057ee0()->numMat), + mUnk_1D2(0x4), + mUnk_1D4(0x2), + mUnk_1D6(0x4), + mUnk_1D8(0x0), + mUnk_1DC(0x0) { + this->mUnk_94.func_ov000_02057c98(&this->mUnk_F4); + this->mUnk_94.func_ov000_02057c98(&this->mUnk_134); + + this->mUnk_52 = 0xFFFF; + this->mState = ActorItemTornadoState_0; + this->mUnk_50 = 0x0; +} + +bool ActorItemTornado::vfunc_18(unk32 param1) { + u16 tmp = (u16) this->mAngle; + + this->mUnk_44 = 0x1F; + + this->mUnk_34 = &data_ov031_02112fdc; + this->mUnk_194.mUnk_04 = this->mRef; + + this->mUnk_194.mUnk_0C.Init(this->mPos.x, this->mPos.y + FLOAT_TO_FX32(0.85f), this->mPos.z, FLOAT_TO_FX32(0.8f)); + + this->mVel.x = MUL_FX32(SIN(tmp), 0x385); + this->mVel.z = MUL_FX32(COS(tmp), 0x385); + this->mVel.y = FLOAT_TO_FX32(0.0f); + + return true; +} + +void ActorItemTornado::SetState(ActorState state) { + switch (state) { + case ActorItemTornadoState_1: + this->mUnk_1DC = 0x1000; + data_027e0cec->func_ov000_020a00d4(this->mUnk_1E0, 0x8FD, 0x8FB, 0x8FC, &this->mPos, 0x2); + break; + case ActorItemTornadoState_2: + data_027e09a8->func_ov000_02071b30(0x8D6D, &this->mPos, 0x0); + + for (UnkStruct_PlayerGet_ec *ptr = this->mUnk_1E0; ptr != this->mUnk_1E0 + 0x3; ++ptr) { + ptr->func_ov000_020a0334(); + } + + data_027e0cec->func_ov000_0209feac(0x8F9, &this->mPos, 0x2, 0x0, 0x0); + data_027e0cec->func_ov000_0209feac(0x8FA, &this->mPos, 0x2, 0x0, 0x0); + break; + default: + break; + } + + this->mState = state; + this->mUnk_52 = 0xFFFF; + this->mUnk_50 = 0x0; +} + +// non-matching +void ActorItemTornado::func_ov031_020e5d18(unk32 param1) { + VecFx32_Copy(&this->mPos, &this->mPrevPos); + VecFx32_Add(&this->mPos, &this->mVel, &this->mPos); + + if (this->mUnk_1D2 != 0x0) { + --this->mUnk_1D2; + } + if (this->mUnk_1D4 != 0x0) { + --this->mUnk_1D4; + } + + if (param1 == 0x0) { + ++this->mUnk_1D8; + } + this->IsTimerOut(); + + switch (this->mState) { + case ActorItemTornadoState_0: + data_027e09a8->func_ov000_02071d34(&this->mRef, 0x8D6C, &this->mPos, 0x0); + if (this->mUnk_50 < (s16) 0xA) { + this->mUnk_1DC += 0x199; + break; + } + this->SetState(ActorItemTornadoState_1); + break; + case ActorItemTornadoState_1: + data_027e09a8->func_ov000_02071d34(&this->mRef, 0x8D6C, &this->mPos, 0x0); + + for (UnkStruct_PlayerGet_ec *ptr = this->mUnk_1E0; ptr != this->mUnk_1E0 + 0x3; ++ptr) { + UnkSystem7_UnkStruct_00 *data = ptr->mUnk_00; + if (data == NULL) { + continue; + } + data->mUnk_28 = this->mPos.x + data->mUnk_20->mUnk_00->mUnk_04.x; + data->mUnk_2C = this->mPos.y + data->mUnk_20->mUnk_00->mUnk_04.y; + data->mUnk_30 = this->mPos.z + data->mUnk_20->mUnk_00->mUnk_04.z; + } + + ; + if (!data_027e0d38->func_ov031_020d9bec() && + (((u16) this->mUnk_1CC == 0x0 && (u32) this->mUnk_1D8 >= 0x28U) || !this->func_ov017_020beeec(0))) { + this->func_ov031_020e6314(0x4); + break; + } + if (func_ov000_02080998(&this->mPos)) { + this->func_ov031_020e6314(0x4); + break; + } + if (this->mUnk_1CC != 0) { + if (this->mUnk_1CE != 0) { + func_01ff993c(&this->mPos, &this->mUnk_1C0, 0x266); + func_01ff916c(&this->mUnk_1DC, 0x1000, 0x19A); + } + --this->mUnk_1CC; + if (this->mUnk_1CC == 0) { + this->func_ov031_020e6314(this->mUnk_1D6); + } + } + break; + case ActorItemTornadoState_2: + if ((u32) this->mUnk_50 >= (u32) this->mUnk_1D6) { + UNSET_FLAG(this->mFlags, ActorFlag_Alive); + } else if (this->mUnk_1D6 != 0) { + if (this->mUnk_1CE != 0) { + func_01ff993c(&this->mPos, &this->mUnk_1C0, 0x266); + } + this->mUnk_1DC -= func_01ffb66c(0x1000, this->mUnk_1D6); + if (this->mUnk_1DC <= 0) { + UNSET_FLAG(this->mFlags, ActorFlag_Alive); + } + } + break; + default: + break; + } + this->mUnk_F4.func_01ffc3b4(); + this->mUnk_134.func_01ffc3b4(); + + if (this->mState != ActorItemTornadoState_0 && this->mState != ActorItemTornadoState_1) { + return; + } + if (this->mUnk_1CC != 0x0) { + return; + } + + if ((this->mUnk_1CF == 0) && (this->mUnk_1D2 == 0)) { + unk32 var_r3 = 2; + if (this->mUnk_1D0 & 1) { + var_r3 |= 1; + } + if (this->func_ov000_02098ab4(0x0, 0xA, var_r3, &this->mVel) == 0x0) { + VecFx32_Init(this->mPos.x, this->mPos.y + 0xD9A, this->mPos.z, &this->mUnk_194.mUnk_0C.pos); + data_027e09c0->func_ov000_0207e58c(this->mRef, 0x4, 0x0, &this->mUnk_194); + } + } + unk32 var_r0; + if (this->mUnk_1D4 != 0) { + var_r0 = 0x0; + } else { + UnkStruct_ov031_020e5d18_00 var_sp0C; + var_sp0C.mUnk_00 = NULL; + func_01ffe6c4(&var_sp0C, this->mRef, &this->mPos, &this->mPrevPos, (s32) (s16) this->mUnk_44, &this->mPos, + &this->mUnk_174); + Actor *actor = var_sp0C.mUnk_00; + unk32 temp_r5 = actor->func_ov000_0207df88(this->mUnk_30, 4); + var_r0 = temp_r5 | actor->func_ov000_0207e294(this->mUnk_30); + this->mUnk_46 = var_r0; + } + if (var_r0 == 0x0) { + return; + } + if (this->mUnk_1CC == 0x0) { + this->mVel.x = FLOAT_TO_FX32(0.0f); + this->mVel.y = FLOAT_TO_FX32(0.0f); + this->mVel.z = FLOAT_TO_FX32(0.0f); + this->mUnk_1CC = 0x1; + } +} +void ActorItemTornado::vfunc_20() { + this->func_ov031_020e5d18(0x0); +} + +void ActorItemTornado::vfunc_24() { + if (!this->mUnk_1CE && this->mState != ActorItemTornadoState_2 && + (this->mVel.x != FLOAT_TO_FX32(0.0f) || this->mVel.y != FLOAT_TO_FX32(0.0f) || this->mVel.z != FLOAT_TO_FX32(0.0f))) { + return; + } + this->func_ov031_020e5d18(0x1); +} + +// non-matching +void ActorItemTornado::vfunc_2C(unk32 param1) { + if (this->mUnk_1DC <= 0x0) { + return; + } + if (this->mState != ActorItemTornadoState_0 && !this->func_01fff5d0(param1, 0x0)) { + return; + } + unk32 var_r0 = this->mUnk_1DC; + unk32 var_r1; + if (var_r0 == FLOAT_TO_FX32(1.0f)) { + var_r1 = 0x1F; + } else { + var_r0 = var_r0 * 0x1F + FLOAT_TO_FX32(0.5f); + var_r1 = var_r0 >> 0xC; + if (var_r1 > 0x1F) { + var_r1 = 0x1F; + } else if (var_r1 < 0) { + var_r1 = 0; + } + } + if (var_r1 <= 0) { + return; + } + + G3d_Model *model = this->mUnk_94.mpModel; + func_0200ef9c(model); + + if (this->mUnk_1D1 >= 0x0) { + for (unk32 index = 0x0; index < (u32) this->mUnk_1D1; ++index) { + func_0200ea38(model, index, data_ov000_020b4ec4.func_01ffc768(0x4)); + } + } + + VecFx32 vec = this->mPos; + + if (this->mState == ActorItemTornadoState_0) { + vec.y += (((FLOAT_TO_FX32(1.0f) - this->mUnk_1DC) << 0xC) + FLOAT_TO_FX32(0.5f)) >> 0xC; + } + data_027e0958->func_ov000_02058fc4(&this->mUnk_17C, &vec); +} + +bool ActorItemTornado::func_ov031_020e62c0() { + if (this->mState != ActorItemTornadoState_2 && !this->mUnk_1CF) { + this->mUnk_1CF = true; + if (VecFx32_TryNormalize(&this->mVel)) { + func_01ff93c0(&this->mVel, 0x400); + } + return true; + } + return false; +} + +bool ActorItemTornado::func_ov031_020e6314(u16 param1) { + if (this->mState == ActorItemTornadoState_2) { + return false; + } + this->mUnk_1D6 = param1; + this->SetState(ActorItemTornadoState_2); + return true; +} + +// non-matching +bool ActorItemTornado::func_ov031_020e6340(VecFx32 *param1, unk16 param2, unk16 param3) { + if (this->mState == ActorItemTornadoState_2) { + return false; + } + + VecFx32_Init(param1->x, param1->y, param1->z, &this->mUnk_1C0); + this->mUnk_1CC = param2; + this->mUnk_1D6 = param3; + this->mUnk_1CE = true; + VecFx32_Init(FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), &this->mVel); + + return true; +} + +bool ActorItemTornado::func_ov031_020e6398() { + if (this->mState == ActorItemTornadoState_1) { + if (VecFx32_TryNormalize(&this->mVel)) { + func_01ff93c0(&this->mVel, -0x266); + } + if (this->mUnk_1D0 < 0xFF) { + ++this->mUnk_1D0; + } + this->mUnk_1D8 = 0x0; + + data_027e09a8->func_ov000_02071b30(0x8D6F, &this->mPos, 0x0); + return true; + } + return false; +} diff --git a/src/031_Land/Actor/ActorRollingStone.cpp b/src/031_Land/Actor/ActorRollingStone.cpp index b9e01ca2..acc09bc3 100644 --- a/src/031_Land/Actor/ActorRollingStone.cpp +++ b/src/031_Land/Actor/ActorRollingStone.cpp @@ -298,7 +298,7 @@ void ActorRollingStone::func_ov031_020f8bc4() { } this->func_ov000_02098ab4(0x2, 0x5, 0x1, &this->mVel); - this->vfunc_10(&this->mUnk_D4.mUnk_0C); + this->vfunc_10(&this->mUnk_D4.mUnk_0C.pos); VecFx32 sp14; VecFx32_Copy(&this->mPos, &sp14); @@ -352,7 +352,7 @@ void ActorRollingStone::func_ov031_020f8de8() { } void ActorRollingStone::func_ov031_020f8ed4() { - for (UnkStruct_PlayerGet_ec *ptr = this->mUnk_130; ptr != (void *) &this->mUnk_138; ++ptr) { + for (UnkStruct_PlayerGet_ec *ptr = this->mUnk_130; ptr != this->mUnk_130 + 0x2; ++ptr) { ptr->func_ov000_020a0334(); } this->func_ov031_020f8880(); @@ -483,7 +483,7 @@ void ActorRollingStone::func_ov031_020f9250() { this->vfunc_40(); this->mUnk_2C = 0x0; - for (UnkStruct_PlayerGet_ec *ptr = this->mUnk_130; ptr != (void *) &this->mUnk_138; ++ptr) { + for (UnkStruct_PlayerGet_ec *ptr = this->mUnk_130; ptr != this->mUnk_130 + 0x2; ++ptr) { ptr->func_ov000_020a0334(); } @@ -635,7 +635,7 @@ void ActorRollingStone::func_ov031_020f9554() { } this->func_ov000_02098ab4(0x2, 0x5, 0x1, 0x0); - this->vfunc_10(&this->mUnk_D4.mUnk_0C); + this->vfunc_10(&this->mUnk_D4.mUnk_0C.pos); data_027e09c0->func_ov000_0207e58c(this->mRef, 0xB, 0x4, &this->mUnk_D4); @@ -739,14 +739,15 @@ void ActorRollingStone::func_ov031_020f9af4() {} void ActorRollingStone::func_ov031_020f9af8() { const fx32 y = this->mPos.y + FLOAT_TO_FX32(0.4f); const fx32 x = this->mPos.x; - const fx32 z = this->mVel.z; - for (UnkStruct_PlayerGet_ec *ptr = this->mUnk_130; ptr != (void *) &this->mUnk_138; ++ptr) { - UnkSystem7_UnkStruct_00 *temp = ptr->mUnk_00; - if (temp != NULL) { - temp->mUnk_28 = x + ptr->mUnk_00->mUnk_20->mUnk_04.x; - temp->mUnk_2C = y + ptr->mUnk_00->mUnk_20->mUnk_04.y; - temp->mUnk_30 = z + ptr->mUnk_00->mUnk_20->mUnk_04.z; + const fx32 z = this->mPos.z; + for (UnkStruct_PlayerGet_ec *ptr = this->mUnk_130; ptr != this->mUnk_130 + 0x2; ++ptr) { + UnkSystem7_UnkStruct_00 *data = ptr->mUnk_00; + if (data == NULL) { + continue; } + data->mUnk_28 = x + data->mUnk_20->mUnk_00->mUnk_04.x; + data->mUnk_2C = y + data->mUnk_20->mUnk_00->mUnk_04.y; + data->mUnk_30 = z + data->mUnk_20->mUnk_00->mUnk_04.z; } data_027e09a8->func_ov000_02071d34(&this->mRef, 0x989F, &this->mPos, 0x0); } diff --git a/src/031_Land/Actor/ActorShotArrow.cpp b/src/031_Land/Actor/ActorShotArrow.cpp index 2f629c0f..10671a86 100644 --- a/src/031_Land/Actor/ActorShotArrow.cpp +++ b/src/031_Land/Actor/ActorShotArrow.cpp @@ -95,11 +95,10 @@ extern "C" void func_01ffa9e8(Mat4x3p *, Mat4x3p *); extern "C" void func_01ffad5c(Mat4x3p *, Mat4x3p *, Mat4x3p *); extern "C" void func_01ffb714(VecFx32 *, VecFx32 *, VecFx32 *); extern "C" fx16 func_01ffbbe0(fx32, fx32); -extern "C" bool func_01ffccf4(VecFx32 *, VecFx32 *, VecFx32 *, unk32 *); +extern "C" bool func_01ffccf4(Cylinder *, VecFx32 *, VecFx32 *, unk32 *); extern "C" void func_01ffe6c4(Actor **, ActorRef, VecFx32 *, VecFx32 *, s32, VecFx32 *, unk32); extern "C" void func_0200eab0(G3d_Model *, unk16, u8); extern "C" UnkResourceStruct2 *func_0200f05c(G3d_NameList *, char *); -extern "C" void func_ov000_02057c98(ModelRender *param1, UnkSystem5 *param2); extern "C" bool func_ov000_0205aeac(); extern "C" void func_ov000_0207b6c0(); extern "C" unk32 func_ov000_0207df88(unk32 *, Cylinder *, unk32); @@ -192,9 +191,9 @@ bool ActorShotArrow::vfunc_18(unk32 param1) { this->SetState(ActorShotArrowState_0); this->mUnk_194.mUnk_04 = this->mRef.Get32(); - VecFx32_Copy(&this->mPos, &this->mUnk_194.mUnk_0C); - this->mUnk_194.mUnk_18 = FLOAT_TO_FX32(0.20f); - this->mUnk_44 = 0x1F; + VecFx32_Copy(&this->mPos, &this->mUnk_194.mUnk_0C.pos); + this->mUnk_194.mUnk_0C.size = FLOAT_TO_FX32(0.20f); + this->mUnk_44 = 0x1F; return true; } @@ -642,7 +641,7 @@ void ActorShotArrow::func_ov031_020f2794(unk16 param1) { case 0x2: this->mUnk_94.vfunc_08(GetModelFromProfile3(func_ov031_020f1404(), data_ov031_02110b4c)); this->mUnk_25A = true; - func_ov000_02057c98(&this->mUnk_A0, &this->mUnk_100); + this->mUnk_A0.func_ov000_02057c98(&this->mUnk_100); break; default: break; @@ -862,8 +861,8 @@ void ActorShotArrow::func_ov031_020f2f5c(VecFx32 *param1) { } bool ActorShotArrow::func_ov031_020f2f9c() { - VecFx32_Copy(&this->mPos, &this->mUnk_194.mUnk_0C); - this->mUnk_194.mUnk_18 = FLOAT_TO_FX32(0.2f); + VecFx32_Copy(&this->mPos, &this->mUnk_194.mUnk_0C.pos); + this->mUnk_194.mUnk_0C.size = FLOAT_TO_FX32(0.2f); data_027e09c0->func_ov000_0207e58c(this->mRef, 0x3, data_ov031_02110b01[this->mUnk_5C.mParams[1]], &this->mUnk_194); return true; } @@ -1001,7 +1000,7 @@ void ActorShotArrow_194::func_ov031_020f374c(Actor *actor) { stack.mUnk_28 = this->mUnk_2C->mVel; func_01ff93c0(&stack.mUnk_28, this->mUnk_30); - stack.mUnk_1C = this->mUnk_0C; + stack.mUnk_1C = this->mUnk_0C.pos; VecFx32_Add(&stack.mUnk_1C, &stack.mUnk_28, &stack.mUnk_1C); func_01ffb714(&stack.mUnk_1C, &actor->mVel, &stack.mUnk_1C); @@ -1015,7 +1014,7 @@ void ActorShotArrow_194::func_ov031_020f374c(Actor *actor) { //! @bug: stack.mUnk_18 is used uninitialized? if (temp > stack.mUnk_18 && stack.mUnk_18 > FLOAT_TO_FX32(0.15f)) { fx32 temp_r5 = (temp - stack.mUnk_18) + FLOAT_TO_FX32(0.15f); - u16 value = (u32) (s16) func_01ffbbe0(stack.mUnk_00.x, stack.mUnk_00.z); + u16 value = (u32) (s16) (s32) func_01ffbbe0(stack.mUnk_00.x, stack.mUnk_00.z); fx16 sin = SIN(value); fx16 cos = COS(value); diff --git a/src/031_Land/Actor/ActorUnkITTD.cpp b/src/031_Land/Actor/ActorUnkITTD.cpp deleted file mode 100644 index c8d9c374..00000000 --- a/src/031_Land/Actor/ActorUnkITTD.cpp +++ /dev/null @@ -1,31 +0,0 @@ -//! TODO: This file was generated automatically and might contain errors - -#include "Actor/ActorUnkITTD.hpp" -#include "System/SysNew.hpp" - -DECL_PROFILE(ActorProfileUnkITTD); - -Actor *ActorProfileUnkITTD::Create() { - return new(HeapIndex_2) ActorUnkITTD(); -} - -ActorProfileUnkITTD::ActorProfileUnkITTD() : - ActorProfile(ActorId_ITTD) {} - -ActorUnkITTD::ActorUnkITTD() {} - -void ActorUnkITTD::func_ov031_020e5b20(void) {} -void ActorUnkITTD::func_ov031_020e5b34(void) {} -void ActorUnkITTD::func_ov031_020e5c00(void) {} -void ActorUnkITTD::func_ov031_020e5d18(void) {} -void ActorUnkITTD::func_ov031_020e6148(void) {} -void ActorUnkITTD::func_ov031_020e6158(void) {} -void ActorUnkITTD::func_ov031_020e619c(void) {} -void ActorUnkITTD::func_ov031_020e62c0(void) {} -void ActorUnkITTD::func_ov031_020e6314(void) {} -void ActorUnkITTD::func_ov031_020e6340(void) {} -void ActorUnkITTD::func_ov031_020e6398(void) {} -void ActorUnkITTD::func_ov031_020e6474(void) {} - -ActorUnkITTD::~ActorUnkITTD() {} -ActorProfileUnkITTD::~ActorProfileUnkITTD() {} diff --git a/src/110_PlayerGet/PlayerGet.cpp b/src/110_PlayerGet/PlayerGet.cpp index cac31905..e6c71da6 100644 --- a/src/110_PlayerGet/PlayerGet.cpp +++ b/src/110_PlayerGet/PlayerGet.cpp @@ -23,6 +23,7 @@ #include "Unknown/UnkStruct_ov000_020b51c0.hpp" #include "versions.h" +#include "Unknown/UnkStruct_027e0958.hpp" #include "math.hpp" struct UnkStruct_02186240 { @@ -38,8 +39,6 @@ extern "C" void func_ov000_0205ca74(unk32); extern "C" void func_01ffb6e4(unk32, const void *, void *); extern "C" void func_01ffc5a0(ModelRender *, unk32, u16, void *, unk32); extern "C" void func_ov000_0208f820(); -extern "C" void func_ov000_02058fc4(unk32 *, UnkStruct_PlayerGet_74 *, VecFx32 *); -extern unk32 *data_027e0958; extern "C" void func_ov000_0208ba10(void *, void *, unk32); extern "C" void func_02015ea8(unk32, void *); extern "C" void func_02015628(char *, char *, unk32, void *, size_t); @@ -1002,7 +1001,7 @@ void PlayerGet::vfunc_18(unk32 param1, unk32 param2, unk32 param3) { case 0x3B: if (param3 != 0 && this->mUnk_54.mItemId != ItemId_Nothing && this->mUnk_8C.mpModel != NULL) { VecFx32_Add(this->mUnk_34, (VecFx32 *) &data_ov110_021861ec.mUnk_00, &auStack_18); - func_ov000_02058fc4(data_027e0958, &this->mUnk_74, &auStack_18); + data_027e0958->func_ov000_02058fc4(&this->mUnk_74, &auStack_18); } break; default: diff --git a/tools/configure.py b/tools/configure.py index ea4cfe65..452f483b 100755 --- a/tools/configure.py +++ b/tools/configure.py @@ -479,7 +479,7 @@ config.libs = [ Object("031_Land/Actor/ActorUnkFLEN.cpp"), Object("031_Land/Actor/ActorHeart.cpp"), Object("031_Land/Actor/ActorItemBoomerang.cpp"), - Object("031_Land/Actor/ActorUnkITTD.cpp"), + Object("031_Land/Actor/ActorItemTornado.cpp"), Object("031_Land/Actor/ActorUnkMLCK.cpp"), Object("031_Land/Actor/ActorUnkNFSP.cpp"), Object("031_Land/Actor/ActorUnkNITF.cpp"),