diff --git a/asm/d/map/d_map/_draw__6dMap_cFv.s b/asm/d/map/d_map/_draw__6dMap_cFv.s index afba0191f0d..002afc80670 100644 --- a/asm/d/map/d_map/_draw__6dMap_cFv.s +++ b/asm/d/map/d_map/_draw__6dMap_cFv.s @@ -9,10 +9,10 @@ lbl_8002AB54: /* 8002AB70 28 00 00 00 */ cmplwi r0, 0 /* 8002AB74 41 82 00 28 */ beq lbl_8002AB9C /* 8002AB78 38 A0 00 00 */ li r5, 0 -/* 8002AB7C 88 0D 88 E0 */ lbz r0, data_80450E60(r13) +/* 8002AB7C 88 0D 88 E0 */ lbz r0, mNowStayFloorNoDecisionFlg__10dMapInfo_c(r13) /* 8002AB80 28 00 00 00 */ cmplwi r0, 0 /* 8002AB84 41 82 00 08 */ beq lbl_8002AB8C -/* 8002AB88 88 AD 88 D8 */ lbz r5, data_80450E58(r13) +/* 8002AB88 88 AD 88 D8 */ lbz r5, mNowStayFloorNo__10dMapInfo_c(r13) lbl_8002AB8C: /* 8002AB8C C0 23 00 50 */ lfs f1, 0x50(r3) /* 8002AB90 C0 43 00 54 */ lfs f2, 0x54(r3) diff --git a/asm/d/map/d_map_path_dmap/calcFloorNo__10dMapInfo_cFfbi.s b/asm/d/map/d_map_path_dmap/calcFloorNo__10dMapInfo_cFfbi.s index 0e29053843d..a2bb66d8bef 100644 --- a/asm/d/map/d_map_path_dmap/calcFloorNo__10dMapInfo_cFfbi.s +++ b/asm/d/map/d_map_path_dmap/calcFloorNo__10dMapInfo_cFfbi.s @@ -25,10 +25,10 @@ lbl_8003F40C: /* 8003F468 80 0D 88 DC */ lwz r0, mNowStayRoomNo__10dMapInfo_c(r13) /* 8003F46C 7C 1F 00 00 */ cmpw r31, r0 /* 8003F470 40 82 00 3C */ bne lbl_8003F4AC -/* 8003F474 88 0D 88 E0 */ lbz r0, data_80450E60(r13) +/* 8003F474 88 0D 88 E0 */ lbz r0, mNowStayFloorNoDecisionFlg__10dMapInfo_c(r13) /* 8003F478 28 00 00 00 */ cmplwi r0, 0 /* 8003F47C 41 82 00 30 */ beq lbl_8003F4AC -/* 8003F480 88 AD 88 D8 */ lbz r5, data_80450E58(r13) +/* 8003F480 88 AD 88 D8 */ lbz r5, mNowStayFloorNo__10dMapInfo_c(r13) /* 8003F484 7C A4 07 74 */ extsb r4, r5 /* 8003F488 88 01 00 08 */ lbz r0, 8(r1) /* 8003F48C 7C 03 07 74 */ extsb r3, r0 diff --git a/asm/d/map/d_map_path_dmap/calcNowStayFloorNo__10dMapInfo_cFfb.s b/asm/d/map/d_map_path_dmap/calcNowStayFloorNo__10dMapInfo_cFfb.s index 7b443c0f787..19b232035c2 100644 --- a/asm/d/map/d_map_path_dmap/calcNowStayFloorNo__10dMapInfo_cFfb.s +++ b/asm/d/map/d_map_path_dmap/calcNowStayFloorNo__10dMapInfo_cFfb.s @@ -13,7 +13,7 @@ lbl_8003F570: /* 8003F59C 38 C1 00 0C */ addi r6, r1, 0xc /* 8003F5A0 38 E0 00 00 */ li r7, 0 /* 8003F5A4 4B FF FC A9 */ bl getFloorParameter__10dMapInfo_nFfPScPfPfPfPf -/* 8003F5A8 88 0D 88 E0 */ lbz r0, data_80450E60(r13) +/* 8003F5A8 88 0D 88 E0 */ lbz r0, mNowStayFloorNoDecisionFlg__10dMapInfo_c(r13) /* 8003F5AC 28 00 00 00 */ cmplwi r0, 0 /* 8003F5B0 41 82 00 5C */ beq lbl_8003F60C /* 8003F5B4 C0 01 00 10 */ lfs f0, 0x10(r1) @@ -23,7 +23,7 @@ lbl_8003F570: /* 8003F5C4 FC 1F 00 40 */ fcmpo cr0, f31, f0 /* 8003F5C8 4C 41 13 82 */ cror 2, 1, 2 /* 8003F5CC 40 82 00 6C */ bne lbl_8003F638 -/* 8003F5D0 88 AD 88 D8 */ lbz r5, data_80450E58(r13) +/* 8003F5D0 88 AD 88 D8 */ lbz r5, mNowStayFloorNo__10dMapInfo_c(r13) /* 8003F5D4 7C A4 07 74 */ extsb r4, r5 /* 8003F5D8 88 01 00 08 */ lbz r0, 8(r1) /* 8003F5DC 7C 03 07 74 */ extsb r3, r0 diff --git a/asm/d/map/d_map_path_dmap/getTopBottomFloorNo__8dMpath_cFPScPSc.s b/asm/d/map/d_map_path_dmap/getTopBottomFloorNo__8dMpath_cFPScPSc.s index c6160b2b789..d93b1d8bbb3 100644 --- a/asm/d/map/d_map_path_dmap/getTopBottomFloorNo__8dMpath_cFPScPSc.s +++ b/asm/d/map/d_map_path_dmap/getTopBottomFloorNo__8dMpath_cFPScPSc.s @@ -11,12 +11,12 @@ lbl_8003F760: /* 8003F784 41 82 00 28 */ beq lbl_8003F7AC /* 8003F788 28 1E 00 00 */ cmplwi r30, 0 /* 8003F78C 41 82 00 0C */ beq lbl_8003F798 -/* 8003F790 88 0D 80 B5 */ lbz r0, struct_80450634+0x1(r13) +/* 8003F790 88 0D 80 B5 */ lbz r0, mBottomFloorNo__8dMpath_c+0x1(r13) /* 8003F794 98 1E 00 00 */ stb r0, 0(r30) lbl_8003F798: /* 8003F798 28 1F 00 00 */ cmplwi r31, 0 /* 8003F79C 41 82 00 30 */ beq lbl_8003F7CC -/* 8003F7A0 88 0D 80 B4 */ lbz r0, struct_80450634+0x0(r13) +/* 8003F7A0 88 0D 80 B4 */ lbz r0, mBottomFloorNo__8dMpath_c+0x0(r13) /* 8003F7A4 98 1F 00 00 */ stb r0, 0(r31) /* 8003F7A8 48 00 00 24 */ b lbl_8003F7CC lbl_8003F7AC: diff --git a/asm/d/map/d_map_path_dmap/init__10dMapInfo_cFv.s b/asm/d/map/d_map_path_dmap/init__10dMapInfo_cFv.s index 0b3bf375cb9..fee2d9c86ae 100644 --- a/asm/d/map/d_map_path_dmap/init__10dMapInfo_cFv.s +++ b/asm/d/map/d_map_path_dmap/init__10dMapInfo_cFv.s @@ -1,7 +1,7 @@ lbl_8003F6FC: /* 8003F6FC 38 00 00 00 */ li r0, 0 -/* 8003F700 98 0D 88 D8 */ stb r0, data_80450E58(r13) -/* 8003F704 98 0D 88 E0 */ stb r0, data_80450E60(r13) +/* 8003F700 98 0D 88 D8 */ stb r0, mNowStayFloorNo__10dMapInfo_c(r13) +/* 8003F704 98 0D 88 E0 */ stb r0, mNowStayFloorNoDecisionFlg__10dMapInfo_c(r13) /* 8003F708 38 00 FF FF */ li r0, -1 /* 8003F70C 90 0D 88 DC */ stw r0, mNowStayRoomNo__10dMapInfo_c(r13) /* 8003F710 4E 80 00 20 */ blr diff --git a/asm/d/map/d_map_path_dmap/move__10dMapInfo_cFif.s b/asm/d/map/d_map_path_dmap/move__10dMapInfo_cFif.s index 1167fbfee32..74bdca8f232 100644 --- a/asm/d/map/d_map_path_dmap/move__10dMapInfo_cFif.s +++ b/asm/d/map/d_map_path_dmap/move__10dMapInfo_cFif.s @@ -5,9 +5,9 @@ lbl_8003F6C8: /* 8003F6D4 90 6D 88 DC */ stw r3, mNowStayRoomNo__10dMapInfo_c(r13) /* 8003F6D8 38 60 00 01 */ li r3, 1 /* 8003F6DC 4B FF FE 95 */ bl calcNowStayFloorNo__10dMapInfo_cFfb -/* 8003F6E0 98 6D 88 D8 */ stb r3, data_80450E58(r13) +/* 8003F6E0 98 6D 88 D8 */ stb r3, mNowStayFloorNo__10dMapInfo_c(r13) /* 8003F6E4 38 00 00 01 */ li r0, 1 -/* 8003F6E8 98 0D 88 E0 */ stb r0, data_80450E60(r13) +/* 8003F6E8 98 0D 88 E0 */ stb r0, mNowStayFloorNoDecisionFlg__10dMapInfo_c(r13) /* 8003F6EC 80 01 00 14 */ lwz r0, 0x14(r1) /* 8003F6F0 7C 08 03 A6 */ mtlr r0 /* 8003F6F4 38 21 00 10 */ addi r1, r1, 0x10 diff --git a/asm/d/map/d_map_path_dmap/reset__8dMpath_cFv.s b/asm/d/map/d_map_path_dmap/reset__8dMpath_cFv.s index c78ea2e9d2b..81aced90965 100644 --- a/asm/d/map/d_map_path_dmap/reset__8dMpath_cFv.s +++ b/asm/d/map/d_map_path_dmap/reset__8dMpath_cFv.s @@ -30,9 +30,9 @@ lbl_8003FC00: /* 8003FC38 D0 2D 88 F0 */ stfs f1, mMinZ__8dMpath_c(r13) /* 8003FC3C D0 0D 88 F4 */ stfs f0, mMaxZ__8dMpath_c(r13) /* 8003FC40 38 00 00 7F */ li r0, 0x7f -/* 8003FC44 98 0D 80 B4 */ stb r0, struct_80450634+0x0(r13) +/* 8003FC44 98 0D 80 B4 */ stb r0, mBottomFloorNo__8dMpath_c+0x0(r13) /* 8003FC48 38 00 FF 80 */ li r0, -128 -/* 8003FC4C 98 0D 80 B5 */ stb r0, struct_80450634+0x1(r13) +/* 8003FC4C 98 0D 80 B5 */ stb r0, mBottomFloorNo__8dMpath_c+0x1(r13) /* 8003FC50 38 00 00 00 */ li r0, 0 /* 8003FC54 98 0D 80 B6 */ stb r0, data_80450636(r13) /* 8003FC58 98 0D 89 08 */ stb r0, data_80450E88(r13) diff --git a/asm/d/map/d_map_path_dmap/setPointer__8dMpath_cFScPvi.s b/asm/d/map/d_map_path_dmap/setPointer__8dMpath_cFScPvi.s index f06f59567c1..66fdc609180 100644 --- a/asm/d/map/d_map_path_dmap/setPointer__8dMpath_cFScPvi.s +++ b/asm/d/map/d_map_path_dmap/setPointer__8dMpath_cFScPvi.s @@ -14,8 +14,8 @@ lbl_8003FA40: /* 8003FA70 38 00 00 01 */ li r0, 1 /* 8003FA74 98 0D 89 08 */ stb r0, data_80450E88(r13) /* 8003FA78 7F C3 F3 78 */ mr r3, r30 -/* 8003FA7C 38 8D 80 B4 */ la r4, struct_80450634+0x0(r13) /* 80450634-_SDA_BASE_ */ -/* 8003FA80 38 AD 80 B5 */ la r5, struct_80450634+0x1(r13) /* 80450635-_SDA_BASE_ */ +/* 8003FA7C 38 8D 80 B4 */ la r4, mBottomFloorNo__8dMpath_c+0x0(r13) /* 80450634-_SDA_BASE_ */ +/* 8003FA80 38 AD 80 B5 */ la r5, mBottomFloorNo__8dMpath_c+0x1(r13) /* 80450635-_SDA_BASE_ */ /* 8003FA84 4B FF FD 8D */ bl setPointer__8dMpath_cFPQ211dDrawPath_c10room_classPScPSc /* 8003FA88 C0 02 84 28 */ lfs f0, lit_3796(r2) /* 8003FA8C D0 01 00 14 */ stfs f0, 0x14(r1) diff --git a/asm/d/menu/d_menu_dmap_map/_create__20dMenu_StageMapCtrl_cFUsUsUsUsPv.s b/asm/d/menu/d_menu_dmap_map/_create__20dMenu_StageMapCtrl_cFUsUsUsUsPv.s index 8be1378bfe1..92e0dda7799 100644 --- a/asm/d/menu/d_menu_dmap_map/_create__20dMenu_StageMapCtrl_cFUsUsUsUsPv.s +++ b/asm/d/menu/d_menu_dmap_map/_create__20dMenu_StageMapCtrl_cFUsUsUsUsPv.s @@ -3,12 +3,12 @@ lbl_801C231C: /* 801C2320 7C 08 02 A6 */ mflr r0 /* 801C2324 90 01 00 14 */ stw r0, 0x14(r1) /* 801C2328 7D 09 43 78 */ mr r9, r8 -/* 801C232C 88 0D 88 E0 */ lbz r0, data_80450E60(r13) +/* 801C232C 88 0D 88 E0 */ lbz r0, mNowStayFloorNoDecisionFlg__10dMapInfo_c(r13) /* 801C2330 28 00 00 00 */ cmplwi r0, 0 /* 801C2334 41 82 00 14 */ beq lbl_801C2348 /* 801C2338 38 00 00 00 */ li r0, 0 /* 801C233C 41 82 00 08 */ beq lbl_801C2344 -/* 801C2340 88 0D 88 D8 */ lbz r0, data_80450E58(r13) +/* 801C2340 88 0D 88 D8 */ lbz r0, mNowStayFloorNo__10dMapInfo_c(r13) lbl_801C2344: /* 801C2344 7C 08 03 78 */ mr r8, r0 lbl_801C2348: diff --git a/asm/d/menu/d_menu_dmap_map/getPlayerStayFloorNo__20dMenu_StageMapCtrl_cCFv.s b/asm/d/menu/d_menu_dmap_map/getPlayerStayFloorNo__20dMenu_StageMapCtrl_cCFv.s index c66be794cad..9f4b8dd8124 100644 --- a/asm/d/menu/d_menu_dmap_map/getPlayerStayFloorNo__20dMenu_StageMapCtrl_cCFv.s +++ b/asm/d/menu/d_menu_dmap_map/getPlayerStayFloorNo__20dMenu_StageMapCtrl_cCFv.s @@ -1,11 +1,11 @@ lbl_801C22F8: /* 801C22F8 38 60 00 00 */ li r3, 0 -/* 801C22FC 88 0D 88 E0 */ lbz r0, data_80450E60(r13) +/* 801C22FC 88 0D 88 E0 */ lbz r0, mNowStayFloorNoDecisionFlg__10dMapInfo_c(r13) /* 801C2300 28 00 00 00 */ cmplwi r0, 0 /* 801C2304 4D 82 00 20 */ beqlr /* 801C2308 38 00 00 00 */ li r0, 0 /* 801C230C 41 82 00 08 */ beq lbl_801C2314 -/* 801C2310 88 0D 88 D8 */ lbz r0, data_80450E58(r13) +/* 801C2310 88 0D 88 D8 */ lbz r0, mNowStayFloorNo__10dMapInfo_c(r13) lbl_801C2314: /* 801C2314 7C 03 03 78 */ mr r3, r0 /* 801C2318 4E 80 00 20 */ blr diff --git a/include/d/com/d_com_inf_game.h b/include/d/com/d_com_inf_game.h index 84ba45a17f9..85a7ab14a8b 100644 --- a/include/d/com/d_com_inf_game.h +++ b/include/d/com/d_com_inf_game.h @@ -2788,6 +2788,10 @@ inline void dComIfGd_set2DOpaTop(dDlst_base_c* dlst) { g_dComIfG_gameInfo.drawlist.set2DOpaTop(dlst); } +inline void dComIfGd_setCopy2D(dDlst_base_c* dlst) { + g_dComIfG_gameInfo.drawlist.setCopy2D(dlst); +} + inline view_class* dComIfGd_getView() { return g_dComIfG_gameInfo.drawlist.getView(); } diff --git a/include/d/d_drawlist.h b/include/d/d_drawlist.h index c2de5e7e6ad..51bea81b875 100644 --- a/include/d/d_drawlist.h +++ b/include/d/d_drawlist.h @@ -286,6 +286,7 @@ public: void set2DOpa(dDlst_base_c* dlst) { set(mp2DOpaSet[0], mp2DOpaSet[1], dlst); } void set2DOpaTop(dDlst_base_c* dlst) { set(mp2DOpaTopSet[0], mp2DOpaTopSet[1], dlst); } void set2DXlu(dDlst_base_c* dlst) { set(mp2DXluSet[0], mp2DXluSet[1], dlst); } + void setCopy2D(dDlst_base_c* dlst) { set(mpCopy2DSet[0], mpCopy2DSet[1], dlst); } view_class* getView() { return mView; } void setView(view_class* view) { mView = view; } void setWindow(dDlst_window_c* window) { mWindow = window; } diff --git a/include/d/d_stage.h b/include/d/d_stage.h index 67e0da5cdbf..62838f3e700 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -868,7 +868,7 @@ struct dStage_objectNameInf { class dStage_KeepDoorInfo { public: /* 80028418 */ ~dStage_KeepDoorInfo() {} - /* 0x000 */ stage_tgsc_class* unk_0x0; + /* 0x000 */ int unk_0x0; /* 0x004 */ stage_tgsc_data_class unk_0x4[0x40]; }; // Size = 0x904 @@ -953,6 +953,8 @@ struct cBgS_GndChk; int dStage_RoomCheck(cBgS_GndChk* gndChk); void dStage_dt_c_roomReLoader(void* i_data, dStage_dt_c* stageDt, int param_2); void dStage_dt_c_roomLoader(void* i_data, dStage_dt_c* stageDt, int param_2); +dStage_KeepDoorInfo* dStage_GetKeepDoorInfo(); +dStage_KeepDoorInfo* dStage_GetRoomKeepDoorInfo(); inline bool dStage_roomRead_dt_c_ChkBg(u8 param_0) { return param_0 & 0x80; @@ -1014,6 +1016,18 @@ inline BOOL dStage_staginfo_GetArchiveHeap(stage_stag_info_class* p_info) { return p_info->field_0x0a & 0x1000; } +inline int dStage_stagInfo_GetGapLevel(stage_stag_info_class* pstag) { + return pstag->mGapLevel; +} + +inline int dStage_stagInfo_GetRangeUp(stage_stag_info_class* pstag) { + return pstag->mRangeUp; +} + +inline int dStage_stagInfo_GetRangeDown(stage_stag_info_class* pstag) { + return pstag->mRangeDown; +} + inline u32 dStage_sclsInfo_getSceneLayer(stage_scls_info_class* p_info) { return p_info->field_0xb & 0xF; } @@ -1042,6 +1056,30 @@ inline int dStage_FileList_dt_GetBitSw(dStage_FileList_dt_c* p_fList) { return p_fList->mBitSw; } +inline f32 dStage_FileList2_dt_GetLeftRmX(dStage_FileList2_dt_c* p_fList2) { + return p_fList2->mLeftRmX; +} + +inline f32 dStage_FileList2_dt_GetRightRmX(dStage_FileList2_dt_c* p_fList2) { + return p_fList2->mRightRmX; +} + +inline f32 dStage_FileList2_dt_GetInnerRmZ(dStage_FileList2_dt_c* p_fList2) { + return p_fList2->mInnerRmZ; +} + +inline f32 dStage_FileList2_dt_GetFrontRmZ(dStage_FileList2_dt_c* p_fList2) { + return p_fList2->mFrontRmZ; +} + +inline s8 dStage_FileList2_dt_GetMinFloorNo(dStage_FileList2_dt_c* p_fList2) { + return p_fList2->mMinFloorNo; +} + +inline s8 dStage_FileList2_dt_GetMaxFloorNo(dStage_FileList2_dt_c* p_fList2) { + return p_fList2->mMaxFloorNo; +} + inline int dStage_MapEvent_dt_c_getEventSCutSW(dStage_MapEvent_dt_c* event) { return event->field_0x8 & 1; } diff --git a/include/d/d_tresure.h b/include/d/d_tresure.h index cc9567ad829..8e5d134d0b7 100644 --- a/include/d/d_tresure.h +++ b/include/d/d_tresure.h @@ -15,12 +15,13 @@ public: /* 0x10 */ u8 mSwBit; /* 0x11 */ u8 mType; /* 0x12 */ u8 mArg2; - /* 0x13 */ u8 mAngleY; + /* 0x13 */ s8 mAngleY; }; class typeGroupData_c { public: data_s* getDataPointer() { return &mData; } + const data_s* getConstDataPointer() const { return &mData; } typeGroupData_c* getNextDataPointer() const { return mNextData; } void setNextDataPointer(typeGroupData_c* data) { mNextData = data; } void setTypeGroupNo(u8 no) { mTypeGroupNo = no; } @@ -32,6 +33,7 @@ public: void setPos(const Vec& pos) { mData.mPos = pos; } u8 getSwBit() const { return mData.mSwBit; } const Vec* getPos() const { return &mData.mPos; } + int getAngleY() const { return mData.mAngleY; } /* 0x00 */ data_s mData; /* 0x14 */ typeGroupData_c* mNextData; diff --git a/include/d/map/d_map_path.h b/include/d/map/d_map_path.h index 23b511d6ae0..670b1724416 100644 --- a/include/d/map/d_map_path.h +++ b/include/d/map/d_map_path.h @@ -84,6 +84,19 @@ public: class dRenderingFDAmap_c : public dRenderingMap_c { public: + dRenderingFDAmap_c() { + field_0x4 = NULL; + field_0x8 = 0.0f; + field_0xc = 0.0f; + field_0x10 = 0.0f; + field_0x14 = 0.0f; + mCmPerTexel = 0.0f; + field_0x1c = 0; + field_0x1e = 0; + field_0x20 = 0; + field_0x22 = 0; + } + /* 8003CE78 */ void setTevSettingNonTextureDirectColor() const; /* 8003CF40 */ void setTevSettingIntensityTextureToCI() const; /* 8003D0AC */ void drawBack() const; @@ -95,8 +108,14 @@ public: /* 8003D68C */ virtual GXColor* getDecoLineColor(int, int); /* 8003D6B8 */ virtual s32 getDecorationLineWidth(int); -private: - /* 0x04 */ void* field_0x4; + bool isDrawAreaCheck(const Vec& param_0) { + return (param_0.x >= field_0x10 - field_0x8 * 2.0f && + param_0.x <= field_0x10 + field_0x8 * 2.0f) && + (param_0.z >= field_0x14 - field_0xc * 2.0f && + param_0.z <= field_0x14 + field_0xc * 2.0f); + } + + /* 0x04 */ u8* field_0x4; /* 0x08 */ f32 field_0x8; /* 0x0C */ f32 field_0xc; /* 0x10 */ f32 field_0x10; @@ -115,6 +134,8 @@ struct dMpath_n { /* 8003C8F4 */ void remove(); /* 8003D740 */ ~dTexObjAggregate_c() { remove(); }; + GXTexObj* getTexObjPointer(int i_no) { return mp_texObj[i_no]; } + dTexObjAggregate_c() { for (int i = 0; i < 7; i++) { mp_texObj[i] = NULL; diff --git a/include/d/map/d_map_path_dmap.h b/include/d/map/d_map_path_dmap.h index 210d09079f2..957afae8b6d 100644 --- a/include/d/map/d_map_path_dmap.h +++ b/include/d/map/d_map_path_dmap.h @@ -8,16 +8,16 @@ class dMpath_c { public: - /* 8003F758 */ static u8 isExistMapPathData(); - /* 8003F760 */ void getTopBottomFloorNo(s8*, s8*); + /* 8003F758 */ static bool isExistMapPathData(); + /* 8003F760 */ static int getTopBottomFloorNo(s8*, s8*); /* 8003F7E8 */ static void createWork(); - /* 8003FA40 */ void setPointer(s8, void*, int); - /* 8003F810 */ void setPointer(dDrawPath_c::room_class*, s8*, s8*); + /* 8003FA40 */ static void setPointer(s8, void*, int); + /* 8003F810 */ static void setPointer(dDrawPath_c::room_class*, s8*, s8*); /* 8003FB70 */ static void create(); - /* 8003FBD0 */ void reset(); - /* 8003FC70 */ void remove(); + /* 8003FBD0 */ static void reset(); + /* 8003FC70 */ static void remove(); - static u8 mLayerList[4]; + static dDrawPath_c::room_class** mLayerList; // this doesn't seem right, but can't figure it out atm static f32 mMinX; static f32 mMaxX; static f32 mMinZ; @@ -26,33 +26,59 @@ public: static f32 mAllCenterZ; static f32 mAllSizeX; static f32 mAllSizeZ; + static s8 mBottomFloorNo; + static s8 mTopFloorNo; }; struct dMapInfo_n { - /* 8003ECA0 */ bool chkGetCompass(); - /* 8003ECD8 */ bool chkGetMap(); + /* 8003ECA0 */ static bool chkGetCompass(); + /* 8003ECD8 */ static bool chkGetMap(); /* 8003ED10 */ static bool isVisitedRoom(int); /* 8003ED60 */ static void correctionOriginPos(s8, Vec*); /* 8003EDC0 */ static void offsetPlus(dStage_FileList2_dt_c const*, Vec*); /* 8003EDEC */ static void rotAngle(dStage_FileList2_dt_c const*, Vec*); /* 8003EE5C */ static Vec getMapPlayerPos(); - /* 8003EF20 */ void getMapPlayerAngleY(); - /* 8003EF70 */ void getConstRestartIconPointer(); - /* 8003F02C */ void getMapRestartPos(); - /* 8003F0F8 */ void getMapRestartAngleY(); - /* 8003F19C */ void getRoomCenter(int, f32*, f32*); - /* 8003F1F4 */ void getRoomMinMaxXZ(int, f32*, f32*, f32*, f32*); - /* 8003F24C */ void getFloorParameter(f32, s8*, f32*, f32*, f32*, f32*); + /* 8003EF20 */ static s16 getMapPlayerAngleY(); + /* 8003EF70 */ static const dTres_c::typeGroupData_c* getConstRestartIconPointer(); + /* 8003F02C */ static Vec getMapRestartPos(); + /* 8003F0F8 */ static s16 getMapRestartAngleY(); + /* 8003F19C */ static void getRoomCenter(int, f32*, f32*); + /* 8003F1F4 */ static void getRoomMinMaxXZ(int, f32*, f32*, f32*, f32*); + /* 8003F24C */ static void getFloorParameter(f32, s8*, f32*, f32*, f32*, f32*); +}; + +class dMapInfo_c { +public: + /* 8003F40C */ static s8 calcFloorNo(f32, bool, int); + /* 8003F570 */ static s8 calcNowStayFloorNo(f32, bool); + /* 8003F6C8 */ static void move(int, f32); + /* 8003F6FC */ static void init(); + /* 8003F714 */ static void reset(); + /* 8003F734 */ static void create(); + /* 8003F754 */ static void remove(); + + static int mNextRoomNo; + static int mNowStayRoomNo; + static s8 mNowStayFloorNo; + static u8 mNowStayFloorNoDecisionFlg; }; class renderingDAmap_c : public dRenderingFDAmap_c { public: - /* 8003FCA4 */ void calcFloorNoForObjectByMapPathRend(f32, int) const; + renderingDAmap_c() { + mRoomNo = 0; + field_0x28 = 0; + mRoomNoSingle = 0; + mRenderedFloor = 0; + mIsDraw = false; + } + + /* 8003FCA4 */ s8 calcFloorNoForObjectByMapPathRend(f32, int) const; /* 8003FCC8 */ void init(u8*, u16, u16, u16, u16); /* 8003FD08 */ void entry(f32, f32, f32, int, s8); /* 8003FE6C */ void setSingleRoomSetting(); - /* 8003FFF4 */ void getFirstDrawRoomNo(); - /* 80040094 */ void getNextDrawRoomNo(int); + /* 8003FFF4 */ int getFirstDrawRoomNo(); + /* 80040094 */ int getNextDrawRoomNo(int); /* 8003FE18 */ virtual void draw(); /* 8002B150 */ virtual ~renderingDAmap_c(); @@ -65,27 +91,26 @@ public: /* 800402C0 */ virtual bool isDrawPath(); /* 8003FE4C */ virtual GXColor* getBackColor() const; /* 800402E0 */ virtual bool getFirstDrawLayerNo(); - /* 800402E8 */ virtual void getNextDrawLayerNo(int); - /* 800409E0 */ virtual void isDrawIconSingle(dTres_c::data_s const*, int, int, bool, bool, + /* 800402E8 */ virtual int getNextDrawLayerNo(int); + /* 800409E0 */ virtual bool isDrawIconSingle(dTres_c::data_s const*, int, int, bool, bool, Vec const*) const; - /* 80040AE4 */ virtual void getIconGroupNumber(u8) const; - virtual void hasMap() const = 0; - virtual void isRendAllRoom() const = 0; - virtual void isRendDoor() const = 0; + /* 80040AE4 */ virtual int getIconGroupNumber(u8) const; + virtual bool hasMap() const = 0; + virtual bool isRendAllRoom() const = 0; + virtual bool isRendDoor() const = 0; virtual bool isCheckFloor() const = 0; - virtual void isDrawIconSingle2(dTres_c::data_s const*, bool, bool, int) const = 0; - /* 8003FFEC */ virtual void getRoomNoSingle(); - /* 8003FE70 */ virtual void isDrawRoom(int, int) const; - /* 800409B4 */ virtual void isDrawRoomIcon(int, int) const; + virtual bool isDrawIconSingle2(dTres_c::data_s const*, bool, bool, int) const = 0; + /* 8003FFEC */ virtual int getRoomNoSingle(); + /* 8003FE70 */ virtual bool isDrawRoom(int, int) const; + /* 800409B4 */ virtual bool isDrawRoomIcon(int, int) const; - bool isDraw() const { return mDraw; } + bool isDraw() const { return mIsDraw; } -private: - /* 0x24 */ int field_0x24; + /* 0x24 */ int mRoomNo; /* 0x28 */ int field_0x28; /* 0x2C */ int mRoomNoSingle; - /* 0x30 */ u8 field_0x30; - /* 0x31 */ bool mDraw; + /* 0x30 */ s8 mRenderedFloor; + /* 0x31 */ bool mIsDraw; }; // Size: 0x34 class stage_tgsc_data_class; @@ -95,7 +120,7 @@ public: /* 80040574 */ void drawDoor1(); /* 800405B8 */ void drawDoor2(); /* 800405FC */ void drawDoorCommon(stage_tgsc_data_class const*, int, bool); - /* 80040710 */ void checkDispDoorS(int, int, f32); + /* 80040710 */ bool checkDispDoorS(int, int, f32); /* 80040838 */ void drawNormalDoorS(stage_tgsc_data_class const*, int, int, bool); /* 8002B0B4 */ virtual ~renderingPlusDoor_c(); @@ -115,11 +140,12 @@ public: /* 8002B008 */ virtual ~renderingPlusDoorAndCursor_c(); /* 800402FC */ virtual void afterDrawPath(); - /* 80040ADC */ virtual void getIconPosition(dTres_c::typeGroupData_c*) const; - /* 80040A94 */ virtual void getFirstData(u8); - /* 80040AB8 */ virtual void getNextData(dTres_c::typeGroupData_c*); - virtual void getPlayerCursorSize() = 0; - virtual void getRestartCursorSize() = 0; + virtual f32 getIconSize(u8) const = 0; + /* 80040ADC */ virtual const Vec* getIconPosition(dTres_c::typeGroupData_c*) const; + /* 80040A94 */ virtual dTres_c::typeGroupData_c* getFirstData(u8); + /* 80040AB8 */ virtual dTres_c::typeGroupData_c* getNextData(dTres_c::typeGroupData_c*); + virtual f32 getPlayerCursorSize() = 0; + virtual f32 getRestartCursorSize() = 0; }; #endif /* D_MAP_D_MAP_PATH_DMAP_H */ diff --git a/include/d/meter/d_meter_map.h b/include/d/meter/d_meter_map.h index 2cdc3ac04f2..33b0e506b18 100644 --- a/include/d/meter/d_meter_map.h +++ b/include/d/meter/d_meter_map.h @@ -27,20 +27,20 @@ public: /* 800289F0 */ virtual void rendering(dDrawPath_c::room_class const*); /* 80028960 */ virtual void beforeDrawPath(); /* 800289D0 */ virtual void afterDrawPath(); - /* 80028FB4 */ virtual void getDecoLineColor(int, int); - /* 80028CF4 */ virtual void getDecorationLineWidth(int); - /* 80029058 */ virtual void getIconGroupNumber(u8) const; - /* 80029078 */ virtual void hasMap() const; - /* 8002911C */ virtual void isRendAllRoom() const; - /* 800290C0 */ virtual void isRendDoor() const; + /* 80028FB4 */ virtual GXColor* getDecoLineColor(int, int); + /* 80028CF4 */ virtual s32 getDecorationLineWidth(int); + /* 80029058 */ virtual int getIconGroupNumber(u8) const; + /* 80029078 */ virtual bool hasMap() const; + /* 8002911C */ virtual bool isRendAllRoom() const; + /* 800290C0 */ virtual bool isRendDoor() const; /* 80029104 */ virtual bool isCheckFloor() const; - /* 80029190 */ virtual void isDrawIconSingle2(dTres_c::data_s const*, bool, bool, int) const; + /* 80029190 */ virtual bool isDrawIconSingle2(dTres_c::data_s const*, bool, bool, int) const; /* 8002910C */ virtual bool isRendRestart() const; /* 80029114 */ virtual bool isRendCursor() const; /* 8002B000 */ virtual bool isRendIcon() const; - /* 800284BC */ virtual void getIconSize(u8) const; - /* 80028B04 */ virtual void getPlayerCursorSize(); - /* 80028B10 */ virtual void getRestartCursorSize(); + /* 800284BC */ virtual f32 getIconSize(u8) const; + /* 80028B04 */ virtual f32 getPlayerCursorSize(); + /* 80028B10 */ virtual f32 getRestartCursorSize(); virtual void setAmapPaletteColor(int, u8, u8, u8, u8) = 0; virtual bool isSpecialOutline() = 0; @@ -70,13 +70,13 @@ public: /* 8002AF20 */ virtual ~dMap_c(); /* 800296EC */ virtual bool isDrawType(int); /* 80028DF4 */ virtual GXColor* getColor(int); - /* 800296F8 */ virtual void isRendAllRoom() const; - /* 8002A254 */ virtual void getRoomNoSingle(); - /* 8002A1DC */ virtual void isDrawRoom(int, int) const; - /* 8002A294 */ virtual void isDrawRoomIcon(int, int) const; - /* 80029038 */ virtual void getIconPosition(dTres_c::typeGroupData_c*) const; - /* 8002ABAC */ virtual void getFirstData(u8); - /* 8002ABCC */ virtual void getNextData(dTres_c::typeGroupData_c*); + /* 800296F8 */ virtual bool isRendAllRoom() const; + /* 8002A254 */ virtual int getRoomNoSingle(); + /* 8002A1DC */ virtual bool isDrawRoom(int, int) const; + /* 8002A294 */ virtual bool isDrawRoomIcon(int, int) const; + /* 80029038 */ virtual const Vec* getIconPosition(dTres_c::typeGroupData_c*) const; + /* 8002ABAC */ virtual dTres_c::typeGroupData_c* getFirstData(u8); + /* 8002ABCC */ virtual dTres_c::typeGroupData_c* getNextData(dTres_c::typeGroupData_c*); /* 8002A148 */ virtual void setAmapPaletteColor(int, u8, u8, u8, u8); /* 80029744 */ virtual bool isSpecialOutline(); diff --git a/include/dolphin/gx/GX.h b/include/dolphin/gx/GX.h index 978639b8ade..d1d57bdd396 100644 --- a/include/dolphin/gx/GX.h +++ b/include/dolphin/gx/GX.h @@ -45,9 +45,14 @@ volatile PPCWGPipe GXFIFO : 0xCC008000; #define GFX_FIFO(T) (*(volatile T*)0xCC008000) inline void GXPosition3f32(f32 x, f32 y, f32 z) { - GFX_FIFO(f32) = x; - GFX_FIFO(f32) = y; - GFX_FIFO(f32) = z; + GXFIFO.f32 = x; + GXFIFO.f32 = y; + GXFIFO.f32 = z; +} + +inline void GXPosition2f32(f32 x, f32 z) { + GXFIFO.f32 = x; + GXFIFO.f32 = z; } inline void GXColor1u32(u32 c) { @@ -64,6 +69,10 @@ inline void GXTexCoord2u8(u8 s, u8 t) { GFX_FIFO(u8) = t; } +inline void GXTexCoord1x8(u8 s) { + GFX_FIFO(u8) = s; +} + inline void GXPosition2u16(u16 x, u16 y) { GFX_FIFO(u16) = x; GFX_FIFO(u16) = y; diff --git a/include/m_Do/m_Do_mtx.h b/include/m_Do/m_Do_mtx.h index 642cf2fdbed..f4829044d01 100644 --- a/include/m_Do/m_Do_mtx.h +++ b/include/m_Do/m_Do_mtx.h @@ -19,6 +19,8 @@ void mDoMtx_XrotM(Mtx mtx, s16 x); void mDoMtx_YrotM(Mtx, s16); void mDoMtx_MtxToRot(CMtxP, csXyz*); void mDoMtx_lookAt(f32 (*param_0)[4], Vec const* param_1, Vec const* param_2, s16 param_3); +void mDoMtx_lookAt(f32 (*param_0)[4], Vec const* param_1, Vec const* param_2, Vec const* param_3, + s16 param_4); void mDoMtx_concatProjView(f32 const (*param_0)[4], f32 const (*param_1)[4], f32 (*param_2)[4]); void mDoMtx_ZrotM(Mtx mtx, s16 z); @@ -35,7 +37,7 @@ inline void mDoMtx_copy(const Mtx src, Mtx dst) { } inline void mDoMtx_trans(Mtx m, f32 x, f32 y, f32 z) { - PSMTXTrans(m,x,y,z); + PSMTXTrans(m, x, y, z); } inline void mDoMtx_multVecZero(MtxP param_0, Vec* param_1) { @@ -66,7 +68,8 @@ public: static void scaleS(f32 x, f32 y, f32 z) { PSMTXScale(now, x, y, z); } static void multVec(const Vec* a, Vec* b) { PSMTXMultVec(now, a, b); } static void multVecSR(const Vec* a, Vec* b) { PSMTXMultVecSR(now, a, b); } - static void multVecZero(Vec* v) { mDoMtx_multVecZero(now, v); } + static void multVecZero(Vec* v) { mDoMtx_multVecZero(now, v); } + static void multVecArray(const Vec* src, Vec* dst, u32 count) { PSMTXMultVecArray(now, src, dst, count); } static void XYZrotS(s16 x, s16 y, s16 z) { mDoMtx_XYZrotS(now, x, y, z); } static void XYZrotM(s16 x, s16 y, s16 z) { mDoMtx_XYZrotM(now, x, y, z); } static void ZXYrotS(s16 x, s16 y, s16 z) { mDoMtx_ZXYrotS(now, x, y, z); } diff --git a/src/d/d_stage.cpp b/src/d/d_stage.cpp index a502a41ddcb..5b099442a4e 100644 --- a/src/d/d_stage.cpp +++ b/src/d/d_stage.cpp @@ -448,7 +448,7 @@ static u8 dStage_isBossStage(dStage_dt_c* stageDt) { /* 80023F50-80023F84 01E890 0034+00 1/1 0/0 0/1 .text dStage_KeepDoorInfoInit__FP11dStage_dt_c */ static void dStage_KeepDoorInfoInit(dStage_dt_c* param_0) { if (dStage_isBossStage(param_0) == 0) { - DoorInfo.unk_0x0 = NULL; + DoorInfo.unk_0x0 = 0; } } @@ -471,7 +471,7 @@ dStage_KeepDoorInfo* dStage_GetRoomKeepDoorInfo() { } static void dStage_initRoomKeepDoorInfo() { - l_RoomKeepDoorInfo.unk_0x0 = NULL; + l_RoomKeepDoorInfo.unk_0x0 = 0; } /* 80024078-80024174 01E9B8 00FC+00 1/1 0/0 0/0 .text diff --git a/src/d/d_tresure.cpp b/src/d/d_tresure.cpp index 6726996672e..0480999a1d1 100644 --- a/src/d/d_tresure.cpp +++ b/src/d/d_tresure.cpp @@ -8,14 +8,6 @@ #include "dol2asm.h" #include "dolphin/types.h" -// -// Types: -// - -struct dMapInfo_c { - /* 8003F40C */ static s8 calcFloorNo(f32, bool, int); -}; - // // Forward References: // diff --git a/src/d/map/d_map.cpp b/src/d/map/d_map.cpp index 5f04dd65dcb..ed09ee976fd 100644 --- a/src/d/map/d_map.cpp +++ b/src/d/map/d_map.cpp @@ -366,8 +366,8 @@ extern "C" extern u8 g_dComIfG_gameInfo[122384]; extern "C" extern u8 g_Counter[12 + 4 /* padding */]; extern "C" u8 sincosTable___5JMath[65536]; extern "C" u32 mNextRoomNo__10dMapInfo_c; -extern "C" extern u8 data_80450E58[4]; -extern "C" extern u8 data_80450E60[4]; +extern "C" extern u8 mNowStayFloorNo__10dMapInfo_c[4]; +extern "C" extern u8 mNowStayFloorNoDecisionFlg__10dMapInfo_c[4]; extern "C" f32 mMinX__8dMpath_c; extern "C" f32 mMaxX__8dMpath_c; extern "C" f32 mMinZ__8dMpath_c; diff --git a/src/d/map/d_map_path_dmap.cpp b/src/d/map/d_map_path_dmap.cpp index 4b3aaaa8c7b..f95e1b9f9ce 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; } + +/* 8003EF20-8003EF70 039860 0050+00 1/1 1/1 0/0 .text getMapPlayerAngleY__10dMapInfo_nFv + */ +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; +} + +/* 8003EF70-8003F02C 0398B0 00BC+00 2/2 0/0 0/0 .text getConstRestartIconPointer__10dMapInfo_nFv + */ +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; +} + +/* 8003F02C-8003F0F8 03996C 00CC+00 1/1 2/2 0/0 .text getMapRestartPos__10dMapInfo_nFv */ +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; +} + +/* 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 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" -} -#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" -} -#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" -} -#pragma pop - -/* 8003F0F8-8003F19C 039A38 00A4+00 1/1 1/1 0/0 .text getMapRestartAngleY__10dMapInfo_nFv - */ -#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" -} -#pragma pop +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; -/* ############################################################################################## */ -/* 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 */; + field_0x10 = 0.0f; + field_0x14 = 0.0f; + field_0x8 = 1.0f; + field_0xc = 1.0f; + mRoomNoSingle = 0; + mRenderedFloor = 0; +} /* 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 - -/* ############################################################################################## */ -/* 80451E4C-80451E50 00044C 0004+00 1/1 0/0 0/0 .sdata2 @4264 */ -SECTION_SDATA2 static f32 lit_4264 = -5000.0f; - -/* 80451E50-80451E54 000450 0004+00 1/1 0/0 0/0 .sdata2 @4265 */ -SECTION_SDATA2 static f32 lit_4265 = 5000.0f; - -/* 80451E54-80451E58 000454 0004+00 1/1 0/0 0/0 .sdata2 @4266 */ -SECTION_SDATA2 static f32 lit_4266 = -1.0f; +#endif /* 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" +void renderingDAmap_c::preDrawPath() { + Mtx m; + Vec sp20; + Vec sp14; + Vec sp8; + + sp20.x = field_0x10; + sp20.y = field_0x14; + sp20.z = -5000.0f; + + sp14.x = field_0x10; + sp14.y = field_0x14; + sp14.z = 5000.0f; + + 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" +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; + } + + if (mRenderedFloor == calcFloorNoForObjectByMapPathRend(param_2, param_0) || + mRenderedFloor == calcFloorNoForObjectByMapPathRend(param_2, param_1)) + { + return true; + } + + return false; } -#pragma pop - -/* ############################################################################################## */ -/* 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); - -/* 80451E70-80451E74 000470 0004+00 1/1 0/0 0/0 .sdata2 @4484 */ -SECTION_SDATA2 static f32 lit_4484 = 6.0f; /* 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); - -/* 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, -}; - -/* 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, -}; /* 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" +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]); + } + + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGB, GX_F32, 0); + + l_cursorColor.r = param_2 * 4; + GXSetTevColor(GX_TEVREG0, l_cursorColor); + + 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 diff --git a/src/d/menu/d_menu_dmap_map.cpp b/src/d/menu/d_menu_dmap_map.cpp index 79abf82cc92..bcd4edaab41 100644 --- a/src/d/menu/d_menu_dmap_map.cpp +++ b/src/d/menu/d_menu_dmap_map.cpp @@ -366,8 +366,8 @@ extern "C" extern u8 g_dComIfG_gameInfo[122384]; extern "C" u8 mTypeGroupListAll__7dTres_c[204 + 4 /* padding */]; extern "C" extern u32 __float_max; extern "C" extern u8 mStayNo__20dStage_roomControl_c[4]; -extern "C" extern u8 data_80450E58[4]; -extern "C" extern u8 data_80450E60[4]; +extern "C" extern u8 mNowStayFloorNo__10dMapInfo_c[4]; +extern "C" extern u8 mNowStayFloorNoDecisionFlg__10dMapInfo_c[4]; extern "C" u8 mLayerList__8dMpath_c[4]; extern "C" f32 mAllCenterX__8dMpath_c; extern "C" f32 mAllCenterZ__8dMpath_c; diff --git a/src/d/menu/d_menu_window.cpp b/src/d/menu/d_menu_window.cpp index 245b78caf4c..df4208beb52 100644 --- a/src/d/menu/d_menu_window.cpp +++ b/src/d/menu/d_menu_window.cpp @@ -343,7 +343,7 @@ void dMw_offMenuRing() { } } -static bool dMw_isMenuRing() { +static BOOL dMw_isMenuRing() { dMw_c* menu_window = dMeter2Info_getMenuWindowClass(); if (menu_window) { @@ -739,6 +739,45 @@ SECTION_DATA static u8 init_proc[420] = { 0x00, 0x00, 0x00, 0x00, }; +/* typedef void (dMw_c::*initFunc)(u8); +SECTION_DATA initFunc init_proc[] = { + &dMw_c::key_wait_init, + &dMw_c::ring_open_init, + &dMw_c::ring_move_init, + &dMw_c::ring_close_init, + &dMw_c::collect_open_init, + &dMw_c::collect_move_init, + &dMw_c::collect_close_init, + &dMw_c::fmap_open_init, + &dMw_c::fmap_move_init, + &dMw_c::fmap_close_init, + &dMw_c::dmap_open_init, + &dMw_c::dmap_move_init, + &dMw_c::dmap_close_init, + &dMw_c::collect_save_open_init, + &dMw_c::collect_save_move_init, + &dMw_c::collect_save_close_init, + &dMw_c::collect_option_open_init, + &dMw_c::collect_option_move_init, + &dMw_c::collect_option_close_init, + &dMw_c::collect_letter_open_init, + &dMw_c::collect_letter_move_init, + &dMw_c::collect_letter_close_init, + &dMw_c::collect_fishing_open_init, + &dMw_c::collect_fishing_move_init, + &dMw_c::collect_fishing_close_init, + &dMw_c::collect_skill_open_init, + &dMw_c::collect_skill_move_init, + &dMw_c::collect_skill_close_init, + &dMw_c::collect_insect_open_init, + &dMw_c::collect_insect_move_init, + &dMw_c::collect_insect_close_init, + &dMw_c::insect_open_init, + &dMw_c::insect_open2_init, + &dMw_c::insect_move_init, + &dMw_c::insect_close_init, +}; */ + /* 803BEC4C-803BEC58 -00001 000C+00 0/1 0/0 0/0 .data @4311 */ #pragma push #pragma force_active on @@ -1120,6 +1159,45 @@ SECTION_DATA static u8 move_proc[420] = { 0x00, 0x00, 0x00, 0x00, }; +/* typedef void (dMw_c::*procFunc)(); +SECTION_DATA procFunc move_proc[] = { + &dMw_c::key_wait_proc, + &dMw_c::ring_open_proc, + &dMw_c::ring_move_proc, + &dMw_c::ring_close_proc, + &dMw_c::collect_open_proc, + &dMw_c::collect_move_proc, + &dMw_c::collect_close_proc, + &dMw_c::fmap_open_proc, + &dMw_c::fmap_move_proc, + &dMw_c::fmap_close_proc, + &dMw_c::dmap_open_proc, + &dMw_c::dmap_move_proc, + &dMw_c::dmap_close_proc, + &dMw_c::collect_save_open_proc, + &dMw_c::collect_save_move_proc, + &dMw_c::collect_save_close_proc, + &dMw_c::collect_option_open_proc, + &dMw_c::collect_option_move_proc, + &dMw_c::collect_option_close_proc, + &dMw_c::collect_letter_open_proc, + &dMw_c::collect_letter_move_proc, + &dMw_c::collect_letter_close_proc, + &dMw_c::collect_fishing_open_proc, + &dMw_c::collect_fishing_move_proc, + &dMw_c::collect_fishing_close_proc, + &dMw_c::collect_skill_open_proc, + &dMw_c::collect_skill_move_proc, + &dMw_c::collect_skill_close_proc, + &dMw_c::collect_insect_open_proc, + &dMw_c::collect_insect_move_proc, + &dMw_c::collect_insect_close_proc, + &dMw_c::insect_open_proc, + &dMw_c::insect_open2_proc, + &dMw_c::insect_move_proc, + &dMw_c::insect_close_proc, +}; */ + /* 801FA13C-801FA220 1F4A7C 00E4+00 2/0 0/0 0/0 .text key_wait_init__5dMw_cFUc */ void dMw_c::key_wait_init(u8 menu_status) { dMeter2Info_setWindowStatus(0); @@ -1238,12 +1316,13 @@ void dMw_c::collect_move_init(u8 menu_status) { /* 801FA46C-801FA538 1F4DAC 00CC+00 1/0 0/0 0/0 .text collect_close_init__5dMw_cFUc */ void dMw_c::collect_close_init(u8 param_0) { - if (mpMenuCollect->getSubWindowOpenCheck() != 1 && - mpMenuCollect->getSubWindowOpenCheck() != 2) { + if (mpMenuCollect->getSubWindowOpenCheck() != 1 && mpMenuCollect->getSubWindowOpenCheck() != 2) + { if (mpMenuCollect->getSubWindowOpenCheck() == 3 || mpMenuCollect->getSubWindowOpenCheck() == 4 || mpMenuCollect->getSubWindowOpenCheck() == 5 || - mpMenuCollect->getSubWindowOpenCheck() == 6) { + mpMenuCollect->getSubWindowOpenCheck() == 6) + { Z2GetAudioMgr()->mSeMgr.seStart(Z2SE_SY_MENU_SUB_IN, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); } else { @@ -1495,8 +1574,8 @@ void dMw_c::collect_move_proc() { if (mpMenuCollect->getSubWindowOpenCheck()) { mMenuStatus = COLLECT_CLOSE; } else { - if ((dMw_isPush_S_Button() && !mpMenuCollect->isKeyCheck()) || - mpMenuCollect->isOutCheck()) { + if ((dMw_isPush_S_Button() && !mpMenuCollect->isKeyCheck()) || mpMenuCollect->isOutCheck()) + { mMenuStatus = COLLECT_CLOSE; } else { mpMenuCollect->_move(); @@ -2033,7 +2112,8 @@ void dMw_c::dMw_fmap_create() { if (dMeter2Info_getMapKeyDirection() == 0x400 || dMeter2Info_getMapStatus() == 3 || dMeter2Info_getMapStatus() == 4 || dMeter2Info_getMapStatus() == 5 || dMeter2Info_getMapStatus() == 7 || dMeter2Info_getMapStatus() == 8 || - dMeter2Info_getMapStatus() == 9 || dMeter2Info_getMapStatus() == 6) { + dMeter2Info_getMapStatus() == 9 || dMeter2Info_getMapStatus() == 6) + { tmp = 1; } else if (dMeter2Info_getMapKeyDirection() == 0x200) { tmp = 3; @@ -2330,7 +2410,8 @@ BOOL dMw_c::dMw_isPush_S_Button() { if (isFadeNowCheck()) { if (daPy_getLinkPlayerActorClass()->getClothesChangeWaitTimer() == 0 && daPy_getLinkPlayerActorClass()->getShieldChangeWaitTimer() == 0 && - daPy_getLinkPlayerActorClass()->getSwordChangeWaitTimer() == 0) { + daPy_getLinkPlayerActorClass()->getSwordChangeWaitTimer() == 0) + { if (dMw_START_TRIGGER() || dMw_B_TRIGGER()) { return true; } @@ -2414,7 +2495,8 @@ bool dMw_c::isEventCheck() { dMeter2Info_getMapStatus() == 7 || dMeter2Info_getMapStatus() == 8 || dMeter2Info_getMapStatus() == 9 || dMeter2Info_getMapStatus() == 6 || dMeter2Info_getMapStatus() == 3 || dMeter2Info_isMenuInForce(2) || - dMeter2Info_getPauseStatus() == 8)) { + dMeter2Info_getPauseStatus() == 8)) + { return false; } return true; @@ -2493,6 +2575,47 @@ int dMw_c::_create() { } /* 801FD2D8-801FD450 1F7C18 0178+00 1/1 0/0 0/0 .text _execute__5dMw_cFv */ +// matches with sinit +#ifdef NONMATCHING +int dMw_c::_execute() { + if (field_0x151 != 0) { + field_0x151--; + } + + JKRHeap* old_heap = mDoExt_setCurrentHeap(mpHeap); + u8 old_proc = mMenuStatus; + mpStick->checkTrigger(); + + if (dMw_isMenuRing()) { + mpCStick->checkTrigger(); + checkCStickTrigger(); + } + + if (i_dComIfGp_event_runCheck()) { + field_0x148 = 5; + } else if (field_0x148 > 0) { + field_0x148--; + } else { + field_0x148 = 0; + } + + (this->*move_proc[mMenuStatus])(); + if (mMenuStatus != old_proc) { + (this->*init_proc[mMenuStatus])(old_proc); + } + + if (!mDoCPd_c::getHoldLockL(PAD_1) && dMw_isButtonBit(1)) { + dMw_offButtonBit(1); + } + + if (!mDoCPd_c::getHoldLockR(PAD_1) && dMw_isButtonBit(2)) { + dMw_offButtonBit(2); + } + + mDoExt_setCurrentHeap(old_heap); + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -2501,6 +2624,7 @@ asm int dMw_c::_execute() { #include "asm/d/menu/d_menu_window/_execute__5dMw_cFv.s" } #pragma pop +#endif /* 801FD450-801FD67C 1F7D90 022C+00 1/1 0/0 0/0 .text _draw__5dMw_cFv */ int dMw_c::_draw() { @@ -2646,8 +2770,7 @@ static int dMw_Create(msg_class* p_menu) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __sinit_d_menu_window_cpp() { - nofralloc +asm void __sinit_d_menu_window_cpp(){nofralloc #include "asm/d/menu/d_menu_window/__sinit_d_menu_window_cpp.s" } #pragma pop