From a76a91ad1374913127446307f48028be1fcd4deb Mon Sep 17 00:00:00 2001 From: SammygoodTunes Date: Sat, 12 Apr 2025 17:36:12 +0200 Subject: [PATCH] Decomp progress 35% --- config/eur/arm9/overlays/ov000/symbols.txt | 16 +- config/eur/arm9/symbols.txt | 2 +- config/usa/arm9/overlays/ov000/symbols.txt | 10 +- include/Map/Course.hpp | 2 +- include/Map/Entrance.hpp | 2 +- include/Map/MapManager.hpp | 8 +- src/00_Core/Map/Course.cpp | 2 +- src/00_Core/Map/MapManager.cpp | 251 ++++++++++----------- 8 files changed, 143 insertions(+), 150 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 04f233bc..edd936ef 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -83,7 +83,7 @@ _ZN18UnkStruct_027e0d3819func_ov000_02078b40Ev kind:function(arm,size=0x24) addr _ZN18UnkStruct_027e0d3819func_ov000_02078b64Ev kind:function(arm,size=0x24) addr:0x2078b64 _ZN18UnkStruct_027e0d3819func_ov000_02078b88Ev kind:function(arm,size=0x3c) addr:0x2078b88 _Z19func_ov000_02078bc4i kind:function(thumb,size=0x2c) addr:0x2078bc4 -func_ov000_02078bf0 kind:function(thumb,size=0x11c) addr:0x2078bf0 +_Z19func_ov000_02078bf0Pii kind:function(thumb,size=0x11c) addr:0x2078bf0 func_ov000_02078d0c kind:function(thumb,size=0x24) addr:0x2078d0c func_ov000_02078d30 kind:function(thumb,size=0x24) addr:0x2078d30 func_ov000_02078d54 kind:function(thumb,size=0x3c) addr:0x2078d54 @@ -283,7 +283,7 @@ _ZN6Course14GetMCSFilePathEiii kind:function(arm,size=0xf0) addr:0x207cc84 _ZN6Course14GetMRCFilePathEiii kind:function(arm,size=0xac) addr:0x207cd74 _ZN6Course18func_ov00_0207ce20EiiPci kind:function(arm,size=0x2c) addr:0x207ce20 _ZN6Course18func_ov00_0207ce4cEiiiPci kind:function(arm,size=0x5b8) addr:0x207ce4c -_ZN6Course18func_ov00_0207d404Eiii kind:function(arm,size=0x78) addr:0x207d404 +_ZN6Course18func_ov00_0207d404Eiiii kind:function(arm,size=0x78) addr:0x207d404 _ZN6Course22IsCurrentMapInMainGridEv kind:function(arm,size=0x14) addr:0x207d47c _ZN6Course12IsInMainGridEii kind:function(arm,size=0x54) addr:0x207d490 _ZN6Course15IsMapInMainGridEj kind:function(arm,size=0x34) addr:0x207d4e4 @@ -516,7 +516,7 @@ _ZN10MapManager18func_ov00_02082650Eiii kind:function(arm,size=0x10) addr:0x2082 _ZN10MapManager18func_ov00_02082660Eii kind:function(arm,size=0x10) addr:0x2082660 _ZN10MapManager18func_ov00_02082670Eii kind:function(arm,size=0x10) addr:0x2082670 _ZN10MapManager18func_ov00_02082680Eii kind:function(arm,size=0x20) addr:0x2082680 -_ZN10MapManager18func_ov00_020826a0Eiii kind:function(arm,size=0x20) addr:0x20826a0 +_ZN10MapManager18func_ov00_020826a0Eii kind:function(arm,size=0x20) addr:0x20826a0 _ZN10MapManager9CreateMapEiii kind:function(arm,size=0x100) addr:0x20826c0 _ZN10MapManager10DestroyMapEv kind:function(arm,size=0x30) addr:0x20827c0 _ZN10MapManager16MapData_vfunc_44Ev kind:function(arm,size=0x18) addr:0x20827f0 @@ -571,7 +571,7 @@ _ZN10MapManager18func_ov00_02083570Eii kind:function(arm,size=0x18) addr:0x20835 _ZN10MapManager18func_ov00_02083588Ev kind:function(arm,size=0x1c) addr:0x2083588 _ZN10MapManager18func_ov00_020835a4Ev kind:function(arm,size=0x10) addr:0x20835a4 _ZN10MapManager18func_ov00_020835b4Ev kind:function(arm,size=0x10) addr:0x20835b4 -_ZN10MapManager18func_ov00_020835c4EPS_ii kind:function(arm,size=0x20) addr:0x20835c4 +_ZN10MapManager18func_ov00_020835c4Eii kind:function(arm,size=0x20) addr:0x20835c4 _ZN10MapManager18func_ov00_020835e4EiPiPc kind:function(arm,size=0x10) addr:0x20835e4 _ZN10MapManager18func_ov00_020835f4Ei kind:function(arm,size=0x10) addr:0x20835f4 _ZN10MapManager18func_ov00_02083604Ei kind:function(arm,size=0x10) addr:0x2083604 @@ -647,7 +647,7 @@ _ZN10MapManager18func_ov00_020847f0Ev kind:function(arm,size=0x48) addr:0x20847f _ZN10MapManager18func_ov00_02084838Ev kind:function(arm,size=0x80) addr:0x2084838 _ZN10MapManager18func_ov00_020848b8Ev kind:function(arm,size=0x6c) addr:0x20848b8 _ZN10MapManager18func_ov00_02084924Ej kind:function(arm,size=0x10) addr:0x2084924 -_ZN10MapManager18func_ov00_02084934EPi kind:function(arm,size=0x50) addr:0x2084934 +_ZN10MapManager18func_ov00_02084934EP5Vec3p kind:function(arm,size=0x50) addr:0x2084934 _ZN10MapManager17GetMapData_Unk_06Ev kind:function(arm,size=0xc) addr:0x2084984 _ZN10MapManager17GetMapData_Unk_07Ev kind:function(arm,size=0xc) addr:0x2084990 _ZN10MapManager18func_ov00_0208499cEv kind:function(arm,size=0x24) addr:0x208499c @@ -672,7 +672,7 @@ _ZN10MapManager18func_ov00_02084cc8Ei kind:function(arm,size=0x1c) addr:0x2084cc _ZN10MapManager18func_ov00_02084ce4Ei kind:function(arm,size=0x18) addr:0x2084ce4 _ZN10MapManager18func_ov00_02084cfcEi kind:function(arm,size=0x1c) addr:0x2084cfc _ZN10MapManager17GetMapData_Unk_09Ev kind:function(arm,size=0xc) addr:0x2084d18 -_ZN10MapManager18func_ov00_02084d24Ecci kind:function(arm,size=0x28) addr:0x2084d24 +_ZN10MapManager18func_ov00_02084d24Eiii kind:function(arm,size=0x28) addr:0x2084d24 _ZN10MapManager18func_ov00_02084d4cEiiP5Vec3p kind:function(arm,size=0x170) addr:0x2084d4c _ZN10MapManager18func_ov00_02084ebcEP5Vec3p kind:function(arm,size=0x24c) addr:0x2084ebc _ZN10MapManager18func_ov00_02085108EPi kind:function(arm,size=0x174) addr:0x2085108 @@ -1459,7 +1459,7 @@ func_ov000_0209d6d0 kind:function(arm,size=0x4) addr:0x209d6d0 func_ov000_0209d6d4 kind:function(arm,size=0x14) addr:0x209d6d4 _Z19func_ov000_0209d6e8ii kind:function(arm,size=0x28) addr:0x209d6e8 func_ov000_0209d710 kind:function(arm,size=0xc) addr:0x209d710 -func_ov000_0209d71c kind:function(arm,size=0xc) addr:0x209d71c +_Z19func_ov000_0209d71cPii kind:function(arm,size=0xc) addr:0x209d71c func_ov000_0209d728 kind:function(arm,size=0x10) addr:0x209d728 func_ov000_0209d738 kind:function(arm,size=0x10) addr:0x209d738 func_ov000_0209d748 kind:function(arm,size=0x10) addr:0x209d748 @@ -4054,7 +4054,7 @@ data_ov000_020e250c kind:data(any) addr:0x20e250c data_ov000_020e2510 kind:data(any) addr:0x20e2510 data_ov000_020e2520 kind:data(any) addr:0x20e2520 data_ov000_020e2524 kind:data(any) addr:0x20e2524 -data_ov000_020e2528 kind:data(any) addr:0x20e2528 +@1495 kind:data(any) addr:0x20e2528 data_ov000_020e2544 kind:data(any) addr:0x20e2544 data_ov000_020e2568 kind:data(any) addr:0x20e2568 data_ov000_020e2588 kind:data(any) addr:0x20e2588 diff --git a/config/eur/arm9/symbols.txt b/config/eur/arm9/symbols.txt index 55963541..32cdc0eb 100644 --- a/config/eur/arm9/symbols.txt +++ b/config/eur/arm9/symbols.txt @@ -478,7 +478,7 @@ func_0200c7c4 kind:function(arm,size=0x30) addr:0x200c7c4 func_0200c7f4 kind:function(arm,size=0x30) addr:0x200c7f4 func_0200c824 kind:function(arm,size=0x54) addr:0x200c824 func_0200c878 kind:function(arm,size=0x58) addr:0x200c878 -sprintf kind:function(arm,size=0x28) addr:0x200c8d0 +_Z7sprintfrPcrPKcz kind:function(arm,size=0x28) addr:0x200c8d0 vsprintf kind:function(arm,size=0x18) addr:0x200c8f8 va_sprintf kind:function(arm,size=0x28) addr:0x200c910 vsnprintf kind:function(arm,size=0x8fc) addr:0x200c938 diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index 4b67f92d..5ec6f277 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -283,7 +283,7 @@ _ZN6Course14GetMCSFilePathEiii kind:function(arm,size=0xf0) addr:0x207cc24 _ZN6Course14GetMRCFilePathEiii kind:function(arm,size=0xac) addr:0x207cd14 _ZN6Course18func_ov00_0207ce20EiiPci kind:function(arm,size=0x2c) addr:0x207cdc0 _ZN6Course18func_ov00_0207ce4cEiiiPci kind:function(arm,size=0x5b8) addr:0x207cdec -_ZN6Course18func_ov00_0207d404Eiii kind:function(arm,size=0x78) addr:0x207d3a4 +_ZN6Course18func_ov00_0207d404Eiiii kind:function(arm,size=0x78) addr:0x207d3a4 _ZN6Course22IsCurrentMapInMainGridEv kind:function(arm,size=0x14) addr:0x207d41c _ZN6Course12IsInMainGridEii kind:function(arm,size=0x54) addr:0x207d430 _ZN6Course15IsMapInMainGridEj kind:function(arm,size=0x34) addr:0x207d484 @@ -516,7 +516,7 @@ _ZN10MapManager18func_ov00_02082650Eiii kind:function(arm,size=0x10) addr:0x2082 _ZN10MapManager18func_ov00_02082660Eii kind:function(arm,size=0x10) addr:0x2082600 _ZN10MapManager18func_ov00_02082670Eii kind:function(arm,size=0x10) addr:0x2082610 _ZN10MapManager18func_ov00_02082680Eii kind:function(arm,size=0x20) addr:0x2082620 -_ZN10MapManager18func_ov00_020826a0Eiii kind:function(arm,size=0x20) addr:0x2082640 +_ZN10MapManager18func_ov00_020826a0Eii kind:function(arm,size=0x20) addr:0x2082640 _ZN10MapManager9CreateMapEiii kind:function(arm,size=0x100) addr:0x2082660 _ZN10MapManager10DestroyMapEv kind:function(arm,size=0x30) addr:0x2082760 _ZN10MapManager16MapData_vfunc_44Ev kind:function(arm,size=0x18) addr:0x2082790 @@ -571,7 +571,7 @@ _ZN10MapManager18func_ov00_02083570Eii kind:function(arm,size=0x18) addr:0x20835 _ZN10MapManager18func_ov00_02083588Ev kind:function(arm,size=0x1c) addr:0x2083528 _ZN10MapManager18func_ov00_020835a4Ev kind:function(arm,size=0x10) addr:0x2083544 _ZN10MapManager18func_ov00_020835b4Ev kind:function(arm,size=0x10) addr:0x2083554 -_ZN10MapManager18func_ov00_020835c4EPS_ii kind:function(arm,size=0x20) addr:0x2083564 +_ZN10MapManager18func_ov00_020835c4Eii kind:function(arm,size=0x20) addr:0x2083564 _ZN10MapManager18func_ov00_020835e4EiPiPc kind:function(arm,size=0x10) addr:0x2083584 _ZN10MapManager18func_ov00_020835f4Ei kind:function(arm,size=0x10) addr:0x2083594 _ZN10MapManager18func_ov00_02083604Ei kind:function(arm,size=0x10) addr:0x20835a4 @@ -647,7 +647,7 @@ _ZN10MapManager18func_ov00_020847f0Ev kind:function(arm,size=0x48) addr:0x208479 _ZN10MapManager18func_ov00_02084838Ev kind:function(arm,size=0x80) addr:0x20847d8 _ZN10MapManager18func_ov00_020848b8Ev kind:function(arm,size=0x6c) addr:0x2084858 _ZN10MapManager18func_ov00_02084924Ej kind:function(arm,size=0x10) addr:0x20848c4 -_ZN10MapManager18func_ov00_02084934EPi kind:function(arm,size=0x50) addr:0x20848d4 +_ZN10MapManager18func_ov00_02084934EP5Vec3p kind:function(arm,size=0x50) addr:0x20848d4 _ZN10MapManager17GetMapData_Unk_06Ev kind:function(arm,size=0xc) addr:0x2084924 _ZN10MapManager17GetMapData_Unk_07Ev kind:function(arm,size=0xc) addr:0x2084930 _ZN10MapManager18func_ov00_0208499cEv kind:function(arm,size=0x24) addr:0x208493c @@ -672,7 +672,7 @@ _ZN10MapManager18func_ov00_02084cc8Ei kind:function(arm,size=0x1c) addr:0x2084c6 _ZN10MapManager18func_ov00_02084ce4Ei kind:function(arm,size=0x18) addr:0x2084c84 _ZN10MapManager18func_ov00_02084cfcEi kind:function(arm,size=0x1c) addr:0x2084c9c _ZN10MapManager17GetMapData_Unk_09Ev kind:function(arm,size=0xc) addr:0x2084cb8 -_ZN10MapManager18func_ov00_02084d24Ecci kind:function(arm,size=0x28) addr:0x2084cc4 +_ZN10MapManager18func_ov00_02084d24Eiii kind:function(arm,size=0x28) addr:0x2084cc4 _ZN10MapManager18func_ov00_02084d4cEiiP5Vec3p kind:function(arm,size=0x170) addr:0x2084cec _ZN10MapManager18func_ov00_02084ebcEP5Vec3p kind:function(arm,size=0x24c) addr:0x2084e5c _ZN10MapManager18func_ov00_02085108EPi kind:function(arm,size=0x174) addr:0x20850a8 diff --git a/include/Map/Course.hpp b/include/Map/Course.hpp index 38ca1a87..b01ff5ea 100644 --- a/include/Map/Course.hpp +++ b/include/Map/Course.hpp @@ -78,7 +78,7 @@ public: void GetMRCFilePath(unk32 param_2, unk32 buf, unk32 param_4); void func_ov00_0207ce20(unk32 param_2, unk32 param_3, char *param_4, unk32 param_5); void func_ov00_0207ce4c(s32 param_2, s32 param_3, unk32 param_4, char *param_5, unk32 param_6); - bool func_ov00_0207d404(s32 param_2, unk32 param_3, unk32 param_4); + bool func_ov00_0207d404(s32 param_2, unk32 param_3, unk32 param_4, unk32 param_5); bool IsCurrentMapInMainGrid(); bool IsInMainGrid(s32 x, s32 y); bool IsMapInMainGrid(u32 map); diff --git a/include/Map/Entrance.hpp b/include/Map/Entrance.hpp index 1ff69575..d8d1b751 100644 --- a/include/Map/Entrance.hpp +++ b/include/Map/Entrance.hpp @@ -12,7 +12,7 @@ public: /* 00 */ Vec3p mPos; /* 0c */ unk16 mAngle; /* 0e */ u8 mId; - /* 0f */ unk8 mUnk_0f; + /* 0f */ // unk8 mUnk_0f; /* 10 */ s32 mUnk_10; /* 14 */ }; diff --git a/include/Map/MapManager.hpp b/include/Map/MapManager.hpp index f40e4eed..1d9c9dd4 100644 --- a/include/Map/MapManager.hpp +++ b/include/Map/MapManager.hpp @@ -73,7 +73,7 @@ public: 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, unk32 param_4); + void func_ov00_020826a0(unk32 param_2, unk32 param_3); void CreateMap(unk32 mapType, unk32 param_3, unk32 param_4); void DestroyMap(); void MapData_vfunc_44(); @@ -128,7 +128,7 @@ public: unk32 func_ov00_02083588(); unk32 func_ov00_020835a4(); unk32 func_ov00_020835b4(); - unk8 func_ov00_020835c4(MapManager *param_1, s32 param_2, unk32 param_3); + bool func_ov00_020835c4(s32 param_2, unk32 param_3); bool func_ov00_020835e4(s32 param_2, unk32 *param_3, unk8 *param_4); unk32 func_ov00_020835f4(s32 param_2); void func_ov00_02083604(s32 param_2); @@ -204,7 +204,7 @@ public: bool func_ov00_02084838(); bool func_ov00_020848b8(); void func_ov00_02084924(u32 param_2); - bool func_ov00_02084934(s32 *param_2); + bool func_ov00_02084934(Vec3p *param_2); u8 GetMapData_Unk_06(); u8 GetMapData_Unk_07(); bool func_ov00_0208499c(); @@ -229,7 +229,7 @@ public: void func_ov00_02084ce4(unk32 param_2); bool func_ov00_02084cfc(unk32 param_2); u8 GetMapData_Unk_09(); - unk8 func_ov00_02084d24(unk8 param_2, unk8 param_3, unk32 param_4); + void func_ov00_02084d24(unk32 param_2, unk32 param_3, unk32 param_4); s32 func_ov00_02084d4c(unk32 param_2, unk32 param_3, Vec3p *param_4); unk32 func_ov00_02084ebc(Vec3p *param_2); s32 func_ov00_02085108(s32 *param_2); diff --git a/src/00_Core/Map/Course.cpp b/src/00_Core/Map/Course.cpp index 4771048d..f3091530 100644 --- a/src/00_Core/Map/Course.cpp +++ b/src/00_Core/Map/Course.cpp @@ -15,7 +15,7 @@ void Course::GetMCSFilePath(unk32 buf, s32 fileIndex, unk32 fileType) {} void Course::GetMRCFilePath(unk32 param_2, unk32 buf, unk32 param_4) {} void Course::func_ov00_0207ce20(unk32 param_2, unk32 param_3, char *param_4, unk32 param_5) {} void Course::func_ov00_0207ce4c(s32 param_2, s32 param_3, unk32 param_4, char *param_5, unk32 param_6) {} -bool Course::func_ov00_0207d404(s32 param_2, unk32 param_3, unk32 param_4) {} +bool Course::func_ov00_0207d404(s32 param_2, unk32 param_3, unk32 param_4, unk32 param_5) {} bool Course::IsCurrentMapInMainGrid() {} bool Course::IsInMainGrid(s32 x, s32 y) {} bool Course::IsMapInMainGrid(u32 map) {} diff --git a/src/00_Core/Map/MapManager.cpp b/src/00_Core/Map/MapManager.cpp index 64225e48..7e3e8399 100644 --- a/src/00_Core/Map/MapManager.cpp +++ b/src/00_Core/Map/MapManager.cpp @@ -1,6 +1,11 @@ +// TODO: Make sure every function has either ARM or THUMB +// TODO: Optimise functions' bodies as much as possible (without affecting asm) +// Clear these comments when done + #include "Map/MapManager.hpp" #include "Actor/Actor.hpp" #include "Actor/ActorManager.hpp" +#include "DTCM/UnkStruct_027e0d38.hpp" #include "Player/PlayerBase.hpp" #include "Save/AdventureFlags.hpp" @@ -33,6 +38,7 @@ extern void func_ov000_02093a1c(u32 *param_1, s32 *param_2); extern void func_ov000_02096324(s32 *param_1, s32 param_2); extern s32 *func_ov000_02096418(s32 *param_1); extern void func_ov000_0209d6e8(s32 param_1, s32 param_2); +extern s32 func_ov000_0209d71c(s32 *param_1, s32 param_2); extern unk32 func_ov000_020a5e9c(unk32 *param_1); extern void func_ov004_021024c4(MapManager *param_1, s32 param_2, bool param_3, s32 param_4); @@ -42,20 +48,32 @@ extern void func_ov004_02102e3c(s32 *param_1); extern void func_ov004_02105578(ActorManager *param_1, u32 param_2); extern void func_ov004_02105608(ActorManager *param_1, unk32 param_2, unk32 param_3, unk32 param_4); +extern MapBase *func_ov012_0212b358(MapBase *param_1, unk32 param_2, unk32 param_3); + +extern MapBase *func_ov015_02128dd8(MapBase *param_1, unk32 param_2, unk32 param_3); extern s32 func_ov015_02129c14(MapBase *param_1); extern bool func_ov015_02129c24(MapBase *param_1, Vec3p *param_2, Vec3p *param_3); extern bool func_ov015_02129c34(MapBase *param_1, s32 param_2); extern bool func_ov015_02129c44(MapBase *param_1, s32 param_2); -struct UnkStruct_027e0d38 { - /* 00 */ unk8 mUnk_00[0xc]; +extern MapBase *func_ov017_0215b4e8(MapBase *param_1, unk32 param_2, unk32 param_3); + +extern MapBase *func_ov018_0215b4a0(MapBase *param_1, unk32 param_2, unk32 param_3); + +// Should this be defined? +extern int sprintf(char *__restrict s, const char *__restrict format, ...); + +struct UnkStruct_02082348 { + /* 00 */ unk32 mUnk_00; + /* 04 */ unk32 mUnk_04; + /* 08 */ unk32 mUnk_08; /* 0c */ unk32 mUnk_0c; - /* 10 */ unk8 mUnk_10[0x18]; - /* 28 */ unk32 mUnk_28; + /* 10 */ unk16 mUnk_10; + /* 12 */ unk8 mUnk_12[0x4]; }; extern s32 *data_027e0c68; -extern UnkStruct_027e0d38 *data_027e0d38; +extern u32 *data_027e0ce4; extern s32 *data_027e0d3c; extern s32 *data_027e0f64; extern s32 *data_027e0f68; @@ -117,8 +135,8 @@ unk8 MapManager::func_ov00_0208210c(unk32 param_2, unk32 *param_3) { *(unk8 *) (param_3 + 1) = 2; uVar2 = 4; } - *(unk8 *) ((int) param_3 + 5) = uVar2; - uVar3 = func_ov000_020a5e9c(&data_027e0d38->mUnk_28) + 0x1c; + *(unk8 *) ((int) param_3 + 5) = uVar2; + // uVar3 = func_ov000_020a5e9c(data_027e0d38->mUnk_28) + 0x1c; puVar1 = (s32 *) data_027e0d38; param_3[2] = uVar3; *(unk8 *) (param_3 + 4) = *(unk8 *) (*(s32 *) (*(s32 *) puVar1 + 0x28) + 0x2e); @@ -169,13 +187,18 @@ ARM void MapManager::func_ov00_0208230c(s32 *param_2) { } ARM void MapManager::func_ov00_02082348(unk32 *param_2) { - s32 var[4]; - var[0] = 0x47; - var[1] = 0; - var[2] = 0; - var[3] = 0xfffffffe; - this->func_ov00_0208230c(var); - func_ov000_02078bf0(var, *param_2); + UnkStruct_02082348 unkStruct; + unkStruct.mUnk_00 = 0x47; + unkStruct.mUnk_04 = 0; + unkStruct.mUnk_08 = 0; + unkStruct.mUnk_0c = 0; + unkStruct.mUnk_10 = 0; + unkStruct.mUnk_12[0] = 0xff; + unkStruct.mUnk_12[1] = 0; + unkStruct.mUnk_12[2] = 0; + unkStruct.mUnk_12[3] = 0; + this->func_ov00_0208230c((s32 *) &unkStruct); + func_ov000_02078bf0((s32 *) &unkStruct, *param_2); } ARM void MapManager::func_ov00_020823a4(unk32 param_2) { @@ -265,14 +288,13 @@ ARM void MapManager::func_ov00_020825ac() { } ARM s32 MapManager::GetCourseFilePath(char *courseName, char *buf) { - // s32 var = sprintf(buf, "Map/%s/course.bin", courseName); // Should we manually define sprintf? - // return var; + s32 var = sprintf(buf, "Map/%s/course.bin", courseName); // Should we manually define sprintf? + return var; + // reference to func_ov000_020e2528 (changed to @1495 in symbols) } ARM void MapManager::func_ov00_020825e4(unk32 param_2, char *buf) { - // param2 unused. - // return value of GetCourseFilePath unused. - char *courseName; // = (char *) func_ov000_0209d71c(*(unk32 *) DWORD_027e0f7c) does not exist. + char *courseName = (char *) func_ov000_0209d71c(data_027e0f7c, param_2); this->GetCourseFilePath(courseName, buf); } @@ -300,10 +322,8 @@ ARM void MapManager::func_ov00_02082680(unk32 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, unk32 param_4) { - this->mMap->vfunc_98(param_2, 7, param_3 /*, param_4*/); - // vfunc_98 takes either three params or four ??? This doesn't make sense - // objdiff says 100% +ARM void MapManager::func_ov00_020826a0(unk32 param_2, unk32 param_3) { + this->mMap->vfunc_98(param_2, 7, param_3); } ARM void MapManager::CreateMap(unk32 mapType, unk32 param_3, unk32 param_4) { @@ -312,33 +332,33 @@ ARM void MapManager::CreateMap(unk32 mapType, unk32 param_3, unk32 param_4) { if (this->mMap == NULL) { switch (mapType) { case 0: - // mapBase = (MapBase *) SysObject::operator_new(0x1dc, (astruct_19 **)(DWORD_027e0ce0 + 4), 4); - // What is astruct_19 ** ? What is DWORD_027e0ce0 ? + // data_027e0ce4 (data_027e0ce0) of type UnkStruct_0202e894 + SysObject::operator new(0x1dc, data_027e0ce4, 4); if (mapBase != NULL) { - // mapBase = (MapBase *)func_ov018_0215b4a0(mapBase, param_3, param_4); // Does not exist. + mapBase = (MapBase *) func_ov018_0215b4a0(mapBase, param_3, param_4); // Does not exist. } this->mMap = mapBase; return; case 1: break; case 2: - // mapBase = (MapBase *) SysObject::operator_new(0x1b0, (astruct_19 **)(DWORD_027e0ce0 + 4), 4); + mapBase = (MapBase *) SysObject::operator new(0x1b0, data_027e0ce4, 4); if (mapBase != NULL) { - // mapBase = (MapBase *)func_ov015_02128dd8(mapBase, param_3, param_4); // Does not exist. + mapBase = (MapBase *) func_ov015_02128dd8(mapBase, param_3, param_4); // Does not exist. } this->mMap = mapBase; return; case 3: break; case 4: - // mapBase = (MapBase *) SysObject::operator_new(0x790, (astruct_19 **)(DWORD_027e0ce0 + 4), 4); + mapBase = (MapBase *) SysObject::operator new(0x790, data_027e0ce4, 4); if (mapBase != NULL) { - // mapBase = (MapBase *)func_ov012_0212b358(mapBase, param_3, param_4); // Does not exist. + mapBase = (MapBase *) func_ov012_0212b358(mapBase, param_3, param_4); // Does not exist. } this->mMap = mapBase; return; } - // mapBase = (MapBase *) SysObject::operator_new(0x790, (astruct_19 **)(DWORD_027e0ce0 + 4), 4); + mapBase = (MapBase *) SysObject::operator new(0x790, data_027e0ce4, 4); if (mapBase != NULL) { - // mapBase = (MapBase *)func_ov017_0215b4e8(mapBase, param_3, param_4); // Does not exist. + mapBase = (MapBase *) func_ov017_0215b4e8(mapBase, param_3, param_4); // Does not exist. } this->mMap = mapBase; } @@ -360,26 +380,25 @@ ARM void MapManager::MapData_vfunc_44() { } ARM void MapManager::func_ov00_02082808(s32 param_2) { - // How to define PTR_027e0d38 ? - // if (*(int*)(*(int*)PTR_027e0d38 + 0x14) == 1) { - // return; - // } - s32 var1; // = func_ov00_02084740() + if (*(int *) (*(int *) data_027e0d38 + 0x14) == 1) { + return; + } + s32 var1 = this->func_ov00_02084740(); s32 var2; if (param_2 == 0) { // var2 = thunk_FUN_0201f91c(DWORD_overlay_d_0_bss__020eec68); // What are these? if (var1 == var2) { return; } - // func_ov00_020d70a4(DWORD_overlay_d_0_bss__020eec68, var1, 0, 0x7f, param_3); // And these? + // func_ov000_020d70a4(DWORD_overlay_d_0_bss__020eec68, var1, 0, 0x7f, param_3); // And these? } else { - // var2 = func_ov00_020a5e9c(*(s32 *) PTR_027e0d38 + 0xc); + var2 = func_ov000_020a5e9c((unk32 *) data_027e0d38 + 0xc); if (var2 == 0) { // func_ov015_021849a4(DWORD_overlay_d_15_bss__02190458); } // func_ov00_020a5e9c(DWORD_overlay_d_0_bss__020eec68, var1, 0, 0x7f, param_3); } - // var1 = func_ov00_020a5e9c(*(s32 *) PTR_027e0d38 + 0xc); + var1 = func_ov000_020a5e9c((unk32 *) data_027e0d38 + 0xc); if (var1 == 0) { return; } @@ -564,14 +583,14 @@ ARM u32 MapManager::func_ov00_02082d74(unk32 param_2) { } ARM void MapManager::func_ov00_02082d84(unk8 *param_2, s32 *param_3, s32 *param_4) { - s32 mapWidth = this->GetMapWidth(); - u32 uVar3; // = CoDivide64By32(0x100000, mapWidth << 0xc); Not defined ? + s32 mapWidth = this->GetMapWidth(); + u32 uVar3 = CoDivide64By32(0x100000, mapWidth << 0xc); s32 mapHeight = this->GetMapHeight(); - u32 uVar4; // = CoDivide64By32(0xc0000, mapHeight << 0xc); Not defined ? - s64 lVar1 = (s64) (s32) ((u32) *param_2 << 0xc); - *param_3 = (s32) (((u32) lVar1 >> 0xc | (s32) ((u64) lVar1 >> 0x20) * 0x100000) + ((s32) uVar4 >> 1) + 0x800) >> 0xc; - lVar1 = (s64) (s32) ((u32) param_2[1] << 0xc) * (s64) (s32) uVar4 + 0x800; - *param_4 = (s32) (((u32) lVar1 >> 0xc | (s32) ((u64) lVar1 >> 0x20) * 0x100000) + ((s32) uVar4 >> 1) + 0x800) >> 0xc; + u32 uVar4 = CoDivide64By32(0xc0000, mapHeight << 0xc); + s64 lVar1 = (s64) (s32) ((u32) *param_2 << 0xc); + *param_3 = (s32) (((u32) lVar1 >> 0xc | (s32) ((u64) lVar1 >> 0x20) * 0x100000) + ((s32) uVar4 >> 1) + 0x800) >> 0xc; + lVar1 = (s64) (s32) ((u32) param_2[1] << 0xc) * (s64) (s32) uVar4 + 0x800; + *param_4 = (s32) (((u32) lVar1 >> 0xc | (s32) ((u64) lVar1 >> 0x20) * 0x100000) + ((s32) uVar4 >> 1) + 0x800) >> 0xc; } ARM bool MapManager::func_ov00_02082e1c(s32 *param_2, s32 *param_3) { @@ -597,7 +616,7 @@ ARM bool MapManager::func_ov00_02082e1c(s32 *param_2, s32 *param_3) { local_44[0] = -0x100; local_48 = -0x100; bVar1 = this->mMap->mUnk_01a; - // iVar5 = UnkStruct_027e0d38::FUN_overlay_d_0__02078b40(*(UnkStruct_027e0d38 **) PTR_PTR_overlay_d_0__02083068); + iVar5 = data_027e0d38->func_ov000_02078b40(); if (iVar5 == 0) { // bVar2 = *(u8 *) (*(s32 *) (*(s32 *) PTR_PTR_overlay_d_0__02083068 + 0x28) + 0x9a); } else { @@ -894,8 +913,8 @@ ARM unk32 MapManager::func_ov00_020835b4() { return this->mCourse->Get_Unk_c8_04(); } -ARM unk8 MapManager::func_ov00_020835c4(MapManager *param_1, s32 param_2, unk32 param_3) { - return param_1->mCourse->func_ov00_0207d404(param_2, 0, param_3); +ARM bool MapManager::func_ov00_020835c4(s32 param_1, unk32 param_2) { + return this->mCourse->func_ov00_0207d404(param_1, 0, param_2, 3); } ARM bool MapManager::func_ov00_020835e4(s32 param_2, unk32 *param_3, unk8 *param_4) { @@ -916,14 +935,7 @@ ARM unk8 MapManager::func_ov00_02083614(s32 param_2) { ARM bool MapManager::GetEntrancePos(Entrance *param_1, unk32 entranceId) { Entrance *entrance = this->mMap->FindEntrance(entranceId); - q20 y = entrance->mPos.y; - q20 z = entrance->mPos.z; - param_1->mPos.x = entrance->mPos.x; - param_1->mPos.y = y; - param_1->mPos.z = z; - param_1->mAngle = entrance->mAngle; - param_1->mId = entrance->mId; - param_1->mUnk_10 = entrance->mUnk_10; + *param_1 = *entrance; return true; } @@ -1099,8 +1111,10 @@ ARM s32 MapManager::func_ov00_020839f8(s32 param_2) { } ARM void MapManager::func_ov00_02083a1c(Vec2b *param_1, MapManager *param_2, Vec3p *param_3) { - param_1->x /*or y?*/ = param_2->func_ov00_020839f8(param_3->z); - param_1->y /*or x?*/ = param_2->func_ov00_020839d4(param_3->x); + s8 x = param_2->func_ov00_020839f8(param_3->z); + s8 y = param_2->func_ov00_020839d4(param_3->x); + param_1->x = y; + param_1->y = x; } ARM void MapManager::func_ov00_02083a54(u8 *param_1, MapManager *param_2, s32 *param_3, s32 param_4, s32 *param_5) { @@ -1175,13 +1189,16 @@ ARM s32 MapManager::func_ov00_02083c50(unk32 z) { } ARM void MapManager::func_ov00_02083c7c(Vec3p *param_2, u32 param_3) { + q20 x; + q20 z; + q20 y; Vec3p local_28; - q20 x = this->func_ov00_02083c24(param_3 & 0xff); - // param_2->x = x; - q20 z = this->func_ov00_02083c50(param_3 >> 8 & 0xff); - // param_2->z = z; - q20 y = this->MapData_vfunc_68(&local_28, true); - // param_2->y = y; + x = this->func_ov00_02083c24(param_3 & 0xff); + param_2->x = x; + z = this->func_ov00_02083c50(param_3 >> 8 & 0xff); + param_2->z = z; + y = this->MapData_vfunc_68(&local_28, true); + param_2->y = y; } ARM void MapManager::func_ov00_02083ce8(MapManager *param_1, s32 *param_2, u32 param_3, s32 param_4, u32 param_5) { @@ -1612,6 +1629,7 @@ ARM s32 MapManager::func_ov00_02084700(MapManager *pMapManager) { unk8 MapManager::func_ov00_02084740() { static const s32 data_ov000_020d88f0[] = { + // Map IDs? 0x51, 0x6e, 0x65, 0x50, 0x30, 0x74, 0x49, 0x50, 0x51, 0x54, 0x52, 0x53, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5f, 0x60, 0x61, 0x5c, 0x5b, 0x5e, 0x62, 0x63, 0x64, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x5d, 0x31, 0x39, 0x3a, 0x3b, 0x3c, 0x32, 0x33, 0x34, 0x35, 0x38, 0x3d, 0xd9, 0xdc, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0x6f, 0x72, @@ -1625,7 +1643,7 @@ unk8 MapManager::func_ov00_02084740() { unk32 uVar5; unk32 uVar6; unk32 uVar7; - unk32 *puVar8; + s32 *puVar8; unk32 *puVar9; unk32 local_1c8; unk32 local_1c4; @@ -1645,7 +1663,7 @@ unk8 MapManager::func_ov00_02084740() { } puVar9 = local_1bc; iVar3 = 0x1b; - // puVar8 = (unk32 *) PTR_DWORD_overlay_d_0__020d88f0_overlay_d_0__020847dc; + puVar8 = (s32 *) data_ov000_020d88f0; do { uVar4 = *puVar8; uVar5 = puVar8[1]; @@ -1717,17 +1735,17 @@ void MapManager::func_ov00_02084924(u32 param_2) { this->mMap->func_ov00_0208008c(param_2); } -bool MapManager::func_ov00_02084934(s32 *param_2) { - int iVar2; - int iVar3; - int iVar4; +bool MapManager::func_ov00_02084934(Vec3p *param_2) { + q20 iVar2; + q20 iVar3; + q20 iVar4; Vec3p local_20; iVar2 = this->GetMapCenterZ(); - iVar3 = param_2[2]; - iVar4 = param_2[1]; + iVar3 = param_2->z; + iVar4 = param_2->y; local_20.x = this->GetMapCenterX(); - local_20.x = *param_2 - local_20.x; + local_20.x = param_2->x - local_20.x; local_20.y = iVar4; local_20.z = iVar3 - iVar2; return this->mMap->IsInBounds(&local_20); @@ -1822,22 +1840,20 @@ unk8 MapManager::func_ov00_02084b38(unk32 param_2, unk32 param_3, unk32 param_4) if (param_2 != 0) { // value = SUB41(param_4, 0); // What is SUB41 and where is it defined? switch (param_3) { - case 0: goto LAB_overlay_d_0__02084b60; + case 0: + pMVar1 = this->mMap; + if (param_4 == 0) { + pMVar1->mUnk_180[param_2 >> 5].mUnk_0 = pMVar1->mUnk_180[param_2 >> 5].mUnk_0 & ~(1 << (param_2 & 0x1f)); + return; + } + pMVar1->mUnk_180[param_2 >> 5].mUnk_0 = pMVar1->mUnk_180[param_2 >> 5].mUnk_0 | 1 << (param_2 & 0x1f); + return; case 1: this->mCourse->SetMapDataFlag0(param_2, value); return; case 2: this->mCourse->SetFlag0(param_2, value); return; case 3: this->mCourse->SetFlag1(param_2, value); return; default: return; } } - return; -LAB_overlay_d_0__02084b60: - pMVar1 = this->mMap; - if (param_4 == 0) { - pMVar1->mUnk_180[param_2 >> 5].mUnk_0 = pMVar1->mUnk_180[param_2 >> 5].mUnk_0 & ~(1 << (param_2 & 0x1f)); - return; - } - pMVar1->mUnk_180[param_2 >> 5].mUnk_0 = pMVar1->mUnk_180[param_2 >> 5].mUnk_0 | 1 << (param_2 & 0x1f); - return; } bool MapManager::func_ov00_02084be0(u32 param_2, unk32 param_3) { @@ -1924,14 +1940,14 @@ u8 MapManager::GetMapData_Unk_09() { return this->mMap->mUnk_009; } -unk8 MapManager::func_ov00_02084d24(unk8 param_2, unk8 param_3, unk32 param_4) { +ARM void MapManager::func_ov00_02084d24(unk32 param_2, unk32 param_3, unk32 param_4) { unk8 local_8; unk8 local_7; unk16 uStack_6; uStack_6 = (unk16) ((u32) param_4 >> 0x10); - // _local_8 = CONCAT11(param_3, param_2); // What is CONCAT11 ? - // this->mMap->vfunc_90(&local_8, param_4); // Missing parameter ? + // _local_8 = CONCAT11(param_3, param_2); // What is CONCAT11 ? + this->mMap->vfunc_90(param_2, param_3, param_4); // Missing parameter ? } s32 MapManager::func_ov00_02084d4c(unk32 param_2, unk32 param_3, Vec3p *param_4) { @@ -2028,48 +2044,25 @@ unk32 MapManager::func_ov00_02084ebc(Vec3p *param_2) { } if (iVar2 < 0x2a) { switch (iVar2) { - case 0: break; - case 1: return 0; - case 2: return 0; - case 3: return 0; - case 4: return 0; - case 5: return 0; - case 6: return 0; - case 7: break; - case 8: return 0; - case 9: return 0; - case 10: break; - case 0xb: break; - case 0xc: break; - case 0xd: break; - case 0xe: break; - case 0xf: break; - case 0x10: break; - case 0x11: break; - case 0x12: break; - case 0x13: break; - case 0x14: return 0; - case 0x15: break; - case 0x16: return 0; - case 0x17: return 0; - case 0x18: break; - case 0x19: return 0; - case 0x1a: break; - case 0x1b: break; - case 0x1c: break; - case 0x1d: return 0; - case 0x1e: return 0; - case 0x1f: return 0; - case 0x20: break; - case 0x21: break; - case 0x22: break; - case 0x23: break; - case 0x24: break; - case 0x25: break; - case 0x26: break; - case 0x27: return 0; - case 0x28: return 0; + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 8: + case 9: + case 0x14: + case 0x16: + case 0x17: + case 0x19: + case 0x1d: + case 0x1e: + case 0x1f: + case 0x27: + case 0x28: case 0x29: return 0; + default: break; } } else if (iVar2 == 0x37) { return 0;