From 6b9df2f4701f6790739bba8b07badcf002c7f72e Mon Sep 17 00:00:00 2001 From: SammygoodTunes Date: Tue, 1 Apr 2025 21:22:24 +0200 Subject: [PATCH] Function fixes (still 29%) --- config/eur/arm9/overlays/ov000/symbols.txt | 2 +- config/usa/arm9/overlays/ov000/symbols.txt | 2 +- include/Map/MapBase.hpp | 6 +- include/Map/MapManager.hpp | 10 +- src/00_Core/Map/MapBase.cpp | 4 +- src/00_Core/Map/MapManager.cpp | 137 +++++++++++---------- 6 files changed, 87 insertions(+), 74 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 9c5b3c4c..137aa6ad 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -612,7 +612,7 @@ _ZN10MapManager18func_ov00_02083c50Ei kind:function(arm,size=0x2c) addr:0x2083c5 _ZN10MapManager18func_ov00_02083c7cEP5Vec3pj kind:function(arm,size=0x6c) addr:0x2083c7c _ZN10MapManager18func_ov00_02083ce8EPS_Pijij kind:function(arm,size=0x14c) addr:0x2083ce8 _ZN10MapManager18func_ov00_02083e34Ecci kind:function(arm,size=0x24) addr:0x2083e34 -_ZN10MapManager16MapData_vfunc_60EPc kind:function(arm,size=0x18) addr:0x2083e58 +_ZN10MapManager16MapData_vfunc_60EPh kind:function(arm,size=0x18) addr:0x2083e58 _ZN10MapManager18func_ov00_02083e70Ev kind:function(arm,size=0x70) addr:0x2083e70 _ZN10MapManager16MapData_vfunc_68EP5Vec3pb kind:function(arm,size=0x18) addr:0x2083ee0 _ZN10MapManager18func_ov00_02083ef8EP5Vec3pS1_ kind:function(arm,size=0x4c) addr:0x2083ef8 diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index 2589d6f6..f22f0ea2 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -612,7 +612,7 @@ _ZN10MapManager18func_ov00_02083c50Ei kind:function(arm,size=0x2c) addr:0x2083bf _ZN10MapManager18func_ov00_02083c7cEP5Vec3pj kind:function(arm,size=0x6c) addr:0x2083c1c _ZN10MapManager18func_ov00_02083ce8EPS_Pijij kind:function(arm,size=0x14c) addr:0x2083c88 _ZN10MapManager18func_ov00_02083e34Ecci kind:function(arm,size=0x24) addr:0x2083dd4 -_ZN10MapManager16MapData_vfunc_60EPc kind:function(arm,size=0x18) addr:0x2083df8 +_ZN10MapManager16MapData_vfunc_60EPh kind:function(arm,size=0x18) addr:0x2083df8 _ZN10MapManager18func_ov00_02083e70Ev kind:function(arm,size=0x70) addr:0x2083e10 _ZN10MapManager16MapData_vfunc_68EP5Vec3pb kind:function(arm,size=0x18) addr:0x2083e80 _ZN10MapManager18func_ov00_02083ef8EP5Vec3pS1_ kind:function(arm,size=0x4c) addr:0x2083e98 diff --git a/include/Map/MapBase.hpp b/include/Map/MapBase.hpp index fc74ed50..0675c1e4 100644 --- a/include/Map/MapBase.hpp +++ b/include/Map/MapBase.hpp @@ -111,7 +111,7 @@ public: /* 180 */ MapBase_Unk_180 mUnk_180[2]; /* 188 */ unk8 mUnk_188[0x14]; /* 19c */ unk32 mUnk_19c; - /* 1a0 */ unk8 mUnk_1a0[0xc]; + /* 1a0 */ Vec3p mUnk_1a0; /* 1ac */ s16 mUnk_1ac; /* 1ae */ unk8 mUnk_1ae[2]; /* 1b0 */ @@ -139,14 +139,14 @@ public: /* 54 */ virtual unk32 vfunc_54(unk8 *param_1); /* 58 */ virtual unk32 vfunc_58(Vec2b *param_1, int param_2); /* 5c */ virtual unk32 vfunc_5c(); - /* 60 */ virtual unk32 vfunc_60(unk8 *param_1); + /* 60 */ virtual unk32 vfunc_60(u8 *param_1); /* 64 */ virtual unk32 vfunc_64(); /* 68 */ virtual unk8 vfunc_68(Vec3p *param_1, bool param_2); /* 6c */ virtual unk8 vfunc_6c(unk32 param_2, unk32 param_3, unk32 param_4); /* 70 */ virtual unk32 vfunc_70(Vec3p *param_2); /* 74 */ virtual s32 vfunc_74(Vec3p *param_2); /* 78 */ virtual unk32 vfunc_78(bool *param_1); - /* 7c */ virtual void vfunc_7c(); + /* 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); /* 88 */ virtual unk32 vfunc_88(); diff --git a/include/Map/MapManager.hpp b/include/Map/MapManager.hpp index 12f873d1..d82694db 100644 --- a/include/Map/MapManager.hpp +++ b/include/Map/MapManager.hpp @@ -62,7 +62,7 @@ public: bool func_ov00_02082494(s32 param_2); bool func_ov00_020824cc(s32 param_2); s32 func_ov00_02082504(); - unk8 *func_ov00_02082538(); + Vec3p *func_ov00_02082538(); void func_ov00_02082594(); void func_ov00_020825ac(); s32 GetCourseFilePath(char *courseName, char *buf); @@ -78,7 +78,7 @@ public: void DestroyMap(); void MapData_vfunc_44(); void func_ov00_02082808(s32 param_2); - void MapData_vfunc_7c(); + 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); u8 GetNumMaps(); @@ -168,14 +168,14 @@ public: s32 func_ov00_02083c50(unk32 z); void func_ov00_02083c7c(Vec3p *param_2, u32 param_3); static void func_ov00_02083ce8(MapManager *param_1, s32 *param_2, u32 param_3, s32 param_4, u32 param_5); - void func_ov00_02083e34(unk8 param_2, unk8 param_3, unk32 param_4); - unk32 MapData_vfunc_60(unk8 *param_1); + s32 func_ov00_02083e34(unk8 param_2, unk8 param_3, unk32 param_4); + unk32 MapData_vfunc_60(u8 *param_1); bool func_ov00_02083e70(); unk32 MapData_vfunc_68(Vec3p *param_1, bool param_2); s32 func_ov00_02083ef8(Vec3p *param_2, Vec3p *param_3); void func_ov00_02083f44(Vec3p *param_2); unk8 MapData_vfunc_6c(unk32 param_2, unk32 param_3, unk32 param_4); - unk8 MapData_vfunc_70(Vec3p *param_2); + unk32 MapData_vfunc_70(Vec3p *param_2); static void func_ov00_02083fb0(u32 *param_1, MapManager *param_2, Vec3p *param_3); void GetTileWorldBounds(Vec2b *tile, AABB *tileBounds); unk32 MapData_vfunc_54(unk8 *a); diff --git a/src/00_Core/Map/MapBase.cpp b/src/00_Core/Map/MapBase.cpp index 629886d2..f4182b96 100644 --- a/src/00_Core/Map/MapBase.cpp +++ b/src/00_Core/Map/MapBase.cpp @@ -21,7 +21,7 @@ unk32 MapBase::vfunc_50() {} unk32 MapBase::vfunc_54(unk8 *param_1) {} unk32 MapBase::vfunc_58(Vec2b *param_1, int param_2) {} unk32 MapBase::vfunc_5c() {} -unk32 MapBase::vfunc_60(unk8 *param_1) {} +unk32 MapBase::vfunc_60(u8 *param_1) {} unk32 MapBase::vfunc_64() {} unk8 MapBase::vfunc_68(Vec3p *param_1, bool param_2) {} unk8 MapBase::func_ov00_0207e940(unk8 *param_1) {} @@ -41,7 +41,7 @@ unk32 MapBase::vfunc_a4(unk8 *param_1) {} void MapBase::vfunc_a8() {} void MapBase::vfunc_ac() {} unk32 MapBase::vfunc_78(bool *param_1) {} -void MapBase::vfunc_7c() {} +s32 MapBase::vfunc_7c(s32 param_1, unk32 *param_2, s32 param_3, short param_4[4]) {} unk32 MapBase::vfunc_80() {} void MapBase::vfunc_84(unk32 param_2) {} bool MapBase::func_ov00_0207f38c(s32 *param_2) {} diff --git a/src/00_Core/Map/MapManager.cpp b/src/00_Core/Map/MapManager.cpp index 708652b6..15de64f6 100644 --- a/src/00_Core/Map/MapManager.cpp +++ b/src/00_Core/Map/MapManager.cpp @@ -47,8 +47,15 @@ extern bool func_ov015_02129c24(MapBase *param_1, Vec3p *param_2, Vec3p *param_3 extern bool func_ov015_02129c34(MapBase *param_1, s32 param_2); extern bool func_ov015_02129c44(MapBase *param_1, s32 param_2); +struct UnkStruct_027e0d38 { + /* 00 */ unk8 mUnk_00[0xc]; + /* 0c */ unk32 mUnk_0c; + /* 10 */ unk8 mUnk_10[0x18]; + /* 28 */ unk32 mUnk_28; +}; + extern s32 *data_027e0c68; -extern s32 *data_027e0d38; +extern UnkStruct_027e0d38 *data_027e0d38; extern s32 *data_027e0d3c; extern s32 *data_027e0f64; extern s32 *data_027e0f68; @@ -111,8 +118,8 @@ unk8 MapManager::func_ov00_0208210c(unk32 param_2, unk32 *param_3) { uVar2 = 4; } *(unk8 *) ((int) param_3 + 5) = uVar2; - uVar3 = func_ov000_020a5e9c(data_027e0d38 + 0x28) + 0x1c; - puVar1 = data_027e0d38; + uVar3 = func_ov000_020a5e9c(&data_027e0d38->mUnk_28) + 0x1c; + puVar1 = (s32 *) data_027e0d38; param_3[2] = uVar3; *(unk8 *) (param_3 + 4) = *(unk8 *) (*(s32 *) (*(s32 *) puVar1 + 0x28) + 0x2e); *(unk16 *) (param_3 + 5) = *(unk16 *) (*(s32 *) (*(s32 *) puVar1 + 0x28) + 0x36); @@ -122,7 +129,7 @@ unk8 MapManager::func_ov00_0208210c(unk32 param_2, unk32 *param_3) { param_3[8] = *(unk32 *) (iVar4 + 0x40); uVar3 = func_ov000_020a5e9c(puVar1 + 0x28) + 0x44; param_3[3] = uVar3; - puVar1 = data_027e0d38; + puVar1 = (s32 *) data_027e0d38; *(unk8 *) ((int) param_3 + 0x11) = *(unk8 *) (*(s32 *) (*(s32 *) data_027e0d38 + 0x28) + 0x56); iVar4 = *(s32 *) (*(s32 *) puVar1 + 0x28); param_3[9] = *(unk32 *) (iVar4 + 0x5c); @@ -141,7 +148,7 @@ unk8 MapManager::func_ov00_0208210c(unk32 param_2, unk32 *param_3) { local_2b = *(unk8 *) (iVar4 + 0x85); uVar3 = func_ov000_020a5e9c(&local_40); param_3[0x70] = uVar3; - puVar1 = data_027e0f70; + puVar1 = (s32 *) data_027e0f70; *(unk8 *) ((int) param_3 + 0x1be) = local_2e; *(unk8 *) ((int) param_3 + 0x1bf) = local_2d; func_ov000_02096324(puVar1, *param_3); // unsure if (s32 *param_1, s32 param_2) or (s32 param_1, s32 *param_2) @@ -243,14 +250,19 @@ ARM s32 MapManager::func_ov00_02082504() { return 0; } -ARM unk8 *MapManager::func_ov00_02082538() { - unk8 var0[12]; +ARM Vec3p *MapManager::func_ov00_02082538() { s32 var1 = this->mMap->vfunc_4c(); + Vec3p var0; if (var1 != 2) { - return var0; + q20 x = gPlayerPos->x; + q20 y = gPlayerPos->y; + var0.x = x; + var0.y = y; + q20 z = gPlayerPos->z; + var0.z = z; + return &var0; } - return this->mMap->mUnk_1a0; - // Reference to gPlayerPos in Ghidra, but not used. (See overlay_d_0::0x2082538) + return &this->mMap->mUnk_1a0; } ARM void MapManager::func_ov00_02082594() { @@ -379,8 +391,8 @@ ARM void MapManager::func_ov00_02082808(s32 param_2) { // func_ov00_020d72b8(DWORD_overlay_d_0_bss__020eec68); } -ARM void MapManager::MapData_vfunc_7c() { - this->mMap->vfunc_7c(); +ARM s32 MapManager::MapData_vfunc_7c(s32 param_1, unk32 *param_2, s32 param_3, short param_4[4]) { + return this->mMap->vfunc_7c(param_1, param_2, param_3, param_4); } ARM void MapManager::MapData_vfunc_84(unk32 param_2) { @@ -915,14 +927,14 @@ ARM bool MapManager::GetEntrancePos(Entrance *param_1, unk32 entranceId) { param_1->mPos.y = y; param_1->mPos.z = z; param_1->mAngle = entrance->mAngle; - param_1->mId = entrance->mId; // mId needs to be u8 according to objdiff + param_1->mId = entrance->mId; param_1->mUnk_10 = entrance->mUnk_10; return true; } ARM bool MapManager::func_ov00_02083664(Entrance *param_2, unk32 entranceId) { Entrance entrance; - entrance.mId = (u8) 0xff; // mId needs to be u8 + entrance.mId = (u8) 0xff; entrance.mUnk_10 = 0; if (this->GetEntrancePos(&entrance, entranceId)) { param_2->mPos.x = entrance.mPos.x; @@ -945,23 +957,23 @@ ARM bool MapManager::func_ov00_020836dc(u32 type, u32 actorId) { Actor *actor; Vec3p playerPos; - if (!(actorId != 0 && actorId != 1)) { // what an awkward statement (as opposed to if (actorId < 2)) - // below doesn't match in objdiff - q20 x = gPlayerPos->x; - q20 y = gPlayerPos->y; - playerPos.x = x; - playerPos.y = y; - q20 z = gPlayerPos->z; - playerPos.z = z; - - } else { - actor = gActorManager->FindActorById(actorId); - if (actor == NULL) { - return false; - } - playerPos.x = actor->mPos.x; - playerPos.y = actor->mPos.y; - playerPos.z = actor->mPos.z; + switch (actorId) { + case 0: + case 1: + q20 y = gPlayerPos->y; + playerPos.x = gPlayerPos->x; + playerPos.y = y; + playerPos.z = gPlayerPos->z; + break; + default: + actor = gActorManager->FindActorById(actorId); + if (actor == NULL) { + return false; + } + playerPos.x = actor->mPos.x; + playerPos.y = actor->mPos.y; + playerPos.z = actor->mPos.z; + break; } return this->IsTriggerTypeOverlapped(type, &playerPos); } @@ -1169,9 +1181,12 @@ ARM s32 MapManager::func_ov00_02083c50(unk32 z) { ARM void MapManager::func_ov00_02083c7c(Vec3p *param_2, u32 param_3) { Vec3p local_28; - param_2->x = this->func_ov00_02083c24(param_3 & 0xff); - param_2->z = this->func_ov00_02083c50(param_3 >> 8 & 0xff); - param_2->y = this->MapData_vfunc_68(&local_28, true); // please tell me this is correct + q20 x = this->func_ov00_02083c24(param_3 & 0xff); + // param_2->x = x; + q20 z = this->func_ov00_02083c50(param_3 >> 8 & 0xff); + // param_2->z = z; + q20 y = this->MapData_vfunc_68(&local_28, true); + // param_2->y = y; } ARM void MapManager::func_ov00_02083ce8(MapManager *param_1, s32 *param_2, u32 param_3, s32 param_4, u32 param_5) { @@ -1214,19 +1229,18 @@ ARM void MapManager::func_ov00_02083ce8(MapManager *param_1, s32 *param_2, u32 p param_2[1] = iVar2; } -ARM void MapManager::func_ov00_02083e34(unk8 param_2, unk8 param_3, unk32 param_4) { - // Missing opcode in objdiff - unk8 local_8; // What type is this? - unk8 local_7; // Unused. - unk16 uStack_6; // Unused. +ARM s32 MapManager::func_ov00_02083e34(unk8 param_2, unk8 param_3, unk32 param_4) { + u8 local_8; + u8 local_7; + // unk16 uStack_6; // Unused. - uStack_6 = (unk16) ((u32) param_4 >> 0x10); - local_8 = param_2; - local_7 = param_3; - this->mMap->vfunc_60(&local_8); + // uStack_6 = (unk16) ((u32) param_4 >> 0x10); + local_8 = param_2; // Likely a struct + *(&local_8 + 1) = param_3; + return this->mMap->vfunc_60(&local_8); } -ARM unk32 MapManager::MapData_vfunc_60(unk8 *param_1) { // should the param be bool*? +ARM unk32 MapManager::MapData_vfunc_60(u8 *param_1) { // should the param be bool*? return this->mMap->vfunc_60(param_1); } @@ -1280,13 +1294,13 @@ unk8 MapManager::MapData_vfunc_6c(unk32 param_2, unk32 param_3, unk32 param_4) { this->mMap->vfunc_6c(param_2, param_3, param_4); } -unk8 MapManager::MapData_vfunc_70(Vec3p *param_2) { - this->mMap->vfunc_70(param_2); +ARM unk32 MapManager::MapData_vfunc_70(Vec3p *param_2) { + return this->mMap->vfunc_70(param_2); } ARM void MapManager::func_ov00_02083fb0(u32 *param_1, MapManager *param_2, Vec3p *param_3) { s32 iVar1; - unk32 dVar2; + s32 dVar2; iVar1 = param_2->mMap->vfunc_74(param_3); if (iVar1 != 0) { @@ -1294,7 +1308,7 @@ ARM void MapManager::func_ov00_02083fb0(u32 *param_1, MapManager *param_2, Vec3p return; } dVar2 = param_2->MapData_vfunc_70(param_3); - if (dVar2 != 0xffff) { + if (iVar1 != 0xffff) { func_ov000_02093a1c(param_1, data_027e0f6c); return; } @@ -1801,14 +1815,14 @@ bool MapManager::func_ov00_020849dc() { return this->mCourse->mUnk_008 == -3; } -bool MapManager::func_ov00_020849f8() { - s32 iVar1; // = FUN_overlay_d_0__020a5e9c(*(s32 *) PTR_PTR_overlay_d_0__02084a4c + 0xc); - if (iVar1 == 5) { - return true; - } - iVar1 = this->GetMapData_Unk_06(); - if ((iVar1 != 0) && (iVar1 = this->func_ov00_020849c0(), iVar1 == 0)) { - return true; +ARM bool MapManager::func_ov00_020849f8() { + switch (func_ov000_020a5e9c(&data_027e0d38->mUnk_0c)) { + case 5: return true; + default: + if (this->GetMapData_Unk_06() != 0 && !this->func_ov00_020849c0()) { + return true; + } + break; } return false; } @@ -1829,7 +1843,7 @@ void MapManager::SpawnNPC(Vec3p *param_2, unk32 param_3, unk32 param_4) { // (ActorRef *) 0x0); } -bool MapManager::func_ov00_02084ac4(u32 actorId) { +ARM bool MapManager::func_ov00_02084ac4(u32 actorId) { Actor *iVar1; bool bVar1; @@ -1837,11 +1851,10 @@ bool MapManager::func_ov00_02084ac4(u32 actorId) { if (iVar1 == NULL) { return false; } - bVar1 = iVar1->mType == ActorTypeId_EVIC; - if (bVar1) { - iVar1->mAlive = false; - } - return bVar1; + + if (iVar1->mType != ActorTypeId_EVIC) return false; + iVar1->mAlive = false; + return true; } void MapManager::SetNumKeys(unk32 keys) {