From cfb614e8b2a415fcb77513b6b1986aa44bd704d4 Mon Sep 17 00:00:00 2001 From: hatal175 Date: Wed, 23 Apr 2025 21:39:12 +0300 Subject: [PATCH] d_menu_letter equivalent (#2407) --- configure.py | 2 +- include/JSystem/J2DGraph/J2DPicture.h | 7 +- include/d/d_com_inf_game.h | 2 +- include/d/d_menu_letter.h | 2 +- include/d/d_msg_string.h | 13 +- include/d/d_stage.h | 2 +- src/d/d_drawlist.cpp | 110 +++++++++------- src/d/d_menu_letter.cpp | 174 +++----------------------- src/d/d_simple_model.cpp | 87 +++++++++---- src/f_pc/f_pc_base.cpp | 33 ++++- 10 files changed, 193 insertions(+), 239 deletions(-) diff --git a/configure.py b/configure.py index 9122731eb49..ef837b74721 100755 --- a/configure.py +++ b/configure.py @@ -603,7 +603,7 @@ config.libs = [ Object(MatchingFor("GZ2E01"), "d/d_menu_fmap2D.cpp"), Object(MatchingFor("GZ2E01"), "d/d_menu_insect.cpp"), Object(MatchingFor("GZ2E01"), "d/d_menu_item_explain.cpp"), - Object(NonMatching, "d/d_menu_letter.cpp", extra_cflags=['-pragma "nosyminline on"']), + Object(Equivalent, "d/d_menu_letter.cpp", extra_cflags=['-pragma "nosyminline on"']), # weak function order Object(MatchingFor("GZ2E01"), "d/d_menu_option.cpp"), Object(MatchingFor("GZ2E01"), "d/d_menu_ring.cpp"), Object(Equivalent, "d/d_menu_save.cpp"), # missing 0x30 bytes of padding between vtables, likely some abstract base class vtable that gets stripped out diff --git a/include/JSystem/J2DGraph/J2DPicture.h b/include/JSystem/J2DGraph/J2DPicture.h index af827f9e4ee..c78dfc4d4b2 100644 --- a/include/JSystem/J2DGraph/J2DPicture.h +++ b/include/JSystem/J2DGraph/J2DPicture.h @@ -142,7 +142,12 @@ public: /* 802FD964 */ virtual const ResTIMG* changeTexture(char const*, u8); /* 802FD9BC */ virtual const ResTIMG* changeTexture(ResTIMG const*, u8, JUTPalette*); /* 802FDAC8 */ virtual const ResTIMG* changeTexture(char const*, u8, JUTPalette*); - /* 800539DC */ virtual JUTTexture* getTexture(u8) const; + /* 800539DC */ virtual JUTTexture* getTexture(u8 param_0) const { + if (param_0 < 2) { + return mTexture[param_0]; + } + return NULL; + } /* 802FF634 */ virtual u8 getTextureCount() const { return mTextureNum; } /* 80053C6C */ virtual bool setBlack(JUtility::TColor i_black) { mBlack = i_black; diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 3965488c37c..98cf2f78139 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -3376,7 +3376,7 @@ inline BOOL dComIfGp_roomControl_checkRoomDisp(int i_roomNo) { return g_dComIfG_gameInfo.play.getRoomControl()->checkRoomDisp(i_roomNo); } -inline BOOL dComIfGp_roomControl_checkStatusFlag(int i_roomNo, u8 flag) { +inline u8 dComIfGp_roomControl_checkStatusFlag(int i_roomNo, u8 flag) { return g_dComIfG_gameInfo.play.getRoomControl()->checkStatusFlag(i_roomNo, flag); } diff --git a/include/d/d_menu_letter.h b/include/d/d_menu_letter.h index 6a517e22a71..1de117ce455 100644 --- a/include/d/d_menu_letter.h +++ b/include/d/d_menu_letter.h @@ -55,7 +55,7 @@ public: /* 801E1678 */ u8 getLetterNum(); /* 801E1748 */ void setHIO(bool); - /* 801E1D5C */ virtual void draw(); + /* 801E1D5C */ virtual void draw() { _draw(); } /* 801DCF34 */ virtual ~dMenu_Letter_c(); u8 getStatus() { return mStatus; } diff --git a/include/d/d_msg_string.h b/include/d/d_msg_string.h index 44eb0e40134..3fb5d4da330 100644 --- a/include/d/d_msg_string.h +++ b/include/d/d_msg_string.h @@ -20,8 +20,17 @@ public: return getStringLocal(param_0, param_1, param_2, param_3, param_4, param_5); } } - /* 801E1D10 */ virtual f32 getStringPage(u32, u8, u8, J2DTextBox*, J2DTextBox*, JUTFont*, COutFont_c*, - u8); + /* 801E1D10 */ virtual f32 getStringPage(u32 param_1, u8 param_2, u8 param_3, + J2DTextBox* param_4, J2DTextBox* param_5, + JUTFont* param_6, COutFont_c* param_7, u8 param_8) { + if (param_7 == NULL && mpOutFont != NULL) { + return getStringPageLocal(param_1, param_2, param_3, param_4, param_5, param_6, + mpOutFont, param_8); + } else { + return getStringPageLocal(param_1, param_2, param_3, param_4, param_5, param_6, param_7, + param_8); + } + } /* 80249DB4 */ virtual void resetStringLocal(J2DTextBox*); /* 80249DE4 */ virtual void drawOutFontLocal(J2DTextBox*, f32); /* 80249ED0 */ virtual void drawFontLocal(J2DTextBox*, u8, f32, f32, f32, f32, u32, u8); diff --git a/include/d/d_stage.h b/include/d/d_stage.h index bcf132eff9b..7656b16e709 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -1114,7 +1114,7 @@ public: mStatus[param_0].mpBgW = i_bgw; } - BOOL checkStatusFlag(int i_roomNo, u8 flag) const { + u8 checkStatusFlag(int i_roomNo, u8 flag) const { return cLib_checkBit(mStatus[i_roomNo].mFlag, flag); } diff --git a/src/d/d_drawlist.cpp b/src/d/d_drawlist.cpp index 52174aa350e..aaa698ba56e 100644 --- a/src/d/d_drawlist.cpp +++ b/src/d/d_drawlist.cpp @@ -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); diff --git a/src/d/d_menu_letter.cpp b/src/d/d_menu_letter.cpp index 58ca2564463..691ab171170 100644 --- a/src/d/d_menu_letter.cpp +++ b/src/d/d_menu_letter.cpp @@ -20,138 +20,6 @@ #include "d/d_msg_scrn_arrow.h" #include "d/d_lib.h" -extern "C" void __ct__14dMenu_Letter_cFP10JKRExpHeapP9STControlP10CSTControl(); -extern "C" void __dt__14dMenu_Letter_cFv(); -extern "C" void _create__14dMenu_Letter_cFv(); -extern "C" void _move__14dMenu_Letter_cFv(); -extern "C" void _draw__14dMenu_Letter_cFv(); -extern "C" void isSync__14dMenu_Letter_cFv(); -extern "C" void letter_init_calc__14dMenu_Letter_cFv(); -extern "C" void init__14dMenu_Letter_cFv(); -extern "C" void _open__14dMenu_Letter_cFv(); -extern "C" void _close__14dMenu_Letter_cFv(); -extern "C" void wait_init__14dMenu_Letter_cFv(); -extern "C" void wait_move__14dMenu_Letter_cFv(); -extern "C" void slide_right_init__14dMenu_Letter_cFv(); -extern "C" void slide_right_move__14dMenu_Letter_cFv(); -extern "C" void slide_left_init__14dMenu_Letter_cFv(); -extern "C" void slide_left_move__14dMenu_Letter_cFv(); -extern "C" void read_open_init__14dMenu_Letter_cFv(); -extern "C" void read_open_move__14dMenu_Letter_cFv(); -extern "C" void read_move_init__14dMenu_Letter_cFv(); -extern "C" void read_move_move__14dMenu_Letter_cFv(); -extern "C" void read_next_fadeout_init__14dMenu_Letter_cFv(); -extern "C" void read_next_fadeout_move__14dMenu_Letter_cFv(); -extern "C" void read_next_fadein_init__14dMenu_Letter_cFv(); -extern "C" void read_next_fadein_move__14dMenu_Letter_cFv(); -extern "C" void read_close_init__14dMenu_Letter_cFv(); -extern "C" void read_close_move__14dMenu_Letter_cFv(); -extern "C" void screenSetMenu__14dMenu_Letter_cFv(); -extern "C" void getWhite__10J2DTextBoxCFv(); -extern "C" void getBlack__10J2DTextBoxCFv(); -extern "C" void getWhite__10J2DPictureCFv(); -extern "C" void getBlack__10J2DPictureCFv(); -extern "C" void screenSetBase__14dMenu_Letter_cFv(); -extern "C" void screenSetShadow__14dMenu_Letter_cFv(); -extern "C" void screenSetLetter__14dMenu_Letter_cFv(); -extern "C" void screenSetDoIcon__14dMenu_Letter_cFv(); -extern "C" void setCursorPos__14dMenu_Letter_cFv(); -extern "C" void changeActiveColor__14dMenu_Letter_cFv(); -extern "C" void changePageLight__14dMenu_Letter_cFv(); -extern "C" void setPageText__14dMenu_Letter_cFv(); -extern "C" void setDMYPageText__14dMenu_Letter_cFv(); -extern "C" void copyDMYMenu__14dMenu_Letter_cFv(); -extern "C" void setAButtonString__14dMenu_Letter_cFUs(); -extern "C" void setBButtonString__14dMenu_Letter_cFUs(); -extern "C" void getLetterNum__14dMenu_Letter_cFv(); -extern "C" void setHIO__14dMenu_Letter_cFb(); -extern "C" void -getStringPage__12dMsgString_cFUlUcUcP10J2DTextBoxP10J2DTextBoxP7JUTFontP10COutFont_cUc(); -extern "C" void draw__14dMenu_Letter_cFv(); -extern "C" void __sinit_d_menu_letter_cpp(); -extern "C" extern char const* const d_menu_d_menu_letter__stringBase0; - -// -// External References: -// - -extern "C" void mDoExt_setCurrentHeap__FP7JKRHeap(); -extern "C" void mDoExt_getMesgFont__Fv(); -extern "C" void mDoExt_getSubFont__Fv(); -extern "C" void create__24mDoDvdThd_mountArchive_cFPCcUcP7JKRHeap(); -extern "C" void checkUpTrigger__9STControlFv(); -extern "C" void checkDownTrigger__9STControlFv(); -extern "C" void onLetterGetFlag__17dSv_letter_info_cFi(); -extern "C" void onLetterReadFlag__17dSv_letter_info_cFi(); -extern "C" void isLetterReadFlag__17dSv_letter_info_cCFi(); -extern "C" void __ct__Q28JUtility6TColorFv(); -extern "C" void __ct__16dSelect_cursor_cFUcfP10JKRArchive(); -extern "C" void setPos__16dSelect_cursor_cFffP7J2DPaneb(); -extern "C" void setParam__16dSelect_cursor_cFfffff(); -extern "C" void setScale__16dSelect_cursor_cFf(); -extern "C" void setAlphaRate__16dSelect_cursor_cFf(); -extern "C" void getStringKanji__13dMeter2Info_cFUlPcP14JMSMesgEntry_c(); -extern "C" void dMeter2Info_getRecieveLetterNum__Fv(); -extern "C" void dMeter2Info_set2DVibration__Fv(); -extern "C" void __ct__15dMsgScrnArrow_cFv(); -extern "C" void draw__15dMsgScrnArrow_cFv(); -extern "C" void setPos__15dMsgScrnArrow_cFff(); -extern "C" void arwAnimeInit__15dMsgScrnArrow_cFv(); -extern "C" void arwAnimeMove__15dMsgScrnArrow_cFv(); -extern "C" void dotAnimeInit__15dMsgScrnArrow_cFv(); -extern "C" void dotAnimeMove__15dMsgScrnArrow_cFv(); -extern "C" void -getStringPageLocal__16dMsgStringBase_cFUlUcUcP10J2DTextBoxP10J2DTextBoxP7JUTFontP10COutFont_cUc(); -extern "C" void getPageMax__16dMsgStringBase_cFi(); -extern "C" void __ct__12dMsgString_cFv(); -extern "C" void __dt__12dMsgString_cFv(); -extern "C" void __ct__8CPaneMgrFv(); -extern "C" void __ct__8CPaneMgrFP9J2DScreenUxUcP10JKRExpHeap(); -extern "C" void __dt__8CPaneMgrFv(); -extern "C" void paneTrans__8CPaneMgrFff(); -extern "C" void getGlobalVtx__8CPaneMgrFP7J2DPanePA3_A4_fUcbs(); -extern "C" void getGlobalVtxCenter__8CPaneMgrFP7J2DPanebs(); -extern "C" void dPaneClass_showNullPane__FP9J2DScreen(); -extern "C" void setAlphaRate__13CPaneMgrAlphaFf(); -extern "C" void cLib_addCalc2__FPffff(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void func_802E90C0(); -extern "C" void getBounds__7J2DPaneFv(); -extern "C" void __ct__9J2DScreenFv(); -extern "C" void setPriority__9J2DScreenFPCcUlP10JKRArchive(); -extern "C" void draw__9J2DScreenFffPC14J2DGrafContext(); -extern "C" void __ct__10J2DPictureFPC7ResTIMG(); -extern "C" void getStringPtr__10J2DTextBoxCFv(); -extern "C" void setString__10J2DTextBoxFsPCce(); -extern "C" void __construct_array(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_14(); -extern "C" void _savegpr_24(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_14(); -extern "C" void _restgpr_24(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" extern void* __vt__12dDlst_base_c[3]; -extern "C" u8 letter_data__12dMenu_Letter[512]; -extern "C" u8 m_cpadInfo__8mDoCPd_c[256]; -extern "C" u8 mFader__13mDoGph_gInf_c[4]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; - -// -// Declarations: -// - -/* ############################################################################################## */ /* 803BDA00-803BDA0C 01AB20 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */ static u8 cNullVec__6Z2Calc[12] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -181,18 +49,6 @@ static moveFunc map_move_process[] = { &dMenu_Letter_c::read_close_move, }; -// /* 803BDB8C-803BDBA8 01ACAC 0010+0C 2/2 0/0 0/0 .data __vt__14dMenu_Letter_c */ -// SECTION_DATA extern void* __vt__14dMenu_Letter_c[4 + 3 /* padding */] = { -// (void*)NULL /* RTTI */, -// (void*)NULL, -// (void*)draw__14dMenu_Letter_cFv, -// (void*)__dt__14dMenu_Letter_cFv, -// /* padding */ -// NULL, -// NULL, -// NULL, -// }; - /* 801DCDC0-801DCF34 1D7700 0174+00 0/0 2/2 0/0 .text * __ct__14dMenu_Letter_cFP10JKRExpHeapP9STControlP10CSTControl */ dMenu_Letter_c::dMenu_Letter_c(JKRExpHeap* i_heap, STControl* i_stick, CSTControl* i_cstick) { @@ -216,8 +72,7 @@ dMenu_Letter_c::dMenu_Letter_c(JKRExpHeap* i_heap, STControl* i_stick, CSTContro letter_init_calc(); field_0x358 = 0.0f; field_0x35c = 0.0f; - field_0x364 = 1.0f; - field_0x360 = 1.0f; + field_0x360 = field_0x364 = 1.0f; for (int i = 0; i < 9; i++) { for (int j = 0; j < 6; j++) { field_0x376[i][j] = 0; @@ -300,13 +155,13 @@ dMenu_Letter_c::~dMenu_Letter_c() { } if (mpMount != NULL) { - mpMount->getArchive()->unmount(); - delete mpMount; + JKRUnmountArchive(mpMount->getArchive()); + mpMount->destroy(); mpMount = NULL; } if (mpArchive != NULL) { - mpArchive->unmount(); + JKRUnmountArchive(mpArchive); mpArchive = NULL; } dComIfGp_getMsgArchive(0)->removeResourceAll(); @@ -315,14 +170,21 @@ dMenu_Letter_c::~dMenu_Letter_c() { /* 801DD36C-801DD474 1D7CAC 0108+00 1/1 0/0 0/0 .text _create__14dMenu_Letter_cFv */ void dMenu_Letter_c::_create() { mpDrawCursor = new dSelect_cursor_c(2, 1.0f, NULL); + JUT_ASSERT(231, mpDrawCursor != 0); + #if VERSION == VERSION_SHIELD_DEBUG + mpDrawCursor->setParam(1.01f, 0.85f, 0.02f, 0.5f, 0.5f); + #else mpDrawCursor->setParam(1.06f, 0.9f, 0.02f, 0.4f, 0.4f); + #endif mpDrawCursor->setAlphaRate(0.0f); mpDrawCursor->setScale(0.0f); mpDrawCursor->offPlayAnime(0); mpString = new dMsgString_c(); - + JUT_ASSERT(245, mpString != 0); + mpArrow = new dMsgScrnArrow_c(); + JUT_ASSERT(249, mpArrow != 0); screenSetMenu(); screenSetBase(); @@ -347,7 +209,6 @@ void dMenu_Letter_c::_move() { } /* 801DD50C-801DD934 1D7E4C 0428+00 1/1 1/1 0/0 .text _draw__14dMenu_Letter_cFv */ -// NONMATCHING - getGlobalVtx result copy issue void dMenu_Letter_c::_draw() { if (mpArchive == NULL) { return; @@ -363,10 +224,12 @@ void dMenu_Letter_c::_draw() { GXGetScissor(&left, &top, &width, &height); CPaneMgr afStack_138; Mtx mtx; - Vec local_178 = afStack_138.getGlobalVtx(field_0x1ec, &mtx, 0, false, 0); + Vec local_178; + local_178 = afStack_138.getGlobalVtx(field_0x1ec, &mtx, 0, false, 0); f32 x1 = local_178.x; f32 y1 = local_178.y; - Vec local_184 = afStack_138.getGlobalVtx(field_0x1ec, &mtx, 3, false, 0); + Vec local_184; + local_184 = afStack_138.getGlobalVtx(field_0x1ec, &mtx, 3, false, 0); f32 dVar17 = mDoGph_gInf_c::getWidthF() / 608.0f; f32 dVar16 = mDoGph_gInf_c::getHeightF() / 448.0f; f32 fVar1 = (x1 - mDoGph_gInf_c::getMinXF()) / dVar17; @@ -1489,8 +1352,3 @@ void dMenu_Letter_c::setHIO(bool i_useHIO) { } } } - -/* 801E1D5C-801E1D7C 1DC69C 0020+00 1/0 0/0 0/0 .text draw__14dMenu_Letter_cFv */ -void dMenu_Letter_c::draw() { - _draw(); -} diff --git a/src/d/d_simple_model.cpp b/src/d/d_simple_model.cpp index 44d237e1761..0085c29974d 100644 --- a/src/d/d_simple_model.cpp +++ b/src/d/d_simple_model.cpp @@ -17,6 +17,12 @@ /* 80048C54-80048CB4 043594 0060+00 1/1 0/0 0/0 .text dSmplMdl_modelUpdateDL__FP8J3DModel */ static void dSmplMdl_modelUpdateDL(J3DModel* i_model) { + JUT_ASSERT(61, i_model != 0); + J3DModelData* modelData = i_model->getModelData(); + if (modelData->getMaterialNodePointer(0)->getMaterialAnm() != NULL) { + OS_REPORT( + "\x1b[43;30mシンプルモデル描画:モデルは\'bmdg\'フォルダに置いていますか?\n\x1b[m"); + } i_model->calc(); i_model->entry(); i_model->viewCalc(); @@ -48,6 +54,8 @@ diff_model_c::diff_model_c() { dSmplMdl_draw_c::~dSmplMdl_draw_c() { for (int i = 0; i < 8; i++) { if (mModel[i].getModel() != NULL) { + OS_REPORT("\x1b[43;30m差分DL用ダミーモデル削除忘れがあります!!\n"); + OS_REPORT("差分DLモデル領域を強制的に削除します。\n", "\x1b[m"); mModel[i].remove(1); } } @@ -82,24 +90,41 @@ void dSmplMdl_draw_c::entry(J3DModel* i_model, int roomNo) { } } mListCount++; + } else { + OS_REPORT("\x1b[43;30mシンプルモデル描画エントリ数オーバー!!(%s, %d)\n\x1b[m", + __FILE__, 278); } } /* 80048F70-80049058 0438B0 00E8+00 0/0 1/1 0/0 .text * addModel__15dSmplMdl_draw_cFP12J3DModelDataiUc */ BOOL dSmplMdl_draw_c::addModel(J3DModelData* i_modelData, int roomNo, u8 drawBG) { + JUT_ASSERT(307, i_modelData != 0); + if (roomNo == -1) { + OS_REPORT("\x1b[43;30mシンプルモデル描画差分DLモデル登録:部屋番号指定がありません!!!\n\x1b[m"); + } for (int i = 0; i < 8; i++) { if (mModel[i].isSame(i_modelData, roomNo)) { - return mModel[i].create(i_modelData, roomNo, drawBG) ? TRUE : FALSE; + if (mModel[i].create(i_modelData, roomNo, drawBG)) { + return TRUE; + } + return FALSE; } } for (int i = 0; i < 8; i++) { if (mModel[i].getModelData() == NULL) { - return mModel[i].create(i_modelData, roomNo, drawBG) ? TRUE : FALSE; + if (mModel[i].create(i_modelData, roomNo, drawBG)) { + return TRUE; + } + return FALSE; } } + OS_REPORT( + "\x1b[43;30m差分DL用ダミーモデル空きエントリが見つかりませんでした!(%s, %d)\n\x1b[m", + __FILE__, 349); + return 0; } @@ -116,12 +141,14 @@ int dSmplMdl_draw_c::removeModel(J3DModelData* i_modelData, int roomNo) { return 0; } } - + + OS_REPORT_ERROR("シンプルモデルを登録してないのに削除に!\n"); return 0; } /* 800490EC-800491F4 043A2C 0108+00 1/1 0/0 0/0 .text create__12diff_model_cFP12J3DModelDataiUc */ BOOL diff_model_c::create(J3DModelData* i_modelData, int roomNo, u8 drawBG) { + JUT_ASSERT(397, i_modelData != 0); if (mpHeap == NULL) { mpHeap = mDoExt_createSolidHeapFromGameToCurrent(0x2000, 0x20); @@ -129,15 +156,20 @@ BOOL diff_model_c::create(J3DModelData* i_modelData, int roomNo, u8 drawBG) { mpModel = mDoExt_J3DModel__create(i_modelData, 0x80000, 0x11000084); if (mpModel == NULL) { + OS_REPORT("差分DL用モデル モデル生成失敗!(%s, %d)\n", __FILE__, 413); remove(1); mDoExt_restoreCurrentHeap(); } else { - mpModel->setBaseScale(cXyz(0.0f, 0.0f, 0.0f)); - mpModel->setBaseTRMtx(g_mDoMtx_identity); + cXyz scale(0.0f, 0.0f, 0.0f); + mpModel->setBaseScale(scale); + mpModel->setBaseTRMtx(mDoMtx_getIdentity()); mCreateNum++; - mDoExt_adjustSolidHeapToSystem(mpHeap); + int result = mDoExt_adjustSolidHeapToSystem(mpHeap); mRoomNo = roomNo; mDrawBG = drawBG; + #if VERSION == VERSION_SHIELD_DEBUG + field_0x12 = 0; + #endif return 1; } } @@ -162,9 +194,14 @@ void diff_model_c::remove(int param_0) { mCreateNum--; if (mCreateNum == 0 || param_0 != 0) { - JKRSolidHeap* heap = mpHeap; - if (heap != NULL) { - mDoExt_destroySolidHeap(heap); + if (mpHeap != NULL) { + #if VERSION == VERSION_SHIELD_DEBUG + if (field_0x12 != 0) { + JUT_WARN(510, "%s", "Simple Model Denger Remove !!\n"); + } + #endif + + mDoExt_destroySolidHeap(mpHeap); init(); } } @@ -173,21 +210,25 @@ void diff_model_c::remove(int param_0) { /* 80049270-80049368 043BB0 00F8+00 1/1 0/0 0/0 .text draw__12diff_model_cFv */ void diff_model_c::draw() { modelList_c* list = mpList; - if (list != NULL) { - if (dComIfGp_roomControl_checkStatusFlag(getRoomNo(), 0x10)) { - dKy_tevstr_c* tevstr = dComIfGp_roomControl_getTevStr(getRoomNo()); - g_env_light.setLightTevColorType_MAJI(mpModel, tevstr); + if (list != NULL && dComIfGp_roomControl_checkStatusFlag(getRoomNo(), 0x10)) { + g_env_light.setLightTevColorType_MAJI(mpModel, dComIfGp_roomControl_getTevStr(getRoomNo())); - if (mDrawBG == 1) { - dComIfGd_setListBG(); - } - - for (; list != NULL; list = list->field_0x4) { - dSmplMdl_modelUpdateDL(list->mpModel); - } - mDoExt_modelUpdateDL(mpModel); - dComIfGd_setList(); + if (mDrawBG == 1) { + dComIfGd_setListBG(); } + + for (; list != NULL; list = list->field_0x4) { + dSmplMdl_modelUpdateDL(list->mpModel); + } + mDoExt_modelUpdateDL(mpModel); + dComIfGd_setList(); + #if VERSION == VERSION_SHIELD_DEBUG + field_0x12 = 1; + #endif + } else { + #if VERSION == VERSION_SHIELD_DEBUG + field_0x12 = 0; + #endif } } @@ -224,4 +265,4 @@ void diff_model_c::insert(modelList_c* list) { } list->field_0x4 = prev; -} \ No newline at end of file +} diff --git a/src/f_pc/f_pc_base.cpp b/src/f_pc/f_pc_base.cpp index c94a072977f..a422bea1a21 100644 --- a/src/f_pc/f_pc_base.cpp +++ b/src/f_pc/f_pc_base.cpp @@ -7,6 +7,7 @@ #include "SSystem/SComponent/c_malloc.h" #include "SSystem/SComponent/c_phase.h" #include "SSystem/SStandard/s_basic.h" +#include "d/d_stage.h" #include "f_pc/f_pc_layer.h" #include "f_pc/f_pc_method.h" #include "f_pc/f_pc_pause.h" @@ -93,13 +94,33 @@ int fpcBs_IsDelete(base_process_class* i_proc) { /* 800207BC-80020820 0064+00 s=0 e=2 z=0 None .text fpcBs_Delete__FP18base_process_class */ int fpcBs_Delete(base_process_class* i_proc) { - int result = fpcMtd_Delete(i_proc->methods, i_proc); - if (result == 1) { - fpcBs_DeleteAppend(i_proc); - i_proc->type = 0; - cMl::free(i_proc); - } + BOOL result = TRUE; + if (result == TRUE) { + result = fpcMtd_Delete(i_proc->methods, i_proc); + if (result == 1) { + s16 profname = i_proc->profname; + fpcBs_DeleteAppend(i_proc); + i_proc->type = 0; + cMl::free(i_proc); + #if VERSION == VERSION_SHIELD_DEBUG + // JSUList* allList = Z2GetAudioMgr()->getAllList(); + + // for (JSUListIterator it(allList->getFirst()); it != allList->getEnd(); it++) { + // static JSULink* DUMMY_FILL_IT = NULL; + // static Z2SoundObjBase* DUMMY_FILL_P = NULL; + // if (it == DUMMY_FILL_IT || it.getObject() == DUMMY_FILL_P) { + // const char* stageName = dStage_getName2(profname, 0); + // if (stageName == NULL) { + // JUT_PANIC_F(341, "Sound Object Not Delete !! <%d>\n", profname); + // } else { + // JUT_PANIC_F(345, "Sound Object Not Delete !! <%s>\n", stageName); + // } + // } + // } + #endif + } + } return result; }