diff options
| author | TakaRikka <takarikka@outlook.com> | 2023-01-29 21:00:46 -0800 |
|---|---|---|
| committer | TakaRikka <takarikka@outlook.com> | 2023-01-29 21:00:46 -0800 |
| commit | bad65515073c63647336a3b3d2442e6b056489e3 (patch) | |
| tree | 0eabb60e94f0afc594cca4d260c5d6d7d22e0692 /src/d/map/d_map_path_dmap.cpp | |
| parent | 7723ab15f7ab0ab4f974ae1e32260c28166364d6 (diff) | |
most of d_map_path_dmap decompiled
Diffstat (limited to 'src/d/map/d_map_path_dmap.cpp')
| -rw-r--r-- | src/d/map/d_map_path_dmap.cpp | 1366 |
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 |
