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: 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 --- 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 + 6 files changed, 129 insertions(+), 72 deletions(-) (limited to 'include/Map') 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(MapBase_Unk2_02080ad0 param_2, TriggerBase **param_3); +}; - void func_ov00_02080ad0(TriggerBase **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; -- cgit v1.2.3