From bfe4c4c7ee7cccfae909ded5f0d12bd9dcc4c231 Mon Sep 17 00:00:00 2001 From: Teddy Heidmann Date: Wed, 12 Aug 2026 20:44:06 -0700 Subject: [PATCH] so many pointers --- include/d/d_menu_dmap.h | 2 +- src/d/d_menu_dmap.cpp | 146 ++++++++++++++++++++++++++++++++++++++-- 2 files changed, 141 insertions(+), 7 deletions(-) diff --git a/include/d/d_menu_dmap.h b/include/d/d_menu_dmap.h index 401135f29..3369f4fe6 100644 --- a/include/d/d_menu_dmap.h +++ b/include/d/d_menu_dmap.h @@ -144,7 +144,7 @@ public: /* 0x1DA8 */ char* mTxtName[2]; /* 0x1DB0 */ char* mTxtNote[2]; /* 0x1DB8 */ char* mTxtDummy[2]; - /* 0x1DC0 */ char field_0x1DC0[0x1DCC - 0x1DC0]; + /* 0x1DC0 */ char mDName[12]; /* 0x1DCC */ f32 mCarOfsX[4]; /* 0x1DDC */ f32 mCarOfsY[4]; /* 0x1DEC */ f32 mCarFloorOfsX[4]; diff --git a/src/d/d_menu_dmap.cpp b/src/d/d_menu_dmap.cpp index 709a3b06b..e208929ac 100644 --- a/src/d/d_menu_dmap.cpp +++ b/src/d/d_menu_dmap.cpp @@ -1154,28 +1154,162 @@ void dMenu_Dmap_c::itemScale() { /* 801ACDE0-801ACEB8 .text floorInit__12dMenu_Dmap_cFv */ void dMenu_Dmap_c::floorInit() { - /* Nonmatching */ + f32 yDif = (mFbPanes[0].mPosTopLeftOrig.y - mFbPanes[1].mPosTopLeftOrig.y) * + (6 - ((mTopFloor - mBottomFloor + 1) & 0xFF)); + f32 fw00Height = mFw00Pane.mSizeOrig.y; + f32 fw01Height = mFw01Pane.mSizeOrig.y; + mFw00Pane.mSizeOrig.y = mFw00Pane.mSize.y = fw00Height - yDif; + mFw01Pane.mSizeOrig.y = mFw01Pane.mSize.y = fw01Height - yDif; + mFw00Pane.mPosCenterOrig.y = mFw00Pane.mPosCenter.y = + (mFw00Pane.mPosTopLeftOrig.y + fw00Height) - mFw00Pane.mSizeOrig.y / 2.0f; + mFw01Pane.mPosCenterOrig.y = mFw01Pane.mPosCenter.y = + (mFw01Pane.mPosTopLeftOrig.y + fw01Height) - mFw01Pane.mSizeOrig.y / 2.0f; + fopMsgM_cposMove(&mFw00Pane); + fopMsgM_cposMove(&mFw01Pane); } /* 801ACEB8-801AD000 .text mapMove__12dMenu_Dmap_cFv */ void dMenu_Dmap_c::mapMove() { - /* Nonmatching */ + if (mCc38Pane.mUserArea > 0) { + mCc38Pane.mUserArea--; + f32 a = fopMsgM_valueIncrease(6, 6 - mCc38Pane.mUserArea, 0); + mCurFloorMapY += (s16)(a * ((mMpp1PosY + (mCurFloor - 0x80) * (mMpp1SizeY + mMppGapY)) - mCurFloorMapY)); + } else if (mCc38Pane.mUserArea < 0) { + mCc38Pane.mUserArea++; + f32 a = fopMsgM_valueIncrease(6, 6 - abs(mCc38Pane.mUserArea), 0); + mCurFloorMapY += (s16)(a * ((mMpp1PosY + (mCurFloor - 0x80) * (mMpp1SizeY + mMppGapY)) - mCurFloorMapY)); + } + dMap_Dmap_c* dmap; + s16 y = mCurFloorMapY; + dmap = dmap_c; + dmap->field_0x364 = mMpp1PosX; + dmap->field_0x366 = y; } /* 801AD000-801AD130 .text mapOffsetY__12dMenu_Dmap_cFv */ f32 dMenu_Dmap_c::mapOffsetY() { - /* Nonmatching */ - return 0.0f; + f32 ret = 0.0f; + dStage_dt_c* stage = &dComIfGp_getStage(); + if (dStage_stagInfo_GetSTType(stage->getStagInfo()) == dStageType_BOSS_e || + dStage_stagInfo_GetSTType(stage->getStagInfo()) == dStageType_MINIBOSS_e) { + if (stage->getDMap()) { + dStage_DMap_c* pinf = stage->getDMap(); + dStage_DMap_dt_c* entry = pinf->entries; + JUT_ASSERT(1627, pinf->num == 1); + for (int i = 0; i < pinf->num; i++, entry++) { + ret = entry->offsetY; + } + } + } + return ret; } /* 801AD130-801AD1A8 .text itemnameMove__12dMenu_Dmap_cFv */ void dMenu_Dmap_c::itemnameMove() { - /* Nonmatching */ + mNm00Pane.mUserArea++; + if (mNm00Pane.mUserArea <= 10) { + f32 alpha = fopMsgM_valueIncrease(10, mNm00Pane.mUserArea, 0); + fopMsgM_setNowAlpha(&mNm00Pane, alpha); + fopMsgM_setNowAlpha(&mNm01Pane, 1.0f - alpha); + } } /* 801AD1A8-801AD54C .text dnameSet__12dMenu_Dmap_cFv */ void dMenu_Dmap_c::dnameSet() { - /* Nonmatching */ + fopMsgM_itemMsgGet_c msgGet; + u32 msgNo; + + mDName[0] = 0; + switch (dStage_stagInfo_GetSaveTbl(dComIfGp_getStage().getStagInfo())) { + case dSv_save_c::STAGE_FF: + msgNo = 0x320; + break; + case dSv_save_c::STAGE_DRC: + msgNo = 0x59; + break; + case dSv_save_c::STAGE_FW: + msgNo = 0x5A; + break; + case dSv_save_c::STAGE_TOTG: + msgNo = 0x5B; + break; + case dSv_save_c::STAGE_ET: + msgNo = 0x5C; + break; + case dSv_save_c::STAGE_WT: + msgNo = 0x5D; + break; + case dSv_save_c::STAGE_GT: + msgNo = 0x5E; + break; + default: + msgNo = 0x59; + break; + } + + mesg_header* head_p = msgGet.getMesgHeader(msgNo); + JUT_ASSERT(1707, head_p); + + J2DTextBox::TFontSize fontSize; + ((J2DTextBox*)mDtlePane.pane)->getFontSize(fontSize); + fontSize.mSizeX = fontSize.mSizeY; + + char* src; + f32 strWidth; + char* mesg = (char*)msgGet.getMessage(head_p); + bool first = false; + f32 scale = fontSize.mSizeY / mFont->getCellWidth(); + src = mesg; + + while ((s8)*src != 0) { + char charStr[3]; + int byte = 0; + charStr[2] = byte; + charStr[1] = byte; + charStr[0] = byte; + + u32 c = (u8)(*(u8*)src); + if (c == 0x1A) { + src++; + src += (s8)*src - 1; + } else { + int charCode; + int hi_nibble = (c >> 4) & 0xF; + if (hi_nibble == 8 || hi_nibble == 9) { + byte = (u8)src[0]; + c = (u8)src[1]; + charCode = c; + charCode |= byte << 8; + charStr[0] = byte; + charStr[1] = c; + charStr[2] = 0; + src += 2; + } else { + charCode = c; + charStr[0] = c; + charStr[1] = byte; + src += 1; + } + + int width = mFont->getWidth(charCode); + strcat(mDName, charStr); + if (!first) { + strWidth = scale * (width + mFont->getOffset(charCode)); + first = true; + } else { + strWidth += width * scale; + } + } + } + + J2DTextBox* textBox = (J2DTextBox*)mDtlePane.pane; + if (textBox->getWidth() < strWidth) { + fontSize.mSizeX = (int)(fontSize.mSizeX * mNm00Pane.pane->getWidth() / strWidth); + } + + textBox->setFontSize(fontSize); + ((J2DTextBox*)mDtlePane.pane)->setCharSpace(0.0f); + ((J2DTextBox*)mDtlePane.pane)->setString(mDName); } /* 801AD54C-801ADA04 .text itemnameSet__12dMenu_Dmap_cFv */