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.cpp1366
1 files changed, 800 insertions, 566 deletions
diff --git a/src/d/map/d_map_path_dmap.cpp b/src/d/map/d_map_path_dmap.cpp
index 4b3aaaa8c7..f95e1b9f9c 100644
--- a/src/d/map/d_map_path_dmap.cpp
+++ b/src/d/map/d_map_path_dmap.cpp
@@ -1,33 +1,15 @@
-//
-// Generated By: dol2asm
-// Translation Unit: d/map/d_map_path_dmap
-//
+/**
+ * d_map_path_dmap.cpp
+ *
+ */
#include "d/map/d_map_path_dmap.h"
-#include "d/map/d_map_path.h"
+#include "MSL_C/math.h"
#include "d/com/d_com_inf_game.h"
+#include "d/map/d_map_path.h"
#include "d/meter/d_meter_HIO.h"
#include "dol2asm.h"
-#include "dolphin/types.h"
#include "m_Do/m_Do_mtx.h"
-#include "MSL_C/math.h"
-
-//
-// Types:
-//
-
-struct dMapInfo_c {
- /* 8003F40C */ void calcFloorNo(f32, bool, int);
- /* 8003F570 */ void calcNowStayFloorNo(f32, bool);
- /* 8003F6C8 */ void move(int, f32);
- /* 8003F6FC */ void init();
- /* 8003F714 */ void reset();
- /* 8003F734 */ void create();
- /* 8003F754 */ void remove();
-
- static u32 mNextRoomNo;
- static u8 mNowStayRoomNo[4];
-};
//
// Forward References:
@@ -105,7 +87,10 @@ extern "C" extern void* __vt__28renderingPlusDoorAndCursor_c[47];
extern "C" extern void* __vt__16renderingDAmap_c[38];
extern "C" u32 mNextRoomNo__10dMapInfo_c;
extern "C" u8 mNowStayRoomNo__10dMapInfo_c[4];
+extern "C" u8 mNowStayFloorNoDecisionFlg__10dMapInfo_c[4];
+extern "C" u8 mNowStayFloorNo__10dMapInfo_c[4];
extern "C" u8 mLayerList__8dMpath_c[4];
+extern "C" u8 mBottomFloorNo__8dMpath_c;
extern "C" f32 mMinX__8dMpath_c;
extern "C" f32 mMaxX__8dMpath_c;
extern "C" f32 mMinZ__8dMpath_c;
@@ -193,29 +178,29 @@ bool dMapInfo_n::isVisitedRoom(int i_roomNo) {
}
/* 8003ED60-8003EDC0 0396A0 0060+00 1/1 2/2 0/0 .text correctionOriginPos__10dMapInfo_nFScP3Vec */
-void dMapInfo_n::correctionOriginPos(s8 i_roomNo, Vec* pos_p) {
+void dMapInfo_n::correctionOriginPos(s8 i_roomNo, Vec* o_pos) {
dStage_FileList2_dt_c* filelist = dStage_roomControl_c::getFileList2(i_roomNo);
- if (pos_p != NULL) {
- rotAngle(filelist, pos_p);
- offsetPlus(filelist, pos_p);
+ if (o_pos != NULL) {
+ rotAngle(filelist, o_pos);
+ offsetPlus(filelist, o_pos);
}
}
/* 8003EDC0-8003EDEC 039700 002C+00 3/3 0/0 0/0 .text
* offsetPlus__10dMapInfo_nFPC21dStage_FileList2_dt_cP3Vec */
-void dMapInfo_n::offsetPlus(dStage_FileList2_dt_c const* filelist, Vec* p_pos) {
+void dMapInfo_n::offsetPlus(dStage_FileList2_dt_c const* filelist, Vec* o_pos) {
if (filelist == NULL) {
return;
}
- p_pos->x += filelist->field_0x14;
- p_pos->z += filelist->field_0x18;
+ o_pos->x += filelist->field_0x14;
+ o_pos->z += filelist->field_0x18;
}
/* 8003EDEC-8003EE5C 03972C 0070+00 3/3 0/0 0/0 .text
* rotAngle__10dMapInfo_nFPC21dStage_FileList2_dt_cP3Vec */
-void dMapInfo_n::rotAngle(dStage_FileList2_dt_c const* filelist, Vec* p_pos) {
+void dMapInfo_n::rotAngle(dStage_FileList2_dt_c const* filelist, Vec* o_pos) {
s16 rot = 0;
if (filelist != NULL) {
@@ -224,36 +209,24 @@ void dMapInfo_n::rotAngle(dStage_FileList2_dt_c const* filelist, Vec* p_pos) {
mDoMtx_stack_c::YrotS(rot);
Vec mult;
- mDoMtx_stack_c::multVec(p_pos, &mult);
+ mDoMtx_stack_c::multVec(o_pos, &mult);
- *p_pos = mult;
+ *o_pos = mult;
}
-/* ############################################################################################## */
-/* 80451E28-80451E2C 000428 0004+00 6/6 0/0 0/0 .sdata2 @3796 */
-SECTION_SDATA2 static u8 lit_3796[4] = {
- 0x00,
- 0x00,
- 0x00,
- 0x00,
-};
-
/* 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->current.pos;
} else {
- f32 tmp = FLOAT_LABEL(lit_3796);
- pos.x = tmp;
- pos.y = tmp;
- pos.z = tmp;
+ pos.x = 0.0f;
+ pos.y = 0.0f;
+ pos.z = 0.0f;
}
- s8 stayNo = dComIfGp_roomControl_getStayNo();
+ s32 stayNo = dComIfGp_roomControl_getStayNo();
dStage_FileList2_dt_c* fileList2_p = dStage_roomControl_c::getFileList2(stayNo);
if (fileList2_p != NULL) {
rotAngle(fileList2_p, &pos);
@@ -262,195 +235,313 @@ Vec dMapInfo_n::getMapPlayerPos() {
return pos;
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm Vec dMapInfo_n::getMapPlayerPos() {
- nofralloc
-#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
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMapInfo_n::getMapPlayerAngleY() {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/getMapPlayerAngleY__10dMapInfo_nFv.s"
+s16 dMapInfo_n::getMapPlayerAngleY() {
+ s32 stayNo = dComIfGp_roomControl_getStayNo();
+ s16 angle = 0;
+
+ daPy_py_c* player = daPy_getPlayerActorClass();
+ if (player != NULL) {
+ angle = player->shape_angle.y;
+ }
+
+ dStage_FileList2_dt_c* fileList2_p = dStage_roomControl_c::getFileList2(stayNo);
+ if (fileList2_p != NULL) {
+ angle += fileList2_p->field_0x1c;
+ }
+
+ return angle;
}
-#pragma pop
/* 8003EF70-8003F02C 0398B0 00BC+00 2/2 0/0 0/0 .text getConstRestartIconPointer__10dMapInfo_nFv
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMapInfo_n::getConstRestartIconPointer() {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/getConstRestartIconPointer__10dMapInfo_nFv.s"
+const dTres_c::typeGroupData_c* dMapInfo_n::getConstRestartIconPointer() {
+ int group_num = dTres_c::getTypeGroupNumber(7);
+ const dTres_c::typeGroupData_c* group_data = dTres_c::getFirstData(7);
+
+ for (int i = 0; i < group_num && group_data != NULL; i++) {
+ if (group_data->getRoomNo() == dComIfGs_getRestartRoomNo()) {
+ if (group_data->getSwBit() == 0xFF) {
+ break;
+ }
+
+ if (group_data->getSwBit() != 0xFF) {
+ if (dComIfGs_isSwitch(group_data->getSwBit(), group_data->getRoomNo())) {
+ break;
+ }
+ }
+ }
+
+ group_data = dTres_c::getNextData(group_data);
+ }
+
+ return group_data;
}
-#pragma pop
/* 8003F02C-8003F0F8 03996C 00CC+00 1/1 2/2 0/0 .text getMapRestartPos__10dMapInfo_nFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMapInfo_n::getMapRestartPos() {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/getMapRestartPos__10dMapInfo_nFv.s"
+Vec dMapInfo_n::getMapRestartPos() {
+ Vec pos;
+ const dTres_c::typeGroupData_c* icon_data = getConstRestartIconPointer();
+
+ if (icon_data != NULL) {
+ pos = *icon_data->getPos();
+ } else {
+ pos = dComIfGs_getRestartRoomPos();
+ }
+
+ s32 roomNo = dComIfGs_getRestartRoomNo();
+ dStage_FileList2_dt_c* fileList2_p = dStage_roomControl_c::getFileList2(roomNo);
+ rotAngle(fileList2_p, &pos);
+ offsetPlus(fileList2_p, &pos);
+ return pos;
}
-#pragma pop
/* 8003F0F8-8003F19C 039A38 00A4+00 1/1 1/1 0/0 .text getMapRestartAngleY__10dMapInfo_nFv
*/
+// small regalloc
+#ifdef NONMATCHING
+s16 dMapInfo_n::getMapRestartAngleY() {
+ int angle = dComIfGs_getRestartRoomAngleY();
+
+ const dTres_c::typeGroupData_c* icon_data = getConstRestartIconPointer();
+ if (icon_data != NULL) {
+ int icon_angle = icon_data->getAngleY();
+ bool tmp = icon_angle > 0;
+
+ if (tmp) {
+ icon_angle = -icon_angle;
+ }
+
+ angle = icon_angle * 0x0100;
+ if (tmp) {
+ angle = icon_angle * -0x0100;
+ }
+ }
+
+ s32 roomNo = dComIfGs_getRestartRoomNo();
+ dStage_FileList2_dt_c* fileList2_p = dStage_roomControl_c::getFileList2(roomNo);
+ if (fileList2_p != NULL) {
+ angle += fileList2_p->field_0x1c;
+ }
+
+ return angle;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void dMapInfo_n::getMapRestartAngleY() {
+asm s16 dMapInfo_n::getMapRestartAngleY() {
nofralloc
#include "asm/d/map/d_map_path_dmap/getMapRestartAngleY__10dMapInfo_nFv.s"
}
#pragma pop
-
-/* ############################################################################################## */
-/* 80451E2C-80451E30 00042C 0004+00 4/4 0/0 0/0 .sdata2 @3887 */
-SECTION_SDATA2 static f32 lit_3887 = 0.5f;
+#endif
/* 8003F19C-8003F1F4 039ADC 0058+00 0/0 1/1 0/0 .text getRoomCenter__10dMapInfo_nFiPfPf
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMapInfo_n::getRoomCenter(int param_0, f32* param_1, f32* param_2) {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/getRoomCenter__10dMapInfo_nFiPfPf.s"
+void dMapInfo_n::getRoomCenter(int i_roomNo, f32* i_roomCenterX, f32* i_roomCenterZ) {
+ dStage_FileList2_dt_c* fileList2_p = dStage_roomControl_c::getFileList2(i_roomNo);
+
+ if (i_roomCenterX != NULL) {
+ *i_roomCenterX = (dStage_FileList2_dt_GetRightRmX(fileList2_p) +
+ dStage_FileList2_dt_GetLeftRmX(fileList2_p)) *
+ 0.5f;
+ }
+
+ if (i_roomCenterZ != NULL) {
+ *i_roomCenterZ = (dStage_FileList2_dt_GetFrontRmZ(fileList2_p) +
+ dStage_FileList2_dt_GetInnerRmZ(fileList2_p)) *
+ 0.5f;
+ }
}
-#pragma pop
/* 8003F1F4-8003F24C 039B34 0058+00 1/1 2/2 0/0 .text getRoomMinMaxXZ__10dMapInfo_nFiPfPfPfPf */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMapInfo_n::getRoomMinMaxXZ(int param_0, f32* param_1, f32* param_2, f32* param_3,
- f32* param_4) {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/getRoomMinMaxXZ__10dMapInfo_nFiPfPfPfPf.s"
-}
-#pragma pop
+void dMapInfo_n::getRoomMinMaxXZ(int i_roomNo, f32* i_roomLeftX, f32* i_roomInnerZ,
+ f32* i_roomRightX, f32* i_roomFrontZ) {
+ dStage_FileList2_dt_c* fileList2_p = dStage_roomControl_c::getFileList2(i_roomNo);
-/* ############################################################################################## */
-/* 80451E30-80451E38 000430 0008+00 1/1 0/0 0/0 .sdata2 @3957 */
-SECTION_SDATA2 static f64 lit_3957 = 4503601774854144.0 /* cast s32 to float */;
+ if (i_roomLeftX != NULL) {
+ *i_roomLeftX = dStage_FileList2_dt_GetLeftRmX(fileList2_p);
+ }
+
+ if (i_roomRightX != NULL) {
+ *i_roomRightX = dStage_FileList2_dt_GetRightRmX(fileList2_p);
+ }
+
+ if (i_roomInnerZ != NULL) {
+ *i_roomInnerZ = dStage_FileList2_dt_GetInnerRmZ(fileList2_p);
+ }
+
+ if (i_roomFrontZ != NULL) {
+ *i_roomFrontZ = dStage_FileList2_dt_GetFrontRmZ(fileList2_p);
+ }
+}
/* 8003F24C-8003F40C 039B8C 01C0+00 2/2 0/0 0/0 .text getFloorParameter__10dMapInfo_nFfPScPfPfPfPf
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMapInfo_n::getFloorParameter(f32 param_0, s8* param_1, f32* param_2, f32* param_3,
- f32* param_4, f32* param_5) {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/getFloorParameter__10dMapInfo_nFfPScPfPfPfPf.s"
+void dMapInfo_n::getFloorParameter(f32 param_0, s8* i_floorNo, f32* param_2, f32* param_3,
+ f32* param_4, f32* param_5) {
+ f32 gap_level = dStage_stagInfo_GetGapLevel(dComIfGp_getStageStagInfo());
+ f32 range_up = fabsf(dStage_stagInfo_GetRangeUp(dComIfGp_getStageStagInfo()));
+ f32 range_down = fabsf(dStage_stagInfo_GetRangeDown(dComIfGp_getStageStagInfo()));
+ s8 floorNo = (f32)floor(param_0 / gap_level);
+
+ if (i_floorNo != NULL) {
+ *i_floorNo = floorNo;
+ }
+
+ f32 fvar1 = floorNo * gap_level;
+ if (param_2 != NULL) {
+ *param_2 = fvar1;
+ }
+
+ if (param_3 != NULL) {
+ *param_3 = fvar1 + range_up;
+ }
+
+ if (param_4 != NULL) {
+ *param_4 = (fvar1 + gap_level) - range_down;
+ }
+
+ if (param_5 != NULL) {
+ *param_5 = gap_level;
+ }
}
-#pragma pop
/* ############################################################################################## */
/* 80450E58-80450E5C 000358 0004+00 4/4 3/3 0/0 .sbss None */
-extern u8 data_80450E58[4];
-u8 data_80450E58[4];
+s8 dMapInfo_c::mNowStayFloorNo;
/* 80450E5C-80450E60 00035C 0004+00 4/4 0/0 0/0 .sbss mNowStayRoomNo__10dMapInfo_c */
-u8 dMapInfo_c::mNowStayRoomNo[4];
+int dMapInfo_c::mNowStayRoomNo;
/* 80450E60-80450E64 000360 0004+00 4/4 3/3 0/0 .sbss None */
-extern u8 data_80450E60[4];
-u8 data_80450E60[4];
+u8 dMapInfo_c::mNowStayFloorNoDecisionFlg;
/* 8003F40C-8003F570 039D4C 0164+00 2/2 1/1 0/0 .text calcFloorNo__10dMapInfo_cFfbi */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMapInfo_c::calcFloorNo(f32 param_0, bool param_1, int param_2) {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/calcFloorNo__10dMapInfo_cFfbi.s"
+s8 dMapInfo_c::calcFloorNo(f32 param_0, bool i_chkMinMax, int i_roomNo) {
+ f32 sp10;
+ f32 spC;
+ s8 floorNo;
+ dMapInfo_n::getFloorParameter(param_0, &floorNo, NULL, &sp10, &spC, NULL);
+
+ if (param_0 < sp10) {
+ if (param_0 >= spC) {
+ if (i_roomNo == mNowStayRoomNo && mNowStayFloorNoDecisionFlg &&
+ (mNowStayFloorNo == floorNo || mNowStayFloorNo == floorNo + 1))
+ {
+ floorNo = mNowStayFloorNo;
+ } else if (param_0 >= 0.5f * (spC + sp10)) {
+ floorNo++;
+ }
+ }
+ } else {
+ floorNo++;
+ }
+
+ if (i_chkMinMax && i_roomNo >= 0 && i_roomNo < 64) {
+ dStage_FileList2_dt_c* fileList2_p = dStage_roomControl_c::getFileList2(i_roomNo);
+ if (fileList2_p != NULL) {
+ s8 min_floorNo = dStage_FileList2_dt_GetMinFloorNo(fileList2_p);
+ s8 max_floorNo = dStage_FileList2_dt_GetMaxFloorNo(fileList2_p);
+
+ if (floorNo < min_floorNo) {
+ floorNo = min_floorNo;
+ }
+
+ if (floorNo > max_floorNo) {
+ floorNo = max_floorNo;
+ }
+ }
+ }
+
+ return floorNo;
}
-#pragma pop
/* 8003F570-8003F6C8 039EB0 0158+00 1/1 1/1 0/0 .text calcNowStayFloorNo__10dMapInfo_cFfb
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMapInfo_c::calcNowStayFloorNo(f32 param_0, bool param_1) {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/calcNowStayFloorNo__10dMapInfo_cFfb.s"
+s8 dMapInfo_c::calcNowStayFloorNo(f32 param_0, bool i_chkMinMax) {
+ f32 sp10;
+ f32 spC;
+ s8 floorNo;
+ dMapInfo_n::getFloorParameter(param_0, &floorNo, NULL, &sp10, &spC, NULL);
+
+ if (mNowStayFloorNoDecisionFlg) {
+ if (param_0 < sp10) {
+ if (param_0 >= spC && (mNowStayFloorNo == floorNo || mNowStayFloorNo == floorNo + 1)) {
+ floorNo = mNowStayFloorNo;
+ }
+ } else {
+ floorNo++;
+ }
+ } else if (param_0 >= 0.5f * (spC + sp10)) {
+ floorNo++;
+ }
+
+ if (i_chkMinMax && mNowStayRoomNo >= 0 && mNowStayRoomNo < 64) {
+ dStage_FileList2_dt_c* fileList2_p = dStage_roomControl_c::getFileList2(mNowStayRoomNo);
+ if (fileList2_p != NULL) {
+ s8 min_floorNo = dStage_FileList2_dt_GetMinFloorNo(fileList2_p);
+ s8 max_floorNo = dStage_FileList2_dt_GetMaxFloorNo(fileList2_p);
+
+ if (floorNo < min_floorNo) {
+ floorNo = min_floorNo;
+ }
+
+ if (floorNo > max_floorNo) {
+ floorNo = max_floorNo;
+ }
+ }
+ }
+
+ return floorNo;
}
-#pragma pop
/* 8003F6C8-8003F6FC 03A008 0034+00 0/0 1/1 0/0 .text move__10dMapInfo_cFif */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMapInfo_c::move(int param_0, f32 param_1) {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/move__10dMapInfo_cFif.s"
+void dMapInfo_c::move(int i_roomNo, f32 param_1) {
+ mNowStayRoomNo = i_roomNo;
+ mNowStayFloorNo = calcNowStayFloorNo(param_1, true);
+ mNowStayFloorNoDecisionFlg = true;
}
-#pragma pop
/* 8003F6FC-8003F714 03A03C 0018+00 2/2 0/0 0/0 .text init__10dMapInfo_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMapInfo_c::init() {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/init__10dMapInfo_cFv.s"
+void dMapInfo_c::init() {
+ mNowStayFloorNo = 0;
+ mNowStayFloorNoDecisionFlg = false;
+ mNowStayRoomNo = -1;
}
-#pragma pop
/* 8003F714-8003F734 03A054 0020+00 1/1 0/0 0/0 .text reset__10dMapInfo_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMapInfo_c::reset() {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/reset__10dMapInfo_cFv.s"
+void dMapInfo_c::reset() {
+ init();
}
-#pragma pop
/* 8003F734-8003F754 03A074 0020+00 1/1 0/0 0/0 .text create__10dMapInfo_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMapInfo_c::create() {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/create__10dMapInfo_cFv.s"
+void dMapInfo_c::create() {
+ init();
}
-#pragma pop
/* 8003F754-8003F758 03A094 0004+00 1/1 0/0 0/0 .text remove__10dMapInfo_cFv */
-void dMapInfo_c::remove() {
- /* empty function */
-}
+void dMapInfo_c::remove() {}
/* ############################################################################################## */
/* 80450E64-80450E68 000364 0004+00 5/5 1/1 0/0 .sbss mLayerList__8dMpath_c */
-u8 dMpath_c::mLayerList[4];
+dDrawPath_c::room_class** dMpath_c::mLayerList;
/* 80450E68-80450E6C 000368 0004+00 3/3 1/1 0/0 .sbss mMinX__8dMpath_c */
-f32 dMpath_c::mMinX;
+// these are needed for sinit, but its got reversed reg alloc?
+f32 dMpath_c::mMinX /* = __float_max[0] */;
/* 80450E6C-80450E70 00036C 0004+00 3/3 1/1 0/0 .sbss mMaxX__8dMpath_c */
-f32 dMpath_c::mMaxX;
+f32 dMpath_c::mMaxX /* = -__float_max[0] */;
/* 80450E70-80450E74 000370 0004+00 3/3 2/2 0/0 .sbss mMinZ__8dMpath_c */
-f32 dMpath_c::mMinZ;
+f32 dMpath_c::mMinZ /* = __float_max[0] */;
/* 80450E74-80450E78 000374 0004+00 3/3 1/1 0/0 .sbss mMaxZ__8dMpath_c */
-f32 dMpath_c::mMaxZ;
+f32 dMpath_c::mMaxZ /* = -__float_max[0] */;
/* 80450E78-80450E7C 000378 0004+00 1/1 2/2 0/0 .sbss mAllCenterX__8dMpath_c */
f32 dMpath_c::mAllCenterX;
@@ -465,34 +556,45 @@ f32 dMpath_c::mAllSizeX;
f32 dMpath_c::mAllSizeZ;
/* 80450E88-80450E90 000388 0008+00 4/3 0/0 0/0 .sbss None */
-static u8 data_80450E88[8];
+static bool data_80450E88;
/* 8003F758-8003F760 -00001 0008+00 0/0 0/0 0/0 .text isExistMapPathData__8dMpath_cFv */
-u8 dMpath_c::isExistMapPathData() {
- return *(u8*)(&data_80450E88);
+bool dMpath_c::isExistMapPathData() {
+ return data_80450E88;
}
/* ############################################################################################## */
/* 80450630-80450634 0000B0 0004+00 0/0 1/1 2/2 .sdata mNextRoomNo__10dMapInfo_c */
-SECTION_SDATA u32 dMapInfo_c::mNextRoomNo = 0xFFFFFFFF;
+SECTION_SDATA int dMapInfo_c::mNextRoomNo = -1;
-/* 80450634-80450636 -00001 0002+00 3/3 0/0 0/0 .sdata None */
-SECTION_SDATA static u8 struct_80450634[2] = {
- /* 80450634 0001+00 data_80450634 None */
- 0x7F,
- /* 80450635 0001+00 data_80450635 None */
- 0x80,
-};
+/* 80450634 0001+00 data_80450634 None */
+s8 dMpath_c::mBottomFloorNo = 127;
+
+/* 80450635 0001+00 data_80450635 None */
+s8 dMpath_c::mTopFloorNo = 128;
/* 8003F760-8003F7E8 03A0A0 0088+00 0/0 1/1 0/0 .text getTopBottomFloorNo__8dMpath_cFPScPSc */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMpath_c::getTopBottomFloorNo(s8* param_0, s8* param_1) {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/getTopBottomFloorNo__8dMpath_cFPScPSc.s"
+int dMpath_c::getTopBottomFloorNo(s8* i_topFloorNo, s8* i_bottomFloorNo) {
+ if (isExistMapPathData()) {
+ if (i_topFloorNo != NULL) {
+ *i_topFloorNo = mTopFloorNo;
+ }
+
+ if (i_bottomFloorNo != NULL) {
+ *i_bottomFloorNo = mBottomFloorNo;
+ }
+ } else {
+ if (i_topFloorNo != NULL) {
+ *i_topFloorNo = 0;
+ }
+
+ if (i_bottomFloorNo != NULL) {
+ *i_bottomFloorNo = 0;
+ }
+ }
+
+ return 1;
}
-#pragma pop
/* 8003F7E8-8003F810 03A128 0028+00 0/0 1/1 0/0 .text createWork__8dMpath_cFv */
#pragma push
@@ -515,29 +617,72 @@ asm void dMpath_c::setPointer(dDrawPath_c::room_class* param_0, s8* param_1, s8*
}
#pragma pop
+struct map_path_class {
+ int field_0x0;
+ dDrawPath_c::room_class* field_0x4;
+};
+
/* 8003FA40-8003FB70 03A380 0130+00 0/0 2/2 0/0 .text setPointer__8dMpath_cFScPvi */
#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMpath_c::setPointer(s8 param_0, void* param_1, int param_2) {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/setPointer__8dMpath_cFScPvi.s"
+#pragma optimization_level 2
+void dMpath_c::setPointer(s8 i_roomNo, void* i_data, int i_mapLayerNo) {
+ s32 roomNo;
+ dDrawPath_c::room_class* room = ((map_path_class*)i_data)->field_0x4;
+
+ if (room != NULL) {
+ roomNo = i_roomNo;
+
+ reset();
+ data_80450E88 = true;
+ setPointer(room, &mBottomFloorNo, &mTopFloorNo);
+
+ f32 minX = 0.0f;
+ f32 maxX = 0.0f;
+ f32 minZ = 0.0f;
+ f32 maxZ = 0.0f;
+ dMapInfo_n::getRoomMinMaxXZ(roomNo, &minX, &minZ, &maxX, &maxZ);
+
+ if (minX < mMinX) {
+ mMinX = minX;
+ }
+
+ if (maxX > mMaxX) {
+ mMaxX = maxX;
+ }
+
+ if (minZ < mMinZ) {
+ mMinZ = minZ;
+ }
+
+ if (maxZ > mMaxZ) {
+ mMaxZ = maxZ;
+ }
+
+ mAllCenterX = (mMaxX + mMinX) * 0.5f;
+ mAllCenterZ = (mMaxZ + mMinZ) * 0.5f;
+ mAllSizeX = mMaxX - mMinX;
+ mAllSizeZ = mMaxZ - mMinZ;
+
+ (mLayerList + i_mapLayerNo * 0x40)[(s8)i_roomNo] = room;
+ }
}
#pragma pop
/* 8003FB70-8003FBD0 03A4B0 0060+00 0/0 1/1 0/0 .text create__8dMpath_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMpath_c::create() {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/create__8dMpath_cFv.s"
+void dMpath_c::create() {
+ stage_stag_info_class* p_stag = i_dComIfGp_getStage()->getStagInfo();
+ if (dStage_stagInfo_GetSTType(p_stag) != ST_BOSS_ROOM) {
+ reset();
+ data_80450E88 = false;
+ }
+
+ dMpath_n::m_texObjAgg.create();
+ dMapInfo_c::create();
}
-#pragma pop
/* ############################################################################################## */
/* 80450636-80450638 0000B6 0002+00 2/2 0/0 0/0 .sdata None */
-SECTION_SDATA static u16 data_80450636 = 0x0100;
+SECTION_SDATA static u8 data_80450636 = 0x01;
/* 8003FBD0-8003FC70 03A510 00A0+00 2/2 0/0 0/0 .text reset__8dMpath_cFv */
#pragma push
@@ -550,187 +695,204 @@ asm void dMpath_c::reset() {
#pragma pop
/* 8003FC70-8003FCA4 03A5B0 0034+00 0/0 1/1 0/0 .text remove__8dMpath_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMpath_c::remove() {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/remove__8dMpath_cFv.s"
+void dMpath_c::remove() {
+ data_80450636 = 1;
+ dMpath_n::m_texObjAgg.remove();
+ dMapInfo_c::remove();
}
-#pragma pop
/* 8003FCA4-8003FCC8 03A5E4 0024+00 2/2 0/0 0/0 .text
* calcFloorNoForObjectByMapPathRend__16renderingDAmap_cCFfi */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void renderingDAmap_c::calcFloorNoForObjectByMapPathRend(f32 param_0, int param_1) const {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/calcFloorNoForObjectByMapPathRend__16renderingDAmap_cCFfi.s"
+s8 renderingDAmap_c::calcFloorNoForObjectByMapPathRend(f32 param_0, int i_roomNo) const {
+ return dMapInfo_c::calcFloorNo(param_0, true, i_roomNo);
}
-#pragma pop
-
-/* ############################################################################################## */
-/* 80451E38-80451E40 000438 0004+04 3/3 0/0 0/0 .sdata2 @4202 */
-SECTION_SDATA2 static f32 lit_4202[1 + 1 /* padding */] = {
- 1.0f,
- /* padding */
- 0.0f,
-};
/* 8003FCC8-8003FD08 03A608 0040+00 0/0 2/2 0/0 .text init__16renderingDAmap_cFPUcUsUsUsUs */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void renderingDAmap_c::init(u8* param_0, u16 param_1, u16 param_2, u16 param_3, u16 param_4) {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/init__16renderingDAmap_cFPUcUsUsUsUs.s"
+void renderingDAmap_c::init(u8* param_0, u16 param_1, u16 param_2, u16 param_3, u16 param_4) {
+ mIsDraw = false;
+ field_0x4 = param_0;
+ field_0x1c = param_1;
+ field_0x1e = param_2;
+ field_0x20 = param_3;
+ field_0x22 = param_4;
+
+ field_0x10 = 0.0f;
+ field_0x14 = 0.0f;
+ field_0x8 = 1.0f;
+ field_0xc = 1.0f;
+ mRoomNoSingle = 0;
+ mRenderedFloor = 0;
}
-#pragma pop
-
-/* ############################################################################################## */
-/* 80451E40-80451E48 000440 0008+00 2/2 0/0 0/0 .sdata2 @4211 */
-SECTION_SDATA2 static f64 lit_4211 = 4503599627370496.0 /* cast u32 to float */;
/* 8003FD08-8003FD9C 03A648 0094+00 0/0 2/2 0/0 .text entry__16renderingDAmap_cFfffiSc */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void renderingDAmap_c::entry(f32 param_0, f32 param_1, f32 param_2, int param_3, s8 param_4) {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/entry__16renderingDAmap_cFfffiSc.s"
+void renderingDAmap_c::entry(f32 param_0, f32 param_1, f32 i_cmPerTexel, int i_roomNoSingle,
+ s8 param_4) {
+ field_0x10 = param_0;
+ field_0x14 = param_1;
+ mCmPerTexel = i_cmPerTexel;
+ field_0x8 = mCmPerTexel * field_0x20;
+ field_0xc = mCmPerTexel * field_0x22;
+ mRoomNoSingle = i_roomNoSingle;
+ mRenderedFloor = param_4;
+ dComIfGd_setCopy2D(this);
}
-#pragma pop
/* 8003FD9C-8003FE18 03A6DC 007C+00 3/0 3/0 0/0 .text
* isSwitch__16renderingDAmap_cFPCQ211dDrawPath_c11group_class */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm bool renderingDAmap_c::isSwitch(dDrawPath_c::group_class const* param_0) {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/isSwitch__16renderingDAmap_cFPCQ211dDrawPath_c11group_class.s"
+bool renderingDAmap_c::isSwitch(dDrawPath_c::group_class const* i_group) {
+ if (i_group->field_0x0 == 0xFF) {
+ return true;
+ } else if (i_group->field_0x1 == 0) {
+ return dComIfGs_isSwitch(i_group->field_0x0, mRoomNo) == false;
+ } else {
+ return dComIfGs_isSwitch(i_group->field_0x0, mRoomNo) != false;
+ }
}
-#pragma pop
/* 8003FE18-8003FE4C 03A758 0034+00 3/0 2/1 0/0 .text draw__16renderingDAmap_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void renderingDAmap_c::draw() {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/draw__16renderingDAmap_cFv.s"
+void renderingDAmap_c::draw() {
+ renderingMap();
+ mIsDraw = true;
}
-#pragma pop
/* ############################################################################################## */
/* 80451E48-80451E4C 000448 0004+00 1/1 0/0 0/0 .sdata2 l_mapBaseColor$4239 */
-SECTION_SDATA2 static u8 l_mapBaseColor[4] = {
- 0x04,
- 0x00,
- 0x00,
- 0x00,
-};
+SECTION_SDATA2 static GXColor l_mapBaseColor = {4, 0, 0, 0};
/* 8003FE4C-8003FE54 03A78C 0008+00 3/0 3/0 0/0 .text getBackColor__16renderingDAmap_cCFv
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm GXColor* renderingDAmap_c::getBackColor() const {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/getBackColor__16renderingDAmap_cCFv.s"
+GXColor* renderingDAmap_c::getBackColor() const {
+ return &l_mapBaseColor;
}
-#pragma pop
/* 8003FE54-8003FE6C 03A794 0018+00 3/0 3/0 0/0 .text isRenderingFloor__16renderingDAmap_cFi */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm bool renderingDAmap_c::isRenderingFloor(int param_0) {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/isRenderingFloor__16renderingDAmap_cFi.s"
+bool renderingDAmap_c::isRenderingFloor(int i_floorNo) {
+ return i_floorNo == mRenderedFloor;
}
-#pragma pop
/* 8003FE6C-8003FE70 03A7AC 0004+00 2/2 0/0 0/0 .text setSingleRoomSetting__16renderingDAmap_cFv
*/
-void renderingDAmap_c::setSingleRoomSetting() {
- /* empty function */
-}
+void renderingDAmap_c::setSingleRoomSetting() {}
/* 8003FE70-8003FF14 03A7B0 00A4+00 3/0 3/1 0/0 .text isDrawRoom__16renderingDAmap_cCFii
*/
+// regalloc. probably supposed to be a one liner or some kind of ternary
+#ifdef NONMATCHING
+bool renderingDAmap_c::isDrawRoom(int param_0, int param_1) const {
+ bool var_r31;
+ bool var_r30 = false;
+ if (hasMap() || param_0 == param_1) {
+ var_r30 = true;
+ }
+
+ if (isRendAllRoom()) {
+ var_r31 = false;
+ if (var_r30 || dMapInfo_n::isVisitedRoom(param_1)) {
+ var_r31 = true;
+ }
+
+ var_r30 = var_r31;
+ }
+
+ return var_r30;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void renderingDAmap_c::isDrawRoom(int param_0, int param_1) const {
+asm bool renderingDAmap_c::isDrawRoom(int param_0, int param_1) const {
nofralloc
#include "asm/d/map/d_map_path_dmap/isDrawRoom__16renderingDAmap_cCFii.s"
}
#pragma pop
+#endif
-/* ############################################################################################## */
-/* 80451E4C-80451E50 00044C 0004+00 1/1 0/0 0/0 .sdata2 @4264 */
-SECTION_SDATA2 static f32 lit_4264 = -5000.0f;
+/* 8003FF14-8003FFC4 03A854 00B0+00 3/0 3/0 0/0 .text preDrawPath__16renderingDAmap_cFv
+ */
+void renderingDAmap_c::preDrawPath() {
+ Mtx m;
+ Vec sp20;
+ Vec sp14;
+ Vec sp8;
-/* 80451E50-80451E54 000450 0004+00 1/1 0/0 0/0 .sdata2 @4265 */
-SECTION_SDATA2 static f32 lit_4265 = 5000.0f;
+ sp20.x = field_0x10;
+ sp20.y = field_0x14;
+ sp20.z = -5000.0f;
-/* 80451E54-80451E58 000454 0004+00 1/1 0/0 0/0 .sdata2 @4266 */
-SECTION_SDATA2 static f32 lit_4266 = -1.0f;
+ sp14.x = field_0x10;
+ sp14.y = field_0x14;
+ sp14.z = 5000.0f;
-/* 8003FF14-8003FFC4 03A854 00B0+00 3/0 3/0 0/0 .text preDrawPath__16renderingDAmap_cFv
- */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void renderingDAmap_c::preDrawPath() {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/preDrawPath__16renderingDAmap_cFv.s"
+ sp8.x = 0.0f;
+ sp8.y = -1.0f;
+ sp8.z = 0.0f;
+
+ mDoMtx_lookAt(m, &sp20, &sp14, &sp8, 0);
+ GXLoadPosMtxImm(m, GX_PNMTX0);
+ GXClearVtxDesc();
+ GXSetVtxDesc(GX_VA_POS, GX_INDEX16);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGB, GX_F32, 0);
+ GXSetMisc(1, 8);
}
-#pragma pop
/* 8003FFC4-8003FFEC 03A904 0028+00 3/0 3/0 0/0 .text postDrawPath__16renderingDAmap_cFv
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void renderingDAmap_c::postDrawPath() {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/postDrawPath__16renderingDAmap_cFv.s"
+void renderingDAmap_c::postDrawPath() {
+ GXSetMisc(1, 0);
}
-#pragma pop
/* 8003FFEC-8003FFF4 03A92C 0008+00 3/0 3/1 0/0 .text getRoomNoSingle__16renderingDAmap_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void renderingDAmap_c::getRoomNoSingle() {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/getRoomNoSingle__16renderingDAmap_cFv.s"
+int renderingDAmap_c::getRoomNoSingle() {
+ return mRoomNoSingle;
}
-#pragma pop
/* 8003FFF4-80040094 03A934 00A0+00 2/2 0/0 0/0 .text getFirstDrawRoomNo__16renderingDAmap_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void renderingDAmap_c::getFirstDrawRoomNo() {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/getFirstDrawRoomNo__16renderingDAmap_cFv.s"
+int renderingDAmap_c::getFirstDrawRoomNo() {
+ int roomNo = 0;
+
+ if (isRendAllRoom()) {
+ if (!isDrawRoom(0, mRoomNoSingle)) {
+ roomNo = getNextDrawRoomNo(0);
+ }
+ } else {
+ roomNo = getRoomNoSingle();
+ }
+
+ return roomNo;
}
-#pragma pop
/* 80040094-80040134 03A9D4 00A0+00 2/2 0/0 0/0 .text getNextDrawRoomNo__16renderingDAmap_cFi */
+// weird loop
+#ifdef NONMATCHING
+int renderingDAmap_c::getNextDrawRoomNo(int param_0) {
+ int i = param_0 + 1;
+
+ if (isRendAllRoom()) {
+ if (i >= 64) {
+ i = -1;
+ } else {
+ for (; i < 64; ++i) {
+ if (isDrawRoom(i, mRoomNoSingle)) {
+ return i;
+ }
+ }
+ }
+ } else {
+ i = -1;
+ }
+
+ return i;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void renderingDAmap_c::getNextDrawRoomNo(int param_0) {
+asm int renderingDAmap_c::getNextDrawRoomNo(int param_0) {
nofralloc
#include "asm/d/map/d_map_path_dmap/getNextDrawRoomNo__16renderingDAmap_cFi.s"
}
#pragma pop
+#endif
/* 80040134-800401E8 03AA74 00B4+00 3/0 3/0 0/0 .text getFirstRoomPointer__16renderingDAmap_cFv */
#pragma push
@@ -753,14 +915,9 @@ asm dDrawPath_c::room_class* renderingDAmap_c::getNextRoomPointer() {
#pragma pop
/* 800402C0-800402E0 03AC00 0020+00 3/0 3/0 0/0 .text isDrawPath__16renderingDAmap_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm bool renderingDAmap_c::isDrawPath() {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/isDrawPath__16renderingDAmap_cFv.s"
+bool renderingDAmap_c::isDrawPath() {
+ return dMpath_c::isExistMapPathData();
}
-#pragma pop
/* 800402E0-800402E8 03AC20 0008+00 3/0 3/0 0/0 .text getFirstDrawLayerNo__16renderingDAmap_cFv */
bool renderingDAmap_c::getFirstDrawLayerNo() {
@@ -768,70 +925,93 @@ bool renderingDAmap_c::getFirstDrawLayerNo() {
}
/* 800402E8-800402FC 03AC28 0014+00 3/0 3/0 0/0 .text getNextDrawLayerNo__16renderingDAmap_cFi */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void renderingDAmap_c::getNextDrawLayerNo(int param_0) {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/getNextDrawLayerNo__16renderingDAmap_cFi.s"
+int renderingDAmap_c::getNextDrawLayerNo(int param_0) {
+ int layerNo = param_0 + 1;
+ if (layerNo >= 2) {
+ layerNo = -1;
+ }
+
+ return layerNo;
}
-#pragma pop
/* 800402FC-80040518 03AC3C 021C+00 1/0 1/1 0/0 .text
* afterDrawPath__28renderingPlusDoorAndCursor_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void renderingPlusDoorAndCursor_c::afterDrawPath() {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/afterDrawPath__28renderingPlusDoorAndCursor_cFv.s"
+void renderingPlusDoorAndCursor_c::afterDrawPath() {
+ renderingPlusDoor_c::afterDrawPath();
+ bool check_floor = isCheckFloor();
+
+ if (isRendCursor() && isRendRestart()) {
+ bool tmp = true;
+
+ if (check_floor) {
+ s8 calc_floor = dMapInfo_c::calcFloorNo(dMapInfo_n::getMapRestartPos().y, true,
+ dComIfGs_getRestartRoomNo());
+ if (calc_floor != mRenderedFloor) {
+ tmp = false;
+ }
+ }
+
+ if (tmp) {
+ int tmp2 = 0x1F;
+ if (mRoomNoSingle != dComIfGs_getRestartRoomNo()) {
+ tmp2 = 0x20;
+ }
+
+ f32 cursor_size = getRestartCursorSize();
+ s16 angle_y = dMapInfo_n::getMapRestartAngleY();
+ drawCursor(dMapInfo_n::getMapRestartPos(), angle_y, tmp2, cursor_size);
+ }
+ }
+
+ if (mRoomNoSingle >= 0 && isRendIcon()) {
+ drawTreasure();
+ }
+
+ if (isRendCursor() && daPy_getPlayerActorClass() != NULL) {
+ f32 cursor_size = getPlayerCursorSize();
+ drawCursor(dMapInfo_n::getMapPlayerPos(), dMapInfo_n::getMapPlayerAngleY(), 0x1E,
+ cursor_size);
+ }
+
+ if (mRoomNoSingle >= 0 && isRendIcon()) {
+ drawTreasureAfterPlayer();
+ }
}
-#pragma pop
/* 80040518-80040574 03AE58 005C+00 2/1 1/1 0/0 .text afterDrawPath__19renderingPlusDoor_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void renderingPlusDoor_c::afterDrawPath() {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/afterDrawPath__19renderingPlusDoor_cFv.s"
+void renderingPlusDoor_c::afterDrawPath() {
+ if (mRoomNoSingle >= 0 && isRendDoor()) {
+ drawDoor1();
+ drawDoor2();
+ }
}
-#pragma pop
/* 80040574-800405B8 03AEB4 0044+00 1/1 0/0 0/0 .text drawDoor1__19renderingPlusDoor_cFv
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void renderingPlusDoor_c::drawDoor1() {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/drawDoor1__19renderingPlusDoor_cFv.s"
+void renderingPlusDoor_c::drawDoor1() {
+ dStage_KeepDoorInfo* door_info = dStage_GetKeepDoorInfo();
+ drawDoorCommon(door_info->unk_0x4, door_info->unk_0x0, true);
}
-#pragma pop
/* 800405B8-800405FC 03AEF8 0044+00 1/1 0/0 0/0 .text drawDoor2__19renderingPlusDoor_cFv
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void renderingPlusDoor_c::drawDoor2() {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/drawDoor2__19renderingPlusDoor_cFv.s"
+void renderingPlusDoor_c::drawDoor2() {
+ dStage_KeepDoorInfo* door_info = dStage_GetRoomKeepDoorInfo();
+ drawDoorCommon(door_info->unk_0x4, door_info->unk_0x0, false);
}
-#pragma pop
/* ############################################################################################## */
/* 80451E58-80451E5C 000458 0004+00 1/1 0/0 0/0 .sdata2 l_doorWhite */
-SECTION_SDATA2 static u32 l_doorWhite = 0x64000000;
+SECTION_SDATA2 static GXColor l_doorWhite = {100, 0, 0, 0};
/* 80451E5C-80451E60 00045C 0004+00 1/1 0/0 0/0 .sdata2 l_doorWhiteNoStay */
-SECTION_SDATA2 static u32 l_doorWhiteNoStay = 0x6C000000;
+SECTION_SDATA2 static GXColor l_doorWhiteNoStay = {108, 0, 0, 0};
/* 80451E60-80451E64 000460 0004+00 1/1 0/0 0/0 .sdata2 l_doorWhite2 */
-SECTION_SDATA2 static u32 l_doorWhite2 = 0x64000000;
+SECTION_SDATA2 static GXColor l_doorWhite2 = {100, 0, 0, 0};
/* 80451E64-80451E68 000464 0004+00 1/1 0/0 0/0 .sdata2 l_doorWhiteNoStay2 */
-SECTION_SDATA2 static u32 l_doorWhiteNoStay2 = 0x6C000000;
+SECTION_SDATA2 static GXColor l_doorWhiteNoStay2 = {108, 0, 0, 0};
/* 80451E68-80451E70 000468 0008+00 1/1 0/0 0/0 .sdata2 l_tex0$4406 */
SECTION_SDATA2 static u8 l_tex0[8] = {
@@ -840,168 +1020,175 @@ SECTION_SDATA2 static u8 l_tex0[8] = {
/* 800405FC-80040710 03AF3C 0114+00 2/2 0/0 0/0 .text
* drawDoorCommon__19renderingPlusDoor_cFPC21stage_tgsc_data_classib */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void renderingPlusDoor_c::drawDoorCommon(stage_tgsc_data_class const* param_0, int param_1,
- bool param_2) {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/drawDoorCommon__19renderingPlusDoor_cFPC21stage_tgsc_data_classib.s"
+void renderingPlusDoor_c::drawDoorCommon(stage_tgsc_data_class const* i_doorData, int i_dataNum,
+ bool param_2) {
+ int prm0;
+ int prm1;
+
+ GXClearVtxDesc();
+ GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
+ GXSetVtxDesc(GX_VA_TEX0, GX_INDEX8);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGB565, 0);
+ GXSetArray(GX_VA_TEX0, l_tex0, 2);
+
+ setTevSettingIntensityTextureToCI();
+
+ for (int i = 0; i < i_dataNum; i++, i_doorData++) {
+ prm0 = (i_doorData->mParameter >> 0xD) & 0x3F;
+ prm1 = (i_doorData->mParameter >> 0x13) & 0x3F;
+
+ if (checkDispDoorS(prm0, prm1, i_doorData->mSpawnPos.y)) {
+ GXLoadTexObj(dMpath_n::m_texObjAgg.getTexObjPointer(0), GX_TEXMAP0);
+ drawNormalDoorS(i_doorData, prm0, prm1, param_2);
+ }
+ }
+
+ setTevSettingNonTextureDirectColor();
}
-#pragma pop
/* 80040710-80040838 03B050 0128+00 1/1 0/0 0/0 .text checkDispDoorS__19renderingPlusDoor_cFiif */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void renderingPlusDoor_c::checkDispDoorS(int param_0, int param_1, f32 param_2) {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/checkDispDoorS__19renderingPlusDoor_cFiif.s"
-}
-#pragma pop
+bool renderingPlusDoor_c::checkDispDoorS(int param_0, int param_1, f32 param_2) {
+ if (isRendAllRoom()) {
+ if (!hasMap() && (!dMapInfo_n::isVisitedRoom(param_0) && param_0 != mRoomNoSingle) &&
+ (!dMapInfo_n::isVisitedRoom(param_1) && param_1 != mRoomNoSingle))
+ {
+ return false;
+ }
+ } else if (param_0 != mRoomNoSingle && param_1 != mRoomNoSingle) {
+ return false;
+ }
-/* ############################################################################################## */
-/* 80379C58-80379C88 0062B8 0030+00 1/1 0/0 0/0 .rodata l_100x100BoxVertexList */
-SECTION_RODATA static u8 const l_100x100BoxVertexList[48] = {
- 0xC2, 0x48, 0x00, 0x00, 0xC2, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00,
- 0xC2, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xC2, 0x48, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80379C58, &l_100x100BoxVertexList);
+ if (mRenderedFloor == calcFloorNoForObjectByMapPathRend(param_2, param_0) ||
+ mRenderedFloor == calcFloorNoForObjectByMapPathRend(param_2, param_1))
+ {
+ return true;
+ }
-/* 80451E70-80451E74 000470 0004+00 1/1 0/0 0/0 .sdata2 @4484 */
-SECTION_SDATA2 static f32 lit_4484 = 6.0f;
+ return false;
+}
/* 80040838-800409B4 03B178 017C+00 1/1 0/0 0/0 .text
* drawNormalDoorS__19renderingPlusDoor_cFPC21stage_tgsc_data_classiib */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void renderingPlusDoor_c::drawNormalDoorS(stage_tgsc_data_class const* param_0, int param_1,
- int param_2, bool param_3) {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/drawNormalDoorS__19renderingPlusDoor_cFPC21stage_tgsc_data_classiib.s"
+void renderingPlusDoor_c::drawNormalDoorS(stage_tgsc_data_class const* i_doorData, int i_roomNo,
+ int param_2, bool param_3) {
+ static Vec const l_100x100BoxVertexList[4] = {
+ {-50.0f, -50.0f, 0.0f},
+ {50.0f, -50.0f, 0.0f},
+ {50.0f, 50.0f, 0.0f},
+ {-50.0f, 50.0f, 0.0f},
+ };
+
+ if (i_roomNo == dComIfGp_roomControl_getStayNo() || param_2 == dComIfGp_roomControl_getStayNo())
+ {
+ GXSetTevColor(GX_TEVREG1, l_doorWhite);
+ GXSetTevColor(GX_TEVREG2, l_doorWhite2);
+ } else {
+ GXSetTevColor(GX_TEVREG1, l_doorWhiteNoStay);
+ GXSetTevColor(GX_TEVREG2, l_doorWhiteNoStay2);
+ }
+
+ Vec spC;
+ spC.x = i_doorData->mSpawnPos.x;
+ spC.y = i_doorData->mSpawnPos.y;
+ spC.z = i_doorData->mSpawnPos.z;
+
+ if (param_3) {
+ dMapInfo_n::correctionOriginPos(i_roomNo, &spC);
+ }
+
+ mDoMtx_stack_c::transS(spC.x, spC.z, 0.0f);
+ mDoMtx_stack_c::ZrotM(i_doorData->mAngle.y);
+ mDoMtx_stack_c::scaleM(6.0f, 6.0f, 1.0f);
+
+ Vec sp18[4];
+ mDoMtx_stack_c::multVecArray(l_100x100BoxVertexList, sp18, 4);
+
+ GXBegin(GX_QUADS, GX_VTXFMT0, 4);
+ for (u8 i = 0; i < 4; i++) {
+ GXPosition3f32(sp18[i].x, sp18[i].y, sp18[i].z);
+ GXTexCoord1x8(i);
+ }
+ i_GXEnd();
}
-#pragma pop
/* 800409B4-800409E0 03B2F4 002C+00 3/0 2/0 0/0 .text isDrawRoomIcon__16renderingDAmap_cCFii */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void renderingDAmap_c::isDrawRoomIcon(int param_0, int param_1) const {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/isDrawRoomIcon__16renderingDAmap_cCFii.s"
+bool renderingDAmap_c::isDrawRoomIcon(int param_0, int param_1) const {
+ return isDrawRoom(param_0, param_1);
}
-#pragma pop
/* 800409E0-80040A94 03B320 00B4+00 3/0 3/0 0/0 .text
* isDrawIconSingle__16renderingDAmap_cCFPCQ27dTres_c6data_siibbPC3Vec */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void renderingDAmap_c::isDrawIconSingle(dTres_c::data_s const* param_0, int param_1,
- int param_2, bool param_3, bool param_4,
- Vec const* param_5) const {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/isDrawIconSingle__16renderingDAmap_cCFPCQ27dTres_c6data_siibbPC3Vec.s"
+bool renderingDAmap_c::isDrawIconSingle(dTres_c::data_s const* data, int param_1, int param_2,
+ bool param_3, bool param_4, Vec const* param_5) const {
+ bool draw_room_icon = isDrawRoomIcon(data->mRoomNo, param_1);
+ bool tmp = false;
+
+ if (param_4) {
+ int floorNo = calcFloorNoForObjectByMapPathRend(param_5->y, data->mRoomNo);
+ if (floorNo == param_2) {
+ tmp = true;
+ }
+ }
+
+ return isDrawIconSingle2(data, tmp, draw_room_icon, param_1);
}
-#pragma pop
/* 80040A94-80040AB8 03B3D4 0024+00 1/0 2/1 0/0 .text
* getFirstData__28renderingPlusDoorAndCursor_cFUc */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void renderingPlusDoorAndCursor_c::getFirstData(u8 param_0) {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/getFirstData__28renderingPlusDoorAndCursor_cFUc.s"
+dTres_c::typeGroupData_c* renderingPlusDoorAndCursor_c::getFirstData(u8 param_0) {
+ return dTres_c::getFirstData((int)param_0);
}
-#pragma pop
/* 80040AB8-80040ADC 03B3F8 0024+00 1/0 2/1 0/0 .text
* getNextData__28renderingPlusDoorAndCursor_cFPQ27dTres_c15typeGroupData_c */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void renderingPlusDoorAndCursor_c::getNextData(dTres_c::typeGroupData_c* param_0) {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/getNextData__28renderingPlusDoorAndCursor_cFPQ27dTres_c15typeGroupData_c.s"
+dTres_c::typeGroupData_c*
+renderingPlusDoorAndCursor_c::getNextData(dTres_c::typeGroupData_c* param_0) {
+ return dTres_c::getNextData(param_0);
}
-#pragma pop
/* 80040ADC-80040AE4 03B41C 0008+00 1/0 2/1 0/0 .text
* getIconPosition__28renderingPlusDoorAndCursor_cCFPQ27dTres_c15typeGroupData_c */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void renderingPlusDoorAndCursor_c::getIconPosition(dTres_c::typeGroupData_c* param_0) const {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/getIconPosition__28renderingPlusDoorAndCursor_cCFPQ27dTres_c15typeGroupData_c.s"
+const Vec*
+renderingPlusDoorAndCursor_c::getIconPosition(dTres_c::typeGroupData_c* i_typeGroupData) const {
+ return i_typeGroupData->getPos();
}
-#pragma pop
/* 80040AE4-80040B00 03B424 001C+00 3/0 2/1 0/0 .text getIconGroupNumber__16renderingDAmap_cCFUc
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void renderingDAmap_c::getIconGroupNumber(u8 param_0) const {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/getIconGroupNumber__16renderingDAmap_cCFUc.s"
+int renderingDAmap_c::getIconGroupNumber(u8 param_0) const {
+ return dTres_c::getTypeGroupNumber(param_0);
}
-#pragma pop
-
-/* ############################################################################################## */
-/* 80451E74-80451E78 000474 0004+00 1/0 0/0 0/0 .sdata2 l_entranceStartColor */
-extern "C" u32 l_entranceStartColor;
-
-/* 80451E78-80451E7C 000478 0004+00 1/0 0/0 0/0 .sdata2 l_entranceLv8StartColor */
-extern "C" u32 l_entranceLv8StartColor;
-
-/* 80451E7C-80451E80 00047C 0004+00 3/2 0/0 0/0 .sdata2 l_treasureStartColor */
-extern "C" u32 l_treasureStartColor;
-
-/* 80451E8C-80451E90 00048C 0004+00 1/0 0/0 0/0 .sdata2 l_destinationStartColor */
-extern "C" u32 l_destinationStartColor;
-
-/* 80379C88-80379CB8 -00001 0030+00 1/1 0/0 0/0 .rodata l_treasureDispList$4524 */
-SECTION_RODATA static void* const l_treasureDispList_4524[12] = {
- (void*)0x01000000, (void*)0x00000002, (void*)&l_entranceStartColor,
- (void*)0x08000000, (void*)0x00000005, (void*)&l_entranceLv8StartColor,
- (void*)NULL, (void*)0x00000001, (void*)&l_treasureStartColor,
- (void*)0x05000000, (void*)0x00000003, (void*)&l_destinationStartColor,
-};
-COMPILER_STRIP_GATE(0x80379C88, &l_treasureDispList_4524);
/* 80451E74-80451E78 000474 0004+00 1/0 0/0 0/0 .sdata2 l_entranceStartColor */
-SECTION_SDATA2 static u32 l_entranceStartColor = 0x94000000;
+SECTION_SDATA2 static GXColor l_entranceStartColor = {148, 0, 0, 0};
/* 80451E78-80451E7C 000478 0004+00 1/0 0/0 0/0 .sdata2 l_entranceLv8StartColor */
-SECTION_SDATA2 static u32 l_entranceLv8StartColor = 0x9C000000;
+SECTION_SDATA2 static GXColor l_entranceLv8StartColor = {156, 0, 0, 0};
/* 80451E7C-80451E80 00047C 0004+00 3/2 0/0 0/0 .sdata2 l_treasureStartColor */
-SECTION_SDATA2 static u32 l_treasureStartColor = 0x7C000000;
+SECTION_SDATA2 static GXColor l_treasureStartColor = {124, 0, 0, 0};
/* 80451E80-80451E84 000480 0004+00 1/0 0/0 0/0 .sdata2 l_smallKeyStartColor */
-SECTION_SDATA2 static u32 l_smallKeyStartColor = 0x84000000;
+SECTION_SDATA2 static GXColor l_smallKeyStartColor = {132, 0, 0, 0};
/* 80451E84-80451E88 000484 0004+00 1/0 0/0 0/0 .sdata2 l_bossStartColor */
-SECTION_SDATA2 static u32 l_bossStartColor = 0x88000000;
+SECTION_SDATA2 static GXColor l_bossStartColor = {136, 0, 0, 0};
/* 80451E88-80451E8C 000488 0004+00 1/0 0/0 0/0 .sdata2 l_npc0StartColor */
-SECTION_SDATA2 static u32 l_npc0StartColor = 0x8C000000;
+SECTION_SDATA2 static GXColor l_npc0StartColor = {140, 0, 0, 0};
/* 80451E8C-80451E90 00048C 0004+00 1/0 0/0 0/0 .sdata2 l_destinationStartColor */
-SECTION_SDATA2 static u32 l_destinationStartColor = 0x90000000;
+SECTION_SDATA2 static GXColor l_destinationStartColor = {144, 0, 0, 0};
/* 80451E90-80451E94 000490 0004+00 1/0 0/0 0/0 .sdata2 l_npcYkmStartColor */
-SECTION_SDATA2 static u32 l_npcYkmStartColor = 0x8C000000;
+SECTION_SDATA2 static GXColor l_npcYkmStartColor = {140, 0, 0, 0};
/* 80451E94-80451E98 000494 0004+00 1/0 0/0 0/0 .sdata2 l_npcYkwStartColor */
-SECTION_SDATA2 static u32 l_npcYkwStartColor = 0x8C000000;
+SECTION_SDATA2 static GXColor l_npcYkwStartColor = {140, 0, 0, 0};
/* 80451E98-80451E9C 000498 0004+00 1/0 0/0 0/0 .sdata2 l_tksStartColor */
-SECTION_SDATA2 static u32 l_tksStartColor = 0xA4000000;
+SECTION_SDATA2 static GXColor l_tksStartColor = {164, 0, 0, 0};
/* 80451E9C-80451EA4 00049C 0008+00 1/1 0/0 0/0 .sdata2 l_iconTex0$4523 */
SECTION_SDATA2 static u8 l_iconTex0_4523[8] = {
@@ -1009,18 +1196,95 @@ SECTION_SDATA2 static u8 l_iconTex0_4523[8] = {
};
/* 80451EA4-80451EA8 0004A4 0004+00 1/1 0/0 0/0 .sdata2 tboxNotStayColor$4542 */
-SECTION_SDATA2 static u8 tboxNotStayColor_4542[4] = {
- 0x80,
- 0x00,
- 0x00,
- 0x00,
-};
+SECTION_SDATA2 static GXColor tboxNotStayColor_4542 = {128, 0, 0, 0};
/* 80451EA8-80451EAC 0004A8 0004+00 2/2 0/0 0/0 .sdata2 @4600 */
SECTION_SDATA2 static f32 lit_4600 = 2.0f;
+struct treasureDispData {
+ /* 0x0 */ u8 field_0x0;
+ /* 0x4 */ int field_0x4;
+ /* 0x8 */ GXColor* field_0x8;
+};
+
+/* 80379C88-80379CB8 -00001 0030+00 1/1 0/0 0/0 .rodata l_treasureDispList$4524 */
+static const treasureDispData l_treasureDispList_4524[4] = {
+ {1, 2, &l_entranceStartColor},
+ {8, 5, &l_entranceLv8StartColor},
+ {0, 1, &l_treasureStartColor},
+ {5, 3, &l_destinationStartColor},
+};
+
/* 80040B00-80040E84 03B440 0384+00 1/1 0/0 0/0 .text
* drawTreasure__28renderingPlusDoorAndCursor_cFv */
+#ifdef NONMATCHING
+void renderingPlusDoorAndCursor_c::drawTreasure() {
+ bool rend_all_room = isRendAllRoom();
+
+ GXClearVtxDesc();
+ GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
+ GXSetVtxDesc(GX_VA_TEX0, GX_INDEX8);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGB, GX_F32, 0);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGB565, 0);
+ GXSetArray(GX_VA_TEX0, l_iconTex0_4523, 2);
+
+ setTevSettingIntensityTextureToCI();
+
+ for (int i = 0; i < 4; i++) {
+ u8 tmp = l_treasureDispList_4524[i].field_0x0;
+ dTres_c::typeGroupData_c* typeGroupData_p = getFirstData(tmp);
+ int group_num = getIconGroupNumber(tmp);
+
+ if (group_num != 0) {
+ f32 icon_size = getIconSize(tmp) * mCmPerTexel;
+
+ GXInvalidateTexAll();
+ GXTexObj* texObj_p =
+ dMpath_n::m_texObjAgg.getTexObjPointer(l_treasureDispList_4524[i].field_0x4);
+ GXLoadTexObj(texObj_p, GX_TEXMAP0);
+ GXColor sp18;
+ GXColor* temp_r3_2 = l_treasureDispList_4524[i].field_0x8;
+ sp18.r = temp_r3_2->r;
+ sp18.g = temp_r3_2->g;
+ sp18.b = temp_r3_2->b;
+ sp18.a = temp_r3_2->a;
+
+ GXSetTevColor(GX_TEVREG1, sp18);
+
+ sp18.r += 4;
+ GXSetTevColor(GX_TEVREG2, sp18);
+
+ for (int j = 0; j < group_num && typeGroupData_p != NULL; j++) {
+ Vec* icon_pos = getIconPosition(typeGroupData_p);
+
+ if (tmp == 0) {
+ if (mRoomNoSingle != typeGroupData_p->getRoomNo()) {
+ sp18 = tboxNotStayColor_4542;
+ } else {
+ sp18 = l_treasureStartColor;
+ }
+
+ GXSetTevColor(GX_TEVREG1, sp18);
+
+ sp18.r += 4;
+ GXSetTevColor(GX_TEVREG2, sp18);
+ }
+
+ if (isDrawAreaCheck(*icon_pos) &&
+ isDrawIconSingle(typeGroupData_p->getConstDataPointer(), mRoomNoSingle,
+ mRenderedFloor, rend_all_room, true, icon_pos))
+ {
+ drawIconSingle(*icon_pos, icon_size, icon_size);
+ }
+
+ typeGroupData_p = getNextData(typeGroupData_p);
+ }
+ }
+ }
+
+ setTevSettingNonTextureDirectColor();
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -1029,41 +1293,15 @@ asm void renderingPlusDoorAndCursor_c::drawTreasure() {
#include "asm/d/map/d_map_path_dmap/drawTreasure__28renderingPlusDoorAndCursor_cFv.s"
}
#pragma pop
-
-/* ############################################################################################## */
-/* 80451E80-80451E84 000480 0004+00 1/0 0/0 0/0 .sdata2 l_smallKeyStartColor */
-extern "C" u32 l_smallKeyStartColor;
-
-/* 80451E84-80451E88 000484 0004+00 1/0 0/0 0/0 .sdata2 l_bossStartColor */
-extern "C" u32 l_bossStartColor;
-
-/* 80451E88-80451E8C 000488 0004+00 1/0 0/0 0/0 .sdata2 l_npc0StartColor */
-extern "C" u32 l_npc0StartColor;
-
-/* 80451E90-80451E94 000490 0004+00 1/0 0/0 0/0 .sdata2 l_npcYkmStartColor */
-extern "C" u32 l_npcYkmStartColor;
-
-/* 80451E94-80451E98 000494 0004+00 1/0 0/0 0/0 .sdata2 l_npcYkwStartColor */
-extern "C" u32 l_npcYkwStartColor;
-
-/* 80451E98-80451E9C 000498 0004+00 1/0 0/0 0/0 .sdata2 l_tksStartColor */
-extern "C" u32 l_tksStartColor;
+#endif
/* 80379CB8-80379D3C -00001 0084+00 1/1 0/0 0/0 .rodata l_treasureDispList$4606 */
-SECTION_RODATA static void* const l_treasureDispList_4606[33] = {
- (void*)0x10000000, (void*)0x00000004, (void*)&l_tksStartColor,
- (void*)0x02000000, (void*)0x00000004, (void*)&l_smallKeyStartColor,
- (void*)0x0A000000, (void*)0x00000004, (void*)&l_npc0StartColor,
- (void*)0x09000000, (void*)0x00000004, (void*)&l_npc0StartColor,
- (void*)0x0E000000, (void*)0x00000004, (void*)&l_npcYkwStartColor,
- (void*)0x0D000000, (void*)0x00000004, (void*)&l_npcYkmStartColor,
- (void*)0x0F000000, (void*)0x00000004, (void*)&l_npc0StartColor,
- (void*)0x0B000000, (void*)0x00000004, (void*)&l_npc0StartColor,
- (void*)0x0C000000, (void*)0x00000004, (void*)&l_npc0StartColor,
- (void*)0x04000000, (void*)0x00000004, (void*)&l_smallKeyStartColor,
- (void*)0x03000000, (void*)0x00000004, (void*)&l_bossStartColor,
+static const treasureDispData l_treasureDispList_4606[11] = {
+ {16, 4, &l_tksStartColor}, {2, 4, &l_smallKeyStartColor}, {10, 4, &l_npc0StartColor},
+ {9, 4, &l_npc0StartColor}, {14, 4, &l_npcYkwStartColor}, {13, 4, &l_npcYkmStartColor},
+ {15, 4, &l_npc0StartColor}, {11, 4, &l_npc0StartColor}, {12, 4, &l_npc0StartColor},
+ {4, 4, &l_smallKeyStartColor}, {3, 4, &l_bossStartColor},
};
-COMPILER_STRIP_GATE(0x80379CB8, &l_treasureDispList_4606);
/* 80451EAC-80451EB4 0004AC 0008+00 1/1 0/0 0/0 .sdata2 l_iconTex0$4605 */
SECTION_SDATA2 static u8 l_iconTex0_4605[8] = {
@@ -1089,78 +1327,74 @@ asm void renderingPlusDoorAndCursor_c::drawTreasureAfterPlayer() {
}
#pragma pop
-/* ############################################################################################## */
-/* 80379D3C-80379D5C 00639C 0020+00 1/1 0/0 0/0 .rodata l_iconPosData$4686 */
-SECTION_RODATA static u8 const l_iconPosData[32] = {
- 0xC2, 0x48, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00,
- 0x42, 0x48, 0x00, 0x00, 0xC2, 0x48, 0x00, 0x00, 0xC2, 0x48, 0x00, 0x00, 0xC2, 0x48, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80379D3C, &l_iconPosData);
-
/* 80041208-800412C0 03BB48 00B8+00 2/2 0/0 0/0 .text
* drawIconSingle__28renderingPlusDoorAndCursor_cFRC3Vecff */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void renderingPlusDoorAndCursor_c::drawIconSingle(Vec const& param_0, f32 param_1,
- f32 param_2) {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/drawIconSingle__28renderingPlusDoorAndCursor_cFRC3Vecff.s"
+void renderingPlusDoorAndCursor_c::drawIconSingle(Vec const& param_0, f32 param_1, f32 param_2) {
+ static f32 const l_iconPosData[4][2] = {
+ {-50.0f, 50.0f},
+ {50.0f, 50.0f},
+ {50.0f, -50.0f},
+ {-50.0f, -50.0f},
+ };
+
+ GXBegin(GX_QUADS, GX_VTXFMT0, 4);
+ for (u8 i = 0; i < 4; i++) {
+ GXPosition2f32(param_0.x + param_1 * l_iconPosData[i][0],
+ param_0.z + param_2 * l_iconPosData[i][1]);
+ GXTexCoord1x8(i);
+ }
+
+ i_GXEnd();
}
-#pragma pop
-/* ############################################################################################## */
-/* 80379D5C-80379D80 0063BC 0024+00 1/1 0/0 0/0 .rodata l_offset$4703 */
-SECTION_RODATA static u8 const l_offset[36] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0xC8, 0x00, 0x00,
- 0xC3, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0x70, 0x00, 0x00,
- 0x43, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0x70, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80379D5C, &l_offset);
+/* 800412C0-8004145C 03BC00 019C+00 1/1 0/0 0/0 .text
+ * drawCursor__28renderingPlusDoorAndCursor_cFRC3Vecsif */
+void renderingPlusDoorAndCursor_c::drawCursor(Vec const& param_0, s16 param_1, int param_2,
+ f32 param_3) {
+ static Vec const l_offset[3] = {
+ {0.0f, 0.0f, 400.0f},
+ {-200.0f, 0.0f, -240.0f},
+ {200.0f, 0.0f, -240.0f},
+ };
+
+ static GXColor l_cursorColor = {120, 0, 0, 0};
+
+ f32 temp_f3 = param_3 / 640.0f;
+ f32 temp_f31 = temp_f3 * (field_0x8 / field_0x20);
+ f32 temp_f30 = temp_f3 * (field_0xc / field_0x22);
+
+ mDoMtx_stack_c::transS(param_0.x, 0.0f, param_0.z);
+ mDoMtx_stack_c::scaleM(temp_f31, 1.0f, temp_f30);
+ mDoMtx_stack_c::YrotM(param_1);
+
+ Vec offset[3];
+ for (int i = 0; i < 3; i++) {
+ mDoMtx_stack_c::multVec(&l_offset[i], &offset[i]);
+ }
-/* 80450638-80450640 0000B8 0004+04 1/1 0/0 0/0 .sdata l_cursorColor$4709 */
-SECTION_SDATA static u8 l_cursorColor[4 + 4 /* padding */] = {
- 0x78,
- 0x00,
- 0x00,
- 0x00,
- /* padding */
- 0x00,
- 0x00,
- 0x00,
- 0x00,
-};
+ GXClearVtxDesc();
+ GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGB, GX_F32, 0);
-/* 80451EB8-80451EC0 0004B8 0004+04 1/1 0/0 0/0 .sdata2 @4731 */
-SECTION_SDATA2 static f32 lit_4731[1 + 1 /* padding */] = {
- 640.0f,
- /* padding */
- 0.0f,
-};
+ l_cursorColor.r = param_2 * 4;
+ GXSetTevColor(GX_TEVREG0, l_cursorColor);
-/* 800412C0-8004145C 03BC00 019C+00 1/1 0/0 0/0 .text
- * drawCursor__28renderingPlusDoorAndCursor_cFRC3Vecsif */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void renderingPlusDoorAndCursor_c::drawCursor(Vec const& param_0, s16 param_1, int param_2,
- f32 param_3) {
- nofralloc
-#include "asm/d/map/d_map_path_dmap/drawCursor__28renderingPlusDoorAndCursor_cFRC3Vecsif.s"
+ GXBegin(GX_TRIANGLES, GX_VTXFMT0, 3);
+ for (int i = 0; i < 3; i++) {
+ GXPosition2f32(offset[i].x, offset[i].z);
+ }
+
+ i_GXEnd();
}
-#pragma pop
/* 8004145C-80041460 03BD9C 0004+00 2/0 0/0 0/0 .text beforeDrawPath__19renderingPlusDoor_cFv */
-void renderingPlusDoor_c::beforeDrawPath() {
- /* empty function */
-}
+void renderingPlusDoor_c::beforeDrawPath() {}
/* 80041460-80041480 03BDA0 0020+00 0/0 1/0 0/0 .text __sinit_d_map_path_dmap_cpp */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void __sinit_d_map_path_dmap_cpp() {
- nofralloc
+asm void __sinit_d_map_path_dmap_cpp(){nofralloc
#include "asm/d/map/d_map_path_dmap/__sinit_d_map_path_dmap_cpp.s"
}
#pragma pop