From 905ceeb4b3b2a6748482406eadabd895e08ed29e Mon Sep 17 00:00:00 2001 From: Alessevan <44125445+Alessevan@users.noreply.github.com> Date: Fri, 29 May 2026 13:02:57 -0400 Subject: [PATCH] Started decompiling ActorHeart (#41) * feat: change symbols for ActorHeart * feat: begin ActorHeart decompilation * feat: continue decompilation (some changes should be refactored) * improvements * fix build issues * feat: improve matching code * fix: remove back nitro/math * feat: load s8 as u8 * refactor: remove shady variadic function * feat: better function, reg order issue * refactor: switch EC, F0 and F4 to a single VecFx32 variable and improve vfunc_20 * feat: improvements in vfunc_v20 * docs: add what should be written in comments * feat: match with temporary unknown actor structure * style: remove unnecessary curly brackets in switch cases * style: move external functions to the top * docs: mark unmatched functions as non-matching * refactor: use FLOAT_TO_Q20 instead of raw hex values * style: remove unnecessary cast * refactor: use macros to manipulate flags * refactor: better floating values * refactor: use hex values over bin values * feat: use ROUND_Q20 to increase matching * refactor: use Cylinder::Init instead of assigning each variable * refactor: change mangled names --------- Co-authored-by: Yanis002 <35189056+Yanis002@users.noreply.github.com> --- config/eur/arm9/itcm/symbols.txt | 2 +- config/eur/arm9/overlays/ov000/symbols.txt | 4 +- config/eur/arm9/overlays/ov017/symbols.txt | 4 +- config/eur/arm9/overlays/ov031/delinks.txt | 3 +- config/eur/arm9/overlays/ov031/relocs.txt | 2 +- config/eur/arm9/overlays/ov031/symbols.txt | 82 ++-- config/jp/arm9/overlays/ov031/delinks.txt | 3 +- config/jp/arm9/overlays/ov031/symbols.txt | 88 ++-- include/Actor/Actor.hpp | 16 + include/Actor/ActorHeart.hpp | 83 ++++ include/Actor/ActorRupee.hpp | 15 - include/Actor/ActorUnkHERT.hpp | 68 --- include/Unknown/UnkStruct_027e0ce0.hpp | 1 + src/031_Land/Actor/ActorHeart.cpp | 483 +++++++++++++++++++++ src/031_Land/Actor/ActorUnkHERT.cpp | 46 -- tools/configure.py | 2 +- 16 files changed, 679 insertions(+), 223 deletions(-) create mode 100644 include/Actor/ActorHeart.hpp delete mode 100644 include/Actor/ActorUnkHERT.hpp create mode 100644 src/031_Land/Actor/ActorHeart.cpp delete mode 100644 src/031_Land/Actor/ActorUnkHERT.cpp diff --git a/config/eur/arm9/itcm/symbols.txt b/config/eur/arm9/itcm/symbols.txt index 8c310e7c..83c8e53a 100644 --- a/config/eur/arm9/itcm/symbols.txt +++ b/config/eur/arm9/itcm/symbols.txt @@ -209,7 +209,7 @@ _ZN16MapObjectManager13func_01fff4ccEPFvPvS0_ES0_ kind:function(arm,size=0x54) a _ZN16MapObjectManager13func_01fff520EP24UnkStruct_ov000_020b34c4PP9MapObject kind:function(arm,size=0x64) addr:0x01fff520 _ZN9MapObject14GetMapObjectIdEv kind:function(arm,size=0xc) addr:0x01fff584 _ZN9MapObject13func_01fff590Ei kind:function(arm,size=0x40) addr:0x01fff590 -_ZN10ActorRupee13func_01fff5d0Eii kind:function(arm,size=0x3c) addr:0x01fff5d0 +_ZN5Actor13func_01fff5d0Eii kind:function(arm,size=0x3c) addr:0x01fff5d0 _ZN18UnkStruct_027e09b413func_01fff60cEiiihii kind:function(arm,size=0x8c) addr:0x01fff60c func_01fff698 kind:function(arm,size=0x38) addr:0x01fff698 _ZN21UnkStruct_027e0cd8_1013func_01fff6d0EP7VecFx32PiS2_ kind:function(arm,size=0x74) addr:0x01fff6d0 diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index f8bdba65..fa92b968 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -1932,7 +1932,7 @@ func_ov000_0208bbd4 kind:function(arm,size=0x2c) addr:0x0208bbd4 func_ov000_0208bc00 kind:function(arm,size=0x1c) addr:0x0208bc00 func_ov000_0208bc1c kind:function(arm,size=0x40) addr:0x0208bc1c func_ov000_0208bc5c kind:function(arm,size=0x40) addr:0x0208bc5c -func_ov000_0208bc9c kind:function(arm,size=0x84) addr:0x0208bc9c +_ZN18UnkStruct_027e0ce019func_ov000_0208bc9cEii kind:function(arm,size=0x84) addr:0x0208bc9c func_ov000_0208bd20 kind:function(arm,size=0x10) addr:0x0208bd20 func_ov000_0208bd30 kind:function(arm,size=0x18) addr:0x0208bd30 func_ov000_0208bd48 kind:function(arm,size=0x34) addr:0x0208bd48 @@ -2254,7 +2254,7 @@ func_ov000_02097244 kind:function(arm,size=0x44) addr:0x02097244 func_ov000_02097288 kind:function(arm,size=0x154) addr:0x02097288 _ZN24UnkStruct_ov000_020b539c18func_ov000_02073dcEv kind:function(arm,size=0xc) addr:0x020973dc _ZN24UnkStruct_ov000_020b539c18func_ov000_02073e8Ev kind:function(arm,size=0xc) addr:0x020973e8 -func_ov000_020973f4 kind:function(arm,size=0x50) addr:0x020973f4 +_ZN5Actor19func_ov000_020973f4EP24UnkStruct_ov000_020b539cjP11ActorParamsi kind:function(arm,size=0x50) addr:0x020973f4 func_ov000_02097444 kind:function(arm,size=0x98) addr:0x02097444 _ZN24UnkStruct_ov000_020b539c16GetProfileFromIdEj kind:function(arm,size=0x4c) addr:0x020974dc func_ov000_02097528 kind:function(arm,size=0x20) addr:0x02097528 diff --git a/config/eur/arm9/overlays/ov017/symbols.txt b/config/eur/arm9/overlays/ov017/symbols.txt index 86fe132a..0d78e9ec 100644 --- a/config/eur/arm9/overlays/ov017/symbols.txt +++ b/config/eur/arm9/overlays/ov017/symbols.txt @@ -66,7 +66,7 @@ func_ov017_020bf2d8 kind:function(arm,size=0x108) addr:0x020bf2d8 func_ov017_020bf3e0 kind:function(arm,size=0xd0) addr:0x020bf3e0 func_ov017_020bf4b0 kind:function(arm,size=0xc4) addr:0x020bf4b0 func_ov017_020bf574 kind:function(arm,size=0x50) addr:0x020bf574 -func_ov017_020bf5c4 kind:function(arm,size=0x70) addr:0x020bf5c4 +_ZN5Actor19func_ov017_020bf5c4EP7VecFx32iiii kind:function(arm,size=0x70) addr:0x020bf5c4 func_ov017_020bf634 kind:function(arm,size=0x54) addr:0x020bf634 func_ov017_020bf688 kind:function(arm,size=0x88) addr:0x020bf688 func_ov017_020bf710 kind:function(arm,size=0x98) addr:0x020bf710 @@ -75,7 +75,7 @@ func_ov017_020bf894 kind:function(arm,size=0x60) addr:0x020bf894 _ZN5Actor8vfunc_40Ev kind:function(arm,size=0x44) addr:0x020bf8f4 _ZN5Actor8vfunc_44Ev kind:function(arm,size=0x64) addr:0x020bf938 func_ov017_020bf99c kind:function(arm,size=0x2c) addr:0x020bf99c -_ZN10ActorRupee19func_ov017_020bf9c8EP27UnkStruct_func_01fff3b4_ret kind:function(arm,size=0x88) addr:0x020bf9c8 +_ZN5Actor19func_ov017_020bf9c8EPS_ kind:function(arm,size=0x88) addr:0x020bf9c8 func_ov017_020bfa50 kind:function(arm,size=0x84) addr:0x020bfa50 func_ov017_020bfad4 kind:function(arm,size=0x44) addr:0x020bfad4 func_ov017_020bfb18 kind:function(arm,size=0x238) addr:0x020bfb18 diff --git a/config/eur/arm9/overlays/ov031/delinks.txt b/config/eur/arm9/overlays/ov031/delinks.txt index bdc33ede..b1454c96 100644 --- a/config/eur/arm9/overlays/ov031/delinks.txt +++ b/config/eur/arm9/overlays/ov031/delinks.txt @@ -63,10 +63,11 @@ src/031_Land/Actor/ActorUnkZLSL_ZSRS.cpp: .ctor start:0x021127bc end:0x021127c0 .bss start:0x0211672c end:0x02116858 -src/031_Land/Actor/ActorUnkHERT.cpp: +src/031_Land/Actor/ActorHeart.cpp: .text start:0x020eecf4 end:0x020ef81c .init start:0x0211139c end:0x02111408 .ctor start:0x021127c0 end:0x021127c4 + .data start:0x02113d64 end:0x02113e6c .bss start:0x02116858 end:0x021168a4 src/031_Land/Actor/ActorUnkRMTG.cpp: diff --git a/config/eur/arm9/overlays/ov031/relocs.txt b/config/eur/arm9/overlays/ov031/relocs.txt index 450a1712..3af690e4 100644 --- a/config/eur/arm9/overlays/ov031/relocs.txt +++ b/config/eur/arm9/overlays/ov031/relocs.txt @@ -2492,7 +2492,7 @@ from:0x020ef650 kind:arm_call to:0x0205c1f0 module:overlay(0) from:0x020ef688 kind:arm_call to:0x0205c204 module:overlay(0) from:0x020ef6d4 kind:arm_call to:0x020ef570 module:overlay(31) from:0x020ef70c kind:arm_call to:0x020f6284 module:overlay(31) -from:0x020ef72c kind:load to:0x02113ddc module:overlay(31) +from:0x020ef72c kind:load to:0x02113dd4 add:0x8 module:overlay(31) from:0x020ef754 kind:arm_call to:0x020ef1b4 module:overlay(31) from:0x020ef764 kind:arm_call to:0x020f62e4 module:overlay(31) from:0x020ef784 kind:arm_call to:0x020ef1b4 module:overlay(31) diff --git a/config/eur/arm9/overlays/ov031/symbols.txt b/config/eur/arm9/overlays/ov031/symbols.txt index dfb3a6a1..cd7f1d32 100644 --- a/config/eur/arm9/overlays/ov031/symbols.txt +++ b/config/eur/arm9/overlays/ov031/symbols.txt @@ -728,40 +728,40 @@ func_ov031_020eeb18 kind:function(arm,size=0x40) addr:0x020eeb18 func_ov031_020eeb58 kind:function(arm,size=0x150) addr:0x020eeb58 func_ov031_020eeca8 kind:function(arm,size=0x40) addr:0x020eeca8 func_ov031_020eece8 kind:function(arm,size=0xc) addr:0x020eece8 -_ZN19ActorProfileUnkHERT10GetProfileEv kind:function(arm,size=0xc) addr:0x020eecf4 -_ZN19ActorProfileUnkHERT6CreateEv kind:function(arm,size=0x24) addr:0x020eed00 -_ZN19ActorProfileUnkHERTC1Ev kind:function(arm,size=0x40) addr:0x020eed24 -_ZN12ActorUnkHERT19func_ov031_020eed64Ev kind:function(arm,size=0x7c) addr:0x020eed64 -_ZN12ActorUnkHERTC1Ev kind:function(arm,size=0xf8) addr:0x020eede0 -_ZN12ActorUnkHERT19func_ov031_020eeed8Ev kind:function(arm,size=0x10) addr:0x020eeed8 -_ZN12ActorUnkHERT19func_ov031_020eeee8Ev kind:function(arm,size=0x2cc) addr:0x020eeee8 -_ZN12ActorUnkHERT19func_ov031_020ef1b4Ev kind:function(arm,size=0x54) addr:0x020ef1b4 -_ZN12ActorUnkHERT19func_ov031_020ef208Ev kind:function(arm,size=0xe4) addr:0x020ef208 -_ZN12ActorUnkHERT19func_ov031_020ef2ecEv kind:function(arm,size=0xc) addr:0x020ef2ec -_ZN12ActorUnkHERT19func_ov031_020ef2f8Ev kind:function(arm,size=0x28) addr:0x020ef2f8 -_ZN12ActorUnkHERT19func_ov031_020ef320Ev kind:function(arm,size=0x14) addr:0x020ef320 -_ZN12ActorUnkHERT19func_ov031_020ef334Ev kind:function(arm,size=0x28) addr:0x020ef334 -_ZN12ActorUnkHERT19func_ov031_020ef35cEv kind:function(arm,size=0x44) addr:0x020ef35c -_ZN12ActorUnkHERT19func_ov031_020ef3a0Ev kind:function(arm,size=0x18) addr:0x020ef3a0 -_ZN12ActorUnkHERT19func_ov031_020ef3b8Ev kind:function(arm,size=0x18) addr:0x020ef3b8 -_ZN12ActorUnkHERT19func_ov031_020ef3d0Ev kind:function(arm,size=0x60) addr:0x020ef3d0 -_ZN12ActorUnkHERT19func_ov031_020ef430Ev kind:function(arm,size=0x14) addr:0x020ef430 -_ZN12ActorUnkHERT19func_ov031_020ef444Ev kind:function(arm,size=0x4) addr:0x020ef444 -_ZN12ActorUnkHERT19func_ov031_020ef448Ev kind:function(arm,size=0x10) addr:0x020ef448 -_ZN12ActorUnkHERT19func_ov031_020ef458Ev kind:function(arm,size=0x50) addr:0x020ef458 -_ZN12ActorUnkHERT19func_ov031_020ef4a8Ev kind:function(arm,size=0x80) addr:0x020ef4a8 -_ZN12ActorUnkHERT19func_ov031_020ef528Ev kind:function(arm,size=0x48) addr:0x020ef528 -_ZN12ActorUnkHERT19func_ov031_020ef570Ev kind:function(arm,size=0x78) addr:0x020ef570 -_ZN12ActorUnkHERT19func_ov031_020ef5e8Ev kind:function(arm,size=0xb0) addr:0x020ef5e8 -_ZN12ActorUnkHERT19func_ov031_020ef698Ev kind:function(arm,size=0x60) addr:0x020ef698 -_ZN12ActorUnkHERT19func_ov031_020ef6f8Ev kind:function(arm,size=0x38) addr:0x020ef6f8 -_ZN12ActorUnkHERT19func_ov031_020ef730Ev kind:function(arm,size=0x44) addr:0x020ef730 -_ZN12ActorUnkHERT19func_ov031_020ef774Ev kind:function(arm,size=0x20) addr:0x020ef774 -_ZN12ActorUnkHERT19func_ov031_020ef794Ev kind:function(arm,size=0x28) addr:0x020ef794 -_ZN12ActorUnkHERT19func_ov031_020ef7bcEv kind:function(arm,size=0x1c) addr:0x020ef7bc -_ZN12ActorUnkHERTD0Ev kind:function(arm,size=0x1c) addr:0x020ef7d8 -_ZN12ActorUnkHERTD2Ev kind:function(arm,size=0x14) addr:0x020ef7f4 -_ZN19ActorProfileUnkHERTD1Ev kind:function(arm,size=0x14) addr:0x020ef808 +_ZN17ActorProfileHeart10GetProfileEv kind:function(arm,size=0xc) addr:0x020eecf4 +_ZN17ActorProfileHeart6CreateEv kind:function(arm,size=0x24) addr:0x020eed00 +_ZN17ActorProfileHeartC1Ev kind:function(arm,size=0x40) addr:0x020eed24 +_ZN10ActorHeart19func_ov031_020eed64EP11ActorParamsii kind:function(arm,size=0x7c) addr:0x020eed64 +_ZN10ActorHeartC1Ev kind:function(arm,size=0xf8) addr:0x020eede0 +_ZN10ActorHeart8vfunc_18Ei kind:function(arm,size=0x10) addr:0x020eeed8 +_ZN10ActorHeart8vfunc_20Ev kind:function(arm,size=0x2cc) addr:0x020eeee8 +_ZN10ActorHeart19func_ov031_020ef1b4Es kind:function(arm,size=0x54) addr:0x020ef1b4 +_ZN10ActorHeart19func_ov031_020ef208Ev kind:function(arm,size=0xe4) addr:0x020ef208 +_ZN10ActorHeart19func_ov031_020ef2ecEv kind:function(arm,size=0xc) addr:0x020ef2ec +_ZN10ActorHeart19func_ov031_020ef2f8Ev kind:function(arm,size=0x28) addr:0x020ef2f8 +_ZN10ActorHeart19func_ov031_020ef320Ev kind:function(arm,size=0x14) addr:0x020ef320 +_ZN10ActorHeart19func_ov031_020ef334Ev kind:function(arm,size=0x28) addr:0x020ef334 +_ZN10ActorHeart19func_ov031_020ef35cEv kind:function(arm,size=0x44) addr:0x020ef35c +_ZN10ActorHeart19func_ov031_020ef3a0Ev kind:function(arm,size=0x18) addr:0x020ef3a0 +_ZN10ActorHeart19func_ov031_020ef3b8Ev kind:function(arm,size=0x18) addr:0x020ef3b8 +_ZN10ActorHeart19func_ov031_020ef3d0Ev kind:function(arm,size=0x60) addr:0x020ef3d0 +_ZN10ActorHeart19func_ov031_020ef430Ev kind:function(arm,size=0x14) addr:0x020ef430 +_ZN10ActorHeart19func_ov031_020ef444Ev kind:function(arm,size=0x4) addr:0x020ef444 +_ZN10ActorHeart19func_ov031_020ef448Ev kind:function(arm,size=0x10) addr:0x020ef448 +_ZN10ActorHeart19func_ov031_020ef458Ev kind:function(arm,size=0x50) addr:0x020ef458 +_ZN10ActorHeart19func_ov031_020ef4a8Ev kind:function(arm,size=0x80) addr:0x020ef4a8 +_ZN10ActorHeart19func_ov031_020ef528Ev kind:function(arm,size=0x48) addr:0x020ef528 +_ZN10ActorHeart19func_ov031_020ef570Ev kind:function(arm,size=0x78) addr:0x020ef570 +_ZN10ActorHeart8vfunc_2cEi kind:function(arm,size=0xb0) addr:0x020ef5e8 +_ZN10ActorHeart19func_ov031_020ef698Ev kind:function(arm,size=0x60) addr:0x020ef698 +_ZN13ActorHeart_c4C1EP5Actor kind:function(arm,size=0x38) addr:0x020ef6f8 +_ZN13ActorHeart_c48vfunc_00E14Actor_c4_stacki kind:function(arm,size=0x44) addr:0x020ef730 +_ZN13ActorHeart_c48vfunc_04Ev kind:function(arm,size=0x20) addr:0x020ef774 +_ZN13ActorHeart_c48vfunc_0cEi kind:function(arm,size=0x28) addr:0x020ef794 +_ZN13ActorHeart_c48vfunc_08Ev kind:function(arm,size=0x1c) addr:0x020ef7bc +_ZN10ActorHeartD0Ev kind:function(arm,size=0x1c) addr:0x020ef7d8 +_ZN10ActorHeartD1Ev kind:function(arm,size=0x14) addr:0x020ef7f4 +_ZN17ActorProfileHeartD1Ev kind:function(arm,size=0x14) addr:0x020ef808 _ZN19ActorProfileUnkRMTG10GetProfileEv kind:function(arm,size=0xc) addr:0x020ef81c _ZN19ActorProfileUnkRMTG6CreateEv kind:function(arm,size=0x24) addr:0x020ef828 _ZN19ActorProfileUnkRMTGC1Ev kind:function(arm,size=0x28) addr:0x020ef84c @@ -2079,7 +2079,7 @@ __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 __sinit_ActorUnkZLSL_ZSRS.cpp kind:function(arm,size=0x94) addr:0x02111308 -__sinit_ActorUnkHERT.cpp kind:function(arm,size=0x6c) addr:0x0211139c +__sinit_ActorHeart.cpp kind:function(arm,size=0x6c) addr:0x0211139c __sinit_ActorUnkRMTG.cpp kind:function(arm,size=0x50) addr:0x02111408 __sinit_ActorUnkSCCN.cpp kind:function(arm,size=0x50) addr:0x02111458 __sinit_ActorUnkNTUB.cpp kind:function(arm,size=0x50) addr:0x021114a8 @@ -2143,7 +2143,7 @@ __sinit_MapObjectUnkSWFS.cpp kind:function(arm,size=0x70) addr:0x02112724 .p__sinit_ActorUnkROCK.cpp kind:data(word) addr:0x021127b4 .p__sinit_ActorRupee.cpp kind:data(word) addr:0x021127b8 .p__sinit_ActorUnkZLSL_ZSRS.cpp kind:data(word) addr:0x021127bc -.p__sinit_ActorUnkHERT.cpp kind:data(word) addr:0x021127c0 +.p__sinit_ActorHeart.cpp kind:data(word) addr:0x021127c0 .p__sinit_ActorUnkRMTG.cpp kind:data(word) addr:0x021127c4 .p__sinit_ActorUnkSCCN.cpp kind:data(word) addr:0x021127c8 .p__sinit_ActorUnkNTUB.cpp kind:data(word) addr:0x021127cc @@ -2328,9 +2328,9 @@ data_ov031_02113d58 kind:data(any) addr:0x02113d58 data_ov031_02113d64 kind:data(any) addr:0x02113d64 data_ov031_02113d74 kind:data(any) addr:0x02113d74 data_ov031_02113da4 kind:data(any) addr:0x02113da4 -data_ov031_02113ddc kind:data(any) addr:0x02113ddc -_ZTV19data_ov031_02113dec kind:data(any) addr:0x02113dec -_ZTV19data_ov031_02113e10 kind:data(any) addr:0x02113e10 +_ZTV13ActorHeart_c4 kind:data(any) addr:0x02113dd4 +_ZTV17ActorProfileHeart kind:data(any) addr:0x02113dec +_ZTV10ActorHeart kind:data(any) addr:0x02113e10 _ZTV19data_ov031_02113e6c kind:data(any) addr:0x02113e6c _ZTV19data_ov031_02113e90 kind:data(any) addr:0x02113e90 _ZTV19data_ov031_02113eec kind:data(any) addr:0x02113eec @@ -2552,9 +2552,9 @@ _ZGVN15ProfileInstanceI19ActorProfileUnkZLSLE8sProfileE kind:bss addr:0x0211672c @10824 kind:bss addr:0x02116738 _ZN15ProfileInstanceI19ActorProfileUnkZLSLE8sProfileE kind:bss addr:0x02116744 _ZN15ProfileInstanceI19ActorProfileUnkZSRSE8sProfileE kind:bss addr:0x02116780 -_ZGVN15ProfileInstanceI19ActorProfileUnkHERTE8sProfileE kind:bss addr:0x02116858 +_ZGVN15ProfileInstanceI17ActorProfileHeartE8sProfileE kind:bss addr:0x02116858 @10830 kind:bss addr:0x0211685c -_ZN15ProfileInstanceI19ActorProfileUnkHERTE8sProfileE kind:bss addr:0x02116868 +_ZN15ProfileInstanceI17ActorProfileHeartE8sProfileE kind:bss addr:0x02116868 _ZGVN15ProfileInstanceI19ActorProfileUnkRMTGE8sProfileE kind:bss addr:0x021168a4 @10836 kind:bss addr:0x021168a8 _ZN15ProfileInstanceI19ActorProfileUnkRMTGE8sProfileE kind:bss addr:0x021168b4 diff --git a/config/jp/arm9/overlays/ov031/delinks.txt b/config/jp/arm9/overlays/ov031/delinks.txt index a3b1e776..feb3420f 100644 --- a/config/jp/arm9/overlays/ov031/delinks.txt +++ b/config/jp/arm9/overlays/ov031/delinks.txt @@ -63,10 +63,11 @@ src/031_Land/Actor/ActorUnkZLSL_ZSRS.cpp: .ctor start:0x02114548 end:0x0211454c .bss start:0x021184cc end:0x021185f8 -src/031_Land/Actor/ActorUnkHERT.cpp: +src/031_Land/Actor/ActorHeart.cpp: .text start:0x020f06e0 end:0x020f1218 .init start:0x0211310c end:0x02113178 .ctor start:0x0211454c end:0x02114550 + .data start:0x02115b04 end:0x02115c0c .bss start:0x021185f8 end:0x02118644 src/031_Land/Actor/ActorUnkRMTG.cpp: diff --git a/config/jp/arm9/overlays/ov031/symbols.txt b/config/jp/arm9/overlays/ov031/symbols.txt index e4186dc1..01c735e3 100644 --- a/config/jp/arm9/overlays/ov031/symbols.txt +++ b/config/jp/arm9/overlays/ov031/symbols.txt @@ -728,40 +728,40 @@ func_ov031_020f0504 kind:function(arm,size=0x40) addr:0x020f0504 func_ov031_020f0544 kind:function(arm,size=0x150) addr:0x020f0544 func_ov031_020f0694 kind:function(arm,size=0x40) addr:0x020f0694 func_ov031_020f06d4 kind:function(arm,size=0xc) addr:0x020f06d4 -_ZN19ActorProfileUnkHERT10GetProfileEv kind:function(arm,size=0xc) addr:0x020f06e0 -_ZN19ActorProfileUnkHERT6CreateEv kind:function(arm,size=0x24) addr:0x020f06ec -_ZN19ActorProfileUnkHERTC1Ev kind:function(arm,size=0x40) addr:0x020f0710 -_ZN12ActorUnkHERT19func_ov031_020f0750Ev kind:function(arm,size=0x7c) addr:0x020f0750 -_ZN12ActorUnkHERTC1Ev kind:function(arm,size=0xf8) addr:0x020f07cc -_ZN12ActorUnkHERT19func_ov031_020eeed8Ev kind:function(arm,size=0x10) addr:0x020f08c4 -_ZN12ActorUnkHERT19func_ov031_020eeee8Ev kind:function(arm,size=0x2cc) addr:0x020f08d4 -_ZN12ActorUnkHERT19func_ov031_020ef1b4Ev kind:function(arm,size=0x54) addr:0x020f0ba0 -_ZN12ActorUnkHERT19func_ov031_020ef208Ev kind:function(arm,size=0xe4) addr:0x020f0bf4 -_ZN12ActorUnkHERT19func_ov031_020ef2ecEv kind:function(arm,size=0xc) addr:0x020f0cd8 -_ZN12ActorUnkHERT19func_ov031_020ef2f8Ev kind:function(arm,size=0x28) addr:0x020f0ce4 -_ZN12ActorUnkHERT19func_ov031_020ef320Ev kind:function(arm,size=0x14) addr:0x020f0d0c -_ZN12ActorUnkHERT19func_ov031_020ef334Ev kind:function(arm,size=0x28) addr:0x020f0d20 -_ZN12ActorUnkHERT19func_ov031_020ef35cEv kind:function(arm,size=0x44) addr:0x020f0d48 -_ZN12ActorUnkHERT19func_ov031_020ef3a0Ev kind:function(arm,size=0x18) addr:0x020f0d8c -_ZN12ActorUnkHERT19func_ov031_020ef3b8Ev kind:function(arm,size=0x18) addr:0x020f0da4 -_ZN12ActorUnkHERT19func_ov031_020ef3d0Ev kind:function(arm,size=0x60) addr:0x020f0dbc -_ZN12ActorUnkHERT19func_ov031_020ef430Ev kind:function(arm,size=0x14) addr:0x020f0e1c -_ZN12ActorUnkHERT19func_ov031_020ef444Ev kind:function(arm,size=0x4) addr:0x020f0e30 -_ZN12ActorUnkHERT19func_ov031_020ef448Ev kind:function(arm,size=0x10) addr:0x020f0e34 -_ZN12ActorUnkHERT19func_ov031_020ef458Ev kind:function(arm,size=0x50) addr:0x020f0e44 -_ZN12ActorUnkHERT19func_ov031_020ef4a8Ev kind:function(arm,size=0x80) addr:0x020f0e94 -_ZN12ActorUnkHERT19func_ov031_020ef528Ev kind:function(arm,size=0x58) addr:0x020f0f14 -_ZN12ActorUnkHERT19func_ov031_020ef570Ev kind:function(arm,size=0x78) addr:0x020f0f6c -_ZN12ActorUnkHERT19func_ov031_020ef5e8Ev kind:function(arm,size=0xb0) addr:0x020f0fe4 -_ZN12ActorUnkHERT19func_ov031_020ef698Ev kind:function(arm,size=0x60) addr:0x020f1094 -_ZN12ActorUnkHERT19func_ov031_020ef6f8Ev kind:function(arm,size=0x38) addr:0x020f10f4 -_ZN12ActorUnkHERT19func_ov031_020ef730Ev kind:function(arm,size=0x44) addr:0x020f112c -_ZN12ActorUnkHERT19func_ov031_020ef774Ev kind:function(arm,size=0x20) addr:0x020f1170 -_ZN12ActorUnkHERT19func_ov031_020ef794Ev kind:function(arm,size=0x28) addr:0x020f1190 -_ZN12ActorUnkHERT19func_ov031_020ef7bcEv kind:function(arm,size=0x1c) addr:0x020f11b8 -_ZN12ActorUnkHERTD0Ev kind:function(arm,size=0x1c) addr:0x020f11d4 -_ZN12ActorUnkHERTD2Ev kind:function(arm,size=0x14) addr:0x020f11f0 -_ZN19ActorProfileUnkHERTD1Ev kind:function(arm,size=0x14) addr:0x020f1204 +_ZN17ActorProfileHeart10GetProfileEv kind:function(arm,size=0xc) addr:0x020f06e0 +_ZN17ActorProfileHeart6CreateEv kind:function(arm,size=0x24) addr:0x020f06ec +_ZN17ActorProfileHeartC1Ev kind:function(arm,size=0x40) addr:0x020f0710 +_ZN10ActorHeart19func_ov031_020f0750Ev kind:function(arm,size=0x7c) addr:0x020f0750 +_ZN10ActorHeartC1Ev kind:function(arm,size=0xf8) addr:0x020f07cc +_ZN10ActorHeart8vfunc_18Ei kind:function(arm,size=0x10) addr:0x020f08c4 +_ZN10ActorHeart8vfunc_20Ev kind:function(arm,size=0x2cc) addr:0x020f08d4 +_ZN10ActorHeart19func_ov031_020ef1b4Es kind:function(arm,size=0x54) addr:0x020f0ba0 +_ZN10ActorHeart19func_ov031_020ef208Ev kind:function(arm,size=0xe4) addr:0x020f0bf4 +_ZN10ActorHeart19func_ov031_020ef2ecEv kind:function(arm,size=0xc) addr:0x020f0cd8 +_ZN10ActorHeart19func_ov031_020ef2f8Ev kind:function(arm,size=0x28) addr:0x020f0ce4 +_ZN10ActorHeart19func_ov031_020ef320Ev kind:function(arm,size=0x14) addr:0x020f0d0c +_ZN10ActorHeart19func_ov031_020ef334Ev kind:function(arm,size=0x28) addr:0x020f0d20 +_ZN10ActorHeart19func_ov031_020ef35cEv kind:function(arm,size=0x44) addr:0x020f0d48 +_ZN10ActorHeart19func_ov031_020ef3a0Ev kind:function(arm,size=0x18) addr:0x020f0d8c +_ZN10ActorHeart19func_ov031_020ef3b8Ev kind:function(arm,size=0x18) addr:0x020f0da4 +_ZN10ActorHeart19func_ov031_020ef3d0Ev kind:function(arm,size=0x60) addr:0x020f0dbc +_ZN10ActorHeart19func_ov031_020ef430Ev kind:function(arm,size=0x14) addr:0x020f0e1c +_ZN10ActorHeart19func_ov031_020ef444Ev kind:function(arm,size=0x4) addr:0x020f0e30 +_ZN10ActorHeart19func_ov031_020ef448Ev kind:function(arm,size=0x10) addr:0x020f0e34 +_ZN10ActorHeart19func_ov031_020ef458Ev kind:function(arm,size=0x50) addr:0x020f0e44 +_ZN10ActorHeart19func_ov031_020ef4a8Ev kind:function(arm,size=0x80) addr:0x020f0e94 +_ZN10ActorHeart19func_ov031_020ef528Ev kind:function(arm,size=0x58) addr:0x020f0f14 +_ZN10ActorHeart19func_ov031_020ef570Ev kind:function(arm,size=0x78) addr:0x020f0f6c +_ZN10ActorHeart8vfunc_2cEi kind:function(arm,size=0xb0) addr:0x020f0fe4 +_ZN10ActorHeart19func_ov031_020ef698Ev kind:function(arm,size=0x60) addr:0x020f1094 +_ZN13ActorHeart_c4C1EP5Actor kind:function(arm,size=0x38) addr:0x020f10f4 +_ZN13ActorHeart_c48vfunc_00E14Actor_c4_stacki kind:function(arm,size=0x44) addr:0x020f112c +_ZN13ActorHeart_c48vfunc_04Ev kind:function(arm,size=0x20) addr:0x020f1170 +_ZN13ActorHeart_c48vfunc_0cEi kind:function(arm,size=0x28) addr:0x020f1190 +_ZN13ActorHeart_c48vfunc_08Ev kind:function(arm,size=0x1c) addr:0x020f11b8 +_ZN10ActorHeartD0Ev kind:function(arm,size=0x1c) addr:0x020f11d4 +_ZN10ActorHeartD1Ev kind:function(arm,size=0x14) addr:0x020f11f0 +_ZN17ActorProfileHeartD1Ev kind:function(arm,size=0x14) addr:0x020f1204 _ZN19ActorProfileUnkRMTG10GetProfileEv kind:function(arm,size=0xc) addr:0x020f1218 _ZN19ActorProfileUnkRMTG6CreateEv kind:function(arm,size=0x24) addr:0x020f1224 _ZN19ActorProfileUnkRMTGC1Ev kind:function(arm,size=0x28) addr:0x020f1248 @@ -2076,7 +2076,7 @@ __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 __sinit_ActorUnkZLSL_ZSRS.cpp kind:function(arm,size=0x94) addr:0x02113078 -__sinit_ActorUnkHERT.cpp kind:function(arm,size=0x6c) addr:0x0211310c +__sinit_ActorHeart.cpp kind:function(arm,size=0x6c) addr:0x0211310c __sinit_ActorUnkRMTG.cpp kind:function(arm,size=0x50) addr:0x02113178 __sinit_ActorUnkSCCN.cpp kind:function(arm,size=0x50) addr:0x021131c8 __sinit_ActorUnkNTUB.cpp kind:function(arm,size=0x50) addr:0x02113218 @@ -2140,7 +2140,7 @@ __sinit_MapObjectUnkSWFS.cpp kind:function(arm,size=0x70) addr:0x021144b0 .p__sinit_ActorUnkROCK.cpp kind:data(word) addr:0x02114540 .p__sinit_ActorRupee.cpp kind:data(word) addr:0x02114544 .p__sinit_ActorUnkZLSL_ZSRS.cpp kind:data(word) addr:0x02114548 -.p__sinit_ActorUnkHERT.cpp kind:data(word) addr:0x0211454c +.p__sinit_ActorHeart.cpp kind:data(word) addr:0x0211454c .p__sinit_ActorUnkRMTG.cpp kind:data(word) addr:0x02114550 .p__sinit_ActorUnkSCCN.cpp kind:data(word) addr:0x02114554 .p__sinit_ActorUnkNTUB.cpp kind:data(word) addr:0x02114558 @@ -2321,12 +2321,12 @@ data_ov031_021158f8 kind:data(any) addr:0x021158f8 data_ov031_02115aa8 kind:data(any) addr:0x02115aa8 data_ov031_02115ab4 kind:data(any) addr:0x02115ab4 data_ov031_02115af8 kind:data(any) addr:0x02115af8 -data_ov031_02115b04 kind:data(any) addr:0x02115b04 -data_ov031_02115b14 kind:data(any) addr:0x02115b14 -data_ov031_02115b44 kind:data(any) addr:0x02115b44 -data_ov031_02115b7c kind:data(any) addr:0x02115b74 -_ZTV19data_ov031_02115b8c kind:data(any) addr:0x02115b8c -_ZTV19data_ov031_02115bb0 kind:data(any) addr:0x02115bb0 +data_ov031_02113d64 kind:data(any) addr:0x02115b04 +data_ov031_02113d74 kind:data(any) addr:0x02115b14 +data_ov031_02113da4 kind:data(any) addr:0x02115b44 +_ZTV13ActorHeart_c4 kind:data(any) addr:0x02115b74 +_ZTV17ActorProfileHeart kind:data(any) addr:0x02115b8c +_ZTV10ActorHeart kind:data(any) addr:0x02115bb0 _ZTV19data_ov031_02115c0c kind:data(any) addr:0x02115c0c _ZTV19data_ov031_02115c30 kind:data(any) addr:0x02115c30 _ZTV19data_ov031_02115c8c kind:data(any) addr:0x02115c8c @@ -2547,9 +2547,9 @@ _ZGVN15ProfileInstanceI19ActorProfileUnkZLSLE8sProfileE kind:bss addr:0x021184cc @30824 kind:bss addr:0x021184d8 _ZN15ProfileInstanceI19ActorProfileUnkZLSLE8sProfileE kind:bss addr:0x021184e4 _ZN15ProfileInstanceI19ActorProfileUnkZSRSE8sProfileE kind:bss addr:0x02118520 -_ZGVN15ProfileInstanceI19ActorProfileUnkHERTE8sProfileE kind:bss addr:0x021185f8 +_ZGVN15ProfileInstanceI17ActorProfileHeartE8sProfileE kind:bss addr:0x021185f8 @30830 kind:bss addr:0x021185fc -_ZN15ProfileInstanceI19ActorProfileUnkHERTE8sProfileE kind:bss addr:0x02118608 +_ZN15ProfileInstanceI17ActorProfileHeartE8sProfileE kind:bss addr:0x02118608 _ZGVN15ProfileInstanceI19ActorProfileUnkRMTGE8sProfileE kind:bss addr:0x02118644 @30836 kind:bss addr:0x02118648 _ZN15ProfileInstanceI19ActorProfileUnkRMTGE8sProfileE kind:bss addr:0x02118654 diff --git a/include/Actor/Actor.hpp b/include/Actor/Actor.hpp index 711c6752..8e75e5ca 100644 --- a/include/Actor/Actor.hpp +++ b/include/Actor/Actor.hpp @@ -61,6 +61,8 @@ public: ActorProfile *GetProfileFromId(ActorId actorId); }; +class Actor_c4; + typedef u32 ActorFlags; enum ActorFlag_ { ActorFlag_Alive = FLAG(0, 0), @@ -195,6 +197,7 @@ public: void func_ov000_02098a88(unk32 param1, unk32 param2); void func_ov017_020bf5c4(VecFx32 *param1, unk32 param2, unk32 param3, unk32 param4, unk32 param5); + void func_ov017_020bf9c8(Actor *param1); }; struct Actor_c4_stack { @@ -207,6 +210,19 @@ public: Actor_c4_Base(void *param1, unk32 param2); }; +class Actor_9c { +public: + /* 00 (vtable) */ + /* 04 */ + + /* 00 */ virtual void vfunc_00(); // corresponds to func_ov000_02097c14 + /* 04 */ virtual void vfunc_04(); // corresponds to func_ov000_02097c20 + /* 08 */ + + Actor_9c(); + void func_ov000_02097bec(); +}; + class Actor_c4 : public Actor_c4_Base { public: /* 00 (vtable) */ diff --git a/include/Actor/ActorHeart.hpp b/include/Actor/ActorHeart.hpp new file mode 100644 index 00000000..bec0b3e6 --- /dev/null +++ b/include/Actor/ActorHeart.hpp @@ -0,0 +1,83 @@ +#pragma once + +#include "Actor/Actor.hpp" +#include "Actor/ActorProfile.hpp" +#include "ActorRupee.hpp" +#include "types.h" + +class ActorHeart_c4 : public Actor_c4 { +public: + ActorHeart_c4(Actor *param1); + + /* 00 */ virtual unk32 vfunc_00(Actor_c4_stack param1, unk32 param2) override; + /* 04 */ virtual void vfunc_04() override; + /* 08 */ virtual void vfunc_08() override; + /* 0C */ virtual void vfunc_0c(unk32 param1) override; +}; + +class ActorHeart : public Actor { +public: + /* 00 (base) */ + /* 94 */ u16 mUnk_94; + /* 96 */ u16 mUnk_96; + /* 98 */ Actor_9c mUnk_98; + /* 9C */ unk32 mUnk_9C; + /* A0 */ unk32 mUnk_A0; + /* A4 */ unk32 mUnk_A4; + /* A8 */ STRUCT_PAD(0xA8, 0xB4); + /* B4 */ unk16 mUnk_B4; + /* B6 */ STRUCT_PAD(0xB6, 0xB8); + /* B8 */ s16 mUnk_B8; + /* BA */ unk16 mUnk_BA; + /* BC */ unk16 mUnk_BC; + /* BE */ s8 mUnk_BE; + /* BF */ STRUCT_PAD(0xBF, 0xC0); + /* C0 */ unk32 mUnk_C0; + /* C4 */ unk32 mUnk_C4; + /* C8 */ ActorHeart_c4 mUnk_C8; + /* EC */ VecFx32 mUnk_EC; + + ActorHeart(); + + /* 18 */ virtual bool vfunc_18(unk32 param1) override; + /* 20 */ virtual void vfunc_20() override; + /* 2C */ virtual void vfunc_2c(unk32 param1) override; + /* 4C */ virtual ~ActorHeart() override {}; + + void func_ov031_020f0750(); + void func_ov031_020eed64(ActorParams *param_2, unk32 param_3, unk32 param_4); + void func_ov031_020ef1b4(unk16 param_2); + void func_ov031_020ef208(); + void func_ov031_020ef4a8(); + void func_ov031_020ef528(); + void func_ov031_020ef570(); + void func_ov031_020ef698(); + + // data_ov031_02113d74 + void func_ov031_020ef2f8(); + void func_ov031_020ef334(); + void func_ov031_020ef3a0(); + void func_ov031_020ef3d0(); + void func_ov031_020ef444(); + void func_ov031_020ef458(); + + // data_ov031_02113da4 + void func_ov031_020ef2ec(); + void func_ov031_020ef320(); + void func_ov031_020ef35c(); + void func_ov031_020ef3b8(); + void func_ov031_020ef430(); + void func_ov031_020ef448(); +}; + +class ActorProfileHeart : public ActorProfile { +public: + /* 00 (base) */ + + ActorProfileHeart(); + ~ActorProfileHeart() {} + + /* 0C */ virtual Actor *Create(); + + static ActorProfileHeart *GetProfile(); +}; diff --git a/include/Actor/ActorRupee.hpp b/include/Actor/ActorRupee.hpp index 87a74101..cd9a54c6 100644 --- a/include/Actor/ActorRupee.hpp +++ b/include/Actor/ActorRupee.hpp @@ -19,19 +19,6 @@ enum RupeeId_ { /* 7 */ RupeeId_7, }; -class Actor_9c { -public: - /* 00 (vtable) */ - /* 04 */ - - /* 00 */ virtual void vfunc_00(); // corresponds to func_ov000_02097c14 - /* 04 */ virtual void vfunc_04(); // corresponds to func_ov000_02097c20 - /* 08 */ - - Actor_9c(); - void func_ov000_02097bec(); -}; - class ActorRupee_c4 : public Actor_c4 { public: ActorRupee_c4(Actor *param1); @@ -76,8 +63,6 @@ public: /* 2C */ virtual void vfunc_2c(unk32 param1) override; /* 4C */ virtual ~ActorRupee() override; - void func_ov017_020bf9c8(Actor *param1); - void func_ov031_020e8d2c(VecFx32 *param1, u8 param2, unk32 param3, unk32 param4); void func_ov031_020e8fec(); void func_ov031_020e9068(); diff --git a/include/Actor/ActorUnkHERT.hpp b/include/Actor/ActorUnkHERT.hpp deleted file mode 100644 index 2076e8b0..00000000 --- a/include/Actor/ActorUnkHERT.hpp +++ /dev/null @@ -1,68 +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 ActorUnkHERT_c4 : public Actor_c4 { -public: - ActorUnkHERT_c4(Actor *param1); - - /* 00 */ virtual unk32 vfunc_00(Actor_c4_stack param1, unk32 param2) override; - /* 04 */ virtual void vfunc_04() override; - /* 08 */ virtual void vfunc_08() override; - /* 0C */ virtual void vfunc_0c(unk32 param1) override; -}; - -class ActorUnkHERT : public Actor { -public: - /* 00 (base) */ - /* 94 */ - - ActorUnkHERT(); - - /* 4C */ virtual ~ActorUnkHERT() override; - - void func_ov031_020eed64(void); - void func_ov031_020eeed8(void); - void func_ov031_020eeee8(void); - void func_ov031_020ef1b4(void); - void func_ov031_020ef208(void); - void func_ov031_020ef2ec(void); - void func_ov031_020ef2f8(void); - void func_ov031_020ef320(void); - void func_ov031_020ef334(void); - void func_ov031_020ef35c(void); - void func_ov031_020ef3a0(void); - void func_ov031_020ef3b8(void); - void func_ov031_020ef3d0(void); - void func_ov031_020ef430(void); - void func_ov031_020ef444(void); - void func_ov031_020ef448(void); - void func_ov031_020ef458(void); - void func_ov031_020ef4a8(void); - void func_ov031_020ef528(void); - void func_ov031_020ef570(void); - void func_ov031_020ef5e8(void); - void func_ov031_020ef698(void); - void func_ov031_020ef6f8(void); - void func_ov031_020ef730(void); - void func_ov031_020ef774(void); - void func_ov031_020ef794(void); - void func_ov031_020ef7bc(void); -}; - -class ActorProfileUnkHERT : public ActorProfile { -public: - /* 00 (base) */ - - ActorProfileUnkHERT(); - ~ActorProfileUnkHERT(); - - /* 0C */ virtual Actor *Create(); - - static ActorProfileUnkHERT *GetProfile(); -}; diff --git a/include/Unknown/UnkStruct_027e0ce0.hpp b/include/Unknown/UnkStruct_027e0ce0.hpp index e1145d9b..0c5d765b 100644 --- a/include/Unknown/UnkStruct_027e0ce0.hpp +++ b/include/Unknown/UnkStruct_027e0ce0.hpp @@ -84,6 +84,7 @@ public: void func_ov000_0208bbd4(unk32 param1, VecFx32 *param2, u16 param3); void func_ov000_0208bbd4(unk32 param1, VecFx32 *param2, void *param3); + void func_ov000_0208bc9c(unk32 param1, unk32 param2); static UnkStruct_027e0ce0_34 *func_ov000_0205c904(); diff --git a/src/031_Land/Actor/ActorHeart.cpp b/src/031_Land/Actor/ActorHeart.cpp new file mode 100644 index 00000000..4ce46908 --- /dev/null +++ b/src/031_Land/Actor/ActorHeart.cpp @@ -0,0 +1,483 @@ +#include "Actor/ActorHeart.hpp" +#include "System/Random.hpp" +#include "Unknown/UnkStruct_027e09a8.hpp" +#include "Unknown/UnkStruct_027e0cd8.hpp" +#include "Unknown/UnkStruct_027e0ce0.hpp" + +class UnkStruct_ov031_02113d64 { +public: + /* 00 */ unk32 mUnk_00; + /* 04 */ VecFx32 mUnk_04; + + UnkStruct_ov031_02113d64(unk32 param1, fx32 x, fx32 y, fx32 z) { + mUnk_00 = param1; + mUnk_04.x = x; + mUnk_04.y = y; + mUnk_04.z = z; + } +}; +const UnkStruct_ov031_02113d64 data_ov031_02113d64(0, 0x800, 0, 0x800); + +typedef struct { + unk16 mUnk_00; + unk16 mUnk_02; + unk16 mUnk_04; + unk16 mUnk_06; + unk16 mUnk_08; + STRUCT_PAD(0x0A, 0x14); + unk16 mUnk_14; + STRUCT_PAD(0x16, 0x18); + unk16 mUnk_18; + STRUCT_PAD(0x1A, 0x1C); + unk16 mUnk_1C; + STRUCT_PAD(0x1E, 0x28); + unk16 mUnk_28; + STRUCT_PAD(0x2A, 0x3C); +} UnkStruct_ov031_020eeee8; + +extern "C" void func_01ffce1c(unk16 *, unk16 *); +extern "C" int func_01ffcea0(unk32, UnkStruct_ov031_020eeee8 *); +extern "C" void func_01ffedac(u16 *, VecFx32 *); +extern "C" void func_01fff17c(UnkStruct_ov031_020eeee8 *, UnkStruct_027e0ce0 *, unk32); +extern "C" void func_02018114(unk16 *, unk16); +extern "C" void func_02098388(void); +extern "C" void func_02097bb8(void); +extern "C" void func_ov000_0205c1f0(unk32 *, unk16); +extern "C" void func_ov000_0205c204(unk32 *, VecFx32 *, unk32, unk32, unk32); +extern "C" void func_ov000_0208bc00(UnkStruct_027e0ce0 *, unk16, unk16 *); +extern "C" void func_ov000_02098838(); +extern "C" void func_ov017_020bf99c(void); +extern "C" void func_ov017_02097bec(Actor_9c *); + +ARM DECL_PROFILE(ActorProfileHeart); + +ARM Actor *ActorProfileHeart::Create() { + return new(HeapIndex_2) ActorHeart(); +} + +ARM ActorProfileHeart::ActorProfileHeart() : + ActorProfile(ActorId_Heart) { + this->mUnk_04.Init(FLOAT_TO_Q20(0.25)); +} + +ARM void ActorHeart::func_ov031_020eed64(ActorParams *param_2, unk32 param_3, unk32 param_4) { + ActorParams actorParams; + actorParams.func_ov000_020975f8(); + + actorParams.mInitialPos = param_2->mInitialPos; + actorParams.mUnk_28 = param_4; + actorParams.mUnk_2C = param_3; + + this->func_ov000_020973f4(&data_ov000_020b539c_eur, ActorId_Heart, &actorParams, 0); +} + +ARM void ActorHeart::func_ov031_020f0750() {} + +ARM ActorHeart::ActorHeart() : + mUnk_94(0), + mUnk_96(6), + mUnk_B8(0), + mUnk_BA(gRandom.ConditionalNext32(0) & 0x80000000 ? 0x666 : ~0x665), + mUnk_BC(0), + mUnk_BE(0), + mUnk_C0(0), + mUnk_C4(0), + mUnk_C8(this) { + + this->mUnk_EC.x = FLOAT_TO_Q20(0.0); + this->mUnk_EC.y = FLOAT_TO_Q20(0.0); + this->mUnk_EC.z = FLOAT_TO_Q20(0.0); + + this->mUnk_9C = 0x13100; + this->mUnk_40 = &this->mUnk_C8; + u16 sp0; + func_01ffedac(&sp0, &this->mPos); + + if (data_027e0cd8->mUnk_0C->func_ov000_02080180(&sp0) == 0x5) { + this->mUnk_34 = (Cylinder *) &data_ov031_02113d64; + } +} + +ARM bool ActorHeart::vfunc_18(unk32 param1) { + this->func_ov031_020ef4a8(); + return true; +} + +static PTMF data_ov031_02113d74[] = { + ActorHeart::func_ov031_020ef2f8, ActorHeart::func_ov031_020ef334, ActorHeart::func_ov031_020ef3a0, + ActorHeart::func_ov031_020ef3d0, ActorHeart::func_ov031_020ef444, ActorHeart::func_ov031_020ef458, +}; + +// non-matching +void ActorHeart::vfunc_20() { + UnkStruct_ov031_020eeee8 stack; + + stack.mUnk_02 = 0; + stack.mUnk_04 = 0x666; + stack.mUnk_06 = 0xfb33; + + func_01fff17c(&stack, data_027e0ce0, 0); + func_02018114(&stack.mUnk_02, stack.mUnk_00); + + this->mUnk_C8.mUnk_08 = stack.mUnk_02; // d0 + this->mUnk_C8.mUnk_0A = stack.mUnk_04; // d2 + this->mUnk_C8.mUnk_0C = stack.mUnk_06; // d4 + stack.mUnk_02 = 0; + stack.mUnk_04 = 0x666; + stack.mUnk_06 = 0; + this->mUnk_C8.mUnk_0E = 0; + + this->mUnk_C8.mUnk_10 = stack.mUnk_04; // d8 + stack.mUnk_06 = stack.mUnk_04; + this->mUnk_C8.mUnk_12 = stack.mUnk_06; // da + this->mUnk_3C = (unk32) & this->mUnk_98; + + CALL_PTMF(PTMF, data_ov031_02113d74[this->mUnk_4C]); + + bool t = true; + if (this->mUnk_94 < this->mUnk_96) { + this->mUnk_94 = this->mUnk_96; + this->mUnk_94++; + t = false; + } else { + t = true; + } + if (t) { + this->func_ov000_020989e0(); + + if (this->mUnk_4C == 1) { + func_ov000_0208bc00(data_027e0ce0, 0, &stack.mUnk_08); + + func_01ffce1c(&stack.mUnk_18, &stack.mUnk_08); + + stack.mUnk_28 += stack.mUnk_14 + (stack.mUnk_14 << 1); + stack.mUnk_1C -= stack.mUnk_14; + + func_01ffcea0(0, &stack); + + while (1) { + // should be lower + this->func_ov031_020ef528(); + + if (data_027e0ce0->func_01fff1a4()) { + func_ov000_0208bc00(data_027e0ce0, 0, &stack.mUnk_08); + + func_01ffce1c(0, 0); + + stack.mUnk_1C += stack.mUnk_14 + stack.mUnk_1C; + stack.mUnk_28 = stack.mUnk_14 + (stack.mUnk_14 << 1) + stack.mUnk_28; + if (func_01ffcea0(0, &stack) != 0x0) { + break; + } + } + } + } + + if (!(this->mUnk_A0 & 0x3ffff)) { + unk16 var = this->mUnk_B4; + if (var != 0x8 && var == 0xC) { + this->mUnk_C0 = this->mUnk_A4; + this->mUnk_9C &= ~0x1000; + } + } + } + + if (this->mUnk_5C.mUnk_24 < 0) { + this->func_ov031_020ef208(); + } + + this->mPrevPos.x = this->mPos.x; + this->mPrevPos.y = this->mPos.y; + this->mPrevPos.z = this->mPos.z; + + VecFx32_Add(&this->mPos, &this->mVel, &this->mPos); + if (this->mUnk_4C != 0x3) { + this->func_ov000_02098910(0, 0x10); + } + if (this->mUnk_46 & 0x3) { + this->mVel.y = FLOAT_TO_Q20(0.0); + } + + VecFx32_Add(&this->mPos, &this->mUnk_EC, &this->mPos); + this->mUnk_EC.x = FLOAT_TO_Q20(0.0); + this->mUnk_EC.y = FLOAT_TO_Q20(0.0); + this->mUnk_EC.z = FLOAT_TO_Q20(0.0); +} + +extern unk32 data_ov000_020aecf8; + +static PTMF data_ov031_02113da4[] = { + ActorHeart::func_ov031_020ef2ec, ActorHeart::func_ov031_020ef320, ActorHeart::func_ov031_020ef35c, + ActorHeart::func_ov031_020ef3b8, ActorHeart::func_ov031_020ef430, ActorHeart::func_ov031_020ef448, +}; + +ARM void ActorHeart::func_ov031_020ef1b4(unk16 param_2) { + this->mUnk_4C = param_2; + this->mUnk_2C = data_ov000_020aecf8; + this->mUnk_44 = 0x9C; + CALL_PTMF(PTMF, data_ov031_02113da4[this->mUnk_4C]); +} + +// non-matching (r1 and r2 swapped) +ARM void ActorHeart::func_ov031_020ef208() { + bool var2 = true; + bool var1 = true; + if (this->mUnk_4C != 0x3 && this->mUnk_4C != 0x4) { + var1 = false; + } + if (!var1) { + if (this->mUnk_4C != 0x5) { + var2 = false; + } + } + + if (var2) { + SET_FLAG(this->mFlags, ActorFlag_2); + return; + } + if ((u8) this->mUnk_BE == 0) { + if (this->mUnk_50 < this->mUnk_52) { + this->mUnk_50++; + var2 = false; + } else { + var2 = true; + } + + if (var2) { + this->mUnk_BE = 0x01; + this->mUnk_50 = 0x00; + this->mUnk_52 = 0x3C; + } + return; + } + + if ((this->mUnk_50 % 8) < 4) { + UNSET_FLAG(this->mFlags, ActorFlag_2); + } else { + SET_FLAG(this->mFlags, ActorFlag_2); + } + + if (this->mUnk_50 < this->mUnk_52) { + this->mUnk_50++; + var2 = false; + } else { + var2 = true; + } + if (var2) { + this->func_ov000_020984d0(); + } +} + +ARM void ActorHeart::func_ov031_020ef2ec() { + this->mVel.y = FLOAT_TO_Q20(0.25); +} + +ARM void ActorHeart::func_ov031_020ef2f8() { + func_ov000_02098838(); + if (this->mVel.y > 0) { + return; + } + this->func_ov031_020ef1b4(0x01); +} + +ARM void ActorHeart::func_ov031_020ef320() { + this->mUnk_2C = 0x06; + this->mUnk_44 = 0x9F; +} + +ARM void ActorHeart::func_ov031_020ef334() { + this->func_ov031_020ef570(); + if ((this->mUnk_46 & 0x3) == 0) { + return; + } + this->func_ov031_020ef1b4(0x02); +} + +ARM void ActorHeart::func_ov031_020ef35c() { + this->mVel.x = FLOAT_TO_Q20(0.0); + this->mVel.y = FLOAT_TO_Q20(0.0); + this->mVel.z = FLOAT_TO_Q20(0.0); + if ((u8) this->mUnk_BE == 0 && (this->mUnk_52 - this->mUnk_50) > 0xB4) { + this->mUnk_52 = 0xB4; + this->mUnk_50 = 0x00; + } + this->mUnk_44 = 0x9F; +} + +ARM void ActorHeart::func_ov031_020ef3a0() { + if (this->mUnk_5C.mUnk_24 >= 0) { + return; + } + this->func_ov031_020ef698(); +} + +ARM void ActorHeart::func_ov031_020ef3b8() { + func_ov017_020bf99c(); + this->mUnk_98.func_ov000_02097bec(); +} + +ARM void ActorHeart::func_ov031_020ef3d0() { + this->func_ov017_020bf9c8(gpActorManager->func_01fff3b4(this->mUnk_C0)); + if (!GET_FLAG(this->mFlags, ActorFlag_5)) { + return; + } + this->mVel.x = FLOAT_TO_Q20(0.0); + this->mVel.y = FLOAT_TO_Q20(0.0); + this->mVel.z = FLOAT_TO_Q20(0.0); + + this->mUnk_9C |= 0x1000; + this->func_ov031_020ef1b4(0x01); +} + +ARM void ActorHeart::func_ov031_020ef430() { + this->mVel.x = FLOAT_TO_Q20(0.0); + this->mVel.y = FLOAT_TO_Q20(0.0); + this->mVel.z = FLOAT_TO_Q20(0.0); +} + +ARM void ActorHeart::func_ov031_020ef444() { + return; +} + +ARM void ActorHeart::func_ov031_020ef448() { + this->mVel.x = FLOAT_TO_Q20(0.0); + this->mVel.z = FLOAT_TO_Q20(0.0); +} + +typedef struct { + STRUCT_PAD(0x00, 0xE8); + VecFx32 mUnk_E8; +} UnkActor_02ef458; + +ARM void ActorHeart::func_ov031_020ef458() { + // which actor is this ? + UnkActor_02ef458 *actor = (UnkActor_02ef458 *) gpActorManager->func_01fff3b4(this->mUnk_C4); + if (actor == nullptr) { + this->func_ov031_020ef1b4(0x01); + return; + } + VecFx32_Copy(&actor->mUnk_E8, &this->mPos); +} + +ARM void ActorHeart::func_ov031_020ef4a8() { + if (this->mUnk_5C.mUnk_24 >= 0) { + this->func_ov031_020ef1b4(2); + return; + } + + switch (this->mUnk_5C.mUnk_2C) { + case 0: + this->mUnk_52 = 0xB4; + this->mUnk_50 = 0x00; + this->func_ov031_020ef1b4(2); + break; + + case 1: + this->mUnk_52 = 0x1E0; + this->mUnk_50 = 0x00; + this->func_ov031_020ef1b4(0); + return; + + default: + this->mUnk_52 = 0x1E0; + this->mUnk_50 = 0x00; + this->func_ov031_020ef1b4(0); + break; + } +} + +ARM void ActorHeart::func_ov031_020ef528() { + data_027e0ce0->func_ov000_0208bc9c(4, 1); + data_027e09a8->func_ov000_02071b30(0x76, &this->mPos, 0); + this->func_ov000_020984d0(); +} + +// non-matching +ARM void ActorHeart::func_ov031_020ef570() { + func_ov000_02098838(); + this->mUnk_B8 += 0x666; + this->mVel.z = FLOAT_TO_Q20(0.0); + + s16 sin_value = SIN((u16) this->mUnk_B8); + s32 value = ((sin_value >> 0x1F) << 6 | sin_value >> 0x1A) + (sin_value * 0x40 > ~0x800); + + this->mVel.x = ROUND_Q20(sin_value * 0x40) + value; + + if (this->mVel.y <= FLOAT_TO_Q20(-0.005)) { + this->mVel.y = FLOAT_TO_Q20(-0.005); + } +} + +ARM void ActorHeart::vfunc_2c(unk32 param1) { + VecFx32 iStack_20; + VecFx32 iStack_2c; + unk32 auStack_30; + + if (this->func_01fff5d0(param1, 0) == 0) { + return; + } + + iStack_20 = this->mPos; + iStack_20.y += FLOAT_TO_Q20(0.03113); + this->func_ov017_020bf5c4(&iStack_20, 0x400, 0x400, 0x1f, 0); + + func_ov000_0205c1f0(&auStack_30, 0x10); + + iStack_2c = this->mPos; + iStack_2c.y += FLOAT_TO_Q20(0.33); + func_ov000_0205c204(&auStack_30, &iStack_2c, 0xccd, 0xccd, 0x1f); +} + +ARM void ActorHeart::func_ov031_020ef698() { + switch (this->mUnk_BC) { + case 0x00: + if ((this->mUnk_46 & 3) == 0) { + this->mUnk_BC += 0x01; + this->mUnk_2C = 0x06; + } + break; + case 0x01: + this->func_ov031_020ef570(); + if ((this->mUnk_46 & 3) != 0) { + this->mVel.x = 0; + this->mVel.y = 0; + this->mVel.z = 0; + this->mUnk_BC = 0; + } + break; + } +} + +#define GET_ACTORHEART(this) reinterpret_cast((this)->mUnk_20) + +ARM ActorHeart_c4::ActorHeart_c4(Actor *param1) : + Actor_c4(param1) { + this->mUnk_20 = param1; + this->mUnk_04 = 1; +} + +// non-matching +ARM unk32 ActorHeart_c4::vfunc_00(Actor_c4_stack param_2, unk32 param_3) { + if (param_3 != 0) { + ActorHeart *pHeart = GET_ACTORHEART(this); + pHeart->mUnk_C4 = param_2.param1; + pHeart->func_ov031_020ef1b4(0x04); + } + + return this->Actor_c4::vfunc_00(param_2, param_3); +} + +ARM void ActorHeart_c4::vfunc_04() { + GET_ACTORHEART(this)->func_ov031_020ef1b4(0x05); + this->Actor_c4::vfunc_04(); +} + +ARM void ActorHeart_c4::vfunc_0c(unk32 param1) { + GET_ACTORHEART(this)->func_ov031_020ef1b4(0x01); + this->Actor_c4::vfunc_0c(param1); +} + +ARM void ActorHeart_c4::vfunc_08() { + GET_ACTORHEART(this)->func_ov031_020ef528(); + this->Actor_c4::vfunc_08(); +} diff --git a/src/031_Land/Actor/ActorUnkHERT.cpp b/src/031_Land/Actor/ActorUnkHERT.cpp deleted file mode 100644 index a8e95079..00000000 --- a/src/031_Land/Actor/ActorUnkHERT.cpp +++ /dev/null @@ -1,46 +0,0 @@ -//! TODO: This file was generated automatically and might contain errors - -#include "Actor/ActorUnkHERT.hpp" -#include "System/SysNew.hpp" - -ARM DECL_PROFILE(ActorProfileUnkHERT); - -ARM Actor *ActorProfileUnkHERT::Create() { - return new(HeapIndex_2) ActorUnkHERT(); -} - -ARM ActorProfileUnkHERT::ActorProfileUnkHERT() : - ActorProfile(ActorId_Heart) {} - -ARM ActorUnkHERT::ActorUnkHERT() {} - -ARM void ActorUnkHERT::func_ov031_020eed64(void) {} -ARM void ActorUnkHERT::func_ov031_020eeed8(void) {} -ARM void ActorUnkHERT::func_ov031_020eeee8(void) {} -ARM void ActorUnkHERT::func_ov031_020ef1b4(void) {} -ARM void ActorUnkHERT::func_ov031_020ef208(void) {} -ARM void ActorUnkHERT::func_ov031_020ef2ec(void) {} -ARM void ActorUnkHERT::func_ov031_020ef2f8(void) {} -ARM void ActorUnkHERT::func_ov031_020ef320(void) {} -ARM void ActorUnkHERT::func_ov031_020ef334(void) {} -ARM void ActorUnkHERT::func_ov031_020ef35c(void) {} -ARM void ActorUnkHERT::func_ov031_020ef3a0(void) {} -ARM void ActorUnkHERT::func_ov031_020ef3b8(void) {} -ARM void ActorUnkHERT::func_ov031_020ef3d0(void) {} -ARM void ActorUnkHERT::func_ov031_020ef430(void) {} -ARM void ActorUnkHERT::func_ov031_020ef444(void) {} -ARM void ActorUnkHERT::func_ov031_020ef448(void) {} -ARM void ActorUnkHERT::func_ov031_020ef458(void) {} -ARM void ActorUnkHERT::func_ov031_020ef4a8(void) {} -ARM void ActorUnkHERT::func_ov031_020ef528(void) {} -ARM void ActorUnkHERT::func_ov031_020ef570(void) {} -ARM void ActorUnkHERT::func_ov031_020ef5e8(void) {} -ARM void ActorUnkHERT::func_ov031_020ef698(void) {} -ARM void ActorUnkHERT::func_ov031_020ef6f8(void) {} -ARM void ActorUnkHERT::func_ov031_020ef730(void) {} -ARM void ActorUnkHERT::func_ov031_020ef774(void) {} -ARM void ActorUnkHERT::func_ov031_020ef794(void) {} -ARM void ActorUnkHERT::func_ov031_020ef7bc(void) {} - -ARM ActorUnkHERT::~ActorUnkHERT() {} -ARM ActorProfileUnkHERT::~ActorProfileUnkHERT() {} diff --git a/tools/configure.py b/tools/configure.py index 4eb387e4..e677bc87 100755 --- a/tools/configure.py +++ b/tools/configure.py @@ -428,7 +428,7 @@ config.libs = [ Object("031_Land/Actor/ActorUnkCLLT.cpp"), Object("031_Land/Actor/ActorUnkEFSB.cpp"), Object("031_Land/Actor/ActorUnkFLEN.cpp"), - Object("031_Land/Actor/ActorUnkHERT.cpp"), + Object("031_Land/Actor/ActorHeart.cpp"), Object("031_Land/Actor/ActorUnkITBM.cpp"), Object("031_Land/Actor/ActorUnkITTD.cpp"), Object("031_Land/Actor/ActorUnkMLCK.cpp"),