diff --git a/include/d/d_map.h b/include/d/d_map.h index 4e687d564..14696640b 100644 --- a/include/d/d_map.h +++ b/include/d/d_map.h @@ -6,13 +6,16 @@ #include "d/d_stage.h" struct ResTIMG; -struct dmap_dmap_tlut_s; class fopAc_ac_c; struct stage_map_info_class; const int AGB_POINT_TYPE_NUM = 21; const int DSP_ENABLE_BOTH_SIZE = 3; +struct dmap_dmap_tlut_s { + u16 field_0x0[16]; +}; + struct map_dt_c { u16 field_0x0; u16 field_0x2; @@ -32,7 +35,7 @@ struct dMap_CollectPoint { f32 field_0x4; f32 field_0x8; s16 field_0xc; - u8 field_0xe; + s8 field_0xe; u8 field_0xf; u8 field_0x10; u8 field_0x11; @@ -40,7 +43,7 @@ struct dMap_CollectPoint { u8 field_0x13; u8 field_0x14; u8 field_0x15; - u8 field_0x16; + s8 field_0x16; u8 field_0x17; }; @@ -52,6 +55,12 @@ struct FmapChkPnt { /* 0x6 */ u8 field_0x6; }; // Size: 0x8 +// fake name +struct dMap_FmapChkPnt { + u32 field_0x0; + FmapChkPnt field_0x4[]; +}; + class dMap_2DMtMapSpcl_tex_c { public: dMap_2DMtMapSpcl_tex_c() {} @@ -61,9 +70,9 @@ public: /* 0x00 */ u8 field_0x0; /* 0x01 */ u8 field_0x1; - /* 0x04 */ GXTexObj field_0x4; - /* 0x24 */ GXTlutObj field_0x24; - /* 0x30 */ GXColor field_0x30; + /* 0x04 */ GXTexObj mTexObj; + /* 0x24 */ GXTlutObj mTlutObj; + /* 0x30 */ GXColor mColor; /* 0x34 */ f32 field_0x34; /* 0x38 */ f32 field_0x38; /* 0x3C */ f32 field_0x3c; @@ -335,19 +344,29 @@ class dMap_Dmap_c : public dDlst_base_c { public: virtual ~dMap_Dmap_c() {} - void changeTlutDblBufNo() {} - void getLoadTlutDblBufNo() {} - void setTlutDblBufNo(int) {} + void changeTlutDblBufNo() { + mNowTlutDblBufNo = 1 - mNowTlutDblBufNo; + JUT_ASSERT(357, (mNowTlutDblBufNo == 0) || (mNowTlutDblBufNo == 1)); + } - void setAlpha(u8 alpha) { field_0x2B6 = alpha; } + int getLoadTlutDblBufNo() { + JUT_ASSERT(360, (mNowTlutDblBufNo == 0) || (mNowTlutDblBufNo == 1)); + return mNowTlutDblBufNo; + } + + void setTlutDblBufNo(int) { + JUT_ASSERT(368, (mNowTlutDblBufNo == 0) || (mNowTlutDblBufNo == 1)); + } + + void setAlpha(u8 alpha) { field_0x2b6 = alpha; } void setArchive(JKRArchive* i_arc) { mpArc = i_arc; } void setMapPos(s16 x, s16 y) { field_0x364 = x; field_0x366 = y; } void setMaskPos(s16 x, s16 y) { - field_0x35C = x; - field_0x35E = y; + field_0x35c = x; + field_0x35e = y; } void setTlut(dmap_dmap_tlut_s*, u8, u8, u8, f32); @@ -356,17 +375,37 @@ public: virtual void draw(); public: - /* 0x004 */ u8 field_0x4[0x2A0 - 0x4]; + /* 0x004 */ u8 field_0x4[0x20 - 0x4]; + /* 0x020 */ dmap_dmap_tlut_s field_0x20[2][10]; /* 0x2A0 */ JKRArchive* mpArc; - /* 0x2A4 */ u8 field_0x2A4[0x2B6 - 0x2A4]; - /* 0x2B6 */ u8 field_0x2B6; - /* 0x2B7 */ u8 field_0x2B7[0x35C - 0x2B7]; - /* 0x35C */ s16 field_0x35C; - /* 0x35E */ s16 field_0x35E; - /* 0x360 */ u8 field_0x360[0x364 - 0x360]; + /* 0x2A4 */ ResTIMG* mImageP; + /* 0x2A8 */ ResTIMG* mImageSeetP; + /* 0x2AC */ ResTIMG* mImageGridP; + /* 0x2B0 */ ResTIMG* field_0x2b0; + /* 0x2B4 */ u8 field_0x2b4; + /* 0x2B5 */ u8 field_0x2b5; + /* 0x2B6 */ u8 field_0x2b6; + /* 0x2B7 */ u8 mNowTlutDblBufNo; + /* 0x2B8 */ u8 field_0x2b8; + /* 0x2B9 */ u8 field_0x2b9; + /* 0x2BA */ u8 field_0x2ba; + /* 0x2BB */ s8 field_0x2bb[10][16]; + /* 0x35C */ s16 field_0x35c; + /* 0x35E */ s16 field_0x35e; + /* 0x360 */ s16 field_0x360; + /* 0x362 */ s16 mMaskHeight; /* 0x364 */ s16 field_0x364; /* 0x366 */ s16 field_0x366; - /* 0x368 */ u8 field_0x368[0x368 + 0x2B8 - 0x368]; + /* 0x368 */ s16 field_0x368; + /* 0x36A */ s16 field_0x36a; + /* 0x36C */ s16 field_0x36c; + /* 0x36E */ u16 field_0x36e; + /* 0x370 */ GXTexObj field_0x370[10]; + /* 0x4B0 */ GXTlutObj field_0x4b0[2][10]; + /* 0x5A0 */ GXTexObj field_0x5a0; + /* 0x5C0 */ GXTexObj field_0x5c0; + /* 0x5E0 */ GXTexObj field_0x5e0; + /* 0x600 */ GXTexObj field_0x600; }; enum { diff --git a/include/m_Do/m_Do_gba_com.h b/include/m_Do/m_Do_gba_com.h index c38782674..61f922c11 100644 --- a/include/m_Do/m_Do_gba_com.h +++ b/include/m_Do/m_Do_gba_com.h @@ -139,12 +139,12 @@ inline void mDoGaC_GbaReboot() { g_mDoGaC_gbaCom.mDoGaC_GbaReboot(); } -inline void mDoGac_SendDataSet(u32* param_0, int param_1, u8 param_2, u32 param_3) { - g_mDoGaC_gbaCom.mDoGaC_SendDataSet(param_0, param_1, param_2, param_3); +inline int mDoGac_SendDataSet(u32* param_0, int param_1, u8 param_2, u32 param_3) { + return g_mDoGaC_gbaCom.mDoGaC_SendDataSet(param_0, param_1, param_2, param_3); } -inline void mDoGac_SendEndCheck(u8 param_0) { - g_mDoGaC_gbaCom.mDoGaC_SendEndCheck(param_0); +inline int mDoGac_SendEndCheck(u8 param_0) { + return g_mDoGaC_gbaCom.mDoGaC_SendEndCheck(param_0); } inline void mDoGaC_SendEntry(u8 param_0, u32 param_1) { @@ -175,4 +175,4 @@ inline void mDoGaC_ConnectSleep() { g_mDoGaC_gbaCom.mDoGaC_ConnectSleep(); } -#endif /* M_DO_GBA_COM_H */ \ No newline at end of file +#endif /* M_DO_GBA_COM_H */ diff --git a/src/d/d_map.cpp b/src/d/d_map.cpp index 94e061b10..fd0068da1 100644 --- a/src/d/d_map.cpp +++ b/src/d/d_map.cpp @@ -386,21 +386,18 @@ u8 dMap_GetFloorNo(dStage_dt_c* stag, f32 param_2) { /* 80045C90-80045E54 .text getRoomDspFloorNo__15dMap_RoomInfo_cFUci */ u8 dMap_RoomInfo_c::getRoomDspFloorNo(u8 i_no, BOOL search) { - /* Nonmatching */ s32 no = i_no - Floor_Base; #if VERSION > VERSION_DEMO JUT_ASSERT(1794, Floor_Valid(no)); #endif - s32 dspFloorNo = field_0x2[no]; - if (search) { - if (!IsFloorNo(dspFloorNo)) { - while (!IsFloorNo(dspFloorNo) && --no >= 0) { + u8 dspFloorNo = field_0x2[no]; + if (search && !IsFloorNo(dspFloorNo)) { + while (!IsFloorNo(dspFloorNo) && --no >= 0) { #if VERSION > VERSION_DEMO - JUT_ASSERT(1807, Floor_Valid(no)); + JUT_ASSERT(1807, Floor_Valid(no)); #endif - dspFloorNo = field_0x2[no]; - } + dspFloorNo = field_0x2[no]; } if (!IsFloorNo(dspFloorNo)) { @@ -410,10 +407,10 @@ u8 dMap_RoomInfo_c::getRoomDspFloorNo(u8 i_no, BOOL search) { #endif dspFloorNo = field_0x2[no]; } - } - if (!IsFloorNo(dspFloorNo)) { - dspFloorNo = 255; + if (!IsFloorNo(dspFloorNo)) { + dspFloorNo = 255; + } } } @@ -463,11 +460,11 @@ u8 dMap_RoomInfo_c::getRoomImage(int i_roomNo, u8 param_2, int param_3, ResTIMG* while (param_3 && !r24 && IsFloorNo(r21 = r23)) { char resourceName[0x20]; sprintf(resourceName, "s%d.bti", r21); - r28 = (ResTIMG*)dComIfG_getObjectRes(archiveName, resourceName); + r28 = (ResTIMG*)dComIfG_getStageRes(archiveName, resourceName); sprintf(resourceName, "m%d.bti", r21); - r27 = (ResTIMG*)dComIfG_getObjectRes(archiveName, resourceName); + r27 = (ResTIMG*)dComIfG_getStageRes(archiveName, resourceName); sprintf(resourceName, "m%d.amp", r21); - r26 = (map_dt_c*)dComIfG_getObjectRes(archiveName, resourceName); + r26 = (map_dt_c*)dComIfG_getStageRes(archiveName, resourceName); r25 = NULL; r21 = r23; u8 r29; @@ -533,7 +530,9 @@ BOOL dMap_RoomInfo_c::makeRoomDspFloorNoTbl(int i_roomNo) { for (int j = 0; j < int(ARRAY_SIZE(floorData->field_0x05)); j++) { if (i_roomNo == floorData->field_0x05[j]) { u8 r22 = getRoomImage(i_roomNo, floorNo, 1, NULL, NULL, NULL, NULL, NULL); +#if VERSION > VERSION_DEMO JUT_ASSERT(2195, ((floorNo - Floor_B5F) >= 0) && ((floorNo - Floor_B5F) < (Floor_5F - Floor_B5F + 1))) +#endif field_0x2[floorNo - Floor_B5F] = r22; } } @@ -721,29 +720,32 @@ BOOL dMap_RoomInfo_c::deleteRoom() { bool dMap_RoomInfo_c::enlagementSizeTextureCordCalc(f32* param_1, f32* param_2, f32* param_3, f32* param_4, f32 param_5, f32 param_6, f32 param_7, f32 param_8, f32 param_9, f32 param_10) { /* Nonmatching */ f32 f10 = param_5 - param_6 * 0.5f; - f32 f9 = param_5 - param_6 * 0.0f; - f32 f7 = param_3[0]; + f32 f9 = param_5 + param_6 * 0.5f; + f32 f7 = *param_3; f32 f12 = (1.0f / param_9) * f7; - f32 f8 = param_4[0]; + f32 f8 = *param_4; f32 f11 = (1.0f / param_9) * f8; f32 f31 = param_8 + f12; f32 f13 = param_8 + f11; bool ret = false; if (param_9 != 0.0f || f31 <= f9 || f13 >= f10) { - param_1[0] = ((param_8 - param_5) * param_7) / param_10 + 0.5f + f12 / param_6; - param_2[0] = ((param_8 - param_5) * param_7) / param_10 + 0.5f + f11 / param_6; + f32 tmp = ((param_8 - param_5) * param_7) / param_10; + param_7 = f7; + param_10 = f8; + *param_1 = tmp + 0.5f + f12 / param_6; + *param_2 = tmp + 0.5f + f11 / param_6; if (f31 < f10) { - param_1[0] = 0.0f; - f7 = (f10 - param_8) * param_9; - param_1[0] = 0.0f; + *param_1 = 0.0f; + param_7 = (f10 - param_8) * param_9; + *param_1 = 0.0f; } if (f13 > f9) { - param_2[0] = 0.0f; - f8 = (f9 - param_8) * param_9; - param_2[0] = 0.0f; + *param_2 = 1.0f; + param_10 = (f9 - param_8) * param_9; + *param_2 = 1.0f; } - param_3[0] = f7; - param_4[0] = f8; + *param_3 = param_7; + *param_4 = param_10; ret = true; } return ret; @@ -783,10 +785,10 @@ void dMap_RoomInfo_c::roomDrawRoomEnlargementSize(int param_1, int param_2, int field_0x44->field_0x0 = 1; field_0x44->setScroll(local_ec, local_f4, local_f0 - local_ec, local_f8 - local_f4); - field_0x44->field_0x30.r = 255; - field_0x44->field_0x30.g = 255; - field_0x44->field_0x30.b = 255; - field_0x44->field_0x30.a = param_9; + field_0x44->mColor.r = 255; + field_0x44->mColor.g = 255; + field_0x44->mColor.b = 255; + field_0x44->mColor.a = param_9; field_0x30.setPos(param_1 + f30 + local_fc, param_2 + f29 + local_104, param_1 + f30 + local_100, param_2 + f29 + local_108); field_0x30.field_0x5 = 1; dComIfGd_set2DOpa(&field_0x30); @@ -870,8 +872,17 @@ dMap_RoomInfo_c* dMap_RoomInfoCtrl_c::ctrlEntryRoom(int i_no, u8 p1, int p2, u8 /* 80047A8C-80047AC4 .text deleteRoom__19dMap_RoomInfoCtrl_cFi */ bool dMap_RoomInfoCtrl_c::deleteRoom(int i_no) { dMap_RoomInfo_c* roomInfoP; - if (roomExistenceCheck(i_no, &roomInfoP)) + if (roomExistenceCheck(i_no, &roomInfoP)) { roomInfoP->deleteRoom(); + } else { +#if VERSION == VERSION_DEMO + JUT_WARN(3264, "delete room <%d> none", i_no); + for (int i = 0; i < 20; i++) { + int r7 = dMap_c::mRoomInfo[i].m_no; + JUTAssertion::setWarningMessage_f(2, __FILE__, 3266, "%2d ", r7); + } +#endif + } return FALSE; } @@ -1058,7 +1069,7 @@ int dMap_c::getKindMapType() { /* 80048340-80048370 .text remove__6dMap_cFv */ void dMap_c::remove() { - g_mDoGaC_gbaCom.mDoGaC_SendEntry(1, 1); + mDoGaC_SendEntry(1, 1); } /* 80048370-800484A4 .text setImage__6dMap_cFiif */ @@ -1120,7 +1131,7 @@ BOOL dMap_c::setNowRoom(int param_1) { /* 80048660-80048A20 .text draw__11dMap_2DSQ_cFv */ void dMap_2DSQ_c::draw() { - GXVtxAttrFmtList fmt[27]; + GXVtxAttrFmtList fmt[GX_VA_MAX_ATTR + 1]; GXGetVtxAttrFmtv(GX_VTXFMT0, fmt); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); GXClearVtxDesc(); @@ -1172,10 +1183,10 @@ void dMap_2DSQ_c::draw() { void dMap_c::mapDrawIconFree(s16 param_1, s16 param_2, u8 param_3) { if (param_3) { mIconFreeTex.setPos(param_1 - mIconFreeScale * 64.0f, param_2 - mIconFreeScale * 16.0f, param_1 + mIconFreeScale * 64.0f, param_2 + mIconFreeScale * 16.0f); - mIconFreeTexture.field_0x30.r = 255; - mIconFreeTexture.field_0x30.g = 210; - mIconFreeTexture.field_0x30.b = 0; - mIconFreeTexture.field_0x30.a = param_3; + mIconFreeTexture.mColor.r = 255; + mIconFreeTexture.mColor.g = 210; + mIconFreeTexture.mColor.b = 0; + mIconFreeTexture.mColor.a = param_3; dComIfGd_set2DOpa(&mIconFreeTex); } } @@ -1184,10 +1195,10 @@ void dMap_c::mapDrawIconFree(s16 param_1, s16 param_2, u8 param_3) { void dMap_c::mapDrawIconSelf(s16 param_1, s16 param_2, u8 param_3) { if (param_3) { mIconSelfTex.setPos(param_1 - mIconFreeScale * 64.0f, param_2 - mIconFreeScale * 16.0f, param_1 + mIconFreeScale * 64.0f, param_2 + mIconFreeScale * 16.0f); - mIconSelfTexture.field_0x30.r = 255; - mIconSelfTexture.field_0x30.g = 255; - mIconSelfTexture.field_0x30.b = 255; - mIconSelfTexture.field_0x30.a = param_3; + mIconSelfTexture.mColor.r = 255; + mIconSelfTexture.mColor.g = 255; + mIconSelfTexture.mColor.b = 255; + mIconSelfTexture.mColor.a = param_3; dComIfGd_set2DOpa(&mIconSelfTex); } } @@ -1208,10 +1219,10 @@ void dMap_c::mapDrawFrame(u8 param_1) { if (param_1) { for (int i = 0; i < 8; i++) { mFrameTex[i].setPos(mDispPosLeftUpX + position[i][0], mDispPosLeftUpY + position[i][1], mDispPosLeftUpX + position[i][2], mDispPosLeftUpY + position[i][3]); - mFrameTexture[i].field_0x30.r = 255; - mFrameTexture[i].field_0x30.g = 255; - mFrameTexture[i].field_0x30.b = 255; - mFrameTexture[i].field_0x30.a = param_1; + mFrameTexture[i].mColor.r = 255; + mFrameTexture[i].mColor.g = 255; + mFrameTexture[i].mColor.b = 255; + mFrameTexture[i].mColor.a = param_1; dComIfGd_set2DOpa(&mFrameTex[i]); } } @@ -1439,7 +1450,7 @@ void dMap_c::mapAGBSendMapMain(f32 param_1, f32 param_2) { } else { switch (mAGBMapSendStatus) { case 0: - if (!g_mDoGaC_gbaCom.mDoGaC_SendEndCheck(2)) { + if (!mDoGac_SendEndCheck(2)) { if (mPlayerStayAgbMapTypeNow == 1 || mPlayerStayAgbMapTypeNow == 3) { if (!strcmp(mAgbSendNowStageName, dComIfGp_getStartStageName()) && mAgbSendNowRoomNo == mNowRoomInfoP->getRoomNo() && mAgbSendNowDspFloorNo == mNowRoomInfoP->field_0xc && mAgbSendNowAgbMapType == mPlayerStayAgbMapTypeNow) { mAGBMapSendStatus = 3; @@ -1451,13 +1462,13 @@ void dMap_c::mapAGBSendMapMain(f32 param_1, f32 param_2) { } } else { static const u8 data[] = {0, 1, 0, 0}; - if (g_mDoGaC_gbaCom.mDoGaC_SendStatusCheck(1) && g_mDoGaC_gbaCom.mDoGaC_SendDataSet((u32*)data, 4, 1, 0)) { + if (mDoGac_SendStatusCheck(1) && mDoGac_SendDataSet((u32*)data, 4, 1, 0)) { mAGBMapSendStatus = 1; } } break; case 1: - if (g_mDoGaC_gbaCom.mDoGaC_SendEndCheck(2)) { + if (mDoGac_SendEndCheck(2)) { if (mPlayerStayAgbMapTypeNow == 2) { mAGBMapSendStatus = 4; } else if (mAGBMapSendStopFlg == 0) { @@ -1474,14 +1485,14 @@ void dMap_c::mapAGBSendMapMain(f32 param_1, f32 param_2) { mAgbSendNowDspFloorNo = mNowRoomInfoP->field_0xc; mAgbSendNowAgbMapType = mPlayerStayAgbMapTypeNow; agbMapNoSetCall(); - if (g_mDoGaC_gbaCom.mDoGaC_SendDataSet((u32*)mNowRoomInfoP->field_0x8c.field_0x4, mNowRoomInfoP->field_0x8c.field_0x38, 2, 0)) { + if (mDoGac_SendDataSet((u32*)mNowRoomInfoP->field_0x8c.field_0x4, mNowRoomInfoP->field_0x8c.field_0x38, 2, 0)) { mAGBMapSendStatus = 3; agbResetCursor(); } } break; case 3: - if (g_mDoGaC_gbaCom.mDoGaC_SendEndCheck(2)) { + if (mDoGac_SendEndCheck(2)) { mAGBMapSendStatus = 4; memset(mAgbSendNowStageName, 0, sizeof(mAgbSendNowStageName)); mAgbSendNowRoomNo = -1; @@ -1718,7 +1729,12 @@ void dMap_c::getFmapChkPntPrm(int, s8*, s8*, s16*, s16*, u8*) { /* 8004ACD8-8004AD00 .text setFmapChkDtPrm__6dMap_cFv */ void dMap_c::setFmapChkDtPrm() { - /* Nonmatching */ + dMap_FmapChkPnt* ptr = (dMap_FmapChkPnt*)dComIfGp_getFmapData(); + if (!ptr) { + return; + } + mFmapChkPntValue = ptr->field_0x0; + mFmapChkPntData_p = ptr->field_0x4; } /* 8004AD00-8004ADC8 .text getFmapChkPntDtPnt__6dMap_cFi */ @@ -1735,7 +1751,6 @@ FmapChkPnt* dMap_c::getFmapChkPntDtPnt(int i_param) { /* 8004ADC8-8004AE28 .text initPoint__6dMap_cFv */ void dMap_c::initPoint() { - /* Nonmatching */ mDrawPointCntPlayer = 0; mDrawPointCntEnemy = 0; mDrawPointCntAgbCursor = 0; @@ -1772,30 +1787,32 @@ BOOL dMap_c::isPointStayInDspNowRoomAgbScr(s16 param_1, s16 param_2) { /* 8004B1D0-8004B33C .text setCollectPoint__6dMap_cFUcUcfffScsUcUcUcUc */ void dMap_c::setCollectPoint(u8 param_1, u8 param_2, f32 param_3, f32 param_4, f32 param_5, s8 param_6, s16 param_7, u8 param_8, u8 param_9, u8 param_10, u8 param_11) { - /* Nonmatching */ if (mCollectPointDataCnt >= 64) { return; } - if (getKindMapType() == 1 || param_1 == 1 || param_1 == 3 || param_6 == -1 || (mNowRoomInfoP && param_6 == mNowRoomInfoP->getRoomNo())) { - int typeNo = param_1 - 1; - JUT_ASSERT(6441, (typeNo >= 0) && (typeNo < AGB_POINT_TYPE_NUM)); - s8 var1 = mCollectPointDataLinkList[typeNo]; - mCollectPointDataLinkList[typeNo] = mCollectPointDataCnt; - dMap_CollectPoint* point = &mCollectPointData[mCollectPointDataCnt]; - point->field_0x0 = param_3; - point->field_0x4 = param_4; - point->field_0x8 = param_5; - point->field_0xc = param_7; - point->field_0xf = param_1; - point->field_0x10 = param_2; - point->field_0xe = param_6; - point->field_0x11 = param_8; - point->field_0x12 = param_9; - point->field_0x13 = param_10; - point->field_0x14 = param_11; - point->field_0x16 = var1; - mCollectPointDataCnt++; + if (getKindMapType() != 1 && param_1 != 1 && param_1 != 3 && param_6 != -1 && (!mNowRoomInfoP || param_6 != mNowRoomInfoP->getRoomNo())) { + return; } + int typeNo = param_1 - 1; +#if VERSION > VERSION_DEMO + JUT_ASSERT(6441, (typeNo >= 0) && (typeNo < AGB_POINT_TYPE_NUM)); +#endif + s8 var1 = mCollectPointDataLinkList[typeNo]; + mCollectPointDataLinkList[typeNo] = mCollectPointDataCnt; + dMap_CollectPoint* point = &mCollectPointData[mCollectPointDataCnt]; + point->field_0x0 = param_3; + point->field_0x4 = param_4; + point->field_0x8 = param_5; + point->field_0xc = param_7; + point->field_0xf = param_1; + point->field_0x10 = param_2; + point->field_0xe = param_6; + point->field_0x11 = param_8; + point->field_0x12 = param_9; + point->field_0x13 = param_10; + point->field_0x14 = param_11; + point->field_0x16 = var1; + mCollectPointDataCnt++; } /* 8004B33C-8004B814 .text setGbaPoint_dungeon__6dMap_cFUcffsUcUcUcUc */ @@ -1832,7 +1849,6 @@ void dMap_c::setGbaPoint(u8 param_1, f32 param_2, f32 param_3, s16 param_4, u8 p /* 8004B8DC-8004B9C8 .text setArriveInfo__6dMap_cFff */ void dMap_c::setArriveInfo(f32 param_1, f32 param_2) { - /* Nonmatching */ if (!dComIfGp_event_runCheck() && strcmp(dComIfGp_getStartStageName(), "sea") == 0) { s8 gridX; s8 gridY; @@ -2183,13 +2199,48 @@ void dMap_c::drawPointAgb(u8 pointType,f32 posX,f32 posY,f32 posZ,s8 param_5,s16 } /* 8004CEF4-8004CFA4 .text getTypeAgbGcFromTypeAcs__6dMap_cFUcPUcPUc */ -void dMap_c::getTypeAgbGcFromTypeAcs(u8, u8*, u8*) { - /* Nonmatching */ +void dMap_c::getTypeAgbGcFromTypeAcs(u8 i_typeAcs, u8* param_2, u8* param_3) { + const int ACS_MAP_POINT_TYPE_MAX = 25; + const static u8 statusMapNo2TypeNoTbl[ACS_MAP_POINT_TYPE_MAX][2] = { + 2, 3, 1, 1, 4, 5, 12, 0, 6, 0, 6, 0, 13, 0, 14, 0, + 15, 0, 17, 7, 17, 7, 17, 7, 19, 8, 19, 8, 19, 8, 19, 8, + 19, 8, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 3, 6, 4, + 6, 4, + }; + + JUT_ASSERT(7814, (i_typeAcs >= 0) && (i_typeAcs < ACS_MAP_POINT_TYPE_MAX)); + if (param_2) { + *param_2 = statusMapNo2TypeNoTbl[i_typeAcs][0]; + } + if (param_3) { + *param_3 = statusMapNo2TypeNoTbl[i_typeAcs][1]; + } } /* 8004CFA4-8004D0A4 .text drawPointSingle__6dMap_cFUcfffScsUcUcUc */ -void dMap_c::drawPointSingle(u8, f32, f32, f32, s8, s16, u8, u8, u8) { +void dMap_c::drawPointSingle(u8 param_1, f32 param_2, f32 param_3, f32 param_4, s8 param_5, s16 param_6, u8 param_7, u8 param_8, u8 param_9) { /* Nonmatching */ + static const s8 agbTbl[] = { + -1, -1, 2, -1, + 6, -1, 0, 0, + 0, 0, 0, -1, + -1, -1, -1, 0, + -1, -1, -1, -1, + 0, + }; + + if (dComIfGp_roomControl_getStayNo() < 0 || !mNowRoomInfoP) { + return; + } + + int tmp = param_1 - 1; + if (tmp < 0 || tmp >= sizeof(agbTbl)) { + JUT_ASSERT(7901, 0); + } else if (agbTbl[tmp] < 0) { + JUT_ASSERT(7908, 0); + } else { + setCollectPoint(param_1, agbTbl[tmp], param_2, param_3, param_4, param_5, param_6, param_7, param_8, param_9, 0); + } } /* 8004D0A4-8004D260 .text drawActorPointMiniMap__6dMap_cFP10fopAc_ac_c */ @@ -2214,7 +2265,25 @@ void dMap_c::mapBufferSendAGB_dungeon() { /* 8004D4F8-8004D5F8 .text mapSetPointAll__6dMap_cFv */ void dMap_c::mapSetPointAll() { - /* Nonmatching */ + static const s8 agbSetList[] = { + 1, 3, 21, 2, 4, 19, 20, 7, + 17, 18, 12, 8, 9, 10, 11, 16, + 13, 5, 15, 14, 6 + }; + + for (int i = 0; i < sizeof(agbSetList); i++) { + s8 typeNo = agbSetList[i] - 1; +#if VERSION > VERSION_DEMO + JUT_ASSERT(8427, (typeNo >= 0) && (typeNo < AGB_POINT_TYPE_NUM)); +#endif + for (s8 j = mCollectPointDataLinkList[typeNo]; j >= 0; j = mCollectPointData[j].field_0x16) { + drawPointMain( + mCollectPointData[j].field_0xf, mCollectPointData[j].field_0x10, mCollectPointData[j].field_0x0, mCollectPointData[j].field_0x4, + mCollectPointData[j].field_0x8, mCollectPointData[j].field_0xe, mCollectPointData[j].field_0xc, mCollectPointData[j].field_0x11, + mCollectPointData[j].field_0x12, mCollectPointData[j].field_0x13, mCollectPointData[j].field_0x14 + ); + } + } } /* 8004D5F8-8004D9BC .text mapBufferSendAGB__6dMap_cFi */ @@ -2231,15 +2300,15 @@ void dMap_RoomInfoCtrl_c::checkFloorMoveImageChangeRoom(u8, u8, int, s16, s16, f void dMap_2DMtMapSpcl_tex_c::init(ResTIMG* i_img, u32 param_2, const GXColor& param_3) { field_0x44 = param_2; if (i_img->indexTexture) { - GXInitTlutObj(&field_0x24, (u8*)i_img + i_img->paletteOffset, GXTlutFmt(i_img->colorFormat), i_img->numColors); - GXInitTexObjCI(&field_0x4, (u8*)i_img + i_img->imageOffset, i_img->width, i_img->height, GXCITexFmt(i_img->format), GXTexWrapMode(i_img->wrapS), GXTexWrapMode(i_img->wrapT), i_img->mipmapCount > 1, param_2); + GXInitTlutObj(&mTlutObj, (u8*)i_img + i_img->paletteOffset, GXTlutFmt(i_img->colorFormat), i_img->numColors); + GXInitTexObjCI(&mTexObj, (u8*)i_img + i_img->imageOffset, i_img->width, i_img->height, GXCITexFmt(i_img->format), GXTexWrapMode(i_img->wrapS), GXTexWrapMode(i_img->wrapT), i_img->mipmapCount > 1, param_2); field_0x1 = 1; } else { - GXInitTexObj(&field_0x4, (u8*)i_img + i_img->imageOffset, i_img->width, i_img->height, GXTexFmt(i_img->format), GXTexWrapMode(i_img->wrapS), GXTexWrapMode(i_img->wrapT), i_img->mipmapCount > 1); + GXInitTexObj(&mTexObj, (u8*)i_img + i_img->imageOffset, i_img->width, i_img->height, GXTexFmt(i_img->format), GXTexWrapMode(i_img->wrapS), GXTexWrapMode(i_img->wrapT), i_img->mipmapCount > 1); field_0x1 = 0; } - GXInitTexObjLOD(&field_0x4, GXTexFilter(i_img->minFilter), GXTexFilter(i_img->magFilter), i_img->minLOD * 0.125f, i_img->maxLOD * 0.125f, i_img->LODBias * 0.01f, i_img->biasClamp, i_img->doEdgeLOD, GXAnisotropy(i_img->maxAnisotropy)); - field_0x30 = param_3; + GXInitTexObjLOD(&mTexObj, GXTexFilter(i_img->minFilter), GXTexFilter(i_img->magFilter), i_img->minLOD * 0.125f, i_img->maxLOD * 0.125f, i_img->LODBias * 0.01f, i_img->biasClamp, i_img->doEdgeLOD, GXAnisotropy(i_img->maxAnisotropy)); + mColor = param_3; field_0x0 = 1; } @@ -2269,6 +2338,93 @@ void dMap_2DMtMapSpcl_c::setPos(s16 param_1, s16 param_2, s16 param_3, s16 param /* 8004DC1C-8004E068 .text draw__18dMap_2DMtMapSpcl_cFv */ void dMap_2DMtMapSpcl_c::draw() { /* Nonmatching */ + GXVtxAttrFmtList fmtList[GX_VA_MAX_ATTR + 1]; + GXGetVtxAttrFmtv(GX_VTXFMT0, fmtList); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + dMap_2DMtMapSpcl_tex_c* r27 = field_0x8; + int r28 = 0; + int r30 = 0; + for (int i = 0; i < field_0x4; r27++, i++) { + if (r27->field_0x0 == 0) { + continue; + } + if (r27->field_0x1) { + GXLoadTlut(&r27->mTlutObj, r27->field_0x44); + } + GXLoadTexObj(&r27->mTexObj, GXTexMapID(r28)); + GXSetVtxAttrFmt(GX_VTXFMT0, GXAttr(GX_VA_TEX0 + r28), GX_TEX_ST, GX_F32, 0); + GXSetVtxDesc(GXAttr(GX_VA_TEX0 + r28), GX_DIRECT); + GXSetTevColor(GXTevRegID(GX_TEVREG0 + r28), r27->mColor); + GXSetTexCoordGen(GXTexCoordID(r28), GX_TG_MTX2x4, GXTexGenSrc(GX_TG_TEX0 + r28), GX_IDENTITY); + GXSetTevOrder(GXTevStageID(r28), GXTexCoordID(r28), GXTexMapID(r28), GX_COLOR_NULL); + GXSetTevColorIn(GXTevStageID(r28), GX_CC_ZERO, GXTevColorArg(GX_CC_C0 + r30), GX_CC_TEXC, r28 ? GX_CC_CPREV : GX_CC_ZERO); + GXSetTevColorOp(GXTevStageID(r28), GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GXTevStageID(r28), GX_CA_ZERO, GXTevAlphaArg(GX_CA_A0 + r28), GX_CA_TEXA, r28 ? GX_CA_APREV : GX_CA_ZERO); + GXSetTevAlphaOp(GXTevStageID(r28), GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + r28 += 1; + r30 += 2; + if (r28 >= 3) { + break; + } + } + if (r28 == 0) { + return; + } + GXSetNumChans(0); + GXSetNumTexGens(r28); + GXSetNumTevStages(r28); + switch (field_0x5) { + case 0: + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET); + break; + case 1: + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET); + GXSetDstAlpha(GX_ENABLE,0); + GXSetAlphaUpdate(GX_ENABLE); + case 2: + GXSetBlendMode(GX_BM_BLEND, GX_BL_DST_ALPHA, GX_BL_INV_DST_ALPHA, GX_LO_SET); + break; + case 3: + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_ONE, GX_LO_SET); + break; + } + GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_AND, GX_ALWAYS, 0); + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition3s16(field_0xc, field_0xe, 0); + r27 = field_0x8; + for (int i = 0; i < field_0x4; r27++, i++) { + if (r27->field_0x0) { + GXTexCoord2f32(r27->field_0x34, r27->field_0x38); + } + } + GXPosition3s16(field_0x10, field_0xe, 0); + r27 = field_0x8; + for (int i = 0; i < field_0x4; r27++, i++) { + if (r27->field_0x0) { + GXTexCoord2f32(r27->field_0x34 + r27->field_0x3c, r27->field_0x38); + } + } + GXPosition3s16(field_0x10, field_0x12, 0); + r27 = field_0x8; + for (int i = 0; i < field_0x4; r27++, i++) { + if (r27->field_0x0) { + GXTexCoord2f32(r27->field_0x34 + r27->field_0x3c, r27->field_0x38 + r27->field_0x40); + } + } + GXPosition3s16(field_0xc, field_0x12, 0); + r27 = field_0x8; + for (int i = 0; i < field_0x4; r27++, i++) { + if (r27->field_0x0) { + GXTexCoord2f32(r27->field_0x34, r27->field_0x38 + r27->field_0x40); + } + } + GXEnd(); + GXSetDstAlpha(GX_DISABLE, 0); + GXSetAlphaUpdate(GX_DISABLE); + GXSetVtxAttrFmtv(GX_VTXFMT0, fmtList); } /* 8004E068-8004E1CC .text setImage__18dMap_2DAGBScrDsp_cFP7ResTIMGP8map_dt_c */ @@ -2301,18 +2457,59 @@ void dMap_2DAGBScrDsp_c::init(map_dt_c* param_1, ResTIMG* param_2, f32 param_3, } /* 8004E264-8004E384 .text getScrnPrm__18dMap_2DAGBScrDsp_cFffifPiPfPf */ -void dMap_2DAGBScrDsp_c::getScrnPrm(f32, f32, int, f32, int*, f32*, f32*) { +void dMap_2DAGBScrDsp_c::getScrnPrm(f32 param_1, f32 param_2, int param_3, f32 param_4, int* param_5, f32* param_6, f32* param_7) { /* Nonmatching */ + if (param_4 != 0.0) { + f32 f30 = param_3; + f32 f31 = param_1 + param_2 * (1.0f / param_4); + int tmp1 = floor(f31 / f30); + if (param_5) { + *param_5 = tmp1; + } + f32 tmp2 = fmod(f31, f30); + tmp2 = fmod(f30 + tmp2, f30); + if (param_6) { + *param_6 = tmp2; + } + if (param_7) { + *param_7 = tmp2 / f30; + } + } else { + if (param_5) { + *param_5 = 0; + } + if (param_6) { + *param_6 = 0.0f; + } + if (param_7) { + *param_7 = 0.0f; + } + } } /* 8004E384-8004E41C .text getScrnPrmXY__18dMap_2DAGBScrDsp_cFffffiiffPiPiPfPfPfPf */ -void dMap_2DAGBScrDsp_c::getScrnPrmXY(f32, f32, f32, f32, int, int, f32, f32, int*, int*, f32*, f32*, f32*, f32*) { - /* Nonmatching */ +void dMap_2DAGBScrDsp_c::getScrnPrmXY(f32 param_1, f32 param_2, f32 param_3, f32 param_4, int param_5, int param_6, f32 param_7, f32 param_8, int* param_9, int* param_10, f32* param_11, f32* param_12, f32* param_13, f32* param_14) { + getScrnPrm(param_1, param_3, param_5, param_7, param_9, param_11, param_13); + getScrnPrm(param_2, param_4, param_6, param_8, param_10, param_12, param_14); } /* 8004E41C-8004E698 .text calc_standard_prm__18dMap_2DAGBScrDsp_cFUsUsffssssffPiPiPiPiPfPfPfPfPfPf */ -void dMap_2DAGBScrDsp_c::calc_standard_prm(u16, u16, f32, f32, s16, s16, s16, s16, f32, f32, int*, int*, int*, int*, f32*, f32*, f32*, f32*, f32*, f32*) { - /* Nonmatching */ +void dMap_2DAGBScrDsp_c::calc_standard_prm(u16 param_1, u16 param_2, f32 param_3, f32 param_4, s16 param_5, s16 param_6, s16 param_7, s16 param_8, f32 param_9, f32 param_10, int* param_11, int* param_12, int* param_13, int* param_14, f32* param_15, f32* param_16, f32* param_17, f32* param_18, f32* param_19, f32* param_20) { + f32 f30 = (param_7 - param_5) * 0.5f; + f32 f29 = (param_8 - param_6) * 0.5f; + int local_bc; + int local_c0; + int local_c4; + int local_c8; + f32 local_cc; + f32 local_d0; + getScrnPrmXY(param_3, param_4, 0.0f, 0.0f, param_1, param_2, param_9, param_10, &local_c4, &local_c8, &local_cc, &local_d0, NULL, NULL); + getScrnPrmXY(param_3, param_4, -f30, -f29, param_1, param_2, param_9, param_10, param_13, param_14, NULL, NULL, param_17, param_19); + getScrnPrmXY(param_3, param_4, f30, f29, param_1, param_2, param_9, param_10, &local_bc, &local_c0, NULL, NULL, param_18, param_20); + *param_11 = (local_bc - *param_13) + 1; + *param_12 = (local_c0 - *param_14) + 1; + *param_15 = -(param_9 * (local_cc + (param_1 * (local_c4 - *param_13)))); + *param_16 = -(param_10 * (local_d0 + (param_2 * (local_c8 - *param_14)))); } /* 8004E698-8004EE30 .text draw__18dMap_2DAGBScrDsp_cFv */ @@ -2426,21 +2623,414 @@ void dMap_2DT2_c::init(ResTIMG* param_1, f32 param_2, f32 param_3, f32 param_4, } /* 8004F8B4-8004FC68 .text setTlut__11dMap_Dmap_cFP16dmap_dmap_tlut_sUcUcUcf */ -void dMap_Dmap_c::setTlut(dmap_dmap_tlut_s*, u8, u8, u8, f32) { +void dMap_Dmap_c::setTlut(dmap_dmap_tlut_s* param_1, u8 param_2, u8 param_3, u8 param_4, f32 param_5) { /* Nonmatching */ + static const GXColor color_on = {0, 128, 0, 255}; + static const GXColor color_off_map_possession = {30, 30, 30, 255}; + static const GXColor color_off_map_none = {0, 0, 0, 0}; + static const GXColor flash_color = {0, 255, 180, 255}; + + dStage_FloorInfo_dt_c* floorInfo = dMap_GetFloorInfoDtPFromFloorNo(dComIfGp_getStage().getFloorInfo(), param_2); + if (!floorInfo) { + return; + } + if (param_5 > 1.0f) { + param_5 = 1.0f - param_5; + } + s8* r29 = floorInfo->field_0x05; + for (int i = 0; i < 14; i++, r29++) { + if (*r29 == -1) { + continue; + } + u16* r30 = NULL; + int tmp = field_0x2bb[param_2 - Floor_Base][i + 1]; + if (tmp >= 0) { + r30 = ¶m_1->field_0x0[tmp]; + } + if (!r30) { + continue; + } + stage_stag_info_class* stageInfo = dComIfGp_getStage().getStagInfo(); + if ((stageInfo->mStageTypeAndSchbit >> 16 & 7) != 3 && *r29 == param_3) { + *r30 = + ((u16(flash_color.r + param_5 * (color_on.r - flash_color.r)) << 7) & 0x7C0) | + ((u16(flash_color.g + param_5 * (color_on.g - flash_color.g)) << 2) & 0x3E0) | + ((u16(flash_color.b + param_5 * (color_on.b - flash_color.b)) >> 3) & 0x1F); + continue; + } + if (!dComIfGs_isDungeonItemMap()) { + if (dComIfGs_isVisitedRoom(*r29)) { + *r30 = color_on.a >= 0xe0 + ? u16(color_on.r & 0xf8) << 7 | u16(color_on.g & 0xf8) << 2 | u16(color_on.b) >> 3 + : u16(color_on.r & 0xf0) << 4 | u16(color_on.g & 0xf0) | u16(color_on.b) >> 4 | u16(color_on.a & 0xe0) << 7; + } else { + *r30 = color_off_map_none.a >= 0xe0 + ? u16(color_off_map_none.r & 0xf8) << 7 | u16(color_off_map_none.g & 0xf8) << 2 | u16(color_off_map_none.b) >> 3 + : u16(color_off_map_none.r & 0xf0) << 4 | u16(color_off_map_none.g & 0xf0) | u16(color_off_map_none.b) >> 4 | u16(color_off_map_none.a & 0xe0) << 7; + } + continue; + } else { + if (dComIfGs_isVisitedRoom(*r29)) { + *r30 = color_on.a >= 0xe0 + ? u16(color_on.r & 0xf8) << 7 | u16(color_on.g & 0xf8) << 2 | u16(color_on.b) >> 3 + : u16(color_on.r & 0xf0) << 4 | u16(color_on.g & 0xf0) | u16(color_on.b) >> 4 | u16(color_on.a & 0xe0) << 7; + } else { + *r30 = color_off_map_possession.a >= 0xe0 + ? u16(color_off_map_possession.r & 0xf8) << 7 | u16(color_off_map_possession.g & 0xf8) << 2 | u16(color_off_map_possession.b) >> 3 + : u16(color_off_map_possession.r & 0xf0) << 4 | u16(color_off_map_possession.g & 0xf0) | u16(color_off_map_possession.b) >> 4 | u16(color_off_map_possession.a & 0xe0) << 7; + } + } + } + DCStoreRange(param_1, 0x20); } /* 8004FC68-8004FFC8 .text setFloorTextureOne__11dMap_Dmap_cFUc */ -void dMap_Dmap_c::setFloorTextureOne(u8) { +void dMap_Dmap_c::setFloorTextureOne(u8 param_1) { /* Nonmatching */ + static const u16 l_indexColor[] = { + 0x0000, 0x8218, 0x821F, 0x83E8, + 0x83F0, 0x83FF, 0xC3E0, 0xC3F0, + 0xC3FF, 0xFC00, 0xFE10, 0xFE18, + 0xFE1F, 0xFFE0, 0xFFF0, 0xFFFF, + }; + + int r29 = param_1 - Floor_Base; + if (r29 > field_0x2b4 - Floor_Base || r29 < field_0x2b5 - Floor_Base) { + return; + } + char local_70[32]; + sprintf(local_70, "dmap%d.bti", param_1); + ResTIMG* imageP = (ResTIMG*)dComIfG_getStageRes("Stage", local_70); + if (!imageP) { + return; + } + field_0x36e |= 1 << (r29 & 0x3F); + for (int i = 0; i < 16; i++) { + field_0x2bb[r29][i] = -1; + } + for (int i = 0; i < 16; i++) { + u16* palette = (u16*)((u8*)imageP + imageP->paletteOffset); + u16 color = palette[i]; + u32 j; + for (j = 0; j < 16; j++) { + if (color == l_indexColor[j]) { + break; + } + } + if (j != 16) { + field_0x2bb[r29][j] = i; + } + } + for (int i = 0; i < 2; i++) { + dmap_dmap_tlut_s* r23 = &field_0x20[i][r29]; + memset(r23, 0, sizeof(dmap_dmap_tlut_s)); + GXInitTlutObj(&field_0x4b0[i][r29], r23, GXTlutFmt(imageP->colorFormat), imageP->numColors); + JUT_ASSERT(10393, imageP->numColors == (16)) + } + GXTexObj* texObj = &field_0x370[r29]; + GXInitTexObjCI(texObj, (u8*)imageP + imageP->imageOffset, imageP->width, imageP->height, GXCITexFmt(imageP->format), GXTexWrapMode(imageP->wrapS), GXTexWrapMode(imageP->wrapT), imageP->mipmapCount > 1, r29); + GXInitTexObjLOD(texObj, GXTexFilter(imageP->minFilter), GXTexFilter(imageP->magFilter), imageP->minLOD * 0.125f, imageP->maxLOD * 0.125f, imageP->LODBias * 0.01f, imageP->biasClamp, imageP->doEdgeLOD, GXAnisotropy(imageP->maxAnisotropy)); + JUT_ASSERT(10419, (mNowTlutDblBufNo == 0) || (mNowTlutDblBufNo == 1)); + for (int i = 0; i < 2; i++) { + setTlut(&field_0x20[i][r29], param_1, field_0x2b8, field_0x2b9, field_0x2ba); + } } /* 8004FFC8-800504C4 .text init__11dMap_Dmap_cFsssssssssUcUcUcUcUc */ -void dMap_Dmap_c::init(s16, s16, s16, s16, s16, s16, s16, s16, s16, u8, u8, u8, u8, u8) { +void dMap_Dmap_c::init(s16 param_1, s16 param_2, s16 param_3, s16 param_4, s16 param_5, s16 param_6, s16 param_7, s16 param_8, s16 param_9, u8 param_10, u8 param_11, u8 param_12, u8 param_13, u8 param_14) { /* Nonmatching */ + field_0x35c = param_1; + field_0x35e = param_2; + field_0x360 = param_3; + mMaskHeight = param_4; + field_0x364 = param_5; + field_0x366 = param_6; + field_0x368 = param_7; + field_0x36a = param_8; + field_0x36c = param_9; + field_0x2b4 = param_10; + field_0x2b5 = param_11; + field_0x2b8 = param_12; + field_0x2b9 = param_13; + field_0x2b6 = param_14; + mNowTlutDblBufNo = 0; + field_0x2ba = 0; + field_0x36e = 0; + mImageP = (ResTIMG*)JKRGetResource('TIMG', "dtmap_mask.bti", mpArc); + JUT_ASSERT(10504, mImageP != NULL); + mImageSeetP = (ResTIMG*)JKRGetResource('TIMG', "menu_note_02_2.bti", mpArc); + JUT_ASSERT(10511, mImageSeetP !=NULL); + mImageGridP = (ResTIMG*)JKRGetResource('TIMG', "grid_32.bti", mpArc); + JUT_ASSERT(10519, mImageGridP !=NULL); + field_0x2b0 = (ResTIMG*)dComIfG_getStageRes("Stage", "dmap_back.bti"); + GXInitTexObj(&field_0x5c0, (u8*)mImageP + mImageP->imageOffset, mImageP->width, mImageP->height, GXTexFmt(mImageP->format), GXTexWrapMode(mImageP->wrapS), GXTexWrapMode(mImageP->wrapT), mImageP->mipmapCount > 1); + GXInitTexObjLOD(&field_0x5c0, GXTexFilter(mImageP->minFilter), GXTexFilter(mImageP->magFilter), mImageP->minLOD * 0.125f, mImageP->maxLOD * 0.125f, mImageP->LODBias * 0.01f, mImageP->biasClamp, mImageP->doEdgeLOD, GXAnisotropy(mImageP->maxAnisotropy)); + GXInitTexObj(&field_0x5a0, (u8*)mImageSeetP + mImageSeetP->imageOffset, mImageSeetP->width, mImageSeetP->height, GXTexFmt(mImageSeetP->format), GXTexWrapMode(mImageSeetP->wrapS), GXTexWrapMode(mImageSeetP->wrapT), mImageSeetP->mipmapCount > 1); + GXInitTexObjLOD(&field_0x5a0, GXTexFilter(mImageSeetP->minFilter), GXTexFilter(mImageSeetP->magFilter), mImageSeetP->minLOD * 0.125f, mImageSeetP->maxLOD * 0.125f, mImageSeetP->LODBias * 0.01f, mImageSeetP->biasClamp, mImageSeetP->doEdgeLOD, GXAnisotropy(mImageSeetP->maxAnisotropy)); + GXInitTexObj(&field_0x5e0, (u8*)mImageGridP + mImageGridP->imageOffset, mImageGridP->width, mImageGridP->height, GXTexFmt(mImageGridP->format), GXTexWrapMode(mImageGridP->wrapS), GXTexWrapMode(mImageGridP->wrapT), mImageGridP->mipmapCount > 1); + GXInitTexObjLOD(&field_0x5e0, GXTexFilter(mImageGridP->minFilter), GXTexFilter(mImageGridP->magFilter), mImageGridP->minLOD * 0.125f, mImageGridP->maxLOD * 0.125f, mImageGridP->LODBias * 0.01f, mImageGridP->biasClamp, mImageGridP->doEdgeLOD, GXAnisotropy(mImageGridP->maxAnisotropy)); + if (field_0x2b0) { + GXInitTexObj(&field_0x600, (u8*)field_0x2b0 + field_0x2b0->imageOffset, field_0x2b0->width, field_0x2b0->height, GXTexFmt(field_0x2b0->format), GXTexWrapMode(field_0x2b0->wrapS), GXTexWrapMode(field_0x2b0->wrapT), field_0x2b0->mipmapCount > 1); + GXInitTexObjLOD(&field_0x600, GXTexFilter(field_0x2b0->minFilter), GXTexFilter(field_0x2b0->magFilter), field_0x2b0->minLOD * 0.125f, field_0x2b0->maxLOD * 0.125f, field_0x2b0->LODBias * 0.01f, field_0x2b0->biasClamp, field_0x2b0->doEdgeLOD, GXAnisotropy(field_0x2b0->maxAnisotropy)); + } + for (int i = 0; i < 10; i++) { + setFloorTextureOne(i + Floor_Base); + } } /* 800504C4-800517AC .text draw__11dMap_Dmap_cFv */ void dMap_Dmap_c::draw() { /* Nonmatching */ + static const GXColor backColorWhite = {185, 135, 0, 255}; + static const GXColor backColorBlack = {150, 80, 0, 255}; + static const GXColor wallPaperColorWhite = {255, 255, 255, 255}; + static const GXColor wallPaperColorBlack = {255, 255, 255, 255}; + static const GXColor edgeColor = {255, 255, 255, 255}; + + JUT_ASSERT(10663, mMaskHeight != 0.0f); + f32 f27 = field_0x368 / 64.0f; + f32 f26 = field_0x36a / 64.0f; + f32 f23 = 1.0f / GXGetTexObjWidth(&field_0x5e0); + f32 f25 = 1.0f / GXGetTexObjHeight(&field_0x5e0); + f32 f30 = 2.0f * fopMsgM_valueIncrease(40, field_0x2ba, 2); + if (f30 > 1.0f) { + f30 = 2.0f - f30; + } + s16 r21 = field_0x35e - (mMaskHeight >> 1); + s16 r25 = field_0x364 - (field_0x368 >> 1); + s16 r24 = field_0x364 + (field_0x368 >> 1); + s16 r23 = field_0x366 + field_0x36c + (field_0x36a + field_0x36c) * 4 + (field_0x36a >> 1); + GXVtxAttrFmtList fmtList[GX_VA_MAX_ATTR + 1]; + GXGetVtxAttrFmtv(GX_VTXFMT0, fmtList); + GXLoadPosMtxImm(mDoMtx_getIdentity(), GX_PNMTX0); + GXSetCurrentMtx(GX_PNMTX0); + setTlutDblBufNo(0); + changeTlutDblBufNo(); + for (int i = 0; i < 10; i++) { + if (r23 <= 480) { + s16 r22 = r23 + field_0x36a; + if (r22 < 0) { + break; + } + if (field_0x36e & 1 << i && i <= field_0x2b4 - Floor_Base && field_0x2b5 - Floor_Base <= i) { + setTlut(&field_0x20[getLoadTlutDblBufNo()][i], i + Floor_Base, field_0x2b8, field_0x2b9, f30); + f32 f29 = (f32(r23) - f32(r21)) / mMaskHeight; + f32 f28 = (f32(r22) - f32(r21)) / mMaskHeight; + GXTexObj* r26 = &field_0x370[i]; + f32 f24 = 0.3f / GXGetTexObjWidth(r26); + f32 f23_2 = 0.3f / GXGetTexObjHeight(r26); + GXColor local_2c4; + local_2c4.r = backColorWhite.r; + local_2c4.g = backColorWhite.g; + local_2c4.b = backColorWhite.b; + local_2c4.a = backColorWhite.a; + GXColor local_2c8; + local_2c8.r = wallPaperColorWhite.r; + local_2c8.g = wallPaperColorWhite.g; + local_2c8.b = wallPaperColorWhite.b; + local_2c8.a = wallPaperColorWhite.a; + GXColor local_2cc; + local_2cc.r = edgeColor.r; + local_2cc.g = edgeColor.g; + local_2cc.b = edgeColor.b; + local_2cc.a = edgeColor.a; + local_2c8.r = 128; + local_2c8.g = 128; + local_2c8.b = 0; + GXColor local_2d0; + local_2d0.r = backColorBlack.r; + local_2d0.g = backColorBlack.g; + local_2d0.b = backColorBlack.b; + local_2d0.a = backColorBlack.a; + GXColor local_2d4; + local_2d4.r = wallPaperColorBlack.r; + local_2d4.g = wallPaperColorBlack.g; + local_2d4.b = wallPaperColorBlack.b; + local_2d4.a = wallPaperColorBlack.a; + local_2d4.r = 0; + local_2d4.g = 0; + local_2d4.b = 0; + if (field_0x2b0) { + local_2c4.a = 96; + } else { + local_2c4.a = 0; + } + local_2c8.a = 128; + local_2cc.a = field_0x2b6; + GXSetTevKColor(GX_KCOLOR0, local_2c4); + GXSetTevKColor(GX_KCOLOR1, local_2c8); + GXSetTevKColor(GX_KCOLOR2, local_2cc); + GXSetTevColor(GX_TEVREG0, local_2d0); + GXSetTevColor(GX_TEVREG1, local_2d4); + GXSetTevKColorSel(GX_TEVSTAGE0, GX_TEV_KCSEL_K0); + GXSetTevKColorSel(GX_TEVSTAGE1, GX_TEV_KCSEL_K1); + GXSetTevKColorSel(GX_TEVSTAGE7, GX_TEV_KCSEL_K2); + GXSetTevKColorSel(GX_TEVSTAGE9, GX_TEV_KCSEL_K1_A); + GXSetTevKAlphaSel(GX_TEVSTAGE1, GX_TEV_KASEL_K0_A); + GXSetTevKAlphaSel(GX_TEVSTAGE11, GX_TEV_KASEL_K2_A); + GXLoadTexObj(&field_0x5a0, GX_TEXMAP0); + GXLoadTlut(&field_0x4b0[getLoadTlutDblBufNo()][i], i); + GXLoadTexObj(r26, GX_TEXMAP1); + GXLoadTexObj(&field_0x5e0, GX_TEXMAP2); + GXLoadTexObj(&field_0x5c0, GX_TEXMAP3); + if (field_0x2b0) { + GXLoadTexObj(&field_0x600, GX_TEXMAP4); + } + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX1, GX_TEX_ST, GX_F32, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX2, GX_TEX_ST, GX_F32, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX3, GX_TEX_ST, GX_F32, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX4, GX_TEX_ST, GX_F32, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX5, GX_TEX_ST, GX_F32, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX6, GX_TEX_ST, GX_F32, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX7, GX_TEX_ST, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); + GXSetVtxDesc(GX_VA_TEX1, GX_DIRECT); + GXSetVtxDesc(GX_VA_TEX2, GX_DIRECT); + GXSetVtxDesc(GX_VA_TEX3, GX_DIRECT); + GXSetVtxDesc(GX_VA_TEX4, GX_DIRECT); + GXSetVtxDesc(GX_VA_TEX5, GX_DIRECT); + GXSetVtxDesc(GX_VA_TEX6, GX_DIRECT); + GXSetVtxDesc(GX_VA_TEX7, GX_DIRECT); + GXSetNumChans(0); + GXSetNumTexGens(8); + GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY); + GXSetTexCoordGen(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX1, GX_IDENTITY); + GXSetTexCoordGen(GX_TEXCOORD2, GX_TG_MTX2x4, GX_TG_TEX2, GX_IDENTITY); + GXSetTexCoordGen(GX_TEXCOORD3, GX_TG_MTX2x4, GX_TG_TEX3, GX_IDENTITY); + GXSetTexCoordGen(GX_TEXCOORD4, GX_TG_MTX2x4, GX_TG_TEX4, GX_IDENTITY); + GXSetTexCoordGen(GX_TEXCOORD5, GX_TG_MTX2x4, GX_TG_TEX5, GX_IDENTITY); + GXSetTexCoordGen(GX_TEXCOORD6, GX_TG_MTX2x4, GX_TG_TEX6, GX_IDENTITY); + GXSetTexCoordGen(GX_TEXCOORD7, GX_TG_MTX2x4, GX_TG_TEX7, GX_IDENTITY); + GXSetNumTevStages(12); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL); + if (field_0x2b0) { + GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD5, GX_TEXMAP4, GX_COLOR_NULL); + } else { + GXSetTevOrder(GX_TEVSTAGE7, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + } + GXSetTevOrder(GX_TEVSTAGE2, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE3, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE4, GX_TEXCOORD2, GX_TEXMAP1, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE5, GX_TEXCOORD3, GX_TEXMAP1, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE6, GX_TEXCOORD4, GX_TEXMAP1, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE7, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE8, GX_TEXCOORD5, GX_TEXMAP1, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE9, GX_TEXCOORD6, GX_TEXMAP2, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE10, GX_TEXCOORD6, GX_TEXMAP2, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE11, GX_TEXCOORD7, GX_TEXMAP3, GX_COLOR_NULL); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C0, GX_CC_KONST, GX_CC_TEXC, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVREG2); + if (field_0x2b0) { + GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_C1, GX_CC_KONST, GX_CC_TEXC, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevColorIn(GX_TEVSTAGE2, GX_CC_C2, GX_CC_CPREV, GX_CC_APREV, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVREG2); + } else { + GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevColorIn(GX_TEVSTAGE2, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C2); + GXSetTevColorOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVREG2); + } + GXSetTevColorIn(GX_TEVSTAGE3, GX_CC_ZERO, GX_CC_ONE, GX_CC_TEXA, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE3, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevColorIn(GX_TEVSTAGE4, GX_CC_ZERO, GX_CC_ONE, GX_CC_TEXA, GX_CC_CPREV); + GXSetTevColorOp(GX_TEVSTAGE4, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevColorIn(GX_TEVSTAGE5, GX_CC_ZERO, GX_CC_ONE, GX_CC_TEXA, GX_CC_CPREV); + GXSetTevColorOp(GX_TEVSTAGE5, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevColorIn(GX_TEVSTAGE6, GX_CC_ZERO, GX_CC_ONE, GX_CC_TEXA, GX_CC_CPREV); + GXSetTevColorOp(GX_TEVSTAGE6, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevColorIn(GX_TEVSTAGE7, GX_CC_C2, GX_CC_KONST, GX_CC_CPREV, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE7, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevColorIn(GX_TEVSTAGE8, GX_CC_CPREV, GX_CC_TEXC, GX_CC_TEXA, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE8, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVREG2); + GXSetTevColorIn(GX_TEVSTAGE9, GX_CC_ZERO, GX_CC_TEXA, GX_CC_KONST, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE9, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevColorIn(GX_TEVSTAGE10, GX_CC_C2, GX_CC_TEXC, GX_CC_CPREV, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE10, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevColorIn(GX_TEVSTAGE11, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_CPREV); + GXSetTevColorOp(GX_TEVSTAGE11, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + if (field_0x2b0) { + GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_TEXA, GX_CA_KONST, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + } else { + GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + } + GXSetTevAlphaIn(GX_TEVSTAGE2, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE3, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE3, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE4, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE4, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE5, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE5, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE6, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE6, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE7, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE7, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE8, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE8, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE9, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE9, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE10, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE10, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE11, GX_CA_ZERO, GX_CA_KONST, GX_CA_TEXA, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE11, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetZMode(GX_FALSE, GX_LEQUAL, GX_FALSE); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET); + GXSetCullMode(GX_CULL_NONE); + GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0); + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition3s16(r25, r23, 0); + GXTexCoord2f32(0.0f, 0.0f); + GXTexCoord2f32(-f24, 0.0f); + GXTexCoord2f32(f24, 0.0f); + GXTexCoord2f32(0.0f, f23_2); + GXTexCoord2f32(0.0f, -f23_2); + GXTexCoord2f32(0.0f, 0.0f); + GXTexCoord2f32(0.0f, f25); + GXTexCoord2f32(0.0f, f29); + GXPosition3s16(r24, r23, 0); + GXTexCoord2f32(f27, 0.0f); + GXTexCoord2f32(1.0f - f24, 0.0f); + GXTexCoord2f32(1.0f + f24, 0.0f); + GXTexCoord2f32(1.0f, f23_2); + GXTexCoord2f32(1.0f, -f23_2); + GXTexCoord2f32(1.0f, 0.0f); + GXTexCoord2f32(6.0f - f23, f25); + GXTexCoord2f32(1.0f, f29); + GXPosition3s16(r24, r22, 0); + GXTexCoord2f32(f27, f26); + GXTexCoord2f32(1.0f - f24, 1.0f); + GXTexCoord2f32(1.0f + f24, 1.0f); + GXTexCoord2f32(1.0f, 1.0f + f23_2); + GXTexCoord2f32(1.0f, 1.0f - f23_2); + GXTexCoord2f32(1.0f, 1.0f); + GXTexCoord2f32(6.0f - f23, 6.0f); + GXTexCoord2f32(1.0f, f28); + GXPosition3s16(r25, r22, 0); + GXTexCoord2f32(0.0f, f26); + GXTexCoord2f32(-f24, 1.0f); + GXTexCoord2f32(f24, 1.0f); + GXTexCoord2f32(0.0f, 1.0f + f23_2); + GXTexCoord2f32(0.0f, 1.0f - f23_2); + GXTexCoord2f32(0.0f, 1.0f); + GXTexCoord2f32(0.0f, 6.0f); + GXTexCoord2f32(0.0f, f28); + GXEnd(); + } + } + r23 -= field_0x36a + field_0x36c; + } + GXSetVtxAttrFmtv(GX_VTXFMT0, fmtList); + field_0x2ba++; + if (field_0x2ba > 40) { + field_0x2ba = 0; + } }