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
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 193 additions and 239 deletions

View File

@ -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

View File

@ -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;

View File

@ -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);
}

View File

@ -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; }

View File

@ -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);

View File

@ -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);
}

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);

View File

@ -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();
}

View File

@ -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差分用ダミーモデル削除忘れがあります\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シンプルモデル描画差分モデル登録部屋番号指定がありません\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差分用ダミーモデル空きエントリが見つかりませんでした(%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;
}
}

View File

@ -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<Z2SoundObjBase>* allList = Z2GetAudioMgr()->getAllList();
// for (JSUListIterator<Z2SoundObjBase> it(allList->getFirst()); it != allList->getEnd(); it++) {
// static JSULink<Z2SoundObjBase>* 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;
}