From cb52c8c23f5de5ba8509f9471025b4fa995e3b65 Mon Sep 17 00:00:00 2001 From: Aetias <144526980+AetiasHax@users.noreply.github.com> Date: Fri, 29 Aug 2025 20:01:10 +0200 Subject: [PATCH] ActorNavi (#132) * Map symbol in Game * ActorNavi 93% * ActorNavi_04 96% * Document Actor fields * Move MAX_KEYS to ItemManager * Move gTouchControl to its own header * Fix missing includes * Fix regressions * Fix build * Update decompiling guide images * Fix regression --- config/eur/arm9/overlays/ov000/relocs.txt | 2 +- config/eur/arm9/overlays/ov000/symbols.txt | 40 ++-- config/eur/arm9/overlays/ov004/delinks.txt | 3 + config/eur/arm9/overlays/ov004/relocs.txt | 6 +- config/eur/arm9/overlays/ov004/symbols.txt | 10 +- config/eur/arm9/overlays/ov014/symbols.txt | 2 +- config/eur/arm9/overlays/ov059/symbols.txt | 2 +- config/eur/arm9/symbols.txt | 4 +- config/usa/arm9/overlays/ov000/relocs.txt | 2 +- config/usa/arm9/overlays/ov000/symbols.txt | 40 ++-- config/usa/arm9/overlays/ov004/delinks.txt | 3 + config/usa/arm9/overlays/ov004/relocs.txt | 6 +- config/usa/arm9/overlays/ov004/symbols.txt | 10 +- config/usa/arm9/overlays/ov014/symbols.txt | 2 +- config/usa/arm9/overlays/ov059/symbols.txt | 2 +- config/usa/arm9/symbols.txt | 4 +- docs/decompiling.md | 8 +- docs/images/ghidra_decomp.png | Bin 9695 -> 16599 bytes docs/images/objdiff_function.png | Bin 29981 -> 41016 bytes docs/images/objdiff_match.png | Bin 35154 -> 53584 bytes include/Actor/Actor.hpp | 24 +- include/Actor/ActorType.hpp | 94 +------- include/Actor/ActorTypeId.hpp | 96 ++++++++ include/Actor/Dungeon/ActorActionObject.hpp | 1 + include/Actor/Navi/ActorForceNavi.hpp | 1 + include/Actor/Navi/ActorNavi.hpp | 46 ++-- include/Actor/Navi/ActorNaviBase.hpp | 66 ++++-- include/Actor/Navi/ActorWisdomNavi.hpp | 1 + include/Actor/Player/ActorBomb.hpp | 2 +- include/DTCM/UnkStruct_027e0f6c.hpp | 3 + include/Item/ItemManager.hpp | 1 + include/Map/Course.hpp | 2 - include/Map/MapBase.hpp | 2 +- include/Map/MapManager.hpp | 2 +- include/Message/MsgProc.hpp | 1 - include/Physics/Cylinder.hpp | 5 + include/Player/TouchControl.hpp | 1 + include/Render/ModelRender.hpp | 4 +- include/Unknown/UnkStruct_02037750.hpp | 10 +- include/Unknown/UnkStruct_02057200.hpp | 10 + include/Unknown/UnkStruct_ov000_020b7d74.hpp | 14 ++ include/Unknown/UnkStruct_ov000_020beba8.hpp | 4 +- include/Unknown/UnkStruct_ov000_020c0c08.hpp | 2 + include/Unknown/UnkStruct_ov000_020d18f4.hpp | 25 ++ libs/nds/include/nds/ns.h | 70 ++++++ libs/nds/include/nds/overlay.h | 2 + src/00_Core/Actor/Actor.cpp | 30 +-- .../Actor/Dungeon/ActorActionObject.cpp | 17 +- src/00_Core/Actor/Navi/ActorNavi.cpp | 215 ++++++++++++++++-- src/00_Core/Actor/Navi/ActorNaviBase.cpp | 4 +- src/00_Core/Map/MapBase.cpp | 2 +- src/00_Core/Map/MapManager.cpp | 13 +- src/00_Core/Render/ModelRender.cpp | 4 +- .../Unknown/UnkStruct_ov000_020beba8.cpp | 4 +- src/04_Load/Actor/Navi/ActorNavi.cpp | 6 - src/04_Load/Actor/Navi/ActorNaviBase.cpp | 7 - src/04_Load/Actor/Navi/ActorNavi_04.cpp | 81 +++++++ src/14_Land/Actor/ActorRupee.cpp | 38 ++-- src/14_Land/Actor/Player/ActorBomb.cpp | 2 +- src/14_Land/Actor/Player/ActorRefill.cpp | 28 +-- src/58_Bombchu/Player/EquipBombchu.cpp | 2 +- src/59_Hammer/Actor/Navi/ActorNaviBase_59.cpp | 28 +-- src/59_Hammer/Player/EquipHammer.cpp | 4 +- src/Main/System/OverlayManager.cpp | 2 +- src/Main/Unknown/UnkStruct_02037750.cpp | 1 + src/Main/Unknown/UnkStruct_020397f8.cpp | 1 + 66 files changed, 778 insertions(+), 346 deletions(-) create mode 100644 include/Actor/ActorTypeId.hpp create mode 100644 include/Unknown/UnkStruct_02057200.hpp create mode 100644 include/Unknown/UnkStruct_ov000_020b7d74.hpp create mode 100644 include/Unknown/UnkStruct_ov000_020d18f4.hpp create mode 100644 libs/nds/include/nds/ns.h delete mode 100644 src/04_Load/Actor/Navi/ActorNavi.cpp delete mode 100644 src/04_Load/Actor/Navi/ActorNaviBase.cpp create mode 100644 src/04_Load/Actor/Navi/ActorNavi_04.cpp diff --git a/config/eur/arm9/overlays/ov000/relocs.txt b/config/eur/arm9/overlays/ov000/relocs.txt index 3268527c..4736fe83 100644 --- a/config/eur/arm9/overlays/ov000/relocs.txt +++ b/config/eur/arm9/overlays/ov000/relocs.txt @@ -6473,7 +6473,7 @@ from:0x020b80f8 kind:arm_call to:0x0202e9dc module:main from:0x020b8104 kind:arm_call_thumb to:0x02107aa0 module:overlay(4) from:0x020b810c kind:load to:0x027e0fe0 module:dtcm from:0x020b811c kind:arm_call to:0x020beba8 module:overlay(0) -from:0x020b8130 kind:load to:0x020e6658 module:overlay(0) +from:0x020b8130 kind:load to:0x020e6650 add:8 module:overlay(0) from:0x020b813c kind:arm_call to:0x02081f4c module:overlay(0) from:0x020b8150 kind:arm_call to:0x02081f4c module:overlay(0) from:0x020b8158 kind:arm_call to:0x0202ea0c module:main diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 3227b3c6..dc608c31 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -1091,7 +1091,7 @@ func_ov000_0209394c kind:function(arm,size=0xc) addr:0x0209394c func_ov000_02093958 kind:function(arm,size=0x10) addr:0x02093958 func_ov000_02093968 kind:function(arm,size=0x78) addr:0x02093968 func_ov000_020939e0 kind:function(arm,size=0x3c) addr:0x020939e0 -_Z19func_ov000_02093a1cPjPii kind:function(arm,size=0x20) addr:0x02093a1c +_ZN18UnkStruct_027e0f6c19func_ov000_02093a1cEPjPS_t kind:function(arm,size=0x20) addr:0x02093a1c func_ov000_02093a3c kind:function(arm,size=0x10) addr:0x02093a3c func_ov000_02093a4c kind:function(arm,size=0x10) addr:0x02093a4c func_ov000_02093a5c kind:function(arm,size=0x94) addr:0x02093a5c @@ -1986,8 +1986,8 @@ _ZN12TouchGestureD2Ev kind:function(arm,size=0x4) addr:0x020a9544 _ZN16TouchGestureBaseD2Ev kind:function(arm,size=0x4) addr:0x020a9548 _ZN16TouchGestureBase17ResetTouchHistoryEv kind:function(arm,size=0xc) addr:0x020a954c _ZN16TouchGestureBaseD1Ev kind:function(arm,size=0x14) addr:0x020a9558 -_ZN11ModelRenderC2Ev kind:function(thumb,size=0x1c) addr:0x020a956c -_ZN11ModelRenderC1Ei kind:function(thumb,size=0x1c) addr:0x020a9588 +_ZN11ModelRenderC2EP9ItemModel kind:function(thumb,size=0x1c) addr:0x020a956c +_ZN11ModelRenderC1EP9ItemModel kind:function(thumb,size=0x1c) addr:0x020a9588 _ZN11ModelRenderD1Ev kind:function(thumb,size=0x20) addr:0x020a95a4 _ZN11ModelRenderD0Ev kind:function(thumb,size=0x28) addr:0x020a95c4 _ZN11ModelRenderD2Ev kind:function(thumb,size=0x20) addr:0x020a95ec @@ -2007,7 +2007,7 @@ _ZN11ModelRender8vfunc_30Ev kind:function(arm,size=0x2c) addr:0x020a98bc _ZN11ModelRender19func_ov000_020a98e8Ei kind:function(arm,size=0x24) addr:0x020a98e8 _ZN11ModelRender19func_ov000_020a990cEi kind:function(arm,size=0x2c) addr:0x020a990c _ZN11ModelRender19func_ov000_020a9938Ei kind:function(thumb,size=0x28) addr:0x020a9938 -_ZN11ModelRender19func_ov000_020a9960Ei kind:function(arm,size=0x8) addr:0x020a9960 +_ZN11ModelRender19func_ov000_020a9960EPv kind:function(arm,size=0x8) addr:0x020a9960 _ZN11ModelRender8vfunc_38Ev kind:function(arm,size=0x2c) addr:0x020a9968 _ZN11ModelRender8vfunc_3cEv kind:function(arm,size=0x4) addr:0x020a9994 _ZN11ModelRender19func_ov000_020a9998Eii kind:function(arm,size=0x28) addr:0x020a9998 @@ -2018,7 +2018,7 @@ func_ov000_020a9a40 kind:function(thumb,size=0x28) addr:0x020a9a40 func_ov000_020a9a68 kind:function(thumb,size=0x24) addr:0x020a9a68 func_ov000_020a9a8c kind:function(thumb,size=0xc) addr:0x020a9a8c func_ov000_020a9a98 kind:function(thumb,size=0x12) addr:0x020a9a98 -func_ov000_020a9aac kind:function(thumb,size=0xc) addr:0x020a9aac +_ZN18ActorNaviBase_Unk2D1Ev kind:function(thumb,size=0xc) addr:0x020a9aac func_ov000_020a9ab8 kind:function(thumb,size=0x12) addr:0x020a9ab8 func_ov000_020a9acc kind:function(thumb,size=0xc) addr:0x020a9acc func_ov000_020a9ad8 kind:function(thumb,size=0x12) addr:0x020a9ad8 @@ -2398,10 +2398,10 @@ _ZN13PlayerManager4SaveEP15SaveItemManager kind:function(thumb,size=0x50) addr:0 _ZN13PlayerManager17IncreaseMaxHealthEs kind:function(thumb,size=0x14) addr:0x020b804c _ZN13PlayerManager19UpdateShipMaxHealthEv kind:function(thumb,size=0x80) addr:0x020b8060 _ZN9ActorNavi6CreateEv kind:function(arm,size=0x30) addr:0x020b80e0 -_ZN24UnkStruct_ov000_020b8110C2Ev kind:function(arm,size=0x24) addr:0x020b8110 +_ZN24UnkStruct_ov000_020b8110C1Ev kind:function(arm,size=0x24) addr:0x020b8110 _ZN24UnkStruct_ov000_020b8110D1Ev kind:function(arm,size=0x14) addr:0x020b8134 _ZN24UnkStruct_ov000_020b8110D0Ev kind:function(arm,size=0x1c) addr:0x020b8148 -_ZN24UnkStruct_ov000_020b81108vfunc_08EPs kind:function(arm,size=0x50) addr:0x020b8164 +_ZN24UnkStruct_ov000_020b81108vfunc_08EP27UnkStruct_ov000_020beba8_08 kind:function(arm,size=0x50) addr:0x020b8164 _ZN24UnkStruct_ov000_020b81108vfunc_18EPi kind:function(arm,size=0x40) addr:0x020b81b4 _ZN24UnkStruct_ov000_020b81108vfunc_14EPt kind:function(arm,size=0xc) addr:0x020b81f4 _ZN9ActorNavi19func_ov000_020b8200Ev kind:function(arm,size=0x10) addr:0x020b8200 @@ -2411,7 +2411,7 @@ _ZN9ActorNavi10GetFairyIdEv kind:function(arm,size=0x8) addr:0x020b8280 _ZN9ActorNavi8vfunc_b8Ev kind:function(arm,size=0x8) addr:0x020b8288 _ZN9ActorNavi8vfunc_d4Ev kind:function(arm,size=0x2c) addr:0x020b8290 _ZN9ActorNavi8vfunc_d0Ev kind:function(arm,size=0x2c) addr:0x020b82bc -_ZN9ActorNavi9SetActiveEb kind:function(arm,size=0x58) addr:0x020b82e8 +_ZN9ActorNavi9SetActiveEi kind:function(arm,size=0x58) addr:0x020b82e8 _ZN9ActorNavi8vfunc_e0Ev kind:function(arm,size=0xb8) addr:0x020b8340 _ZN9ActorNavi8vfunc_d8Ev kind:function(arm,size=0x20) addr:0x020b83f8 _ZN9ActorNavi8vfunc_20Eb kind:function(arm,size=0x3c) addr:0x020b8418 @@ -2422,8 +2422,8 @@ _ZN9ActorNavi8vfunc_8cEv kind:function(arm,size=0x8) addr:0x020b84d0 _ZN9ActorNavi8vfunc_ecEv kind:function(arm,size=0x54) addr:0x020b84d8 _Z14GetEquipHammerv kind:function(arm,size=0x10) addr:0x020b852c local _ZN9ActorNavi19func_ov000_020b853cEv kind:function(arm,size=0x14) addr:0x020b853c -_ZN9ActorNaviD1Ev kind:function(arm,size=0x48) addr:0x020b8550 -_ZN9ActorNaviD0Ev kind:function(arm,size=0x40) addr:0x020b8598 +_ZN9ActorNaviD0Ev kind:function(arm,size=0x48) addr:0x020b8550 +_ZN9ActorNaviD1Ev kind:function(arm,size=0x40) addr:0x020b8598 func_ov000_020b85d8 kind:function(thumb,size=0x28) addr:0x020b85d8 func_ov000_020b8600 kind:function(arm,size=0x10) addr:0x020b8600 func_ov000_020b8610 kind:function(arm,size=0x1c) addr:0x020b8610 @@ -2650,7 +2650,7 @@ _ZN9EquipItem8GiveAmmoEj kind:function(arm,size=0x34) addr:0x020beb5c _ZNK9EquipItem9GetHitboxEP8Cylinder kind:function(arm,size=0x18) addr:0x020beb90 _ZN24UnkStruct_ov000_020beba8C2Ei kind:function(arm,size=0x18) addr:0x020beba8 _ZN24UnkStruct_ov000_020beba8C1Ei kind:function(arm,size=0x18) addr:0x020bebc0 -_ZN24UnkStruct_ov000_020beba88vfunc_08EPs kind:function(arm,size=0x84) addr:0x020bebd8 +_ZN24UnkStruct_ov000_020beba88vfunc_08EP27UnkStruct_ov000_020beba8_08 kind:function(arm,size=0x84) addr:0x020bebd8 _ZN24UnkStruct_ov000_020beba88vfunc_0cEPs kind:function(arm,size=0x84) addr:0x020bec5c _ZN24UnkStruct_ov000_020beba88vfunc_10EPi kind:function(arm,size=0x9c) addr:0x020bece0 _ZN24UnkStruct_ov000_020beba88vfunc_18EPi kind:function(arm,size=0x50) addr:0x020bed7c @@ -2701,7 +2701,7 @@ _ZN15ActorWisdomNavi10GetFairyIdEv kind:function(arm,size=0x8) addr:0x020c0ba4 _ZN15ActorWisdomNaviD0Ev kind:function(arm,size=0x1c) addr:0x020c0bac _ZN15ActorWisdomNaviD1Ev kind:function(arm,size=0x14) addr:0x020c0bc8 func_ov000_020c0bdc kind:function(arm,size=0x2c) addr:0x020c0bdc -_ZN24UnkStruct_ov000_020c0c08C1EP27UnkStruct_ov000_020c0c08_04Ph kind:function(thumb,size=0x28) addr:0x020c0c08 +_ZN24UnkStruct_ov000_020c0c08C2EP27UnkStruct_ov000_020c0c08_04P9ItemModel kind:function(thumb,size=0x28) addr:0x020c0c08 func_ov000_020c0c30 kind:function(thumb,size=0x2) addr:0x020c0c30 func_ov000_020c0c34 kind:function(thumb,size=0xc) addr:0x020c0c34 func_ov000_020c0c40 kind:function(thumb,size=0x2) addr:0x020c0c40 @@ -2747,8 +2747,8 @@ _ZN5Actor8vfunc_18Ej kind:function(arm,size=0x18) addr:0x020c17bc _ZN5Actor8vfunc_1cEPt kind:function(arm,size=0xc0) addr:0x020c17d4 _ZN5Actor8vfunc_20Eb kind:function(arm,size=0x4) addr:0x020c1894 _ZN5Actor10SetUnk_129Eb kind:function(arm,size=0x10) addr:0x020c1898 -_ZN5Actor10SetUnk_11bEv kind:function(arm,size=0x1c) addr:0x020c18a8 -_ZN5Actor11SetVelocityEP5Vec3p kind:function(arm,size=0x38) addr:0x020c18c4 +_ZN5Actor4GrabEv kind:function(arm,size=0x1c) addr:0x020c18a8 +_ZN5Actor4DropEP5Vec3p kind:function(arm,size=0x38) addr:0x020c18c4 _ZN5Actor8vfunc_60Ev kind:function(arm,size=0x8) addr:0x020c18fc _ZN5Actor8vfunc_64Ev kind:function(arm,size=0x4) addr:0x020c1904 _ZN5Actor10SetUnk_11cEc kind:function(arm,size=0x8) addr:0x020c1908 @@ -3393,8 +3393,8 @@ func_ov000_020d17a0 kind:function(arm,size=0x74) addr:0x020d17a0 func_ov000_020d1814 kind:function(arm,size=0x5c) addr:0x020d1814 func_ov000_020d1870 kind:function(arm,size=0x44) addr:0x020d1870 func_ov000_020d18b4 kind:function(arm,size=0x40) addr:0x020d18b4 -func_ov000_020d18f4 kind:function(arm,size=0x8c) addr:0x020d18f4 -func_ov000_020d1980 kind:function(arm,size=0x54) addr:0x020d1980 +_ZN24UnkStruct_ov000_020d18f4C1Ei kind:function(arm,size=0x8c) addr:0x020d18f4 +_ZN24UnkStruct_ov000_020d18f4D1Ev kind:function(arm,size=0x54) addr:0x020d1980 func_ov000_020d19d4 kind:function(arm,size=0x5c) addr:0x020d19d4 func_ov000_020d1a30 kind:function(arm,size=0x20) addr:0x020d1a30 func_ov000_020d1a50 kind:function(arm,size=0xa0) addr:0x020d1a50 @@ -5010,8 +5010,8 @@ data_ov000_020e6528 kind:data(any) addr:0x020e6528 data_ov000_020e652c kind:data(any) addr:0x020e652c data_ov000_020e6530 kind:data(any) addr:0x020e6530 data_ov000_020e6534 kind:data(any) addr:0x020e6534 -_ZTV9ActorNavi kind:data(any) addr:0x020e6560 -_ZTV24UnkStruct_ov000_020b8110 kind:data(any) addr:0x020e6658 +_ZTV9ActorNavi kind:data(any) addr:0x020e6558 +_ZTV24UnkStruct_ov000_020b8110 kind:data(any) addr:0x020e6650 _ZTV14ActorForceNavi kind:data(any) addr:0x020e6674 data_ov000_020e676c kind:data(any) addr:0x020e676c data_ov000_020e6770 kind:data(any) addr:0x020e6770 @@ -5025,8 +5025,8 @@ data_ov000_020e678c kind:data(any) addr:0x020e678c data_ov000_020e67ac kind:data(any) addr:0x020e67ac data_ov000_020e67b8 kind:data(any) addr:0x020e67b8 data_ov000_020e67d8 kind:data(any) addr:0x020e67d8 -vtable_ov000_020e67e4 kind:data(any) addr:0x020e67dc -vtable_ov000_020e68dc kind:data(any) addr:0x020e68d4 +_ZTV13ActorNaviBase kind:data(any) addr:0x020e67dc +_ZTV18ActorNaviBase_Unk3 kind:data(any) addr:0x020e68d4 data_ov000_020e691c kind:data(any) addr:0x020e691c data_ov000_020e6934 kind:data(any) addr:0x020e6934 data_ov000_020e6974 kind:data(any) addr:0x020e6974 diff --git a/config/eur/arm9/overlays/ov004/delinks.txt b/config/eur/arm9/overlays/ov004/delinks.txt index 08cdd6f0..3a3f9a9f 100644 --- a/config/eur/arm9/overlays/ov004/delinks.txt +++ b/config/eur/arm9/overlays/ov004/delinks.txt @@ -8,3 +8,6 @@ src/04_Load/Player/LinkStateMove_04.cpp: complete .text start:0x0210aed4 end:0x0210af14 + +src/04_Load/Actor/Navi/ActorNavi_04.cpp: + .text start:0x02107810 end:0x02107c00 diff --git a/config/eur/arm9/overlays/ov004/relocs.txt b/config/eur/arm9/overlays/ov004/relocs.txt index f056478a..ea0b6de9 100644 --- a/config/eur/arm9/overlays/ov004/relocs.txt +++ b/config/eur/arm9/overlays/ov004/relocs.txt @@ -1534,7 +1534,7 @@ from:0x0210788e kind:thumb_call_arm to:0x020d18f4 module:overlay(0) from:0x021078f4 kind:load to:0x020e67dc add:8 module:overlay(0) from:0x021078f8 kind:load to:0x020ee1f8 module:overlay(0) from:0x021078fc kind:load to:0x020e67ac module:overlay(0) -from:0x02107900 kind:load to:0x02110540 module:overlay(4) +from:0x02107900 kind:load to:0x02110538 add:8 module:overlay(4) from:0x02107904 kind:load to:0x020b7d74 module:overlay(0) from:0x02107908 kind:load to:0x021079d5 module:overlay(4) from:0x02107916 kind:thumb_call_arm to:0x020d1980 module:overlay(0) @@ -1569,9 +1569,9 @@ from:0x02107abe kind:thumb_call to:0x020a9588 module:overlay(0) from:0x02107ac8 kind:thumb_call_arm to:0x020ad52c module:overlay(0) from:0x02107ad8 kind:thumb_call to:0x020c0c08 module:overlay(0) from:0x02107b1c kind:thumb_call_arm to:0x0204f614 module:main -from:0x02107b4c kind:load to:0x020e6560 module:overlay(0) +from:0x02107b4c kind:load to:0x020e6558 add:8 module:overlay(0) from:0x02107b50 kind:load to:0x027e0fb4 module:dtcm -from:0x02107b54 kind:load to:0x02110540 module:overlay(4) +from:0x02107b54 kind:load to:0x02110538 add:8 module:overlay(4) from:0x02107b58 kind:load to:0x020b7d74 module:overlay(0) from:0x02107b5c kind:load to:0x021079d5 module:overlay(4) from:0x02107b60 kind:load to:0x02057200 module:main diff --git a/config/eur/arm9/overlays/ov004/symbols.txt b/config/eur/arm9/overlays/ov004/symbols.txt index e2593efe..7b59a721 100644 --- a/config/eur/arm9/overlays/ov004/symbols.txt +++ b/config/eur/arm9/overlays/ov004/symbols.txt @@ -224,11 +224,11 @@ _ZN13ActorNaviBaseC2Ev kind:function(thumb,size=0xfc) addr:0x02107810 _ZN13ActorNaviBaseD1Ev kind:function(thumb,size=0x40) addr:0x0210790c _ZN13ActorNaviBaseD0Ev kind:function(thumb,size=0x48) addr:0x0210794c _ZN13ActorNaviBaseD2Ev kind:function(thumb,size=0x40) addr:0x02107994 -_Z19func_ov004_021079d4Pi kind:function(thumb,size=0x6) addr:0x021079d4 +_ZN18ActorNaviBase_Unk1C1Ev kind:function(thumb,size=0x6) addr:0x021079d4 _ZN13ActorNaviBase4InitEv kind:function(thumb,size=0xa4) addr:0x021079dc -func_ov004_02107a80 kind:function(thumb,size=0x20) addr:0x02107a80 -func_ov004_02107aa0 kind:function(thumb,size=0xc4) addr:0x02107aa0 -func_ov004_02107b64 kind:function(thumb,size=0x9c) addr:0x02107b64 +_ZN18ActorNaviBase_Unk3C1EP9ItemModel kind:function(thumb,size=0x20) addr:0x02107a80 +_ZN9ActorNaviC1Ev kind:function(thumb,size=0xc4) addr:0x02107aa0 +_ZN9ActorNavi4InitEv kind:function(thumb,size=0x9c) addr:0x02107b64 func_ov004_02107c00 kind:function(thumb,size=0x2c) addr:0x02107c00 func_ov004_02107c2c kind:function(thumb,size=0x20) addr:0x02107c2c func_ov004_02107c4c kind:function(thumb,size=0x1c0) addr:0x02107c4c @@ -594,7 +594,7 @@ data_ov004_021104f8 kind:data(any) addr:0x021104f8 data_ov004_02110500 kind:data(any) addr:0x02110500 data_ov004_02110508 kind:data(any) addr:0x02110508 data_ov004_02110520 kind:data(any) addr:0x02110520 -data_ov004_02110540 kind:data(any) addr:0x02110540 +_ZTV18ActorNaviBase_Unk2 kind:data(any) addr:0x02110538 data_ov004_02110548 kind:data(any) addr:0x02110548 data_ov004_0211054c kind:data(any) addr:0x0211054c data_ov004_02110554 kind:data(any) addr:0x02110554 diff --git a/config/eur/arm9/overlays/ov014/symbols.txt b/config/eur/arm9/overlays/ov014/symbols.txt index a3a2914d..db56cc1d 100644 --- a/config/eur/arm9/overlays/ov014/symbols.txt +++ b/config/eur/arm9/overlays/ov014/symbols.txt @@ -62,7 +62,7 @@ _ZN9ActorBomb8vfunc_18Ej kind:function(arm,size=0x98) addr:0x02122b20 _ZN9ActorBomb19func_ov014_02122bb8Ei kind:function(arm,size=0xe4) addr:0x02122bb8 _ZN9ActorBomb8vfunc_54Ev kind:function(arm,size=0x18) addr:0x02122c9c _ZN9ActorBomb8vfunc_20Eb kind:function(arm,size=0xb8) addr:0x02122cb4 -_ZN9ActorBomb11SetVelocityEP5Vec3p kind:function(arm,size=0xdc) addr:0x02122d6c +_ZN9ActorBomb4DropEP5Vec3p kind:function(arm,size=0xdc) addr:0x02122d6c _ZN9ActorBomb19func_ov014_02122e48EPi kind:function(arm,size=0x34) addr:0x02122e48 _ZN9ActorBomb19func_ov014_02122e7cEv kind:function(arm,size=0x1c) addr:0x02122e7c _ZN9ActorBomb19func_ov014_02122e98Ev kind:function(arm,size=0x20) addr:0x02122e98 diff --git a/config/eur/arm9/overlays/ov059/symbols.txt b/config/eur/arm9/overlays/ov059/symbols.txt index 1a27b353..fa3b63ed 100644 --- a/config/eur/arm9/overlays/ov059/symbols.txt +++ b/config/eur/arm9/overlays/ov059/symbols.txt @@ -18,7 +18,7 @@ _Z14GetEquipHammerv kind:function(arm,size=0x10) addr:0x0219930c _ZN13LinkStateItem15StopUsingHammerEv kind:function(arm,size=0x20) addr:0x0219931c _ZN9ActorNavi19func_ov059_0219933cEj kind:function(arm,size=0xd70) addr:0x0219933c _ZN9ActorNavi19func_ov059_0219a0acEv kind:function(arm,size=0x95c) addr:0x0219a0ac -_ZN9ActorNavi19func_ov059_0219aa08Ev kind:function(arm,size=0x1a0) addr:0x0219aa08 +_ZN9ActorNavi19func_ov059_0219aa08Eb kind:function(arm,size=0x1a0) addr:0x0219aa08 _ZN9ActorNavi19func_ov059_0219aba8Ej kind:function(arm,size=0x36c) addr:0x0219aba8 _ZN9ActorNavi19func_ov059_0219af14Ev kind:function(arm,size=0xb0) addr:0x0219af14 _ZN9ActorNavi19func_ov059_0219afc4Ev kind:function(arm,size=0x5c) addr:0x0219afc4 diff --git a/config/eur/arm9/symbols.txt b/config/eur/arm9/symbols.txt index 74b55101..ff218aae 100644 --- a/config/eur/arm9/symbols.txt +++ b/config/eur/arm9/symbols.txt @@ -919,8 +919,8 @@ func_0201e5c8 kind:function(arm,size=0x10) addr:0x0201e5c8 func_0201e5d8 kind:function(arm,size=0x10) addr:0x0201e5d8 func_0201e5e8 kind:function(arm,size=0x74) addr:0x0201e5e8 func_0201e65c kind:function(arm,size=0x1c) addr:0x0201e65c -func_0201e678 kind:function(arm,size=0x20) addr:0x0201e678 -func_0201e698 kind:function(arm,size=0x1c) addr:0x0201e698 +GetJntAnimation kind:function(arm,size=0x20) addr:0x0201e678 +FindJntSection kind:function(arm,size=0x1c) addr:0x0201e698 func_0201e6b4 kind:function(arm,size=0xac) addr:0x0201e6b4 func_0201e760 kind:function(arm,size=0x2c) addr:0x0201e760 func_0201e78c kind:function(arm,size=0x94) addr:0x0201e78c diff --git a/config/usa/arm9/overlays/ov000/relocs.txt b/config/usa/arm9/overlays/ov000/relocs.txt index 29b56242..8744298a 100644 --- a/config/usa/arm9/overlays/ov000/relocs.txt +++ b/config/usa/arm9/overlays/ov000/relocs.txt @@ -6473,7 +6473,7 @@ from:0x020b8098 kind:arm_call to:0x0202e9d8 module:main from:0x020b80a4 kind:arm_call_thumb to:0x02107a20 module:overlay(4) from:0x020b80ac kind:load to:0x027e0fe0 module:dtcm from:0x020b80bc kind:arm_call to:0x020beb48 module:overlay(0) -from:0x020b80d0 kind:load to:0x020e65f8 module:overlay(0) +from:0x020b80d0 kind:load to:0x020e65f0 add:8 module:overlay(0) from:0x020b80dc kind:arm_call to:0x02081eec module:overlay(0) from:0x020b80f0 kind:arm_call to:0x02081eec module:overlay(0) from:0x020b80f8 kind:arm_call to:0x0202ea08 module:main diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index c9eb2494..a75980b2 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -1091,7 +1091,7 @@ func_ov000_0209394c kind:function(arm,size=0xc) addr:0x020938ec func_ov000_02093958 kind:function(arm,size=0x10) addr:0x020938f8 func_ov000_02093968 kind:function(arm,size=0x78) addr:0x02093908 func_ov000_020939e0 kind:function(arm,size=0x3c) addr:0x02093980 -_Z19func_ov000_02093a1cPjPii kind:function(arm,size=0x20) addr:0x020939bc +_ZN18UnkStruct_027e0f6c19func_ov000_02093a1cEPjPS_t kind:function(arm,size=0x20) addr:0x020939bc func_ov000_02093a3c kind:function(arm,size=0x10) addr:0x020939dc func_ov000_02093a4c kind:function(arm,size=0x10) addr:0x020939ec func_ov000_02093a5c kind:function(arm,size=0x94) addr:0x020939fc @@ -1986,8 +1986,8 @@ _ZN12TouchGestureD2Ev kind:function(arm,size=0x4) addr:0x020a94e4 _ZN16TouchGestureBaseD2Ev kind:function(arm,size=0x4) addr:0x020a94e8 _ZN16TouchGestureBase17ResetTouchHistoryEv kind:function(arm,size=0xc) addr:0x020a94ec _ZN16TouchGestureBaseD1Ev kind:function(arm,size=0x14) addr:0x020a94f8 -_ZN11ModelRenderC2Ev kind:function(thumb,size=0x1c) addr:0x020a950c -_ZN11ModelRenderC1Ei kind:function(thumb,size=0x1c) addr:0x020a9528 +_ZN11ModelRenderC2EP9ItemModel kind:function(thumb,size=0x1c) addr:0x020a950c +_ZN11ModelRenderC1EP9ItemModel kind:function(thumb,size=0x1c) addr:0x020a9528 _ZN11ModelRenderD1Ev kind:function(thumb,size=0x20) addr:0x020a9544 _ZN11ModelRenderD0Ev kind:function(thumb,size=0x28) addr:0x020a9564 _ZN11ModelRenderD2Ev kind:function(thumb,size=0x20) addr:0x020a958c @@ -2007,7 +2007,7 @@ _ZN11ModelRender8vfunc_30Ev kind:function(arm,size=0x2c) addr:0x020a985c _ZN11ModelRender19func_ov000_020a98e8Ei kind:function(arm,size=0x24) addr:0x020a9888 _ZN11ModelRender19func_ov000_020a990cEi kind:function(arm,size=0x2c) addr:0x020a98ac _ZN11ModelRender19func_ov000_020a9938Ei kind:function(thumb,size=0x28) addr:0x020a98d8 -_ZN11ModelRender19func_ov000_020a9960Ei kind:function(arm,size=0x8) addr:0x020a9900 +_ZN11ModelRender19func_ov000_020a9960EPv kind:function(arm,size=0x8) addr:0x020a9900 _ZN11ModelRender8vfunc_38Ev kind:function(arm,size=0x2c) addr:0x020a9908 _ZN11ModelRender8vfunc_3cEv kind:function(arm,size=0x4) addr:0x020a9934 _ZN11ModelRender19func_ov000_020a9998Eii kind:function(arm,size=0x28) addr:0x020a9938 @@ -2018,7 +2018,7 @@ func_ov000_020a9a40 kind:function(thumb,size=0x28) addr:0x020a99e0 func_ov000_020a9a68 kind:function(thumb,size=0x24) addr:0x020a9a08 func_ov000_020a9a8c kind:function(thumb,size=0xc) addr:0x020a9a2c func_ov000_020a9a98 kind:function(thumb,size=0x12) addr:0x020a9a38 -func_ov000_020a9aac kind:function(thumb,size=0xc) addr:0x020a9a4c +_ZN18ActorNaviBase_Unk2D1Ev kind:function(thumb,size=0xc) addr:0x020a9a4c func_ov000_020a9ab8 kind:function(thumb,size=0x12) addr:0x020a9a58 func_ov000_020a9acc kind:function(thumb,size=0xc) addr:0x020a9a6c func_ov000_020a9ad8 kind:function(thumb,size=0x12) addr:0x020a9a78 @@ -2398,10 +2398,10 @@ _ZN13PlayerManager4SaveEP15SaveItemManager kind:function(thumb,size=0x50) addr:0 _ZN13PlayerManager17IncreaseMaxHealthEs kind:function(thumb,size=0x14) addr:0x020b7fec _ZN13PlayerManager19UpdateShipMaxHealthEv kind:function(thumb,size=0x80) addr:0x020b8000 _ZN9ActorNavi6CreateEv kind:function(arm,size=0x30) addr:0x020b8080 -_ZN24UnkStruct_ov000_020b8110C2Ev kind:function(arm,size=0x24) addr:0x020b80b0 +_ZN24UnkStruct_ov000_020b8110C1Ev kind:function(arm,size=0x24) addr:0x020b80b0 _ZN24UnkStruct_ov000_020b8110D1Ev kind:function(arm,size=0x14) addr:0x020b80d4 _ZN24UnkStruct_ov000_020b8110D0Ev kind:function(arm,size=0x1c) addr:0x020b80e8 -_ZN24UnkStruct_ov000_020b81108vfunc_08EPs kind:function(arm,size=0x50) addr:0x020b8104 +_ZN24UnkStruct_ov000_020b81108vfunc_08EP27UnkStruct_ov000_020beba8_08 kind:function(arm,size=0x50) addr:0x020b8104 _ZN24UnkStruct_ov000_020b81108vfunc_18EPi kind:function(arm,size=0x40) addr:0x020b8154 _ZN24UnkStruct_ov000_020b81108vfunc_14EPt kind:function(arm,size=0xc) addr:0x020b8194 _ZN9ActorNavi19func_ov000_020b8200Ev kind:function(arm,size=0x10) addr:0x020b81a0 @@ -2411,7 +2411,7 @@ _ZN9ActorNavi10GetFairyIdEv kind:function(arm,size=0x8) addr:0x020b8220 _ZN9ActorNavi8vfunc_b8Ev kind:function(arm,size=0x8) addr:0x020b8228 _ZN9ActorNavi8vfunc_d4Ev kind:function(arm,size=0x2c) addr:0x020b8230 _ZN9ActorNavi8vfunc_d0Ev kind:function(arm,size=0x2c) addr:0x020b825c -_ZN9ActorNavi9SetActiveEb kind:function(arm,size=0x58) addr:0x020b8288 +_ZN9ActorNavi9SetActiveEi kind:function(arm,size=0x58) addr:0x020b8288 _ZN9ActorNavi8vfunc_e0Ev kind:function(arm,size=0xb8) addr:0x020b82e0 _ZN9ActorNavi8vfunc_d8Ev kind:function(arm,size=0x20) addr:0x020b8398 _ZN9ActorNavi8vfunc_20Eb kind:function(arm,size=0x3c) addr:0x020b83b8 @@ -2422,8 +2422,8 @@ _ZN9ActorNavi8vfunc_8cEv kind:function(arm,size=0x8) addr:0x020b8470 _ZN9ActorNavi8vfunc_ecEv kind:function(arm,size=0x54) addr:0x020b8478 _Z14GetEquipHammerv kind:function(arm,size=0x10) addr:0x020b84cc local _ZN9ActorNavi19func_ov000_020b853cEv kind:function(arm,size=0x14) addr:0x020b84dc -_ZN9ActorNaviD1Ev kind:function(arm,size=0x48) addr:0x020b84f0 -_ZN9ActorNaviD0Ev kind:function(arm,size=0x40) addr:0x020b8538 +_ZN9ActorNaviD0Ev kind:function(arm,size=0x48) addr:0x020b84f0 +_ZN9ActorNaviD1Ev kind:function(arm,size=0x40) addr:0x020b8538 func_ov000_020b85d8 kind:function(thumb,size=0x28) addr:0x020b8578 func_ov000_020b8600 kind:function(arm,size=0x10) addr:0x020b85a0 func_ov000_020b8610 kind:function(arm,size=0x1c) addr:0x020b85b0 @@ -2650,7 +2650,7 @@ _ZN9EquipItem8GiveAmmoEj kind:function(arm,size=0x34) addr:0x020beafc _ZNK9EquipItem9GetHitboxEP8Cylinder kind:function(arm,size=0x18) addr:0x020beb30 _ZN24UnkStruct_ov000_020beba8C2Ei kind:function(arm,size=0x18) addr:0x020beb48 _ZN24UnkStruct_ov000_020beba8C1Ei kind:function(arm,size=0x18) addr:0x020beb60 -_ZN24UnkStruct_ov000_020beba88vfunc_08EPs kind:function(arm,size=0x84) addr:0x020beb78 +_ZN24UnkStruct_ov000_020beba88vfunc_08EP27UnkStruct_ov000_020beba8_08 kind:function(arm,size=0x84) addr:0x020beb78 _ZN24UnkStruct_ov000_020beba88vfunc_0cEPs kind:function(arm,size=0x84) addr:0x020bebfc _ZN24UnkStruct_ov000_020beba88vfunc_10EPi kind:function(arm,size=0x9c) addr:0x020bec80 _ZN24UnkStruct_ov000_020beba88vfunc_18EPi kind:function(arm,size=0x50) addr:0x020bed1c @@ -2701,7 +2701,7 @@ _ZN15ActorWisdomNavi10GetFairyIdEv kind:function(arm,size=0x8) addr:0x020c0b44 _ZN15ActorWisdomNaviD0Ev kind:function(arm,size=0x1c) addr:0x020c0b4c _ZN15ActorWisdomNaviD1Ev kind:function(arm,size=0x14) addr:0x020c0b68 func_ov000_020c0bdc kind:function(arm,size=0x2c) addr:0x020c0b7c -_ZN24UnkStruct_ov000_020c0c08C1EP27UnkStruct_ov000_020c0c08_04Ph kind:function(thumb,size=0x28) addr:0x020c0ba8 +_ZN24UnkStruct_ov000_020c0c08C2EP27UnkStruct_ov000_020c0c08_04P9ItemModel kind:function(thumb,size=0x28) addr:0x020c0ba8 func_ov000_020c0c30 kind:function(thumb,size=0x2) addr:0x020c0bd0 func_ov000_020c0c34 kind:function(thumb,size=0xc) addr:0x020c0bd4 func_ov000_020c0c40 kind:function(thumb,size=0x2) addr:0x020c0be0 @@ -2747,8 +2747,8 @@ _ZN5Actor8vfunc_18Ej kind:function(arm,size=0x18) addr:0x020c175c _ZN5Actor8vfunc_1cEPt kind:function(arm,size=0xc0) addr:0x020c1774 _ZN5Actor8vfunc_20Eb kind:function(arm,size=0x4) addr:0x020c1834 _ZN5Actor10SetUnk_129Eb kind:function(arm,size=0x10) addr:0x020c1838 -_ZN5Actor10SetUnk_11bEv kind:function(arm,size=0x1c) addr:0x020c1848 -_ZN5Actor11SetVelocityEP5Vec3p kind:function(arm,size=0x38) addr:0x020c1864 +_ZN5Actor4GrabEv kind:function(arm,size=0x1c) addr:0x020c1848 +_ZN5Actor4DropEP5Vec3p kind:function(arm,size=0x38) addr:0x020c1864 _ZN5Actor8vfunc_60Ev kind:function(arm,size=0x8) addr:0x020c189c _ZN5Actor8vfunc_64Ev kind:function(arm,size=0x4) addr:0x020c18a4 _ZN5Actor10SetUnk_11cEc kind:function(arm,size=0x8) addr:0x020c18a8 @@ -3393,8 +3393,8 @@ func_ov000_020d17a0 kind:function(arm,size=0x74) addr:0x020d1740 func_ov000_020d1814 kind:function(arm,size=0x5c) addr:0x020d17b4 func_ov000_020d1870 kind:function(arm,size=0x44) addr:0x020d1810 func_ov000_020d18b4 kind:function(arm,size=0x40) addr:0x020d1854 -func_ov000_020d18f4 kind:function(arm,size=0x8c) addr:0x020d1894 -func_ov000_020d1980 kind:function(arm,size=0x54) addr:0x020d1920 +_ZN24UnkStruct_ov000_020d18f4C1Ei kind:function(arm,size=0x8c) addr:0x020d1894 +_ZN24UnkStruct_ov000_020d18f4D1Ev kind:function(arm,size=0x54) addr:0x020d1920 func_ov000_020d19d4 kind:function(arm,size=0x5c) addr:0x020d1974 func_ov000_020d1a30 kind:function(arm,size=0x20) addr:0x020d19d0 func_ov000_020d1a50 kind:function(arm,size=0xa0) addr:0x020d19f0 @@ -5010,8 +5010,8 @@ data_ov000_020e6528 kind:data(any) addr:0x020e64c8 data_ov000_020e652c kind:data(any) addr:0x020e64cc data_ov000_020e6530 kind:data(any) addr:0x020e64d0 data_ov000_020e6534 kind:data(any) addr:0x020e64d4 -_ZTV9ActorNavi kind:data(any) addr:0x020e6500 -_ZTV24UnkStruct_ov000_020b8110 kind:data(any) addr:0x020e65f8 +_ZTV9ActorNavi kind:data(any) addr:0x020e64f8 +_ZTV24UnkStruct_ov000_020b8110 kind:data(any) addr:0x020e65f0 _ZTV14ActorForceNavi kind:data(any) addr:0x020e6614 data_ov000_020e676c kind:data(any) addr:0x020e670c data_ov000_020e6770 kind:data(any) addr:0x020e6710 @@ -5025,8 +5025,8 @@ data_ov000_020e678c kind:data(any) addr:0x020e672c data_ov000_020e67ac kind:data(any) addr:0x020e674c data_ov000_020e67b8 kind:data(any) addr:0x020e6758 data_ov000_020e67d8 kind:data(any) addr:0x020e6778 -vtable_ov000_020e67e4 kind:data(any) addr:0x020e677c -vtable_ov000_020e68dc kind:data(any) addr:0x020e6874 +_ZTV13ActorNaviBase kind:data(any) addr:0x020e677c +_ZTV18ActorNaviBase_Unk3 kind:data(any) addr:0x020e6874 data_ov000_020e691c kind:data(any) addr:0x020e68bc data_ov000_020e6934 kind:data(any) addr:0x020e68d4 data_ov000_020e6974 kind:data(any) addr:0x020e6914 diff --git a/config/usa/arm9/overlays/ov004/delinks.txt b/config/usa/arm9/overlays/ov004/delinks.txt index 65e120c9..39f0bf59 100644 --- a/config/usa/arm9/overlays/ov004/delinks.txt +++ b/config/usa/arm9/overlays/ov004/delinks.txt @@ -8,3 +8,6 @@ src/04_Load/Player/LinkStateMove_04.cpp: complete .text start:0x0210ae54 end:0x0210ae94 + +src/04_Load/Actor/Navi/ActorNavi_04.cpp: + .text start:0x02107790 end:0x02107b80 diff --git a/config/usa/arm9/overlays/ov004/relocs.txt b/config/usa/arm9/overlays/ov004/relocs.txt index ad8c39f4..b7303b1d 100644 --- a/config/usa/arm9/overlays/ov004/relocs.txt +++ b/config/usa/arm9/overlays/ov004/relocs.txt @@ -1534,7 +1534,7 @@ from:0x0210780e kind:thumb_call_arm to:0x020d1894 module:overlay(0) from:0x02107874 kind:load to:0x020e677c add:8 module:overlay(0) from:0x02107878 kind:load to:0x020ee198 module:overlay(0) from:0x0210787c kind:load to:0x020e674c module:overlay(0) -from:0x02107880 kind:load to:0x021104c0 module:overlay(4) +from:0x02107880 kind:load to:0x021104b8 add:8 module:overlay(4) from:0x02107884 kind:load to:0x020b7d14 module:overlay(0) from:0x02107888 kind:load to:0x02107955 module:overlay(4) from:0x02107896 kind:thumb_call_arm to:0x020d1920 module:overlay(0) @@ -1569,9 +1569,9 @@ from:0x02107a3e kind:thumb_call to:0x020a9528 module:overlay(0) from:0x02107a48 kind:thumb_call_arm to:0x020ad4cc module:overlay(0) from:0x02107a58 kind:thumb_call to:0x020c0ba8 module:overlay(0) from:0x02107a9c kind:thumb_call_arm to:0x0204f5d0 module:main -from:0x02107acc kind:load to:0x020e6500 module:overlay(0) +from:0x02107acc kind:load to:0x020e64f8 add:8 module:overlay(0) from:0x02107ad0 kind:load to:0x027e0fb4 module:dtcm -from:0x02107ad4 kind:load to:0x021104c0 module:overlay(4) +from:0x02107ad4 kind:load to:0x021104b8 add:8 module:overlay(4) from:0x02107ad8 kind:load to:0x020b7d14 module:overlay(0) from:0x02107adc kind:load to:0x02107955 module:overlay(4) from:0x02107ae0 kind:load to:0x020571b8 module:main diff --git a/config/usa/arm9/overlays/ov004/symbols.txt b/config/usa/arm9/overlays/ov004/symbols.txt index 1e2f5bc2..4434640b 100644 --- a/config/usa/arm9/overlays/ov004/symbols.txt +++ b/config/usa/arm9/overlays/ov004/symbols.txt @@ -224,11 +224,11 @@ _ZN13ActorNaviBaseC2Ev kind:function(thumb,size=0xfc) addr:0x02107790 _ZN13ActorNaviBaseD1Ev kind:function(thumb,size=0x40) addr:0x0210788c _ZN13ActorNaviBaseD0Ev kind:function(thumb,size=0x48) addr:0x021078cc _ZN13ActorNaviBaseD2Ev kind:function(thumb,size=0x40) addr:0x02107914 -_Z19func_ov004_021079d4Pi kind:function(thumb,size=0x6) addr:0x02107954 +_ZN18ActorNaviBase_Unk1C1Ev kind:function(thumb,size=0x6) addr:0x02107954 _ZN13ActorNaviBase4InitEv kind:function(thumb,size=0xa4) addr:0x0210795c -func_ov004_02107a80 kind:function(thumb,size=0x20) addr:0x02107a00 -func_ov004_02107aa0 kind:function(thumb,size=0xc4) addr:0x02107a20 -func_ov004_02107b64 kind:function(thumb,size=0x9c) addr:0x02107ae4 +_ZN18ActorNaviBase_Unk3C1EP9ItemModel kind:function(thumb,size=0x20) addr:0x02107a00 +_ZN9ActorNaviC1Ev kind:function(thumb,size=0xc4) addr:0x02107a20 +_ZN9ActorNavi4InitEv kind:function(thumb,size=0x9c) addr:0x02107ae4 func_ov004_02107c00 kind:function(thumb,size=0x2c) addr:0x02107b80 func_ov004_02107c2c kind:function(thumb,size=0x20) addr:0x02107bac func_ov004_02107c4c kind:function(thumb,size=0x1c0) addr:0x02107bcc @@ -594,7 +594,7 @@ data_ov004_021104f8 kind:data(any) addr:0x02110478 data_ov004_02110500 kind:data(any) addr:0x02110480 data_ov004_02110508 kind:data(any) addr:0x02110488 data_ov004_02110520 kind:data(any) addr:0x021104a0 -data_ov004_02110540 kind:data(any) addr:0x021104c0 +_ZTV18ActorNaviBase_Unk2 kind:data(any) addr:0x021104b8 data_ov004_02110548 kind:data(any) addr:0x021104c8 data_ov004_0211054c kind:data(any) addr:0x021104cc data_ov004_02110554 kind:data(any) addr:0x021104d4 diff --git a/config/usa/arm9/overlays/ov014/symbols.txt b/config/usa/arm9/overlays/ov014/symbols.txt index f2db3d32..f4991334 100644 --- a/config/usa/arm9/overlays/ov014/symbols.txt +++ b/config/usa/arm9/overlays/ov014/symbols.txt @@ -62,7 +62,7 @@ _ZN9ActorBomb8vfunc_18Ej kind:function(arm,size=0x98) addr:0x02122aa0 _ZN9ActorBomb19func_ov014_02122bb8Ei kind:function(arm,size=0xe4) addr:0x02122b38 _ZN9ActorBomb8vfunc_54Ev kind:function(arm,size=0x18) addr:0x02122c1c _ZN9ActorBomb8vfunc_20Eb kind:function(arm,size=0xb8) addr:0x02122c34 -_ZN9ActorBomb11SetVelocityEP5Vec3p kind:function(arm,size=0xdc) addr:0x02122cec +_ZN9ActorBomb4DropEP5Vec3p kind:function(arm,size=0xdc) addr:0x02122cec _ZN9ActorBomb19func_ov014_02122e48EPi kind:function(arm,size=0x34) addr:0x02122dc8 _ZN9ActorBomb19func_ov014_02122e7cEv kind:function(arm,size=0x1c) addr:0x02122dfc _ZN9ActorBomb19func_ov014_02122e98Ev kind:function(arm,size=0x20) addr:0x02122e18 diff --git a/config/usa/arm9/overlays/ov059/symbols.txt b/config/usa/arm9/overlays/ov059/symbols.txt index 20dd64bf..015de91a 100644 --- a/config/usa/arm9/overlays/ov059/symbols.txt +++ b/config/usa/arm9/overlays/ov059/symbols.txt @@ -18,7 +18,7 @@ _Z14GetEquipHammerv kind:function(arm,size=0x10) addr:0x0219926c _ZN13LinkStateItem15StopUsingHammerEv kind:function(arm,size=0x20) addr:0x0219927c _ZN9ActorNavi19func_ov059_0219933cEj kind:function(arm,size=0xd70) addr:0x0219929c _ZN9ActorNavi19func_ov059_0219a0acEv kind:function(arm,size=0x95c) addr:0x0219a00c -_ZN9ActorNavi19func_ov059_0219aa08Ev kind:function(arm,size=0x1a0) addr:0x0219a968 +_ZN9ActorNavi19func_ov059_0219aa08Eb kind:function(arm,size=0x1a0) addr:0x0219a968 _ZN9ActorNavi19func_ov059_0219aba8Ej kind:function(arm,size=0x36c) addr:0x0219ab08 _ZN9ActorNavi19func_ov059_0219af14Ev kind:function(arm,size=0xb0) addr:0x0219ae74 _ZN9ActorNavi19func_ov059_0219afc4Ev kind:function(arm,size=0x5c) addr:0x0219af24 diff --git a/config/usa/arm9/symbols.txt b/config/usa/arm9/symbols.txt index 52a674e4..0db49020 100644 --- a/config/usa/arm9/symbols.txt +++ b/config/usa/arm9/symbols.txt @@ -919,8 +919,8 @@ func_0201e5c8 kind:function(arm,size=0x10) addr:0x0201e5c8 func_0201e5d8 kind:function(arm,size=0x10) addr:0x0201e5d8 func_0201e5e8 kind:function(arm,size=0x74) addr:0x0201e5e8 func_0201e65c kind:function(arm,size=0x1c) addr:0x0201e65c -func_0201e678 kind:function(arm,size=0x20) addr:0x0201e678 -func_0201e698 kind:function(arm,size=0x1c) addr:0x0201e698 +GetJntAnimation kind:function(arm,size=0x20) addr:0x0201e678 +FindJntSection kind:function(arm,size=0x1c) addr:0x0201e698 func_0201e6b4 kind:function(arm,size=0xac) addr:0x0201e6b4 func_0201e760 kind:function(arm,size=0x2c) addr:0x0201e760 func_0201e78c kind:function(arm,size=0x94) addr:0x0201e78c diff --git a/docs/decompiling.md b/docs/decompiling.md index e9f9c3b1..0c106afb 100644 --- a/docs/decompiling.md +++ b/docs/decompiling.md @@ -45,10 +45,10 @@ As a starting point, we look at the decompiler output in Ghidra. You can request Looking at this output, we might try writing something like this: ```cpp -ARM bool Actor::SetVelocity(Vec3p *vel) { - if (mUnk_11b) { - mVel = *vel; - mUnk_11b = false; +ARM bool Actor::Drop(Vec3p *vel) { + if (mGrabbed) { + mVel = *vel; + mGrabbed = false; return true; } return false; diff --git a/docs/images/ghidra_decomp.png b/docs/images/ghidra_decomp.png index d54ff6ab89a1902a53d3771f1c547b974114b83c..07e54d73419f2088502864fed1f51d365b94012e 100644 GIT binary patch literal 16599 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 diff --git a/docs/images/objdiff_function.png b/docs/images/objdiff_function.png index 34e8a1648d6f5d4fb016841b0e4079e7907dc0d3..26247156cf46f78a8070520f82ceae4ff0e565c3 100644 GIT binary patch literal 41016 zcmZ_0cRZEvA3uH@>Bu@lj_i?@9Ou68>$+aA=j-`;J}*9KJXIvRb@vtoK}1SV9&14mwhRPevB0pw zD>+pzA0dbVQhF?-LQ2uKc=o5+R1VadUa>L5d0HwqpAmtUw0Xz`(#;C3AEm zjuchBFCliQIZ`OI60sk)va(X@AU<7Tr$d9Vjg;Nr-K(yy{y@fdE2w{D=e$ zrqi{2r=zc5zcQeBjH>ytPx$!|Eav9s92^{}0hcwG7Rt)EFx9oSwSB35sZ#Wi0rzrxDO!_=#D+a|iw*Xtv^P3Ql{N-a-0S)=hGVw#6L;OV@V zmiPLk=&c4^TwF3TG7h(Ai`BgbGUUN@-Rl|(3JS8bF&?*0PENqBCpyU3o|acttq(<@ z(c;c?(y5|dot;nA)vNTmjE#+Le|`B@T)aF=Dhs~-)vH(N(!9JpMxh+=rKqSV!jfC2 zZu)XHClzm_f8Wec-_Fj?+&sO@DkEmXv9eF{te`LTv7+Mg!a_`3Tu+&JXU>`2 zrg}9yN&GAkJiP1DPYzB_YV?bQ2M)UC=8Vva-&pPIb=Id}^tH9g=;>1v5>A$qUXF~6 zoIbJYj^SWrWK5hM^>8cSzt}Z*7%h77;>G61hN`-Hs(^L(2+>g{5#g!)lP6CM3?}}7tJ&<8KOeeHM%Hj& zQ(Idbi5xCjVgXa);VG)CtINw%o-G0!+||`p#-*pHm!EeFviUB`#fA3y1U6s!8&?mQ zuH@}y1A0nIN?KaK%X6>ZUa)iQp{<4qAZlQYGuEa0TnfbqiIi@-~zeh%vD)=`Oei^=Ocnux_qic8Vn~%LWo@ck6P>6+8PnH@J`tJNMYFf z_j6@-FJJa`c6Rpk2qvhS`k!PSZh^aLX=xGDi9e)~^aZH}!gIUvtZ4Fe!`V+TdV48w z-@sd4KPM!JdTbe?G?bK-o;{!G@OE>!m2B(zhC27Y}4`Iu)#sC%^FQj&4!CxP_}A9 zR8mqHKMw~7xY1Ok3WfptWPP$R{vC4u(;95(RC5DjRZEPCjdkB&(NyNpYxwo+SA0C8 zir&V?W@&MeRF)4ToYb3YdtlQ$T4)%Tn7HQr@TZNdt?lxo?fRkqehAXed1_qgNQKdl zwbmr}(qnk=;B{Bjy&wiyP;DGd|m|TnO^~yDOTA>c>Gk#J3tiD* zLr-rxejhI~swo4TQ&Lg_W;SXXV7yKKk@gX0lTLQ!_c!gS!_x%ACf~8Bdn$Lh^aD$e zdaW|pf2BwmMtv*f}2Qz-;vhV~1qm|WH_E2;wC>8(} zNhFWWI%&r?t7hrQ$l5A6K^hknsBTvY4g6?t=Qgh02e}j;9u80l3LG07yQdQCY-~_r zkCc zuZLl|-M|-7*UROA%Z@%pL$2866rZB+-}k6zk1;_v2z(=a>7@M6!Gb<=-`MH+vU|>D zQtt_1MqPXtHCdIxt{k<{_rwP5DHt*`Z!Vd(DHRkHCLDz^`cIy`A9oyK;|a~Uyv6q5 z!2?mzXXNrpy_L3obU8!c)Ms6}x;0J|fP0LP2>I;Q9eYyw+VRs*`Tc zViXGXalc4d+wey$b^WqSrpv<7bixuas1(%9MlkZF&9& z4=5O|1QN=L%NSsw9C$pW!NFH?z(g3qS1<^weJ5<{KjMvoD>$p%>Q6Xp=92g*_qQZxG;y6Lc6%Z%`8&F?wq)A>k zZK9(CXpEkwW_sS*>QK)2va+XN9?EcRuB?RtQk@$-wQ z_MSO3calFbF@aCU3d;ZP8CLVETlUwlE03JZabMy2Sp{Cb(aU-{G?@`E%b~$#39)oO(qIi;EvJKvgEApvX#9c64y?*{WHl zAr6rYp6`e-t#)o%bXiszgaN~lD*`boHZW*1(^vl1uXiMFo+I&44TT< z`D2`pD}9Vs-LzBHBmn_I&GW^l>1kfOd|!) zhDJszJ+@8!?}>?d14;$*P~2q!204zEn1h?iJ=|_av>`0fUPO;!Uc{{+j~fm~3;_cM z03iYp*a2kC^Pa6Or-rZt1N|-X@(93=rnayGdu`T7d)Dgic9os~>)|anta1Wd*0@bb zLK4UFt*-9TqepdRW&gmg0^}gL!vz>`e^m`!HaR&tgqRj!?&qOZ@qo+vtMLQ+!j`|4 zsK?PZetv!?CMmJ^An?ua!@?#(-OHW<33&Qtba;4iY01S_9B{;*I9?wEDnI^;VpjE( zpTj0mEO9-H^LhYdL9v^7*x2$=CZ8nnHYg3j@7~!XKj~SDsM~xWU+PT~nX_G0dipd) z==mTZrpCIuc#!GY#Avy$o~!F#k#QYl29Qr)US81lm$>gS-&N=%gDd(%qUvB2%1(uf zBP)abpXd$s4h(`BRc)+89?ZWqOmG;R3hEB1X@H0X{9CQr0+GE%e|3EG>TKQg3M62N z;a|`nNa|Yq{EGMN&9M~&WKd+rGqY#W8^p(h4}j#|mQ74dJnpEh6!v3#9=U_wEiCW1 z?C`Xl5bV<{GJ5rp27JVOGCncU`{dsun7$#`9Y1ZQmq*pw&4|6!;}W0Kl(&afml;hC zVqgM8fX%IjQ(5}nzYYDg*;`HxnECx%2Y{WC(U-``=KO0k_x3)e^_Us}_%=A`vNa`& z(oj?D1$6kj(wLfVS8mzarNjSmk~P*HhZ-zi5u zCo2mO_3=N>on`d^_*3?1AGy1|eqB*nxiwuUA|c^7S^2^@e;h2XXNVG6@MNZ?rKQNr znV+^Ev!3(eplE@A9# zpF=JY_1@mzdREXZt&2bpgoWR|dk5HAvbdK3H}~epM_ZsHeIFV+NTPd&$0+pb@8eBN z2M132*3i&U>_E`af#m2_1#Q-tV`X-Bc5SVg^0ygRH+T2M-X#FjXG8eXuzUCJwg315 z=8%<@W!&hSV7k4wrVKCvaDw;mK~xSEtv7{#{5T>O0L{77)YjF3)@Ca9z{AbWvsYbJ z^=G};9(eI=-`uw-vAF8X!&gjMF}#impc%?iiK8LzI6v6~2-tknXX^H-uez_VFK9%- zy*J%`08Gou237JT=JZ)V1ka9%uUrf}D%xL#ngOt}!&*b={W}+#dt3ldPzLgC+kwTETi%D)o`a(|mQvtioV^e%{c)pnMfKtQ~Y8C@8E2 z5eVht*%!h|CpH8q4M)d<5$}IkeV~(iJ6W0Z$Hd?TpG7rNPm??|GxL#{ z*pzz|U?~QLBPww`HNz;d9!gQikp#tUg@uLQoFomSu>cI}h+Z_DZPl6j?zSgBaL9g| z3>ZDa^7H4;%;5 zI_$#2=3VK0jVQ5H=i7!@Ju(Gk?F|7RQC_K4&$d>A>Ro4g_ zkNSFX8Th^gi)?3M)l6b!lwLE(G7($9EN45;b!`1rSblFtXf9;}b$X&4L!ph8McbW&2!%?l8dAoIO$){6K}s{6g*VrPFJ9=_NE)?wV|Qm2@y~`ru_f)F1goT zbbex%n`?U)`De#GQyy%frsjZapM(hN`CUmaJH(qcvA~I__;@?vB#8h!frO~&Xpr}# z^7@GRk`lgWu@|DemB&7;xt@uDU{7MwEV` z?u)*04SuhGR+{7|%HfhPEA_cRLikdJO*YSKfRBoST$0zccW^kPDcqe6v9_|}GAMr% z@bqQ~|KWflJyKVfSYT2vjFLX~%NKD2TidR(4a;?(R7uCduSzX`3STnV{ZgDQ`E(IZ z@_U79c=JTFhpyzkmkgqyj$#Gw>^N^m<>f`Ocs~=CoOt}rIO(W%LG#1x7zF;# z49R4Pc^l9hn)Z^n0WzOO_a}SIc!74;M}Zz8sim!5H5+P3!r;4@$d^wM99-fCL4y(6lc^*{4yI-7>{uJr=EpbR1|_pSc>*We1SL^oxq z*>Ptkd>hQz)39&PkCL3+ai;#+qvt{b0s^2@5)vY3i~&><0Kk_o1=BR3#DV&}H|91W zpFi9kL2}I+fDSfAUM3PScaV#by4;Nj4h}v7l1XbYLBMev{b54m=(%dL7${5bfOu6+ zxr74NM{moaR4N= z>B<+A0Fpq<+=_E_(n)fp4oHyrNMTZ)_u99dY_+6HAQTi23c^%lxeeWyeo`ra)03~; ztenJF8@R)5Afy_qtEVSY9-3`Dz-a(ry@@1Pl_1{m3q>TSP>Q%lG|uT5ev?8_R4S z6W(;(&U?(C4ZzA{)=xw#*ZK1NB;agvmdYMi;~MS`_zHvEdlm!r9XXYYN~_IrywuS9`s{C00rWJ z1`^2|4rCEsByt+0Phtu+uB6cbxjYrI{19hQQU>5`jeEZy`QJ};H@O5v2gG+7_$x`V z*>aN}H_#ke4p0nUS}q1Vhc>@<7Q+0Xq-)A>HrK>lDzG*K#rlQ`hBRAexMU zS_smut9Z}#K3LIOkYrSXHs@zeS9OQ)LFEf;|0^ohQS5*vEP5J!&TCxzHG;S(EA{i| ztgKl>e~97UJ?o3pgKLHk0J4R|Kg~EIBH~DVW)%qO-~n(0fuxT{6TaxY6lpq91L7`N zY}>vRV@=IhqsAVqiI86eArnQ=A1qch1`akce%YQXazOE9^q^q0W64v<} z+qiuW_)x6d`5CKJSn@+5{2PGeX%7HoJIx19gSp@RyXsBq z@_Y7ar#j`CiV;s!C6i6d#~ne(WHcZ?@Bap@(!03QAApZMi}m_}RX2UjUrc;Fg(7Ek z=c|o@mVZm?dqRNY^XIRqYqq#Y27nrTUSAZUO$qFYJO9SG{rb*VsM8HJN|%;wxN+;a zdQ9dw8i0*+1XNDIUgP89^h`{CssBq6c}a)y1QBPD8w600F1I&i>N>b{QoL_LV3Q7B zULC$P&|unh7WDIX0=+2c5hk7LxJ5*c8qcOzSSw8uJbs`w!0G+eC4-ZSOrv(XwC_B|9@oH33%i!_<9ZK zjybV0F*~~`AdqrLzH)VS)zXR@ja#O2sHm_1!Y}-MkmZtJSa^gRl6kpHu+?;R37AvU z{@j8z2o?~6Oe0A1#EIr*0`YIegs2jYCczV7)I5>EC=wA3aXJBT=L{~R9HB|~! zG43?(2!)F<({qcf%L}KYv&bX`kV}B0RYZuBGxp`gre1fQJIy%P;pMr@WLZ#CGtT`f zH<#Uyi~g-NM*G^NI@W8X=zY-}Y}-x;kjS>KDKvZWCgVbd#hGsT4T3wM_8a_T()*5K0hLz`=F9TH6)Qqd086n@()tr32;w8>mn_pkN z&NizYnt(k4lze^Ao@bi@Eda!ZcM0RaeQP;U3h-?LT(Na_C?w*9uxX0QBHM{7)i zLqcX*J$jC@j^OIyM5fM?M z@EY*!)XRX=qoq|oHx3*jc3$4AKO_M_9fv_6;U=7~09p9UQ3Y&*v+X9Sd-rZYu|NR! z+_iYIOeFiHM;$n5!U67EQ#Cj@iFcX+KcA;M7n6{fhW!%I-O(urGN>d)VPm5t6O*hI z-b$v$Sz1%5O@#sQIix)04Xd5gbxSXF%Ab9=$@==$u4n5k-;Roks)6G!M5sT2t`>gt zwvGfmcyU3&?|0ZBG8dg60#H_fszFGrr%GPLHJvYl5UTUoUV4l7MbFgl0LZ9KR~OrT zUqtszuMSMl|E6B<=Kz!k61nGSkum6815SrhPk*Y(%eR9vO5#VZM?Xqs2{_9(o!7#r z-@kvSo-eTZ@sOR)(_cLV(N}y@I_?N${Xsy`)mVoDu8sm6Mvpcp0bdjEdm{7_)Cd$l z*n;HxVzT+UDZj;8et4Axjhl%gt~roDIOTFT1GY*W0l zv$7Te{T=Q`>ggQ~s_@c^y8N&bc>Zr+&EMZ27>B7}1Yy2-*>+dQ9a2EO+y(o636Q=2 zJ_g7e9d9@$RCpT}ye@|IOb>LLXD_xqt}_F)rrW@30=Dk))2Wb*;gJ!03Lh)-UMqoB zio%Ktq_z+=7mA^1G7UXk%P&54{oVrW-yY-i^6~2anvBy8v~)wqQA*#ZLcv z^~u_6w$Tsg=QQ6OvlI}Gm*qCSCnhINJ^$Qz(Gn%~MbdBLMGirSwo{DOivV=$$*zo} zdY9hEuF0}&1ShUA$c$-L2_;w-`|JS2r$q}=!d`Xu7@R}ErbezfS{clE8u?wM<;xs z*9LQo`Es5Z->Y$D&EY(!GSc%D_)#{ zi(Onxh^mkH_|VdPe@&P>ylD^AN@{K2@+;nD&A*2qxceFj6})Y6eX5u$RWB38%CsL- zWgKWKn7|FGuis{b;%$XR>fdvs{+y!&A%ONxUFB`y^`h{`(9;n?051-?mR> zE&4exE4sS769ue8yR7V=KNs~s_q4LIa&mI=@~YwLkxNMe;tg;O0B5?PqlJej_w-xd zxzw~C$-5`gD^lDe>YpXa@0-G_5`KoG+kJek*bz;>c?6sE2s6n~Gpv+MN`q1$80=e~=~0b2#w)L|>;4}VbFH#(Re9qqB+=R;l3I_5G2)V^gm$kM* z2?+@xeZ>K)2+(QDtJvc{es0Fcw{)v@IdsEctoG)1PtlR}=w=jt(E*w34f956e+Lip zTR}^*GqJ|Adt%&_IV)znxoiC|? z9`HZU`UwnR!oMK_Gc-u#{a8j|fC91=#Nd0f7!on9$PM4r4B_<`s@tOi(T*JTs zSWY#7B!Z$u!Kn*;b_=v#v56lr%)lB`J5_^o0>7N9fcH=T&{-Ne3?w%ZA)y`i7<4H( zAJG;&U#RBA^L6Ax;*8p25!ok5|2*d_V^$vjr zlPvH3(7!pKvn_hMA9Wd(mxQ}DHvE4~sE zVn1MxAnm8K1)v-dnia7u&9){ zEsnxCfs*xQTs=`Nq_W_Q1m#H+5JxlEf%XQJkx55kZl-E~aS1jyTcE51VKNea$+^ji zE;S4S76rGA<>FVFIkI4lJD8l`m*{Qd^>vu+3#dJ#{4qHjGYb|ufrYpN@5AIH4-biD zw>x1OVJ%f+6G>FYoXT=ho8Sq6hkQ~k6Kf4b#n?CNnMu}g+;kE7kKy4Jjr;; zxK1uFa^?)$GcZkVqv{<8)3dvnhb%0Q;V9sU13d?*;@q@v=fI|0czK-wuhQmce0qf0 z*J4%QJ05?3d;py%u*ua_RIY`|OFI8HU`K_8g=J=B7#J9+vXVhU!orx24hNaY2LL+C zr>TJ$Cq549{H_Q(@f()lCWtsWr@xHrphEtS>c z&FP7DebhXkFe3_{`1F0Z{*A2ShsnkJZXX(72v8~wl86;kop+$I0wEZVtexEw3N%c2 zcul^5zV=4jTL*5Oj$Q%JMB-inXL$wKfeqFET53uP=r(_BwgECVG&BUXQLMS^7T{^} zM5Ess=)yrf0^7NKr4LUA&C6NL-VM<176Ae1;f#3V+AaRf_ZS#21nB7M-l3oXPXGIi zCmh40!ZU37xw$|w1@=Gpwbdwyxo)mvV}XVv9MZpajlHUS!3DWw$WR{1X(-aiV$D=O|ByzF#G# zAqKUGN%z7!>;>!HnWVCFOQv&meSI?I)e<6c$0gCav$ywkjS-M?+DN2+b8>iSro^`N zx&bE|L+4u|&V)P{eogUbV;3(JfDe==MPhccmhQKd6^STz_z`Ew= z=VLWnl>WeAMn*^1ZKwG#VDq`Txk0h`pGV*f&H+Uod`gq#*u2ckyFV)`#0SF_;B(3@ zpin5<{2Uea_m063k^1~xgmpZhdC;`eOGn53>5p#O3jl)Oy~As;2DuEnR&d+}(CO13 zHGa(qHdfYJBc6-%s!_LQK5Q8jIMdY=LUcQ{zXqyllRpA{7r(zc2t5V%Bs zrzJ|!tVA8=Z{?h*d@T`g%vx=}lR_{Ol2M*-dG-Pcd~~PP7IKoz!?U;)^1x-I`p8^H zNEigY@N#~co7WvjMY8Ft=u$KR9#R1qgFbO!xq4tlmS$#iAIxb8vEj@gzyEjGQ@?%3 z{D1t7;y?Zd_!*M$e^N1@?km%wbSW#r_XG4)b60vTA&eoC_>!Us-ek+pH-g!VX5YuB z{NlHXnEtx}-kZ1lv3CDS%)0!(@&CV9pBi-|+)(Y~Zz!{d@h>z}>A9?YFELSHCc`za z?=na22^t_==Fssp@0Q+s(^K8GGU?C_Mtr5gE_s|Xb^kpAg6Ec~IQa!_bzYAbQUV=R4rdR&jiqg2x9w;uGBD3~jsJ2s8x=ROYFc6g^; z2BPV+sxAuAEEszJoL7@>E0!gp#j>nex~eJWYafT7*O)8~QGQdZI;sYt$nYC8CYh&e zLVb5KU?j{UJWmWFzrvneUmv8pqMI<}h$YqPiN`U+!)$j8$mYgJ(#U>6(;|llQ-1i3 zULu1cQT;=7ewoO}Pg;+k8{hDJ67@^qu&g6_0MXlu3lGJ1=3i#>uJWm7V1nfL z?^W2LxZ%|YZB;Z|QD0SMS|J9-ftWaCA zs)9E)KJ%heiWAUd?-PZ z$KA#j6aB&9xXT(9fjp3j+mp$er^(7Rp+4VtZI~8}dZqsEb4y(_WACpWfr5FHwHJ?2Ik~67d64I>6h4BIlyPf9&C=>^YI8NY*^b6_@Y|bJMS9NB13Y|EveC z;7X%kV+$SB2d<)~*p%z6y}}tZ0t++ti-{jyo#>zmZU|aBJ__nEF1oE8QoJq2N2=C# z%oeq3zciqia20Pt`}jp#IW0t#TX_(h3NFE^>_fij4d$jRbKW>a`fL3*(&N3wJ!C$I z8f`xTFRRrJ(gGMMiY``_1EC0=Cv^$orw8P96U%Vv4cjZQF%v?65VO3>Y{-KE3M!l_ z&d^(Frqy2{_!|ulBsG;`dr_C-!!#{rUaW$B_GxnPcx2E7Pf3Tho>HH)bp%a)4BJBm zmwj}%qX%@`SFR3+xqo49hD4bO1-4JNPi?ExXrBSyYJL=C3&MHx49X zSDt0q;8~;bA&NYM9(KzOK?Or(D3nO0((y1X(!HAt2Bp0lT(&w9lhId3C1;R_??g-7 z9?QuK*b%<0QAb`f)Ya$dvIM1yC13q5sgmU__8GgI@@8a$mKbA^KP!?c&`s&P0981bsn=!V<8^AvTt@PM~NOUR)G$bthy8lrr zPz6T6X^y9QgUzsCKhvfok=B_czbl3|)rm<=`D^+a2d589+JvvKR!1S>ur|7(-bvVZ zD6>sufFh8!?RV^kTnx_rfX|s^ymAnTsn8ohHGc`xrT=on_#rcNg&?b!FD;w_3bdcTC9OtG2CvnQNksU_ep+-`-)A_x zoO)$aU-{DGgC<_{y4KA=Dn`X70vu>ZyNd-o9;@&U3Kt+WPSo?b0){|7v>0i*wv9q( zI_E%0UhQM@B=$#N4TU@_$UEz1|HMt-nw;KKd}J9#$r)Hr%=Qt15s><&pEQcN5wxA< zP%XlpPvy!KgWAPHO6290!YYg%h+dNYSeJ;!S;1EgDP~B6Sf?HAG64mTBI7xBK)ZPN0b?k>$@9g*W#JRUm0x%+r@rwsdN5B*O$*`3x@PWcxcA zBkSt7B+=M98i`^3RC%GzgZv}gt4giMtg=prHMLxP9o2PI>yYqG^B3ORf_Wz9j#P|L zNqi)JE#7Nh?$=P@bC^1|mAoA>hSJyOb@@WS;nMb<$7Hg794_LmLwrw%xrdeHjwQSH z0~cPezp*`?8$ao8ImjROompvvX4OhBO}I%!fONN~L_c zpTTq`9dl{g^%#B{G&uS?lV4bwMBCdsZPN0Af_0iDkW$Io*-C1HN<)mFLSu#OAnZ9D zb+PO@UQ?^=E7Mw%B=sWF2;!F|$1erAIDL;%!xg*|RP(DSsJYLFX4p$PV6AqdqPla1 zO4-(e3+q^9c-17!+w}`?XA!+}_N>Eer7DSf1EdN^FGgRsvqO$l7MFoEUC&xHBvMSd z;<7)i%s0pC^lg_aTugD*=^0*NRy;Y`pJ(z#8RfUk?rS+kf3?r~9y(wh@3^uWd!Z%p zTHug72M5xHmznezsTiX--TrB+>vqiPv6A8aZXXlOJ6pGDP%9)Nw@gT-wsdpLH^rS0 zXd19+c9Di6V`3IgzKaI+w~U><`E`Di6l^C<;GqG_e&{0#InbWwTKzoM;>yHv{ zs!mLx12a+3V$kvH?^8+3^=i^=B=#$rR-?t61c=GIpNz3rH5qm=+UWF<>^58A62>K8|LWW(& zAA7IaEXxd{jc4pB# zne+`9^5R2j*<<(;!-m!6%q%tLxj&6%0(}P`_Lp7e5R)@=71%h#`*u1~F>xv>VtR~$ z`N7n^1OdJ%cz4S&R#(jAS<>eBY?(4_S1c*DwJpF``LHwR5nG@de*Tq98 z?|V+tdV&##_X(Z<3exW(*oBO%dVKI1tR-coDVyF_DOaR`l7Yz_1N7^pR@$3Ig>6S z+Id|J7mQXTCWqn#kBN&Jm(dEZg#XUX{*QA`Avn;Mh?3fUHAY;7E39?CEZ?nvvR0It zA!Ick5ECDr18-S`>@@aS;}90a=3ROEKwttZ@M4A}M^m-)mJAFBg#~C%7ebNGE$4lT z<^l^ULi31^ofPFs^!7Hf-ECI-Z{4&(`byv2o33y>5HQ^7+>b96Mq#+b^UB1`e80Eb z-4`qbD5K*j#`joW;y0rie(Z^~{bZoMtdi%aN}sJZn)MK)a~9*>A^HV_(&@+Qc=<z&TXDK)Ve2VkG` zE)Ki(plicdANhesxTWFx`!!etdGWA2X28HqOM|jAU!@_IYHv z#6P@tbQdo;IftA zf=RF;XRoi6ANnI$x?1K)=t}jLj;V2i6W~S`1)uW%z>oqXoroK`*?D9P_~|%#r|Qb{ zk%|a%g*Lv+Shv@HT{jepXViz8Lo=GBAmsE-8Os}ZN;~66Z%CyT%yg*CMXS$BMs*f> zLN0i6=AClpnUSyf+~bB`mD!3)-7!CUWyk+F#x|$Shp#KonIp>A^plBz?_)VgReGuMQ#fBI9 z@{*~J{jGN1>8HFrNS*zjFkU%?`sNwPSM?lIhW_=8jUOW2)l)l4QjXZlM6xzD6K}58-7?( z-4?~|)o&sp6m>@9OI_h7o;nw{Q;XPMKE20+l^zyjvXXCl&@@sqAA0_==K<+_beU?$ zuY6j>Rk$-d&lg0!!B1_3liVOl-Jo01nyHBaZ� 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 literal 29981 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 diff --git a/docs/images/objdiff_match.png b/docs/images/objdiff_match.png index a43726b7f9d8388ee2b4593c2c3bf9ba774889ae..06dec2ff41e98e37a659c3c0e0f199d0982c0ae2 100644 GIT binary patch literal 53584 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

S?j{PU{W3e7~2( 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 diff --git a/include/Actor/Actor.hpp b/include/Actor/Actor.hpp index 77a943a4..2ce19ac8 100644 --- a/include/Actor/Actor.hpp +++ b/include/Actor/Actor.hpp @@ -3,10 +3,10 @@ #include "global.h" #include "types.h" -#include "nds/math.h" +#include #include "Actor/ActorRef.hpp" -#include "Actor/ActorType.hpp" +#include "Actor/ActorTypeId.hpp" #include "Actor/FilterActorBase.hpp" #include "Physics/Cylinder.hpp" #include "Physics/Transform.hpp" @@ -60,8 +60,7 @@ struct Actor_UnkStruct_0a4 { /* 01 */ bool mUnk_01; /* 02 */ bool mUnk_02; /* 03 */ bool mUnk_03; - /* 04 */ Vec3p mUnk_04; - /* 10 */ s32 mUnk_10; + /* 04 */ Cylinder mUnk_04; /* 14 */ Actor_UnkStruct_0a4(q20 x, q20 y, q20 z, s32 unk_10); @@ -126,20 +125,23 @@ public: /* 08c */ Cylinder mUnk_08c; /* 09c */ Actor_UnkStruct_09c mUnk_09c; /* 0a4 */ Actor_UnkStruct_0a4 mUnk_0a4; - /* 0b8 */ unk8 mUnk_0b8[0x24]; + /* 0b8 */ Vec3p mUnk_0b8; // same as position for some actors + /* 0c4 */ unk8 mUnk_0c4[0x18]; /* 0dc */ u16 mUnk_0dc; /* 0de */ u16 mUnk_0de; /* 0e0 */ u16 mUnk_0e0; /* 0e2 */ u16 mUnk_0e2; /* 0e4 */ unk16 mUnk_0e4; - /* 0e6 */ unk8 mUnk_0e6[0x20]; + /* 0e6 */ unk8 mUnk_0e6[0x1a]; + /* 100 */ void *mUnk_100; + /* 104 */ unk16 mUnk_104; /* 106 */ unk8 mUnk_106; /* 107 */ unk8 mUnk_107; /* 108 */ unk8 mUnk_108; /* 109 */ unk8 mUnk_109; /* 10a */ unk8 mUnk_10a[0x6]; - /* 110 */ bool mUnk_110; - /* 111 */ bool mUnk_111; + /* 110 */ bool mTouchingWall; + /* 111 */ bool mTouchingFloor; /* 112 */ bool mUnk_112; /* 113 */ bool mUnk_113; /* 114 */ unk8 mUnk_114; @@ -149,7 +151,7 @@ public: /* 118 */ bool mAlive; /* 119 */ u8 mUnk_119; /* 11a */ bool mVisible; - /* 11b */ bool mUnk_11b; + /* 11b */ bool mGrabbed; /* 11c */ unk8 mUnk_11c; /* 11d */ bool mUnk_11d; /* 11e */ q4 mYOffset; @@ -194,8 +196,8 @@ public: /* 4c */ virtual bool vfunc_4c(unk32 *param1); /* 50 */ virtual Vec3p *GetPos(); /* 54 */ virtual void vfunc_54(); - /* 58 */ virtual bool SetUnk_11b(); - /* 5c */ virtual bool SetVelocity(Vec3p *vel); + /* 58 */ virtual bool Grab(); + /* 5c */ virtual bool Drop(Vec3p *vel); /* 60 */ virtual bool vfunc_60(); /* 64 */ virtual void vfunc_64(); /* 68 */ virtual void vfunc_68(); diff --git a/include/Actor/ActorType.hpp b/include/Actor/ActorType.hpp index b5ba6685..cb9e840c 100644 --- a/include/Actor/ActorType.hpp +++ b/include/Actor/ActorType.hpp @@ -3,97 +3,8 @@ #include "global.h" #include "types.h" -typedef u32 ActorTypeId; -enum ActorTypeId_ { - ActorTypeId_Null = 'NULL', - - ActorTypeId_Navi = 'NAVI', - ActorTypeId_ForceNavi = 'FCNV', - ActorTypeId_WisdomNavi = 'WSNV', - - ActorTypeId_TreasureMap = 'TMAP', - ActorTypeId_DigSpot = 'DGTG', - - ActorTypeId_ShopItemBombchus = 'ITBT', - ActorTypeId_ShopItemBombs = 'ITBM', - ActorTypeId_ShopItemTreasure = 'ITTR', - ActorTypeId_ShopItemHeartContainer = 'ITHU', - ActorTypeId_ShopItemQuiver = 'ITAP', - ActorTypeId_ShopItemBombBag = 'ITBB', - ActorTypeId_ShopItemRedPotion = 'ITPB', - ActorTypeId_ShopItemCourageGem = 'ITSR', - ActorTypeId_ShopItemShield = 'ITSL', - ActorTypeId_ShopItemSoldOut = 'ITSO', - - ActorTypeId_RefillArrows = 'FLAL', - ActorTypeId_RefillBombs = 'FLBM', - ActorTypeId_RefillBombchus = 'FLBT', - ActorTypeId_RefillTime = 'FLTM', - ActorTypeId_Heart = 'HART', - ActorTypeId_LSTM = 'LSTM', - ActorTypeId_Rupee = 'RUPY', - - ActorTypeId_Arrow = 'ARRW', - ActorTypeId_Blast = 'BLST', - ActorTypeId_Bomb = 'BOMB', - ActorTypeId_Bombchu = 'BMTY', - ActorTypeId_GrapplingHook = 'ROPE', - - ActorTypeId_PlayerDummy = 'PLDM', - ActorTypeId_PushBlock = 'PSBL', - ActorTypeId_WindBlock = 'WBLK', - ActorTypeId_StorageDrum = 'DRUM', - - ActorTypeId_SmallKey = 'NKEY', - ActorTypeId_SwitchObject = 'SWOB', - ActorTypeId_EventIcon = 'EVIC', - ActorTypeId_ActionObject = 'ACOB', - - ActorTypeId_Sandworm = 'MLDW', - ActorTypeId_Tektite = 'TEKT', - ActorTypeId_PolsVoice = 'PLSV', - ActorTypeId_Yook = 'YETI', - ActorTypeId_Armos = 'AMOS', - ActorTypeId_Stalfos = 'STLF', - ActorTypeId_StalfosWarrior = 'STLW', - ActorTypeId_ChuChu = 'CHUC', - ActorTypeId_Gel = 'GELL', - ActorTypeId_Bee = 'BEE0', - ActorTypeId_BeeHive = 'BEEH', - ActorTypeId_Cucco = 'KOKO', - ActorTypeId_Rope = 'SNAK', - ActorTypeId_Octorok = 'OCTA', - ActorTypeId_Keese = 'KETH', - ActorTypeId_Rat = 'RAT0', - ActorTypeId_Beamos = 'BMOS', - ActorTypeId_LikeLike = 'LKLK', - ActorTypeId_Crow = 'CROW', - - ActorTypeId_Linebeck = 'LNBK', - ActorTypeId_Mailbox = 'POST', - ActorTypeId_Postman = 'PSTM', - - ActorTypeId_BIGR = 'BIGR', - ActorTypeId_BKEY = 'BKEY', - ActorTypeId_BMRN = 'BMRN', - ActorTypeId_BMTY = 'BMTY', - ActorTypeId_BTRF = 'BTRF', - ActorTypeId_CBLS = 'CBLS', - ActorTypeId_EVIC = 'EVIC', - ActorTypeId_FLAL = 'FLAL', - ActorTypeId_FLBM = 'FLBM', - ActorTypeId_FLBT = 'FLBT', - ActorTypeId_FLTB = 'FLTB', - ActorTypeId_FLTM = 'FLTM', - ActorTypeId_FORC = 'FORC', - ActorTypeId_PWBS = 'PWBS', - ActorTypeId_SBEM = 'SBEM', - ActorTypeId_STNE = 'STNE', - ActorTypeId_TARU = 'TARU', - ActorTypeId_TSBH = 'TSBH', - ActorTypeId_TSUB = 'TSUB', - ActorTypeId_VLR0 = 'VLR0', -}; +#include "Actor/Actor.hpp" +#include "Actor/ActorTypeId.hpp" class ActorType_UnkClass { public: @@ -106,7 +17,6 @@ public: mUnk_4(unk_04) {} }; -class Actor; typedef Actor *(*ActorCreateFunc)(); struct ActorType { diff --git a/include/Actor/ActorTypeId.hpp b/include/Actor/ActorTypeId.hpp new file mode 100644 index 00000000..9f5925b5 --- /dev/null +++ b/include/Actor/ActorTypeId.hpp @@ -0,0 +1,96 @@ +#pragma once + +#include "global.h" +#include "types.h" + +typedef u32 ActorTypeId; +enum ActorTypeId_ { + ActorTypeId_Null = 'NULL', + + ActorTypeId_Navi = 'NAVI', + ActorTypeId_ForceNavi = 'FCNV', + ActorTypeId_WisdomNavi = 'WSNV', + + ActorTypeId_TreasureMap = 'TMAP', + ActorTypeId_DigSpot = 'DGTG', + + ActorTypeId_ShopItemBombchus = 'ITBT', + ActorTypeId_ShopItemBombs = 'ITBM', + ActorTypeId_ShopItemTreasure = 'ITTR', + ActorTypeId_ShopItemHeartContainer = 'ITHU', + ActorTypeId_ShopItemQuiver = 'ITAP', + ActorTypeId_ShopItemBombBag = 'ITBB', + ActorTypeId_ShopItemRedPotion = 'ITPB', + ActorTypeId_ShopItemCourageGem = 'ITSR', + ActorTypeId_ShopItemShield = 'ITSL', + ActorTypeId_ShopItemSoldOut = 'ITSO', + + ActorTypeId_RefillArrows = 'FLAL', + ActorTypeId_RefillBombs = 'FLBM', + ActorTypeId_RefillBombchus = 'FLBT', + ActorTypeId_RefillTime = 'FLTM', + ActorTypeId_Heart = 'HART', + ActorTypeId_LSTM = 'LSTM', + ActorTypeId_Rupee = 'RUPY', + + ActorTypeId_Arrow = 'ARRW', + ActorTypeId_Blast = 'BLST', + ActorTypeId_Bomb = 'BOMB', + ActorTypeId_Bombchu = 'BMTY', + ActorTypeId_GrapplingHook = 'ROPE', + + ActorTypeId_PlayerDummy = 'PLDM', + ActorTypeId_PushBlock = 'PSBL', + ActorTypeId_WindBlock = 'WBLK', + ActorTypeId_StorageDrum = 'DRUM', + + ActorTypeId_SmallKey = 'NKEY', + ActorTypeId_SwitchObject = 'SWOB', + ActorTypeId_EventIcon = 'EVIC', + ActorTypeId_ActionObject = 'ACOB', + + ActorTypeId_Sandworm = 'MLDW', + ActorTypeId_Tektite = 'TEKT', + ActorTypeId_PolsVoice = 'PLSV', + ActorTypeId_Yook = 'YETI', + ActorTypeId_Armos = 'AMOS', + ActorTypeId_Stalfos = 'STLF', + ActorTypeId_StalfosWarrior = 'STLW', + ActorTypeId_ChuChu = 'CHUC', + ActorTypeId_Gel = 'GELL', + ActorTypeId_Bee = 'BEE0', + ActorTypeId_BeeHive = 'BEEH', + ActorTypeId_Cucco = 'KOKO', + ActorTypeId_Rope = 'SNAK', + ActorTypeId_Octorok = 'OCTA', + ActorTypeId_Keese = 'KETH', + ActorTypeId_Rat = 'RAT0', + ActorTypeId_Beamos = 'BMOS', + ActorTypeId_LikeLike = 'LKLK', + ActorTypeId_Crow = 'CROW', + + ActorTypeId_Linebeck = 'LNBK', + ActorTypeId_Mailbox = 'POST', + ActorTypeId_Postman = 'PSTM', + + ActorTypeId_BIGR = 'BIGR', + ActorTypeId_BKEY = 'BKEY', + ActorTypeId_BMRN = 'BMRN', + ActorTypeId_BMTY = 'BMTY', + ActorTypeId_BTRF = 'BTRF', + ActorTypeId_CBLS = 'CBLS', + ActorTypeId_EVIC = 'EVIC', + ActorTypeId_FLAL = 'FLAL', + ActorTypeId_FLBM = 'FLBM', + ActorTypeId_FLBT = 'FLBT', + ActorTypeId_FLTB = 'FLTB', + ActorTypeId_FLTM = 'FLTM', + ActorTypeId_FORC = 'FORC', + ActorTypeId_PWBS = 'PWBS', + ActorTypeId_SBEM = 'SBEM', + ActorTypeId_STNE = 'STNE', + ActorTypeId_TARU = 'TARU', + ActorTypeId_TSBH = 'TSBH', + ActorTypeId_TSUB = 'TSUB', + ActorTypeId_VLR0 = 'VLR0', +}; diff --git a/include/Actor/Dungeon/ActorActionObject.hpp b/include/Actor/Dungeon/ActorActionObject.hpp index c4e2add3..b984491c 100644 --- a/include/Actor/Dungeon/ActorActionObject.hpp +++ b/include/Actor/Dungeon/ActorActionObject.hpp @@ -1,6 +1,7 @@ #pragma once #include "Actor/Actor.hpp" +#include "Actor/ActorType.hpp" class ActorActionObject : public Actor { public: diff --git a/include/Actor/Navi/ActorForceNavi.hpp b/include/Actor/Navi/ActorForceNavi.hpp index 18a124f4..d2fad08b 100644 --- a/include/Actor/Navi/ActorForceNavi.hpp +++ b/include/Actor/Navi/ActorForceNavi.hpp @@ -1,5 +1,6 @@ #pragma once +#include "Actor/ActorType.hpp" #include "Actor/Navi/ActorNaviBase.hpp" class ActorForceNavi : public ActorNaviBase { diff --git a/include/Actor/Navi/ActorNavi.hpp b/include/Actor/Navi/ActorNavi.hpp index 44027971..4dbad5fe 100644 --- a/include/Actor/Navi/ActorNavi.hpp +++ b/include/Actor/Navi/ActorNavi.hpp @@ -1,6 +1,8 @@ #pragma once +#include "Actor/ActorType.hpp" #include "Actor/Navi/ActorNaviBase.hpp" +#include "Unknown/UnkStruct_02057200.hpp" #include "Unknown/UnkStruct_ov000_020beba8.hpp" #include "Unknown/UnkStruct_ov000_020c0c08.hpp" @@ -10,34 +12,50 @@ public: /* c */ /* 00 */ virtual ~UnkStruct_ov000_020b8110() override; - /* 08 */ virtual void vfunc_08(unk16 *param1) override; + /* 08 */ virtual bool vfunc_08(UnkStruct_ov000_020beba8_08 *param1) override; /* 14 */ virtual bool vfunc_14(u16 *param1) override; - /* 18 */ virtual void vfunc_18(s32 *param1) override; + /* 18 */ virtual bool vfunc_18(s32 *param1) override; /* 1c */ UnkStruct_ov000_020b8110(); }; +class ActorNavi_Unk_334 { +public: + /* 00 */ Vec3p mUnk_00; + /* 0c */ + + inline ActorNavi_Unk_334() { + mUnk_00.x = 0; + mUnk_00.y = 0; + mUnk_00.z = 0; + } +}; + class ActorNavi : public ActorNaviBase { public: static ActorType gType; /* 000 (base) */ /* 294 */ ModelRender mUnk_294; - /* 2f0 */ UnkStruct_ov000_020c0c08 mUnk_2f0; - /* 314 */ UnkStruct_ov000_020c0c08_04 mUnk_314; - /* 334 */ Vec3p mUnk_334; + /* 2f0 */ ActorNaviBase_Unk2 mUnk_2f0; + /* 334 */ ActorNavi_Unk_334 mUnk_334; /* 340 */ unk16 mUnk_340; - /* 342 */ unk8 mUnk_342[0x2]; - /* 344 */ u32 mUnk_344; + /* 342 (padding) */ + /* 344 */ q20 mUnk_344; /* 348 */ unk32 mUnk_348; - /* 34c */ unk8 mUnk_34c[0x38]; + /* 34c */ ActorNaviBase_Unk1 mUnk_34c[4]; + /* 35c */ unk8 mUnk_35c[0x28]; /* 384 */ Mat3p mUnk_384; /* 3a8 */ unk8 mUnk_3a8[0xC]; /* 3b4 */ EquipHammer *mHammer; - /* 3b8 */ unk32 mUnk_3b8; - /* 3bc */ unk32 mUnk_3bc; - /* 3c0 */ u8 mUnk_3c0[0x8]; + /* 3b8 */ UnkStruct_02057200 mUnk_3b8; + /* 3c0 */ u8 mUnk_3c0; + /* 3c1 */ u8 mUnk_3c1; + /* 3c2 */ u8 mUnk_3c2; + /* 3c2 */ u8 mUnk_3c3; + /* 3c4 */ u16 mUnk_3c4; + /* 3c6 */ u16 mUnk_3c6; /* 3c8 */ /* 00 */ virtual ~ActorNavi() override; @@ -47,8 +65,8 @@ public: /* b4 */ virtual FairyId GetFairyId() override; /* b8 */ virtual s32 vfunc_b8() override; /* c0 */ virtual bool vfunc_c0(Vec3p *param1) override; - /* c4 */ virtual void vfunc_c4() override; - /* c8 */ virtual void vfunc_c8() override; + /* c4 */ virtual u16 vfunc_c4() override; + /* c8 */ virtual u16 vfunc_c8() override; /* cc */ virtual bool vfunc_cc(unk32 *param1) override; /* d0 */ virtual void vfunc_d0() override; /* d4 */ virtual void vfunc_d4() override; @@ -64,7 +82,7 @@ public: bool func_ov059_0219933c(u32 param1); void func_ov059_0219a0ac(); - void func_ov059_0219aa08(); + void func_ov059_0219aa08(bool param1); void func_ov059_0219aba8(u32 param1); bool func_ov059_0219af14(); bool func_ov059_0219afc4(); diff --git a/include/Actor/Navi/ActorNaviBase.hpp b/include/Actor/Navi/ActorNaviBase.hpp index 4427853a..4434c1ff 100644 --- a/include/Actor/Navi/ActorNaviBase.hpp +++ b/include/Actor/Navi/ActorNaviBase.hpp @@ -6,6 +6,8 @@ #include "Actor/Actor.hpp" #include "Player/EquipHammer.hpp" #include "Render/ModelRender.hpp" +#include "Unknown/UnkStruct_ov000_020b7d74.hpp" +#include "Unknown/UnkStruct_ov000_020d18f4.hpp" typedef s32 FairyId; enum FairyId_ { @@ -16,34 +18,62 @@ enum FairyId_ { FairyId_COUNT = 3, }; -class ActorNaviBase_Unk1 {}; +class ActorNaviBase_Unk1 : public UnkStruct_ov000_020b7d74 { +public: + ActorNaviBase_Unk1(); +}; + +class ActorNaviBase_Unk2 : public UnkStruct_ov000_020c0c08 { +public: + /* 00 (base) */ + /* 24 */ UnkStruct_ov000_020c0c08_04 mUnk_24; + /* 44 */ + + /* 00 */ virtual ~ActorNaviBase_Unk2() override; + /* 08 */ + + inline ActorNaviBase_Unk2(ItemModel *model) : + UnkStruct_ov000_020c0c08(&mUnk_24, model) {} + inline ActorNaviBase_Unk2(NsAnimation *param2, ItemModel *model) : + UnkStruct_ov000_020c0c08(&mUnk_24, model) { + this->func_ov000_020c0c44(param2); + } +}; + +class ActorNaviBase_Unk3 : public ModelRender { +public: + /* 00 */ virtual ~ActorNaviBase_Unk3() {} + /* 3c */ virtual void vfunc_3c() override; + /* 40 */ + + ActorNaviBase_Unk3(ItemModel *param1); +}; class ActorNaviBase : public Actor { public: /* 000 (base) */ /* 158 */ Vec3p mOffsetPos; /* 164 */ unk32 mUnk_164; - /* 168 */ ModelRender mUnk_168; + /* 168 */ ActorNaviBase_Unk3 mUnk_168; /* 1c4 */ unk8 mUnk_1c4[0xc]; - /* 1d0 */ void *mUnk_1d0; - /* 1d4 */ unk8 mUnk_1d4[0x20]; - /* 1f4 */ unk8 mUnk_1f4[0x20]; + /* 1d0 */ ActorNaviBase_Unk2 mUnk_1d0; /* 214 */ unk16 mUnk_214; - /* 216 */ unk8 mUnk_216[0xc]; + /* 216 */ unk8 mUnk_216[0x2]; + /* 218 */ ActorNaviBase_Unk1 mUnk_218[2]; + /* 220 */ unk8 mUnk_220[0x2]; /* 222 */ unk16 mUnk_222; - /* 224 */ unk8 mUnk_224[0x28]; - /* 24c */ unk32 mUnk_24c; - /* 250 */ unk32 mUnk_250; - /* 254 */ unk32 mUnk_254; - /* 258 */ unk32 mUnk_258; - /* 25c */ unk32 mUnk_25c; - /* 260 */ unk32 mUnk_260; - /* 264 */ unk8 mUnk_264[0x1c]; + /* 224 */ UnkStruct_ov000_020d18f4 mUnk_224; /* 280 */ unk32 mUnk_280; /* 284 */ unk32 mUnk_284; - /* 288 */ unk8 mUnk_288[0x2]; + /* 288 */ unk8 mUnk_288; + /* 288 */ unk8 mUnk_289; /* 28a */ unk16 mUnk_28a; - /* 28c */ unk8 mUnk_28c[0x8]; + /* 28c */ unk8 mUnk_28c; + /* 28d */ unk8 mUnk_28d; + /* 28e */ unk8 mUnk_28e; + /* 28e */ unk8 mUnk_28f; + /* 290 */ unk8 mUnk_290; + /* 291 */ unk8 mUnk_291; /* 294 */ /* 00 */ virtual ~ActorNaviBase() override; @@ -65,8 +95,8 @@ public: /* b8 */ virtual s32 vfunc_b8(); /* bc */ virtual bool vfunc_bc(unk32 param1, unk8 param2, s32 param3); /* c0 */ virtual bool vfunc_c0(Vec3p *param1); - /* c4 */ virtual void vfunc_c4(); - /* c8 */ virtual void vfunc_c8(); + /* c4 */ virtual u16 vfunc_c4(); + /* c8 */ virtual u16 vfunc_c8(); /* cc */ virtual bool vfunc_cc(unk32 *param1); /* d0 */ virtual void vfunc_d0(); /* d4 */ virtual void vfunc_d4(); diff --git a/include/Actor/Navi/ActorWisdomNavi.hpp b/include/Actor/Navi/ActorWisdomNavi.hpp index fb6d2641..bf18b5cb 100644 --- a/include/Actor/Navi/ActorWisdomNavi.hpp +++ b/include/Actor/Navi/ActorWisdomNavi.hpp @@ -1,5 +1,6 @@ #pragma once +#include "Actor/ActorType.hpp" #include "Actor/Navi/ActorNaviBase.hpp" class ActorWisdomNavi : public ActorNaviBase { diff --git a/include/Actor/Player/ActorBomb.hpp b/include/Actor/Player/ActorBomb.hpp index 2c1cd196..38d49a53 100644 --- a/include/Actor/Player/ActorBomb.hpp +++ b/include/Actor/Player/ActorBomb.hpp @@ -59,7 +59,7 @@ public: /* 18 */ virtual void vfunc_18(u32 param1) override; /* 20 */ virtual void vfunc_20(bool param1) override; /* 54 */ virtual void vfunc_54() override; - /* 5c */ virtual bool SetVelocity(Vec3p *vel) override; + /* 5c */ virtual bool Drop(Vec3p *vel) override; /* b4 */ static ActorBomb *Create(); diff --git a/include/DTCM/UnkStruct_027e0f6c.hpp b/include/DTCM/UnkStruct_027e0f6c.hpp index 7608b75b..5124371a 100644 --- a/include/DTCM/UnkStruct_027e0f6c.hpp +++ b/include/DTCM/UnkStruct_027e0f6c.hpp @@ -3,6 +3,8 @@ #include "global.h" #include "types.h" +#include + class UnkStruct_027e0f6c_Unk_1 { public: /* 00 */ unk32 mUnk_00; @@ -49,6 +51,7 @@ struct UnkStruct_027e0f6c { /* 00 */ unk8 mUnk_00[0x20]; /* 20 */ UnkStruct_027e0f6c_20 *mUnk_20; + static void func_ov000_02093a1c(u32 *param_1, UnkStruct_027e0f6c *param_2, u16 param_3); void func_ov004_02102770(); }; diff --git a/include/Item/ItemManager.hpp b/include/Item/ItemManager.hpp index 2f552bb5..5f632a2e 100644 --- a/include/Item/ItemManager.hpp +++ b/include/Item/ItemManager.hpp @@ -20,6 +20,7 @@ extern "C" { #define MAX_HOURGLASS_SECONDS 1500 // 25 minutes #define MAX_AMMO_UPGRADE 2 #define MAX_UNK_0BA 9 +#define MAX_KEYS 8 typedef u32 ItemModelId; enum ItemModelId_ { diff --git a/include/Map/Course.hpp b/include/Map/Course.hpp index 2cbf8387..b64a3ef3 100644 --- a/include/Map/Course.hpp +++ b/include/Map/Course.hpp @@ -9,8 +9,6 @@ #include "Physics/AABB.hpp" #include "System/SysNew.hpp" -#define MAX_KEYS 8 - typedef unk32 CourseType; enum CourseType_ { CourseType_Normal = 0, diff --git a/include/Map/MapBase.hpp b/include/Map/MapBase.hpp index 8decca85..ac64e596 100644 --- a/include/Map/MapBase.hpp +++ b/include/Map/MapBase.hpp @@ -142,7 +142,7 @@ public: /* 64 */ virtual unk32 vfunc_64(); /* 68 */ virtual unk32 vfunc_68(Vec3p *param_1, bool param_2); /* 6c */ virtual unk8 vfunc_6c(Vec3p *param_2, unk32 *param_3, Vec3p *param_4); - /* 70 */ virtual unk32 vfunc_70(Vec3p *param_2); + /* 70 */ virtual u16 vfunc_70(Vec3p *param_2); /* 74 */ virtual unk32 *vfunc_74(Vec3p *param_2); /* 78 */ virtual unk32 *vfunc_78(TilePos *param_1); /* 7c */ virtual s32 vfunc_7c(s32 param_1, unk32 *param_2, s32 param_3, short param_4[4]); diff --git a/include/Map/MapManager.hpp b/include/Map/MapManager.hpp index 56888ab1..37b6ce13 100644 --- a/include/Map/MapManager.hpp +++ b/include/Map/MapManager.hpp @@ -268,7 +268,7 @@ public: s32 func_ov00_02083ef8(Vec3p *param_2, Vec3p *param_3, bool param_4); unk32 func_ov00_02083f44(Vec3p *param_2, bool param_3); unk8 MapData_vfunc_6c(Vec3p *param_2, unk32 *param_3, Vec3p *param_4); - unk32 MapData_vfunc_70(Vec3p *param_2); + u16 MapData_vfunc_70(Vec3p *param_2); static void func_ov00_02083fb0(u32 *param_1, MapManager *param_2, Vec3p *param_3); void GetTileWorldBounds(TilePos *tile, AABB *tileBounds); unk32 MapData_vfunc_54(TilePos *a); diff --git a/include/Message/MsgProc.hpp b/include/Message/MsgProc.hpp index 97cf46e9..0615dee8 100644 --- a/include/Message/MsgProc.hpp +++ b/include/Message/MsgProc.hpp @@ -119,7 +119,6 @@ extern "C" void func_020347b0(unk32, unk16, unk32 *, unk32 *, unk32, unk32); extern THUMB unk32 func_0202ab48(void); extern "C" void func_02034984(unk32, u8, unk32, unk32); extern "C" void func_02034698(unk32, unk32, unk32 *, unk32 *); -extern struct TouchControl gTouchControl; class UnkClass_027e0e28 { public: diff --git a/include/Physics/Cylinder.hpp b/include/Physics/Cylinder.hpp index 9fb50ef2..89e78467 100644 --- a/include/Physics/Cylinder.hpp +++ b/include/Physics/Cylinder.hpp @@ -18,6 +18,11 @@ struct Cylinder { this->size = size; } + inline void MakeEmpty() { + pos = gVec3p_ZERO; + size = -1; + } + bool Overlaps(Cylinder *other); bool func_ov000_0208f030(Vec3p *param1, Vec3p *param2, s32 param3); }; diff --git a/include/Player/TouchControl.hpp b/include/Player/TouchControl.hpp index 989f4791..ee63a3ee 100644 --- a/include/Player/TouchControl.hpp +++ b/include/Player/TouchControl.hpp @@ -53,5 +53,6 @@ public: static bool func_0202b864(Vec3p *param1, s32 size, unk8 param3); static bool func_0202b894(Vec3p *param1, s32 size, unk8 param3); }; +extern TouchControl gTouchControl; extern "C" void Fill16(int value, unsigned short *dst, int size); // TODO: Replace with header file diff --git a/include/Render/ModelRender.hpp b/include/Render/ModelRender.hpp index 8c8bd394..8698d5b9 100644 --- a/include/Render/ModelRender.hpp +++ b/include/Render/ModelRender.hpp @@ -41,12 +41,12 @@ public: /* 3c */ virtual void vfunc_3c(); /* 40 */ - ModelRender(unk32 param1); + ModelRender(ItemModel *param1); void *func_ov000_020a9624(s32 param1); void func_ov000_020a98e8(unk32 param1); void func_ov000_020a990c(unk32 param1); void func_ov000_020a9938(unk32 param1); - void func_ov000_020a9960(unk32 param1); + void func_ov000_020a9960(void *param1); void func_ov000_020a9998(unk32 param1, unk32 param2); void func_ov000_020a99c0(); void func_ov000_020b413c(unk16 param1, Vec3p *param2); diff --git a/include/Unknown/UnkStruct_02037750.hpp b/include/Unknown/UnkStruct_02037750.hpp index a480c1a3..493ca6b0 100644 --- a/include/Unknown/UnkStruct_02037750.hpp +++ b/include/Unknown/UnkStruct_02037750.hpp @@ -3,9 +3,11 @@ #include "global.h" #include "types.h" -#include "Player/LinkStateInteract.hpp" +#include + #include "System/SysNew.hpp" +class LinkStateInteract; class UnkStruct_020397f8; typedef unk32 (*UnkStruct_02037750_Callback1)(unk32); @@ -43,9 +45,9 @@ public: class UnkStruct_020386d8_24 { public: /* 00 */ u8 mUnk_00; - /* 00 */ u8 mUnk_01; - /* 00 */ u8 mUnk_02; - /* 00 */ u8 mUnk_03; + /* 01 */ u8 mUnk_01; + /* 02 */ u8 mUnk_02; + /* 03 */ u8 mUnk_03; /* 04 */ void func_020376c0(const Vec3p *param_2); diff --git a/include/Unknown/UnkStruct_02057200.hpp b/include/Unknown/UnkStruct_02057200.hpp new file mode 100644 index 00000000..48887226 --- /dev/null +++ b/include/Unknown/UnkStruct_02057200.hpp @@ -0,0 +1,10 @@ +#pragma once + +#include "global.h" +#include "types.h" + +struct UnkStruct_02057200 { + /* 00 */ unk32 mUnk_00; + /* 04 */ unk32 mUnk_04; +}; +extern UnkStruct_02057200 data_02057200; diff --git a/include/Unknown/UnkStruct_ov000_020b7d74.hpp b/include/Unknown/UnkStruct_ov000_020b7d74.hpp new file mode 100644 index 00000000..7e2dd773 --- /dev/null +++ b/include/Unknown/UnkStruct_ov000_020b7d74.hpp @@ -0,0 +1,14 @@ +#pragma once + +#include "global.h" +#include "types.h" + +class UnkStruct_ov000_020b7d74 { +public: + /* 0 */ unk32 mUnk_0; + /* 4 */ + + inline UnkStruct_ov000_020b7d74() : + mUnk_0(0) {} + ~UnkStruct_ov000_020b7d74(); +}; diff --git a/include/Unknown/UnkStruct_ov000_020beba8.hpp b/include/Unknown/UnkStruct_ov000_020beba8.hpp index 4cf4bbbb..fb48e60e 100644 --- a/include/Unknown/UnkStruct_ov000_020beba8.hpp +++ b/include/Unknown/UnkStruct_ov000_020beba8.hpp @@ -24,8 +24,8 @@ public: /* 08 */ virtual bool vfunc_08(UnkStruct_ov000_020beba8_08 *param1); /* 0c */ virtual void vfunc_0c(unk16 *param1); /* 10 */ virtual bool vfunc_10(s32 *param1); - /* 14 */ virtual bool vfunc_14(u16 *param1, s32 param2); - /* 18 */ virtual void vfunc_18(s32 *param1); + /* 14 */ virtual bool vfunc_14(u16 *param1); + /* 18 */ virtual bool vfunc_18(s32 *param1); /* 1c */ UnkStruct_ov000_020beba8(unk32 param1); diff --git a/include/Unknown/UnkStruct_ov000_020c0c08.hpp b/include/Unknown/UnkStruct_ov000_020c0c08.hpp index ec253a46..2e16bed3 100644 --- a/include/Unknown/UnkStruct_ov000_020c0c08.hpp +++ b/include/Unknown/UnkStruct_ov000_020c0c08.hpp @@ -3,6 +3,8 @@ #include "global.h" #include "types.h" +#include + #include "System/SysNew.hpp" #include "Unknown/UnkStruct_0202e1a0.hpp" diff --git a/include/Unknown/UnkStruct_ov000_020d18f4.hpp b/include/Unknown/UnkStruct_ov000_020d18f4.hpp new file mode 100644 index 00000000..ad2b80df --- /dev/null +++ b/include/Unknown/UnkStruct_ov000_020d18f4.hpp @@ -0,0 +1,25 @@ +#pragma once + +#include "global.h" +#include "types.h" + +#include "Actor/ActorRef.hpp" +#include "Unknown/UnkStruct_02037750.hpp" + +class UnkStruct_ov000_020d18f4 : public UnkStruct_02037750 { +public: + /* 00 (base) */ + /* 20 */ ActorRef mUnk_20; + /* 28 */ unk8 mUnk_28[0x18]; + /* 40 */ void *mUnk_40; + /* 44 */ unk32 mUnk_44; + /* 48 */ unk32 mUnk_48; + /* 4c */ unk32 mUnk_4c; + /* 50 */ unk32 mUnk_50; + /* 54 */ unk32 mUnk_54; + /* 58 */ unk32 mUnk_58; + /* 5c */ + + UnkStruct_ov000_020d18f4(unk32 param1); + ~UnkStruct_ov000_020d18f4(); +}; diff --git a/libs/nds/include/nds/ns.h b/libs/nds/include/nds/ns.h new file mode 100644 index 00000000..cf28f590 --- /dev/null +++ b/libs/nds/include/nds/ns.h @@ -0,0 +1,70 @@ +#ifndef _NDS_NS_H +#define _NDS_NS_H + +#include "global.h" +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct NsFile { + /* 00 */ u32 magic; + /* 04 */ u16 bom; + /* 06 */ u16 version; + /* 08 */ u32 size; + /* 0c */ u16 headerSize; + /* 0e */ u16 numSections; + /* 10 */ u32 sectionOffsets[]; + /* 10 + 4 * numSections */ +} NsFile; + +typedef struct NsName { + char name[16]; +} NsName; + +typedef struct NsInfoBlock { + /* 00 */ u8 dummy; + /* 01 */ u8 count; + /* 02 */ u16 size; + /* 04 */ u16 unknownOffset; + /* 06 */ u16 listOffset; + /* 08 */ u32 unknownNum; + /* 0c */ u32 unknown[]; // u32[count] + // u16 elementSize; + // u16 dataSectionSize; + // T data[count]; + // NsName data[count]; +} NsInfoBlock; +#define NS_INFO_BLOCK_ELEMENT_SIZE(section) *(u16 *) ((u32) (section) + (section)->listOffset) +#define NS_INFO_BLOCK_DATA_SECTION_SIZE(section) *(u16 *) ((u32) (section) + (section)->listOffset + 2) +#define NS_INFO_BLOCK_DATA(section, i) \ + *(u16 *) ((u32) (section) + (section)->listOffset + 4 + i * NS_INFO_BLOCK_ELEMENT_SIZE(section)) +#define NS_INFO_BLOCK_NAME(section, info, i) \ + *(u16 *) ((u32) (section) + (section)->listOffset + 4 + (info)->count * NS_INFO_BLOCK_ELEMENT_SIZE(section) + \ + i * sizeof(NsName)) + +typedef struct NsJntSection { + /* 00 */ u32 magic; + /* 04 */ u32 size; + /* 08 */ NsInfoBlock animations; +} NsJntSection; + +typedef struct NsAnimation { + /* 00 */ u32 magic; + /* 04 */ u16 numFrames; + /* 06 */ u16 numTracks; + /* 08 */ u32 unknown; + /* 0c */ u32 pivotDataOffset; + /* 10 */ u32 basisMatricesOffset; + /* 14 */ u16 trackOffsets[]; // u16[numTracks] +} NsAnimation; + +NsJntSection *FindJntSection(NsFile *file); +NsAnimation *GetJntAnimation(NsJntSection *section, u32 index); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/libs/nds/include/nds/overlay.h b/libs/nds/include/nds/overlay.h index c5972f7a..d421c80e 100644 --- a/libs/nds/include/nds/overlay.h +++ b/libs/nds/include/nds/overlay.h @@ -1,6 +1,8 @@ #ifndef _NDS_OVERLAY_H #define _NDS_OVERLAY_H +#include "types.h" + #ifdef __cplusplus extern "C" { #endif diff --git a/src/00_Core/Actor/Actor.cpp b/src/00_Core/Actor/Actor.cpp index c2a0f06c..efe35900 100644 --- a/src/00_Core/Actor/Actor.cpp +++ b/src/00_Core/Actor/Actor.cpp @@ -70,8 +70,8 @@ ARM Actor::Actor() : mUnk_107(0), mUnk_108(0), mUnk_109(0), - mUnk_110(0), - mUnk_111(0), + mTouchingWall(false), + mTouchingFloor(false), mUnk_112(0), mUnk_113(0), mUnk_114(0), @@ -79,7 +79,7 @@ ARM Actor::Actor() : mAlive(true), mUnk_119(1), mVisible(true), - mUnk_11b(false), + mGrabbed(false), mUnk_11c(0), mUnk_11d(false), mYOffset(0), @@ -202,21 +202,21 @@ ARM void Actor::SetUnk_129(bool value) { } } -ARM bool Actor::SetUnk_11b() { - if (mUnk_11b) { +ARM bool Actor::Grab() { + if (mGrabbed) { return false; } - mUnk_11b = true; + mGrabbed = true; return true; } -ARM bool Actor::SetVelocity(Vec3p *vel) { - if (!mUnk_11b) { - return false; +ARM bool Actor::Drop(Vec3p *vel) { + if (mGrabbed) { + mVel = *vel; + mGrabbed = false; + return true; } - mVel = *vel; - mUnk_11b = false; - return true; + return false; } ARM bool Actor::vfunc_60() { @@ -263,7 +263,7 @@ ARM bool Actor::vfunc_98() {} ARM bool Actor::vfunc_9c() {} ARM bool Actor::func_ov00_020c195c() { - if (!mUnk_11b) { + if (!mGrabbed) { return false; } gPlayerLink->func_ov000_020bc854(&mPos); @@ -359,7 +359,7 @@ ARM bool Actor::IsNearLink() { } ARM void Actor::func_ov00_020c1cf8() { - if (mUnk_0a4.mUnk_00 || mUnk_0a4.mUnk_01 || mUnk_129 == true || mUnk_11d == true || mUnk_11b == true) { + if (mUnk_0a4.mUnk_00 || mUnk_0a4.mUnk_01 || mUnk_129 == true || mUnk_11d == true || mGrabbed == true) { mInactive = 0; } else { if (this->IsNearLink()) { @@ -648,7 +648,7 @@ ARM bool Actor::CollidesWith(Actor *other) { } ARM bool Actor::func_ov00_020c27a8(unk32 param1) { - if (mUnk_11b) { + if (mGrabbed) { return false; } if (param1 == 0) { diff --git a/src/00_Core/Actor/Dungeon/ActorActionObject.cpp b/src/00_Core/Actor/Dungeon/ActorActionObject.cpp index 1039b574..dbd66a76 100644 --- a/src/00_Core/Actor/Dungeon/ActorActionObject.cpp +++ b/src/00_Core/Actor/Dungeon/ActorActionObject.cpp @@ -19,15 +19,14 @@ ARM ActorActionObject::~ActorActionObject() {} // non-matching ARM bool ActorActionObject::Init() { - mGravity = 0; - mHitbox.pos = gVec3p_ZERO; - mHitbox.size = -1; - mUnk_08c.pos = mHitbox.pos; - mUnk_08c.size = mHitbox.size; - mUnk_0a4.mUnk_04 = gVec3p_ZERO; - mUnk_0a4.mUnk_10 = -1; - mVisible = false; - mUnk_130 = 0; + mGravity = 0; + mHitbox.pos = gVec3p_ZERO; + mHitbox.size = -1; + mUnk_08c.pos = mHitbox.pos; + mUnk_08c.size = mHitbox.size; + mUnk_0a4.mUnk_04.MakeEmpty(); + mVisible = false; + mUnk_130 = 0; return true; } diff --git a/src/00_Core/Actor/Navi/ActorNavi.cpp b/src/00_Core/Actor/Navi/ActorNavi.cpp index dd93a77a..2d001ec0 100644 --- a/src/00_Core/Actor/Navi/ActorNavi.cpp +++ b/src/00_Core/Actor/Navi/ActorNavi.cpp @@ -1,32 +1,199 @@ #include "Actor/Navi/ActorNavi.hpp" +#include "DTCM/UnkStruct_027e0f6c.hpp" +#include "Game/Game.hpp" +#include "Item/ItemManager.hpp" #include "Player/EquipHammer.hpp" +static char *sShipParts[8] = {"anc", "bow", "hul", "can", "dco", "pdl", "fnl", "brg"}; + ActorType ActorNavi::gType = ActorType(ActorTypeId_Navi, (ActorCreateFunc) ActorNavi::Create, NULL); UnkStruct_ov000_020b8110 data_ov000_020ee1cc; -ActorNavi *ActorNavi::Create() {} -UnkStruct_ov000_020b8110::UnkStruct_ov000_020b8110() : +extern u32 **data_027e0fe0[]; +ARM ActorNavi *ActorNavi::Create() { + return new(*data_027e0fe0[0], 4) ActorNavi(); +} + +ARM UnkStruct_ov000_020b8110::UnkStruct_ov000_020b8110() : UnkStruct_ov000_020beba8(7) {} -UnkStruct_ov000_020b8110::~UnkStruct_ov000_020b8110() {} -void UnkStruct_ov000_020b8110::vfunc_08(unk16 *param1) {} -void UnkStruct_ov000_020b8110::vfunc_18(s32 *param1) {} -bool UnkStruct_ov000_020b8110::vfunc_14(u16 *param1) {} -void ActorNavi::func_ov000_020b8200() {} -void ActorNavi::vfunc_c4() {} -void ActorNavi::vfunc_c8() {} -FairyId ActorNavi::GetFairyId() {} -s32 ActorNavi::vfunc_b8() {} -void ActorNavi::vfunc_d4() {} -void ActorNavi::vfunc_d0() {} -void ActorNavi::SetActive(unk32 active) {} -void ActorNavi::vfunc_e0() {} -void ActorNavi::vfunc_d8() {} -void ActorNavi::vfunc_20(bool param1) {} -bool ActorNavi::vfunc_cc(unk32 *param1) {} -bool ActorNavi::vfunc_c0(Vec3p *param1) {} -void ActorNavi::vfunc_e8() {} -bool ActorNavi::vfunc_8c() {} -void ActorNavi::vfunc_ec() {} -EquipHammer *GetEquipHammer() {} -void ActorNavi::func_ov000_020b853c() {} + +ARM UnkStruct_ov000_020b8110::~UnkStruct_ov000_020b8110() {} + +ARM bool UnkStruct_ov000_020b8110::vfunc_08(UnkStruct_ov000_020beba8_08 *param1) { + u32 temp_r0; + UnkStruct_027e0f6c::func_ov000_02093a1c(&temp_r0, data_027e0f6c, param1->mUnk_00); + if ((temp_r0 & 0x1f) == 0 && ((temp_r0 >> 7) & 0x3) == 2) { + return true; + } + return UnkStruct_ov000_020beba8::vfunc_08(param1); +} + +ARM bool UnkStruct_ov000_020b8110::vfunc_18(s32 *param1) { + switch ((*(unk32(**)(s32 *))((*param1) + 0x1c))(param1)) { + case 0x10: + case 0x17: + return false; + } + return UnkStruct_ov000_020beba8::vfunc_18(param1); +} + +ARM bool UnkStruct_ov000_020b8110::vfunc_14(u16 *param1) { + return UnkStruct_ov000_020beba8::vfunc_14(param1); +} + +ARM void ActorNavi::func_ov000_020b8200() { + mUnk_09c.mUnk_4 = &data_ov000_020ee1cc; +} + +ARM u16 ActorNavi::vfunc_c4() { + if ((gGame.mModeId != GameModeId_Battle) && (mUnk_3c1 == 0)) { + return ActorNaviBase::vfunc_c4(); + } + return mUnk_3c4; +} + +ARM u16 ActorNavi::vfunc_c8() { + if ((gGame.mModeId != GameModeId_Battle) && (mUnk_3c1 == 0)) { + return ActorNaviBase::vfunc_c8(); + } + return mUnk_3c6; +} + +ARM FairyId ActorNavi::GetFairyId() { + return FairyId_Courage; +} + +ARM s32 ActorNavi::vfunc_b8() { + return 58; +} + +ARM void ActorNavi::vfunc_d4() { + if (mHammer != NULL && this->func_ov059_0219af14()) { + return; + } + return ActorNaviBase::vfunc_d4(); +} + +ARM void ActorNavi::vfunc_d0() { + if (mHammer != NULL && this->func_ov059_0219afc4()) { + return; + } + ActorNaviBase::vfunc_d0(); +} + +extern void func_ov000_020b7e6c(s32 *param1); +ARM void ActorNavi::SetActive(unk32 active) { + s32 temp_r4; + s32 var_r5; + var_r5 = (s32) mUnk_34c; + temp_r4 = (s32) (mUnk_34c + 4); + if (var_r5 != temp_r4) { + do { + func_ov000_020b7e6c((s32 *) var_r5); + var_r5 += 4; + } while (var_r5 != temp_r4); + } + if (mHammer != NULL) { + this->func_ov059_0219aba8(active); + } + return ActorNaviBase::SetActive(active); +} + +ARM void ActorNavi::vfunc_e0() { + void (*var_r1)(); + s32 temp_r0; + void **temp_r0_2; + + if (mUnk_3b8.mUnk_00 != NULL) { + if (mUnk_130 != 0) { + this->SetActive(1); + } else { + (*(void (**)())((*(unk32 *) ((s32) this + (mUnk_3b8.mUnk_04 >> 1))) + mUnk_3b8.mUnk_00))(); + return; + } + } + if (mHammer != NULL) { + if (!mHammer->IsInUse()) { + this->func_ov000_020b853c(); + } else { + + if (mUnk_130 != 0) { + return; + } + this->SetActive(3); + return; + } + } + return ActorNaviBase::vfunc_e0(); +} + +ARM void ActorNavi::vfunc_d8() { + if (mHammer != NULL) { + this->func_ov059_0219a0ac(); + return; + } + ActorNaviBase::vfunc_d8(); +} + +ARM void ActorNavi::vfunc_20(bool param1) { + + ActorNaviBase::vfunc_20(param1); + u8 var_r0 = param1 ? mUnk_0a4.mUnk_01 : mUnk_0a4.mUnk_00; + if ((var_r0 != 0) && mHammer != NULL) { + this->func_ov059_0219aa08(param1); + } +} + +ARM bool ActorNavi::vfunc_cc(unk32 *param1) { + if (mHammer != NULL || mUnk_3b8.mUnk_00 != 0) { + return false; + } + return ActorNaviBase::vfunc_cc(param1); +} + +ARM bool ActorNavi::vfunc_c0(Vec3p *param1) { + if (mHammer != NULL || mUnk_3b8.mUnk_00 != 0) { + return false; + } + return ActorNaviBase::vfunc_c0(param1); +} + +static unk32 data_ov000_020e6554 = 0x2000; + +ARM void ActorNavi::vfunc_e8() { + ActorNaviBase::vfunc_e8(); + if (mHammer == NULL) { + return; + } + mUnk_2f0.mUnk_0c.mUnk_04 = data_ov000_020e6554; + mUnk_2f0.func_ov000_020c0e04(); +} + +ARM bool ActorNavi::vfunc_8c() { + return true; +} + +ARM void ActorNavi::vfunc_ec() { + if (mUnk_3b8.mUnk_00 != 0 || mHammer != NULL) { + return; + } + if (gGame.mModeId == GameModeId_Battle) { + return; + } + if (!GetEquipHammer()->IsInUse()) { + return; + } + this->func_ov059_0219b020(); +} + +ARM EquipHammer *GetEquipHammer() { + return (EquipHammer *) gItemManager->GetEquipItemUnchecked(ItemFlag_Hammer); +} + +ARM void ActorNavi::func_ov000_020b853c() { + mHammer = NULL; + mUnk_3c0 = 0; + mUnk_348 = 0; +} + ActorNavi::~ActorNavi() {} diff --git a/src/00_Core/Actor/Navi/ActorNaviBase.cpp b/src/00_Core/Actor/Navi/ActorNaviBase.cpp index 39eb0bb5..0bbe0f8a 100644 --- a/src/00_Core/Actor/Navi/ActorNaviBase.cpp +++ b/src/00_Core/Actor/Navi/ActorNaviBase.cpp @@ -1,7 +1,7 @@ #include "Actor/Navi/ActorNaviBase.hpp" -void ActorNaviBase::vfunc_c4() {} -void ActorNaviBase::vfunc_c8() {} +u16 ActorNaviBase::vfunc_c4() {} +u16 ActorNaviBase::vfunc_c8() {} unk32 ActorNaviBase::vfunc_30() {} s32 ActorNaviBase::vfunc_b8() {} bool ActorNaviBase::vfunc_cc(unk32 *param1) {} diff --git a/src/00_Core/Map/MapBase.cpp b/src/00_Core/Map/MapBase.cpp index b3a7122e..988d745a 100644 --- a/src/00_Core/Map/MapBase.cpp +++ b/src/00_Core/Map/MapBase.cpp @@ -28,7 +28,7 @@ unk8 MapBase::func_ov00_0207e940(unk8 *param_1) {} unk8 MapBase::func_ov00_0207e968() {} unk8 MapBase::func_ov00_0207e96c() {} unk8 MapBase::vfunc_6c(Vec3p *param_2, unk32 *param_3, Vec3p *param_4) {} -unk32 MapBase::vfunc_70(Vec3p *param_2) {} +u16 MapBase::vfunc_70(Vec3p *param_2) {} unk32 *MapBase::vfunc_74(Vec3p *param_2) {} unk8 MapBase::func_ov00_0207f100() {} bool MapBase::func_ov00_0207f104(unk32 param_2, unk32 param_3) {} diff --git a/src/00_Core/Map/MapManager.cpp b/src/00_Core/Map/MapManager.cpp index 71bcd9dc..cedb7d01 100644 --- a/src/00_Core/Map/MapManager.cpp +++ b/src/00_Core/Map/MapManager.cpp @@ -44,7 +44,6 @@ extern s32 func_ov000_0208e6f0(Vec3p *param_1); extern s32 func_ov000_0208e704(Vec3p *param_1); extern s32 func_ov000_0208e87c(AABB *param_1, Vec3p *param_2, Vec3p *param_3); extern void func_ov000_0208ed74(AABB *param_1, Vec3p *param_2); -extern void func_ov000_02093a1c(u32 *param_1, unk32 *param_2, unk32 param_3); extern void func_ov000_02096324(unk32 *param_1, unk32 *param_2); extern s32 *func_ov000_02096418(s32 *param_1); extern void func_ov015_021849a4(unk32 *param_1); @@ -1268,13 +1267,13 @@ unk8 MapManager::MapData_vfunc_6c(Vec3p *param_2, unk32 *param_3, Vec3p *param_4 this->mMap->vfunc_6c(param_2, param_3, param_4); } -ARM unk32 MapManager::MapData_vfunc_70(Vec3p *param_2) { +ARM u16 MapManager::MapData_vfunc_70(Vec3p *param_2) { return this->mMap->vfunc_70(param_2); } ARM void MapManager::func_ov00_02083fb0(u32 *param_1, MapManager *param_2, Vec3p *param_3) { unk32 *iVar1; // find type with field that exists at offset 0xc - s32 dVar2; + u16 dVar2; iVar1 = (unk32 *) param_2->mMap->vfunc_74(param_3); if (iVar1 != NULL) { @@ -1284,7 +1283,7 @@ ARM void MapManager::func_ov00_02083fb0(u32 *param_1, MapManager *param_2, Vec3p dVar2 = param_2->MapData_vfunc_70(param_3); if (dVar2 != 0xffff) { - func_ov000_02093a1c(param_1, (unk32 *) data_027e0f6c, dVar2); + UnkStruct_027e0f6c::func_ov000_02093a1c(param_1, data_027e0f6c, dVar2); return; } @@ -2086,7 +2085,7 @@ unk32 MapManager::func_ov00_02084ebc(Vec3p *param_2) { } // dVar3 = this->MapData_vfunc_70(); // Missing param. if (dVar3 != 0xffff) { - func_ov000_02093a1c(&uStack_14, (unk32 *) data_027e0f6c, dVar3); + UnkStruct_027e0f6c::func_ov000_02093a1c(&uStack_14, data_027e0f6c, dVar3); if ((uStack_14 >> 5 & 3) != 1) { return 0; } @@ -2274,7 +2273,7 @@ s32 MapManager::func_ov00_020853fc(MapManager *param_1, Vec3p *param_2, s32 *par ARM unk32 MapManager::func_ov00_02085594(Vec3p *param_2) { UnkStruct_02085594 *piVar1; - unk32 dVar3; + u16 dVar3; unk32 uVar4; bool bVar5; u32 uStack_24; @@ -2337,7 +2336,7 @@ ARM unk32 MapManager::func_ov00_02085594(Vec3p *param_2) { if (dVar3 == 0xffff) { return 0; } - func_ov000_02093a1c(&uStack_24, (unk32 *) data_027e0f6c, dVar3); + UnkStruct_027e0f6c::func_ov000_02093a1c(&uStack_24, data_027e0f6c, dVar3); if ((uStack_24 >> 5 & 3) == 1) { return bVar5 ? 1 : 2; } diff --git a/src/00_Core/Render/ModelRender.cpp b/src/00_Core/Render/ModelRender.cpp index 208ddb45..92d32375 100644 --- a/src/00_Core/Render/ModelRender.cpp +++ b/src/00_Core/Render/ModelRender.cpp @@ -1,6 +1,6 @@ #include "Render/ModelRender.hpp" -ModelRender::ModelRender(unk32 param1) {} +ModelRender::ModelRender(ItemModel *param1) {} ModelRender::~ModelRender() {} void *ModelRender::GetLcdcAddress() {} void ModelRender::vfunc_0c(ItemModel *model) {} @@ -18,7 +18,7 @@ void ModelRender::vfunc_30() {} void ModelRender::func_ov000_020a98e8(unk32 param1) {} void ModelRender::func_ov000_020a990c(unk32 param1) {} void ModelRender::func_ov000_020a9938(unk32 param1) {} -void ModelRender::func_ov000_020a9960(unk32 param1) {} +void ModelRender::func_ov000_020a9960(void *param1) {} void ModelRender::vfunc_38() {} void ModelRender::vfunc_3c() {} void ModelRender::func_ov000_020a9998(unk32 param1, unk32 param2) {} diff --git a/src/00_Core/Unknown/UnkStruct_ov000_020beba8.cpp b/src/00_Core/Unknown/UnkStruct_ov000_020beba8.cpp index 076ddcbf..ed96487c 100644 --- a/src/00_Core/Unknown/UnkStruct_ov000_020beba8.cpp +++ b/src/00_Core/Unknown/UnkStruct_ov000_020beba8.cpp @@ -4,6 +4,6 @@ UnkStruct_ov000_020beba8::UnkStruct_ov000_020beba8(unk32 param1) {} bool UnkStruct_ov000_020beba8::vfunc_08(UnkStruct_ov000_020beba8_08 *param1) {} void UnkStruct_ov000_020beba8::vfunc_0c(unk16 *param1) {} bool UnkStruct_ov000_020beba8::vfunc_10(s32 *param1) {} -void UnkStruct_ov000_020beba8::vfunc_18(s32 *param1) {} -bool UnkStruct_ov000_020beba8::vfunc_14(u16 *param1, s32 param2) {} +bool UnkStruct_ov000_020beba8::vfunc_18(s32 *param1) {} +bool UnkStruct_ov000_020beba8::vfunc_14(u16 *param1) {} UnkStruct_ov000_020beba8::~UnkStruct_ov000_020beba8() {} diff --git a/src/04_Load/Actor/Navi/ActorNavi.cpp b/src/04_Load/Actor/Navi/ActorNavi.cpp deleted file mode 100644 index ca1635f8..00000000 --- a/src/04_Load/Actor/Navi/ActorNavi.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include "Actor/Navi/ActorNavi.hpp" -#include "Item/ItemManager.hpp" - -ActorNavi::ActorNavi() : - mUnk_294(0), - mUnk_2f0(&mUnk_314, gItemManager->GetItemModel(ItemModelId_Hammer)) {} diff --git a/src/04_Load/Actor/Navi/ActorNaviBase.cpp b/src/04_Load/Actor/Navi/ActorNaviBase.cpp deleted file mode 100644 index 2ad0dc0b..00000000 --- a/src/04_Load/Actor/Navi/ActorNaviBase.cpp +++ /dev/null @@ -1,7 +0,0 @@ -#include "Actor/Navi/ActorNaviBase.hpp" - -ActorNaviBase::ActorNaviBase() : - mUnk_168(0) {} -ActorNaviBase::~ActorNaviBase() {} -void func_ov004_021079d4(unk32 *param1) {} -bool ActorNaviBase::Init() {} diff --git a/src/04_Load/Actor/Navi/ActorNavi_04.cpp b/src/04_Load/Actor/Navi/ActorNavi_04.cpp new file mode 100644 index 00000000..13bac706 --- /dev/null +++ b/src/04_Load/Actor/Navi/ActorNavi_04.cpp @@ -0,0 +1,81 @@ +#include "Actor/Navi/ActorNavi.hpp" +#include "Item/ItemManager.hpp" + +extern ItemModel *data_ov000_020ee1f8; +extern NsFile *data_ov000_020e67ac; + +THUMB ActorNaviBase::ActorNaviBase() : + mUnk_164(0), + mUnk_168(data_ov000_020ee1f8), + mUnk_1d0(GetJntAnimation(FindJntSection(data_ov000_020e67ac), 0), data_ov000_020ee1f8), + mUnk_214(0), + mUnk_222(-1), + mUnk_224(0x1000000), + mUnk_280(-1), + mUnk_284(-1), + mUnk_288(0), + mUnk_289(0), + mUnk_28a(0), + mUnk_28c(0), + mUnk_28d(0), + mUnk_290(0), + mUnk_291(0) { + mOffsetPos = mPos; + mUnk_130 = 0; + mYOffset = FLOAT_TO_Q20(0.2); +} + +THUMB ActorNaviBase::~ActorNaviBase() {} + +THUMB ActorNaviBase_Unk1::ActorNaviBase_Unk1() {} + +THUMB bool ActorNaviBase::Init() { + mGravity = 0; + mHitbox.MakeEmpty(); + mUnk_08c.pos.x = 0; + mUnk_08c.pos.y = 0; + mUnk_08c.pos.z = 0; + mUnk_08c.size = FLOAT_TO_Q20(0.4); + mUnk_0a4.mUnk_04.MakeEmpty(); + if (data_027e0d38->func_ov000_02078b40() == 2) { + return true; + } + this->func_ov000_020b9770(0); + mUnk_224.mUnk_20.id = mRef.id; + mUnk_224.mUnk_20.index = mRef.index; + mUnk_28e = 0; + mUnk_28f = 0; + return true; +} + +ActorNaviBase_Unk3::ActorNaviBase_Unk3(ItemModel *param1) : + ModelRender(param1) { + this->func_ov000_020a9998(6, 3); +} + +THUMB ActorNavi::ActorNavi() : + mUnk_294(gItemManager->GetItemModel(ItemModelId_Hammer)), + mUnk_2f0(gItemManager->GetItemModel(ItemModelId_Hammer)), + mUnk_340(0), + mUnk_344(FLOAT_TO_Q20(1.0)), + mUnk_348(0), + mHammer(NULL), + mUnk_3b8(data_02057200), + mUnk_3c0(0), + mUnk_3c1(0), + mUnk_3c2(0) {} + +extern const ItemManager_Unk1 data_ov000_020dc7d0; +THUMB bool ActorNavi::Init() { + mUnk_2f0.func_ov000_020c0c44(gItemManager->func_ov00_020ad538(&data_ov000_020dc7d0)); + mUnk_2f0.func_ov000_020c0e5c(0); + mUnk_294.func_ov000_020a9960(&mUnk_35c); + mUnk_294.vfunc_24(&mUnk_2f0); + mUnk_3c4 = ActorNaviBase::vfunc_c4(); + mUnk_3c6 = ActorNaviBase::vfunc_c8(); + mUnk_09c.mUnk_0 = 0xff; + mUnk_09c.mUnk_0 = (s16) (mUnk_09c.mUnk_0 & ~2); + mUnk_09c.mUnk_0 = (s16) (mUnk_09c.mUnk_0 & ~0x80); + this->func_ov000_020b8200(); + return ActorNaviBase::Init(); +} diff --git a/src/14_Land/Actor/ActorRupee.cpp b/src/14_Land/Actor/ActorRupee.cpp index f7e855a8..510261ba 100644 --- a/src/14_Land/Actor/ActorRupee.cpp +++ b/src/14_Land/Actor/ActorRupee.cpp @@ -33,24 +33,24 @@ ActorRupee::ActorRupee() { } bool ActorRupee::Init() { - RupeeId rupeeId = (RupeeId) mUnk_020.mUnk_00[0]; - mRupeeId = rupeeId; - s32 iVar1 = (func_ov14_0213b70c(rupeeId) ? data_ov014_021589f4.mUnk_4 : 0xaa8) >> 1; - mHitbox.pos.x = 0; - mHitbox.pos.y = iVar1; - mHitbox.pos.z = 0; - mHitbox.size = iVar1; - mUnk_08c.pos.x = mHitbox.pos.x; - mUnk_08c.pos.y = mHitbox.pos.y; - mUnk_08c.pos.z = mHitbox.pos.z; - mUnk_08c.size = mHitbox.size; - mUnk_0a4.mUnk_04.x = 0; - mUnk_0a4.mUnk_04.y = iVar1; - mUnk_0a4.mUnk_04.z = 0; - mUnk_0a4.mUnk_10 = iVar1 + 0x1000; - mUnk_09c.mUnk_0 = mUnk_09c.mUnk_0 & ~0xb0; - mUnk_09c.mUnk_3 = 1; - mMaxFall = mUnk_08c.size + -1; + RupeeId rupeeId = (RupeeId) mUnk_020.mUnk_00[0]; + mRupeeId = rupeeId; + s32 iVar1 = (func_ov14_0213b70c(rupeeId) ? data_ov014_021589f4.mUnk_4 : 0xaa8) >> 1; + mHitbox.pos.x = 0; + mHitbox.pos.y = iVar1; + mHitbox.pos.z = 0; + mHitbox.size = iVar1; + mUnk_08c.pos.x = mHitbox.pos.x; + mUnk_08c.pos.y = mHitbox.pos.y; + mUnk_08c.pos.z = mHitbox.pos.z; + mUnk_08c.size = mHitbox.size; + mUnk_0a4.mUnk_04.pos.x = 0; + mUnk_0a4.mUnk_04.pos.y = iVar1; + mUnk_0a4.mUnk_04.pos.z = 0; + mUnk_0a4.mUnk_04.size = iVar1 + 0x1000; + mUnk_09c.mUnk_0 = mUnk_09c.mUnk_0 & ~0xb0; + mUnk_09c.mUnk_3 = 1; + mMaxFall = mUnk_08c.size + -1; if (mUnk_03c >= 0) { this->func_ov14_0213b204(1); } else { @@ -215,7 +215,7 @@ void ActorRupee::Update(bool param1) { switch (mUnk_130) { case 0: Move(); - if (mUnk_111) { + if (mTouchingFloor) { local_1c = mPos; MapManager::func_ov00_02083fb0(&local_20, gMapManager, &local_1c); if (((local_20 >> 5) & 3) == 2) { diff --git a/src/14_Land/Actor/Player/ActorBomb.cpp b/src/14_Land/Actor/Player/ActorBomb.cpp index ce804b85..e50acf5f 100644 --- a/src/14_Land/Actor/Player/ActorBomb.cpp +++ b/src/14_Land/Actor/Player/ActorBomb.cpp @@ -16,7 +16,7 @@ void ActorBomb::vfunc_18(u32 param1) {} bool ActorBomb::func_ov014_02122bb8(s32 param1) {} void ActorBomb::vfunc_54() {} void ActorBomb::vfunc_20(bool param1) {} -bool ActorBomb::SetVelocity(Vec3p *vel) {} +bool ActorBomb::Drop(Vec3p *vel) {} bool ActorBomb::func_ov014_02122e48(unk32 *param1) {} bool ActorBomb::func_ov014_02122e7c() {} bool ActorBomb::func_ov014_02122e98() {} diff --git a/src/14_Land/Actor/Player/ActorRefill.cpp b/src/14_Land/Actor/Player/ActorRefill.cpp index ea448a42..e556774b 100644 --- a/src/14_Land/Actor/Player/ActorRefill.cpp +++ b/src/14_Land/Actor/Player/ActorRefill.cpp @@ -57,18 +57,18 @@ ARM bool ActorRefill::Init() { return false; } } - mHitbox.pos.x = 0; - mHitbox.pos.y = FLOAT_TO_Q20(0.3); - mHitbox.pos.z = 0; - mHitbox.size = FLOAT_TO_Q20(0.3); - mUnk_08c.pos.x = mHitbox.pos.x; - mUnk_08c.pos.y = mHitbox.pos.y; - mUnk_08c.pos.z = mHitbox.pos.z; - mUnk_08c.size = mHitbox.size; - mUnk_0a4.mUnk_04.x = 0; - mUnk_0a4.mUnk_04.y = FLOAT_TO_Q20(0.3); - mUnk_0a4.mUnk_04.z = 0; - mUnk_0a4.mUnk_10 = FLOAT_TO_Q20(1.3); + mHitbox.pos.x = 0; + mHitbox.pos.y = FLOAT_TO_Q20(0.3); + mHitbox.pos.z = 0; + mHitbox.size = FLOAT_TO_Q20(0.3); + mUnk_08c.pos.x = mHitbox.pos.x; + mUnk_08c.pos.y = mHitbox.pos.y; + mUnk_08c.pos.z = mHitbox.pos.z; + mUnk_08c.size = mHitbox.size; + mUnk_0a4.mUnk_04.pos.x = 0; + mUnk_0a4.mUnk_04.pos.y = FLOAT_TO_Q20(0.3); + mUnk_0a4.mUnk_04.pos.z = 0; + mUnk_0a4.mUnk_04.size = FLOAT_TO_Q20(1.3); mUnk_09c.mUnk_0 &= ~0xa4; mUnk_09c.mUnk_3 = 1; mMaxFall = mUnk_08c.size + -1; @@ -94,11 +94,11 @@ ARM void ActorRefill::vfunc_14(u32 param1) { temp_r0_2 = &mPos; Vec3p_Add(temp_r0_2, &mVel, temp_r0_2); this->func_01fffd04(0); - if (mUnk_110 || mUnk_112 || mUnk_113) { + if (mTouchingWall || mUnk_112 || mUnk_113) { mVel.x = 0; mVel.z = 0; } - if (mUnk_111) { + if (mTouchingFloor) { this->func_ov014_02135364(1); } else if (this->func_ov00_020c2c0c()) { this->func_ov014_02135364(4); diff --git a/src/58_Bombchu/Player/EquipBombchu.cpp b/src/58_Bombchu/Player/EquipBombchu.cpp index 68ee77a1..54f2fd76 100644 --- a/src/58_Bombchu/Player/EquipBombchu.cpp +++ b/src/58_Bombchu/Player/EquipBombchu.cpp @@ -70,7 +70,7 @@ ARM bool EquipBombchu_Unk_02198d00::vfunc_14(u16 *param1, s32 param2) { ARM bool EquipBombchu_Unk_02198d00::vfunc_10(s32 *param1) { Actor *temp_r0 = (Actor *) param1; - if (!temp_r0->SetUnk_11b()) { + if (!temp_r0->Grab()) { return false; } bool result; diff --git a/src/59_Hammer/Actor/Navi/ActorNaviBase_59.cpp b/src/59_Hammer/Actor/Navi/ActorNaviBase_59.cpp index acaa3bd3..07b8a4a5 100644 --- a/src/59_Hammer/Actor/Navi/ActorNaviBase_59.cpp +++ b/src/59_Hammer/Actor/Navi/ActorNaviBase_59.cpp @@ -18,7 +18,7 @@ ARM bool ActorNavi::func_ov059_0219933c(u32 param1) {} ARM void ActorNavi::func_ov059_0219a0ac() {} // non-matching -ARM void ActorNavi::func_ov059_0219aa08() { +ARM void ActorNavi::func_ov059_0219aa08(bool param1) { int iVar1; s64 lVar2; u16 uVar3; @@ -28,7 +28,7 @@ ARM void ActorNavi::func_ov059_0219aa08() { Mat3p MStack_48; Vec3p VStack_24; - if (this->mUnk_3c0[0] != 0) { + if (this->mUnk_3c0 != 0) { VStack_24.x = this->mPos.x; VStack_24.y = this->mPos.y + 0x333; // FLOAT_TO_Q20(0.2)? VStack_24.z = this->mPos.z; @@ -42,17 +42,17 @@ ARM void ActorNavi::func_ov059_0219aa08() { lVar2 = 0x666 * this->mUnk_344; uVar4 = lVar2; - this->mUnk_334.x = + this->mUnk_334.mUnk_00.x = ROUND_Q20(uVar4) | ((this->mUnk_344 >> 0x1F) * 0x666 + (lVar2 >> 0x20) + (~0x800 < uVar4)) * 0x100000; - Mat3p_MultiplyVec(&this->mUnk_334, &this->mUnk_384, &this->mUnk_334); - Vec3p_RotateY(uVar3, &this->mUnk_334); - Vec3p_Add(&this->mUnk_334, &VStack_24, &this->mUnk_334); - VStack_60.z = this->mUnk_334.z; - VStack_60.x = this->mUnk_334.x; + Mat3p_MultiplyVec(&this->mUnk_334.mUnk_00, &this->mUnk_384, &this->mUnk_334.mUnk_00); + Vec3p_RotateY(uVar3, &this->mUnk_334.mUnk_00); + Vec3p_Add(&this->mUnk_334.mUnk_00, &VStack_24, &this->mUnk_334.mUnk_00); + VStack_60.z = this->mUnk_334.mUnk_00.z; + VStack_60.x = this->mUnk_334.mUnk_00.x; lVar2 = 0x333 * this->mUnk_344; uVar4 = lVar2; - VStack_60.y = this->mUnk_334.y + 0x800; + VStack_60.y = this->mUnk_334.mUnk_00.y + 0x800; uVar4 = ROUND_Q20(uVar4) | ((this->mUnk_344 >> 0x1F) * 0x333 + (lVar2 >> 0x20) + (~0x800 < uVar4)) * 0x100000; func_ov005_02102c2c(&data_ov000_020e9370[0], 0, &VStack_60, uVar4, uVar4, 0, 0x10, 0, 0, 0); } @@ -160,7 +160,7 @@ ARM void ActorNavi::func_ov059_0219aba8(u32 param1) { ARM bool ActorNavi::func_ov059_0219af14() { int iVar1; - if (this->mUnk_3c0[2] != 0) { + if (this->mUnk_3c2 != 0) { return false; } @@ -193,7 +193,7 @@ ARM bool ActorNavi::func_ov059_0219af14() { } ARM bool ActorNavi::func_ov059_0219afc4() { - this->mUnk_3c0[2] = 0; + this->mUnk_3c2 = 0; this->func_ov059_0219933c(0); switch (this->mUnk_130) { @@ -220,8 +220,8 @@ ARM void ActorNavi::func_ov059_0219b020() { gPlayerControl->mAimWorld = this->mOffsetPos; - this->mHammer = GetEquipHammer(); - this->mUnk_3c0[0] = 0x0; - this->mUnk_3c0[2] = 0x0; + this->mHammer = GetEquipHammer(); + this->mUnk_3c0 = 0x0; + this->mUnk_3c2 = 0x0; this->SetActive(3); } diff --git a/src/59_Hammer/Player/EquipHammer.cpp b/src/59_Hammer/Player/EquipHammer.cpp index 3928cb6e..900e43c3 100644 --- a/src/59_Hammer/Player/EquipHammer.cpp +++ b/src/59_Hammer/Player/EquipHammer.cpp @@ -25,7 +25,7 @@ ARM bool EquipHammer::IsUsable(unk32 param1) const { pAVar3 = (ActorNavi *) gItemManager->GetFairy(FairyId_Courage); - if (pAVar3 == NULL || pAVar3->mUnk_3b8 != 0) { + if (pAVar3 == NULL || pAVar3->mUnk_3b8.mUnk_00 != 0) { return false; } @@ -187,7 +187,7 @@ ARM void LinkStateItem::func_ov059_021990a4() { if (CHECK_0219b160(data_ov059_0219b180.mUnk_00)) { this->mUnk_38 = gPlayerControl->mAimWorld; - if (pAVar5->mUnk_3c0[0] != 0 && gPlayerControl->UpdateAimWorld(&this->mUnk_38) && pEVar4->GetState() <= 0) { + if (pAVar5->mUnk_3c0 != 0 && gPlayerControl->UpdateAimWorld(&this->mUnk_38) && pEVar4->GetState() <= 0) { pEVar4->func_ov059_02198e90(); if (this->mUnk_25[2] != 0 && this->mUnk_25[3] != 0) { diff --git a/src/Main/System/OverlayManager.cpp b/src/Main/System/OverlayManager.cpp index 3f78516e..a1960e42 100644 --- a/src/Main/System/OverlayManager.cpp +++ b/src/Main/System/OverlayManager.cpp @@ -2,7 +2,7 @@ #include "Game/Game.hpp" #include "Unknown/UnkStruct_020ee698.hpp" #include "global.h" -#include "nds/overlay.h" +#include extern u32 *data_027e0ce0[]; extern "C" void func_ov007_02102850(u32 **); diff --git a/src/Main/Unknown/UnkStruct_02037750.cpp b/src/Main/Unknown/UnkStruct_02037750.cpp index 01ae540e..b5bd2a1a 100644 --- a/src/Main/Unknown/UnkStruct_02037750.cpp +++ b/src/Main/Unknown/UnkStruct_02037750.cpp @@ -2,6 +2,7 @@ #include "Actor/ActorManager.hpp" #include "Item/ItemManager.hpp" #include "Message/MessageManager.hpp" +#include "Player/LinkStateBase.hpp" #include "Save/AdventureFlags.hpp" #include "System/Random.hpp" diff --git a/src/Main/Unknown/UnkStruct_020397f8.cpp b/src/Main/Unknown/UnkStruct_020397f8.cpp index ac295c65..7d593d84 100644 --- a/src/Main/Unknown/UnkStruct_020397f8.cpp +++ b/src/Main/Unknown/UnkStruct_020397f8.cpp @@ -1,6 +1,7 @@ #include "Unknown/UnkStruct_020397f8.hpp" #include "DTCM/UnkStruct_027e0c38.hpp" #include "DTCM/UnkStruct_027e0c54.hpp" +#include "DTCM/UnkStruct_027e0d38.hpp" #include "DTCM/UnkStruct_027e103c.hpp" #include "Game/Game.hpp" #include "Message/MessageManager.hpp"