This commit is contained in:
Jcw87
2026-08-26 18:29:33 -07:00
committed by GitHub
parent 7ac30822c3
commit f252856245
3 changed files with 745 additions and 116 deletions
+59 -20
View File
@@ -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 {
+5 -5
View File
@@ -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 */
#endif /* M_DO_GBA_COM_H */
+681 -91
View File
@@ -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 = &param_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;
}
}