diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 49daa29f..5b628dcf 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -640,7 +640,7 @@ _ZN10MapManager18func_ov00_0208439cEP5Vec2sP5Vec3p kind:function(arm,size=0x50) _ZN10MapManager18func_ov00_020843ecEPi kind:function(arm,size=0x2ac) addr:0x20843ec _ZN10MapManager17GetMapData_Unk_38Ev kind:function(arm,size=0xc) addr:0x2084698 _ZN10MapManager18func_ov00_020846a4Ev kind:function(arm,size=0x5c) addr:0x20846a4 -_ZN10MapManager18func_ov00_02084700EPS_ kind:function(arm,size=0x40) addr:0x2084700 +_ZN10MapManager18func_ov00_02084700Ev kind:function(arm,size=0x40) addr:0x2084700 _ZN10MapManager18func_ov00_02084740Ev kind:function(arm,size=0xa0) addr:0x2084740 _ZN10MapManager18func_ov00_020847e0Ev kind:function(arm,size=0x10) addr:0x20847e0 _ZN10MapManager18func_ov00_020847f0Ev kind:function(arm,size=0x48) addr:0x20847f0 diff --git a/include/DTCM/UnkStruct_027e0d38.hpp b/include/DTCM/UnkStruct_027e0d38.hpp index b2e50a89..5bb21575 100644 --- a/include/DTCM/UnkStruct_027e0d38.hpp +++ b/include/DTCM/UnkStruct_027e0d38.hpp @@ -6,7 +6,9 @@ struct UnkStruct_027e0d38_Unk28 { /* 00 */ unk8 mUnk_00[0x34]; /* 34 */ bool mUnk_34; - /* 35 */ + /* 35 */ unk8 mUnk_35[0x27]; + /* 5c */ Vec3p mUnk_5c; + /* 68 */ }; struct UnkStruct_027e0d38 { diff --git a/include/Map/MapBase.hpp b/include/Map/MapBase.hpp index 4c8fb1b4..f9768a81 100644 --- a/include/Map/MapBase.hpp +++ b/include/Map/MapBase.hpp @@ -204,7 +204,7 @@ public: s32 GetTriggerBoundingBox(s32 param_2, AABB *param_3); s32 GetTriggerBoundingBoxes(s32 param_2, AABB *param_3, s32 param_4); bool GetOverlappingTrigger(Vec3p *param_2); - unk8 FindTrigger(unk32 type); + TriggerBase *FindTrigger(unk32 type); unk8 GetOverlappingTriggers(Vec3p *param_2, TriggerBase **triggers, unk32 capacity); bool IsTriggerTypeOverlapped(unk32 type, Vec3p *param_3); bool AnyTrigger_func_0c(unk32 type); diff --git a/include/Map/MapManager.hpp b/include/Map/MapManager.hpp index 74526c0a..4ef12645 100644 --- a/include/Map/MapManager.hpp +++ b/include/Map/MapManager.hpp @@ -197,10 +197,10 @@ public: void func_ov00_020843ec(s32 *param_2); unk32 GetMapData_Unk_38(); s32 func_ov00_020846a4(); - static s32 func_ov00_02084700(MapManager *pMapManager); + s32 func_ov00_02084700(); unk32 func_ov00_02084740(); unk32 func_ov00_020847e0(); - unk8 func_ov00_020847f0(); + unk32 func_ov00_020847f0(unk32 type); bool func_ov00_02084838(); bool func_ov00_020848b8(); void func_ov00_02084924(u32 param_2); diff --git a/src/00_Core/Map/MapBase.cpp b/src/00_Core/Map/MapBase.cpp index ec6e497f..b923de8d 100644 --- a/src/00_Core/Map/MapBase.cpp +++ b/src/00_Core/Map/MapBase.cpp @@ -73,7 +73,7 @@ bool TriggerBase::GetBoundingBox(AABB *bbox) {} s32 MapBase::GetTriggerBoundingBoxes(s32 param_2, AABB *param_3, s32 param_4) {} bool MapBase::GetOverlappingTrigger(Vec3p *param_2) {} bool TriggerBase::Overlaps(Vec3p *point) {} -unk8 MapBase::FindTrigger(unk32 type) {} +TriggerBase *MapBase::FindTrigger(unk32 type) {} unk8 MapBase::GetOverlappingTriggers(Vec3p *param_2, TriggerBase **triggers, unk32 capacity) {} bool MapBase::IsTriggerTypeOverlapped(unk32 type, Vec3p *param_3) {} bool MapBase::AnyTrigger_func_0c(unk32 type) {} diff --git a/src/00_Core/Map/MapManager.cpp b/src/00_Core/Map/MapManager.cpp index a6c509ca..1af83dab 100644 --- a/src/00_Core/Map/MapManager.cpp +++ b/src/00_Core/Map/MapManager.cpp @@ -130,6 +130,8 @@ extern unk32 *data_027e0f7c; extern unk32 *data_027e103c; extern unk32 *data_ov000_020e24a4; +extern MapManager_Unk2 data_ov000_020e24c8[]; +extern MapManager_Unk2 data_ov000_020e24e8[]; extern unk32 data_ov000_020eec68; extern unk32 data_ov015_02190458; @@ -742,57 +744,50 @@ ARM void MapManager::func_ov00_0208306c(s32 *param_2, s32 *param_3) { ARM void MapManager::func_ov00_0208315c(s32 *param_2, s32 *param_3) { u32 uVar1; s32 *piVar2; - s32 iVar3; + UnkStruct_027e0d38_Unk28 *pvVar3; s32 *piVar4; - s32 local_2c; // This has to be a Vec3p, but uncertain as of now. - unk32 local_28; // Unused. - unk32 local_24; // Unused. Vec3p local_20; + Vec3p local_2c; - piVar4 = (s32 *) this->mCourse->mUnk_008; - piVar2 = param_2; - if (piVar4 != (s32 *) 0xfffffffd) { - piVar2 = (s32 *) 0xfffffffe; + *piVar4 = this->mCourse->mUnk_008; + *piVar2 = *param_2; + + if (*piVar4 != -3) { + *piVar2 = -2; } - if (piVar4 == (s32 *) 0xfffffffd || piVar4 == piVar2) { - // iVar3 = *(s32 *) (*(s32 *) PTR_PTR_overlay_d_0__02083240 + 0x28); - local_2c = *(s32 *) (iVar3 + 0x5c); - local_28 = *(unk32 *) (iVar3 + 0x60); - local_24 = *(unk32 *) (iVar3 + 100); - /*this->func_ov00_02083298((u32) * (u8 *) (*(s32 *) (*(s32 *) PTR_PTR_overlay_d_0__02083240 + 0x28) + 0x56), - &local_2c, param_2, param_3);*/ - return; - } - if (piVar4 != (s32 *) 0xffffffff) { - *param_2 = this->mCourse->mUnk_0bc; - *param_3 = this->mCourse->mUnk_0c0; - return; - } - local_20.x = *(s32 *) gPlayerPos.x; - local_20.y = *(s32 *) gPlayerPos.y; - local_20.z = *(s32 *) gPlayerPos.z; + 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 = pvVar3->mUnk_5c; + this->func_ov00_02083298((u32) * (u8 *) (*(s32 *) data_027e0d38->mUnk_28 + 0x56), &local_2c, param_2, param_3); + return; + } + if (*piVar4 != -1) { + *param_2 = this->mCourse->mUnk_0bc; + *param_3 = this->mCourse->mUnk_0c0; + } } ARM void MapManager::func_ov00_02083244(u32 param_2, Vec3p *param_3, s32 *param_4, s32 *param_5) { if (4 <= param_2) { param_2 = 0; } - // *param_4 = (param_3->x - (&data_ov000_020e24e8)[param_2].mUnk_00) + 0x800 >> 0xc; - // *param_5 = (param_3->z - (&data_ov000_020e24ec)[param_2].mUnk_04) + 0x800 >> 0xc; + *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 (3 < param_2) { + if (4 <= param_2) { param_2 = 0; } - /* - *param_4 = - (&data_ov000_020e24c8)[param_2].mUnk_00 + ((param_3->x - (&data_ov000_020e24e8)[param_2].mUnk_00 >> 1) + 0x800 >> 0xc); - *param_5 = - (&data_ov000_020e24c8)[param_2].mUnk_04 + ((param_3->z - (&data_ov000_020e24e8)[param_2].mUnk_04 >> 1) + 0x800 >> 0xc); - */ + + *param_4 = data_ov000_020e24c8[param_2].mUnk_0 + ((param_3->x - data_ov000_020e24e8[param_2].mUnk_0 >> 1) + 0x800 >> 0xc); + *param_5 = data_ov000_020e24c8[param_2].mUnk_4 + ((param_3->z - data_ov000_020e24e8[param_2].mUnk_4 >> 1) + 0x800 >> 0xc); } ARM bool MapManager::GetCourseData_Unk_25c() { @@ -1310,12 +1305,12 @@ ARM unk32 MapManager::MapData_vfunc_70(Vec3p *param_2) { } ARM void MapManager::func_ov00_02083fb0(u32 *param_1, MapManager *param_2, Vec3p *param_3) { - Vec4p *iVar1; // Vec4p * unsure, need type with field at offset 0xc + unk32 *iVar1; // find type with field that exists at offset 0xc s32 dVar2; - iVar1 = (Vec4p *) param_2->mMap->vfunc_74(param_3); + iVar1 = (unk32 *) param_2->mMap->vfunc_74(param_3); if (iVar1 != NULL) { - *param_1 = iVar1->w; // offset 0xc + *param_1 = *(u32 *) ((unk32 *) iVar1 + 0x3); // offset 0xc return; } dVar2 = param_2->MapData_vfunc_70(param_3); @@ -1611,11 +1606,11 @@ ARM s32 MapManager::func_ov00_020846a4() { return iVar1; } -ARM s32 MapManager::func_ov00_02084700(MapManager *pMapManager) { +ARM s32 MapManager::func_ov00_02084700() { s32 iVar1; - iVar1 = pMapManager->mMap->mUnk_034; + iVar1 = this->mMap->mUnk_034; if (iVar1 == -1) { - iVar1 = pMapManager->mCourse->mUnk_0c4; + iVar1 = this->mCourse->mUnk_0c4; } if ((iVar1 == 0x1b) && (gActorManager->mUnk_29 != false)) { iVar1 = 0x1c; @@ -1654,7 +1649,7 @@ unk32 MapManager::func_ov00_02084740() { local_1c0 = *(unk32 *) gPlayerPos.z; // bVar1 = FUN_overlay_d_0__02083780(&local_1c8); // MapManager method? if (bVar1) { - iVar2 = this->func_ov00_020847f0(); + // iVar2 = this->func_ov00_020847f0(); } } puVar9 = local_1bc; @@ -1680,19 +1675,16 @@ unk32 MapManager::func_ov00_020847e0() { return *(s32 *) ((s32) this->mMap->mUnk_144 + 0xc); } -unk8 MapManager::func_ov00_020847f0() { - s32 iVar1; - unk32 in_r1; +ARM unk32 MapManager::func_ov00_020847f0(unk32 type) { + TriggerBase *triggerBase = this->mMap->FindTrigger(type); - iVar1 = this->mMap->FindTrigger(in_r1); - if (iVar1 == 0) { - // this->func_ov00_02084700(?); - return; + if (triggerBase == NULL) { + return this->func_ov00_02084700(); } - if ((*(int *) (iVar1 + 0xc) != -1) && (*(int *) (iVar1 + 0xc) < 0x6c)) { - return; + if ((triggerBase->mUnk_0c != -1) && ((int) triggerBase->mUnk_0c < 0x6c)) { + return triggerBase->mUnk_0c; } - // this->func_ov00_02084700(?); + return this->func_ov00_02084700(); } bool MapManager::func_ov00_02084838() { @@ -1731,19 +1723,15 @@ void MapManager::func_ov00_02084924(u32 param_2) { this->mMap->func_ov00_0208008c(param_2); } -bool MapManager::func_ov00_02084934(Vec3p *param_2) { - q20 iVar2; - q20 iVar3; - q20 iVar4; +ARM bool MapManager::func_ov00_02084934(Vec3p *param_2) { Vec3p local_20; - iVar2 = this->GetMapCenterZ(); - iVar3 = param_2->z; - iVar4 = param_2->y; - local_20.x = this->GetMapCenterX(); - local_20.x = param_2->x - local_20.x; - local_20.y = iVar4; - local_20.z = iVar3 - iVar2; + q20 mapCenterZ = this->GetMapCenterZ(); + q20 y = param_2->y; + q20 zDiff = param_2->z - mapCenterZ; + local_20.x = param_2->x - this->GetMapCenterX(); + local_20.y = y; + local_20.z = zDiff; return this->mMap->IsInBounds(&local_20); }