From dda45d5574798dc45a31437f473eaa55b9142e13 Mon Sep 17 00:00:00 2001 From: SammygoodTunes <56520787+SammygoodTunes@users.noreply.github.com> Date: Thu, 24 Jul 2025 19:23:29 +0200 Subject: Decomp `src/00_Core/Map/MapManager.cpp` (56%) (#101) * Fix * Fix * stupid typo * Another dumb typo * Fix * Fix declaration * Fix declaration * Fix * Fix symbols * Corrections * Fix regression in GetEntrancePos --------- Co-authored-by: Aetias --- src/00_Core/Map/MapManager.cpp | 1354 ++++++++++++++++++++-------------------- 1 file changed, 670 insertions(+), 684 deletions(-) (limited to 'src/00_Core/Map/MapManager.cpp') diff --git a/src/00_Core/Map/MapManager.cpp b/src/00_Core/Map/MapManager.cpp index f991890e..22f15cf8 100644 --- a/src/00_Core/Map/MapManager.cpp +++ b/src/00_Core/Map/MapManager.cpp @@ -7,10 +7,15 @@ #include "Actor/ActorManager.hpp" #include "Actor/ActorSpawner.hpp" #include "DTCM/UnkStruct_027e077c.hpp" +#include "DTCM/UnkStruct_027e0c68.hpp" #include "DTCM/UnkStruct_027e0d38.hpp" #include "DTCM/UnkStruct_027e0f64.hpp" +#include "DTCM/UnkStruct_027e0f6c.hpp" +#include "DTCM/UnkStruct_027e0f78.hpp" #include "DTCM/UnkStruct_027e0fd4.hpp" #include "DTCM/UnkStruct_027e103c.hpp" +#include "Message/MessageManager.hpp" +#include "Message/MsgProc.hpp" #include "Player/PlayerBase.hpp" #include "Save/AdventureFlags.hpp" #include "Unknown/UnkStruct_02037750.hpp" @@ -20,22 +25,18 @@ extern bool func_01ffbe78(Vec3p *param1, Vec3p *param2, Vec3p *param3, Vec4p *param4); extern u32 func_ov000_02078bc4(unk32 param_1); -extern void func_ov000_02078bf0(s32 *param_1, unk32 *param_2); extern s32 func_ov000_02078fe8(s32 *param_1); extern void func_ov000_0207920c(s32 *param_1, Vec3p *param_2, s32 *param_3, s32 *param_4); extern void func_ov000_020792a0(s32 *param_1, s32 param_2, unk32 param_3, unk32 param_4); extern void func_ov000_02079898(unk32 *param_1, unk32 param_2, unk32 param_3); extern void func_ov000_020798bc(s32 *param_1, s32 param_2); -extern void func_ov000_02088000(unk32 param_1, s32 param_2); +extern void func_ov000_02088000(UnkStruct_027e0f64_04 *param_1, s32 param_2); extern void func_ov000_02088130(u8 *param_1, unk32 param_2); extern void func_ov000_02088144(u8 *param_1, unk32 param_2); -extern unk32 func_ov000_0208b180(s32 *param_1); + extern s32 func_ov000_0208b73c(s32 param_1, unk32 param_2); extern s32 func_ov000_0208b7d0(s32 param_1, Vec3p *param_2); extern s32 func_ov000_0208b804(s32 *param_1, Vec3p *param_2, Vec3p *param_3); -extern void func_ov000_0208cc88(s32 *param1); -extern void func_ov000_0208d620(s32 *param_1); -extern void func_ov000_0208d680(s32 *param_1); extern s32 func_ov000_0208df78(s32 *param_1, unk32 param_, unk32 param_3, Vec3p *param_4, s32 *param_5); extern void func_ov000_0208e6b0(Vec3p *param_1, Vec3p *param_2); extern s32 func_ov000_0208e6f0(Vec3p *param_1); @@ -45,30 +46,9 @@ extern void func_ov000_0208ed74(AABB *param_1, Vec3p *param_2); extern void func_ov000_02093a1c(u32 *param_1, unk32 *param_2, unk32 param_3); extern void func_ov000_02096324(unk32 *param_1, unk32 *param_2); extern s32 *func_ov000_02096418(s32 *param_1); -extern void func_ov000_0209d6e8(unk32 *param_1, unk32 *param_2); -extern s32 func_ov000_0209d71c(s32 *param_1, s32 param_2); extern void func_ov000_020c3348(ActorSpawnOptions *param_1); -extern void func_ov000_020d70a4(unk32 *param_1, unk32 param_2, unk32 param_3, unk32 param_4); -extern void func_ov000_020d72b8(unk32 *param_1); - -extern void func_ov004_021024c4(MapManager *param_1, s32 param_2, bool param_3, s32 param_4); -extern void func_ov004_02102770(s32 *param_1); -extern void func_ov004_02102b28(s32 *param_1); -extern void func_ov004_02102e3c(s32 *param_1); -extern void func_ov004_02106db8(unk32 *param_1); // UnkStruct_027e0c68 doesn't exist, so using unk32 - -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); extern void func_ov015_021849a4(unk32 *param_1); -extern MapBase *func_ov017_0215b4a0(MapBase *param_1, unk32 param_2, unk32 param_3); -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); struct astruct_16 { @@ -85,43 +65,85 @@ struct astruct_16 { /* 2c */ }; // What is this struct? -class Case_0 : public MapBase { +class UnkStruct_0212b358 : public MapBase { public: char pad[0x790 - 0x1B0]; - Case_0(u32 param1, u32 param2); - virtual ~Case_0() override; + UnkStruct_0212b358(u32 param1, u32 param2); + virtual ~UnkStruct_0212b358() override; +}; + +class UnkStruct_02128dd8 : public MapBase { +public: + UnkStruct_02128dd8(u32 param1, u32 param2); + virtual ~UnkStruct_02128dd8() override; }; -class Case_4 : public MapBase { +class UnkStruct_0215b4a0 : public MapBase { public: char pad[0x1DC - 0x1B0]; - Case_4(u32 param1, u32 param2); - virtual ~Case_4() override; + UnkStruct_0215b4a0(u32 param1, u32 param2); + virtual ~UnkStruct_0215b4a0() override; }; -class Case_Default : public MapBase { +class UnkStruct_0215b4e8 : public MapBase { public: char pad[0x790 - 0x1B0]; - Case_Default(u32 param1, u32 param2); - virtual ~Case_Default() override; + UnkStruct_0215b4e8(u32 param1, u32 param2); + virtual ~UnkStruct_0215b4e8() override; +}; + +struct UnkStruct_02084740 { + /* 00 */ unk32 mUnk_00[0x6c]; + /* 68 */ +}; + +class UnkStruct_02085594 { +public: + /* 00 */ unk32 mUnk_00; + /* 04 */ Vec3p mUnk_04; + /* 10 */ unk32 mUnk_10; + /* 14 */ Vec3p mUnk_14; + /* 20 */ unk32 mUnk_20; + + virtual void vfunc_00(); + virtual void vfunc_04(); + virtual void vfunc_08(); + virtual void vfunc_0c(); + virtual void vfunc_10(); + virtual void vfunc_14(); + virtual void vfunc_18(); + virtual unk8 vfunc_1c(); + virtual void vfunc_20(); + virtual void vfunc_24(); + virtual void vfunc_28(); + virtual void vfunc_2c(); + virtual unk32 vfunc_30(unk32 param_2); + virtual void vfunc_34(); + virtual unk32 vfunc_38(unk32 param_2); + 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 unk32 *data_027e0c68; extern u32 *data_027e0ce0[]; extern UnkStruct_0202e894 *data_027e0ce4; extern unk32 *data_027e0d3c; -extern unk32 *data_027e0f68; -extern unk32 *data_027e0f6c; +extern UnkStruct_027e0f68 *data_027e0f68; extern unk32 *data_027e0f70; -extern unk32 *data_027e0f78; -extern unk32 *data_027e0f7c; -extern UnkStruct_027e103c *data_027e103c; - -extern unk32 *data_ov000_020e24a4; +extern unk32 data_ov000_020e24a4; +extern unk32 data_ov000_020e24b4; +extern unk32 data_ov000_020e24c4; extern MapManager_Unk2 data_ov000_020e24c8[]; extern MapManager_Unk2 data_ov000_020e24e8[]; extern unk32 data_ov015_02190458; +// static char *gShipParts[8] = {"anc", "bow", "hul", "can", "dco", "pdl", "fnl", "brg"}; + MapManager::MapManager() { /*MapManager_Unk1 *object; undefined *destructor; @@ -177,86 +199,84 @@ ARM void MapManager::func_ov00_020820fc(s32 param_2, unk32 param_3, unk32 param_ this->mCourse->func_ov00_0207ca28(param_2, param_3, param_4); } -ARM void MapManager::func_ov00_0208210c(unk32 param_2, unk32 *param_3) { - void *pvVar3; - unk32 uVar2; - FlagsUnk2 local_40[2]; - - local_40[1].mUnk_00.mUnk_00 = 0x47; - local_40[1].mUnk_04.mUnk_00 = 0; - local_40[1].mUnk_04.mUnk_04 = 0; - local_40[1].mUnk_04.mUnk_08 = -2; - local_40[1].mUnk_04.mUnk_0c = 0; - local_40[1].mUnk_04.mUnk_0e = -1; - local_40[1].mUnk_04.mUnk_0f = 0; - local_40[1].mUnk_04.mUnk_10 = 0; - local_40[1].mUnk_04.mUnk_11 = 0; +ARM void MapManager::func_ov00_0208210c(unk32 param_2, UnkStruct_0208210c_param3 *param_3) { + FlagsUnk2 local_28; + FlagsUnk2 local_40; + + local_28.mUnk_00.mUnk_00 = 0x47; + local_28.mUnk_04.mUnk_00.x = 0; + local_28.mUnk_04.mUnk_00.y = 0; + local_28.mUnk_04.mUnk_00.z = -2; + local_28.mUnk_04.mUnk_0c = 0x0000; + local_28.mUnk_04.mUnk_0e = -1; + local_28.mUnk_04.mUnk_0f = 0; + local_28.mUnk_04.mUnk_10 = 0; + local_28.mUnk_04.mUnk_11 = 0; + if (param_2 != 0) { - *param_3 = 0xb; - *(unk8 *) (param_3 + 1) = 2; - *(u8 *) ((int) param_3 + 5) = 4; + param_3->mUnk_00 = 0xb; + param_3->mUnk_04 = 2; + param_3->mUnk_05 = 4; } else { - this->func_ov00_02082348((unk32 *) &local_40[1]); - *param_3 = ((UnkStruct_027e0d38_UnkC *) &local_40[1])->func_ov000_020a5e9c(); - *(unk8 *) (param_3 + 1) = local_40[1].mUnk_04.mUnk_0e; - *(u8 *) ((int) param_3 + 5) = local_40[1].mUnk_04.mUnk_0f; - } - param_3[2] = ((UnkStruct_027e0d38_UnkC *) ((unk32) (data_027e0d38->mUnk_28) + 0x1c))->func_ov000_020a5e9c(); - *(u8 *) (param_3 + 4) = *(u8 *) ((int) data_027e0d38->mUnk_28 + 0x2e); - *(unk16 *) (param_3 + 5) = *(unk16 *) ((int) data_027e0d38->mUnk_28 + 0x36); - pvVar3 = data_027e0d38->mUnk_28; - param_3[6] = *(unk32 *) ((int) pvVar3 + 0x38); // Likely Vec3p - param_3[7] = *(unk32 *) ((int) pvVar3 + 0x3c); - param_3[8] = *(unk32 *) ((int) pvVar3 + 0x40); - param_3[3] = ((UnkStruct_027e0d38_UnkC *) ((unk32) data_027e0d38->mUnk_28 + 0x44))->func_ov000_020a5e9c(); - *(u8 *) ((int) param_3 + 0x11) = *(u8 *) ((int) data_027e0d38->mUnk_28 + 0x56); - pvVar3 = data_027e0d38->mUnk_28; - param_3[9] = *(unk32 *) ((int) pvVar3 + 0x5c); // Likely Vec3p - param_3[10] = *(unk32 *) ((int) pvVar3 + 0x60); - param_3[0xb] = *(unk32 *) ((int) pvVar3 + 0x64); - *(unk16 *) ((int) param_3 + 0x16) = *(unk16 *) ((int) data_027e0d38->mUnk_28 + 0x68); - pvVar3 = data_027e0d38->mUnk_28; - local_40[0].mUnk_00.mUnk_00 = *(unk32 *) ((int) pvVar3 + 0x70); - local_40[0].mUnk_04.mUnk_00 = *(unk32 *) ((int) pvVar3 + 0x74); - local_40[0].mUnk_04.mUnk_04 = *(unk32 *) ((int) pvVar3 + 0x78); - local_40[0].mUnk_04.mUnk_08 = *(unk32 *) ((int) pvVar3 + 0x7c); - local_40[0].mUnk_04.mUnk_0c = *(unk16 *) ((int) pvVar3 + 0x80); - local_40[0].mUnk_04.mUnk_0e = *(u8 *) ((int) pvVar3 + 0x82); - local_40[0].mUnk_04.mUnk_0f = *(u8 *) ((int) pvVar3 + 0x83); - local_40[0].mUnk_04.mUnk_10 = *(u8 *) ((int) pvVar3 + 0x84); - local_40[0].mUnk_04.mUnk_11 = *(u8 *) ((int) pvVar3 + 0x85); - uVar2 = ((UnkStruct_027e0d38_UnkC *) &local_40[0])->func_ov000_020a5e9c(); - param_3[0x70] = uVar2; - *(u8 *) ((int) param_3 + 0x1be) = local_40[0].mUnk_04.mUnk_0e; - *(u8 *) ((int) param_3 + 0x1bf) = local_40[0].mUnk_04.mUnk_0f; - func_ov000_02096324(data_027e0f70, param_3); - func_ov000_0209d6e8(data_027e0f7c, param_3); + this->func_ov00_02082348(&local_28); + param_3->mUnk_00 = local_28.mUnk_00.func_ov000_020a5e9c(); + param_3->mUnk_04 = local_28.mUnk_04.mUnk_0e; + param_3->mUnk_05 = local_28.mUnk_04.mUnk_0f; + } + + param_3->mUnk_08 = data_027e0d38->mUnk_28->mUnk_1c.func_ov000_020a5e9c(); + param_3->mUnk_10 = data_027e0d38->mUnk_28->mUnk_2e; + param_3->mUnk_14 = data_027e0d38->mUnk_28->mUnk_36; + param_3->mUnk_18 = data_027e0d38->mUnk_28->mUnk_38; + param_3->mUnk_0c = data_027e0d38->mUnk_28->mUnk_44.func_ov000_020a5e9c(); + param_3->mUnk_11 = data_027e0d38->mUnk_28->mUnk_56; + param_3->mUnk_24 = data_027e0d38->mUnk_28->mUnk_5c.mUnk_00; + param_3->mUnk_16 = data_027e0d38->mUnk_28->mUnk_5c.mUnk_0c; + + UnkStruct_027e0d38_Unk28 *pUVar4 = data_027e0d38->mUnk_28; + local_40.mUnk_00 = pUVar4->mUnk_70.mUnk_00; + local_40.mUnk_04.mUnk_00 = pUVar4->mUnk_70.mUnk_04.mUnk_00; + local_40.mUnk_04.mUnk_0c = pUVar4->mUnk_70.mUnk_04.mUnk_0c; + local_40.mUnk_04.mUnk_0e = pUVar4->mUnk_70.mUnk_04.mUnk_0e; + local_40.mUnk_04.mUnk_0f = pUVar4->mUnk_70.mUnk_04.mUnk_0f; + local_40.mUnk_04.mUnk_10 = pUVar4->mUnk_70.mUnk_04.mUnk_10; + local_40.mUnk_04.mUnk_11 = pUVar4->mUnk_70.mUnk_04.mUnk_11; + + param_3->mUnk_1c0 = local_40.mUnk_00.func_ov000_020a5e9c(); + param_3->mUnk_1be = local_40.mUnk_04.mUnk_0e; + param_3->mUnk_1bf = local_40.mUnk_04.mUnk_0f; + func_ov000_02096324(data_027e0f70, (unk32 *) param_3); + data_027e0f7c->func_ov000_0209d6e8((unk32 *) param_3); + if (this->mCourse->mType != CourseType_TempleOfTheOceanKing) { - *(bool *) ((int) param_3 + 7) = this->mUnk_08; - *(bool *) (param_3 + 0x6f) = this->mUnk_09; + param_3->mUnk_07 = this->mUnk_08; + param_3->mUnk_1bc = this->mUnk_09; } } -ARM void MapManager::func_ov00_0208230c(s32 *param_2) { - *param_2 = this->mCourse->mIndex; - Course *course = this->mCourse; - *(unk8 *) ((u32) param_2 + 0x12) = course->mMapGrid[(u8) course->mCurrMapPos.x][(u8) course->mCurrMapPos.y]; - *(unk8 *) ((u32) param_2 + 0x13) = this->mUnk_0c; +ARM void MapManager::func_ov00_0208230c(FlagsUnk2 *param_2) { + param_2->mUnk_00.mUnk_00 = this->mCourse->mIndex; + + Course *course = this->mCourse; + param_2->mUnk_04.mUnk_0e = course->mMapGrid[course->mCurrMapPos.x][course->mCurrMapPos.y]; + param_2->mUnk_04.mUnk_0f = this->mUnk_0c; } -ARM void MapManager::func_ov00_02082348(unk32 *param_2) { +ARM void MapManager::func_ov00_02082348(FlagsUnk2 *param_2) { FlagsUnk2 unkStruct; - unkStruct.mUnk_00.mUnk_00 = 0x47; - unkStruct.mUnk_04.mUnk_00 = 0; - unkStruct.mUnk_04.mUnk_04 = 0; - unkStruct.mUnk_04.mUnk_08 = -2; - unkStruct.mUnk_04.mUnk_0c = 0; - unkStruct.mUnk_04.mUnk_0e = -1; - unkStruct.mUnk_04.mUnk_0f = 0; - unkStruct.mUnk_04.mUnk_10 = 0; - unkStruct.mUnk_04.mUnk_11 = 0; - this->func_ov00_0208230c((s32 *) &unkStruct); - func_ov000_02078bf0((s32 *) &unkStruct, param_2); + + unkStruct.mUnk_00.mUnk_00 = 0x47; + unkStruct.mUnk_04.mUnk_00.x = 0; + unkStruct.mUnk_04.mUnk_00.y = 0; + unkStruct.mUnk_04.mUnk_00.z = -2; + unkStruct.mUnk_04.mUnk_0c = 0; + unkStruct.mUnk_04.mUnk_0e = -1; + unkStruct.mUnk_04.mUnk_0f = 0; + unkStruct.mUnk_04.mUnk_10 = 0; + unkStruct.mUnk_04.mUnk_11 = 0; + + this->func_ov00_0208230c(&unkStruct); + unkStruct.func_ov000_02078bf0(param_2); } ARM void MapManager::func_ov00_020823a4(unk32 param_2) { @@ -288,75 +308,71 @@ ARM void MapManager::MapData_vfunc_9c() { } ARM s32 MapManager::func_ov00_02082424() { - s32 var = this->mMap->vfunc_4c(); - if (var == 2) { - var = func_ov015_02129c14(this->mMap); // MapBase::GetUnk_19c_Unk_28 according to Ghidra - return var; + if (this->mMap->vfunc_4c() == 2) { + return this->mMap->func_ov015_02129c14(); // MapBase::GetUnk_19c_Unk_28 according to Ghidra } + return 0; } ARM bool MapManager::func_ov00_02082454(Vec3p *param_2, Vec3p *param_3) { - s32 var = this->mMap->vfunc_4c(); - if (var == 2) { - bool state = func_ov015_02129c24(this->mMap, param_2, param_3); - return state; + if (this->mMap->vfunc_4c() == 2) { + return this->mMap->func_ov015_02129c24(param_2, param_3); } + return false; } ARM bool MapManager::func_ov00_02082494(s32 param_2) { - s32 var = this->mMap->vfunc_4c(); - if (var == 2) { - bool state = func_ov015_02129c34(this->mMap, param_2); - return state; + if (this->mMap->vfunc_4c() == 2) { + return this->mMap->func_ov015_02129c34(param_2); } + return false; } ARM bool MapManager::func_ov00_020824cc(s32 param_2) { - s32 var = this->mMap->vfunc_4c(); - if (var == 2) { - bool state = func_ov015_02129c44(this->mMap, param_2); - return state; + if (this->mMap->vfunc_4c() == 2) { + return this->mMap->func_ov015_02129c44(param_2); } + return false; } ARM s32 MapManager::func_ov00_02082504() { - s32 var = this->mMap->vfunc_4c(); - if (var == 2) { + if (this->mMap->vfunc_4c() == 2) { return this->mMap->mUnk_1ac; } + return 0; } ARM Vec3p *MapManager::func_ov00_02082538() { - s32 var1 = this->mMap->vfunc_4c(); Vec3p var0; - if (var1 == 2) { + + if (this->mMap->vfunc_4c() == 2) { return &this->mMap->mUnk_1a0; } + + //! @bug: returning pointer to local variable (fake match?) var0 = gPlayerPos; return &var0; } ARM void MapManager::func_ov00_02082594() { - func_ov000_0208d620(data_027e0f68); + data_027e0f68->func_ov000_0208d620(); } ARM void MapManager::func_ov00_020825ac() { - func_ov000_0208d680(data_027e0f68); + data_027e0f68->func_ov000_0208d680(); } ARM s32 MapManager::GetCourseFilePath(char *courseName, char *buf) { - s32 var = sprintf(buf, "Map/%s/course.bin\0\0", courseName); - return var; + return sprintf(buf, "Map/%s/course.bin", courseName); } ARM void MapManager::func_ov00_020825e4(unk32 param_2, char *buf) { - char *courseName = (char *) func_ov000_0209d71c(data_027e0f7c, param_2); - this->GetCourseFilePath(courseName, buf); + this->GetCourseFilePath(data_027e0f7c->func_ov000_0209d71c(param_2), buf); } ARM void MapManager::func_ov00_02082614(char *param_2, unk32 param_3) { @@ -388,36 +404,31 @@ ARM void MapManager::func_ov00_020826a0(unk32 param_2, unk32 param_3) { } ARM void MapManager::CreateMap(unk32 mapType, unk32 param_3, unk32 param_4) { - MapBase *mapBase; if (this->mMap == NULL) { switch (mapType) { case 4: - this->mMap = new(data_027e0ce0[1], 4) Case_0(param_3, param_4); + this->mMap = new(data_027e0ce0[1], 4) UnkStruct_0212b358(param_3, param_4); break; case 2: - this->mMap = new(data_027e0ce0[1], 4) MapBase(param_3, param_4); + this->mMap = new(data_027e0ce0[1], 4) UnkStruct_02128dd8(param_3, param_4); break; case 0: - this->mMap = new(data_027e0ce0[1], 4) Case_4(param_3, param_4); + this->mMap = new(data_027e0ce0[1], 4) UnkStruct_0215b4a0(param_3, param_4); break; case 1: case 3: default: - this->mMap = new(data_027e0ce0[1], 4) Case_Default(param_3, param_4); + this->mMap = new(data_027e0ce0[1], 4) UnkStruct_0215b4e8(param_3, param_4); break; } } } ARM void MapManager::DestroyMap() { - if (this->mMap == NULL) { - return; - } if (this->mMap != NULL) { - this->mMap->~MapBase(); // 0x0 offset instead of the expected 0x4. + delete this->mMap; + this->mMap = NULL; } - this->mMap = NULL; - return; } ARM void MapManager::MapData_vfunc_44() { @@ -426,29 +437,31 @@ ARM void MapManager::MapData_vfunc_44() { ARM void MapManager::func_ov00_02082808(bool param_2) { int iVar1; - int iVar2; if (data_027e0d38->mUnk_14 == 1) { return; } + iVar1 = this->func_ov00_02084740(); + if (param_2) { - iVar2 = data_027e0d38->mUnk_0c.func_ov000_020a5e9c(); - if (iVar2 == 0) { + if (data_027e0d38->mUnk_0c.func_ov000_020a5e9c() == 0) { func_ov015_021849a4(&data_ov015_02190458); } - data_ov000_020eec68.func_ov000_020d70a4(iVar1, 0, 0x7f); + + data_ov000_020eec68.func_ov000_020d70a4(iVar1, 0, 127); } else { - iVar2 = data_ov000_020eec68.func_ov000_020d7424(); - if (iVar1 == iVar2) { + if (iVar1 == data_ov000_020eec68.func_ov000_020d7424()) { return; } - data_ov000_020eec68.func_ov000_020d70a4(iVar1, 0, 0x7f); + + data_ov000_020eec68.func_ov000_020d70a4(iVar1, 0, 127); } - iVar1 = data_027e0d38->mUnk_0c.func_ov000_020a5e9c(); - if (iVar1 == 0) { + + if (data_027e0d38->mUnk_0c.func_ov000_020a5e9c() == 0) { return; } + data_ov000_020eec68.func_ov000_020d72b8(); } @@ -469,16 +482,18 @@ ARM u8 MapManager::GetNumMaps() { } ARM s32 MapManager::func_ov00_02082914(unk32 param_2) { - void *pvVar1; - int iVar3; - int iVar4; + q20 iVar3; + q20 iVar4; int iVar5; Vec3p pVar1; + Entrance local_30; + + int local_48; + int local_50; switch (param_2) { - case 0xfa: - pvVar1 = data_027e0d38->mUnk_28; - Entrance local_30(*(Entrance *) ((s32) pvVar1 + 0x5c)); + case 0xfa: // temp correction + Entrance local_30(*(Entrance *) ((s32) data_027e0d38->mUnk_28 + 0x5c)); iVar3 = this->mMap->AddEntrance(&local_30); return iVar3; case 0xfb: @@ -487,48 +502,44 @@ ARM s32 MapManager::func_ov00_02082914(unk32 param_2) { case 0xfe: break; default: - return (int) this; + return this->mCourse->mIndex; } + Entrance local_44; - pvVar1 = data_027e0d38->mUnk_28; - pVar1 = *(Vec3p *) ((int) pvVar1 + 0x38); - iVar3 = 0x2000; - iVar4 = 0x2000; - iVar5 = 0xfd; + + pVar1 = data_027e0d38->mUnk_28->mUnk_38; + iVar3 = FLOAT_TO_Q20(2.0); + iVar4 = FLOAT_TO_Q20(2.0); + iVar5 = 0xfd; if (this->mCourse->mType == CourseType_Sea) { - iVar3 = this->mMap->vfunc_88(); - iVar3 = iVar3 + 0xa000; - iVar4 = this->mMap->vfunc_8c(); - iVar4 = iVar4 + 0xa000; + iVar3 = this->mMap->vfunc_88() + 0xa000; + iVar4 = this->mMap->vfunc_8c() + 0xa000; iVar5 = 0xfe; } + local_44.mAngle = 0; + switch (param_2) { case 0xfb: - pVar1.z = this->GetMapMaxZ(); - pVar1.z = pVar1.z - iVar4; + pVar1.z = this->GetMapMaxZ() - iVar4; local_44.mAngle = 0x8000; break; case 0xfc: - pVar1.z = this->GetMapMinZ(); - pVar1.z = iVar4 + pVar1.z; + pVar1.z = iVar4 + this->GetMapMinZ(); local_44.mAngle = 0; break; case 0xfd: - pVar1.x = GetMapMaxX(); - pVar1.x = pVar1.x - iVar3; + pVar1.x = GetMapMaxX() - iVar3; local_44.mAngle = 0xc000; break; case 0xfe: - pVar1.x = GetMapMinX(); - pVar1.x = iVar3 + pVar1.x; + pVar1.x = iVar3 + GetMapMinX(); local_44.mAngle = 0x4000; + break; } - local_44.mId = (unk8) param_2; - local_44.mPos.x = pVar1.x; - local_44.mPos.z = pVar1.z; - local_44.mPos.y = pVar1.y; - local_44.mUnk_10 = iVar5; + + local_44.mId = param_2; + local_44.mPos = pVar1; return this->mMap->AddEntrance(&local_44); } @@ -541,54 +552,58 @@ ARM s32 *MapManager::func_ov00_02082adc() { } ARM void MapManager::func_ov00_02082af4() { - func_ov000_0208cc88(data_027e0f68); + data_027e0f68->func_ov000_0208cc88(); this->mMap->vfunc_48(); this->func_ov00_02082808(false); this->mUnk_0a = true; this->mUnk_0b = false; } -void MapManager::func_ov00_02082b3c(unk32 *param_2, Vec2b *param_3) { - u8 bVar1; - u16 uVar3; - u32 uVar4; - unk32 uVar5; - ActorManager *pAVar6; - PlayerBase *puVar2; - - this->mCourse->FindMapGridPos(param_3, this->mCourse, *(u32 *) ((unk32) param_2 + 0x12)); - uVar4 = this->GetCurrentMapPosX(); - if (((((param_3->x) == uVar4) && (uVar4 = this->GetCurrentMapPosY(), (param_3->y) == uVar4)) && - ((*(s32 *) (param_2 + 8) != 1 || (*(s32 *) (*(s32 *) data_027e0d38 + 0x14) != 1)))) && - (*(char *) (param_2 + 0x15) == '\0')) { - gAdventureFlags->func_ov00_020976c8(); - this->mUnk_0c = *(unk32 *) (param_2 + 0x13); - gPlayer->TeleportToEntrance(*(unk32 *) (param_2 + 0x13), false); - func_ov004_02106db8(data_027e0c68); - this->mMap->vfunc_18(); - } else { +ARM bool MapManager::func_ov00_02082b3c(FlagsUnk2 *param_2) { + Vec2b mapGridPos; + u8 entranceId; + bool cmp; + ActorManager *actorManager; + u16 var1; + u32 var2; + + Course::FindMapGridPos(&mapGridPos, this->mCourse, param_2->mUnk_04.mUnk_0e); + + if (mapGridPos.x != this->GetCurrentMapPosX() || mapGridPos.y != this->GetCurrentMapPosY() || + (param_2->mUnk_04.mUnk_00.y == 1 && data_027e0d38->mUnk_14 == 1) || param_2->mUnk_04.mUnk_11 != 0) { gAdventureFlags->func_ov00_020976c8(); data_027e0f64->func_ov000_0208b13c(); - uVar5 = this->func_ov00_02082d08(); - gActorManager->func_ov004_02105608(param_3->x, param_3->y, uVar5); + actorManager = gActorManager; + actorManager->func_ov004_02105608(mapGridPos.x, mapGridPos.y, this->func_ov00_02082d08()); this->mMap->vfunc_2c(); - func_ov004_02102b28(data_027e0f68); - func_ov004_02102770(data_027e0f6c); - func_ov004_02102e3c(data_027e0f78); - bVar1 = *(u8 *) (param_2 + 0x12); - uVar3 = this->mCourse->FindCurrentMapData_Unk_04(); - uVar4 = this->mCourse->FindMapData_Unk_04((u32) bVar1); - (this->mCourse->mCurrMapPos).x = (u8) param_3->x; - (this->mCourse->mCurrMapPos).y = (u8) param_3->y; - this->func_ov004_021024c4(param_2, uVar3 != uVar4, 0); - gActorManager->func_ov004_02105578(*(unk32 *) ((unk32) param_2 + 0x12)); + data_027e0f68->func_ov004_02102b28(); + data_027e0f6c->func_ov004_02102770(); + data_027e0f78->func_ov004_02102e3c(); + entranceId = param_2->mUnk_04.mUnk_0e; + cmp = false; + var1 = this->mCourse->FindCurrentMapData_Unk_04(); + var2 = this->mCourse->FindMapData_Unk_04(entranceId); + if (var1 != var2) { + cmp = true; + } + this->mCourse->mCurrMapPos.x = mapGridPos.x; + this->mCourse->mCurrMapPos.y = mapGridPos.y; + this->func_ov004_021024c4(param_2, cmp, false); + gActorManager->func_ov004_02105578(param_2->mUnk_04.mUnk_0e); data_027e103c->func_ov000_020cfcec(); + } else { + gAdventureFlags->func_ov00_020976c8(); + this->mUnk_0c = param_2->mUnk_04.mUnk_0f; + gPlayer->TeleportToEntrance(param_2->mUnk_04.mUnk_0f, false); + gMessageManager.func_ov004_02106db8(); + this->mMap->vfunc_18(); } + return true; } ARM u8 MapManager::func_ov00_02082d08() { Course *course = this->mCourse; - return course->mMapGrid[(u8) course->mCurrMapPos.x][(u8) course->mCurrMapPos.y]; + return course->mMapGrid[course->mCurrMapPos.x][course->mCurrMapPos.y]; } ARM u8 MapManager::GetCurrentMapPosX() { @@ -602,10 +617,12 @@ ARM u8 MapManager::GetCurrentMapPosY() { ARM u8 MapManager::func_ov00_02082d40() { switch (this->mCourse->mType) { case CourseType_Sea: - return this->mCourse->mMapGrid[(u8) this->mCourse->mCurrMapPos.x][(u8) this->mCourse->mCurrMapPos.y]; + return this->mCourse->mMapGrid[this->mCourse->mCurrMapPos.x][this->mCourse->mCurrMapPos.y]; default: - return this->mCourse->mUnk_0b1; + break; } + + return this->mCourse->mUnk_0b1; } ARM u32 MapManager::func_ov00_02082d74(unk32 param_2) { @@ -626,113 +643,110 @@ ARM void MapManager::func_ov00_02082d84(Vec2b *param_2, s32 *param_3, s32 *param } ARM bool MapManager::func_ov00_02082e1c(s32 *param_2, s32 *param_3) { - unk32 local_20; // Unused. What could this be for? - unk32 local_24; // Unused. What could this be for? - unk32 local_28; // Vec3p instead ??? - s32 local_44[11]; // not [6] apparently - s32 local_48; + Vec2p mapScreenPos; + u8 uVar8; + Vec3p local_28; Vec2b local_4a; - u8 local_4b; - u8 local_4c; - u8 bVar1; - u8 bVar2; - s64 lVar3; - s32 iVar5; - u32 uVar7; - if (!this->mCourse->mUnk_25c) { - *param_2 = 0xc0; - *param_3 = 0xc0; - return false; - } - if (!this->mCourse->IsCurrentMapInMainGrid()) { - local_44[0] = -0x100; - local_48 = -0x100; - bVar1 = this->mMap->mUnk_01a; - iVar5 = data_027e0d38->func_ov000_02078b40(); - if (iVar5 == 0) { - // bVar2 = *(u8 *) (*(s32 *) (*(s32 *) PTR_PTR_overlay_d_0__02083068 + 0x28) + 0x9a); - } else { - // bVar2 = *(u8 *) (*(s32 *) (*(s32 *) PTR_PTR_overlay_d_0__02083068 + 0x28) + 0x2e); - } - uVar7 = (u32) bVar2; - if (uVar7 == 0xff) { - uVar7 = (u32) (u8) this->mCourse->mMapGrid[(u8) this->mCourse->mUnk_01e][(u8) this->mCourse->mUnk_01f]; - } - // iVar5 = UnkStruct_027e0d38::FUN_overlay_d_0__02078b40(*(UnkStruct_027e0d38 **) PTR_PTR_overlay_d_0__02083068); - if (iVar5 == 0) { - // iVar5 = *(s32 *) (*(s32 *) PTR_PTR_overlay_d_0__02083068 + 0x28); - local_24 = *(unk32 *) (iVar5 + 0xa4); - local_20 = *(unk32 *) (iVar5 + 0xa8); - local_28 = *(unk32 *) (iVar5 + 0xa0); - } else { - // iVar5 = *(int *) (*(int *) PTR_PTR_overlay_d_0__02083068 + 0x28); - local_24 = *(unk32 *) (iVar5 + 0x3c); - local_20 = *(unk32 *) (iVar5 + 0x40); - local_28 = *(unk32 *) (iVar5 + 0x38); - } - if (this->mCourse->GetMapScreenPos((u32) bVar1, local_44, &local_48)) { - uVar7 = this->mCourse->GetScreenMapCellSizeX(); - lVar3 = (s64) (s32) ((u32) (u8) this->mMap->mUnk_01b << 0xc) * (s64) (s32) uVar7 + 0x800; - *param_2 = local_44[0] + ((s32) (((u32) lVar3 >> 0xc | (s32) ((u64) lVar3 >> 0x20) * 0x100000) + 0x800) >> 0xc); - uVar7 = this->mCourse->GetScreenMapCellSizeY(); - local_4b = this->mMap->mUnk_01c; + Vec3p local_4c; + Course *course; + bool bVar1; + + if (this->mCourse->mUnk_25c) { + if (!this->mCourse->IsCurrentMapInMainGrid()) { + mapScreenPos.x = -256; + mapScreenPos.y = -256; + bVar1 = this->mMap->mUnk_01a; + + if (!data_027e0d38->func_ov000_02078b40()) { + uVar8 = data_027e0d38->mUnk_28->mUnk_9a; + } else { + uVar8 = data_027e0d38->mUnk_28->mUnk_2e; + } + + if (uVar8 == 0xff) { + course = this->mCourse; + uVar8 = course->mMapGrid[course->mUnk_01e.x][course->mUnk_01e.y]; + } + + if (!data_027e0d38->func_ov000_02078b40()) { + local_28 = data_027e0d38->mUnk_28->mUnk_38; + } else { + local_28 = data_027e0d38->mUnk_28->mUnk_a0; + } + + long long lVar3; + + if (!this->mCourse->GetMapScreenPos(bVar1, &mapScreenPos.x, &mapScreenPos.y)) { + this->mCourse->GetMapScreenPos(uVar8, &mapScreenPos.x, &mapScreenPos.y); + Course::FindMapGridPos(&local_4a, this->mCourse, uVar8); + MapManager::func_ov00_02083a54(&local_4a, this, &local_28, local_4a.x, local_4a.y); + uVar8 = this->mCourse->GetScreenMapCellSizeX(); + lVar3 = (int) ((u32) local_4c.x << 0xc) * (int) uVar8 + 0x800; + *param_2 = mapScreenPos.y + ((int) (((u32) lVar3 >> 0xc | (int) (lVar3 >> 0x20) * 0x100000) + 0x800) >> 0xc); + uVar8 = this->mCourse->GetScreenMapCellSizeY(); + } else { + uVar8 = this->mCourse->GetScreenMapCellSizeX(); + lVar3 = (int) ((u32) (char) this->mMap->mUnk_01b << 0xc) * (int) uVar8 + 0x800; + *param_2 = mapScreenPos.y + ((int) (((u32) lVar3 >> 0xc | (int) (lVar3 >> 0x20) * 0x100000) + 0x800) >> 0xc); + uVar8 = this->mCourse->GetScreenMapCellSizeY(); + local_4c.y = this->mMap->mUnk_01c; + } + + // probably an optimized div? or another operator like that + /* + s64 lVar1 = (s64) ((u8) param_2->x << 0xc) * (s32) uVar3 + 0x800; + *param_3 = (s32) (((s32) (lVar1 >> 0xc)) + ((s32) uVar3 >> 1) + 0x800) >> 0xc; + */ + lVar3 = (local_4c.y << 0xc) * uVar8 + 0x800; + *param_3 = mapScreenPos.x + ((int) (((u32) lVar3 >> 0xc | (int) (lVar3 >> 0x20) * 0x100000) + 0x800) >> 0xc); + return true; } else { - this->mCourse->GetMapScreenPos(uVar7, local_44, &local_48); - this->mCourse->FindMapGridPos(&local_4a, this->mCourse, uVar7); - // this->func_ov00_02083a54(&local_4c, this, &local_28, (u32) local_4a.x, (u32) local_4a.y); - uVar7 = this->mCourse->GetScreenMapCellSizeX(); - lVar3 = (s64) (s32) ((u32) local_4c << 0xc) * (s64) (s32) uVar7 + 0x800; - *param_2 = local_44[0] + ((s32) (((u32) lVar3 >> 0xc | (s32) ((u64) lVar3 >> 0x20) * 0x100000) + 0x800) >> 0xc); - uVar7 = this->mCourse->GetScreenMapCellSizeY(); + param_2[0] = 0x80; + param_3[0] = 0x80; + return false; } - lVar3 = (s64) (s32) ((u32) local_4b << 0xc) * (s64) (s32) uVar7 + 0x800; - *param_3 = local_48 + ((s32) (((u32) lVar3 >> 0xc | (s32) ((u64) lVar3 >> 0x20) * 0x100000) + 0x800) >> 0xc); - return true; + } else { + param_2[0] = 0xC0; + param_3[0] = 0xC0; + return false; } } ARM void MapManager::func_ov00_0208306c(s32 *param_2, s32 *param_3) { - MapManager *pMVar1; - s32 iVar2; - MapManager *pMVar3; Vec2b auStack_2c[18]; - s32 local_28; // This has to be a Vec3p, but uncertain as of now. - unk32 local_24; // Unused. - unk32 local_20; // Unused. Vec3p local_1c; + Vec3p local_28; + unk32 pMVar1; + UnkStruct_027e0d38_Unk28 *iVar2; + unk32 pMVar3; + + pMVar3 = this->mCourse->mUnk_008; + pMVar1 = -3; + if (pMVar3 != -3) { + pMVar1 = -2; + } - pMVar3 = (MapManager *) this->mCourse->mUnk_008; - pMVar1 = this; // why - if (pMVar3 != (MapManager *) 0xfffffffd) { - pMVar1 = (MapManager *) 0xfffffffe; // I really don't get this - } - if (pMVar3 == (MapManager *) 0xfffffffd || pMVar3 == pMVar1) { - // iVar2 = *(s32 *) (*(s32 *) PTR_PTR_overlay_d_0__02083158 + 0x28); - local_28 = *(int *) (iVar2 + 0x5c); - local_24 = *(unk32 *) (iVar2 + 0x60); - local_20 = *(unk32 *) (iVar2 + 100); - /*this->func_ov00_02083244((u32) * (u8 *) (*(s32 *) (*(s32 *) PTR_PTR_overlay_d_0__02083158 + 0x28) + 0x56), &local_28, - param_2, param_3);*/ + local_1c = gPlayerPos; + this->func_ov00_02083a1c(auStack_2c, this, &local_1c); + this->func_ov00_02082d84(auStack_2c, param_2, param_3); + + if (pMVar3 == -3 || pMVar3 == pMVar1) { + iVar2 = data_027e0d38->mUnk_28; + local_28 = iVar2->mUnk_5c.mUnk_00; + this->func_ov00_02083244(iVar2->mUnk_56, &local_28, param_2, param_3); return; } - if (pMVar3 != (MapManager *) 0xffffffff) { + if (pMVar3 != -1) { *param_2 = this->mCourse->mUnk_0b4; *param_3 = this->mCourse->mUnk_0b8; return; } - local_1c.y = gPlayerPos.y; - local_1c.x = gPlayerPos.x; - local_1c.z = gPlayerPos.z; - // this->func_ov00_02083a1c(auStack_2c, this, &local_1c); - this->func_ov00_02082d84(auStack_2c, param_2, param_3); } ARM void MapManager::func_ov00_0208315c(s32 *param_2, s32 *param_3) { - u32 uVar1; s32 *piVar2; - UnkStruct_027e0d38_Unk28 *pvVar3; s32 *piVar4; - Vec3p local_20; + Vec3p playerPos; Vec3p local_2c; *piVar4 = this->mCourse->mUnk_008; @@ -741,36 +755,34 @@ ARM void MapManager::func_ov00_0208315c(s32 *param_2, s32 *param_3) { if (*piVar4 != -3) { *piVar2 = -2; } - local_20.x = gPlayerPos.x; - local_20.y = gPlayerPos.y; - local_20.z = gPlayerPos.z; - uVar1 = this->func_ov00_02082d08(); - this->func_ov00_02083298(uVar1, &local_20, param_2, param_3); - - if (*piVar4 == -2 || piVar4 == piVar2) { - pvVar3 = data_027e0d38->mUnk_28; - local_2c.x = pvVar3->mUnk_5c.mUnk_00; - local_2c.y = pvVar3->mUnk_5c.mUnk_04; - local_2c.z = pvVar3->mUnk_5c.mUnk_08; - this->func_ov00_02083298((u32) * (u8 *) (*(s32 *) data_027e0d38->mUnk_28 + 0x56), &local_2c, param_2, param_3); + + playerPos = gPlayerPos; + this->func_ov00_02083298(this->func_ov00_02082d08(), &playerPos, param_2, param_3); + + if (*piVar4 != -3 && piVar4 != piVar2) { + local_2c = data_027e0d38->mUnk_28->mUnk_5c.mUnk_00; + this->func_ov00_02083298(data_027e0d38->mUnk_28->mUnk_56, &local_2c, param_2, param_3); return; } + if (*piVar4 != -1) { *param_2 = this->mCourse->mUnk_0bc; *param_3 = this->mCourse->mUnk_0c0; + return; } } ARM void MapManager::func_ov00_02083244(u32 param_2, Vec3p *param_3, s32 *param_4, s32 *param_5) { - if (4 <= param_2) { + if (param_2 >= 4) { param_2 = 0; } + *param_4 = (param_3->x - data_ov000_020e24e8[param_2].mUnk_0) + 0x800 >> 0xc; *param_5 = (param_3->z - data_ov000_020e24e8[param_2].mUnk_4) + 0x800 >> 0xc; } ARM void MapManager::func_ov00_02083298(u32 param_2, Vec3p *param_3, s32 *param_4, s32 *param_5) { - if (4 <= param_2) { + if (param_2 >= 4) { param_2 = 0; } @@ -787,16 +799,15 @@ ARM bool MapManager::IsMapInMainGrid(u32 map) { } ARM bool MapManager::func_ov00_02083328() { - u32 map = (u32) this->func_ov00_02082d08(); - return this->mCourse->IsMapInMainGrid(map); + return this->mCourse->IsMapInMainGrid(this->func_ov00_02082d08()); } ARM u8 MapManager::GetCourseMainGridSizeX() { - return (u8) this->mCourse->mMainGridSize.x; + return this->mCourse->mMainGridSize.x; } ARM u8 MapManager::GetCourseMainGridSizeY() { - return (u8) this->mCourse->mMainGridSize.y; + return this->mCourse->mMainGridSize.y; } ARM u16 MapManager::GetMapWidth() { @@ -877,28 +888,29 @@ ARM void MapManager::GetMapCenter(Vec3p *param_2) { } ARM void MapManager::func_ov00_0208346c(AABB *param_2) { - (param_2->min).x = this->GetMapMinX(); - (param_2->min).z = this->GetMapMinZ(); - (param_2->max).x = this->GetMapMaxX(); - (param_2->max).z = this->GetMapMaxZ(); - (param_2->max).y = 0x1333; - (param_2->min).y = 0; + param_2->min.x = this->GetMapMinX(); + param_2->min.z = this->GetMapMinZ(); + + param_2->max.x = this->GetMapMaxX(); + param_2->max.z = this->GetMapMaxZ(); + + param_2->max.y = FLOAT_TO_Q20(1.2); + param_2->min.y = 0; } ARM void MapManager::func_ov00_020834bc(Vec3p *param_2, unk32 param_3, unk32 param_4) { - Vec3p *mapCenter = this->mCourse->FindMapCenter((u32) (u8) this->mCourse->mMapGrid[param_3][param_4]); - s32 iVar2; + Vec3p *mapCenter = this->mCourse->FindMapCenter(this->mCourse->mMapGrid[param_3][param_4]); + param_2->x = mapCenter->x; param_2->y = mapCenter->y; param_2->z = mapCenter->z; - iVar2 = this->func_ov00_02083374(); - param_2->x = param_2->x - (iVar2 >> 1); - iVar2 = this->func_ov00_02083384(); - param_2->z = param_2->z - (iVar2 >> 1); + + param_2->x = param_2->x - (this->func_ov00_02083374() >> 1); + param_2->z = param_2->z - (this->func_ov00_02083384() >> 1); } ARM void MapManager::func_ov00_02083524(Vec3p *param_2, unk32 param_3, unk32 param_4) { - Vec3p *mapCenter = this->mCourse->FindMapCenter((u32) (u8) this->mCourse->mMapGrid[param_3][param_4]); + Vec3p *mapCenter = this->mCourse->FindMapCenter(this->mCourse->mMapGrid[param_3][param_4]); param_2->x = mapCenter->x; param_2->y = mapCenter->y; param_2->z = mapCenter->z; @@ -998,46 +1010,43 @@ ARM bool MapManager::IsTriggerTypeOverlapped(u32 type, Vec3p *pos) { return this->mMap->IsTriggerTypeOverlapped(type, pos); } -ARM bool MapManager::GetOverlappingTrigger(Vec3p *param_2) { +ARM unk8 MapManager::GetOverlappingTrigger(Vec3p *param_2) { return this->mMap->GetOverlappingTrigger(param_2); } ARM bool MapManager::func_ov00_02083790(s32 param_2) { - bool bVar1; - int iVar2; int aiStack_14; int iStack_18; if (param_2 == 0) { return true; } - *(int *) (*(int *) ((unk32 *) data_027e0f64 + 2) + 0x1b4) = param_2; - *(int *) (*(int *) ((unk32 *) data_027e0f64 + 1) + 0x1b4) = param_2; - iVar2 = data_027e0d38->func_ov000_02078b40(); - if ((iVar2 != 0) && (bVar1 = this->func_ov00_02082e1c(&aiStack_14, &iStack_18), !bVar1)) { + + data_027e0f64->mUnk_8->mUnk_1b4 = param_2; + data_027e0f64->mUnk_4->mUnk_1b4 = param_2; + + if (data_027e0d38->func_ov000_02078b40() != 0 && !this->func_ov00_02082e1c(&aiStack_14, &iStack_18)) { func_ov000_02079898(data_027e0d3c, param_2, 0x10); gActorManager->func_ov00_020c3ce8(param_2, true); } - bVar1 = this->mMap->AnyTrigger_func_0c(param_2); - return bVar1; + + return this->mMap->AnyTrigger_func_0c(param_2); } ARM bool MapManager::func_ov00_02083840(s32 param_2) { - bool bVar3; - s32 iVar4; - if (param_2 == 0) { return true; } - *(unk32 *) (*(unk32 *) ((unk32 *) data_027e0f64 + 2) + 0x1b4) = -1; - *(unk32 *) (*(unk32 *) ((unk32 *) data_027e0f64 + 1) + 0x1b4) = -1; - iVar4 = func_ov000_02078fe8(data_027e0d3c); - if (0 <= iVar4) { + + data_027e0f64->mUnk_8->mUnk_1b4 = -1; + data_027e0f64->mUnk_4->mUnk_1b4 = -1; + + if (func_ov000_02078fe8(data_027e0d3c) >= 0) { func_ov000_020798bc(data_027e0d3c, 0x10); gActorManager->func_ov00_020c3ce8(param_2, false); } - bVar3 = this->mMap->TriggerOfType_vfunc_10(param_2); - return bVar3; + + return this->mMap->TriggerOfType_vfunc_10(param_2); } ARM bool MapManager::AddTrigger(s32 param_2) { @@ -1118,51 +1127,40 @@ ARM void MapManager::func_ov00_02083a1c(Vec2b *param_1, MapManager *param_2, Vec 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) { - bool bVar1; +ARM void MapManager::func_ov00_02083a54(Vec2b *param_1, MapManager *param_2, Vec3p *param_3, s32 param_4, unk32 param_5) { unk8 uVar2; unk8 uVar3; s32 iVar4; + Vec3p VStack_20; u32 uVar5; - s32 *piVar6; - Vec3p local_38; + Vec3p *piVar6; Vec3p local_2c; - Vec3p VStack_20; + Vec3p local_38; - piVar6 = param_3; - iVar4 = param_2->GetCourseData_Unk_25c(); - if (iVar4 == 0) { - uVar2 = param_2->func_ov00_020839f8(param_3[2]); - uVar3 = param_2->func_ov00_020839d4(*param_3); - *param_1 = uVar3; - param_1[1] = uVar2; - return; - } - if (param_4 != -1) { - piVar6 = param_5; - } - if (param_4 != -1 && piVar6 != (int *) 0xffffffff) { - uVar5 = (u32) * (u8 *) ((s32) piVar6 + (s32) (param_2->mCourse->mMapGrid + param_4)); - } else { - uVar5 = param_2->func_ov00_02082d08(); - } - bVar1 = param_2->IsMapInMainGrid(uVar5); - if (!bVar1) { - uVar2 = param_2->func_ov00_020839f8(param_3[2]); - uVar3 = param_2->func_ov00_020839d4(*param_3); - *param_1 = uVar3; - param_1[1] = uVar2; + if (param_2->GetCourseData_Unk_25c() != 0) { + uVar5 = (param_4 == -1 || param_5 == 0xffffffff) ? param_2->func_ov00_02082d08() + : uVar5 = param_2->mCourse->mMapGrid[param_4][param_5]; + + if (param_2->IsMapInMainGrid(uVar5)) { + param_2->func_ov00_02083524(&VStack_20, param_4, param_5); + local_38 = *param_3; + Vec3p_Sub(&local_38, &VStack_20, &local_2c); + uVar2 = param_2->mMap->GetClampedTileY(local_2c.z); + uVar3 = param_2->mMap->GetClampedTileX(local_2c.x); + param_1->x = uVar3; + param_1->y = uVar2; + return; + } + uVar2 = param_2->func_ov00_020839f8(param_3->z); + uVar3 = param_2->func_ov00_020839d4(param_3->x); + param_1->x = uVar3; + param_1->y = uVar2; return; } - param_2->func_ov00_02083524(&VStack_20, param_4, *param_5); - local_38.x = *param_3; - local_38.y = param_3[1]; - local_38.z = param_3[2]; - Vec3p_Sub(&local_38, &VStack_20, &local_2c); - uVar2 = param_2->mMap->GetClampedTileY(local_2c.z); - uVar3 = param_2->mMap->GetClampedTileX(local_2c.x); - *param_1 = uVar3; - param_1[1] = uVar2; + uVar2 = param_2->func_ov00_020839f8(param_3->z); + uVar3 = param_2->func_ov00_020839d4(param_3->x); + param_1->x = uVar3; + param_1->y = uVar2; } ARM s32 MapManager::GetTileStartX(unk32 x) { @@ -1198,35 +1196,34 @@ ARM void MapManager::func_ov00_02083c7c(Vec3p *param_2, Vec2b param_3) { param_2->y = this->MapData_vfunc_68(&local_28, true); } -ARM void MapManager::func_ov00_02083ce8(Vec3p *param_2, u32 param_3, s32 param_4, u32 param_5) { - bool bVar1; +ARM void MapManager::func_ov00_02083ce8(Vec3p *param_2, Vec2b param_3, s32 param_4, u32 param_5) { u32 uVar2; - Vec3p local_38; + u8 uVar3; + u8 uVar4; Vec3p local_2c; + Vec3p local_38; + Vec2b local_8; - uVar2 = param_3; - bVar1 = GetCourseData_Unk_25c(); - if (bVar1) { - if (param_4 != -1) { - uVar2 = param_5; - } else if (param_4 != -1 && uVar2 != -1) { - uVar2 = this->mCourse->mMapGrid[param_4][uVar2]; - } else { + if (GetCourseData_Unk_25c()) { + if (param_4 == -1 || param_5 == -1) { uVar2 = this->func_ov00_02082d08(); + } else { + uVar2 = this->mCourse->mMapGrid[param_4][param_5]; } - bVar1 = this->IsMapInMainGrid(uVar2); - if (bVar1) { + + if (this->IsMapInMainGrid(uVar2)) { func_ov00_02083524(&local_2c, param_4, param_5); - param_2->x = local_2c.x + this->mMap->GetTileStartX(param_3 & 0xff) + 0x800; - param_2->z = local_2c.z + this->mMap->GetTileStartZ(param_3 >> 8 & 0xff) + 0x800; + param_2->x = local_2c.x + this->mMap->GetTileStartX(param_3.x) + 0x800; + param_2->z = local_2c.z + this->mMap->GetTileStartZ(param_3.y) + 0x800; } else { - param_2->x = this->mMap->GetTileStartX(param_3 & 0xff) + 0x800; - param_2->z = this->mMap->GetTileStartZ(param_3 >> 8 & 0xff) + 0x800; + param_2->x = this->mMap->GetTileStartX(param_3.x) + 0x800; + param_2->z = this->mMap->GetTileStartZ(param_3.y) + 0x800; } } else { - param_2->x = this->mMap->GetTileStartX(param_3 & 0xff) + 0x800; - param_2->z = this->mMap->GetTileStartZ(param_3 >> 8 & 0xff) + 0x800; + param_2->x = this->mMap->GetTileStartX(param_3.x) + 0x800; + param_2->z = this->mMap->GetTileStartZ(param_3.y) + 0x800; } + local_38 = *param_2; param_2->y = MapData_vfunc_68(&local_38, true); } @@ -1243,12 +1240,7 @@ ARM unk32 MapManager::MapData_vfunc_60(Vec2b *param_1) { } ARM bool MapManager::func_ov00_02083e70(Vec2b *param_2) { - int iVar1; - int iVar2; - - iVar1 = this->MapData_vfunc_54(param_2); - - switch (iVar1) { + switch (this->MapData_vfunc_54(param_2)) { case 0x1b: case 0x2b: case 0x4e: @@ -1256,9 +1248,7 @@ ARM bool MapManager::func_ov00_02083e70(Vec2b *param_2) { return true; } - iVar1 = this->MapData_vfunc_60(param_2); - iVar2 = this->GetMapData_Unk_48(); - return iVar1 >= iVar2; + return this->MapData_vfunc_60(param_2) >= this->GetMapData_Unk_48(); } ARM unk32 MapManager::MapData_vfunc_68(Vec3p *param_1, bool param_2) { @@ -1271,14 +1261,14 @@ ARM s32 MapManager::func_ov00_02083ef8(Vec3p *param_2, Vec3p *param_3, bool para if (param_3->y > local_18.y) { local_18.y = param_3->y; } + return this->mMap->vfunc_68(&local_18, param_4); } ARM unk32 MapManager::func_ov00_02083f44(Vec3p *param_2, bool param_3) { - Vec3p local_18; - - local_18 = *param_2; - local_18.y = *(data_ov000_020e24a4 + 0x8); + q20 x = param_2->x; + q20 z = param_2->z; + Vec3p local_18 = {x, data_ov000_020e24a4, z}; return this->func_ov00_02083ef8(param_2, &local_18, param_3); } @@ -1299,11 +1289,13 @@ ARM void MapManager::func_ov00_02083fb0(u32 *param_1, MapManager *param_2, Vec3p *param_1 = *(u32 *) ((unk32 *) iVar1 + 0x3); // offset 0xc return; } + dVar2 = param_2->MapData_vfunc_70(param_3); if (dVar2 != 0xffff) { - func_ov000_02093a1c(param_1, data_027e0f6c, dVar2); + func_ov000_02093a1c(param_1, (unk32 *) data_027e0f6c, dVar2); return; } + *param_1 = 0; } @@ -1324,7 +1316,7 @@ unk32 MapManager::MapData_vfunc_54(Vec2b *param_1) { return this->mMap->vfunc_54(param_1); } -ARM unk32 MapManager::func_ov00_020840a0(unk8 param_2, unk8 param_3) { +ARM unk32 MapManager::func_ov00_020840a0(u8 param_2, u8 param_3) { // Correct param types? Vec2b vec; vec.x = param_2; @@ -1332,6 +1324,7 @@ ARM unk32 MapManager::func_ov00_020840a0(unk8 param_2, unk8 param_3) { return this->mMap->vfunc_54(&vec); } +// Returns UnkStruct_02085594* unk32 *MapManager::MapData_vfunc_78(Vec2b *param_1) { return this->mMap->vfunc_78(param_1); } @@ -1343,6 +1336,7 @@ unk32 MapManager::func_ov00_020840dc(Vec2b *param_1) { if (piVar1 != NULL) { return piVar1->vfunc_1c(); } + return -1; } @@ -1352,7 +1346,7 @@ unk8 MapManager::func_ov00_02084100(unk32 *param_1, MapManager *param_2) { param_1[1] = uVar1; } -u32 MapManager::GetMapData_Unk_48() { +unk32 MapManager::GetMapData_Unk_48() { return this->mMap->mUnk_048; } @@ -1373,15 +1367,11 @@ unk8 MapManager::MapData_vfunc_58(Vec2b *param_1, int param_2) { } ARM s32 MapManager::func_ov00_02084164(Vec2b *param_2) { - int iVar1; - unk32 uVar2; - - iVar1 = this->mMap->vfunc_58(param_2, 7); - if (iVar1 != 0) { + if (this->mMap->vfunc_58(param_2, 7) != 0) { return 0; } - uVar2 = this->MapData_vfunc_54(param_2); - switch (uVar2) { + + switch (this->MapData_vfunc_54(param_2)) { case 0: case 8: case 9: @@ -1435,7 +1425,10 @@ ARM s32 MapManager::func_ov00_02084164(Vec2b *param_2) { case 0x53: case 0x54: return 1; + default: + break; } + return 0; } @@ -1500,7 +1493,7 @@ void MapManager::func_ov00_020843ec(s32 *param_2) { s32 local_24; s32 local_20; - // uVar1 = (**(code **) (*param_2 + 8))(); // Which function is this? + // uVar1 = (**(code **) (*param_2 + 8))(); if (uVar1 < 2) { // (**(code **) (*param_2 + 0x3c))(param_2, &local_28); // And this? // local_40.z = (**(code **) (*param_2 + 0x40))(); // What about this? @@ -1539,7 +1532,7 @@ void MapManager::func_ov00_020843ec(s32 *param_2) { return; } if (uVar1 == 2) { - this->mMap->vfunc_2c(/*&local_58*/); // No args? + // this->mMap->vfunc_2c(/*&local_58*/); // No args? local_64.x = local_58; local_64.y = iStack_54; local_64.z = iStack_50; @@ -1597,68 +1590,100 @@ ARM s32 MapManager::func_ov00_020846a4() { } ARM s32 MapManager::func_ov00_02084700() { - s32 iVar1; - iVar1 = this->mMap->mUnk_034; + s32 iVar1 = this->mMap->mUnk_034; + if (iVar1 == -1) { iVar1 = this->mCourse->mUnk_0c4; } - if ((iVar1 == 0x1b) && (gActorManager->mUnk_29 != false)) { + + if (iVar1 == 0x1b && gActorManager->mUnk_29) { iVar1 = 0x1c; } + return iVar1; } unk32 MapManager::func_ov00_02084740() { - static const s32 data_ov000_020d88f0[] = { + unk32 bVar1; + int iVar2; + int iVar3; + unk32 uVar4; + unk32 uVar5; + unk32 uVar6; + unk32 uVar7; + Vec3p local_1c8; + UnkStruct_02084740 local_1bc; + + static const UnkStruct_02084740 data_ov000_020d88f0 = { + .mUnk_00 = + { + 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, 0x75, 0x78, 0x79, 0x7a, 0x7b, 0x7f, 0x83, 0x87, 0x7c, 0x80, 0x84, 0x00, 0x88, 0x89, 0x8a, + 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9d, + 0x9e, 0x9f, 0xa0, 0x70, 0x71, 0x73, 0x76, 0x77, 0x7d, 0x7e, 0x81, 0x82, 0x86, 0x9c, 0x36, 0x37, // 0xd0, 0xd1, + // 0xcd, 0x19a + }, + }; + + iVar2 = this->func_ov00_02084700(); + iVar3 = data_027e0d38->func_ov000_02078b40(); + if (iVar3 != 2) { + local_1c8 = gPlayerPos; + bVar1 = this->GetOverlappingTrigger(&local_1c8); + if (bVar1 > 0) { + iVar2 = this->func_ov00_020847f0(bVar1); + } + } + // 4-member structs? Or just 4 byte values? Since it's 1/4 of 108. + + local_1bc = data_ov000_020d88f0; + + return local_1bc.mUnk_00[iVar2]; + /*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, - 0x75, 0x78, 0x79, 0x7a, 0x7b, 0x7f, 0x83, 0x87, 0x7c, 0x80, 0x84, 0x0, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, - 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9d, 0x9e, 0x9f, 0xa0, 0x70, 0x71, - 0x73, 0x76, 0x77, 0x7d, 0x7e, 0x81, 0x82, 0x86, 0x9c, 0x36, 0x37, 0xd0, 0xd1, 0xcd, 0x19a}; - bool bVar1; + 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, + 0x75, 0x78, 0x79, 0x7a, 0x7b, 0x7f, 0x83, 0x87, 0x7c, 0x80, 0x84, 0x0, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, + 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9d, 0x9e, 0x9f, 0xa0, 0x70, 0x71, + 0x73, 0x76, 0x77, 0x7d, 0x7e, 0x81, 0x82, 0x86, 0x9c, 0x36, 0x37, 0xd0, 0xd1, 0xcd, 0x19a, + }; + unk32 bVar1; int iVar2; int iVar3; unk32 uVar4; unk32 uVar5; unk32 uVar6; unk32 uVar7; - s32 *puVar8; - unk32 *puVar9; - unk32 local_1c8; - unk32 local_1c4; - unk32 local_1c0; + Vec3p local_1c8; unk32 local_1bc[108]; - // iVar2 = this->func_ov00_02084700(?); // what param? - // iVar3 = UnkStruct_027e0d38::FUN_overlay_d_0__02078b40(*(UnkStruct_027e0d38 **) PTR_PTR_overlay_d_0__020847d4); + iVar2 = this->func_ov00_02084700(); + iVar3 = data_027e0d38->func_ov000_02078b40(); if (iVar3 != 2) { - local_1c8 = *(unk32 *) gPlayerPos.x; - local_1c4 = *(unk32 *) gPlayerPos.y; - local_1c0 = *(unk32 *) gPlayerPos.z; - // bVar1 = FUN_overlay_d_0__02083780(&local_1c8); // MapManager method? - if (bVar1) { - // iVar2 = this->func_ov00_020847f0(); + local_1c8 = gPlayerPos; + bVar1 = this->GetOverlappingTrigger(&local_1c8); + if (bVar1 > 0) { + iVar2 = this->func_ov00_020847f0(bVar1); } } - puVar9 = local_1bc; - iVar3 = 0x1b; - puVar8 = (s32 *) data_ov000_020d88f0; - do { - uVar4 = *puVar8; - uVar5 = puVar8[1]; - uVar6 = puVar8[2]; - uVar7 = puVar8[3]; - puVar8 = puVar8 + 4; - *puVar9 = uVar4; - puVar9[1] = uVar5; - puVar9[2] = uVar6; - puVar9[3] = uVar7; - puVar9 = puVar9 + 4; - iVar3 = iVar3 + -1; - } while (iVar3 != 0); - return local_1bc[iVar2]; + iVar3 = 0x1b; //((sizeof(data_ov000_020d88f0) / 4) - 2) / 4; + unk32 *array = (unk32 *) &data_ov000_020d88f0; + unk32 *array2 = local_1bc; + while (iVar3 != 0) { + array[0] = array2[0]; + array[1] = array2[1]; + array[2] = array2[2]; + array[3] = array2[3]; + + *array += 4; + *array2 += 4; + iVar3--; + } + + return local_1bc[iVar2];*/ } unk32 MapManager::func_ov00_020847e0() { @@ -1671,15 +1696,16 @@ ARM unk32 MapManager::func_ov00_020847f0(unk32 type) { if (triggerBase == NULL) { return this->func_ov00_02084700(); } + if ((triggerBase->mUnk_0c != -1) && ((int) triggerBase->mUnk_0c < 0x6c)) { return triggerBase->mUnk_0c; } + return this->func_ov00_02084700(); } bool MapManager::func_ov00_02084838() { - unk32 uVar1 = this->GetMapData_Unk_38(); - switch (uVar1) { + switch (this->GetMapData_Unk_38()) { case 1: case 2: case 3: @@ -1695,20 +1721,24 @@ bool MapManager::func_ov00_02084838() { case 0x16: return true; default: - return false; + break; } + + return false; } bool MapManager::func_ov00_020848b8() { - unk32 uVar1 = this->func_ov00_020846a4(); - switch (uVar1) { + switch (this->func_ov00_020846a4()) { case 6: case 0xc: case 0xd: case 0xf: case 0x11: return true; + default: + break; } + return false; } @@ -1737,10 +1767,10 @@ u8 MapManager::GetMapData_Unk_07() { } bool MapManager::func_ov00_0208499c() { - s32 iVar2 = this->func_ov00_020849c0(); - if (iVar2 == 0) { + if (!this->func_ov00_020849c0()) { return this->mCourse->IsCurrentMapInMainGrid(); } + return false; } @@ -1762,6 +1792,7 @@ ARM bool MapManager::func_ov00_020849f8() { } break; } + return false; } @@ -1780,10 +1811,8 @@ void MapManager::SpawnNPC(Vec3p *pos, unk32 param_3, unk32 param_4) { } ARM bool MapManager::func_ov00_02084ac4(u32 actorId) { - Actor *iVar1; - bool bVar1; + Actor *iVar1 = gActorManager->FindActorById(actorId); - iVar1 = gActorManager->FindActorById(actorId); if (iVar1 == NULL) { return false; } @@ -1791,6 +1820,7 @@ ARM bool MapManager::func_ov00_02084ac4(u32 actorId) { if (iVar1->mType != ActorTypeId_EVIC) { return false; } + iVar1->mAlive = false; return true; } @@ -1813,9 +1843,11 @@ bool MapManager::GetBlueWarpOpen() { ARM void MapManager::func_ov00_02084b38(u32 param_2, unk32 param_3, bool param_4) { MapBase *pMVar1; + if (param_2 == 0) { return; } + switch (param_3) { case 0: pMVar1 = this->mMap; @@ -1840,26 +1872,24 @@ ARM void MapManager::func_ov00_02084b38(u32 param_2, unk32 param_3, bool param_4 } bool MapManager::func_ov00_02084be0(u32 param_2, unk32 param_3) { - bool bVar1; - if (param_2 == 0) { return false; } + switch (param_3) { case 0: return (this->mMap->mUnk_180[param_2 >> 5].mUnk_0 & 1 << (param_2 & 0x1f)) != 0; case 1: - bVar1 = this->mCourse->GetMapDataFlag0(param_2); - return bVar1; + return this->mCourse->GetMapDataFlag0(param_2); case 2: - bVar1 = this->mCourse->GetFlag0(param_2); - return bVar1; + return this->mCourse->GetFlag0(param_2); case 3: - bVar1 = this->mCourse->SetFlag1(param_2); - return bVar1; + return this->mCourse->SetFlag1(param_2); default: - return false; + break; } + + return false; } void MapManager::SetMapDataFlag1(unk32 param_2, bool param_3) { @@ -1874,16 +1904,15 @@ void MapManager::func_ov00_02084c7c(unk32 param_2, bool param_3) { if (param_2 < 0) { return; } + this->mCourse->SetMapDataFlag2(param_2, param_3); } bool MapManager::func_ov00_02084c94(unk32 param_2) { - bool bVar1; - - if (0 <= param_2) { - bVar1 = this->mCourse->GetMapDataFlag2(param_2); - return bVar1; + if (param_2 >= 0) { + return this->mCourse->GetMapDataFlag2(param_2); } + return false; } @@ -1891,16 +1920,15 @@ void MapManager::func_ov00_02084cb0(unk32 param_2, bool param_3) { if (param_2 < 0) { return; } + this->mCourse->SetMapDataFlag3(param_2, param_3); } bool MapManager::func_ov00_02084cc8(unk32 param_2) { - bool bVar1; - - if (0 <= param_2) { - bVar1 = this->mCourse->GetMapDataFlag3(param_2); - return bVar1; + if (param_2 >= 0) { + return this->mCourse->GetMapDataFlag3(param_2); } + return false; } @@ -1908,16 +1936,15 @@ void MapManager::func_ov00_02084ce4(unk32 param_2, bool param_3) { if (param_2 < 0) { return; } + this->mCourse->SetMapDataFlag4(param_2, param_3); } bool MapManager::func_ov00_02084cfc(unk32 param_2) { - bool bVar1; - - if (0 <= param_2) { - bVar1 = this->mCourse->GetMapDataFlag4(param_2); - return bVar1; + if (param_2 >= 0) { + return this->mCourse->GetMapDataFlag4(param_2); } + return false; } @@ -1948,7 +1975,7 @@ s32 MapManager::func_ov00_02084d4c(unk32 param_2, unk32 param_3, Vec3p *param_4) int iStack_18; Vec3p VStack_14; - iVar1 = func_ov000_0208df78((s32 *) data_027e0f64 + 1, param_2, param_3, &VStack_14, &iStack_20); + iVar1 = func_ov000_0208df78((s32 *) data_027e0f64->mUnk_4, param_2, param_3, &VStack_14, &iStack_20); // object = PTR_DWORD_overlay_d_0__020e2510_overlay_d_0__02084ea8; if (iVar1 == -1) { return -1; @@ -2070,7 +2097,7 @@ unk32 MapManager::func_ov00_02084ebc(Vec3p *param_2) { } // dVar3 = this->MapData_vfunc_70(); // Missing param. if (dVar3 != 0xffff) { - func_ov000_02093a1c(&uStack_14, data_027e0f6c, dVar3); + func_ov000_02093a1c(&uStack_14, (unk32 *) data_027e0f6c, dVar3); if ((uStack_14 >> 5 & 3) != 1) { return 0; } @@ -2136,7 +2163,7 @@ s32 MapManager::func_ov00_02085108(Vec3p *param_2) { return 0; } -s32 MapManager::func_ov00_0208527c(MapManager *param_1, unk32 param_2, unk32 *param_3) { +s32 MapManager::func_ov00_0208527c(MapManager *param_1, unk32 param_2, Vec3p *param_3) { u32 uVar1; MapManager *puVar2; unk32 uVar3; @@ -2186,13 +2213,11 @@ s32 MapManager::func_ov00_0208527c(MapManager *param_1, unk32 param_2, unk32 *pa return 0; } for (; (int) uVar1 <= (int) uVar6; uVar1 = uVar1 + 1) { - // iVar4 = puVar2->MapData_vfunc_78(0); - if (((iVar4 != 0) && ((*(u32 *) (iVar4 + 4) & 4) != 0)) && + UnkStruct_0208210c_param3 *var = (UnkStruct_0208210c_param3 *) puVar2->MapData_vfunc_78(0); + if (((var != NULL) && ((*(u32 *) var->mUnk_04 & 4) != 0)) && (iVar5 = func_ov000_0208b73c(iVar4, param_2), iVar5 != 0)) { - *param_3 = *(unk32 *) (iVar4 + 0x18); - param_3[1] = *(unk32 *) (iVar4 + 0x1c); - param_3[2] = *(unk32 *) (iVar4 + 0x20); - return (int) *(char *) (iVar4 + 0x12); + *param_3 = var->mUnk_18; + return var->mUnk_12; } } uVar7 = uVar7 + 1; @@ -2245,8 +2270,8 @@ s32 MapManager::func_ov00_020853fc(MapManager *param_1, Vec3p *param_2, s32 *par } local_30 = 0; for (; uVar1 = local_50, (int) local_48 <= (int) (u32) local_3b; local_48 = local_48 + 1) { - for (; (int) uVar1 <= (int) uVar6; uVar1 = uVar1 + 1) { - // iVar3 = gMapManager->MapData_vfunc_78(0); + for (; (int) uVar1 <= (int) uVar6; uVar1++) { + // iVar3 = gMapManager->MapData_vfunc_78(); if ((((iVar3 != 0) && ((*(u32 *) (iVar3 + 4) & 4) != 0)) && (iVar4 = Vec3p_Distance((Vec3p *) (iVar3 + 0x18), param_2), iVar4 < *param_3)) && (iVar5 = func_ov000_0208b7d0(iVar3, param_2), iVar5 != 0)) { @@ -2258,160 +2283,128 @@ s32 MapManager::func_ov00_020853fc(MapManager *param_1, Vec3p *param_2, s32 *par return iVar7; } -unk32 MapManager::func_ov00_02085594(Vec3p *param_2) { - int *piVar1; - int iVar2; - unk32 dVar3; // dword +ARM unk32 MapManager::func_ov00_02085594(Vec3p *param_2) { + UnkStruct_02085594 *piVar1; + unk32 dVar3; unk32 uVar4; bool bVar5; - Vec2b uStack_2c; Vec2b local_28; u32 uStack_24; Vec3p VStack_20; this->func_ov00_02083a1c(&local_28, this, param_2); - piVar1 = (int *) this->MapData_vfunc_78(&local_28); + piVar1 = (UnkStruct_02085594 *) this->MapData_vfunc_78(&local_28); bVar5 = true; - if (piVar1 != (int *) 0x0) { - param_2->x = piVar1[6]; - param_2->y = piVar1[7]; - param_2->z = piVar1[8]; - // iVar2 = (**(code **) (*piVar1 + 0x1c))(); - if (iVar2 < 0x43) { - if (0x41 < iVar2) { - return 2; - } - if (iVar2 < 2) { - if (iVar2 != 1) { - return 0; + if (piVar1 != NULL) { + *param_2 = piVar1->mUnk_14; + switch (piVar1->vfunc_1c()) { + case 0x61: + if (piVar1->mUnk_04.x != 2) { + break; } - } else if (iVar2 != 0x38) { - return 0; - } - } else if (iVar2 < 0x5a) { - if (iVar2 != 0x59) { - return 0; - } - bVar5 = piVar1[2] == 4; - } else { - if (iVar2 != 0x61) { return 0; - } - if (piVar1[2] == 2) { + case 0x59: + bVar5 = piVar1->mUnk_04.x == 4; + break; + case 0x42: + return 2; + case 0x1: + case 0x38: + break; + default: return 0; - } } } - iVar2 = this->func_ov00_020840a0(local_28.x, local_28.y); - if (iVar2 < 0x46) { - if (iVar2 < 0x2a) { - switch (iVar2) { - 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; - } - } else if (iVar2 == 0x37) { - return 0; - } - } else if (iVar2 < 0x48) { - if (0x47 < iVar2) { - return 0; - } - if (iVar2 == 0x47) { + switch (this->func_ov00_020840a0(local_28.x, local_28.y)) { + 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: + case 0x37: + case 0x46: + case 0x47: + case 0x48: + case 0x50: return 0; - } - } else if (iVar2 == 0x50) { - return 0; } - iVar2 = this->mMap->vfunc_58(&local_28, 5); - if (iVar2 != 0) { + if (this->mMap->vfunc_58(&local_28, 5) != 0) { return 0; } - uStack_2c.y = local_28.y; - uStack_2c.x = local_28.x; - this->func_ov00_02083c7c(&VStack_20, uStack_2c); + this->func_ov00_02083c7c(&VStack_20, local_28); dVar3 = this->MapData_vfunc_70(&VStack_20); - if (dVar3 != 0xffff) { - func_ov000_02093a1c(&uStack_24, data_027e0f6c, dVar3); - if ((uStack_24 >> 5 & 3) != 1) { - return 0; - } - if (bVar5) { - uVar4 = 1; - } else { - uVar4 = 2; - } - return uVar4; + if (dVar3 == 0xffff) { + return 0; } + func_ov000_02093a1c(&uStack_24, (unk32 *) data_027e0f6c, dVar3); + if ((uStack_24 >> 5 & 3) == 1) { + return bVar5 ? 1 : 2; + } + return 0; } -void MapManager::func_ov00_0208583c(MapManager *param_1, Vec3p *param_2, unk32 param_3) { - void *piVar1; +ARM unk32 MapManager::func_ov00_0208583c(MapManager *param_1, Vec3p *param_2, unk32 param_3) { + UnkStruct_02085594 *piVar1; Vec2b auStack_10; param_1->func_ov00_02083a1c(&auStack_10, param_1, param_2); - piVar1 = (unk32 *) param_1->MapData_vfunc_78(&auStack_10); + piVar1 = (UnkStruct_02085594 *) param_1->MapData_vfunc_78(&auStack_10); if (piVar1 == NULL) { - return; + return -1; } - if (data_027e077c.mUnk_0 == 1) { - if (data_027e077c.mUnk_4 == 1) { - //(**(code **) (*piVar1 + 0x30))(piVar1, param_3); - return; - } - return; + if (data_027e077c.mUnk_0 != 1) { + return -1; + } + if (data_027e077c.mUnk_0 == data_027e077c.mUnk_4) { + return piVar1->vfunc_30(param_3); } + return -1; } -unk32 MapManager::func_ov00_020858b0(MapManager *param_1, Vec3p *param_2, s32 param_3) { - int iVar1; - int iVar2; - int iVar3; +unk32 MapManager::func_ov00_020858b0(MapManager *param_1, Vec3p *param_2, unk32 param_3) { + int mapWidth; + int mapHeight; int iVar4; - int *piVar5; - int iVar6; - int iVar7; + UnkStruct_02085594 *piVar5; + int playerPosY; unk32 local_38; - Vec2b local_28; // x = originally 'local_28' ; y = originally 'local_27' + Vec2b local_28; if (param_3 == 1) { - func_ov000_02088000(*(unk32 *) (*(int *) data_027e0f64 + 4), 7); + func_ov000_02088000(data_027e0f64->mUnk_4, 7); } else { - func_ov000_02088000(*(unk32 *) (*(int *) data_027e0f64 + 4), 6); + func_ov000_02088000(data_027e0f64->mUnk_4, 6); } - iVar2 = param_1->GetMapWidth(); - iVar3 = param_1->GetMapHeight(); - local_38 = 0xffffffff; + mapWidth = param_1->GetMapWidth(); + mapHeight = param_1->GetMapHeight(); + local_38 = -1; param_1->func_ov00_02083a1c(&local_28, param_1, param_2); - iVar6 = gPlayerPos.y; // *(int *) (PTR_gPlayerPos_overlay_d_0__02085a30 + 4); - for (iVar7 = local_28.x - 1; iVar7 <= (int) (local_28.x + 1); iVar7 = iVar7 + 1) { - if ((-1 < iVar7) && (iVar1 = local_28.y - 1, iVar7 < iVar2)) { - for (; iVar1 <= (int) (local_28.y + 1); iVar1 = iVar1 + 1) { - if ((-1 < iVar1) && (iVar1 < iVar3)) { - iVar4 = param_1->MapData_vfunc_60(0); - iVar4 = iVar4 - iVar6; + playerPosY = gPlayerPos.y; + for (u8 x = local_28.x - 1; x <= (int) (local_28.x + 1); x++) { + if ((x > -1) && (x < mapWidth)) { + for (u8 y = local_28.y - 1; y <= (int) (local_28.y + 1); y++) { + if ((y > -1) && (y < mapHeight)) { + iVar4 = param_1->MapData_vfunc_60(&local_28) - playerPosY; if (iVar4 < 0) { iVar4 = -iVar4; } - if ((iVar4 < 0xce) && (piVar5 = (int *) param_1->MapData_vfunc_78(&local_28), piVar5 != (int *) 0x0)) { - // local_38 = (**(code **) (*piVar5 + 0x38))(piVar5, param_3); + if ((iVar4 <= 0xcd) && + (piVar5 = (UnkStruct_02085594 *) param_1->MapData_vfunc_78(&local_28), piVar5 != NULL)) { + local_38 = piVar5->vfunc_38(param_3); } } } @@ -2421,14 +2414,13 @@ unk32 MapManager::func_ov00_020858b0(MapManager *param_1, Vec3p *param_2, s32 pa } s32 MapManager::func_ov00_02085a34(Vec3p *param_2, s32 param_3) { - int *piVar1; + UnkStruct_02085594 *piVar1; int iVar2; unk16 *puVar3; u32 uVar4; u32 uVar5; u32 uVar6; - unk32 uStack_2c; - unk32 uStack_2b; + Vec2b uStack_2c; Vec2b auStack_2a[2]; Vec2b aVStack_28[2]; unk16 auStack_24[4]; @@ -2442,17 +2434,18 @@ s32 MapManager::func_ov00_02085a34(Vec3p *param_2, s32 param_3) { return -1; } this->func_ov00_02083a1c(auStack_2a, this, param_2); - piVar1 = (int *) this->MapData_vfunc_78(auStack_2a); - if (piVar1 == (int *) 0x0) { + piVar1 = (UnkStruct_02085594 *) this->MapData_vfunc_78(auStack_2a); + if (piVar1 == NULL) { return -1; } - // iVar2 = (**(code **) (*piVar1 + 0x1c))(); + + iVar2 = piVar1->vfunc_1c(); if (iVar2 == 0x42) { - // uStack_2b = *(undefined *) ((int) piVar1 + 0x15); - // uStack_2c = *(undefined *) (piVar1 + 5); - // this->mMap->func_ov00_02080d08(&uStack_2c); + uStack_2c.y = piVar1->mUnk_14.y; + uStack_2c.x = piVar1->mUnk_04.y; + this->mMap->func_ov00_02080d08(&uStack_2c); } - // iVar2 = (**(code **) (*piVar1 + 0x3c))(piVar1, param_3); + iVar2 = piVar1->vfunc_38(param_3); return iVar2; } this->func_ov00_02083a1c(aVStack_28, this, param_2); @@ -2460,14 +2453,14 @@ s32 MapManager::func_ov00_02085a34(Vec3p *param_2, s32 param_3) { if (iVar2 == 0) { return -1; } - piVar1 = (int *) this->MapData_vfunc_78(aVStack_28); - if (piVar1 != (int *) 0x0) { - // iVar2 = (**(code **) (*piVar1 + 0x1c))(); + piVar1 = (UnkStruct_02085594 *) this->MapData_vfunc_78(aVStack_28); + if (piVar1 != NULL) { + iVar2 = piVar1->vfunc_1c(); if (0x38 < iVar2) { if (iVar2 < 0x5a) { if (iVar2 == 0x59) { LAB_overlay_d_0__02085afc: - // iVar2 = (**(code **) (*piVar1 + 0x3c))(piVar1, 1); // What is this? + iVar2 = piVar1->vfunc_3c(1); return iVar2; } } else if (iVar2 == 0x61) { @@ -2478,8 +2471,8 @@ s32 MapManager::func_ov00_02085a34(Vec3p *param_2, s32 param_3) { if ((iVar2 < 0x38) && (iVar2 != 1)) { return -1; } - piVar1[1] = piVar1[1] & 0xfffffffe; - this->func_ov00_020828f8(piVar1); + piVar1->mUnk_04.x &= -2; + this->func_ov00_020828f8((s32 *) piVar1); } this->mMap->func_ov00_02080b24(aVStack_28); uStack_14 = 0xffff; @@ -2499,11 +2492,11 @@ s32 MapManager::func_ov00_02085a34(Vec3p *param_2, s32 param_3) { *(unk32 *) (puVar3 + 5) = 0; // Same here. puVar3 = (unk16 *) ((int) puVar3 + 1); } while (uVar6 < 2); - // iVar2 = this->MapData_vfunc_7c(); <- This needs to return some value (not void). + // iVar2 = this->MapData_vfunc_7c(); if (iVar2 == 0) { return -1; } - // iVar2 = MapData_vfunc_78(0); // Same here. + // iVar2 = MapData_vfunc_78(); if ((iVar2 != 0) && (0 < *(s16 *) (iVar2 + 0xe))) { return 1; } @@ -2520,8 +2513,7 @@ unk8 MapManager::func_ov00_02085c60(Vec3p *param_2, unk32 *param_3, unk32 *param u32 uVar7; int iStack_10c; int iStack_108; - int iStack_104; - int iStack_100; + Vec2p iStack_104; Vec3p VStack_f0; Vec3p VStack_e4; Vec4p VStack_d8; @@ -2536,16 +2528,16 @@ unk8 MapManager::func_ov00_02085c60(Vec3p *param_2, unk32 *param_3, unk32 *param unk16 uStack_64; unk16 uStack_62; unk16 uStack_60; - unk32 uStack_3e; - unk32 uStack_3d; - unk32 uStack_3c; - unk32 uStack_3b; - unk32 uStack_34; - unk32 uStack_33; - unk32 uStack_32; - unk32 uStack_31; - unk32 uStack_30; - unk32 uStack_2f; + unk8 uStack_3e; + unk8 uStack_3d; + unk8 uStack_3c; + unk8 uStack_3b; + unk8 uStack_34; + unk8 uStack_33; + unk8 uStack_32; + unk8 uStack_31; + unk8 uStack_30; + unk8 uStack_2f; unk32 uStack_2c; unk32 uStack_28; @@ -2554,16 +2546,10 @@ unk8 MapManager::func_ov00_02085c60(Vec3p *param_2, unk32 *param_3, unk32 *param } func_ov000_020792a0(data_027e0d3c, 0, *param_3, param_3[1]); func_ov000_020792a0(data_027e0d3c, 0, *param_4, param_4[1]); - VStack_b0.x = VStack_98.x; - VStack_b0.y = VStack_98.y; - VStack_b0.z = VStack_98.z; - VStack_bc.x = VStack_a4.x; - VStack_bc.y = VStack_a4.y; - VStack_bc.z = VStack_a4.z; - VStack_c8.x = VStack_98.x; - VStack_c8.y = VStack_98.y; - VStack_c8.z = VStack_98.z; - Vec3p_Sub(&VStack_c8, &VStack_bc, &VStack_c8); + VStack_b0 = VStack_98; + VStack_bc = VStack_a4; + VStack_c8 = VStack_98; + Vec3p_Sub(&VStack_98, &VStack_a4, &VStack_c8); lVar1 = (u64) param_5 * 0xc000 + 0x800; uVar7 = (u32) lVar1 >> 0xc | (int) ((u64) lVar1 >> 0x20) * 0x100000; iVar6 = Vec3p_Length(&VStack_c8); @@ -2637,9 +2623,9 @@ unk8 MapManager::func_ov00_02085c60(Vec3p *param_2, unk32 *param_3, unk32 *param VStack_e4.y = aVStack_8c[0].y; VStack_e4.z = aVStack_8c[0].z; } - func_ov000_0207920c(data_027e0d3c, &VStack_e4, &iStack_104, 0); - param_2[8].x = iStack_104; - param_2[8].y = iStack_100; + func_ov000_0207920c(data_027e0d3c, &VStack_e4, (unk32 *) &iStack_104, 0); + param_2[8].x = iStack_104.x; + param_2[8].y = iStack_104.y; return 1; } VStack_bc.x = VStack_b0.x; -- cgit v1.2.3