d_menu_letter equivalent (#2407)

This commit is contained in:
hatal175
2025-04-23 21:39:12 +03:00
committed by GitHub
parent 556bfc958c
commit cfb614e8b2
10 changed files with 193 additions and 239 deletions
+65 -45
View File
@@ -19,6 +19,22 @@
class dDlst_blo_c : public dDlst_base_c {
public:
/* 80053B64 */ virtual void draw();
bool create(JKRArchive* param_1, char* param_2) {
return mScreen.setPriority(param_2,0x20000,param_1) != 0;
}
J2DPane* getPane(u64 i_tag) {
return mScreen.search(i_tag);
}
J2DPicture* getPicture(u64 i_tag) {
J2DPane* pane = getPane(i_tag);
JUT_ASSERT(1553, pane != 0);
if (pane->getTypeID() != 0x12) {
return NULL;
}
return (J2DPicture*)pane;
}
/* 0x004 */ int field_0x4;
/* 0x008 */ J2DScreen mScreen;
@@ -99,7 +115,7 @@ public:
int getCI() { return mCI; }
GXTexObj* getTexObj() { return &mTexObj; }
GXTlutObj* getTlutObj() { return &mTlutObj; }
GXColor getColor() { return mColor; }
GXColor* getColor() { return &mColor; }
f32 getS() { return mS; }
f32 getT() { return mT; }
f32 getSw() { return mSw; }
@@ -190,14 +206,16 @@ void dDlst_window_c::setScissor(f32 xOrig, f32 yOrig, f32 width, f32 height) {
/* 80051AF0-80051CF0 04C430 0200+00 1/0 0/0 0/0 .text draw__13dDlst_2DTri_cFv */
void dDlst_2DTri_c::draw() {
f32 f4;
f32 f5;
f32 f2 = cM_scos(field_0xc);
f32 f3 = cM_ssin(field_0xc);
s16 x[3];
s16 y[3];
int r8 = 0;
for (int i = 0; i < 3; i++) {
f32 f4 = field_0x10 * cM_ssin(r8);
f32 f5 = field_0x14 * cM_scos(r8);
f4 = field_0x10 * cM_ssin(r8);
f5 = field_0x14 * cM_scos(r8);
x[i] = field_0x4 + s16(f4 * f2 + f5 * f3);
y[i] = field_0x6 + s16(f5 * f2 - f4 * f3);
r8 -= 0x5555;
@@ -213,7 +231,7 @@ void dDlst_2DTri_c::draw() {
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR);
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_SET);
GXLoadPosMtxImm(mDoMtx_getIdentity(), GX_PNMTX0);
GXLoadPosMtxImm(cMtx_getIdentity(), GX_PNMTX0);
GXSetCurrentMtx(GX_PNMTX0);
GXBegin(GX_TRIANGLES, GX_VTXFMT0, 3);
GXPosition3s16(x[0], y[0], 0);
@@ -236,7 +254,7 @@ void dDlst_2DQuad_c::draw() {
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR);
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_SET);
GXLoadPosMtxImm(mDoMtx_getIdentity(), GX_PNMTX0);
GXLoadPosMtxImm(cMtx_getIdentity(), GX_PNMTX0);
GXSetCurrentMtx(GX_PNMTX0);
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
GXPosition3s16((s32)mPosX, (s32)mPosY, 0);
@@ -261,7 +279,7 @@ void dDlst_2DPoint_c::draw() {
GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR);
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_SET);
GXSetPointSize(field_0xc, GX_TO_ZERO);
GXLoadPosMtxImm(mDoMtx_getIdentity(), GX_PNMTX0);
GXLoadPosMtxImm(cMtx_getIdentity(), GX_PNMTX0);
GXSetCurrentMtx(GX_PNMTX0);
GXBegin(GX_POINTS, GX_VTXFMT0, 1);
GXPosition3s16(field_0x4, field_0x6, 0);
@@ -306,7 +324,7 @@ void dDlst_2DT_c::draw() {
GXSetFog(GX_FOG_NONE, 0.0f, 0.0f, 0.0f, 0.0f, g_clearColor);
GXSetCullMode(GX_CULL_NONE);
GXSetDither(GX_TRUE);
GXLoadPosMtxImm(mDoMtx_getIdentity(), GX_PNMTX0);
GXLoadPosMtxImm(cMtx_getIdentity(), GX_PNMTX0);
GXSetChanMatColor(GX_COLOR0A0, l_color);
GXSetClipMode(GX_CLIP_DISABLE);
GXSetCurrentMtx(GX_PNMTX0);
@@ -358,7 +376,7 @@ void dDlst_2DT2_c::draw() {
GXSetFog(GX_FOG_NONE, 0.0f, 0.0f, 0.0f, 0.0f, g_clearColor);
GXSetCullMode(GX_CULL_NONE);
GXSetDither(GX_TRUE);
GXLoadPosMtxImm(mDoMtx_getIdentity(), GX_PNMTX0);
GXLoadPosMtxImm(cMtx_getIdentity(), GX_PNMTX0);
GXSetClipMode(GX_CLIP_DISABLE);
GXSetCurrentMtx(GX_PNMTX0);
f32 f31 = field_0x24 + field_0x2c;
@@ -430,10 +448,13 @@ void dDlst_2DT2_c::draw() {
f27 = 1.0f;
}
f32 f24;
f32 stack_38;
if (mScaleY == 0.0f) {
f24 = 1.0f;
stack_38 = 1.0f;
} else {
f24 = 0.5f - (1.0f / mScaleY) * 0.5f;
stack_38 = (1.0f / mScaleY) * 0.5f + 0.5f;
}
GXBegin(GX_QUADS, GX_VTXFMT0, 8);
GXPosition2f32(field_0x24, field_0x28);
@@ -700,6 +721,7 @@ void dDlst_2DM_c::draw() {
s16 r25 = r27 + s16(field_0x1e * f4);
s16 r24 = r26 + s16(field_0x20 * f3);
GXTexObj tex[2];
void** stack_1c = &field_0x18;
GXInitTexObj(&tex[0], field_0x18, field_0x1e, field_0x20, GXTexFmt(field_0x1c), GX_CLAMP, GX_CLAMP, 0);
GXInitTexObjLOD(&tex[0], GX_LINEAR, GX_LINEAR, 0.0, 0.0, 0.0, 0, 0, GX_ANISO_1);
GXTexWrapMode wrap = field_0xc ? GX_REPEAT : GX_CLAMP;
@@ -762,6 +784,7 @@ void dDlst_2Dm_c::draw() {
int r26 = field_0x7e * f30;
s16 r25 = r27 + s16(f31 * GXGetTexObjWidth(&field_0x1c));
s16 r24 = r26 + s16(f30 * GXGetTexObjHeight(&field_0x1c));
GXTexObj* stack_18 = &field_0x1c;
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBA4, 8);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX1, GX_CLR_RGBA, GX_RGBA4, 8);
@@ -796,7 +819,7 @@ void dDlst_2Dm_c::draw() {
GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_SET);
GXLoadPosMtxImm(g_mDoMtx_identity, GX_PNMTX0);
GXLoadPosMtxImm(cMtx_getIdentity(), GX_PNMTX0);
GXSetCurrentMtx(0);
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
GXPosition3s16((s32)field_0x4, (s32)field_0x6, 0);
@@ -831,7 +854,7 @@ void dDlst_2DMt_c::draw() {
GXLoadTexObj(r27->getTexObj(), GXTexMapID(r28));
GXSetVtxAttrFmt(GX_VTXFMT0, GXAttr(GX_VA_TEX0 + r28), GX_CLR_RGBA, GX_RGBA6, 0);
GXSetVtxDesc(GXAttr(GX_VA_TEX0 + r28), GX_DIRECT);
GXSetTevColor(GXTevRegID(GX_TEVREG0 + r28), r27->mColor);
GXSetTevColor(GXTevRegID(GX_TEVREG0 + r28), *r27->getColor());
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 + r28*2), GX_CC_TEXC, r28 ? GX_CC_CPREV : GX_CC_ZERO);
@@ -852,51 +875,42 @@ void dDlst_2DMt_c::draw() {
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_SET);
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
GXPosition3s16(field_0xc, field_0xe, 0);
dDlst_2DMt_tex_c* tmp = field_0x8;
r27 = field_0x8;
for (int i = 0; i < field_0x4; i++) {
if (tmp->check()) {
GXTexCoord2f32(tmp->getS(), tmp->getT());
if (r27->check()) {
GXTexCoord2f32(r27->getS(), r27->getT());
}
tmp++;
r27++;
}
GXPosition3s16(field_0x10, field_0xe, 0);
tmp = field_0x8;
r27 = field_0x8;
for (int i = 0; i < field_0x4; i++) {
if (tmp->check()) {
GXTexCoord2f32(tmp->getS() + tmp->getSw(), tmp->getT());
if (r27->check()) {
GXTexCoord2f32(r27->getS() + r27->getSw(), r27->getT());
}
tmp++;
r27++;
}
GXPosition3s16(field_0x10, field_0x12, 0);
tmp = field_0x8;
r27 = field_0x8;
for (int i = 0; i < field_0x4; i++) {
if (tmp->check()) {
GXTexCoord2f32(tmp->getS() + tmp->getSw(), tmp->getT() + tmp->getTw());
if (r27->check()) {
GXTexCoord2f32(r27->getS() + r27->getSw(), r27->getT() + r27->getTw());
}
tmp++;
r27++;
}
GXPosition3s16(field_0xc, field_0x12, 0);
tmp = field_0x8;
r27 = field_0x8;
for (int i = 0; i < field_0x4; i++) {
if (tmp->check()) {
GXTexCoord2f32(tmp->getS(), tmp->getT() + tmp->getTw());
if (r27->check()) {
GXTexCoord2f32(r27->getS(), r27->getT() + r27->getTw());
}
tmp++;
r27++;
}
GXEnd();
dComIfGp_getCurrentGrafPort()->setup2D();
}
}
/* 800539DC-80053A00 04E31C 0024+00 0/0 1/0 0/0 .text getTexture__10J2DPictureCFUc */
// Should be inline
JUTTexture* J2DPicture::getTexture(u8 param_0) const {
if (param_0 < 2) {
return mTexture[param_0];
}
return NULL;
}
/* 80053A00-80053A9C 04E340 009C+00 0/0 1/1 0/0 .text __ct__10dDlst_2D_cFP7ResTIMGssssUc
*/
dDlst_2D_c::dDlst_2D_c(ResTIMG* i_timg, s16 i_posX, s16 i_posY, s16 i_sizeX, s16 i_sizeY,
@@ -932,9 +946,9 @@ f32 cM_rnd_c::get() {
seed0 = seed0 * 171 % 30269;
seed1 = seed1 * 172 % 30307;
seed2 = seed2 * 170 % 30323;
f32 rm = fmodf((seed0 / 30269.0f) + (seed1 / 30307.0f) + (seed2 / 30323.0f), 1.0);
f32 newSeed = (seed0 / 30269.0f) + (seed1 / 30307.0f) + (seed2 / 30323.0f);
return fabsf(rm);
return fabsf(fmodf(newSeed, 1.0));
}
/* 80053DE0-80053E18 04E720 0038+00 1/1 0/0 0/0 .text getF__8cM_rnd_cFf */
@@ -971,7 +985,7 @@ void dDlst_effectLine_c::draw() {
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR);
GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0);
GXSetCullMode(GX_CULL_NONE);
GXLoadPosMtxImm(j3dSys.mViewMtx, GX_PNMTX0);
GXLoadPosMtxImm(j3dSys.getViewMtx(), GX_PNMTX0);
GXSetClipMode(GX_CLIP_ENABLE);
GXSetCurrentMtx(0);
int r31 = getRndValue(field_0x20, field_0x22);
@@ -989,7 +1003,8 @@ void dDlst_effectLine_c::draw() {
local_74.z = field_0x10.z;
cMtx_multVec(dComIfGd_getInvViewMtx(), &local_68, &local_68);
cMtx_multVec(dComIfGd_getInvViewMtx(), &local_74, &local_74);
GXSetLineWidth(getRndValue(field_0x24, field_0x26), GX_TO_ZERO);
tmp = getRndValue(field_0x24, field_0x26);
GXSetLineWidth(tmp, GX_TO_ZERO);
GXBegin(GX_LINES, GX_VTXFMT0, 2);
GXPosition3f32(local_68.x, local_68.y, local_68.z);
GXPosition3f32(local_74.x, local_74.y, local_74.z);
@@ -1026,6 +1041,7 @@ int dDlst_shadowPoly_c::set(cBgD_Vtx_t* i_vtx, u16 param_1, u16 param_2, u16 par
dDlst_shadowTri_c* dst = getTri() + mCount;
cBgD_Vtx_t* vtx = i_vtx;
cXyz b(*i_plane->GetNP());
f32 temp_f3 = (1.0f - fabsf(b.y));
temp_f3 *= temp_f3;
@@ -1034,9 +1050,9 @@ int dDlst_shadowPoly_c::set(cBgD_Vtx_t* i_vtx, u16 param_1, u16 param_2, u16 par
b.z *= temp_f3;
b *= 2.0f;
VECAdd(&i_vtx[param_1], &b, &dst->mPos[0]);
VECAdd(&i_vtx[param_2], &b, &dst->mPos[1]);
VECAdd(&i_vtx[param_3], &b, &dst->mPos[2]);
PSVECAdd(&vtx[param_1], &b, &dst->mPos[0]);
PSVECAdd(&vtx[param_2], &b, &dst->mPos[1]);
PSVECAdd(&vtx[param_3], &b, &dst->mPos[2]);
mCount++;
return 1;
}
@@ -1062,7 +1078,8 @@ static J3DDrawBuffer* J3DDrawBuffer__create(u32 size) {
J3DDrawBuffer* buffer = new J3DDrawBuffer();
if (buffer) {
if (buffer->allocBuffer(size) == kJ3DError_Success) {
J3DError error = buffer->allocBuffer(size);
if (error == kJ3DError_Success) {
return buffer;
}
delete buffer;
@@ -1079,15 +1096,18 @@ void dDlst_shadowReal_c::reset() {
/* 80054500-800545D4 04EE40 00D4+00 1/1 0/0 0/0 .text imageDraw__18dDlst_shadowReal_cFPA4_f */
void dDlst_shadowReal_c::imageDraw(Mtx param_0) {
GXSetProjection(mRenderProjMtx, GX_ORTHOGRAPHIC);
JUT_ASSERT(1916, mModelNum);
J3DModelData* model_data;
J3DModel** models = mpModels;
J3DShapePacket* shape_pkt;
for (u8 i = 0; i < mModelNum; i++) {
J3DModelData* model_data = (*models)->getModelData();
model_data = (*models)->getModelData();
model_data->getShapeNodePointer(0)->loadPreDrawSetting();
for (u16 j = 0; j < model_data->getShapeNum(); j++) {
if (!model_data->getShapeNodePointer(j)->checkFlag(1)) {
J3DShapePacket* shape_pkt = (*models)->getShapePacket(j);
shape_pkt = (*models)->getShapePacket(j);
shape_pkt->setBaseMtxPtr(&mViewMtx);
shape_pkt->drawFast();
shape_pkt->setBaseMtxPtr((Mtx*)param_0);