mirror of
https://github.com/zeldaret/tww.git
synced 2026-09-05 10:27:35 -04:00
d_map (#1184)
This commit is contained in:
+59
-20
@@ -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 {
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user