summaryrefslogtreecommitdiff
path: root/src/d/map/d_map_path_dmap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/d/map/d_map_path_dmap.cpp')
-rw-r--r--src/d/map/d_map_path_dmap.cpp110
1 files changed, 60 insertions, 50 deletions
diff --git a/src/d/map/d_map_path_dmap.cpp b/src/d/map/d_map_path_dmap.cpp
index 45e5aa933b..b9025f1b1c 100644
--- a/src/d/map/d_map_path_dmap.cpp
+++ b/src/d/map/d_map_path_dmap.cpp
@@ -4,19 +4,16 @@
//
#include "d/map/d_map_path_dmap.h"
+#include "d/com/d_com_inf_game.h"
+#include "d/meter/d_meter_HIO.h"
#include "dol2asm.h"
#include "dolphin/types.h"
+#include "m_Do/m_Do_mtx.h"
//
// Types:
//
-struct mDoMtx_stack_c {
- /* 8000CE38 */ void scaleM(f32, f32, f32);
-
- static u8 now[48];
-};
-
struct dMpath_n {
struct dTexObjAggregate_c {
/* 8003C85C */ void create();
@@ -181,76 +178,64 @@ extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" u8 now__14mDoMtx_stack_c[48];
extern "C" u8 mStatus__20dStage_roomControl_c[65792];
-extern "C" extern u8 g_dComIfG_gameInfo[122384];
extern "C" u8 m_texObjAgg__8dMpath_n[28];
extern "C" u8 mTypeGroupListAll__7dTres_c[204 + 4 /* padding */];
-extern "C" extern u8 g_fmapHIO[1188];
//
// Declarations:
//
/* 8003ECA0-8003ECD8 0395E0 0038+00 0/0 3/3 0/0 .text chkGetCompass__10dMapInfo_nFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMapInfo_n::chkGetCompass() {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/chkGetCompass__10dMapInfo_nFv.s"
+bool dMapInfo_n::chkGetCompass() {
+ return dComIfGs_isDungeonItemCompass() ? true : false;
}
-#pragma pop
/* 8003ECD8-8003ED10 039618 0038+00 0/0 4/4 0/0 .text chkGetMap__10dMapInfo_nFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMapInfo_n::chkGetMap() {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/chkGetMap__10dMapInfo_nFv.s"
+bool dMapInfo_n::chkGetMap() {
+ return dComIfGs_isDungeonItemMap() ? true : false;
}
-#pragma pop
/* 8003ED10-8003ED60 039650 0050+00 2/2 7/7 0/0 .text isVisitedRoom__10dMapInfo_nFi */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMapInfo_n::isVisitedRoom(int param_0) {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/isVisitedRoom__10dMapInfo_nFi.s"
+bool dMapInfo_n::isVisitedRoom(int i_roomNo) {
+ return g_fmapHIO.mAllRegionsUnlocked || dComIfGs_isVisitedRoom(i_roomNo);
}
-#pragma pop
/* 8003ED60-8003EDC0 0396A0 0060+00 1/1 2/2 0/0 .text correctionOriginPos__10dMapInfo_nFScP3Vec */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMapInfo_n::correctionOriginPos(s8 param_0, Vec* param_1) {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/correctionOriginPos__10dMapInfo_nFScP3Vec.s"
+void dMapInfo_n::correctionOriginPos(s8 i_roomNo, Vec* pos_p) {
+ dStage_FileList2_dt_c* filelist = dStage_roomControl_c::getFileList2(i_roomNo);
+
+ if (pos_p != NULL) {
+ rotAngle(filelist, pos_p);
+ offsetPlus(filelist, pos_p);
+ }
}
-#pragma pop
/* 8003EDC0-8003EDEC 039700 002C+00 3/3 0/0 0/0 .text
* offsetPlus__10dMapInfo_nFPC21dStage_FileList2_dt_cP3Vec */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMapInfo_n::offsetPlus(dStage_FileList2_dt_c const* param_0, Vec* param_1) {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/offsetPlus__10dMapInfo_nFPC21dStage_FileList2_dt_cP3Vec.s"
+void dMapInfo_n::offsetPlus(dStage_FileList2_dt_c const* filelist, Vec* p_pos) {
+ if (filelist == NULL) {
+ return;
+ }
+
+ p_pos->x += filelist->field_0x14;
+ p_pos->z += filelist->field_0x18;
}
-#pragma pop
/* 8003EDEC-8003EE5C 03972C 0070+00 3/3 0/0 0/0 .text
* rotAngle__10dMapInfo_nFPC21dStage_FileList2_dt_cP3Vec */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMapInfo_n::rotAngle(dStage_FileList2_dt_c const* param_0, Vec* param_1) {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/rotAngle__10dMapInfo_nFPC21dStage_FileList2_dt_cP3Vec.s"
+void dMapInfo_n::rotAngle(dStage_FileList2_dt_c const* filelist, Vec* p_pos) {
+ s16 rot = 0;
+
+ if (filelist != NULL) {
+ rot = filelist->field_0x1c;
+ }
+ mDoMtx_stack_c::YrotS(rot);
+
+ Vec mult;
+ mDoMtx_stack_c::multVec(p_pos, &mult);
+
+ *p_pos = mult;
}
-#pragma pop
/* ############################################################################################## */
/* 80451E28-80451E2C 000428 0004+00 6/6 0/0 0/0 .sdata2 @3796 */
@@ -262,6 +247,30 @@ SECTION_SDATA2 static u8 lit_3796[4] = {
};
/* 8003EE5C-8003EF20 03979C 00C4+00 1/1 6/6 0/0 .text getMapPlayerPos__10dMapInfo_nFv */
+// stayNo / mStatus loads switched
+#ifdef NONMATCHING
+Vec dMapInfo_n::getMapPlayerPos() {
+ Vec pos;
+ fopAc_ac_c* player = daPy_getPlayerActorClass();
+ if (player != NULL) {
+ pos = player->mCurrent.mPosition;
+ } else {
+ f32 tmp = FLOAT_LABEL(lit_3796);
+ pos.x = tmp;
+ pos.y = tmp;
+ pos.z = tmp;
+ }
+
+ s8 stayNo = dComIfGp_roomControl_getStayNo();
+ dStage_FileList2_dt_c* fileList2_p = dStage_roomControl_c::getFileList2(stayNo);
+ if (fileList2_p != NULL) {
+ rotAngle(fileList2_p, &pos);
+ offsetPlus(fileList2_p, &pos);
+ }
+
+ return pos;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -270,6 +279,7 @@ asm Vec dMapInfo_n::getMapPlayerPos() {
#include "asm/d/map/d_map_path_dmap/getMapPlayerPos__10dMapInfo_nFv.s"
}
#pragma pop
+#endif
/* 8003EF20-8003EF70 039860 0050+00 1/1 1/1 0/0 .text getMapPlayerAngleY__10dMapInfo_nFv
*/