From 5b15874c4d2d7c185c98f2791cf8fa6a9d86a440 Mon Sep 17 00:00:00 2001 From: SammygoodTunes <56520787+SammygoodTunes@users.noreply.github.com> Date: Sun, 21 Sep 2025 14:21:31 +0200 Subject: [PATCH] Decomp `src/00_Core/Map/MapBase.cpp` (57%) (#129) * Comments * Lay out theoretical code * Externalise func_020196bc & func_020196fc * Pull merge * Pull merge * Decomp MapBase::func_ov00_02080edc * Fix MapManager TilePos params * Decomp progress * Fix MapManager param issue * Decomp progress * Update MapManager var pointer type * Fix function defs * Update symbols * Update * Match MapBase_Unk2::func_ov00_02080ad0 (thx 2 dt mow & yanis) * Update * Decomp progress 26% * Decomp progress 28% * Fix struct overlap * Fix unknown members * Uncomment and fix rest of methods (most still non-matching) * Decomp progress * Corrections --- config/eur/arm9/overlays/ov000/symbols.txt | 88 +- config/usa/arm9/overlays/ov000/symbols.txt | 88 +- include/DTCM/UnkStruct_027e0e58.hpp | 3 + include/DTCM/UnkStruct_027e0f68.hpp | 15 + include/DTCM/UnkStruct_027e0f78.hpp | 2 + include/Map/CameraViewpoint.hpp | 12 +- include/Map/Exit.hpp | 9 +- include/Map/MapBase.hpp | 148 +- include/Map/MapManager.hpp | 20 +- include/Map/TriggerBase.hpp | 11 +- include/Map/TriggerSphere.hpp | 1 + include/Unknown/UnkStruct_020ee0a0.hpp | 4 + include/Unknown/UnkStruct_027e0f88.hpp | 1 + libs/cpp/include/vector | 2 +- src/00_Core/Map/MapBase.cpp | 2353 +++++++++++++++++++- src/00_Core/Map/MapManager.cpp | 38 +- 16 files changed, 2505 insertions(+), 290 deletions(-) create mode 100644 include/DTCM/UnkStruct_027e0f68.hpp diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index dc608c31..18f31359 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -134,7 +134,7 @@ _ZN12GameModePlay8vfunc_20Ev kind:function(thumb,size=0x2) addr:0x02079dd8 func_ov000_02079ddc kind:function(thumb,size=0x14) addr:0x02079ddc func_ov000_02079df0 kind:function(thumb,size=0x14) addr:0x02079df0 func_ov000_02079e04 kind:function(arm,size=0x38) addr:0x02079e04 -func_ov000_02079e3c kind:function(arm,size=0x2c) addr:0x02079e3c +_Z19func_ov000_02079e3cv kind:function(arm,size=0x2c) addr:0x02079e3c _ZN18UnkStruct_020e936019func_ov000_02079e68Ei kind:function(arm,size=0x4c) addr:0x02079e68 func_ov000_02079eb4 kind:function(arm,size=0x24) addr:0x02079eb4 func_ov000_02079ed8 kind:function(thumb,size=0x22) addr:0x02079ed8 @@ -321,9 +321,9 @@ _ZN7MapBaseD1Ev kind:function(arm,size=0xe0) addr:0x0207da38 _ZN15MapBase_Unk_180D1Ev kind:function(arm,size=0x4) addr:0x0207db18 _ZN7MapBaseD0Ev kind:function(arm,size=0xe8) addr:0x0207db1c _ZN7MapBaseD2Ev kind:function(arm,size=0xe0) addr:0x0207dc04 -_ZN7MapBase9SetBoundsEii kind:function(arm,size=0xb8) addr:0x0207dce4 +_ZN7MapBase9SetBoundsEiP6Course kind:function(arm,size=0xb8) addr:0x0207dce4 _ZN15MapManager_Unk2D1Ev kind:function(arm,size=0x4) addr:0x0207dd9c -_ZN7MapBase14GetMapFilePathEPcii kind:function(arm,size=0x54) addr:0x0207dda0 +_ZN7MapBase14GetMapFilePathEPciS0_ kind:function(arm,size=0x54) addr:0x0207dda0 _ZN7MapBase8vfunc_18Ev kind:function(arm,size=0x4) addr:0x0207ddf4 _ZN7MapBase18func_ov00_0207ddf8Eb kind:function(arm,size=0x70) addr:0x0207ddf8 _ZN7MapBase18func_ov00_0207de68Ei kind:function(arm,size=0x20) addr:0x0207de68 @@ -345,7 +345,7 @@ _ZN7MapBase8vfunc_68EP5Vec3pb kind:function(arm,size=0x488) addr:0x0207e4b8 _ZN7MapBase18func_ov00_0207e940EPc kind:function(arm,size=0x28) addr:0x0207e940 _ZN7MapBase18func_ov00_0207e968Ev kind:function(arm,size=0x4) addr:0x0207e968 _ZN7MapBase18func_ov00_0207e96cEv kind:function(arm,size=0x4) addr:0x0207e96c -_ZN7MapBase8vfunc_6cEiii kind:function(arm,size=0x4a4) addr:0x0207e970 +_ZN7MapBase8vfunc_6cEP5Vec3pPiS1_ kind:function(arm,size=0x4a4) addr:0x0207e970 _ZN7MapBase8vfunc_70EP5Vec3p kind:function(arm,size=0x1e0) addr:0x0207ee14 _ZN7MapBase8vfunc_74EP5Vec3p kind:function(arm,size=0x10c) addr:0x0207eff4 _ZN7MapBase18func_ov00_0207f100Ev kind:function(arm,size=0x4) addr:0x0207f100 @@ -360,9 +360,9 @@ _ZN7MapBase8vfunc_a8Ev kind:function(arm,size=0x4) addr:0x0207f344 _ZN7MapBase8vfunc_acEv kind:function(arm,size=0x4) addr:0x0207f348 _ZN7MapBase8vfunc_78EP7TilePos kind:function(arm,size=0x8) addr:0x0207f34c _ZN7MapBase8vfunc_7cEiPiiPs kind:function(arm,size=0x8) addr:0x0207f354 -_ZN7MapBase8vfunc_80Ev kind:function(arm,size=0x8) addr:0x0207f35c -_ZN7MapBase8vfunc_84Ei kind:function(arm,size=0x28) addr:0x0207f364 -_ZN7MapBase18func_ov00_0207f38cEPi kind:function(arm,size=0x38) addr:0x0207f38c +_ZN7MapBase8vfunc_80EP7TilePos kind:function(arm,size=0x8) addr:0x0207f35c +_ZN7MapBase8vfunc_84EP18UnkStruct_0207f38c kind:function(arm,size=0x28) addr:0x0207f364 +_ZN7MapBase18func_ov00_0207f38cEP18UnkStruct_0207f38c kind:function(arm,size=0x38) addr:0x0207f38c _ZN7MapBase8vfunc_90EP7TilePosi kind:function(arm,size=0xdc) addr:0x0207f3c4 _ZN7MapBase8vfunc_94Ev kind:function(arm,size=0x4) addr:0x0207f4a0 _ZN7MapBase18func_ov00_0207f4a4EP5Vec2si kind:function(arm,size=0x98) addr:0x0207f4a4 @@ -383,7 +383,7 @@ _ZN7MapBase11AddEntranceEP8Entrance kind:function(arm,size=0x7c) addr:0x0207f844 _ZN7MapBase12FindEntranceEi kind:function(arm,size=0x64) addr:0x0207f8c0 _ZN7MapBase18func_ov00_0207f924Ei kind:function(arm,size=0x10) addr:0x0207f924 _ZN7MapBase18func_ov00_0207f934Ev kind:function(arm,size=0x14) addr:0x0207f934 -_ZN7MapBase18func_ov00_0207f948Ei kind:function(arm,size=0x10) addr:0x0207f948 +_ZN7MapBase18func_ov00_0207f948EPi kind:function(arm,size=0x10) addr:0x0207f948 _ZN7MapBase10AddTriggerEP13TriggerParams kind:function(arm,size=0x150) addr:0x0207f958 _ZN11TriggerBase8vfunc_08Ev kind:function(arm,size=0x4) addr:0x0207faa8 _ZN7MapBase21GetTriggerBoundingBoxEiP4AABB kind:function(arm,size=0xb0) addr:0x0207faac @@ -395,33 +395,33 @@ _ZN7MapBase11FindTriggerEi kind:function(arm,size=0x48) addr:0x0207fc98 _ZN7MapBase22GetOverlappingTriggersEP5Vec3pPP11TriggerBasei kind:function(arm,size=0x78) addr:0x0207fce0 _ZN7MapBase23IsTriggerTypeOverlappedEiP5Vec3p kind:function(arm,size=0x78) addr:0x0207fd58 _ZN7MapBase18AnyTrigger_func_0cEi kind:function(arm,size=0x64) addr:0x0207fdd0 -_ZN11TriggerBase8vfunc_0cEv kind:function(arm,size=0x8) addr:0x0207fe34 +_ZN11TriggerBase8vfunc_0cEb kind:function(arm,size=0x8) addr:0x0207fe34 _ZN7MapBase16Trigger_vfunc_08Ev kind:function(arm,size=0x44) addr:0x0207fe3c -_ZN7MapBase10AddTriggerEi kind:function(arm,size=0x108) addr:0x0207fe80 -_ZN7MapBase18func_ov00_0207ff88Ei kind:function(arm,size=0xd4) addr:0x0207ff88 +_ZN7MapBase10AddTriggerEP11TriggerBase kind:function(arm,size=0x108) addr:0x0207fe80 +_ZN7MapBase18func_ov00_0207ff88EP11TriggerBase kind:function(arm,size=0xd4) addr:0x0207ff88 _ZN7MapBase18func_ov00_0208005cEiii kind:function(arm,size=0x10) addr:0x0208005c _ZN7MapBase18func_ov00_0208006cEii kind:function(arm,size=0x10) addr:0x0208006c _ZN7MapBase18func_ov00_0208007cEii kind:function(arm,size=0x10) addr:0x0208007c _ZN7MapBase18func_ov00_0208008cEj kind:function(arm,size=0x10) addr:0x0208008c _ZN7MapBase7AddExitEP4Exit kind:function(arm,size=0xa4) addr:0x0208009c _ZN7MapBase18func_ov00_02080140EP4Exit kind:function(arm,size=0x1e4) addr:0x02080140 -_ZN12MapBase_Unk118func_ov00_02080324Eiii kind:function(arm,size=0x78) addr:0x02080324 +_ZN12MapBase_Unk118func_ov00_02080324EP23UnkStruct_027e0d38_UnkCS1_S1_ kind:function(arm,size=0x78) addr:0x02080324 _ZN7MapBase8FindExitEjP4Exit kind:function(arm,size=0xd0) addr:0x0208039c _ZN7MapBase18AddCameraViewpointEP15CameraViewpoint kind:function(arm,size=0xa4) addr:0x0208046c _ZN7MapBase19FindViewpoint_Unk_4EcP15CameraViewpoint kind:function(arm,size=0xc0) addr:0x02080510 _ZN7MapBase19FindViewpoint_Unk_0EiP15CameraViewpoint kind:function(arm,size=0xb8) addr:0x020805d0 _ZN7MapBase19GetCurrentViewpointEP15CameraViewpointi kind:function(arm,size=0xf8) addr:0x02080688 _ZN7MapBase26GetCurrentViewpoint_Unk_00Ei kind:function(arm,size=0x54) addr:0x02080780 -_ZN7MapBase8vfunc_b8Ev kind:function(arm,size=0x50) addr:0x020807d4 +_ZN7MapBase8vfunc_b8Ei kind:function(arm,size=0x50) addr:0x020807d4 _ZN7MapBase18func_ov00_02080824EjPc kind:function(arm,size=0xac) addr:0x02080824 -_ZN7MapBase10AddUnk_130Ei kind:function(arm,size=0xe8) addr:0x020808d0 -_ZN7MapBase18func_ov00_020809b8Ei kind:function(arm,size=0xc0) addr:0x020809b8 +_ZN7MapBase10AddUnk_130EP11TriggerBase kind:function(arm,size=0xe8) addr:0x020808d0 +_ZN7MapBase18func_ov00_020809b8EP11TriggerBase kind:function(arm,size=0xc0) addr:0x020809b8 _ZN7MapBase18func_ov00_02080a78EP5Vec3p kind:function(arm,size=0x58) addr:0x02080a78 -_ZN12MapBase_Unk218func_ov00_02080ad0EPP11TriggerBaseS2_ kind:function(arm,size=0x54) addr:0x02080ad0 +_ZN12MapBase_Unk218func_ov00_02080ad0EPP11TriggerBaseS2_S2_ kind:function(arm,size=0x54) addr:0x02080ad0 _ZN7MapBase18func_ov00_02080b24EP7TilePos kind:function(arm,size=0x1e4) addr:0x02080b24 _ZN7MapBase18func_ov00_02080d08EP7TilePos kind:function(arm,size=0x6c) addr:0x02080d08 _ZN7MapBase8vfunc_bcEv kind:function(arm,size=0x4) addr:0x02080d74 -_ZN7MapBase8vfunc_98Eiii kind:function(arm,size=0x4) addr:0x02080d78 +_ZN7MapBase8vfunc_98EP7TilePosii kind:function(arm,size=0x4) addr:0x02080d78 _ZN7MapBase8vfunc_c0Ev kind:function(arm,size=0x4) addr:0x02080d7c _ZN7MapBase22TriggerOfType_vfunc_10Ei kind:function(arm,size=0x5c) addr:0x02080d80 _ZN11TriggerBase8vfunc_10Ev kind:function(arm,size=0x8) addr:0x02080ddc @@ -515,15 +515,15 @@ _ZN10MapManager16MapData_vfunc_b0Eii kind:function(arm,size=0x18) addr:0x0208263 _ZN10MapManager18func_ov00_02082650Eiii kind:function(arm,size=0x10) addr:0x02082650 _ZN10MapManager18func_ov00_02082660Eii kind:function(arm,size=0x10) addr:0x02082660 _ZN10MapManager18func_ov00_02082670Eii kind:function(arm,size=0x10) addr:0x02082670 -_ZN10MapManager18func_ov00_02082680Eii kind:function(arm,size=0x20) addr:0x02082680 -_ZN10MapManager18func_ov00_020826a0Eii kind:function(arm,size=0x20) addr:0x020826a0 +_ZN10MapManager18func_ov00_02082680EP7TilePosi kind:function(arm,size=0x20) addr:0x02082680 +_ZN10MapManager18func_ov00_020826a0EP7TilePosi kind:function(arm,size=0x20) addr:0x020826a0 _ZN10MapManager9CreateMapEiii kind:function(arm,size=0x100) addr:0x020826c0 _ZN10MapManager10DestroyMapEv kind:function(arm,size=0x30) addr:0x020827c0 _ZN10MapManager16MapData_vfunc_44Ev kind:function(arm,size=0x18) addr:0x020827f0 _ZN10MapManager18func_ov00_02082808Eb kind:function(arm,size=0xb8) addr:0x02082808 _ZN10MapManager16MapData_vfunc_7cEiPiiPs kind:function(arm,size=0x20) addr:0x020828c0 -_ZN10MapManager16MapData_vfunc_84Ei kind:function(arm,size=0x18) addr:0x020828e0 -_ZN10MapManager18func_ov00_020828f8EPi kind:function(arm,size=0x10) addr:0x020828f8 +_ZN10MapManager16MapData_vfunc_84EP18UnkStruct_0207f38c kind:function(arm,size=0x18) addr:0x020828e0 +_ZN10MapManager18func_ov00_020828f8EP18UnkStruct_0207f38c kind:function(arm,size=0x10) addr:0x020828f8 _ZN10MapManager10GetNumMapsEv kind:function(arm,size=0xc) addr:0x02082908 _ZN10MapManager18func_ov00_02082914Ei kind:function(arm,size=0x1b8) addr:0x02082914 _ZN10MapManager18func_ov00_02082accEv kind:function(arm,size=0x10) addr:0x02082acc @@ -585,8 +585,8 @@ _ZN10MapManager23IsTriggerTypeOverlappedEjP5Vec3p kind:function(arm,size=0x10) a _ZN10MapManager21GetOverlappingTriggerEP5Vec3p kind:function(arm,size=0x10) addr:0x02083780 _ZN10MapManager18func_ov00_02083790Ei kind:function(arm,size=0xb0) addr:0x02083790 _ZN10MapManager18func_ov00_02083840Ei kind:function(arm,size=0x88) addr:0x02083840 -_ZN10MapManager10AddTriggerEi kind:function(arm,size=0x10) addr:0x020838c8 -_ZN10MapManager18func_ov00_020838d8Ei kind:function(arm,size=0x10) addr:0x020838d8 +_ZN10MapManager10AddTriggerEP11TriggerBase kind:function(arm,size=0x10) addr:0x020838c8 +_ZN10MapManager18func_ov00_020838d8EP11TriggerBase kind:function(arm,size=0x10) addr:0x020838d8 _ZN10MapManager8FindExitEjP4Exit kind:function(arm,size=0x10) addr:0x020838e8 _ZN10MapManager18func_ov00_020838f8EP4Exit kind:function(arm,size=0x10) addr:0x020838f8 _ZN10MapManager18func_ov00_02083908EcP15CameraViewpoint kind:function(arm,size=0x10) addr:0x02083908 @@ -597,8 +597,8 @@ _ZN10MapManager21SetCurrentViewpointIdEci kind:function(arm,size=0x10) addr:0x02 _ZN10MapManager18func_ov00_02083958Ei kind:function(arm,size=0x10) addr:0x02083958 _ZN10MapManager18func_ov00_02083968EjPc kind:function(arm,size=0x10) addr:0x02083968 _ZN10MapManager18func_ov00_02083978EP5Vec3pS1_ kind:function(arm,size=0x3c) addr:0x02083978 -_ZN10MapManager18func_ov00_020839b4Ei kind:function(arm,size=0x10) addr:0x020839b4 -_ZN10MapManager18func_ov00_020839c4Ei kind:function(arm,size=0x10) addr:0x020839c4 +_ZN10MapManager18func_ov00_020839b4EP11TriggerBase kind:function(arm,size=0x10) addr:0x020839b4 +_ZN10MapManager18func_ov00_020839c4EP11TriggerBase kind:function(arm,size=0x10) addr:0x020839c4 _ZN10MapManager18func_ov00_020839d4Ei kind:function(arm,size=0x24) addr:0x020839d4 _ZN10MapManager18func_ov00_020839f8Ei kind:function(arm,size=0x24) addr:0x020839f8 _ZN10MapManager18func_ov00_02083a1cEP5Vec3p kind:function(arm,size=0x38) addr:0x02083a1c @@ -629,7 +629,7 @@ _ZN10MapManager18func_ov00_02084100EPiPS_ kind:function(arm,size=0x14) addr:0x02 _ZN10MapManager17GetMapData_Unk_48Ev kind:function(arm,size=0xc) addr:0x02084114 _ZN10MapManager17GetMapData_Unk_4cEv kind:function(arm,size=0xc) addr:0x02084120 _ZN10MapManager18func_ov00_0208412cEv kind:function(arm,size=0x10) addr:0x0208412c -_ZN10MapManager18func_ov00_0208413cEi kind:function(arm,size=0x10) addr:0x0208413c +_ZN10MapManager18func_ov00_0208413cEPi kind:function(arm,size=0x10) addr:0x0208413c _ZN10MapManager16MapData_vfunc_58EP7TilePosi kind:function(arm,size=0x18) addr:0x0208414c _ZN10MapManager18func_ov00_02084164EP7TilePos kind:function(arm,size=0x1a8) addr:0x02084164 _ZN10MapManager17GetMapData_Unk_0aEv kind:function(arm,size=0xc) addr:0x0208430c @@ -711,7 +711,7 @@ func_ov000_02087b78 kind:function(arm,size=0x1bc) addr:0x02087b78 func_ov000_02087d34 kind:function(arm,size=0x50) addr:0x02087d34 func_ov000_02087d84 kind:function(arm,size=0x14) addr:0x02087d84 func_ov000_02087d98 kind:function(arm,size=0x40) addr:0x02087d98 -func_ov000_02087dd8 kind:function(arm,size=0x20) addr:0x02087dd8 +_Z19func_ov000_02087dd8Pv kind:function(arm,size=0x20) addr:0x02087dd8 func_ov000_02087df8 kind:function(arm,size=0x1c) addr:0x02087df8 func_ov000_02087e14 kind:function(arm,size=0x78) addr:0x02087e14 func_ov000_02087e8c kind:function(arm,size=0x64) addr:0x02087e8c @@ -881,7 +881,7 @@ func_ov000_0208d5e0 kind:function(arm,size=0x40) addr:0x0208d5e0 _ZN18UnkStruct_027e0f6819func_ov000_0208d620Ev kind:function(arm,size=0x60) addr:0x0208d620 _ZN18UnkStruct_027e0f6819func_ov000_0208d680Ev kind:function(arm,size=0x60) addr:0x0208d680 func_ov000_0208d6e0 kind:function(arm,size=0x140) addr:0x0208d6e0 -func_ov000_0208d820 kind:function(arm,size=0x110) addr:0x0208d820 +_ZN18UnkStruct_027e0f6819func_ov000_0208d820EPv kind:function(arm,size=0x110) addr:0x0208d820 func_ov000_0208d930 kind:function(arm,size=0xb0) addr:0x0208d930 func_ov000_0208d9e0 kind:function(arm,size=0x64) addr:0x0208d9e0 func_ov000_0208da44 kind:function(arm,size=0x98) addr:0x0208da44 @@ -1412,35 +1412,35 @@ func_ov000_0209bf80 kind:function(arm,size=0x44) addr:0x0209bf80 func_ov000_0209bfc4 kind:function(arm,size=0x1c) addr:0x0209bfc4 func_ov000_0209bfe0 kind:function(arm,size=0x7c) addr:0x0209bfe0 func_ov000_0209c05c kind:function(arm,size=0x30) addr:0x0209c05c -func_ov000_0209c08c kind:function(arm,size=0x1c) addr:0x0209c08c +_ZN15MapBase_Unk_14419func_ov000_0209c08cEii kind:function(arm,size=0x1c) addr:0x0209c08c func_ov000_0209c0a8 kind:function(arm,size=0x13c) addr:0x0209c0a8 -func_ov000_0209c1e4 kind:function(arm,size=0xd0) addr:0x0209c1e4 -func_ov000_0209c2b4 kind:function(arm,size=0x1c) addr:0x0209c2b4 -func_ov000_0209c2d0 kind:function(arm,size=0x1a4) addr:0x0209c2d0 +_ZN15MapBase_Unk_14419func_ov000_0209c1e4Eiii kind:function(arm,size=0xd0) addr:0x0209c1e4 +_ZN15MapBase_Unk_14419func_ov000_0209c2b4Eii kind:function(arm,size=0x1c) addr:0x0209c2b4 +_ZN15MapBase_Unk_14419func_ov000_0209c2d0Eii kind:function(arm,size=0x1a4) addr:0x0209c2d0 func_ov000_0209c474 kind:function(arm,size=0xbc) addr:0x0209c474 -func_ov000_0209c530 kind:function(arm,size=0x8) addr:0x0209c530 +_ZN15Mapbase_Unk_14419func_ov000_0209c530Ev kind:function(arm,size=0x8) addr:0x0209c530 func_ov000_0209c538 kind:function(arm,size=0xe4) addr:0x0209c538 -func_ov000_0209c61c kind:function(arm,size=0x2c) addr:0x0209c61c +_ZN15MapBase_Unk_14419func_ov000_0209c61cEv kind:function(arm,size=0x2c) addr:0x0209c61c func_ov000_0209c648 kind:function(arm,size=0x140) addr:0x0209c648 -func_ov000_0209c788 kind:function(arm,size=0x15c) addr:0x0209c788 -func_ov000_0209c8e4 kind:function(arm,size=0x10) addr:0x0209c8e4 +_ZN15Mapbase_Unk_14419func_ov000_0209c788Ev kind:function(arm,size=0x15c) addr:0x0209c788 +_ZN15MapBase_Unk_14419func_ov000_0209c8e4Ei kind:function(arm,size=0x10) addr:0x0209c8e4 func_ov000_0209c8f4 kind:function(arm,size=0x64) addr:0x0209c8f4 func_ov000_0209c958 kind:function(arm,size=0x100) addr:0x0209c958 func_ov000_0209ca58 kind:function(arm,size=0x28) addr:0x0209ca58 func_ov000_0209ca80 kind:function(arm,size=0x154) addr:0x0209ca80 func_ov000_0209cbd4 kind:function(arm,size=0x5c) addr:0x0209cbd4 func_ov000_0209cc30 kind:function(arm,size=0xc) addr:0x0209cc30 -func_ov000_0209cc3c kind:function(arm,size=0xc) addr:0x0209cc3c -func_ov000_0209cc48 kind:function(arm,size=0xa0) addr:0x0209cc48 +_ZN18UnkStruct_027e0f7819func_ov000_0209cc3cEis kind:function(arm,size=0xc) addr:0x0209cc3c +_ZN18UnkStruct_027e0f7819func_ov000_0209cc48Ev kind:function(arm,size=0xa0) addr:0x0209cc48 func_ov000_0209cce8 kind:function(arm,size=0x4) addr:0x0209cce8 func_ov000_0209ccec kind:function(arm,size=0x28) addr:0x0209ccec func_ov000_0209cd14 kind:function(arm,size=0x2c) addr:0x0209cd14 func_ov000_0209cd40 kind:function(arm,size=0x40) addr:0x0209cd40 -func_ov000_0209cd80 kind:function(arm,size=0x1c) addr:0x0209cd80 -func_ov000_0209cd9c kind:function(arm,size=0x20) addr:0x0209cd9c +_ZN18UnkStruct_020ee0a019func_ov000_0209cd80Es kind:function(arm,size=0x1c) addr:0x0209cd80 +_ZN18UnkStruct_020ee0a019func_ov000_0209cd9cEsi kind:function(arm,size=0x20) addr:0x0209cd9c func_ov000_0209cdbc kind:function(arm,size=0x20) addr:0x0209cdbc -func_ov000_0209cddc kind:function(arm,size=0x1c) addr:0x0209cddc -func_ov000_0209cdf8 kind:function(arm,size=0x1c) addr:0x0209cdf8 +_ZN18UnkStruct_020ee0a019func_ov000_0209cddcEi kind:function(arm,size=0x1c) addr:0x0209cddc +_ZN18UnkStruct_020ee0a019func_ov000_0209cdf8Ei kind:function(arm,size=0x1c) addr:0x0209cdf8 func_ov000_0209ce14 kind:function(arm,size=0x64) addr:0x0209ce14 func_ov000_0209ce78 kind:function(arm,size=0xec) addr:0x0209ce78 func_ov000_0209cf64 kind:function(arm,size=0x140) addr:0x0209cf64 @@ -1642,7 +1642,7 @@ func_ov000_020a1988 kind:function(arm,size=0x28) addr:0x020a1988 func_ov000_020a19b0 kind:function(arm,size=0x18) addr:0x020a19b0 func_ov000_020a19c8 kind:function(arm,size=0x34) addr:0x020a19c8 func_ov000_020a19fc kind:function(arm,size=0x10) addr:0x020a19fc -func_ov000_020a1a0c kind:function(arm,size=0x18) addr:0x020a1a0c +_ZN18UnkStruct_027e0f8819func_ov000_020a1a0cEis kind:function(arm,size=0x18) addr:0x020a1a0c func_ov000_020a1a24 kind:function(arm,size=0x18) addr:0x020a1a24 _ZN18UnkStruct_027e0f8819func_ov000_020a1a3cEv kind:function(arm,size=0x80) addr:0x020a1a3c func_ov000_020a1abc kind:function(arm,size=0x68) addr:0x020a1abc @@ -1713,7 +1713,7 @@ func_ov000_020a3d58 kind:function(arm,size=0x48) addr:0x020a3d58 func_ov000_020a3da0 kind:function(arm,size=0x28) addr:0x020a3da0 func_ov000_020a3dc8 kind:function(arm,size=0x8) addr:0x020a3dc8 func_ov000_020a3dd0 kind:function(arm,size=0x10) addr:0x020a3dd0 -func_ov000_020a3de0 kind:function(arm,size=0x34) addr:0x020a3de0 +_Z19func_ov000_020a3de0bi kind:function(arm,size=0x34) addr:0x020a3de0 func_ov000_020a3e14 kind:function(arm,size=0x8c) addr:0x020a3e14 func_ov000_020a3ea0 kind:function(arm,size=0x50) addr:0x020a3ea0 func_ov000_020a3ef0 kind:function(arm,size=0x64) addr:0x020a3ef0 diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index a75980b2..7e719f53 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -134,7 +134,7 @@ _ZN12GameModePlay8vfunc_20Ev kind:function(thumb,size=0x2) addr:0x02079d78 func_ov000_02079ddc kind:function(thumb,size=0x14) addr:0x02079d7c func_ov000_02079df0 kind:function(thumb,size=0x14) addr:0x02079d90 func_ov000_02079e04 kind:function(arm,size=0x38) addr:0x02079da4 -func_ov000_02079e3c kind:function(arm,size=0x2c) addr:0x02079ddc +_Z19func_ov000_02079e3cv kind:function(arm,size=0x2c) addr:0x02079ddc _ZN18UnkStruct_020e936019func_ov000_02079e68Ei kind:function(arm,size=0x4c) addr:0x02079e08 func_ov000_02079eb4 kind:function(arm,size=0x24) addr:0x02079e54 func_ov000_02079ed8 kind:function(thumb,size=0x22) addr:0x02079e78 @@ -321,9 +321,9 @@ _ZN7MapBaseD1Ev kind:function(arm,size=0xe0) addr:0x0207d9d8 _ZN15MapBase_Unk_180D1Ev kind:function(arm,size=0x4) addr:0x0207dab8 _ZN7MapBaseD0Ev kind:function(arm,size=0xe8) addr:0x0207dabc _ZN7MapBaseD2Ev kind:function(arm,size=0xe0) addr:0x0207dba4 -_ZN7MapBase9SetBoundsEii kind:function(arm,size=0xb8) addr:0x0207dc84 +_ZN7MapBase9SetBoundsEiP6Course kind:function(arm,size=0xb8) addr:0x0207dc84 _ZN15MapManager_Unk2D1Ev kind:function(arm,size=0x4) addr:0x0207dd3c -_ZN7MapBase14GetMapFilePathEPcii kind:function(arm,size=0x54) addr:0x0207dd40 +_ZN7MapBase14GetMapFilePathEPciS0_ kind:function(arm,size=0x54) addr:0x0207dd40 _ZN7MapBase8vfunc_18Ev kind:function(arm,size=0x4) addr:0x0207dd94 _ZN7MapBase18func_ov00_0207ddf8Eb kind:function(arm,size=0x70) addr:0x0207dd98 _ZN7MapBase18func_ov00_0207de68Ei kind:function(arm,size=0x20) addr:0x0207de08 @@ -345,7 +345,7 @@ _ZN7MapBase8vfunc_68EP5Vec3pb kind:function(arm,size=0x488) addr:0x0207e458 _ZN7MapBase18func_ov00_0207e940EPc kind:function(arm,size=0x28) addr:0x0207e8e0 _ZN7MapBase18func_ov00_0207e968Ev kind:function(arm,size=0x4) addr:0x0207e908 _ZN7MapBase18func_ov00_0207e96cEv kind:function(arm,size=0x4) addr:0x0207e90c -_ZN7MapBase8vfunc_6cEiii kind:function(arm,size=0x4a4) addr:0x0207e910 +_ZN7MapBase8vfunc_6cEP5Vec3pPiS1_ kind:function(arm,size=0x4a4) addr:0x0207e910 _ZN7MapBase8vfunc_70EP5Vec3p kind:function(arm,size=0x1e0) addr:0x0207edb4 _ZN7MapBase8vfunc_74EP5Vec3p kind:function(arm,size=0x10c) addr:0x0207ef94 _ZN7MapBase18func_ov00_0207f100Ev kind:function(arm,size=0x4) addr:0x0207f0a0 @@ -360,9 +360,9 @@ _ZN7MapBase8vfunc_a8Ev kind:function(arm,size=0x4) addr:0x0207f2e4 _ZN7MapBase8vfunc_acEv kind:function(arm,size=0x4) addr:0x0207f2e8 _ZN7MapBase8vfunc_78EP7TilePos kind:function(arm,size=0x8) addr:0x0207f2ec _ZN7MapBase8vfunc_7cEiPiiPs kind:function(arm,size=0x8) addr:0x0207f2f4 -_ZN7MapBase8vfunc_80Ev kind:function(arm,size=0x8) addr:0x0207f2fc -_ZN7MapBase8vfunc_84Ei kind:function(arm,size=0x28) addr:0x0207f304 -_ZN7MapBase18func_ov00_0207f38cEPi kind:function(arm,size=0x38) addr:0x0207f32c +_ZN7MapBase8vfunc_80EP7TilePos kind:function(arm,size=0x8) addr:0x0207f2fc +_ZN7MapBase8vfunc_84EP18UnkStruct_0207f38c kind:function(arm,size=0x28) addr:0x0207f304 +_ZN7MapBase18func_ov00_0207f38cEP18UnkStruct_0207f38c kind:function(arm,size=0x38) addr:0x0207f32c _ZN7MapBase8vfunc_90EP7TilePosi kind:function(arm,size=0xdc) addr:0x0207f364 _ZN7MapBase8vfunc_94Ev kind:function(arm,size=0x4) addr:0x0207f440 _ZN7MapBase18func_ov00_0207f4a4EP5Vec2si kind:function(arm,size=0x98) addr:0x0207f444 @@ -383,7 +383,7 @@ _ZN7MapBase11AddEntranceEP8Entrance kind:function(arm,size=0x7c) addr:0x0207f7e4 _ZN7MapBase12FindEntranceEi kind:function(arm,size=0x64) addr:0x0207f860 _ZN7MapBase18func_ov00_0207f924Ei kind:function(arm,size=0x10) addr:0x0207f8c4 _ZN7MapBase18func_ov00_0207f934Ev kind:function(arm,size=0x14) addr:0x0207f8d4 -_ZN7MapBase18func_ov00_0207f948Ei kind:function(arm,size=0x10) addr:0x0207f8e8 +_ZN7MapBase18func_ov00_0207f948EPi kind:function(arm,size=0x10) addr:0x0207f8e8 _ZN7MapBase10AddTriggerEP13TriggerParams kind:function(arm,size=0x150) addr:0x0207f8f8 _ZN11TriggerBase8vfunc_08Ev kind:function(arm,size=0x4) addr:0x0207fa48 _ZN7MapBase21GetTriggerBoundingBoxEiP4AABB kind:function(arm,size=0xb0) addr:0x0207fa4c @@ -395,33 +395,33 @@ _ZN7MapBase11FindTriggerEi kind:function(arm,size=0x48) addr:0x0207fc38 _ZN7MapBase22GetOverlappingTriggersEP5Vec3pPP11TriggerBasei kind:function(arm,size=0x78) addr:0x0207fc80 _ZN7MapBase23IsTriggerTypeOverlappedEiP5Vec3p kind:function(arm,size=0x78) addr:0x0207fcf8 _ZN7MapBase18AnyTrigger_func_0cEi kind:function(arm,size=0x64) addr:0x0207fd70 -_ZN11TriggerBase8vfunc_0cEv kind:function(arm,size=0x8) addr:0x0207fdd4 +_ZN11TriggerBase8vfunc_0cEb kind:function(arm,size=0x8) addr:0x0207fdd4 _ZN7MapBase16Trigger_vfunc_08Ev kind:function(arm,size=0x44) addr:0x0207fddc -_ZN7MapBase10AddTriggerEi kind:function(arm,size=0x108) addr:0x0207fe20 -_ZN7MapBase18func_ov00_0207ff88Ei kind:function(arm,size=0xd4) addr:0x0207ff28 +_ZN7MapBase10AddTriggerEP11TriggerBase kind:function(arm,size=0x108) addr:0x0207fe20 +_ZN7MapBase18func_ov00_0207ff88EP11TriggerBase kind:function(arm,size=0xd4) addr:0x0207ff28 _ZN7MapBase18func_ov00_0208005cEiii kind:function(arm,size=0x10) addr:0x0207fffc _ZN7MapBase18func_ov00_0208006cEii kind:function(arm,size=0x10) addr:0x0208000c _ZN7MapBase18func_ov00_0208007cEii kind:function(arm,size=0x10) addr:0x0208001c _ZN7MapBase18func_ov00_0208008cEj kind:function(arm,size=0x10) addr:0x0208002c _ZN7MapBase7AddExitEP4Exit kind:function(arm,size=0xa4) addr:0x0208003c _ZN7MapBase18func_ov00_02080140EP4Exit kind:function(arm,size=0x1e4) addr:0x020800e0 -_ZN12MapBase_Unk118func_ov00_02080324Eiii kind:function(arm,size=0x78) addr:0x020802c4 +_ZN12MapBase_Unk118func_ov00_02080324EP23UnkStruct_027e0d38_UnkCS1_S1_ kind:function(arm,size=0x78) addr:0x020802c4 _ZN7MapBase8FindExitEjP4Exit kind:function(arm,size=0xd0) addr:0x0208033c _ZN7MapBase18AddCameraViewpointEP15CameraViewpoint kind:function(arm,size=0xa4) addr:0x0208040c _ZN7MapBase19FindViewpoint_Unk_4EcP15CameraViewpoint kind:function(arm,size=0xc0) addr:0x020804b0 _ZN7MapBase19FindViewpoint_Unk_0EiP15CameraViewpoint kind:function(arm,size=0xb8) addr:0x02080570 _ZN7MapBase19GetCurrentViewpointEP15CameraViewpointi kind:function(arm,size=0xf8) addr:0x02080628 _ZN7MapBase26GetCurrentViewpoint_Unk_00Ei kind:function(arm,size=0x54) addr:0x02080720 -_ZN7MapBase8vfunc_b8Ev kind:function(arm,size=0x50) addr:0x02080774 +_ZN7MapBase8vfunc_b8Ei kind:function(arm,size=0x50) addr:0x02080774 _ZN7MapBase18func_ov00_02080824EjPc kind:function(arm,size=0xac) addr:0x020807c4 -_ZN7MapBase10AddUnk_130Ei kind:function(arm,size=0xe8) addr:0x02080870 -_ZN7MapBase18func_ov00_020809b8Ei kind:function(arm,size=0xc0) addr:0x02080958 +_ZN7MapBase10AddUnk_130EP11TriggerBase kind:function(arm,size=0xe8) addr:0x02080870 +_ZN7MapBase18func_ov00_020809b8EP11TriggerBase kind:function(arm,size=0xc0) addr:0x02080958 _ZN7MapBase18func_ov00_02080a78EP5Vec3p kind:function(arm,size=0x58) addr:0x02080a18 -_ZN12MapBase_Unk218func_ov00_02080ad0EPP11TriggerBaseS2_ kind:function(arm,size=0x54) addr:0x02080a70 +_ZN12MapBase_Unk218func_ov00_02080ad0EPP11TriggerBaseS2_S2_ kind:function(arm,size=0x54) addr:0x02080a70 _ZN7MapBase18func_ov00_02080b24EP7TilePos kind:function(arm,size=0x1e4) addr:0x02080ac4 _ZN7MapBase18func_ov00_02080d08EP7TilePos kind:function(arm,size=0x6c) addr:0x02080ca8 _ZN7MapBase8vfunc_bcEv kind:function(arm,size=0x4) addr:0x02080d14 -_ZN7MapBase8vfunc_98Eiii kind:function(arm,size=0x4) addr:0x02080d18 +_ZN7MapBase8vfunc_98EP7TilePosii kind:function(arm,size=0x4) addr:0x02080d18 _ZN7MapBase8vfunc_c0Ev kind:function(arm,size=0x4) addr:0x02080d1c _ZN7MapBase22TriggerOfType_vfunc_10Ei kind:function(arm,size=0x5c) addr:0x02080d20 _ZN11TriggerBase8vfunc_10Ev kind:function(arm,size=0x8) addr:0x02080d7c @@ -515,15 +515,15 @@ _ZN10MapManager16MapData_vfunc_b0Eii kind:function(arm,size=0x18) addr:0x020825d _ZN10MapManager18func_ov00_02082650Eiii kind:function(arm,size=0x10) addr:0x020825f0 _ZN10MapManager18func_ov00_02082660Eii kind:function(arm,size=0x10) addr:0x02082600 _ZN10MapManager18func_ov00_02082670Eii kind:function(arm,size=0x10) addr:0x02082610 -_ZN10MapManager18func_ov00_02082680Eii kind:function(arm,size=0x20) addr:0x02082620 -_ZN10MapManager18func_ov00_020826a0Eii kind:function(arm,size=0x20) addr:0x02082640 +_ZN10MapManager18func_ov00_02082680EP7TilePosi kind:function(arm,size=0x20) addr:0x02082620 +_ZN10MapManager18func_ov00_020826a0EP7TilePosi kind:function(arm,size=0x20) addr:0x02082640 _ZN10MapManager9CreateMapEiii kind:function(arm,size=0x100) addr:0x02082660 _ZN10MapManager10DestroyMapEv kind:function(arm,size=0x30) addr:0x02082760 _ZN10MapManager16MapData_vfunc_44Ev kind:function(arm,size=0x18) addr:0x02082790 _ZN10MapManager18func_ov00_02082808Eb kind:function(arm,size=0xb8) addr:0x020827a8 _ZN10MapManager16MapData_vfunc_7cEiPiiPs kind:function(arm,size=0x20) addr:0x02082860 -_ZN10MapManager16MapData_vfunc_84Ei kind:function(arm,size=0x18) addr:0x02082880 -_ZN10MapManager18func_ov00_020828f8EPi kind:function(arm,size=0x10) addr:0x02082898 +_ZN10MapManager16MapData_vfunc_84EP18UnkStruct_0207f38c kind:function(arm,size=0x18) addr:0x02082880 +_ZN10MapManager18func_ov00_020828f8EP18UnkStruct_0207f38c kind:function(arm,size=0x10) addr:0x02082898 _ZN10MapManager10GetNumMapsEv kind:function(arm,size=0xc) addr:0x020828a8 _ZN10MapManager18func_ov00_02082914Ei kind:function(arm,size=0x1b8) addr:0x020828b4 _ZN10MapManager18func_ov00_02082accEv kind:function(arm,size=0x10) addr:0x02082a6c @@ -585,8 +585,8 @@ _ZN10MapManager23IsTriggerTypeOverlappedEjP5Vec3p kind:function(arm,size=0x10) a _ZN10MapManager21GetOverlappingTriggerEP5Vec3p kind:function(arm,size=0x10) addr:0x02083720 _ZN10MapManager18func_ov00_02083790Ei kind:function(arm,size=0xb0) addr:0x02083730 _ZN10MapManager18func_ov00_02083840Ei kind:function(arm,size=0x88) addr:0x020837e0 -_ZN10MapManager10AddTriggerEi kind:function(arm,size=0x10) addr:0x02083868 -_ZN10MapManager18func_ov00_020838d8Ei kind:function(arm,size=0x10) addr:0x02083878 +_ZN10MapManager10AddTriggerEP11TriggerBase kind:function(arm,size=0x10) addr:0x02083868 +_ZN10MapManager18func_ov00_020838d8EP11TriggerBase kind:function(arm,size=0x10) addr:0x02083878 _ZN10MapManager8FindExitEjP4Exit kind:function(arm,size=0x10) addr:0x02083888 _ZN10MapManager18func_ov00_020838f8EP4Exit kind:function(arm,size=0x10) addr:0x02083898 _ZN10MapManager18func_ov00_02083908EcP15CameraViewpoint kind:function(arm,size=0x10) addr:0x020838a8 @@ -597,8 +597,8 @@ _ZN10MapManager21SetCurrentViewpointIdEci kind:function(arm,size=0x10) addr:0x02 _ZN10MapManager18func_ov00_02083958Ei kind:function(arm,size=0x10) addr:0x020838f8 _ZN10MapManager18func_ov00_02083968EjPc kind:function(arm,size=0x10) addr:0x02083908 _ZN10MapManager18func_ov00_02083978EP5Vec3pS1_ kind:function(arm,size=0x3c) addr:0x02083918 -_ZN10MapManager18func_ov00_020839b4Ei kind:function(arm,size=0x10) addr:0x02083954 -_ZN10MapManager18func_ov00_020839c4Ei kind:function(arm,size=0x10) addr:0x02083964 +_ZN10MapManager18func_ov00_020839b4EP11TriggerBase kind:function(arm,size=0x10) addr:0x02083954 +_ZN10MapManager18func_ov00_020839c4EP11TriggerBase kind:function(arm,size=0x10) addr:0x02083964 _ZN10MapManager18func_ov00_020839d4Ei kind:function(arm,size=0x24) addr:0x02083974 _ZN10MapManager18func_ov00_020839f8Ei kind:function(arm,size=0x24) addr:0x02083998 _ZN10MapManager18func_ov00_02083a1cEP5Vec3p kind:function(arm,size=0x38) addr:0x020839bc @@ -629,7 +629,7 @@ _ZN10MapManager18func_ov00_02084100EPiPS_ kind:function(arm,size=0x14) addr:0x02 _ZN10MapManager17GetMapData_Unk_48Ev kind:function(arm,size=0xc) addr:0x020840b4 _ZN10MapManager17GetMapData_Unk_4cEv kind:function(arm,size=0xc) addr:0x020840c0 _ZN10MapManager18func_ov00_0208412cEv kind:function(arm,size=0x10) addr:0x020840cc -_ZN10MapManager18func_ov00_0208413cEi kind:function(arm,size=0x10) addr:0x020840dc +_ZN10MapManager18func_ov00_0208413cEPi kind:function(arm,size=0x10) addr:0x020840dc _ZN10MapManager16MapData_vfunc_58EP7TilePosi kind:function(arm,size=0x18) addr:0x020840ec _ZN10MapManager18func_ov00_02084164EP7TilePos kind:function(arm,size=0x1a8) addr:0x02084104 _ZN10MapManager17GetMapData_Unk_0aEv kind:function(arm,size=0xc) addr:0x020842ac @@ -711,7 +711,7 @@ func_ov000_02087b78 kind:function(arm,size=0x1bc) addr:0x02087b18 func_ov000_02087d34 kind:function(arm,size=0x50) addr:0x02087cd4 func_ov000_02087d84 kind:function(arm,size=0x14) addr:0x02087d24 func_ov000_02087d98 kind:function(arm,size=0x40) addr:0x02087d38 -func_ov000_02087dd8 kind:function(arm,size=0x20) addr:0x02087d78 +_Z19func_ov000_02087dd8Pv kind:function(arm,size=0x20) addr:0x02087d78 func_ov000_02087df8 kind:function(arm,size=0x1c) addr:0x02087d98 func_ov000_02087e14 kind:function(arm,size=0x78) addr:0x02087db4 func_ov000_02087e8c kind:function(arm,size=0x64) addr:0x02087e2c @@ -881,7 +881,7 @@ func_ov000_0208d5e0 kind:function(arm,size=0x40) addr:0x0208d580 _ZN18UnkStruct_027e0f6819func_ov000_0208d620Ev kind:function(arm,size=0x60) addr:0x0208d5c0 _ZN18UnkStruct_027e0f6819func_ov000_0208d680Ev kind:function(arm,size=0x60) addr:0x0208d620 func_ov000_0208d6e0 kind:function(arm,size=0x140) addr:0x0208d680 -func_ov000_0208d820 kind:function(arm,size=0x110) addr:0x0208d7c0 +_ZN18UnkStruct_027e0f6819func_ov000_0208d820EPv kind:function(arm,size=0x110) addr:0x0208d7c0 func_ov000_0208d930 kind:function(arm,size=0xb0) addr:0x0208d8d0 func_ov000_0208d9e0 kind:function(arm,size=0x64) addr:0x0208d980 func_ov000_0208da44 kind:function(arm,size=0x98) addr:0x0208d9e4 @@ -1412,35 +1412,35 @@ func_ov000_0209bf80 kind:function(arm,size=0x44) addr:0x0209bf20 func_ov000_0209bfc4 kind:function(arm,size=0x1c) addr:0x0209bf64 func_ov000_0209bfe0 kind:function(arm,size=0x7c) addr:0x0209bf80 func_ov000_0209c05c kind:function(arm,size=0x30) addr:0x0209bffc -func_ov000_0209c08c kind:function(arm,size=0x1c) addr:0x0209c02c +_ZN15MapBase_Unk_14419func_ov000_0209c08cEii kind:function(arm,size=0x1c) addr:0x0209c02c func_ov000_0209c0a8 kind:function(arm,size=0x13c) addr:0x0209c048 -func_ov000_0209c1e4 kind:function(arm,size=0xd0) addr:0x0209c184 -func_ov000_0209c2b4 kind:function(arm,size=0x1c) addr:0x0209c254 -func_ov000_0209c2d0 kind:function(arm,size=0x1a4) addr:0x0209c270 +_ZN15MapBase_Unk_14419func_ov000_0209c1e4Eiii kind:function(arm,size=0xd0) addr:0x0209c184 +_ZN15MapBase_Unk_14419func_ov000_0209c2b4Eii kind:function(arm,size=0x1c) addr:0x0209c254 +_ZN15MapBase_Unk_14419func_ov000_0209c2d0Eii kind:function(arm,size=0x1a4) addr:0x0209c270 func_ov000_0209c474 kind:function(arm,size=0xbc) addr:0x0209c414 -func_ov000_0209c530 kind:function(arm,size=0x8) addr:0x0209c4d0 +_ZN15Mapbase_Unk_14419func_ov000_0209c530Ev kind:function(arm,size=0x8) addr:0x0209c4d0 func_ov000_0209c538 kind:function(arm,size=0xe4) addr:0x0209c4d8 -func_ov000_0209c61c kind:function(arm,size=0x2c) addr:0x0209c5bc +_ZN15MapBase_Unk_14419func_ov000_0209c61cEv kind:function(arm,size=0x2c) addr:0x0209c5bc func_ov000_0209c648 kind:function(arm,size=0x140) addr:0x0209c5e8 -func_ov000_0209c788 kind:function(arm,size=0x15c) addr:0x0209c728 -func_ov000_0209c8e4 kind:function(arm,size=0x10) addr:0x0209c884 +_ZN15Mapbase_Unk_14419func_ov000_0209c788Ev kind:function(arm,size=0x15c) addr:0x0209c728 +_ZN15MapBase_Unk_14419func_ov000_0209c8e4Ei kind:function(arm,size=0x10) addr:0x0209c884 func_ov000_0209c8f4 kind:function(arm,size=0x64) addr:0x0209c894 func_ov000_0209c958 kind:function(arm,size=0x100) addr:0x0209c8f8 func_ov000_0209ca58 kind:function(arm,size=0x28) addr:0x0209c9f8 func_ov000_0209ca80 kind:function(arm,size=0x154) addr:0x0209ca20 func_ov000_0209cbd4 kind:function(arm,size=0x5c) addr:0x0209cb74 func_ov000_0209cc30 kind:function(arm,size=0xc) addr:0x0209cbd0 -func_ov000_0209cc3c kind:function(arm,size=0xc) addr:0x0209cbdc -func_ov000_0209cc48 kind:function(arm,size=0xa0) addr:0x0209cbe8 +_ZN18UnkStruct_027e0f7819func_ov000_0209cc3cEis kind:function(arm,size=0xc) addr:0x0209cbdc +_ZN18UnkStruct_027e0f7819func_ov000_0209cc48Ev kind:function(arm,size=0xa0) addr:0x0209cbe8 func_ov000_0209cce8 kind:function(arm,size=0x4) addr:0x0209cc88 func_ov000_0209ccec kind:function(arm,size=0x28) addr:0x0209cc8c func_ov000_0209cd14 kind:function(arm,size=0x2c) addr:0x0209ccb4 func_ov000_0209cd40 kind:function(arm,size=0x40) addr:0x0209cce0 -func_ov000_0209cd80 kind:function(arm,size=0x1c) addr:0x0209cd20 -func_ov000_0209cd9c kind:function(arm,size=0x20) addr:0x0209cd3c +_ZN18UnkStruct_020ee0a019func_ov000_0209cd80Es kind:function(arm,size=0x1c) addr:0x0209cd20 +_ZN18UnkStruct_020ee0a019func_ov000_0209cd9cEsi kind:function(arm,size=0x20) addr:0x0209cd3c func_ov000_0209cdbc kind:function(arm,size=0x20) addr:0x0209cd5c -func_ov000_0209cddc kind:function(arm,size=0x1c) addr:0x0209cd7c -func_ov000_0209cdf8 kind:function(arm,size=0x1c) addr:0x0209cd98 +_ZN18UnkStruct_020ee0a019func_ov000_0209cddcEi kind:function(arm,size=0x1c) addr:0x0209cd7c +_ZN18UnkStruct_020ee0a019func_ov000_0209cdf8Ei kind:function(arm,size=0x1c) addr:0x0209cd98 func_ov000_0209ce14 kind:function(arm,size=0x64) addr:0x0209cdb4 func_ov000_0209ce78 kind:function(arm,size=0xec) addr:0x0209ce18 func_ov000_0209cf64 kind:function(arm,size=0x140) addr:0x0209cf04 @@ -1642,7 +1642,7 @@ func_ov000_020a1988 kind:function(arm,size=0x28) addr:0x020a1928 func_ov000_020a19b0 kind:function(arm,size=0x18) addr:0x020a1950 func_ov000_020a19c8 kind:function(arm,size=0x34) addr:0x020a1968 func_ov000_020a19fc kind:function(arm,size=0x10) addr:0x020a199c -func_ov000_020a1a0c kind:function(arm,size=0x18) addr:0x020a19ac +_ZN18UnkStruct_027e0f8819func_ov000_020a1a0cEis kind:function(arm,size=0x18) addr:0x020a19ac func_ov000_020a1a24 kind:function(arm,size=0x18) addr:0x020a19c4 _ZN18UnkStruct_027e0f8819func_ov000_020a1a3cEv kind:function(arm,size=0x80) addr:0x020a19dc func_ov000_020a1abc kind:function(arm,size=0x68) addr:0x020a1a5c @@ -1713,7 +1713,7 @@ func_ov000_020a3d58 kind:function(arm,size=0x48) addr:0x020a3cf8 func_ov000_020a3da0 kind:function(arm,size=0x28) addr:0x020a3d40 func_ov000_020a3dc8 kind:function(arm,size=0x8) addr:0x020a3d68 func_ov000_020a3dd0 kind:function(arm,size=0x10) addr:0x020a3d70 -func_ov000_020a3de0 kind:function(arm,size=0x34) addr:0x020a3d80 +_Z19func_ov000_020a3de0bi kind:function(arm,size=0x34) addr:0x020a3d80 func_ov000_020a3e14 kind:function(arm,size=0x8c) addr:0x020a3db4 func_ov000_020a3ea0 kind:function(arm,size=0x50) addr:0x020a3e40 func_ov000_020a3ef0 kind:function(arm,size=0x64) addr:0x020a3e90 diff --git a/include/DTCM/UnkStruct_027e0e58.hpp b/include/DTCM/UnkStruct_027e0e58.hpp index ab3a0450..031c920c 100644 --- a/include/DTCM/UnkStruct_027e0e58.hpp +++ b/include/DTCM/UnkStruct_027e0e58.hpp @@ -4,6 +4,9 @@ #include "types.h" struct UnkStruct_027e0e58 { + /* 00 */ unk8 mUnk_00[0x22]; + /* 22 */ unk16 mUnk_22; + void func_ov000_0207c5d4(unk32 param1, bool param2); void func_ov000_0207c1b0(unk32 param1, Vec3p *param2, unk32 param3, unk32 param4, unk32 param5); }; diff --git a/include/DTCM/UnkStruct_027e0f68.hpp b/include/DTCM/UnkStruct_027e0f68.hpp new file mode 100644 index 00000000..7ee9d3ef --- /dev/null +++ b/include/DTCM/UnkStruct_027e0f68.hpp @@ -0,0 +1,15 @@ +#pragma once + +#include "global.h" +#include "types.h" + +class UnkStruct_027e0f68 { +public: + void func_ov000_0208cc88(); + void func_ov000_0208d620(); + void func_ov000_0208d680(); + bool func_ov000_0208d820(void *param_1); + void func_ov004_02102b28(); +}; + +extern UnkStruct_027e0f68 *data_027e0f68; diff --git a/include/DTCM/UnkStruct_027e0f78.hpp b/include/DTCM/UnkStruct_027e0f78.hpp index bbae228d..f7d75fc6 100644 --- a/include/DTCM/UnkStruct_027e0f78.hpp +++ b/include/DTCM/UnkStruct_027e0f78.hpp @@ -12,6 +12,8 @@ struct UnkStruct_027e0f78 { /* 20 */ void func_ov004_02102e3c(); + void func_ov000_0209cc3c(unk32 param_1, unk16 param_2); + void func_ov000_0209cc48(); }; extern UnkStruct_027e0f78 *data_027e0f78; diff --git a/include/Map/CameraViewpoint.hpp b/include/Map/CameraViewpoint.hpp index 924ef379..a6afe337 100644 --- a/include/Map/CameraViewpoint.hpp +++ b/include/Map/CameraViewpoint.hpp @@ -8,12 +8,18 @@ #include "System/SysNew.hpp" class CameraViewpoint : public SysObject { +public: /* 00 */ unk32 mUnk_00; - /* 04 */ unk8 mUnk_04; - /* 05 */ unk8 mUnk_05[3]; + /* 04 */ u8 mUnk_04; /* 08 */ Vec3p mPos; /* 14 */ unk16 mUnk_14; /* 16 */ unk16 mUnk_16; - /* 18 */ unk16 mUnk_18[2]; + /* 18 */ u16 mUnk_18[2]; /* 1c */ + + inline CameraViewpoint() : + mUnk_00(0), + mUnk_04(0xff), + mUnk_14(0), + mUnk_16(0) {} }; diff --git a/include/Map/Exit.hpp b/include/Map/Exit.hpp index d9fda9bd..e1b113ce 100644 --- a/include/Map/Exit.hpp +++ b/include/Map/Exit.hpp @@ -6,15 +6,16 @@ #include "System/SysNew.hpp" class Exit : public SysObject { +public: /* 00 */ unk32 mDestCourse; /* 04 */ unk32 mUnk_04; /* 08 */ unk32 mUnk_08; /* 0c */ unk32 mUnk_0c; /* 10 */ unk16 mUnk_10; - /* 12 */ unk8 mDestMap; - /* 13 */ unk8 mDestEntrance; - /* 14 */ unk8 mUnk_14; - /* 15 */ unk8 mUnk_15; + /* 12 */ u8 mDestMap; + /* 13 */ u8 mDestEntrance; + /* 14 */ u8 mUnk_14; + /* 15 */ u8 mUnk_15; /* 16 */ unk8 mUnk_16; /* 17 */ unk8 mUnk_17; /* 18 */ diff --git a/include/Map/MapBase.hpp b/include/Map/MapBase.hpp index ac64e596..831775a2 100644 --- a/include/Map/MapBase.hpp +++ b/include/Map/MapBase.hpp @@ -7,6 +7,7 @@ #include "nds/math.h" +#include "DTCM/UnkStruct_027e0d38.hpp" #include "Map/CameraViewpoint.hpp" #include "Map/Course.hpp" #include "Map/Entrance.hpp" @@ -20,6 +21,36 @@ #define MAX_VIEWPOINTS 8 #define MAX_MAP_UNK_130 0x20 +struct MapBase_Unk_13c { + /* 00 */ unk32 mUnk_00; + /* 04 */ unk32 mUnk_04; + /* 08 */ unk32 mUnk_08; + /* 0c */ +}; + +struct MapBase_Unk_140 { + /* 00 */ unk8 mUnk_00[0x5c]; + /* 5c */ unk8 mUnk_5c; + /* 5d */ unk8 mUnk_5d[3]; + /* 60 */ unk32 *mUnk_60; + /* 64 */ +}; + +struct MapBase_Unk_144 { + /* 00 */ unk8 mUnk_00[0xc]; + /* 0c */ unk32 mUnk_0c; + /* 10 */ + + unk32 *func_ov000_0209c08c(unk32 param_2, unk32 param_3); + void func_ov000_0209c61c(void); + unk32 *func_ov000_0209c530(void); + void func_ov000_0209c788(void); + void func_ov000_0209c8e4(unk32 param_2); + void func_ov000_0209c1e4(unk32 param_2, unk32 param_3, unk32 param_4); + void func_ov000_0209c2b4(unk32 param_2, unk32 param_3); + void func_ov000_0209c2d0(unk32 param_2, unk32 param_3); +}; + struct MapBase_Unk_180 { /* 0 */ unk32 mUnk_0; /* 4 */ @@ -29,20 +60,33 @@ struct MapBase_Unk_180 { }; struct MapBase_Unk1 { - /* 00 */ s32 mUnk_00; + /* 00 */ unk32 *mUnk_00; /* 04 */ Exit mExit_04; /* 1c */ Exit mExit_1c; /* 34 */ - void func_ov00_02080324(s32 param_2, s32 param_3, s32 param_4); + void func_ov00_02080324(void *param_2, void *param_3, void *param_4); +}; + +struct MapBase_Unk2_02080ad0 { + TriggerBase **mUnk_00; + TriggerBase **mUnk_04; }; struct MapBase_Unk2 { - /* 00 */ TriggerBase **mTrigger; - /* 04 */ Vec3p mVec; - /* 10 */ + /* 00 */ TriggerBase **ppTVar1; + /* 04 */ TriggerBase **ppTVar2; + /* 08 */ TriggerBase **mTrigger; + /* 10 */ Vec3p mVec; + /* 14 */ + /* 20 */ - void func_ov00_02080ad0(TriggerBase **param_2, TriggerBase **param_3); + void func_ov00_02080ad0(MapBase_Unk2_02080ad0 param_2, TriggerBase **param_3); +}; + +struct UnkStruct_0207f38c { + /* 00 */ unk8 mUnk_00[0x14]; + /* 14 */ TilePos mUnk_14; }; class MapBase : public SysObject { @@ -67,7 +111,7 @@ public: /* 014 */ unk8 mUnk_014; /* 015 */ unk8 mUnk_015; /* 016 */ unk8 mCurrViewpointId[2]; - /* 018 */ unk8 mUnk_018[2]; + /* 018 */ u8 mUnk_018[2]; /* 01a */ unk8 mUnk_01a; /* 01b */ unk8 mUnk_01b; /* 01c */ unk8 mUnk_01c; @@ -80,7 +124,7 @@ public: /* 02a */ s16 mHeight; /* 02c */ unk16 mUnk_02c; /* 02e */ unk16 mUnk_02e; - /* 030 */ s16 mUnk_030; + /* 030 */ u16 mUnk_030; /* 032 */ unk8 mUnk_032[2]; /* 034 */ unk32 mUnk_034; /* 038 */ unk32 mUnk_038; @@ -92,17 +136,17 @@ public: /* 050 */ unk8 mUnk_050[0x80]; /* 0d0 */ Vec3p mCenter; /* 0dc */ AABB mBounds; - /* 0f4 */ Vec3p mUnk_0f4; + /* 0f4 */ Vec3p mOffset; /* 100 */ std::vector mEntrances; /* 10c */ std::vector mTriggers; /* 118 */ std::vector mExits; /* 124 */ std::vector mViewpoints; /* 130 */ std::vector mUnk_130; - /* 13c */ unk32 mUnk_13c; - /* 140 */ unk32 mUnk_140; - /* 144 */ void *mUnk_144; + /* 13c */ MapBase_Unk_13c *mUnk_13c; + /* 140 */ MapBase_Unk_140 *mUnk_140; + /* 144 */ MapBase_Unk_144 *mUnk_144; /* 148 */ s32 mUnk_148; - /* 14c */ s32 mUnk_14c; + /* 14c */ unk32 mUnk_14c; /* 150 */ unk32 mUnk_150; /* 154 */ unk32 mUnk_154; /* 158 */ unk8 mUnk_158[8]; @@ -141,32 +185,32 @@ public: /* 60 */ virtual unk32 vfunc_60(TilePos *param_1); /* 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); + /* 6c */ virtual void vfunc_6c(Vec3p *param_2, unk32 *param_3, Vec3p *param_4); /* 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]); - /* 80 */ virtual unk32 vfunc_80(); - /* 84 */ virtual void vfunc_84(unk32 param_2); + /* 80 */ virtual bool vfunc_80(TilePos *param_2); + /* 84 */ virtual bool vfunc_84(UnkStruct_0207f38c *param_2); /* 88 */ virtual unk32 vfunc_88(); /* 8c */ virtual unk32 vfunc_8c(); - /* 90 */ virtual unk8 vfunc_90(TilePos *param_2, unk32 param_3); + /* 90 */ virtual void vfunc_90(TilePos *param_2, unk32 param_3); /* 94 */ virtual void vfunc_94(); - /* 98 */ virtual void vfunc_98(unk32 param_2, unk32 param_3, unk32 param_4); + /* 98 */ virtual void vfunc_98(TilePos *param_2, unk32 param_3, unk32 param_4); /* 9c */ virtual void vfunc_9c(); /* a0 */ virtual void vfunc_a0(); /* a4 */ virtual unk32 vfunc_a4(unk8 *param_1); /* a8 */ virtual void vfunc_a8(); /* ac */ virtual void vfunc_ac(); /* b0 */ virtual void vfunc_b0(unk32 param_2, unk32 param_3); - /* b4 */ virtual void vfunc_b4(); - /* b8 */ virtual unk32 vfunc_b8(); + /* b4 */ virtual unk32 *vfunc_b4(); + /* b8 */ virtual unk32 vfunc_b8(unk32 param_2); /* bc */ virtual void vfunc_bc(); /* c0 */ virtual void vfunc_c0(); /* c4 */ - void SetBounds(unk32 map, unk32 course); - void GetMapFilePath(char *courseName, unk32 num1, unk32 buf); + void SetBounds(unk32 map, Course *course); + void GetMapFilePath(char *courseName, unk32 num1, char *buf); void func_ov00_0207ddf8(bool param_2); void func_ov00_0207de68(unk32 param_2); void func_ov00_0207de88(); @@ -174,64 +218,64 @@ public: bool func_ov00_0207e08c(s32 *param_2, s32 param_3); s32 func_ov00_0207e0f0(s32 param_2); s32 func_ov00_0207e28c(s32 param_2); - static unk8 func_ov00_0207e940(unk8 *param_1); - static unk8 func_ov00_0207e968(); - static unk8 func_ov00_0207e96c(); - static unk8 func_ov00_0207f100(); - bool func_ov00_0207f104(unk32 param_2, unk32 param_3); + static unk8 *func_ov00_0207e940(unk8 *param_1); + static void func_ov00_0207e968(); + static void func_ov00_0207e96c(); + static void func_ov00_0207f100(); + bool func_ov00_0207f104(Vec3p *param_2, unk32 *param_3); unk32 func_ov00_0207f1f4(Vec3p *param_2, unk32 *param_3); - bool func_ov00_0207f38c(s32 *param_2); + bool func_ov00_0207f38c(UnkStruct_0207f38c *param_2); void func_ov00_0207f4a4(Vec2s *param_2, unk32 param_3); static void func_ov00_0207f53c(Vec2s *param_1, MapBase *param_2, Vec3p *param_3); static void func_ov00_0207f588(Vec2s *param_1, MapBase *param_2, TilePos *param_3, unk32 param_4); void func_ov00_0207f630(Vec2s *param_2, Vec3p *param_3); - unk8 GetTileStartX(unk32 x); - unk8 GetTileStartZ(unk32 z); - s32 GetTileEndX(unk32 x); - s32 GetTileEndZ(unk32 z); + unk32 GetTileStartX(unk32 x); + unk32 GetTileStartZ(unk32 z); + unk32 GetTileEndX(unk32 x); + unk32 GetTileEndZ(unk32 z); void GetTileBounds(TilePos *tilePos, AABB *bounds); s32 GetClampedTileX(s32 worldX); s32 GetClampedTileY(s32 worldZ); - unk8 GetTileX(s32 worldX); - unk8 GetTileY(s32 worldZ); + unk32 GetTileX(s32 worldX); + unk32 GetTileY(s32 worldZ); bool IsInBounds(Vec3p *tileWorldPos); - s32 AddEntrance(Entrance *param_2); + unk32 AddEntrance(Entrance *param_2); Entrance *FindEntrance(unk32 id); - void func_ov00_0207f924(s32 param_2); - unk8 func_ov00_0207f934(); - unk8 func_ov00_0207f948(unk32 param_2); + void func_ov00_0207f924(unk32 param_2); + unk32 *func_ov00_0207f934(); + void func_ov00_0207f948(unk32 *param_2); void AddTrigger(TriggerParams *param_2); s32 GetTriggerBoundingBox(s32 param_2, AABB *param_3); - s32 GetTriggerBoundingBoxes(s32 param_2, AABB *param_3, s32 param_4); - unk8 GetOverlappingTrigger(Vec3p *param_2); + u32 GetTriggerBoundingBoxes(s32 param_2, AABB *param_3, s32 param_4); + u8 GetOverlappingTrigger(Vec3p *param_2); TriggerBase *FindTrigger(unk32 type); - unk8 GetOverlappingTriggers(Vec3p *param_2, TriggerBase **triggers, unk32 capacity); + unk32 GetOverlappingTriggers(Vec3p *param_2, TriggerBase **triggers, unk32 capacity); bool IsTriggerTypeOverlapped(unk32 type, Vec3p *param_3); bool AnyTrigger_func_0c(unk32 type); - unk8 Trigger_vfunc_08(); - bool AddTrigger(unk32 param_2); - bool func_ov00_0207ff88(s32 param_2); + void Trigger_vfunc_08(); + bool AddTrigger(TriggerBase *param_2); + bool func_ov00_0207ff88(TriggerBase *param_2); void func_ov00_0208005c(s32 param_2, s32 param_3, unk32 param_4); void func_ov00_0208006c(unk32 param_2, s32 param_3); void func_ov00_0208007c(s32 param_2, s32 param_3); void func_ov00_0208008c(u32 param_2); - unk8 AddExit(Exit *param_2); - char func_ov00_02080140(Exit *param_2); + void AddExit(Exit *param_2); + u8 func_ov00_02080140(Exit *param_2); bool FindExit(u32 param_2, Exit *param_3); - unk8 AddCameraViewpoint(CameraViewpoint *param_2); + void AddCameraViewpoint(CameraViewpoint *param_2); bool FindViewpoint_Unk_4(unk8 id, CameraViewpoint *param_3); bool FindViewpoint_Unk_0(s32 param_2, CameraViewpoint *param_3); void GetCurrentViewpoint(CameraViewpoint *param_2, s32 param_3); unk32 GetCurrentViewpoint_Unk_00(s32 param_2); bool func_ov00_02080824(u32 param_2, unk8 *param_3); - bool AddUnk_130(s32 param_2); - bool func_ov00_020809b8(s32 param_2); - unk8 func_ov00_02080a78(Vec3p *param_2); - unk8 func_ov00_02080b24(TilePos *param_2); + bool AddUnk_130(TriggerBase *param_2); + bool func_ov00_020809b8(TriggerBase *param_2); + TriggerBase *func_ov00_02080a78(Vec3p *param_2); + void func_ov00_02080b24(TilePos *param_2); void func_ov00_02080d08(TilePos *param_2); bool TriggerOfType_vfunc_10(unk32 type); void func_ov00_02080de4(); - unk8 func_ov00_02080de8(unk32 param_2); + void func_ov00_02080de8(unk32 param_2); void func_ov00_02080edc(); MapBase(u32 param1, u32 param2); diff --git a/include/Map/MapManager.hpp b/include/Map/MapManager.hpp index 37b6ce13..10b8d532 100644 --- a/include/Map/MapManager.hpp +++ b/include/Map/MapManager.hpp @@ -165,15 +165,15 @@ public: void func_ov00_02082650(s32 param_2, s32 param_3, unk32 param_4); void func_ov00_02082660(s32 param_2, s32 param_3); void func_ov00_02082670(unk32 param_2, s32 param_3); - void func_ov00_02082680(unk32 param_2, unk32 param_3); - void func_ov00_020826a0(unk32 param_2, unk32 param_3); + void func_ov00_02082680(TilePos *param_2, unk32 param_3); + void func_ov00_020826a0(TilePos *param_2, unk32 param_3); void CreateMap(unk32 mapType, unk32 param_3, unk32 param_4); void DestroyMap(); void MapData_vfunc_44(); void func_ov00_02082808(bool param_2); s32 MapData_vfunc_7c(s32 param_1, unk32 *param_2, s32 param_3, short param_4[4]); - void MapData_vfunc_84(unk32 param_2); - bool func_ov00_020828f8(s32 *param_2); + void MapData_vfunc_84(UnkStruct_0207f38c *param_2); + bool func_ov00_020828f8(UnkStruct_0207f38c *param_2); u8 GetNumMaps(); s32 func_ov00_02082914(unk32 param_2); void func_ov00_02082acc(); @@ -235,8 +235,8 @@ public: unk8 GetOverlappingTrigger(Vec3p *param_2); bool func_ov00_02083790(s32 param_2); bool func_ov00_02083840(s32 param_2); - bool AddTrigger(s32 param_2); - bool func_ov00_020838d8(s32 param_2); + bool AddTrigger(TriggerBase *param_2); + bool func_ov00_020838d8(TriggerBase *param_2); bool FindExit(u32 param_2, Exit *param_3); char func_ov00_020838f8(Exit *param_2); bool func_ov00_02083908(char param_2, CameraViewpoint *param_3); @@ -247,8 +247,8 @@ public: void func_ov00_02083958(s32 param_2); void func_ov00_02083968(u32 param_2, unk8 *param_3); bool func_ov00_02083978(Vec3p *param_2, Vec3p *param_3); - bool func_ov00_020839b4(s32 param_2); - bool func_ov00_020839c4(s32 param_2); + bool func_ov00_020839b4(TriggerBase *param_2); + bool func_ov00_020839c4(TriggerBase *param_2); s32 func_ov00_020839d4(s32 param_2); s32 func_ov00_020839f8(s32 param_2); TilePos func_ov00_02083a1c(Vec3p *param_3); @@ -278,8 +278,8 @@ public: static unk8 func_ov00_02084100(unk32 *param_1, MapManager *param_2); unk32 GetMapData_Unk_48(); unk32 GetMapData_Unk_4c(); - unk32 func_ov00_0208412c(); - void func_ov00_0208413c(unk32 param_2); + unk32 *func_ov00_0208412c(); + void func_ov00_0208413c(unk32 *param_2); unk8 MapData_vfunc_58(TilePos *param_1, int param_2); s32 func_ov00_02084164(TilePos *param_2); u8 GetMapData_Unk_0a(); diff --git a/include/Map/TriggerBase.hpp b/include/Map/TriggerBase.hpp index 49311e1e..dd5a9961 100644 --- a/include/Map/TriggerBase.hpp +++ b/include/Map/TriggerBase.hpp @@ -23,10 +23,15 @@ struct TriggerParams { /* b */ }; -class TriggerBase : public SysObject { +class UnkStruct_TriggerBase : public SysObject { +public: + virtual unk32 vfunc_00(void *); +}; + +class TriggerBase : public UnkStruct_TriggerBase { public: /* 00 (vtable) */ - /* 04 */ unk8 mUnk_04; + /* 04 */ bool mUnk_04; /* 05 */ u8 mId; /* 06 */ unk8 mUnk_06[2]; /* 08 */ u32 mUnk_08; @@ -36,7 +41,7 @@ public: /* 00 */ virtual ~TriggerBase(); /* 08 */ virtual void vfunc_08(); - /* 0c */ virtual unk32 vfunc_0c(); + /* 0c */ virtual bool vfunc_0c(bool param_2); /* 10 */ virtual unk32 vfunc_10(); /* 14 */ virtual bool Overlaps(Vec3p *point); /* 18 */ virtual bool GetBoundingBox(AABB *bbox); diff --git a/include/Map/TriggerSphere.hpp b/include/Map/TriggerSphere.hpp index 12d6d9e1..bd0bcb53 100644 --- a/include/Map/TriggerSphere.hpp +++ b/include/Map/TriggerSphere.hpp @@ -7,6 +7,7 @@ #include "Physics/Sphere.hpp" class TriggerSphere : public TriggerBase { +public: /* 00 (base) */ /* 14 */ Sphere mSphere; /* 24 */ s32 mHeight; diff --git a/include/Unknown/UnkStruct_020ee0a0.hpp b/include/Unknown/UnkStruct_020ee0a0.hpp index b6ecf3da..d955f8b3 100644 --- a/include/Unknown/UnkStruct_020ee0a0.hpp +++ b/include/Unknown/UnkStruct_020ee0a0.hpp @@ -25,6 +25,10 @@ public: UnkStruct_020ee0a0(); void func_ov008_021135b8(); + void func_ov000_0209cd80(unk16 param_2); + void func_ov000_0209cd9c(unk16 param_2, unk32 param_3); + void func_ov000_0209cddc(unk32 param_2); + void func_ov000_0209cdf8(unk32 param_2); }; extern UnkStruct_020ee0a0 data_ov000_020ee0a0; diff --git a/include/Unknown/UnkStruct_027e0f88.hpp b/include/Unknown/UnkStruct_027e0f88.hpp index 4ad6294b..674e95a2 100644 --- a/include/Unknown/UnkStruct_027e0f88.hpp +++ b/include/Unknown/UnkStruct_027e0f88.hpp @@ -39,6 +39,7 @@ public: static void func_ov008_02113678(u32 *param_1); void func_ov008_021136c0(); + void func_ov000_020a1a0c(unk32 param_1, unk16 param_2); }; extern UnkStruct_027e0f88 *data_027e0f88; diff --git a/libs/cpp/include/vector b/libs/cpp/include/vector index 37e7a4d8..2075b140 100644 --- a/libs/cpp/include/vector +++ b/libs/cpp/include/vector @@ -16,7 +16,7 @@ namespace std { } } - void push_back(T &value) { + int push_back(T &value) { get_new_capacity(1); append_back(1, &value); } diff --git a/src/00_Core/Map/MapBase.cpp b/src/00_Core/Map/MapBase.cpp index 988d745a..e0cdf264 100644 --- a/src/00_Core/Map/MapBase.cpp +++ b/src/00_Core/Map/MapBase.cpp @@ -1,112 +1,2251 @@ +// TODO: Optimise functions' bodies as much as possible (without affecting asm) +// Clear these comments when done + #include "Map/MapBase.hpp" +#include "DTCM/UnkStruct_027e0d38.hpp" +#include "DTCM/UnkStruct_027e0e58.hpp" +#include "DTCM/UnkStruct_027e0f64.hpp" +#include "DTCM/UnkStruct_027e0f68.hpp" +#include "DTCM/UnkStruct_027e0f6c.hpp" +#include "DTCM/UnkStruct_027e0f78.hpp" +#include "DTCM/UnkStruct_027e103c.hpp" +#include "Game/Game.hpp" #include "Map/MapManager.hpp" +#include "Map/TriggerAABB_Unk1.hpp" +#include "Map/TriggerAABB_Unk2.hpp" +#include "Map/TriggerSphere.hpp" +#include "Render/ModelRender.hpp" +#include "Unknown/UnkStruct_020ee0a0.hpp" +#include "Unknown/UnkStruct_027e0f88.hpp" +#include "cxxabi.h" +#include "stdio.h" +#include "stdlib.h" + +extern "C" void Fill32(unk32, u32 *, unk32); +extern "C" void __cxa_vec_ctor(void *, unk32, unk32, void *, void *); +extern "C" void func_020196bc(ItemModel *param1, unk32 param2); +extern "C" void func_020196fc(ItemModel *param1, unk32 param2); +extern "C" unk32 *func_0201e24c(unk32 *, char *); +extern "C" unk32 *func_0201e4cc(unk32 *param_1); +extern "C" unk32 func_01ffe904(unk16 *, unk32 *, unk32 *, unk32 *); +extern "C" unk32 func_01fff084(UnkStruct_027e0f6c *, Vec3p *, unk32, unk32, unk32, unk32); +extern "C" unk32 func_01fff264(UnkStruct_027e0f6c *, AABB *, unk32, unk32, unk32, unk32); + +extern void func_ov000_020a3de0(bool, unk32); +extern unk32 func_ov000_02079e3c(); +extern unk32 func_ov000_02087dd8(void *); + +extern bool data_027e0f8c; +extern unk32 data_ov000_020ecde4; + +struct UnkStruct_020ec81c_04 { + /* 00 */ unk32 mUnk_00; + /* 04 */ unk32 mUnk_04; + /* 08 */ unk32 *mUnk_08; + /* 0c */ +}; + +struct UnkStruct_020ec81c { + /* 00 */ unk32 mUnk_00; + /* 04 */ UnkStruct_020ec81c_04 *mUnk_04; // pointer type or not? pointer type matches vfunc_b4 / literal type matches .sbss + /* 08 */ +}; + +// reverse and remove pragma, possibly arrays or structs (size 0x40) +#pragma section sbss begin +UnkStruct_020ec81c data_ov000_020ec81c; +unk32 data_ov000_020ec820; +unk32 data_ov000_020ec824; +unk32 data_ov000_020ec864; +unk32 data_ov000_020ec8a4; +unk32 data_ov000_020ec8e4; +unk32 data_ov000_020ec924; +#pragma section sbss end MapBase::~MapBase() {} + MapBase_Unk_180::~MapBase_Unk_180() {} -void MapBase::SetBounds(unk32 map, unk32 course) {} -MapManager_Unk2::~MapManager_Unk2() {} -void MapBase::GetMapFilePath(char *courseName, unk32 num1, unk32 buf) {} -void MapBase::vfunc_18() {} -void MapBase::func_ov00_0207ddf8(bool param_2) {} -void MapBase::func_ov00_0207de68(unk32 param_2) {} -void MapBase::func_ov00_0207de88() {} -void MapBase::func_ov00_0207dea0(bool param_2) {} -void MapBase::vfunc_b0(unk32 param_2, unk32 param_3) {} -bool MapBase::func_ov00_0207e08c(s32 *param_2, s32 param_3) {} -s32 MapBase::func_ov00_0207e0f0(s32 param_2) {} -s32 MapBase::func_ov00_0207e28c(s32 param_2) {} -void MapBase::vfunc_b4() {} -void MapBase::vfunc_48() {} -unk32 MapBase::vfunc_50() {} -unk32 MapBase::vfunc_54(TilePos *param_1) {} -unk32 MapBase::vfunc_58(TilePos *param_1, int param_2) {} -unk32 MapBase::vfunc_5c() {} -unk32 MapBase::vfunc_60(TilePos *param_1) {} -unk32 MapBase::vfunc_64() {} -unk32 MapBase::vfunc_68(Vec3p *param_1, bool param_2) {} -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) {} -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) {} -unk32 MapBase::func_ov00_0207f1f4(Vec3p *param_2, unk32 *param_3) {} -unk32 MapBase::vfunc_88() {} -unk32 MapBase::vfunc_8c() {} -void MapBase::vfunc_9c() {} -void MapBase::vfunc_a0() {} -unk32 MapBase::vfunc_a4(unk8 *param_1) {} -void MapBase::vfunc_a8() {} -void MapBase::vfunc_ac() {} -unk32 *MapBase::vfunc_78(TilePos *param_1) {} -s32 MapBase::vfunc_7c(s32 param_1, unk32 *param_2, s32 param_3, short param_4[4]) {} -unk32 MapBase::vfunc_80() {} -void MapBase::vfunc_84(unk32 param_2) {} -bool MapBase::func_ov00_0207f38c(s32 *param_2) {} -unk8 MapBase::vfunc_90(TilePos *param_2, unk32 param_3) {} -void MapBase::vfunc_94() {} -void MapBase::func_ov00_0207f4a4(Vec2s *param_2, unk32 param_3) {} -void MapBase::func_ov00_0207f53c(Vec2s *param_1, MapBase *param_2, Vec3p *param_3) {} -void MapBase::func_ov00_0207f588(Vec2s *param_1, MapBase *param_2, TilePos *param_3, unk32 param_4) {} -void MapBase::func_ov00_0207f630(Vec2s *param_2, Vec3p *param_3) {} -unk8 MapBase::GetTileStartX(unk32 x) {} -unk8 MapBase::GetTileStartZ(unk32 z) {} -s32 MapBase::GetTileEndX(unk32 x) {} -s32 MapBase::GetTileEndZ(unk32 z) {} -void MapBase::GetTileBounds(TilePos *tilePos, AABB *bounds) {} -s32 MapBase::GetClampedTileX(s32 worldX) {} -s32 MapBase::GetClampedTileY(s32 worldZ) {} -unk8 MapBase::GetTileX(s32 worldX) {} -unk8 MapBase::GetTileY(s32 worldZ) {} -bool MapBase::IsInBounds(Vec3p *tileWorldPos) {} -s32 MapBase::AddEntrance(Entrance *param_2) {} -Entrance *MapBase::FindEntrance(unk32 id) {} -void MapBase::func_ov00_0207f924(s32 param_2) {} -unk8 MapBase::func_ov00_0207f934() {} -unk8 MapBase::func_ov00_0207f948(unk32 param_2) {} -void MapBase::AddTrigger(TriggerParams *param_2) {} -void TriggerBase::vfunc_08() {} -s32 MapBase::GetTriggerBoundingBox(unk32 param_2, AABB *param_3) {} -bool TriggerBase::GetBoundingBox(AABB *bbox) {} -s32 MapBase::GetTriggerBoundingBoxes(s32 param_2, AABB *param_3, s32 param_4) {} -unk8 MapBase::GetOverlappingTrigger(Vec3p *param_2) {} -bool TriggerBase::Overlaps(Vec3p *point) {} -TriggerBase *MapBase::FindTrigger(unk32 type) {} -unk8 MapBase::GetOverlappingTriggers(Vec3p *param_2, TriggerBase **triggers, unk32 capacity) {} -bool MapBase::IsTriggerTypeOverlapped(unk32 type, Vec3p *param_3) {} -bool MapBase::AnyTrigger_func_0c(unk32 type) {} -unk32 TriggerBase::vfunc_0c() {} -unk8 MapBase::Trigger_vfunc_08() {} -bool MapBase::AddTrigger(unk32 param_2) {} -bool MapBase::func_ov00_0207ff88(s32 param_2) {} -void MapBase::func_ov00_0208005c(s32 param_2, s32 param_3, unk32 param_4) {} -void MapBase::func_ov00_0208006c(unk32 param_2, s32 param_3) {} -void MapBase::func_ov00_0208007c(s32 param_2, s32 param_3) {} -void MapBase::func_ov00_0208008c(u32 param_2) {} -unk8 MapBase::AddExit(Exit *param_2) {} -char MapBase::func_ov00_02080140(Exit *param_2) {} -void MapBase_Unk1::func_ov00_02080324(s32 param_2, s32 param_3, s32 param_4) {} -bool MapBase::FindExit(u32 param_2, Exit *param_3) {} -unk8 MapBase::AddCameraViewpoint(CameraViewpoint *param_2) {} -bool MapBase::FindViewpoint_Unk_4(char id, CameraViewpoint *param_3) {} -bool MapBase::FindViewpoint_Unk_0(s32 param_2, CameraViewpoint *param_3) {} -void MapBase::GetCurrentViewpoint(CameraViewpoint *param_2, s32 param_3) {} -unk32 MapBase::GetCurrentViewpoint_Unk_00(s32 param_2) {} -unk32 MapBase::vfunc_b8() {} -bool MapBase::func_ov00_02080824(u32 param_2, unk8 *param_3) {} -bool MapBase::AddUnk_130(s32 param_2) {} -bool MapBase::func_ov00_020809b8(s32 param_2) {} -unk8 MapBase::func_ov00_02080a78(Vec3p *param_2) {} -void MapBase_Unk2::func_ov00_02080ad0(TriggerBase **param_2, TriggerBase **param_3) {} -unk8 MapBase::func_ov00_02080b24(TilePos *param_2) {} -void MapBase::func_ov00_02080d08(TilePos *param_2) {} -void MapBase::vfunc_bc() {} -void MapBase::vfunc_98(unk32 param_2, unk32 param_3, unk32 param_4) {} -void MapBase::vfunc_c0() {} -bool MapBase::TriggerOfType_vfunc_10(unk32 type) {} -unk32 TriggerBase::vfunc_10() {} -void MapBase::func_ov00_02080de4() {} -unk8 MapBase::func_ov00_02080de8(unk32 param_2) {} -void MapBase::func_ov00_02080edc() {} + +// Non-matching +ARM void MapBase::SetBounds(unk32 map, Course *course) { + Vec3p *pVVar5; + Vec3p vec; + + u16 uVar3 = this->mWidth; + u16 uVar4 = this->mHeight; + int iVar1 = (unk32) ((u32) uVar3 << 0xc) >> 1; + int iVar2 = (unk32) ((u32) uVar4 << 0xc) >> 1; + + pVVar5 = course->FindMapCenter(map); + vec = *pVVar5; + this->mBounds.min.x = vec.x - iVar1; + this->mBounds.min.y = vec.y; + this->mBounds.min.z = vec.z - iVar2; + this->mCenter.x = vec.x; + this->mCenter.y = vec.y; + this->mCenter.z = vec.z; + this->mBounds.max.x = vec.x + iVar1; + this->mBounds.max.y = vec.y; + this->mBounds.max.z = vec.z + iVar2; + this->mOffset.x = -iVar1; + this->mOffset.y = 0; + this->mOffset.z = -iVar2; +} + +ARM MapManager_Unk2::~MapManager_Unk2() {} + +ARM void MapBase::GetMapFilePath(char *courseName, unk32 num1, char *buf) { + sprintf(buf, "Map/%s/map%d%d.bin", courseName, num1 / 10, num1 % 10); +} + +ARM void MapBase::vfunc_18() {} + +ARM void MapBase::func_ov00_0207ddf8(bool param_2) { + int iVar1; + u32 iVar2; + int iVar3; + MapBase_Unk_180 *pMVar4; + + iVar3 = 0; + pMVar4 = this->mUnk_180; + do { + if (param_2) { + iVar1 = 0; + do { + this->mUnk_180[iVar3 + iVar1].mUnk_0 = -1; + iVar2 = iVar1 + 1; + iVar1 = iVar2; + } while (iVar2 < 1); + } else { + Fill32(0, (u32 *) pMVar4, 4); + } + iVar3++; + pMVar4++; + } while (iVar3 < 2); + return; +} + +ARM void MapBase::func_ov00_0207de68(unk32 param_2) { + if (this->mUnk_144 == NULL) { + return; + } + this->mUnk_144->func_ov000_0209c08c(0, param_2); +} + +ARM void MapBase::func_ov00_0207de88() { + if (this->mUnk_144 == NULL) { + return; + } + this->mUnk_144->func_ov000_0209c61c(); +} + +// Non-matching +ARM void MapBase::func_ov00_0207dea0(bool param_2) { + unk32 *iVar2; + unk32 uVar3; + unk32 uVar4; + unk32 uVar5; + + iVar2 = this->mUnk_144->func_ov000_0209c530(); + data_027e0f78->func_ov000_0209cc3c(0, *(unk16 *) (iVar2 + 4)); + iVar2 = this->mUnk_144->func_ov000_0209c530(); + data_027e0f78->func_ov000_0209cc3c(1, *(unk16 *) (iVar2 + 6)); + iVar2 = this->mUnk_144->func_ov000_0209c530(); + data_027e0f78->func_ov000_0209cc3c(2, *(unk16 *) (iVar2 + 8)); + iVar2 = this->mUnk_144->func_ov000_0209c530(); + data_027e0f78->func_ov000_0209cc3c(3, *(unk16 *) (iVar2 + 10)); + data_027e0f78->func_ov000_0209cc48(); + iVar2 = this->mUnk_144->func_ov000_0209c530(); + data_027e0f88->func_ov000_020a1a0c(0, *(unk16 *) (iVar2 + 0xc)); + if (param_2) { + uVar3 = *(unk32 *) (this->mUnk_144->mUnk_0c * 0x68 + 0x20ece3c); + uVar4 = *(unk32 *) (this->mUnk_144->mUnk_0c * 0x68 + 0x20ece40); + uVar5 = *(unk32 *) (this->mUnk_144->mUnk_0c * 0x68 + 0x20ece44); + if (*(int *) (data_ov000_020ecde4) < 1) { + data_ov000_020ee0a0.func_ov000_0209cd80(0); + } else { + data_ov000_020ee0a0.func_ov000_0209cd80(1); + } + iVar2 = this->mUnk_144->func_ov000_0209c530(); + data_ov000_020ee0a0.func_ov000_0209cd9c(*(unk16 *) (iVar2 + 0xe), uVar5); + data_ov000_020ee0a0.func_ov000_0209cddc(uVar3); + data_ov000_020ee0a0.func_ov000_0209cdf8(uVar4); + } + if (data_027e0d38->func_ov000_02078b40() == 2) { + iVar2 = this->mUnk_144->func_ov000_0209c530(); + data_027e0e58->mUnk_22 = *(unk16 *) (iVar2 + 0x10); + } + iVar2 = this->mUnk_144->func_ov000_0209c530(); + func_ov000_020a3de0(&data_027e0f8c, (unk32) (iVar2 + 0x12)); + this->mUnk_144->func_ov000_0209c788(); +} + +ARM void MapBase::vfunc_b0(unk32 param_2, unk32 param_3) { + if (this->mUnk_13c == NULL) { + return; + } + func_020196fc((ItemModel *) this->mUnk_13c, param_2); + func_020196bc((ItemModel *) this->mUnk_13c, param_3); + return; +} + +// Non-matching +ARM bool MapBase::func_ov00_0207e08c(s32 *param_2, s32 param_3) { + int iVar1; + int iVar2; + + if (this->mUnk_13c == NULL) { + return false; + } + iVar1 = this->mUnk_13c->mUnk_00 + this->mUnk_13c->mUnk_08; + if (iVar1 == 0) { + return false; + } + iVar2 = iVar1 + *(s32 *) ((u32) * (u16 *) (iVar1 + 4 + (u32) * (u16 *) (iVar1 + 10)) * param_3 + iVar1 + 4 + + (u32) * (u16 *) (iVar1 + 10) + 4); + if (iVar1 == 0) { + return false; + } + *param_2 = *(unk32 *) (iVar2 + 0x14); + *(unk16 *) (param_2 + 1) = *(u16 *) (iVar2 + 0x1c); + return true; +} + +// Non-matching +ARM s32 MapBase::func_ov00_0207e0f0(s32 param_2) { + unk8 bVar1; + u16 uVar2; + u16 uVar3; + u16 *puVar4; + int iVar6; + int *iVar5; + int *iVar12; + int *iVar11; + int *iVar8; + int iVar7; + u32 uVar8; + MapBase_Unk_13c *pMVar9; + int *iVar9; + int iVar13; + int *iVar10; + u32 uVar14; + int iVar15; + u32 uStack_30; + + pMVar9 = this->mUnk_13c; + if (pMVar9 == NULL) { + return -1; + } + puVar4 = (u16 *) ((int) &pMVar9->mUnk_00 + pMVar9->mUnk_08); + if (puVar4 != (u16 *) 0x0) { + iVar6 = (int) puVar4 + (u32) *puVar4; + if (iVar6 == 0) { + return -1; + } + uStack_30 = 0; + if (*(char *) (iVar6 + 1) != '\0') { + iVar15 = 0; + do { + iVar13 = iVar6 + (u32) * (u16 *) (iVar6 + 6); + iVar10 = (int *) (iVar13 + (u32) * (u16 *) (iVar13 + 2)); + iVar5 = this->vfunc_b4(); + iVar12 = func_0201e24c((unk32 *) (iVar5 + 0xf), (char *) ((int) iVar10 + iVar15)); + if (iVar12 != (int *) 0x0) { + iVar13 = 0; + iVar9 = (int *) (iVar6 + (u32) * (u16 *) (iVar6 + 6) + 4); + iVar11 = (int *) (*(u16 *) (iVar6 + (u32) * (u16 *) (iVar6 + 6)) * uStack_30); + uVar2 = *(u16 *) ((int) iVar9 + (int) iVar11); + if (*(char *) ((int) iVar9 + (int) iVar11 + 2) != '\0') { + do { + if (param_2 == (u32) * (unk8 *) ((int) puVar4 + (u32) uVar2) + iVar13) { + iVar8 = this->vfunc_b4(); + bVar1 = *(unk8 *) ((int) iVar8 + 0x3d); + uVar14 = 0; + if (bVar1 != 0) { + uVar3 = *(u16 *) ((int) iVar8 + 0x42); + do { + iVar7 = strcmp((unk8 *) ((int) iVar8 + uVar14 * 0x10 + + (u32) * (u16 *) ((int) iVar8 + uVar3 + 0x3e) + uVar3 + 0x3c), + (unk8 *) ((int) iVar10 + iVar15)); + if (iVar7 == 0) { + return uVar14; + } + uVar8 = uVar14 + 1; + uVar14 = uVar8 & 0xffff; + } while ((uVar8 & 0xffff) < (u32) bVar1); + } + } + iVar13++; + } while (iVar13 < (int) (u32) * (unk8 *) ((int) ((int) iVar9 + (int) iVar11) + 2)); + } + } + iVar15 = iVar15 + 0x10; + uStack_30 = uStack_30 + 1; + } while (uStack_30 < *(unk8 *) (iVar6 + 1)); + } + return -1; + } + return -1; +} + +// Non-matching +ARM s32 MapBase::func_ov00_0207e28c(s32 param_2) { + u16 uVar1; + u16 uVar2; + int iVar12; + int *iVar3; + int *iVar4; + int *iVar7; + int *iVar8; + int *iVar9; + int *iVar6; + int *iVar11; + int iVar13; + u32 uVar14; + int *iVar10; + MapBase_Unk_13c *pMVar15; + int iVar16; + int iVar17; + u32 uVar18; + int iVar19; + u32 uVar20; + u32 uStack_30; + int *iVar5; + + pMVar15 = this->mUnk_13c; + if (pMVar15 == NULL) { + return -1; + } + iVar3 = (int *) ((int) &pMVar15->mUnk_00 + pMVar15->mUnk_08); + if (iVar3 != NULL) { + iVar4 = (int *) ((int) iVar3 + (u32) * (u16 *) ((int) iVar3 + 2)); + if (iVar4 == NULL) { + return -1; + } + uStack_30 = 0; + if (*(char *) ((int) iVar4 + 1) != 0) { + iVar19 = 0; + do { + iVar5 = (int *) ((u32) * (u16 *) ((int) iVar4 + *(u16 *) ((int) iVar4 + 6) + 2) + + (u32) * (u16 *) ((int) iVar4 + 6)); + iVar7 = this->vfunc_b4(); + iVar8 = (int *) func_0201e24c((unk32 *) ((int) iVar7 + (u32) * (u16 *) (iVar7 + 0xd)), + (char *) ((int) iVar4 + iVar19 + (int) iVar5)); + if (iVar8 != NULL) { + iVar17 = 0; + iVar16 = (int) iVar4 + *(u16 *) ((int) iVar4 + 6) + 4; + iVar9 = (int *) (*(u16 *) ((int) iVar4 + (u32) * (u16 *) ((int) iVar4 + 6)) * uStack_30); + uVar1 = *(u16 *) (iVar16 + (int) iVar9); + if (*(char *) ((int) iVar9 + iVar16 + 2) != 0) { + do { + if (param_2 == (u32) * (unk8 *) ((int) iVar3 + (u32) uVar1) + iVar17) { + iVar6 = this->vfunc_b4(); + iVar11 = this->vfunc_b4(); + uVar2 = *(u16 *) (iVar11 + 0xd); + uVar18 = 0; + uVar20 = (u32) * (unk8 *) ((int) iVar6 + uVar2 + 1); + if (uVar20 != 0) { + iVar12 = (u32) * (u16 *) ((int) iVar6 + uVar2 + 6) + (u32) uVar2; + do { + iVar13 = strcmp((unk8 *) ((int) iVar6 + uVar18 * 0x10 + + (u32) * (u16 *) ((int) iVar6 + iVar12 + 2) + iVar12), + (unk8 *) ((int) iVar4 + iVar19 + (int) iVar5)); + if (iVar13 == 0) { + return uVar18; + } + uVar14 = uVar18 + 1; + uVar18 = uVar14 & 0xffff; + } while ((uVar14 & 0xffff) < uVar20); + } + } + iVar17++; + } while (iVar17 < (int) (u32) * (unk8 *) ((int) iVar9 + iVar16 + 2)); + } + } + iVar19 = iVar19 + 0x10; + uStack_30 = uStack_30 + 1; + } while (uStack_30 < *(unk8 *) ((int) iVar4 + 1)); + } + return -1; + } + return -1; +} + +ARM unk32 *MapBase::vfunc_b4() { + if (data_ov000_020ec81c.mUnk_04 != NULL) { + return func_0201e4cc(data_ov000_020ec81c.mUnk_04->mUnk_08); + } + return NULL; +} + +ARM void MapBase::vfunc_48() { + this->Trigger_vfunc_08(); + this->mUnk_144->func_ov000_0209c8e4(0); + return; +} + +ARM unk32 MapBase::vfunc_50() { + return 0; +} + +ARM unk32 MapBase::vfunc_54(TilePos *param_1) { + return 0; +} + +ARM unk32 MapBase::vfunc_58(TilePos *param_1, int param_2) { + return 0; +} + +ARM unk32 MapBase::vfunc_5c() { + return 0; +} + +ARM unk32 MapBase::vfunc_60(TilePos *param_1) { + return 0; +} + +ARM unk32 MapBase::vfunc_64() { + return 0; +} + +ARM unk32 MapBase::vfunc_68(Vec3p *param_2, bool param_3) { + int iVar1; + u32 uVar2; + u32 uVar3; + int iVar4; + u32 uVar5; + int iVar6; + bool bVar7; + TilePos aVStack_98; + u32 local_94; + int iStack_90; + int iStack_8c; + Vec3p local_88; + unk32 local_7c; + unk32 local_78; + unk32 local_74; + unk16 local_70; + unk16 local_6e; + unk16 local_6c; + unk16 local_6a; + unk32 local_68; + unk32 local_64; + unk32 local_60; + unk32 local_5c; + unk32 local_58; + unk32 local_54; + unk32 local_50; + unk32 local_4c; + unk32 local_48; + unk32 local_44; + unk32 local_40; + unk32 local_3c; + unk32 local_38; + unk32 local_34; + unk32 local_30; + unk32 local_2c; + unk32 local_28; + + aVStack_98 = gMapManager->func_ov00_02083a1c(param_2); + iVar1 = this->vfunc_54(&aVStack_98); + if (0x1e < iVar1) { + if (iVar1 < 0x36) { + if (0x34 < iVar1) { + if (param_3 != 0) { + bVar7 = this->func_ov00_0207f104(param_2, &iStack_8c); + if (bVar7) { + return iStack_8c; + } + iVar1 = this->func_ov00_0207f1f4(param_2, &iStack_8c); + if ((iVar1 != 0) && (iStack_8c <= param_2->y)) { + return iStack_8c; + } + } + goto LAB_arm9_ov000__0207e724; + } + if (iVar1 < 0x2a) { + if (-1 < iVar1 + -0x1f) { + // iVar1 = (*(code *) ((iVar1 + -0x1f) * 4 + 0x207e590))(); + return iVar1; + } + } else if (iVar1 == 0x30) { + goto LAB_arm9_ov000__0207e724; + } + } else if (iVar1 < 0x41) { + if (iVar1 == 0x40) { + goto LAB_arm9_ov000__0207e724; + } + } else if (iVar1 == 0x50) { + goto LAB_arm9_ov000__0207e724; + } + goto LAB_0207e518_caseD_a; + } + if (0x1d < iVar1) { + goto LAB_arm9_ov000__0207e724; + } + if (0x17 < iVar1) { + if (iVar1 < 0x1a) { + if (iVar1 == 0x19) { + goto LAB_arm9_ov000__0207e724; + } + } else if (iVar1 == 0x1d) { + goto LAB_arm9_ov000__0207e724; + } + goto LAB_0207e518_caseD_a; + } + if (0x16 < iVar1) { + goto LAB_arm9_ov000__0207e724; + } + if (9 < iVar1) { + if (iVar1 == 0x16) { + goto LAB_arm9_ov000__0207e724; + } + goto LAB_0207e518_caseD_a; + } + switch (iVar1) { + case 0: + default: + LAB_0207e518_caseD_a: + if (this->mUnk_00e == 0) { + if (param_3 == 0) { + uVar2 = this->vfunc_58(&aVStack_98, 5); + bVar7 = uVar2 == 0; + if (bVar7) { + uVar2 = (u32) this->mUnk_008; + } + if (bVar7 && uVar2 == 0) { + iVar1 = this->vfunc_60(&aVStack_98); + return iVar1; + } + } else { + bVar7 = this->func_ov00_0207f104(param_2, &iStack_90); + if (bVar7) { + return iStack_90; + } + iVar1 = this->func_ov00_0207f1f4(param_2, &iStack_90); + if ((iVar1 != 0) && (iStack_90 <= param_2->y)) { + return iStack_90; + } + uVar2 = this->vfunc_58(&aVStack_98, 5); + bVar7 = uVar2 == 0; + if (bVar7) { + uVar2 = (u32) this->mUnk_008; + } + if (bVar7 && uVar2 == 0) { + iVar1 = this->vfunc_60(&aVStack_98); + return iVar1; + } + } + } + break; + case 1: + break; + case 2: + break; + case 3: + break; + case 4: + break; + case 5: + goto LAB_0207e518_caseD_a; + case 6: + goto LAB_0207e518_caseD_a; + case 7: + goto LAB_0207e518_caseD_a; + case 8: + break; + case 9: + } +LAB_arm9_ov000__0207e724: + // iVar1 = func_01fff084(data_027e0f6c, param_2, 2, data_ov000_020ec824); + uVar5 = 0x2000; + __cxa_vec_ctor(&local_58, 3, 0x10, func_ov00_0207e96c, func_ov00_0207e968); + uVar2 = 0; + local_7c = 0; + local_74 = 0; + local_78 = 0xffff0000; + local_88.x = param_2->x; + local_88.y = param_2->y; + local_88.z = param_2->z; + if (0 < iVar1) { + do { + iVar4 = (u32) * (u16 *) (uVar2 * 2 + 0x20ec824) * 0x4c; + iVar6 = *(int *) (data_027e0f6c + 0x20) + iVar4; + local_70 = *(unk16 *) (*(int *) (data_027e0f6c + 0x20) + iVar4); + local_6e = *(unk16 *) (iVar6 + 2); + local_6c = *(unk16 *) (iVar6 + 4); + local_6a = *(unk16 *) (iVar6 + 6); + local_68 = *(unk32 *) (iVar6 + 8); + local_64 = *(unk32 *) (iVar6 + 0xc); + local_60 = *(unk32 *) (iVar6 + 0x10); + local_5c = *(unk32 *) (iVar6 + 0x14); + local_58 = *(unk32 *) (iVar6 + 0x18); + local_54 = *(unk32 *) (iVar6 + 0x1c); + local_50 = *(unk32 *) (iVar6 + 0x20); + local_4c = *(unk32 *) (iVar6 + 0x24); + local_48 = *(unk32 *) (iVar6 + 0x28); + local_44 = *(unk32 *) (iVar6 + 0x2c); + local_40 = *(unk32 *) (iVar6 + 0x30); + local_3c = *(unk32 *) (iVar6 + 0x34); + local_38 = *(unk32 *) (iVar6 + 0x38); + local_34 = *(unk32 *) (iVar6 + 0x3c); + local_30 = *(unk32 *) (iVar6 + 0x40); + local_2c = *(unk32 *) (iVar6 + 0x44); + local_28 = *(unk32 *) (iVar6 + 0x48); + iVar4 = func_01ffe904(&local_70, (unk32 *) &local_88, &local_7c, (unk32 *) &local_94); + if ((iVar4 != 0) && ((int) local_94 < (int) uVar5)) { + uVar5 = local_94; + } + uVar3 = uVar2 + 1; + uVar2 = uVar3 & 0xffff; + } while ((int) (uVar3 & 0xffff) < iVar1); + } + iVar1 = local_88.y; + if ((int) uVar5 < 0x1001) { + uVar2 = (u32) ((u64) uVar5 * 0xffff0000); + //__cxa_vec_cleanup(&local_58, 3, 0x10, func_ov00_0207e968); + return iVar1 + (uVar2 + 0x800 >> 0xc | + (((int) ((u64) uVar5 * 0xffff0000 >> 0x20) - uVar5) + (u32) (0xfffff7ff < uVar2)) * 0x100000); + } + iVar1 = this->vfunc_60(&aVStack_98); + //__cxa_vec_cleanup(&local_58, 3, 0x10, func_ov00_0207e968); + return iVar1; +} + +ARM unk8 *MapBase::func_ov00_0207e940(unk8 *param_1) { + //__cxa_vec_cleanup(param_1 + 0x18, 3, 0x10, func_ov00_0207e968); + return param_1; +} + +ARM void MapBase::func_ov00_0207e968() {} + +ARM void MapBase::func_ov00_0207e96c() {} + +// Non-matching +ARM void MapBase::vfunc_6c(Vec3p *param_2, unk32 *param_3, Vec3p *param_4) { + int iVar1; + u32 uVar2; + u32 uVar3; + int iVar4; + u32 uVar5; + int iVar6; + bool bVar7; + TilePos aVStack_dc; + u32 local_d8; + int local_d4; + int local_d0; + int iStack_cc; + unk32 local_c8; + unk32 local_c4; + unk32 local_c0; + unk16 local_bc; + unk16 local_ba; + unk16 local_b8; + unk16 local_b6; + unk32 local_b4; + unk32 local_b0; + unk32 local_ac; + unk32 local_a8; + unk32 local_a4; + unk32 local_a0; + unk32 local_9c; + unk32 local_98; + unk32 local_94; + unk32 local_90; + unk32 local_8c; + unk32 local_88; + unk32 local_84; + unk32 local_80; + unk32 local_7c; + unk32 local_78; + unk32 local_74; + unk16 local_70; + unk16 local_6e; + unk16 local_6c; + unk16 local_6a; + unk32 local_68; + unk32 local_64; + unk32 local_60; + unk32 local_5c; + unk32 local_58; + unk32 local_54; + unk32 local_50; + unk32 local_4c; + unk32 local_48; + unk32 local_44; + unk32 local_40; + unk32 local_3c; + unk32 local_38; + unk32 local_34; + unk32 local_30; + unk32 local_2c; + unk32 local_28; + + aVStack_dc = gMapManager->func_ov00_02083a1c(param_2); + iVar1 = this->vfunc_54(&aVStack_dc); + if (0x1e < iVar1) { + if (iVar1 < 0x36) { + if (0x34 < iVar1) { + goto LAB_arm9_ov000__0207eb04; + } + if (iVar1 < 0x2a) { + if (-1 < iVar1 + -0x1f) { + //(*(code *) ((iVar1 + -0x1f) * 4 + 0x207ea4c))(); + return; + } + } else if (iVar1 == 0x30) { + goto LAB_arm9_ov000__0207eb04; + } + } else if (iVar1 < 0x41) { + if (iVar1 == 0x40) { + goto LAB_arm9_ov000__0207eb04; + } + } else if (iVar1 == 0x50) { + goto LAB_arm9_ov000__0207eb04; + } + goto LAB_0207e9d4_caseD_a; + } + if (0x1d < iVar1) { + goto LAB_arm9_ov000__0207eb04; + } + if (0x17 < iVar1) { + if (iVar1 < 0x1a) { + if (iVar1 == 0x19) { + goto LAB_arm9_ov000__0207eb04; + } + } else if (iVar1 == 0x1d) { + goto LAB_arm9_ov000__0207eb04; + } + goto LAB_0207e9d4_caseD_a; + } + if (0x16 < iVar1) { + goto LAB_arm9_ov000__0207eb04; + } + if (9 < iVar1) { + if (iVar1 == 0x16) { + goto LAB_arm9_ov000__0207eb04; + } + goto LAB_0207e9d4_caseD_a; + } + switch (iVar1) { + case 0: + default: + LAB_0207e9d4_caseD_a: + if (this->mUnk_00e == 0) { + uVar2 = this->vfunc_58(&aVStack_dc, 5); + bVar7 = uVar2 == 0; + if (bVar7) { + uVar2 = (u32) this->mUnk_008; + } + if (bVar7 && uVar2 == 0) { + iVar1 = this->vfunc_60(&aVStack_dc); + *param_3 = iVar1; + param_4->x = 0; + param_4->y = 0x1000; + param_4->z = 0; + return; + } + } + break; + case 1: + break; + case 2: + break; + case 3: + break; + case 4: + break; + case 5: + goto LAB_0207e9d4_caseD_a; + case 6: + goto LAB_0207e9d4_caseD_a; + case 7: + goto LAB_0207e9d4_caseD_a; + case 8: + break; + case 9: + } +LAB_arm9_ov000__0207eb04: + iVar1 = func_01fff084(data_027e0f6c, param_2, 2, data_ov000_020ec864, 0x20, 0); + uVar5 = 0x2000; + __cxa_vec_ctor(&local_58, 3, 0x10, func_ov00_0207e96c, func_ov00_0207e968); + __cxa_vec_ctor(&local_a4, 3, 0x10, func_ov00_0207e96c, func_ov00_0207e968); + uVar2 = 0; + local_c8 = 0; + local_c0 = 0; + local_c4 = 0xffff0000; + local_d4 = param_2->x; + local_d0 = param_2->y; + iStack_cc = param_2->z; + if (0 < iVar1) { + do { + iVar4 = (u32) * (u16 *) (uVar2 * 2 + data_ov000_020ec864) * 0x4c; + iVar6 = *(int *) (data_027e0f6c + 0x20) + iVar4; + local_70 = *(unk16 *) (*(int *) (data_027e0f6c + 0x20) + iVar4); + local_6e = *(unk16 *) (iVar6 + 2); + local_6c = *(unk16 *) (iVar6 + 4); + local_6a = *(unk16 *) (iVar6 + 6); + local_68 = *(unk32 *) (iVar6 + 8); + local_64 = *(unk32 *) (iVar6 + 0xc); + local_60 = *(unk32 *) (iVar6 + 0x10); + local_5c = *(unk32 *) (iVar6 + 0x14); + local_58 = *(unk32 *) (iVar6 + 0x18); + local_54 = *(unk32 *) (iVar6 + 0x1c); + local_50 = *(unk32 *) (iVar6 + 0x20); + local_4c = *(unk32 *) (iVar6 + 0x24); + local_48 = *(unk32 *) (iVar6 + 0x28); + local_44 = *(unk32 *) (iVar6 + 0x2c); + local_40 = *(unk32 *) (iVar6 + 0x30); + local_3c = *(unk32 *) (iVar6 + 0x34); + local_38 = *(unk32 *) (iVar6 + 0x38); + local_34 = *(unk32 *) (iVar6 + 0x3c); + local_30 = *(unk32 *) (iVar6 + 0x40); + local_2c = *(unk32 *) (iVar6 + 0x44); + local_28 = *(unk32 *) (iVar6 + 0x48); + iVar4 = func_01ffe904(&local_70, &local_d4, &local_c8, (unk32 *) &local_d8); + if ((iVar4 != 0) && ((int) local_d8 < (int) uVar5)) { + local_bc = local_70; + local_ba = local_6e; + local_b8 = local_6c; + local_b6 = local_6a; + local_b4 = local_68; + local_b0 = local_64; + local_ac = local_60; + local_a8 = local_5c; + local_a4 = local_58; + local_a0 = local_54; + local_9c = local_50; + local_98 = local_4c; + local_94 = local_48; + local_90 = local_44; + local_8c = local_40; + local_88 = local_3c; + local_84 = local_38; + local_80 = local_34; + local_7c = local_30; + local_78 = local_2c; + local_74 = local_28; + uVar5 = local_d8; + } + uVar3 = uVar2 + 1; + uVar2 = uVar3 & 0xffff; + } while ((int) (uVar3 & 0xffff) < iVar1); + } + if (uVar5 <= 0x1000) { + uVar2 = (u32) ((u64) uVar5 * 0xffff0000); + param_4->x = local_b4; + param_4->y = local_b0; + param_4->z = local_ac; + *param_3 = local_d0 + (uVar2 + 0x800 >> 0xc | + (((int) ((u64) uVar5 * 0xffff0000 >> 0x20) - uVar5) + (u32) (0xfffff7ff < uVar2)) * 0x100000); + } else { + iVar1 = this->vfunc_60(&aVStack_dc); + *param_3 = iVar1; + param_4->x = 0; + param_4->y = 0x1000; + param_4->z = 0; + } + //__cxa_vec_cleanup(&local_a4,3,0x10,func_ov00_0207e968); + //__cxa_vec_cleanup(&local_58,3,0x10,func_ov00_0207e968); +} + +// Non-matching +ARM u16 MapBase::vfunc_70(Vec3p *param_2) { + int iVar1; + u32 uVar2; + int iVar3; + int iVar4; + unk32 dVar5; // dword + u32 uVar6; + int iVar7; + TilePos aVStack_90; + int local_8c; + int local_88; + int iStack_84; + int iStack_80; + unk32 local_7c; + unk32 local_78; + unk32 local_74; + unk16 local_70; + unk16 local_6e; + unk16 local_6c; + unk16 local_6a; + unk32 local_68; + unk32 local_64; + unk32 local_60; + unk32 local_5c; + unk32 local_58; + unk32 local_54; + unk32 local_50; + unk32 local_4c; + unk32 local_48; + unk32 local_44; + unk32 local_40; + unk32 local_3c; + unk32 local_38; + unk32 local_34; + unk32 local_30; + unk32 local_2c; + unk32 local_28; + + aVStack_90 = gMapManager->func_ov00_02083a1c(param_2); + iVar1 = func_01fff084(data_027e0f6c, param_2, 2, 0x20ec8a4, 0x20, 0); + iVar4 = 0x2000; + dVar5 = 0xffff; + __cxa_vec_ctor(&local_58, 3, 0x10, func_ov00_0207e96c, func_ov00_0207e968); + uVar6 = 0; + local_7c = 0; + local_74 = 0; + local_78 = 0xffff0000; + local_88 = param_2->x; + iStack_84 = param_2->y; + iStack_80 = param_2->z; + if (0 < iVar1) { + do { + iVar3 = (u32) * (u16 *) (uVar6 * 2 + data_ov000_020ec8a4) * 0x4c; + iVar7 = *(int *) (data_027e0f6c + 0x20) + iVar3; + local_70 = *(unk16 *) (*(int *) (data_027e0f6c + 0x20) + iVar3); + local_6e = *(unk16 *) (iVar7 + 2); + local_6c = *(unk16 *) (iVar7 + 4); + local_6a = *(unk16 *) (iVar7 + 6); + local_68 = *(unk32 *) (iVar7 + 8); + local_64 = *(unk32 *) (iVar7 + 0xc); + local_60 = *(unk32 *) (iVar7 + 0x10); + local_5c = *(unk32 *) (iVar7 + 0x14); + local_58 = *(unk32 *) (iVar7 + 0x18); + local_54 = *(unk32 *) (iVar7 + 0x1c); + local_50 = *(unk32 *) (iVar7 + 0x20); + local_4c = *(unk32 *) (iVar7 + 0x24); + local_48 = *(unk32 *) (iVar7 + 0x28); + local_44 = *(unk32 *) (iVar7 + 0x2c); + local_40 = *(unk32 *) (iVar7 + 0x30); + local_3c = *(unk32 *) (iVar7 + 0x34); + local_38 = *(unk32 *) (iVar7 + 0x38); + local_34 = *(unk32 *) (iVar7 + 0x3c); + local_30 = *(unk32 *) (iVar7 + 0x40); + local_2c = *(unk32 *) (iVar7 + 0x44); + local_28 = *(unk32 *) (iVar7 + 0x48); + iVar3 = func_01ffe904(&local_70, &local_88, &local_7c, &local_8c); + + if ((iVar3 != 0) && (local_8c < iVar4)) { + dVar5 = (unk32) * (u16 *) (uVar6 * 2 + data_ov000_020ec8a4); + iVar4 = local_8c; + } + uVar2 = uVar6 + 1; + uVar6 = uVar2 & 0xffff; + } while ((int) (uVar2 & 0xffff) < iVar1); + } + //__cxa_vec_cleanup(&local_58, 3, 0x10, func_ov00_0207e968); + return dVar5; +} + +// Non-matching +ARM unk32 *MapBase::vfunc_74(Vec3p *param_2) { + int iVar1; + u32 uVar2; + int iVar3; + int iVar4; + int *piVar5; + bool bVar6; + bool bVar7; + TilePos aVStack_38; + AABB local_34; + + aVStack_38 = gMapManager->func_ov00_02083a1c(param_2); + local_34.min.x = param_2->x; + local_34.min.y = param_2->y; + local_34.min.z = param_2->z; + local_34.max.x = param_2->x; + local_34.max.y = param_2->y; + local_34.max.z = param_2->z; + local_34.GrowScalar(0x800); + iVar1 = func_01fff264(data_027e0f6c, &local_34, 8, data_ov000_020ec8e4, 0x20, 0); + iVar4 = 0; + if (0 < iVar1) { + do { + uVar2 = (u32) * (u16 *) (iVar4 * 2 + data_ov000_020ec8e4); + piVar5 = *(int **) (*(int *) (data_027e0f6c + 0x40) + uVar2 * 4); + bVar6 = piVar5 != (int *) 0x0; + if (bVar6) { + uVar2 = (u32) * (unk8 *) (piVar5 + 1); + } + bVar7 = uVar2 != 0; + if (bVar6 && bVar7) { + uVar2 = (u32) * (unk8 *) ((int) piVar5 + 5); + } + /*if ((((bVar6 && bVar7) && uVar2 != 0) && (2 < (piVar5[3] & 0x1fU))) && + (iVar3 = (**(code **) (*piVar5 + 0x48))(piVar5, param_2), iVar3 != 0)) { + return piVar5; + }*/ + iVar4++; + } while (iVar4 < iVar1); + } + return NULL; +} + +ARM void MapBase::func_ov00_0207f100() {} + +// Non-matching +ARM bool MapBase::func_ov00_0207f104(Vec3p *param_2, unk32 *param_3) { + char cVar1; + int *piVar2; + int iVar3; + int iVar4; + TilePos aVStack_18; + + aVStack_18 = gMapManager->func_ov00_02083a1c(param_2); + piVar2 = this->vfunc_78(&aVStack_18); + if (piVar2 == NULL) { + return false; + } + // iVar3 = (**(code **) (*piVar2 + 0x58))(); + if (iVar3 != 0) { + // iVar3 = (**(code **) (*piVar2 + 0x54))(); + if (iVar3 == 0) { + cVar1 = 0; + } else { + cVar1 = *(char *) (iVar3 + 5); + } + if (cVar1 != 0) { + // iVar3 = func_ov000_0208b79c(piVar2, param_2); + if (iVar3 != 0) { + // piVar2 = (int *) (**(code **) (*piVar2 + 0x54))(); + if (piVar2 == NULL) { + iVar3 = 0; + } else { + // iVar3 = (**(code **) (*piVar2 + 0x44))(); + } + iVar4 = this->vfunc_60(&aVStack_18); + *param_3 = iVar4 + iVar3; + return true; + } + return false; + } + return false; + } + return false; +} + +// Non-matching +ARM unk32 MapBase::func_ov00_0207f1f4(Vec3p *param_2, unk32 *param_3) { + int iVar1; + u32 uVar2; + int iVar3; + int iVar4; + int *piVar5; + bool bVar6; + bool bVar7; + TilePos aVStack_58; + unk8 auStack_54[16]; + unk32 local_44; + AABB local_3c; + + aVStack_58 = gMapManager->func_ov00_02083a1c(param_2); + local_3c.min.x = param_2->x; + local_3c.min.y = param_2->y; + local_3c.min.z = param_2->z; + local_3c.max.x = param_2->x; + local_3c.max.y = param_2->y; + local_3c.max.z = param_2->z; + local_3c.GrowScalar(0x800); + iVar1 = func_01fff264(data_027e0f6c, &local_3c, 8, data_ov000_020ec924, 0x20, 0); + iVar4 = 0; + if (0 < iVar1) { + do { + uVar2 = (u32) * (u16 *) (iVar4 * 2 + data_ov000_020ec924); + piVar5 = *(int **) (*(int *) (data_027e0f6c + 0x40) + uVar2 * 4); + bVar6 = piVar5 != (int *) 0x0; + if (bVar6) { + uVar2 = (u32) * (unk8 *) (piVar5 + 1); + } + bVar7 = uVar2 != 0; + if (bVar6 && bVar7) { + uVar2 = (u32) * (unk8 *) ((int) piVar5 + 5); + } + /*if ((((bVar6 && bVar7) && uVar2 != 0) && (2 < (piVar5[3] & 0x1fU))) && + (iVar3 = (**(code **) (*piVar5 + 0x48))(piVar5, param_2), iVar3 != 0)) { + (**(code **) (*piVar5 + 0x2c))(piVar5, auStack_54); + *param_3 = local_44; + return 1; + }*/ + iVar4++; + } while (iVar4 < iVar1); + } + return 0; +} + +ARM unk32 MapBase::vfunc_88() { + return 0; +} + +ARM unk32 MapBase::vfunc_8c() { + return 0; +} + +ARM void MapBase::vfunc_9c() {} + +ARM void MapBase::vfunc_a0() {} + +ARM unk32 MapBase::vfunc_a4(unk8 *param_1) { + return 0; +} + +ARM void MapBase::vfunc_a8() {} + +ARM void MapBase::vfunc_ac() {} + +ARM unk32 *MapBase::vfunc_78(TilePos *param_1) { + return 0; +} + +ARM s32 MapBase::vfunc_7c(s32 param_1, unk32 *param_2, s32 param_3, short param_4[4]) { + return 1; +} + +ARM bool MapBase::vfunc_80(TilePos *param_2) { + return true; +} + +ARM bool MapBase::vfunc_84(UnkStruct_0207f38c *param_2) { + TilePos tilePos(param_2->mUnk_14.x, param_2->mUnk_14.y); + return this->vfunc_80(&tilePos); +} + +ARM bool MapBase::func_ov00_0207f38c(UnkStruct_0207f38c *param_2) { + if (this->vfunc_84(param_2)) { + return data_027e0f68->func_ov000_0208d820(param_2); + } + return false; +} + +// Non-matching +ARM void MapBase::vfunc_90(TilePos *param_2, unk32 param_3) { + int iVar1; + int iVar2; + int *piVar3; + + iVar1 = this->vfunc_54(param_2); + if (iVar1 == param_3) { + return; + } + this->vfunc_bc(/*param_2,param_3,*(code **)(param_1->vtable + 0xbc),param_4*/); + iVar2 = this->vfunc_5c(/*param_2*/); + if (param_3 == 0x14) { + this->vfunc_c0(/*param_2,(iVar2 + -3) * 0x1000000 >> 0x18*/); + } else if (iVar1 == 0x14) { + this->vfunc_c0(/*param_2,(iVar2 + 3) * 0x1000000 >> 0x18*/); + } + piVar3 = (int *) this->vfunc_78(param_2); + if (piVar3 == NULL) { + return; + } + //(**(code **)(*piVar3 + 0x44))(piVar3,param_3); +} + +ARM void MapBase::vfunc_94() {} + +// Non-matching +ARM void MapBase::func_ov00_0207f4a4(Vec2s *param_2, unk32 param_3) { + u32 uVar1; + u32 uVar2; + u32 uVar3; + u32 uVar4; + TilePos tilePos; + + tilePos.x = (unk8) ((int) param_2->x / 2); + tilePos.y = (unk8) ((int) param_2->y / 2); + uVar3 = (int) param_2->x >> 0x1f; + uVar4 = (int) param_2->y >> 0x1f; + uVar1 = param_2->x * -0x80000000 + uVar3 >> 0x1f | uVar3 << 1; + uVar2 = param_2->y * -0x80000000 + uVar4 >> 0x1f | uVar4 << 1; + if (uVar1 == uVar3 && uVar2 == uVar4) { + param_3 = 0; + } else if (uVar1 - uVar3 == 1 && uVar2 == uVar4) { + param_3 = 1; + } else if (uVar1 - uVar3 == 1 && uVar2 - uVar4 == 1) { + param_3 = 3; + } else if (uVar1 == uVar3 && uVar2 - uVar4 == 1) { + param_3 = 2; + } + this->vfunc_58(&tilePos, param_3); +} + +ARM void MapBase::func_ov00_0207f53c(Vec2s *param_1, MapBase *param_2, Vec3p *param_3) { + u32 uVar1; + + param_1->x = 0; + param_1->y = 0; + uVar1 = CoDivide64By32(param_3->x, 0x800); + param_1->x = (short) ((int) (uVar1 + 0x800) >> 0xc); + uVar1 = CoDivide64By32(param_3->z, 0x800); + param_1->y = (short) ((int) (uVar1 + 0x800) >> 0xc); + return; +} + +ARM void MapBase::func_ov00_0207f588(Vec2s *param_1, MapBase *param_2, TilePos *param_3, unk32 param_4) { + param_1->x = 0; + param_1->y = 0; + switch (param_4) { + case 0: + param_1->x = (u16) param_3->x << 1; + param_1->y = (u16) param_3->y << 1; + return; + case 1: + param_1->x = (u16) param_3->x * 2 + 1; + param_1->y = (u16) param_3->y << 1; + return; + case 2: + param_1->x = (u16) param_3->x << 1; + param_1->y = (u16) param_3->y * 2 + 1; + return; + case 3: + param_1->x = (u16) param_3->x * 2 + 1; + param_1->y = (u16) param_3->y * 2 + 1; + return; + default: + return; + } +} + +// Non-matching +ARM void MapBase::func_ov00_0207f630(Vec2s *param_2, Vec3p *param_3) { + u32 uVar1; + u32 uVar2; + u32 uVar3; + u32 uVar4; + + uVar1 = param_2->y * 0x1000; + uVar2 = param_2->x * 0x1000; + uVar3 = param_2->x * 0x800000; + uVar4 = param_2->y * 0x800000; + param_3->x = uVar4 + 0x800 >> 0xc | ((((s32) uVar2 >> 0x1f) << 0xb | uVar2 >> 0x15) + (0xfffff7ff < uVar4)) * 0x100000; + param_3->y = 0; + param_3->z = uVar3 + 0x800 >> 0xc | ((((s32) uVar1 >> 0x1f) << 0xb | uVar1 >> 0x15) + (0xfffff7ff < uVar3)) * 0x100000; +} + +ARM unk32 MapBase::GetTileStartX(unk32 x) { + return this->mOffset.x + x * 0x1000; +} + +ARM unk32 MapBase::GetTileStartZ(unk32 z) { + return this->mOffset.z + z * 0x1000; +} + +ARM unk32 MapBase::GetTileEndX(unk32 x) { + return this->GetTileStartX(x) + 0x1000; +} + +ARM unk32 MapBase::GetTileEndZ(unk32 z) { + return this->GetTileStartZ(z) + 0x1000; +} + +// Non-matching +ARM void MapBase::GetTileBounds(TilePos *tilePos, AABB *bounds) { + Vec3p start; + Vec3p end; + + this->GetTileStartX(tilePos->x); // what's the purpose of this? + start.z = this->GetTileStartZ(tilePos->y); + start.x = this->GetTileStartX(tilePos->x); + start.y = FLOAT_TO_Q20(-1.2001); // why not just -1.2? + + end.z = this->GetTileEndZ(tilePos->y); + end.y = this->vfunc_60(tilePos); + end.x = this->GetTileEndX(tilePos->x); + + bounds->min = start; + bounds->max = end; +} + +ARM s32 MapBase::GetClampedTileX(s32 worldX) { + int iVar1; + int iVar2; + + iVar2 = worldX - this->mOffset.x >> 0xc; + if (iVar2 < 0) { + iVar2 = 0; + } + iVar1 = (u16) this->mWidth - 1; + if (iVar2 >= iVar1) { + iVar2 = iVar1; + } + return iVar2; +} + +ARM s32 MapBase::GetClampedTileY(s32 worldZ) { + int iVar1; + int iVar2; + + iVar2 = worldZ - this->mOffset.z >> 0xc; + if (iVar2 < 0) { + iVar2 = 0; + } + iVar1 = (u16) this->mHeight - 1; + if (iVar2 >= iVar1) { + iVar2 = iVar1; + } + return iVar2; +} + +ARM unk32 MapBase::GetTileX(s32 worldX) { + return worldX - this->mOffset.x >> 0xc; +} + +ARM unk32 MapBase::GetTileY(s32 worldZ) { + return worldZ - this->mOffset.z >> 0xc; +} + +ARM bool MapBase::IsInBounds(Vec3p *tileWorldPos) { + int iVar1 = this->GetTileX(tileWorldPos->x); + int iVar2 = this->GetTileY(tileWorldPos->z); + if ((iVar1 < 0) || (iVar1 >= (int) (u16) this->mWidth) || (iVar2 < 0) || (iVar2 >= (int) (u16) this->mHeight)) { + return false; + } + return true; +} + +// Non-matching +ARM unk32 MapBase::AddEntrance(Entrance *param_2) { + int iVar1; + int iVar2; + u32 uVar3; + Entrance *pEVar4; + + uVar3 = this->mEntrances.mSize; + if ((u32) uVar3 < this->mEntrances.mCapacity) { + this->mEntrances.mSize = uVar3 + 1; + pEVar4 = this->mEntrances.mElements + uVar3; + pEVar4->mPos = param_2->mPos; + pEVar4->mAngle = param_2->mAngle; + pEVar4->mId = param_2->mId; + pEVar4->mUnk_10 = param_2->mUnk_10; + return pEVar4->mUnk_10; + } + return this->mEntrances.push_back(*param_2); +} + +// Non-matching +ARM Entrance *MapBase::FindEntrance(unk32 id) { + Entrance *iter; + Entrance *begin; + Entrance *end; + + begin = this->mEntrances.mElements; + end = begin + this->mEntrances.mSize; + + for (iter = begin; (s32) iter != (s32) end; iter++) { + if (id == iter->mId) { + return iter; + } + } + return begin; +} + +ARM void MapBase::func_ov00_0207f924(unk32 param_2) { + this->mCurrViewpointId[param_2] = this->mUnk_018[param_2]; +} + +ARM unk32 *MapBase::func_ov00_0207f934() { + return !this->mUnk_140 ? NULL : this->mUnk_140->mUnk_60; +} + +ARM void MapBase::func_ov00_0207f948(unk32 *param_2) { + if (this->mUnk_140 != NULL) { + this->mUnk_140->mUnk_60 = param_2; + } +} + +// Non-matching +ARM void MapBase::AddTrigger(TriggerParams *param_2) { + void *pTVar1; + u32 size; + TriggerBase *local_14; + + local_14 = NULL; + if (param_2->isAABB_Unk1) { + pTVar1 = new(data_027e0ce0[1], 4) TriggerAABB_Unk1(param_2); + } else if (param_2->isAABB_Unk2 == true) { + pTVar1 = new(data_027e0ce0[1], 4) TriggerAABB_Unk2(param_2); + } else if (param_2->isSphere == true) { + pTVar1 = new(data_027e0ce0[1], 4) TriggerSphere(param_2); + } else { + pTVar1 = new(data_027e0ce0[1], 4) TriggerAABB(param_2); + } + + local_14 = (TriggerBase *) pTVar1; + local_14->vfunc_08(); + size = this->mTriggers.mSize; + if (size < (u32) this->mTriggers.mCapacity) { + this->mTriggers.mSize = size + 1; + size--; + this->mTriggers.mElements[size] = local_14; + } + this->mTriggers.push_back(local_14); +} + +ARM void TriggerBase::vfunc_08() {} + +ARM s32 MapBase::GetTriggerBoundingBox(unk32 param_2, AABB *param_3) { + int iVar3; + TriggerBase **p; + AABB local_38; + + iVar3 = 0; + for (p = this->mTriggers.mElements; (s32) p != (s32) (this->mTriggers.mElements + this->mTriggers.mSize); p++) { + if (param_2 == (*p)->mId && (*p)->GetBoundingBox(&local_38)) { + iVar3++; + param_3->min.x = local_38.min.x; + param_3->min.y = local_38.min.y; + param_3->min.z = local_38.min.z; + param_3->max.x = local_38.max.x; + param_3->max.y = local_38.max.y; + param_3->max.z = local_38.max.z; + } + } + return iVar3; +} + +ARM bool TriggerBase::GetBoundingBox(AABB *bbox) { + return false; +} + +ARM u32 MapBase::GetTriggerBoundingBoxes(s32 param_2, AABB *param_3, s32 param_4) { + u32 boxesFound; + TriggerBase **p; + AABB local_38; + + boxesFound = 0; + for (p = this->mTriggers.mElements; (s32) p != (s32) (this->mTriggers.mElements + this->mTriggers.mSize); p++) { + if (param_2 == (*p)->mId && (*p)->GetBoundingBox(&local_38)) { + boxesFound++; + param_3->min.x = local_38.min.x; + param_3->min.y = local_38.min.y; + param_3->min.z = local_38.min.z; + param_3->max.x = local_38.max.x; + param_3->max.y = local_38.max.y; + param_3->max.z = local_38.max.z; + param_3++; + } + if (boxesFound >= param_4) { + return boxesFound; + } + } + return boxesFound; +} + +// Non-matching +ARM u8 MapBase::GetOverlappingTrigger(Vec3p *param_2) { + TriggerBase **p; + + for (p = this->mTriggers.mElements; (s32) p != (s32) (this->mTriggers.mElements + this->mTriggers.mSize); p++) { + if ((*p)->Overlaps(param_2)) { + return (*p)->mId; + } + } + return 0; +} + +ARM bool TriggerBase::Overlaps(Vec3p *point) { + return false; +} + +// Non-matching +ARM TriggerBase *MapBase::FindTrigger(unk32 type) { + TriggerBase **p; + + for (p = this->mTriggers.mElements; (s32) p != (s32) (this->mTriggers.mElements + this->mTriggers.mSize); p++) { + + if (type == (*p)->mId) { + return *p; + } + this->mTriggers.mElements = p; // why does this give a higher match? is this almost correct? + } + return NULL; +} + +// Non-matching +ARM unk32 MapBase::GetOverlappingTriggers(Vec3p *param_2, TriggerBase **triggers, unk32 capacity) { + unk32 uVar2; + TriggerBase *trigger; + TriggerBase **iter; + + iter = this->mTriggers.mElements; + int var = (int) this->mTriggers.mElements + this->mTriggers.mSize * 4; + uVar2 = 0; + if (iter != (TriggerBase **) var) { + do { + if ((u32) uVar2 >= capacity) { + break; + } + trigger = *iter; + + if (trigger->Overlaps(param_2)) { + triggers[uVar2] = trigger; + uVar2++; + } + iter++; + } while (iter != this->mTriggers.mElements + this->mTriggers.mSize); + } + return uVar2; +} + +ARM bool MapBase::IsTriggerTypeOverlapped(unk32 type, Vec3p *param_3) { + TriggerBase **p; + + if (type == 0) { + return true; + } + for (p = this->mTriggers.mElements; (s32) p != (s32) (this->mTriggers.mElements + this->mTriggers.mSize); p++) { + if (type == (*p)->mId && (*p)->Overlaps(param_3)) { + return true; + } + } + return false; +} + +ARM bool MapBase::AnyTrigger_func_0c(unk32 type) { + TriggerBase **p; + for (p = this->mTriggers.mElements; (s32) p != (s32) (this->mTriggers.mElements + this->mTriggers.mSize); p++) { + if (type == (*p)->mId) { + (*p)->vfunc_0c(true); + } + } + return true; +} + +ARM bool TriggerBase::vfunc_0c(bool param_2) { + return false; +} + +ARM void MapBase::Trigger_vfunc_08() { + TriggerBase **p; + for (p = this->mTriggers.mElements; (s32) p != (s32) (this->mTriggers.mElements + this->mTriggers.mSize); p++) { + (*p)->vfunc_08(); + } +} + +ARM bool MapBase::AddTrigger(TriggerBase *param_2) { + TriggerBase *pTVar1; + TriggerBase **iter; + u32 uVar2; + TriggerBase **end; + + if ((u32) this->mTriggers.mSize >= 0x40) { + return false; + } + iter = this->mTriggers.mElements; + pTVar1 = (TriggerBase *) this->mTriggers.mSize; + end = iter + (int) pTVar1; + while (true) { + if (iter != end) { + pTVar1 = *iter; + } + if (iter == end || pTVar1 == param_2) { + break; + } + iter++; + } + if (iter != end) { + return false; + } + if (param_2->mUnk_04) { + return false; + } + uVar2 = this->mTriggers.mSize; + if (uVar2 < (u32) this->mTriggers.mCapacity) { + this->mTriggers.mSize = uVar2 + 1; + this->mTriggers.mElements[uVar2] = param_2; + } else { + this->mTriggers.push_back(param_2); + } + return true; +} + +ARM bool MapBase::func_ov00_0207ff88(TriggerBase *param_2) { + TriggerBase *pTVar1; + TriggerBase **ppTVar2; + TriggerBase **first; + TriggerBase **ppTVar3; + TriggerBase **ppTVar4; + + if (!param_2->mUnk_04) { + return false; + } + first = this->mTriggers.mElements; + pTVar1 = (TriggerBase *) this->mTriggers.mSize; + ppTVar2 = first + (int) pTVar1; + while (true) { + if (first != ppTVar2) { + pTVar1 = *first; + } + if (first == ppTVar2 || pTVar1 == param_2) { + break; + } + first++; + } + ppTVar3 = first; + if (first != ppTVar2) { + ppTVar3 = first + 1; + } + ppTVar4 = first; + if (first != ppTVar2 && ppTVar3 != ppTVar2) { + do { + pTVar1 = *ppTVar3; + ppTVar3++; + first = ppTVar4; + if (pTVar1 != param_2) { + first = ppTVar4 + 1; + *ppTVar4 = pTVar1; + } + ppTVar4 = first; + } while (ppTVar3 != ppTVar2); + } + this->mTriggers.erase(first, this->mTriggers.mElements + this->mTriggers.mSize); + return true; +} + +ARM void MapBase::func_ov00_0208005c(unk32 param_2, unk32 param_3, unk32 param_4) { + this->mUnk_144->func_ov000_0209c1e4(param_2, param_3, param_4); +} + +ARM void MapBase::func_ov00_0208006c(unk32 param_2, unk32 param_3) { + this->mUnk_144->func_ov000_0209c2b4(param_2, param_3); +} + +ARM void MapBase::func_ov00_0208007c(unk32 param_2, unk32 param_3) { + this->mUnk_144->func_ov000_0209c2d0(param_2, param_3); +} + +ARM void MapBase::func_ov00_0208008c(u32 param_2) { + this->mUnk_144->func_ov000_0209c8e4(param_2); +} + +// Non-matching +ARM void MapBase::AddExit(Exit *param_2) { + u32 uVar1; + Exit *pEVar2; + + uVar1 = this->mExits.mSize; + if (uVar1 < this->mExits.mCapacity) { + this->mExits.mSize = uVar1 + 1; + uVar1 = this->mExits.mSize - 1; // why? + pEVar2 = this->mExits.mElements; + pEVar2[uVar1].mDestCourse = param_2->mDestCourse; + pEVar2[uVar1].mUnk_04 = param_2->mUnk_04; + pEVar2[uVar1].mUnk_08 = param_2->mUnk_08; + pEVar2[uVar1].mUnk_0c = param_2->mUnk_0c; + pEVar2[uVar1].mUnk_10 = param_2->mUnk_10; + pEVar2[uVar1].mDestMap = param_2->mDestMap; + pEVar2[uVar1].mDestEntrance = param_2->mDestEntrance; + pEVar2[uVar1].mUnk_14 = param_2->mUnk_14; + pEVar2[uVar1].mUnk_15 = param_2->mUnk_15; + return; + } + this->mExits.push_back(*param_2); +} + +// Non-matching +ARM u8 MapBase::func_ov00_02080140(Exit *param_2) { + Exit *pEVar1; + u32 uVar2; + Exit *pEVar3; + Exit *pEVar4; + MapBase_Unk1 MStack_54; + + MStack_54.mExit_04.mDestCourse = param_2->mDestCourse; + MStack_54.mExit_04.mUnk_04 = param_2->mUnk_04; + MStack_54.mExit_04.mUnk_08 = param_2->mUnk_08; + MStack_54.mExit_04.mUnk_0c = param_2->mUnk_0c; + pEVar3 = &MStack_54.mExit_04; + MStack_54.mExit_04.mUnk_10 = param_2->mUnk_10; + MStack_54.mExit_04.mDestMap = param_2->mDestMap; + MStack_54.mExit_04.mDestEntrance = param_2->mDestEntrance; + MStack_54.mExit_04.mUnk_14 = param_2->mUnk_14; + MStack_54.mExit_04.mUnk_15 = param_2->mUnk_15; + pEVar1 = this->mExits.mElements; + MStack_54.mExit_1c.mDestCourse = MStack_54.mExit_04.mDestCourse; + MStack_54.mExit_1c.mUnk_04 = MStack_54.mExit_04.mUnk_04; + MStack_54.mExit_1c.mUnk_08 = MStack_54.mExit_04.mUnk_08; + MStack_54.mExit_1c.mUnk_0c = MStack_54.mExit_04.mUnk_0c; + MStack_54.mExit_1c.mUnk_10 = MStack_54.mExit_04.mUnk_10; + MStack_54.mExit_1c.mDestMap = MStack_54.mExit_04.mDestMap; + MStack_54.mExit_1c.mDestEntrance = MStack_54.mExit_04.mDestEntrance; + MStack_54.mExit_1c.mUnk_14 = MStack_54.mExit_04.mUnk_14; + MStack_54.mExit_1c.mUnk_15 = MStack_54.mExit_04.mUnk_15; + MStack_54.func_ov00_02080324(pEVar1, (pEVar1 + this->mExits.mSize), pEVar3); + pEVar1 = this->mExits.mElements; + pEVar4 = pEVar1 + this->mExits.mSize; + if ((Exit *) MStack_54.mUnk_00 == pEVar4) { + if (pEVar1 != pEVar4) { + pEVar3 = pEVar1 + 1; + } + if (pEVar1 != pEVar4 && pEVar3 != pEVar4) { + do { + if (pEVar1->mUnk_14 < pEVar3->mUnk_14) { + pEVar1 = pEVar3; + } + pEVar3++; + } while (pEVar3 != pEVar4); + } + if (pEVar1 == this->mExits.mElements + this->mExits.mSize) { + MStack_54.mExit_1c.mUnk_14 = 1; + } else { + MStack_54.mExit_1c.mUnk_14 = pEVar1->mUnk_14 + 1; + } + uVar2 = this->mExits.mSize; + if (uVar2 < (u32) this->mExits.mCapacity) { + this->mExits.mSize = uVar2 + 1; + pEVar3 = this->mExits.mElements; + pEVar3[uVar2].mDestCourse = MStack_54.mExit_1c.mDestCourse; + pEVar3[uVar2].mUnk_04 = MStack_54.mExit_1c.mUnk_04; + pEVar3[uVar2].mUnk_08 = MStack_54.mExit_1c.mUnk_08; + pEVar3[uVar2].mUnk_0c = MStack_54.mExit_1c.mUnk_0c; + pEVar3[uVar2].mUnk_10 = MStack_54.mExit_1c.mUnk_10; + pEVar3[uVar2].mDestMap = MStack_54.mExit_1c.mDestMap; + pEVar3[uVar2].mDestEntrance = MStack_54.mExit_1c.mDestEntrance; + pEVar3[uVar2].mUnk_14 = MStack_54.mExit_1c.mUnk_14; + pEVar3[uVar2].mUnk_15 = MStack_54.mExit_1c.mUnk_15; + } else { + this->mExits.push_back(MStack_54.mExit_1c); + } + } else { + MStack_54.mExit_1c.mUnk_14 = ((Exit *) MStack_54.mUnk_00)->mUnk_14; + } + return MStack_54.mExit_1c.mUnk_14; +} + +struct UnkStruct_02080324 { // Is this UnkStruct_027e0d38_UnkC? Members don't match, causes overlay checksum issues, but has + // same method. Could it be Exit? + /* 00 */ unk32 mUnk_00[2]; + /* 08 */ unk32 mUnk_08; + /* 0c */ unk8 mUnk_0c; + /* 0d */ unk8 mUnk_0d; + + unk32 func_ov000_020a5e9c(void); +}; + +// Non-matching +ARM void MapBase_Unk1::func_ov00_02080324(void *param_2, void *param_3, void *param_4) { + int iVar1; + bool bVar2; + bool bVar3; + bool bVar4; + u64 uVar5; + + for (; (UnkStruct_02080324 *) param_2 != (UnkStruct_02080324 *) param_3; (UnkStruct_02080324 *) param_2 += 0x18) { + iVar1 = ((UnkStruct_02080324 *) param_2)->func_ov000_020a5e9c(); + uVar5 = ((UnkStruct_02080324 *) param_4)->func_ov000_020a5e9c(); + bVar2 = iVar1 == (int) uVar5; + if (bVar2) { + uVar5 = (u64) (unk8 *) ((UnkStruct_02080324 *) param_2)->mUnk_0c << 4 & + (u32) ((UnkStruct_02080324 *) param_4)->mUnk_0c; // CONCAT14 + } + bVar3 = (int) (uVar5 >> 0x20) == (int) uVar5; + bVar4 = bVar2 && bVar3; + if (bVar4) { + bVar4 = ((UnkStruct_02080324 *) param_2)->mUnk_0d == ((UnkStruct_02080324 *) param_4)->mUnk_0d; + } + if (bVar4) { + bVar4 = ((UnkStruct_02080324 *) param_2)->mUnk_08 == ((UnkStruct_02080324 *) param_4)->mUnk_08; + } + if (bVar4) { + break; + } + } + this->mUnk_00 = (unk32 *) param_2; +} + +// Non-matching +ARM bool MapBase::FindExit(u32 param_2, Exit *param_3) { + u8 uVar1; + Exit *iter; + Exit *end; + + if ((int) param_2 < 1) { + return false; + } + iter = this->mExits.mElements; + end = iter + this->mExits.mSize; + uVar1 = param_2 & 0xff; + while (true) { + if (iter != end) { + uVar1 = iter->mUnk_14; + } + if (iter == end || (param_2 & 0xff) == uVar1) { + break; + } + iter++; + } + if (iter == end) { + param_3->mDestCourse = iter->mDestCourse; + param_3->mUnk_04 = iter->mUnk_04; + param_3->mUnk_08 = iter->mUnk_08; + param_3->mUnk_0c = iter->mUnk_0c; + param_3->mUnk_10 = iter->mUnk_10; + param_3->mDestMap = iter->mDestMap; + param_3->mDestEntrance = iter->mDestEntrance; + param_3->mUnk_14 = iter->mUnk_14; + param_3->mUnk_15 = iter->mUnk_15; + return true; + } + return false; +} + +// Non-matching +ARM void MapBase::AddCameraViewpoint(CameraViewpoint *param_2) { + unk16 uVar1; + u32 uVar2; + CameraViewpoint *pCVar3; + + uVar2 = this->mViewpoints.mSize; + if (uVar2 < (u32) this->mViewpoints.mCapacity) { + this->mViewpoints.mSize = uVar2 + 1; + pCVar3 = this->mViewpoints.mElements; + pCVar3[uVar2].mUnk_00 = param_2->mUnk_00; + pCVar3[uVar2].mUnk_04 = param_2->mUnk_04; + pCVar3[uVar2].mPos.x = param_2->mPos.x; + pCVar3[uVar2].mPos.y = param_2->mPos.y; + pCVar3[uVar2].mPos.z = param_2->mPos.z; + pCVar3[uVar2].mUnk_14 = param_2->mUnk_14; + pCVar3[uVar2].mUnk_16 = param_2->mUnk_16; + uVar1 = param_2->mUnk_18[1]; + pCVar3[uVar2].mUnk_18[0] = param_2->mUnk_18[0]; + pCVar3[uVar2].mUnk_18[1] = uVar1; + return; + } + this->mViewpoints.push_back(*param_2); +} + +// Non-matching +ARM bool MapBase::FindViewpoint_Unk_4(char id, CameraViewpoint *param_3) { + unk16 uVar1; + char cVar2; + CameraViewpoint *iter; + CameraViewpoint *end; + + iter = this->mViewpoints.mElements; + end = iter + this->mViewpoints.mSize; + cVar2 = id; + while (true) { + if (iter != end) { + cVar2 = iter->mUnk_04; + } + if (iter == end || id == cVar2) { + break; + } + iter++; + } + if (iter != end) { + param_3->mUnk_00 = iter->mUnk_00; + param_3->mUnk_04 = iter->mUnk_04; + param_3->mPos.x = iter->mPos.x; + param_3->mPos.y = iter->mPos.y; + param_3->mPos.z = iter->mPos.z; + param_3->mUnk_14 = iter->mUnk_14; + param_3->mUnk_16 = iter->mUnk_16; + uVar1 = iter->mUnk_18[1]; + param_3->mUnk_18[0] = iter->mUnk_18[0]; + param_3->mUnk_18[1] = uVar1; + return true; + } + return false; +} + +// Non-matching +ARM bool MapBase::FindViewpoint_Unk_0(s32 param_2, CameraViewpoint *param_3) { + unk16 uVar1; + int iVar2; + CameraViewpoint *iter; + CameraViewpoint *end; + + iter = this->mViewpoints.mElements; + iVar2 = 0x1c; + end = iter + this->mViewpoints.mSize; + while (true) { + if (iter != end) { + iVar2 = iter->mUnk_00; + } + if (iter == end || param_2 == iVar2) { + break; + } + iter++; + } + if (iter != end) { + param_3->mUnk_00 = iter->mUnk_00; + param_3->mUnk_04 = iter->mUnk_04; + param_3->mPos.x = iter->mPos.x; + param_3->mPos.y = iter->mPos.y; + param_3->mPos.z = iter->mPos.z; + param_3->mUnk_14 = iter->mUnk_14; + param_3->mUnk_16 = iter->mUnk_16; + uVar1 = iter->mUnk_18[1]; + param_3->mUnk_18[0] = iter->mUnk_18[0]; + param_3->mUnk_18[1] = uVar1; + return true; + } + return false; +} + +// Non-matching +ARM void MapBase::GetCurrentViewpoint(CameraViewpoint *param_2, s32 param_3) { + u32 uVar3; + u32 uVar4; + + u8 viewId = this->mCurrViewpointId[param_3]; + if (viewId == 0) { + param_2->mUnk_00 = this->vfunc_b8(param_3); + return; + } + + CameraViewpoint local_30; + uVar3 = 0; + do { + uVar4 = uVar3 + 1; + local_30.mUnk_18[uVar3] = 0; + uVar3 = uVar4; + } while (uVar4 < 2); + if (!this->FindViewpoint_Unk_4(viewId, &local_30)) { + param_2->mUnk_00 = this->vfunc_b8(param_3); + return; + } + param_2->mUnk_00 = local_30.mUnk_00; + param_2->mUnk_04 = local_30.mUnk_04; + param_2->mPos.x = local_30.mPos.x; + param_2->mPos.y = local_30.mPos.y; + param_2->mPos.z = local_30.mPos.z; + param_2->mUnk_14 = local_30.mUnk_14; + param_2->mUnk_16 = local_30.mUnk_16; + param_2->mUnk_18[0] = local_30.mUnk_18[0]; + param_2->mUnk_18[1] = local_30.mUnk_18[1]; +} + +// Non-matching +ARM unk32 MapBase::GetCurrentViewpoint_Unk_00(s32 param_2) { + u32 uVar1 = 0; + u32 uVar2; + CameraViewpoint local_20; + + do { + local_20.mUnk_18[uVar1] = 0; + uVar2 = uVar1 + 1; + uVar1 = uVar2; + } while (uVar2 < 2); + this->GetCurrentViewpoint(&local_20, param_2); + return local_20.mUnk_00; +} + +ARM unk32 MapBase::vfunc_b8(unk32 param_2) { + int iVar1; + + if (gGame.mModeId == 6) { + iVar1 = func_ov000_02079e3c(); + switch (iVar1) { + case 0: + return 0; + case 1: + return 0x1c; + default: + return 0x1c; + } + } + return 0; +} + +// Non-matching +ARM bool MapBase::func_ov00_02080824(u32 param_2, unk8 *param_3) { + int iVar1; + int iVar2; + int iVar3; + + iVar2 = this->mUnk_14c; + if (iVar2 == 0) { + return false; + } + iVar3 = 0; + // iVar1 = iVar2; + if (*(u16 *) (iVar2 + 4) > 0) { + do { + if (param_2 == *(u8 *) (iVar1 + 8)) { + iVar1 = iVar2 + 8 + iVar3 * 0x1c; + *param_3 = *(u8 *) (iVar2 + 8 + iVar3 * 0x1c); + param_3[1] = *(u8 *) (iVar1 + 1); + *(unk16 *) (param_3 + 2) = *(unk16 *) (iVar1 + 2); + *(unk32 *) (param_3 + 4) = *(unk32 *) (iVar1 + 4); + *(unk32 *) (param_3 + 8) = *(unk32 *) (iVar1 + 8); + *(unk32 *) (param_3 + 0xc) = *(unk32 *) (iVar1 + 0xc); + *(unk32 *) (param_3 + 0x10) = *(unk32 *) (iVar1 + 0x10); + *(unk32 *) (param_3 + 0x14) = *(unk32 *) (iVar1 + 0x14); + *(unk32 *) (param_3 + 0x18) = *(unk32 *) (iVar1 + 0x18); + return true; + } + iVar3++; + iVar1 += 0x1c; + } while (iVar3 < (int) *(u16 *) (iVar2 + 4)); + } + return false; +} + +// Non-matching +ARM bool MapBase::AddUnk_130(TriggerBase *param_2) { + TriggerBase *pTVar1; + TriggerBase **iter; + u32 uVar2; + TriggerBase **end; + + if ((u32) this->mUnk_130.mSize >= 0x20) { + return false; + } + iter = this->mUnk_130.mElements; + pTVar1 = (TriggerBase *) this->mUnk_130.mSize; + end = iter + (int) pTVar1; + while (true) { + if (iter != end) { + pTVar1 = *iter; + } + if (iter == end || pTVar1 == param_2) { + break; + } + iter++; + } + if (iter != end) { + return false; + } + uVar2 = this->mUnk_130.mSize; + if (uVar2 < (u32) this->mUnk_130.mCapacity) { + this->mUnk_130.mSize = uVar2 + 1; + this->mUnk_130.mElements[uVar2] = param_2; + } else { + this->mUnk_130.push_back(param_2); + } + return true; +} + +// Not-matching +ARM bool MapBase::func_ov00_020809b8(TriggerBase *param_2) { + TriggerBase *pTVar1; + TriggerBase **end; + TriggerBase **iter; + TriggerBase **ppTVar2; + TriggerBase **ppTVar3; + + iter = this->mUnk_130.mElements; + pTVar1 = (TriggerBase *) this->mUnk_130.mSize; + end = iter + (int) pTVar1; + while (true) { + if (iter != end) { + pTVar1 = *iter; + } + if (iter == end || pTVar1 == param_2) { + break; + } + iter = iter + 1; + } + ppTVar2 = iter; + if (iter != end) { + ppTVar2 = iter + 1; + } + ppTVar3 = iter; + if (iter != end && ppTVar2 != end) { + do { + pTVar1 = *ppTVar2; + ppTVar2 = ppTVar2 + 1; + iter = ppTVar3; + if (pTVar1 != param_2) { + iter = ppTVar3 + 1; + *ppTVar3 = pTVar1; + } + ppTVar3 = iter; + } while (ppTVar2 != end); + } + this->mUnk_130.erase(iter, this->mUnk_130.mElements + this->mUnk_130.mSize); + return true; +} + +// Non-matching +ARM TriggerBase *MapBase::func_ov00_02080a78(Vec3p *param_2) { + MapBase_Unk2 local_18; + + local_18.mVec = *param_2; + local_18.ppTVar2 = this->mUnk_130.mElements; + local_18.ppTVar1 = this->mUnk_130.mElements + this->mUnk_130.mSize; + + // local_18.func_ov00_02080ad0(local_18.ppTVar2, local_18.ppTVar1); + if (local_18.mTrigger == this->mUnk_130.mElements + this->mUnk_130.mSize) { + return NULL; + } + return *local_18.mTrigger; +} + +ARM void MapBase_Unk2::func_ov00_02080ad0(MapBase_Unk2_02080ad0 param_2, TriggerBase **param_3) { + TriggerBase **i = param_2.mUnk_00; + while (i != param_2.mUnk_04 && (*i)->vfunc_00(param_3) == 0) { + ++i; + } + this->ppTVar1 = i; +} + +struct UnkStruct_02080b24 { + virtual unk32 vfunc_1c(); +}; + +// Non-matching +ARM void MapBase::func_ov00_02080b24(TilePos *param_2) { + UnkStruct_02080b24 *piVar1; + int iVar2; + int dx; + int dy; + int dx_; + int dy_; + UnkStruct_02080b24 *piVar3; + int x; + int y; + TilePos uStack_2c; + TilePos uStack_2a; + TilePos uStack_28; + int dist; + u16 height; + u16 width; + + dist = this->vfunc_58(param_2, 4); + if (dist != 0) { + return; + } + if (0x5f < (u16) this->mUnk_030) { + piVar3 = NULL; + width = this->mWidth; + dist = 0; + x = 0; + height = this->mHeight; + if (width != 0) { + do { + y = 0; + if (height != 0) { + do { + uStack_28.x = (u8) x; + uStack_28.y = (u8) y; + piVar1 = (UnkStruct_02080b24 *) this->vfunc_78(&uStack_28); + if ((piVar1 != NULL) && (iVar2 = piVar1->vfunc_1c(), iVar2 == 0x42)) { + if (piVar3 == NULL) { + dx = ABS(x - (u32) param_2->x); + dy = ABS(y - (u32) param_2->y); + piVar3 = piVar1; + dist = dx + dy; + } else { + dx_ = ABS(x - (u32) param_2->x); + dy_ = ABS(y - (u32) param_2->y); + if (dist < dx_ + dy_) { + piVar3 = piVar1; + dist = dx_ + dy_; + } + } + } + y = y + 1; + } while (y < (int) (u32) height); + } + x = x + 1; + } while (x < (int) (u32) width); + } + if (piVar3 == NULL) { + return; + } + // piVar3[1] = piVar3[1] & 0xfffffffe; + uStack_2a.x = *(unk8 *) ((int) piVar3 + 0x15); + // uStack_2a.y = *(unk8 *) piVar3[5]; + this->vfunc_98(&uStack_2a, 4, 0); + uStack_2c.x = *(unk8 *) ((int) piVar3 + 0x15); + // uStack_2c.y = (unk8) piVar3[5]; + this->vfunc_98(&uStack_2c, 6, 1); + this->mUnk_030--; + } + this->vfunc_98(param_2, 4, 1); + this->mUnk_030++; +} + +ARM void MapBase::func_ov00_02080d08(TilePos *param_2) { + + int iVar1; + + iVar1 = this->vfunc_58(param_2, 4); + if (iVar1 == 0) { + return; + } + this->vfunc_98(param_2, 4, 0); + this->vfunc_98(param_2, 6, 1); + this->mUnk_030--; +} + +ARM void MapBase::vfunc_bc() {} + +ARM void MapBase::vfunc_98(TilePos *param_2, unk32 param_3, unk32 param_4) {} + +ARM void MapBase::vfunc_c0() {} + +ARM bool MapBase::TriggerOfType_vfunc_10(unk32 type) { + TriggerBase **p; + for (p = this->mTriggers.mElements; (s32) p != (s32) (this->mTriggers.mElements + this->mTriggers.mSize); p++) { + if (type == (*p)->mId) { + (*p)->vfunc_10(); + } + } + + return true; +} + +ARM unk32 TriggerBase::vfunc_10() { + return 1; +} + +ARM void MapBase::func_ov00_02080de4() {} + +struct UnkStruct_02080de8_iVar3 { + /* 000 */ unk8 mUnk_000[0x15c]; + /* 15c */ unk32 mUnk_15c; + /* 160 */ unk8 mUnk_160[0xc4]; + /* 224 */ unk16 mUnk_224; +}; + +// Non-matching +ARM void MapBase::func_ov00_02080de8(unk32 param_2) { + unk8 uVar2 = 0; + UnkStruct_02080de8_iVar3 *iVar3; + + iVar3 = (UnkStruct_02080de8_iVar3 *) ((unk32 *) data_027e0f64->mUnk_4 + param_2); + + switch (iVar3->mUnk_15c) { + case 0: + case 1: + case 2: + case 0x15: + case 0x16: + case 0x33: + case 0xb: + case 0x5a: + case 0x5b: + uVar2 = 0; + goto LAB_arm9_ov000__02080ec8; + case 3: + uVar2 = 0x1f; + goto LAB_arm9_ov000__02080ec8; + default: + goto LAB_02080e20_caseD_c; + } + +LAB_02080e20_caseD_c: + if ((func_ov000_02087dd8(iVar3) != 0) && ((iVar3->mUnk_224 <= 0x1c72 || iVar3->mUnk_224 >= 0x4000))) { + uVar2 = 0x1f; + } +LAB_arm9_ov000__02080ec8: + this->mUnk_140->mUnk_5c = uVar2; +} + +ARM void MapBase::func_ov00_02080edc() { + switch (data_027e0d38->mUnk_0c.func_ov000_020a5e9c()) { + case 0x2a: + case 0x2f: + case 0x30: + this->mUnk_005 = 0; + return; + default: + this->mUnk_005 = 1; + } +} diff --git a/src/00_Core/Map/MapManager.cpp b/src/00_Core/Map/MapManager.cpp index cedb7d01..500b9a07 100644 --- a/src/00_Core/Map/MapManager.cpp +++ b/src/00_Core/Map/MapManager.cpp @@ -10,6 +10,7 @@ #include "DTCM/UnkStruct_027e0c68.hpp" #include "DTCM/UnkStruct_027e0d38.hpp" #include "DTCM/UnkStruct_027e0f64.hpp" +#include "DTCM/UnkStruct_027e0f68.hpp" #include "DTCM/UnkStruct_027e0f6c.hpp" #include "DTCM/UnkStruct_027e0f78.hpp" #include "DTCM/UnkStruct_027e0fd4.hpp" @@ -122,13 +123,6 @@ public: virtual unk32 vfunc_3c(unk32 param_2); }; -struct UnkStruct_027e0f68 { - void func_ov000_0208cc88(); - void func_ov000_0208d620(); - void func_ov000_0208d680(); - void func_ov004_02102b28(); -}; - extern u32 *data_027e0ce0[]; extern UnkStruct_0202e894 *data_027e0ce4; extern unk32 *data_027e0d3c; @@ -404,11 +398,11 @@ ARM void MapManager::func_ov00_02082670(unk32 param_2, s32 param_3) { this->mMap->func_ov00_0208006c(param_2, param_3); } -ARM void MapManager::func_ov00_02082680(unk32 param_2, unk32 param_3) { +ARM void MapManager::func_ov00_02082680(TilePos *param_2, unk32 param_3) { this->mMap->vfunc_98(param_2, 5, param_3); } -ARM void MapManager::func_ov00_020826a0(unk32 param_2, unk32 param_3) { +ARM void MapManager::func_ov00_020826a0(TilePos *param_2, unk32 param_3) { this->mMap->vfunc_98(param_2, 7, param_3); } @@ -478,11 +472,11 @@ ARM s32 MapManager::MapData_vfunc_7c(s32 param_1, unk32 *param_2, s32 param_3, s return this->mMap->vfunc_7c(param_1, param_2, param_3, param_4); } -ARM void MapManager::MapData_vfunc_84(unk32 param_2) { +ARM void MapManager::MapData_vfunc_84(UnkStruct_0207f38c *param_2) { this->mMap->vfunc_84(param_2); } -ARM bool MapManager::func_ov00_020828f8(s32 *param_2) { +ARM bool MapManager::func_ov00_020828f8(UnkStruct_0207f38c *param_2) { return this->mMap->func_ov00_0207f38c(param_2); } @@ -1056,11 +1050,11 @@ ARM bool MapManager::func_ov00_02083840(s32 param_2) { return this->mMap->TriggerOfType_vfunc_10(param_2); } -ARM bool MapManager::AddTrigger(s32 param_2) { +ARM bool MapManager::AddTrigger(TriggerBase *param_2) { return this->mMap->AddTrigger(param_2); } -ARM bool MapManager::func_ov00_020838d8(s32 param_2) { +ARM bool MapManager::func_ov00_020838d8(TriggerBase *param_2) { return this->mMap->func_ov00_0207ff88(param_2); } @@ -1101,21 +1095,21 @@ ARM void MapManager::func_ov00_02083968(u32 param_2, unk8 *param_3) { } ARM bool MapManager::func_ov00_02083978(Vec3p *param_2, Vec3p *param_3) { - s32 iVar1 = this->mMap->func_ov00_02080a78(param_2); + TriggerBase *iVar1 = this->mMap->func_ov00_02080a78(param_2); if (iVar1 != 0) { - param_3->x = *(s32 *) (iVar1 + 0x8); - param_3->y = *(s32 *) (iVar1 + 0xc); - param_3->z = *(s32 *) (iVar1 + 0x10); + param_3->x = iVar1->mUnk_08; + param_3->y = iVar1->mUnk_0c; + param_3->z = iVar1->mUnk_10; return true; } return false; } -ARM bool MapManager::func_ov00_020839b4(s32 param_2) { +ARM bool MapManager::func_ov00_020839b4(TriggerBase *param_2) { return this->mMap->AddUnk_130(param_2); } -ARM bool MapManager::func_ov00_020839c4(s32 param_2) { +ARM bool MapManager::func_ov00_020839c4(TriggerBase *param_2) { return this->mMap->func_ov00_020809b8(param_2); } @@ -1345,11 +1339,11 @@ unk32 MapManager::GetMapData_Unk_4c() { return this->mMap->mUnk_04c; } -unk32 MapManager::func_ov00_0208412c() { +unk32 *MapManager::func_ov00_0208412c() { return this->mMap->func_ov00_0207f934(); } -void MapManager::func_ov00_0208413c(unk32 param_2) { +void MapManager::func_ov00_0208413c(unk32 *param_2) { this->mMap->func_ov00_0207f948(param_2); } @@ -2458,7 +2452,7 @@ s32 MapManager::func_ov00_02085a34(Vec3p *param_2, s32 param_3) { return -1; } piVar1->mUnk_04.x &= -2; - this->func_ov00_020828f8((s32 *) piVar1); + this->func_ov00_020828f8((UnkStruct_0207f38c *) piVar1); } this->mMap->func_ov00_02080b24(aVStack_28); uStack_14 = 0xffff;