From 96e2380df560dd3d9898f41f6caaa08e5eeaa56e Mon Sep 17 00:00:00 2001 From: SammygoodTunes Date: Mon, 7 Apr 2025 21:06:29 +0200 Subject: [PATCH] Decomp progress 33% --- config/eur/arm9/overlays/ov000/symbols.txt | 16 +- config/usa/arm9/overlays/ov000/symbols.txt | 16 +- include/Map/MapBase.hpp | 2 +- include/Map/MapManager.hpp | 2 +- src/00_Core/Map/MapBase.cpp | 2 +- src/00_Core/Map/MapManager.cpp | 226 ++++++++------------- 6 files changed, 103 insertions(+), 161 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 528f1d22..04f233bc 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -336,12 +336,12 @@ _ZN7MapBase18func_ov00_0207e28cEi kind:function(arm,size=0x1b8) addr:0x207e28c _ZN7MapBase8vfunc_b4Ev kind:function(arm,size=0x28) addr:0x207e444 _ZN7MapBase8vfunc_48Ev kind:function(arm,size=0x1c) addr:0x207e46c _ZN7MapBase8vfunc_50Ev kind:function(arm,size=0x8) addr:0x207e488 -_ZN7MapBase8vfunc_54Ev kind:function(arm,size=0x8) addr:0x207e490 -_ZN7MapBase8vfunc_58Ev kind:function(arm,size=0x8) addr:0x207e498 +_ZN7MapBase8vfunc_54EP5Vec2b kind:function(arm,size=0x8) addr:0x207e490 +_ZN7MapBase8vfunc_58EP5Vec2bi kind:function(arm,size=0x8) addr:0x207e498 _ZN7MapBase8vfunc_5cEv kind:function(arm,size=0x8) addr:0x207e4a0 -_ZN7MapBase8vfunc_60Ev kind:function(arm,size=0x8) addr:0x207e4a8 +_ZN7MapBase8vfunc_60EPh kind:function(arm,size=0x8) addr:0x207e4a8 _ZN7MapBase8vfunc_64Ev kind:function(arm,size=0x8) addr:0x207e4b0 -_ZN7MapBase8vfunc_68Ev kind:function(arm,size=0x488) addr:0x207e4b8 +_ZN7MapBase8vfunc_68EP5Vec3pb kind:function(arm,size=0x488) addr:0x207e4b8 _ZN7MapBase18func_ov00_0207e940EPc kind:function(arm,size=0x28) addr:0x207e940 _ZN7MapBase18func_ov00_0207e968Ev kind:function(arm,size=0x4) addr:0x207e968 _ZN7MapBase18func_ov00_0207e96cEv kind:function(arm,size=0x4) addr:0x207e96c @@ -355,11 +355,11 @@ _ZN7MapBase8vfunc_88Ev kind:function(arm,size=0x8) addr:0x207f324 _ZN7MapBase8vfunc_8cEv kind:function(arm,size=0x8) addr:0x207f32c _ZN7MapBase8vfunc_9cEv kind:function(arm,size=0x4) addr:0x207f334 _ZN7MapBase8vfunc_a0Ev kind:function(arm,size=0x4) addr:0x207f338 -_ZN7MapBase8vfunc_a4Ev kind:function(arm,size=0x8) addr:0x207f33c +_ZN7MapBase8vfunc_a4EPc kind:function(arm,size=0x8) addr:0x207f33c _ZN7MapBase8vfunc_a8Ev kind:function(arm,size=0x4) addr:0x207f344 _ZN7MapBase8vfunc_acEv kind:function(arm,size=0x4) addr:0x207f348 -_ZN7MapBase8vfunc_78Ev kind:function(arm,size=0x8) addr:0x207f34c -_ZN7MapBase8vfunc_7cEv kind:function(arm,size=0x8) addr:0x207f354 +_ZN7MapBase8vfunc_78EPb kind:function(arm,size=0x8) addr:0x207f34c +_ZN7MapBase8vfunc_7cEiPiiPs kind:function(arm,size=0x8) addr:0x207f354 _ZN7MapBase8vfunc_80Ev kind:function(arm,size=0x8) addr:0x207f35c _ZN7MapBase8vfunc_84Ei kind:function(arm,size=0x28) addr:0x207f364 _ZN7MapBase18func_ov00_0207f38cEPi kind:function(arm,size=0x38) addr:0x207f38c @@ -621,7 +621,7 @@ _ZN10MapManager16MapData_vfunc_6cEiii kind:function(arm,size=0x18) addr:0x2083f8 _ZN10MapManager16MapData_vfunc_70EP5Vec3p kind:function(arm,size=0x18) addr:0x2083f98 _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p kind:function(arm,size=0x74) addr:0x2083fb0 _ZN10MapManager18GetTileWorldBoundsEP5Vec2bP4AABB kind:function(arm,size=0x64) addr:0x2084024 -_ZN10MapManager16MapData_vfunc_54EPc kind:function(arm,size=0x18) addr:0x2084088 +_ZN10MapManager16MapData_vfunc_54EP5Vec2b kind:function(arm,size=0x18) addr:0x2084088 _ZN10MapManager18func_ov00_020840a0Ecci kind:function(arm,size=0x24) addr:0x20840a0 _ZN10MapManager16MapData_vfunc_78EPb kind:function(arm,size=0x18) addr:0x20840c4 _ZN10MapManager18func_ov00_020840dcEv kind:function(arm,size=0x24) addr:0x20840dc diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index d7e06342..4b67f92d 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -336,12 +336,12 @@ _ZN7MapBase18func_ov00_0207e28cEi kind:function(arm,size=0x1b8) addr:0x207e22c _ZN7MapBase8vfunc_b4Ev kind:function(arm,size=0x28) addr:0x207e3e4 _ZN7MapBase8vfunc_48Ev kind:function(arm,size=0x1c) addr:0x207e40c _ZN7MapBase8vfunc_50Ev kind:function(arm,size=0x8) addr:0x207e428 -_ZN7MapBase8vfunc_54Ev kind:function(arm,size=0x8) addr:0x207e430 -_ZN7MapBase8vfunc_58Ev kind:function(arm,size=0x8) addr:0x207e438 +_ZN7MapBase8vfunc_54EP5Vec2b kind:function(arm,size=0x8) addr:0x207e430 +_ZN7MapBase8vfunc_58EP5Vec2bi kind:function(arm,size=0x8) addr:0x207e438 _ZN7MapBase8vfunc_5cEv kind:function(arm,size=0x8) addr:0x207e440 -_ZN7MapBase8vfunc_60Ev kind:function(arm,size=0x8) addr:0x207e448 +_ZN7MapBase8vfunc_60EPh kind:function(arm,size=0x8) addr:0x207e448 _ZN7MapBase8vfunc_64Ev kind:function(arm,size=0x8) addr:0x207e450 -_ZN7MapBase8vfunc_68Ev kind:function(arm,size=0x488) addr:0x207e458 +_ZN7MapBase8vfunc_68EP5Vec3pb kind:function(arm,size=0x488) addr:0x207e458 _ZN7MapBase18func_ov00_0207e940EPc kind:function(arm,size=0x28) addr:0x207e8e0 _ZN7MapBase18func_ov00_0207e968Ev kind:function(arm,size=0x4) addr:0x207e908 _ZN7MapBase18func_ov00_0207e96cEv kind:function(arm,size=0x4) addr:0x207e90c @@ -355,11 +355,11 @@ _ZN7MapBase8vfunc_88Ev kind:function(arm,size=0x8) addr:0x207f2c4 _ZN7MapBase8vfunc_8cEv kind:function(arm,size=0x8) addr:0x207f2cc _ZN7MapBase8vfunc_9cEv kind:function(arm,size=0x4) addr:0x207f2d4 _ZN7MapBase8vfunc_a0Ev kind:function(arm,size=0x4) addr:0x207f2d8 -_ZN7MapBase8vfunc_a4Ev kind:function(arm,size=0x8) addr:0x207f2dc +_ZN7MapBase8vfunc_a4EPc kind:function(arm,size=0x8) addr:0x207f2dc _ZN7MapBase8vfunc_a8Ev kind:function(arm,size=0x4) addr:0x207f2e4 _ZN7MapBase8vfunc_acEv kind:function(arm,size=0x4) addr:0x207f2e8 -_ZN7MapBase8vfunc_78Ev kind:function(arm,size=0x8) addr:0x207f2ec -_ZN7MapBase8vfunc_7cEv kind:function(arm,size=0x8) addr:0x207f2f4 +_ZN7MapBase8vfunc_78EPb kind:function(arm,size=0x8) addr:0x207f2ec +_ZN7MapBase8vfunc_7cEiPiiPs kind:function(arm,size=0x8) addr:0x207f2f4 _ZN7MapBase8vfunc_80Ev kind:function(arm,size=0x8) addr:0x207f2fc _ZN7MapBase8vfunc_84Ei kind:function(arm,size=0x28) addr:0x207f304 _ZN7MapBase18func_ov00_0207f38cEPi kind:function(arm,size=0x38) addr:0x207f32c @@ -621,7 +621,7 @@ _ZN10MapManager16MapData_vfunc_6cEiii kind:function(arm,size=0x18) addr:0x2083f2 _ZN10MapManager16MapData_vfunc_70EP5Vec3p kind:function(arm,size=0x18) addr:0x2083f38 _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p kind:function(arm,size=0x74) addr:0x2083f50 _ZN10MapManager18GetTileWorldBoundsEP5Vec2bP4AABB kind:function(arm,size=0x64) addr:0x2083fc4 -_ZN10MapManager16MapData_vfunc_54EPc kind:function(arm,size=0x18) addr:0x2084028 +_ZN10MapManager16MapData_vfunc_54EP5Vec2b kind:function(arm,size=0x18) addr:0x2084028 _ZN10MapManager18func_ov00_020840a0Ecci kind:function(arm,size=0x24) addr:0x2084040 _ZN10MapManager16MapData_vfunc_78EPb kind:function(arm,size=0x18) addr:0x2084064 _ZN10MapManager18func_ov00_020840dcEv kind:function(arm,size=0x24) addr:0x208407c diff --git a/include/Map/MapBase.hpp b/include/Map/MapBase.hpp index ecf92c08..1750cc6b 100644 --- a/include/Map/MapBase.hpp +++ b/include/Map/MapBase.hpp @@ -135,7 +135,7 @@ public: /* 48 */ virtual void vfunc_48(); /* 4c */ virtual s32 vfunc_4c() = 0; /* 50 */ virtual unk32 vfunc_50(); - /* 54 */ virtual unk32 vfunc_54(unk8 *param_1); + /* 54 */ virtual unk32 vfunc_54(Vec2b *param_1); /* 58 */ virtual unk32 vfunc_58(Vec2b *param_1, int param_2); /* 5c */ virtual unk32 vfunc_5c(); /* 60 */ virtual unk32 vfunc_60(u8 *param_1); diff --git a/include/Map/MapManager.hpp b/include/Map/MapManager.hpp index d82694db..39e15b88 100644 --- a/include/Map/MapManager.hpp +++ b/include/Map/MapManager.hpp @@ -178,7 +178,7 @@ public: 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); + unk32 MapData_vfunc_54(Vec2b *a); unk8 func_ov00_020840a0(unk8 param_2, unk8 param_3, unk32 param_4); unk32 MapData_vfunc_78(bool *param_1); unk8 func_ov00_020840dc(); diff --git a/src/00_Core/Map/MapBase.cpp b/src/00_Core/Map/MapBase.cpp index f4182b96..8672e0de 100644 --- a/src/00_Core/Map/MapBase.cpp +++ b/src/00_Core/Map/MapBase.cpp @@ -18,7 +18,7 @@ s32 MapBase::func_ov00_0207e28c(s32 param_2) {} void MapBase::vfunc_b4() {} void MapBase::vfunc_48() {} unk32 MapBase::vfunc_50() {} -unk32 MapBase::vfunc_54(unk8 *param_1) {} +unk32 MapBase::vfunc_54(Vec2b *param_1) {} unk32 MapBase::vfunc_58(Vec2b *param_1, int param_2) {} unk32 MapBase::vfunc_5c() {} unk32 MapBase::vfunc_60(u8 *param_1) {} diff --git a/src/00_Core/Map/MapManager.cpp b/src/00_Core/Map/MapManager.cpp index e7e826f6..c5903854 100644 --- a/src/00_Core/Map/MapManager.cpp +++ b/src/00_Core/Map/MapManager.cpp @@ -252,12 +252,7 @@ ARM Vec3p *MapManager::func_ov00_02082538() { s32 var1 = this->mMap->vfunc_4c(); Vec3p var0; if (var1 == 2) return &this->mMap->mUnk_1a0; - q20 x = gPlayerPos.x; - q20 y = gPlayerPos.y; - var0.x = x; - var0.y = y; - q20 z = gPlayerPos.z; - var0.z = z; + var0 = gPlayerPos; return &var0; } @@ -353,7 +348,11 @@ ARM void MapManager::DestroyMap() { if (this->mMap == NULL) { return; } - this->mMap->~MapBase(); + if (this->mMap != NULL) { + this->mMap->~MapBase(); // 0x0 offset instead of the expected 0x4. + } + this->mMap = NULL; + return; } ARM void MapManager::MapData_vfunc_44() { @@ -1300,7 +1299,8 @@ ARM void MapManager::func_ov00_02083fb0(u32 *param_1, MapManager *param_2, Vec3p iVar1 = param_2->mMap->vfunc_74(param_3); if (iVar1 != 0) { - *param_1 = *(unk32 *) (iVar1 + 0xc); + // iVar1 += 0xc; + *param_1 = iVar1; return; } dVar2 = param_2->MapData_vfunc_70(param_3); @@ -1324,12 +1324,12 @@ void MapManager::GetTileWorldBounds(Vec2b *tile, AABB *tileBounds) { Vec3p_Add(&tileBounds->max, &local_20, &tileBounds->max); } -unk32 MapManager::MapData_vfunc_54(unk8 *a) { +unk32 MapManager::MapData_vfunc_54(Vec2b *a) { return this->mMap->vfunc_54(a); // what to use for this param? } unk8 MapManager::func_ov00_020840a0(unk8 param_2, unk8 param_3, unk32 param_4) { - unk8 local_8; + Vec2b local_8; unk8 local_7; unk16 uStack_6; @@ -1383,97 +1383,63 @@ unk8 MapManager::func_ov00_02084164(Vec2b *param_2) { unk32 uVar2; iVar1 = this->mMap->vfunc_58(param_2, 7 /*, pcVar3, param_4*/); // Params? - if (iVar1 == 0) { - uVar2 = this->MapData_vfunc_54(0); - switch (uVar2) { - case 0: break; - case 1: return 0; - case 2: return 0; - case 3: return 0; - case 4: return 0; - case 5: return 0; - case 6: return 0; - case 7: return 0; - case 8: break; - case 9: break; - case 10: return 0; - case 0xb: break; - case 0xc: break; - case 0xd: break; - case 0xe: break; // I mean, honestly Ghidra. - case 0xf: break; // What are we going to do with you? - case 0x10: break; - case 0x11: break; - case 0x12: break; - case 0x13: break; - case 0x14: return 0; - case 0x15: break; - case 0x16: break; - case 0x17: return 0; - case 0x18: break; - case 0x19: return 0; - case 0x1a: break; - case 0x1b: return 0; - case 0x1c: return 0; - case 0x1d: return 0; - case 0x1e: return 0; - case 0x1f: return 0; - case 0x20: break; - case 0x21: break; - case 0x22: break; - case 0x23: break; - case 0x24: return 0; - case 0x25: break; - case 0x26: break; - case 0x27: break; - case 0x28: break; - case 0x29: break; - case 0x2a: break; - case 0x2b: return 0; - case 0x2c: break; - case 0x2d: break; - case 0x2e: break; - case 0x2f: break; - case 0x30: return 0; - case 0x31: break; - case 0x32: break; - case 0x33: return 0; - case 0x34: return 0; - case 0x35: break; - case 0x36: break; - case 0x37: return 0; - case 0x38: break; - case 0x39: break; - case 0x3a: break; - case 0x3b: break; - case 0x3c: break; - case 0x3d: break; - case 0x3e: break; - case 0x3f: break; - case 0x40: return 0; - case 0x41: break; - case 0x42: break; - case 0x43: break; - case 0x44: break; - case 0x45: break; - case 0x46: return 0; - case 0x47: return 0; - case 0x48: return 0; - case 0x49: return 0; - case 0x4a: return 0; - case 0x4b: return 0; - case 0x4c: return 0; - case 0x4d: break; - case 0x4e: return 0; - case 0x4f: return 0; - case 0x50: return 0; - case 0x51: break; - case 0x52: break; - case 0x53: break; - case 0x54: break; - default: return 0; - } - return 1; + if (iVar1 != 0) { + return 0; + } + uVar2 = this->MapData_vfunc_54(param_2); + switch (uVar2) { + case 0: + case 8: + case 9: + case 0xb: + case 0xc: + case 0xd: + case 0xe: + case 0xf: + case 0x10: + case 0x11: + case 0x12: + case 0x13: + case 0x15: + case 0x16: + case 0x18: + case 0x1a: + case 0x20: + case 0x21: + case 0x22: + case 0x23: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + case 0x29: + case 0x2a: + case 0x2c: + case 0x2d: + case 0x2e: + case 0x2f: + case 0x31: + case 0x32: + case 0x35: + case 0x36: + case 0x38: + case 0x39: + case 0x3a: + case 0x3b: + case 0x3c: + case 0x3d: + case 0x3e: + case 0x3f: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x4d: + case 0x51: + case 0x52: + case 0x53: + case 0x54: return 1; } return 0; } @@ -1714,54 +1680,30 @@ unk8 MapManager::func_ov00_020847f0() { bool MapManager::func_ov00_02084838() { unk32 uVar1 = this->GetMapData_Unk_38(); switch (uVar1) { - case 0: return false; - case 1: break; - case 2: break; - case 3: break; - case 4: break; - case 5: break; - case 6: return false; - case 7: return false; - case 8: return false; - case 9: return false; - case 10: break; - case 0xb: break; - case 0xc: break; - case 0xd: return false; - case 0xe: return false; - case 0xf: return false; - case 0x10: return false; - case 0x11: break; - case 0x12: return false; - case 0x13: break; - case 0x14: break; - case 0x15: break; - case 0x16: break; + case 1: + case 2: + case 3: + case 4: + case 5: + case 10: + case 0xb: + case 0xc: + case 0x11: + case 0x13: + case 0x14: + case 0x15: + case 0x16: return true; default: return false; } - return true; } bool MapManager::func_ov00_020848b8() { unk32 uVar1 = this->func_ov00_020846a4(); switch (uVar1) { - case 0: break; - case 1: break; - case 2: break; - case 3: break; - case 4: break; - case 5: break; - case 6: return true; - case 7: break; - case 8: break; - case 9: break; - case 10: break; - case 0xb: break; - case 0xc: return true; - case 0xd: return true; - case 0xe: break; - case 0xf: return true; - case 0x10: break; + case 6: + case 0xc: + case 0xd: + case 0xf: case 0x11: return true; } return false;