#include "d/dolzel.h" // IWYU pragma: keep #include "d/d_msg_object.h" #include "d/d_msg_class.h" #include "d/d_msg_string.h" #include "d/d_msg_scrn_base.h" #include "d/d_msg_out_font.h" #include "d/d_msg_scrn_howl.h" #include "d/d_msg_scrn_jimaku.h" #include "d/d_msg_scrn_tree.h" #include "d/d_msg_scrn_kanban.h" #include "d/d_msg_scrn_item.h" #include "d/d_msg_scrn_staff.h" #include "d/d_msg_scrn_place.h" #include "d/d_msg_scrn_boss.h" #include "d/d_msg_scrn_talk.h" #include "d/actor/d_a_obj_ss_base.h" #include "d/actor/d_a_player.h" #include "d/actor/d_a_alink.h" #include "d/d_demo.h" #include "d/d_meter2_info.h" #include "d/d_meter2.h" #include "d/actor/d_a_midna.h" #include "f_op/f_op_msg_mng.h" #include "stdio.h" #include "m_Do/m_Do_controller_pad.h" #include "m_Do/m_Do_lib.h" #include "JSystem/JKernel/JKRExpHeap.h" static void dMsgObject_addFundRaising(s16 param_0); static void dMsgObject_addTotalPayment(s16 param_0); static s16 s_groupID; s16 dMsgObject_getGroupID() { return s_groupID; } static int dMsgObject_searchSSItem(void* param_1, void* param_2) { daPy_py_c* player = daPy_getPlayerActorClass(); if (fopAcM_IsActor(param_1) && fopAcM_GetName(param_1) == PROC_OBJ_SSITEM) { if (static_cast(param_1)->getProcessID() == player->getGrabActorID()) { static_cast(param_1)->setSoldOut(); return 0; } } return 0; } dMsgObject_HowlHIO_c::dMsgObject_HowlHIO_c() { mHighlightScale = 0.5f; mHighlightMoyaR0.set(255, 255, 255, 255); mHighlightMoyaR1.set(0, 0, 0, 0); mHighlightMoyabsR0.set(200, 255, 200, 255); mHighlightMoyabsR1.set(0, 255, 128, 0); mHighlightPikaR0.set(0, 0, 0, 0); mHighlightPikaR1.set(0, 0, 0, 0); mAnmSpeed = 0.1f; mHowlLineStartCol.set(150, 255, 210, 255); mHowlLineEndCol.set(128, 128, 128, 255); mGuideUpperBlack.set(0, 105, 150, 0); mGuideUpperWhite.set(255, 255, 255, 255); mGuideUpperAlpha = 0.3f; mGuideMidBlack.set(0, 105, 130, 0); mGuideMidWhite.set(255, 255, 255, 255); mGuideMidAlpha = 0.3f; mGuideLowerBlack.set(0, 90, 150, 0); mGuideLowerWhite.set(255, 255, 255, 255); mGuideLowerAlpha = 0.4f; mAnswerUpperBlack.set(255, 255, 140, 0); mAnswerUpperWhite.set(255, 255, 255, 255); mAnswerUpperAlpha = 0.05f; mAnswerMidBlack.set(255, 255, 140, 0); mAnswerMidWhite.set(255, 255, 255, 255); mAnswerMidAlpha = 0.05f; mAnswerLowerBlack.set(255, 255, 140, 0); mAnswerLowerWhite.set(255, 255, 255, 255); mAnswerLowerAlpha = 0.05f; mDotBlack.set(150, 210, 255, 0); mDotWhite.set(255, 255, 255, 255); mDotScale = 1.5f; mWaveformLineLen = 15; mWaveformDotLen = 35; mDrawInterval = 2.0f; mLineThickness = 0.5f; mCrossPosX = 0.0f; mCrossPosY = 0.0f; mCrossScale = 1.0f; mWindowPosX = 0.0f; mWindowPosY = 0.0f; mWindowScale = 1.0f; mInputStartPoint = 0.0f; mWaveformThickness = 12; mLineSpaceOffset = 2.2f; } dMsgObject_HIO_c::dMsgObject_HIO_c() { mBoxMidna_fontSizeX = 23.0f; mBoxMidna_fontSizeY = 22.0f; field_0xc = 26.0f; field_0x14 = 25.0f; field_0x3c = 1.0f; mBoxNaviAnmSpeed = 1.0f; field_0x44 = 1.0f; mBoxItemAnmSpeed = 1.0f; field_0x4c = 1.0f; field_0x50 = 1.0f; field_0x54 = 1.0f; mBoxWolfAnmSpeed = 0.7f; mBoxTalkAlphaP = 0.9f; mBoxNaviAlphaP = 0.2f; mBoxMidnaAlphaP = 0.7f; mBoxItemAlphaP = 0.3f; mBoxStoneAlphaP = 0.4f; mBoxWoodAlphaP = 0.4f; mBoxBookAlphaP = 0.7f; mBoxWolfAlphaP = 0.9f; mSubtitleAlphaP = 1.0f; mBoxItemHaloAlpha = 0.0f; mBoxNaviHaloAlpha = 1.0f; mBoxMidnaHaloAlpha = 1.0f; mBoxWolfHaloAlpha = 0.3f; mBoxTalkHaloAlpha = 1.0f; #if REGION_JPN mBoxTalkScaleX = 1.1f; #else mBoxTalkScaleX = 1.2f; #endif mBoxNaviScaleX = 1.0f; mBoxMidnaScaleX = 1.0f; mBoxItemScaleX = 1.05f; mBoxStoneScaleX = 1.0f; mBoxWoodScaleX = 1.0f; mBoxBookScaleX = 1.0f; mBoxWolfScaleX = 1.05f; mStageTitleScaleX = 1.0f; mSubtitleScaleX = 1.0f; mBossNameScaleX = 1.0f; mBoxTalkScaleY = 1.0f; mBoxNaviScaleY = 1.0f; mBoxMidnaScaleY = 1.0f; mBoxItemScaleY = 0.97f; mBoxStoneScaleY = 1.0f; mBoxWoodScaleY = 1.0f; mBoxBookScaleY = 1.0f; mBoxWolfScaleY = 1.1f; mStageTitleScaleY = 1.0f; mSubtitleScaleY = 1.0f; mBossNameScaleY = 1.0f; for (int i = 0; i < 3; i++) { for (int j = 0; j < 10; j++) { mChoicePos[i][j] = 0.0f; mBoxPos[i][j] = 0.0f; } } mBoxPos[2][0] = 30.0f; mBoxPos[0][3] = 11.0f; mPortalIconScale = 1.7f; mTextPosX = 4.5f; mTextPosY = 0.0f; mStageTitleCharPosX = 0.0f; mStageTitleCharPosY = -45.0f; mStageTitleCharSizeX = 1.0f; mStageTitleCharSizeY = 1.0f; mStageTitleBasePosX = 0.0f; mStageTitleBasePosY = -45.0f; mStageTitleBaseSizeX = 1.0f; mStageTitleBaseSizeY = 1.0f; mStageTitleBaseAlpha = 1.0f; mBossNameCharPosX = 0.0f; mBossNameCharPosY = 0.0f; mBossNameCharSizeX = 1.0f; mBossNameCharSizeY = 1.0f; mBossNameBasePosX = 0.0f; mBossNameBasePosY = 0.0f; mBossNameBaseSizeX = 1.0f; mBossNameBaseSizeY = 1.0f; mBossNameBaseAlpha = 1.0f; mStageTitleDisplayType = 0; mBoxItemSizeX = 0.75f; mBoxItemSizeY = 0.75f; mBoxItemPosX = -5.0f; mBoxItemPosY = -1.0f; mBoxItemTextSizeX = 0.95f; mBoxItemTextSizeY = 0.95f; mBoxItemTextPosX = -30.0f; mBoxItemTextPosY = -1.0f; for (int i = 0; i < 10; i++) { mBoxStartBlack[0][i].set(0, 0, 0, 0); mBoxStartWhite[0][i].set(200, 200, 200, 255); mBoxStartBlack[1][i].set(0, 0, 0, 0); mBoxStartWhite[1][i].set(0, 0, 0, 255); } mSelMsgInactiveCol.set(150, 150, 150, 255); mMsgIndex = 0; mFlowIndex = 0; mSaveSeqMsgIndex = 0; mSelWaitFrame = 10; mBoxAppearBound = 240; mBoxAppearFrame = 10; mWaitFrame = 0; mLightAppearFrame = 10; field_0x304 = 5; mStageTitleFadeIn = 10; mStageTitleFadeOut = 10; mBossNameFadeIn = 10; mBossNameFadeOut = 10; mStageTitleDisplayTime = 60; mBossNameDisplayTime = 60; mMsgDebug = 0; mSaveSeqMsgDebug = 0; mBatchDisplayWeight_3 = 30; mCharDisplayWeight_5 = 3; mBatchDisplayWeight_8 = 10; mBatchDisplayWeight_9 = 30; mTextColorDebug = 0; mTextColorUpperR[0] = 0xff; mTextColorUpperG[0] = 0xff; mTextColorUpperB[0] = 0xff; mTextColorLowerR[0] = 0xff; mTextColorLowerG[0] = 0xff; mTextColorLowerB[0] = 0xff; mTextColorUpperR[1] = 0xf0; mTextColorUpperG[1] = 0x78; mTextColorUpperB[1] = 0x78; mTextColorLowerR[1] = 0xf0; mTextColorLowerG[1] = 0x78; mTextColorLowerB[1] = 0x78; mTextColorUpperR[2] = 0xaa; mTextColorUpperG[2] = 0xdc; mTextColorUpperB[2] = 0x8c; mTextColorLowerR[2] = 0xaa; mTextColorLowerG[2] = 0xdc; mTextColorLowerB[2] = 0x8c; mTextColorUpperR[3] = 0xa0; mTextColorUpperG[3] = 0xb4; mTextColorUpperB[3] = 0xdc; mTextColorLowerR[3] = 0xa0; mTextColorLowerG[3] = 0xb4; mTextColorLowerB[3] = 0xdc; mTextColorUpperR[4] = 0xdc; mTextColorUpperG[4] = 0xdc; mTextColorUpperB[4] = 0x82; mTextColorLowerR[4] = 0xdc; mTextColorLowerG[4] = 0xdc; mTextColorLowerB[4] = 0x82; mTextColorUpperR[5] = 0xb4; mTextColorUpperG[5] = 0xc8; mTextColorUpperB[5] = 0xe6; mTextColorLowerR[5] = 0xb4; mTextColorLowerG[5] = 0xc8; mTextColorLowerB[5] = 0xe6; mTextColorUpperR[6] = 0xc8; mTextColorUpperG[6] = 0xa0; mTextColorUpperB[6] = 0xdc; mTextColorLowerR[6] = 0xc8; mTextColorLowerG[6] = 0xa0; mTextColorLowerB[6] = 0xdc; mTextColorUpperR[7] = 0xff; mTextColorUpperG[7] = 0xff; mTextColorUpperB[7] = 0xff; mTextColorLowerR[7] = 0xff; mTextColorLowerG[7] = 0xff; mTextColorLowerB[7] = 0xff; mTextColorUpperR[8] = 0xdc; mTextColorUpperG[8] = 0xaa; mTextColorUpperB[8] = 0x78; mTextColorLowerR[8] = 0xdc; mTextColorLowerG[8] = 0xaa; mTextColorLowerB[8] = 0x78; mHaloDelayFrame = 0; mDisplaySpeed = 1; mHaloDelayFrameSpirit = 0; mDisplaySpeedSpirit = 4; mMessageDisplay = 0; mPikariHaloDelay_spirit = 0; mPikariScale = 1.5f; mPikariMoyaR0.r = 0xff; mPikariMoyaR0.g = 0xff; mPikariMoyaR0.b = 0xff; mPikariMoyaR0.a = 0x14; mPikariMoyaR1.r = 0xdc; mPikariMoyaR1.g = 0xb0; mPikariMoyaR1.b = 0x8a; mPikariMoyaR1.a = 0; mPikariMoyabsR0.r = 0xff; mPikariMoyabsR0.g = 0xff; mPikariMoyabsR0.b = 0xff; mPikariMoyabsR0.a = 30; mPikariMoyabsR1.r = 0xc0; mPikariMoyabsR1.g = 0x73; mPikariMoyabsR1.b = 0; mPikariMoyabsR1.a = 0; mPikariPikaR0.r = 0xaf; mPikariPikaR0.g = 0xdc; mPikariPikaR0.b = 0xa0; mPikariPikaR0.a = 0x8c; mPikariPikaR1.r = 0x96; mPikariPikaR1.g = 0xd2; mPikariPikaR1.b = 0x78; mPikariPikaR1.a = 0; mPikariAnmSpeed = 0.3f; } int dMsgObject_c::_create(msg_class* param_1) { field_0x124 = NULL; field_0x100 = param_1; field_0x16c = -1; field_0x16e = -1; mNowTalkFlowNo = 0; mpTalkActor = NULL; field_0x13c = 0; mpTalkPartner = NULL; mpTalkHeap = NULL; field_0x148 = NULL; mProcessID = 0xffffffff; mIdx = 0; mNodeIdx = 0xff; field_0x198 = 0; field_0x199 = 0; mFukiKind = 0xff; field_0x19b = 0; mFlowChk = 0; field_0x19d = 0; mpMsgDt = NULL; field_0x168 = 0; mInputValue = 0; mFundRaisingValue = 0; field_0x178 = 0; mNowTotalPrice = 0; mNowTotalPayment = 0; field_0x17e = 0; mPortalMessageID = 0; for (int i = 0; i < 3; i++) { mBombMessageID[i] = 0; mBombNum[i] = 0; mBombBagID[i] = 0xff; mSelectBombBag[i] = 0; } field_0x193 = 0; mInsectItemNo = 0xc0; mLetterNameID = 0; mItemEquipButton = 0; mSelectCancelPos = 0; mArrowNum = 0; mpMsgRes = dMeter2Info_getMsgResource(); changeGroup(0); mpOutFont = NULL; mpScrnDraw = NULL; mpResCont = new JMessage::TResourceContainer(); JUT_ASSERT(1299, mpResCont != NULL); mpCtrl = dDemo_c::getMesgControl(); JUT_ASSERT(1302, mpCtrl != NULL); mpRefer = new jmessage_tReference(); JUT_ASSERT(1305, mpRefer != NULL); mpRefer->setpStatus(¶m_1->mode); mpSeqProc = new jmessage_tSequenceProcessor(mpRefer, mpCtrl); JUT_ASSERT(1310, mpSeqProc != NULL); mpRenProc = new jmessage_tRenderingProcessor(mpRefer); JUT_ASSERT(1313, mpRenProc != NULL); mpRefer->setResourceContainer(mpResCont); mpCtrl->setSequenceProcessor(mpSeqProc); mpCtrl->setRenderingProcessor(mpRenProc); mpRefer->setObjectPtr(this); field_0x124 = new JMessage::TParse(mpResCont); field_0x124->parse(mpMsgDt, 0); mpCtrl->reset(); mpCtrl->resetResourceCache(); mpRefer->resetCharCountBuffer(); field_0x150 = 0.0f; mCameraCancelFlag = 0; mInputFlag = 0; mSmellType = 0xff; field_0x4ca = 0; mNoDemoFlag = 0; field_0x4cc = 0; field_0x4cd = 0; field_0x4ce = 0; field_0x4d4 = 0; field_0x4c7 = 0; mMsgOutputType = 0xff; mShopWaitTimer = 0; mSelectPushFlag = 0; field_0x1a3 = 0; mAutoMessageFlag = 0; mKillMessageFlag = false; mEquipBombInfo = 0; mPaymentFlag = 0; field_0x4d1 = 0; field_0x196 = 0; mMsgSendControl = 0; field_0x197 = 0; mMessageID = 1000; field_0x158 = mMessageID; field_0x15c = 0; field_0x172 = 0; setStatusLocal(1); mpMsgString = new dMsgString_c(); JUT_ASSERT(1366, mpMsgString != NULL); return 4; } static void dummyStrings() { DEAD_STRING("zel_00.bmg"); DEAD_STRING("zel_01.bmg"); DEAD_STRING("zel_02.bmg"); DEAD_STRING("zel_03.bmg"); DEAD_STRING("zel_04.bmg"); DEAD_STRING("zel_05.bmg"); DEAD_STRING("zel_06.bmg"); DEAD_STRING("zel_07.bmg"); DEAD_STRING("zel_08.bmg"); DEAD_STRING("zel_99.bmg"); DEAD_STRING(""); } dMsgObject_HIO_c g_MsgObject_HIO_c; int dMsgObject_c::_execute() { field_0x4c7 = 0; if (mpTalkHeap != NULL) { field_0x148 = mDoExt_setCurrentHeap(mpTalkHeap); } if (isKillMessageFlagLocal()) { if (getStatusLocal() != 1) { setStatusLocal(19); } else { mNoDemoFlag = 0; field_0x4cc = 0; } offKillMessageFlagLocal(); } dMeter2Info_decMsgKeyWaitTimer(); field_0x4ca = mpCtrl->update(); if (g_MsgObject_HIO_c.mMessageDisplay) { if (mpRefer->getRevoMessageID() != 0) { mpCtrl->reset(); mpCtrl->resetResourceCache(); mpRefer->resetCharCountBuffer(); mpCtrl->setMessageCode(mpRefer->getRevoMessageID()); mpRefer->setRevoMessageID(0); jmessage_tReference* pRef = (jmessage_tReference*)mpRenProc->getReference(); strcpy(pRef->getTextPtr(), ""); strcpy(pRef->getTextSPtr(), ""); strcpy(pRef->getRubyPtr(), ""); for (int i = 0; i < 3; i++) { strcpy(pRef->getSelTextPtr(i), ""); strcpy(pRef->getSelRubyPtr(i), ""); } } field_0x4ca = mpCtrl->update(); } field_0x166 = getStatusLocal(); mSelectPushFlag = 0; switch (getStatusLocal()) { case 1: waitProc(); break; case 2: openProc(); break; case 6: outnowProc(); break; case 5: outwaitProc(); break; case 7: stopProc(); break; case 15: continueProc(); break; case 8: case 9: case 20: selectProc(); break; case 24: selectEndProc(); break; case 21: inputProc(); break; case 16: finishProc(); break; case 17: endProc(); break; case 19: deleteProc(); break; case 11: textmodeProc(); break; } if (isDraw() && !isPlaceMessage()) { if (mpRefer->getCharSoundInfo().field_0x40e != mpRefer->getCharSoundInfo().mCountBackUp) { Z2GetSpeechMgr2()->setTextCount(mpRefer->getCharSoundInfo().field_0x40e); mpRefer->setCountBackUp(); } } if (mpScrnDraw != NULL) { mpScrnDraw->exec(); } jmessage_tReference* procRef = (jmessage_tReference*)mpRenProc->getReference(); if (field_0x17e < procRef->getDemoFrame()) { field_0x17e++; } field_0x168 = getStatusLocal(); setShopWaitTimerLocal(0); if (field_0x148 != NULL) { mDoExt_setCurrentHeap(field_0x148); field_0x148 = NULL; } return 1; } int dMsgObject_c::_draw() { u16 sVar7 = getStatusLocal(); if (sVar7 != 0 && sVar7 != 1 && sVar7 != 0xb) { if (isDraw()) { mpCtrl->render(); } if (mpScrnDraw != NULL) { jmessage_tReference* pRef = (jmessage_tReference*)mpRenProc->getReference(); mpScrnDraw->setString(pRef->getTextPtr(), pRef->getTextSPtr()); mpScrnDraw->setRubyString(pRef->getRubyPtr()); mpScrnDraw->setSelectString(pRef->getSelTextPtr(0), pRef->getSelTextPtr(1), pRef->getSelTextPtr(2)); mpScrnDraw->setSelectRubyString(pRef->getSelRubyPtr(0), pRef->getSelRubyPtr(1), pRef->getSelRubyPtr(2)); } } if (mpScrnDraw != NULL) { if (dComIfGp_isPauseFlag()) { dComIfGd_set2DOpaTop(mpScrnDraw); } else { dComIfGd_set2DOpa(mpScrnDraw); } mpScrnDraw->multiDraw(); } return 1; } int dMsgObject_c::_delete() { mpResCont->destroyResource_all(); if (mpScrnDraw != NULL) { delete mpScrnDraw; mpScrnDraw = 0; } mpMsgDt = 0; mpMsgRes = 0; field_0x12c = 0; if (mpOutFont != NULL) { delete mpOutFont; mpOutFont = NULL; } delete mpResCont; mpResCont = NULL; delete mpRefer; mpRefer = NULL; delete mpSeqProc; mpSeqProc = NULL; delete mpRenProc; mpRenProc = NULL; delete field_0x124; field_0x124 = NULL; delete mpMsgString; mpMsgString = NULL; if (mpTalkHeap != NULL) { mpTalkHeap = NULL; } if (dComIfGp_isHeapLockFlag() == 5) { dComIfGp_offHeapLockFlag(7); dComIfGp_offHeapLockFlag(8); } dComIfGp_setMsgObjectClass(NULL); return 1; } void dMsgObject_c::setMessageIndex(u32 revoIndex, u32 param_2, bool param_3) { field_0x158 = revoIndex; revoIndex = getRevoMessageIndex(revoIndex); if (field_0x4cc == 0) { mNoDemoFlag = 1; } mMessageID = revoIndex; field_0x15c = param_2; field_0x4d1 = 0; if (mpTalkPartner != field_0x13c && mpTalkPartner != NULL) { dComIfGp_event_setTalkPartner(mpTalkPartner); field_0x4d1 = 1; field_0x13c = mpTalkPartner; } s16 groupID = getMessageGroup(mMessageID); JUT_ASSERT(1736, groupID==s_groupID || groupID == 0) changeGroup(groupID); field_0x172 = 0; mpRefer->setPageNum(field_0x172); JMSMesgInfo_c* pMsg = (JMSMesgInfo_c*)((char*)mpMsgDt + 0x20); u8* iVar2 = (u8*)pMsg + pMsg->header.size; u32 msg_id = getMessageIndex(revoIndex); dComIfGp_setMesgCameraAttrInfo(pMsg->entries[msg_id].camera_id); if (field_0x15c == 1000) { mpRefer->setSelMsgPtr(NULL); } else { u32 msgIndex = getMessageIndex(field_0x15c); if (msgIndex == 0x264) { mpRefer->setSelMsgPtr(NULL); } else { char* my_ptr = (char*) (iVar2 + pMsg->entries[msgIndex].string_offset + 8); mpRefer->setSelMsgPtr(my_ptr); } } if (param_3) { mpCtrl->setMessageID(mMessageID, 0, NULL); } } void dMsgObject_c::setMessageIndexDemo(u32 revoMsgIndex, bool param_2) { field_0x158 = revoMsgIndex; revoMsgIndex = getRevoMessageIndex(revoMsgIndex); mNoDemoFlag = 1; field_0x4d4 = 1; dMsgObject_onCameraCancelFlag(); mMessageID = revoMsgIndex; field_0x15c = 0x264; field_0x4d1 = 0; if (mpTalkPartner != field_0x13c && mpTalkPartner != NULL) { dComIfGp_event_setTalkPartner(mpTalkPartner); field_0x4d1 = 1; field_0x13c = mpTalkPartner; } s16 groupID = getMessageGroup(mMessageID); JUT_ASSERT(1804, groupID==s_groupID || groupID == 0); changeGroup(groupID); field_0x172 = 0; mpRefer->setPageNum(field_0x172); JMSMesgInfo_c* info_header_p = (JMSMesgInfo_c*)((char*)mpMsgDt + 0x20); JMSMesgInfo_c* reg_25 = (JMSMesgInfo_c*)((char*) info_header_p + info_header_p->header.size); int ind = getMessageIndex(revoMsgIndex); dComIfGp_setMesgCameraAttrInfo(info_header_p->entries[ind].camera_id); mpRefer->setSelMsgPtr(NULL); if (param_2) { mpCtrl->setMessageID(mMessageID, 0, NULL); } } u32 dMsgObject_c::getMessageIndex(u32 param_0) { u32 i = 0; JMSMesgInfo_c* pMsg = (JMSMesgInfo_c*)((char*)mpMsgDt + 0x20); u32 msgIndexCount = *((u16*)((char*)mpMsgDt + 0x28)); int rv; for (; i < msgIndexCount; i++) { if (pMsg->entries[i].message_id == param_0) { rv = i; break; } } if (i < msgIndexCount) { return rv; } JUT_WARN(1848, "Message Index Not Exist!! %d", param_0) return 612; } u32 dMsgObject_c::getRevoMessageIndex(u32 param_1) { if (!g_MsgObject_HIO_c.mMessageDisplay) { return param_1; } u32 msgIndexCount; JMSMesgInfo_c* pMsg; int i = 0; int rv; s16 groupID = getMessageGroup(param_1); JUT_ASSERT(1916, groupID==s_groupID || groupID == 0) changeGroup(groupID); pMsg = (JMSMesgInfo_c*)((char*)mpMsgDt + 0x20); msgIndexCount = *((u16*)((char*)mpMsgDt + 0x28)); for (; i < msgIndexCount; i++) { if (pMsg->entries[i].message_id == param_1) { s8* ptr = (s8*)pMsg + pMsg->header.size + pMsg->entries[i].string_offset + 8; if (ptr[0] == 26 && ptr[2] == 3 && (s8)ptr[4] == 0) { rv = pMsg->entries[*(int*)(ptr + 5)].message_id; } else { rv = param_1; } break; } } if (i >= msgIndexCount) { JUT_WARN(1937, "Message Index Not Exist!! %d", param_1) rv = 612; } return rv; } u32 dMsgObject_c::getMessageIndexAlways(u32 param_0) { u32 i = 0; JMSMesgInfo_c* pMsg = (JMSMesgInfo_c*)((char*)mpMsgRes + 0x20); u32 msgIndexCount = *((u16*)((char*)mpMsgRes + 0x28)); int rv; for (; i < msgIndexCount; i++) { if (pMsg->entries[i].message_id == param_0) { rv = i; break; } } if (i < msgIndexCount) { return rv; } JUT_WARN(1972, "Message Index Not Exist!! %d", param_0) return 612; } u32 dMsgObject_c::getMessageIDAlways(u32 param_0) { return ((JMSMesgInfo_c*)((u8*)mpMsgRes + 0x20))->entries[param_0].message_id; } s16 dMsgObject_c::getMessageGroup(u32 param_0) { s16 messageGroup = 0; OS_REPORT("getMessgeGroup! msg no====>%d\n", param_0); if (param_0 > 5000) { messageGroup = s_groupID; } return messageGroup; } void dMsgObject_c::waitProc() { if (mNoDemoFlag || field_0x4cc) { if (isMidonaNormalTalkWait()) { if (dComIfGp_checkCameraAttentionStatus(dComIfGp_getPlayerCameraID(0), 4) || dMsgObject_isCameraCancelFlag() || dComIfGp_isPauseFlag()) { if (field_0x4ca) { field_0x19d = 0; dComIfGp_setMesgCancelButton(0); offInputFlagLocal(); setStatusLocal(2); if (isTalkMessage()) { mDoAud_seStart(Z2SE_SY_TALK_WIN_OPEN, 0, 0, 0); } } else { if (mMessageID >= 0x47f && mMessageID <= 0x487) { setMessageIndexDemo(mMessageID, true); } else { setMessageIndex(mMessageID, field_0x15c, true); } } } } } else if (field_0x4ca) { if (field_0x4cd) { setStatusLocal(11); } else { dComIfGp_setMesgCancelButton(0); offInputFlagLocal(); setStatusLocal(2); if (isTalkMessage()) { mDoAud_seStart(Z2SE_SY_TALK_WIN_OPEN, 0, 0, 0); } } } } void dMsgObject_c::openProc() { if (isMidonaMessage()) { bool uVar12 = 0; if (field_0x16a == 0) { jmessage_tReference* pRef = (jmessage_tReference*)mpRenProc->getReference(); field_0x1a3 = 0; if (mpRefer->getMsgID() == 0x7fa) { mpScrnDraw->selectAnimeInit(3, pRef->getSelectPos(), pRef->getSelTBoxWidth(), pRef->getSelectRubyFlag()); } else { mpScrnDraw->selectAnimeInit(2, pRef->getSelectPos() + 1, pRef->getSelTBoxWidth(), pRef->getSelectRubyFlag()); } pRef->setStopFlag(0); } else { if (mDoCPd_c::getTrigA(0)) { if (getSelectCursorPosLocal() != 0xff) { field_0x1a3 = 1; field_0x16a = 9; } } else if (mDoCPd_c::getTrigB(0) && getSelectCancelPos() != 0) { setSelectCursorPosLocal(getSelectCancelPos() - 1); uVar12 = 1; field_0x1a3 = 2; field_0x16a = 9; } if (mpRefer->getMsgID() == 0x7fa) { mpScrnDraw->selectAnimeMove(2, getSelectCursorPosLocal(), uVar12); } else { if (getSelectCursorPosLocal() != 0xff) { mpScrnDraw->selectAnimeMove(2, getSelectCursorPosLocal() + 1, uVar12); } else { mpScrnDraw->selectAnimeMove(2, getSelectCursorPosLocal(), uVar12); } } } } field_0x16a++; s16 sVar7; if (isKanbanMessage()) { sVar7 = g_MsgObject_HIO_c.mBoxAppearFrame; f32 dVar15 = (f32)field_0x16a / g_MsgObject_HIO_c.mBoxAppearFrame; mpScrnDraw->fukiScale(dVar15); mpScrnDraw->fukiAlpha(dVar15); mpOutFont->setAlphaRatio(dVar15); } else if (isPlaceMessage() || isStaffMessage()) { sVar7 = g_MsgObject_HIO_c.mStageTitleFadeIn; f32 dVar15 = (f32)field_0x16a / g_MsgObject_HIO_c.mStageTitleFadeIn; mpScrnDraw->fukiScale(dVar15); mpScrnDraw->fukiAlpha(dVar15); mpOutFont->setAlphaRatio(dVar15); } else if (isBossMessage()) { sVar7 = g_MsgObject_HIO_c.mBossNameFadeIn; f32 dVar15 = (f32)field_0x16a / g_MsgObject_HIO_c.mBossNameFadeIn; mpScrnDraw->fukiScale(dVar15); mpScrnDraw->fukiAlpha(dVar15); mpOutFont->setAlphaRatio(dVar15); } else if (isBookMessage()) { sVar7 = g_MsgObject_HIO_c.mBoxAppearFrame + g_MsgObject_HIO_c.mWaitFrame + g_MsgObject_HIO_c.mLightAppearFrame; if (field_0x16a <= g_MsgObject_HIO_c.mBoxAppearFrame) { f32 dVar15 = (f32)field_0x16a / g_MsgObject_HIO_c.mBoxAppearFrame; mpScrnDraw->fukiAlpha(dVar15); mpOutFont->setAlphaRatio(dVar15); } else { mpScrnDraw->fukiAlpha(1.0f); mpOutFont->setAlphaRatio(1.0f); } s16 sVar4 = g_MsgObject_HIO_c.mBoxAppearFrame + g_MsgObject_HIO_c.mWaitFrame; if (field_0x16a >= sVar4 && field_0x16a <= sVar4 + g_MsgObject_HIO_c.mLightAppearFrame) { f32 scale = (f32)(field_0x16a - sVar4); scale /= g_MsgObject_HIO_c.mLightAppearFrame; mpScrnDraw->fukiScale(scale); } } else { sVar7 = g_MsgObject_HIO_c.mBoxAppearFrame; f32 dVar14 = (f32)field_0x16a / sVar7; mpScrnDraw->fukiScale(1.0f); mpScrnDraw->fukiAlpha(dVar14); mpOutFont->setAlphaRatio(dVar14); } mpRenProc->setTextInitPos(mpScrnDraw->getTextBoxPosX(), mpScrnDraw->getTextBoxPosY()); mpRenProc->setTextScale(mpScrnDraw->getTextBoxScaleX(), mpScrnDraw->getTextBoxScaleY()); if (field_0x16a >= sVar7) { mpScrnDraw->fukiTrans(0.0f, 0.0f); for (int i = 0; i < 3; i++) { mpRenProc->setSelTextInitPos(i, mpScrnDraw->getSelTextBoxPosX(i), mpScrnDraw->getSelTextBoxPosY(i)); } field_0x16a = 0; if (isMidonaMessage()) { if (mpRefer->getMsgID() == 0x7fa) { setStatusLocal(9); } else { setStatusLocal(8); } } else { setStatusLocal(6); } } } void dMsgObject_c::outnowProc() { mpRefer->shiftCharCountBuffer(); if (isBookMessage() && field_0x16a > 0) { field_0x16a--; f32 alpha = (10 - field_0x16a) / 10.0f; mpScrnDraw->fontAlpha(alpha); mpOutFont->setAlphaRatio(alpha); if (field_0x16a > 0) { return; } } jmessage_tReference* pRef = (jmessage_tReference*)mpRenProc->getReference(); if (pRef->getCharAllAlphaRate() < 1.0f) { if (mDoCPd_c::getTrigA(0)) { pRef->setCharAllAlphaRate(1.0f); } else { pRef->addCharAllAlphaRate(); } f32 alpha = pRef->getCharAllAlphaRate(); mpScrnDraw->setCharAlphaRate(alpha); mpOutFont->setAlphaRatio(alpha); } else if (mpRefer->isLightEnd()) { if (pRef->isButtonTagStopFlag()) { setButtonStatusLocal(); mpScrnDraw->arwAnimeMove(); } if (pRef->getStopFlag() == 1) { field_0x16a = 0; field_0x196 = 0; setStatusLocal(5); pRef->setStopFlag(0); } else if (pRef->getStopFlag() == 7) { field_0x196 = 1; if (mNoDemoFlag && !field_0x4d4) { setStatusLocal(14); } else { field_0x199 = 0; setStatusLocal(16); } pRef->setStopFlag(0); } else if (pRef->getStopFlag() == 2) { field_0x1a3 = 0; setStatusLocal(8); mpScrnDraw->selectAnimeInit(2, pRef->getSelectPos() + 1, pRef->getSelTBoxWidth(), pRef->getSelectRubyFlag()); pRef->setStopFlag(0); } else if (pRef->getStopFlag() == 3) { field_0x1a3 = 0; setStatusLocal(9); mpScrnDraw->selectAnimeInit(3, pRef->getSelectPos(), pRef->getSelTBoxWidth(), pRef->getSelectRubyFlag()); pRef->setStopFlag(0); } else if (pRef->getStopFlag() == 4 || pRef->getStopFlag() == 5) { field_0x1a3 = 0; setStatusLocal(20); pRef->setStopFlag(0); } else if (pRef->getStopFlag() == 6) { setStatusLocal(21); pRef->setStopFlag(0); } } } void dMsgObject_c::outwaitProc() { jmessage_tReference* pRef = (jmessage_tReference*)mpRenProc->getReference(); mpScrnDraw->arwAnimeMove(); if (isBookMessage()) { if (isSend() || field_0x16a > 0) { field_0x16a++; if (field_0x16a <= 10) { f32 alpha = (10 - field_0x16a) / 10.0f; mpScrnDraw->fontAlpha(alpha); mpOutFont->setAlphaRatio(alpha); if (field_0x16a >= 10) { field_0x172++; mpRefer->setPageNum(field_0x172); mpCtrl->render_synchronize(); pRef->pageSend(); mpScrnDraw->arwAnimeInit(); mpRenProc->resetRendering(); field_0x199 = 0; setStatusLocal(6); } } } } else if (isSend()) { field_0x172++; mpRefer->setPageNum(field_0x172); mpCtrl->render_synchronize(); pRef->pageSend(); mAutoMessageFlag = 0; mpScrnDraw->arwAnimeInit(); mpRenProc->resetRendering(); field_0x199 = 0; setStatusLocal(6); if (isTalkMessage() && mpRefer->getForm() != 1) { mDoAud_seStart(daAlink_c::WANM_HOWL_END, 0, 0, 0); } } } void dMsgObject_c::stopProc() { } void dMsgObject_c::continueProc() { jmessage_tReference* pRef = (jmessage_tReference*)mpRenProc->getReference(); if (pRef->getSendFlag() != 1 && pRef->getSendFlag() != 3 && pRef->getSendFlag() != 4 && pRef->getSendFlag() != 6) { mpScrnDraw->arwAnimeMove(); } if (((mDoCPd_c::getTrigA(0) == 0 && mDoCPd_c::getTrigB(0) == 0) || !isHowlMessage()) && isSend()) { mpCtrl->render_synchronize(); mpCtrl->reset(); mpCtrl->resetResourceCache(); mpRefer->resetCharCountBuffer(); field_0x17e = 0; field_0x199 = 0; updateEquipBombInfoLocal(); offAutoMessageFlagLocal(); setMessageIndex(field_0x100->msg_idx, field_0x100->field_0xf0, true); mpScrnDraw->fukiPosCalc(pRef->getFukiPosType()); strcpy(pRef->getTextPtr(), ""); strcpy(pRef->getTextSPtr(), ""); strcpy(pRef->getRubyPtr(), ""); for (int i = 0; i < 3; i++) { strcpy(pRef->getSelTextPtr(i), ""); strcpy(pRef->getSelRubyPtr(i), ""); } mpScrnDraw->arwAnimeInit(); mpRenProc->setTextInitPos(mpScrnDraw->getTextBoxPosX(), mpScrnDraw->getTextBoxPosY()); mpRenProc->setTextScale(mpScrnDraw->getTextBoxScaleX(), mpScrnDraw->getTextBoxScaleY()); for (int i = 0; i < 3; i++) { mpRenProc->setSelTextInitPos(i, mpScrnDraw->getSelTextBoxPosX(i), mpScrnDraw->getSelTextBoxPosY(i)); } mpRenProc->resetRendering(); setStatusLocal(6); if (isTalkMessage() && mpRefer->getForm() != 1) { mDoAud_seStart(daAlink_c::WANM_HOWL_END, 0, 0, 0); } } } void dMsgObject_c::selectProc() { bool uVar7 = false; bool iVar8 = false; if (!isMidonaMessage()) { field_0x1a3 = 0; } if (mpScrnDraw->isSelect() || getStatusLocal() == 20) { mpRefer->selectMessage(); if (dMeter2Info_isShopTalkFlag()) { dComIfGp_setAStatusForce(0x2a, 0); } } if (mDoCPd_c::getTrigA(0)) { if (getSelectCursorPosLocal() != 0xff) { field_0x1a3 = 1; } } else if (mDoCPd_c::getTrigB(0) && (((mpScrnDraw->isSelect() || getStatusLocal() == 20) && getSelectCancelPos() != 0))) { setSelectCursorPosLocal(getSelectCancelPos() - 1); uVar7 = true; if (getStatusLocal() == 8) { if (getSelectCancelPos() <= 2) { if (getSelectCursorPosLocal() != 0xff) { mpScrnDraw->selectAnimeMove(2, getSelectCursorPosLocal() + 1, 1); } else { mpScrnDraw->selectAnimeMove(2, (int)getSelectCursorPosLocal(), 1); } } } else if (getStatusLocal() == 9 && getSelectCancelPos() <= 3) { mpScrnDraw->selectAnimeMove(3, getSelectCursorPosLocal(), 1); } field_0x1a3 = 2; } jmessage_tReference* pRef = (jmessage_tReference*)mpRenProc->getReference(); if (getStatusLocal() == 8) { if (isMidonaMessage() && field_0x1a3 != 0) { if (field_0x1a3 == 2 && getSelectCancelPos() == 3) { iVar8 = true; } else { while (!iVar8) { if (getSelectCursorPosLocal() != 0xff) { iVar8 = mpScrnDraw->selectAnimeMove(2, getSelectCursorPosLocal() + 1, uVar7); } else { iVar8 = mpScrnDraw->selectAnimeMove(2, (int)getSelectCursorPosLocal(), uVar7); } } } } else if (field_0x1a3 == 2 && getSelectCancelPos() == 3) { iVar8 = true; } else if (getSelectCursorPosLocal() != 0xff) { iVar8 = mpScrnDraw->selectAnimeMove(2, getSelectCursorPosLocal() + 1, uVar7); } else { iVar8 = mpScrnDraw->selectAnimeMove(2, (int)getSelectCursorPosLocal(), uVar7); } pRef->setStopFlag(0); } else { if (getStatusLocal() == 9) { if (isMidonaMessage() && field_0x1a3 != 0) { if (field_0x1a3 == 2 && getSelectCancelPos() == 4) { iVar8 = true; } else { while (!iVar8) { iVar8 = mpScrnDraw->selectAnimeMove(3, getSelectCursorPosLocal(), uVar7); } } } else if (field_0x1a3 == 2 && getSelectCancelPos() == 4) { iVar8 = true; } else { iVar8 = mpScrnDraw->selectAnimeMove(3, getSelectCursorPosLocal(), uVar7); } pRef->setStopFlag(0); } else if (getStatusLocal() == 20) { iVar8 = true; } } field_0x100->select_idx = pRef->getSelectPos(); if (isSend() && field_0x1a3 != 0 && iVar8) { field_0x1a3 = 0; if (mDoCPd_c::getTrigB(0)) { mSelectPushFlag = 2; } else { mSelectPushFlag = 1; } setSelectCancelPosLocal(0); field_0x16a = 0; if (getStatusLocal() == 20) { field_0x199 = 1; setStatusLocal(14); } else { setStatusLocal(24); } dMeter2Info_set2DVibration(); mDoAud_seStart(daAlink_c::WANM_ATTACK_POE_END, 0, 0, 0); } } void dMsgObject_c::selectEndProc() { if (mpScrnDraw->selectAnimeEnd()) { field_0x199 = 1; setStatusLocal(14); } } void dMsgObject_c::inputProc() { dMeter2Info_onShopTalkFlag(); mpRefer->inputNumber(); if (isSend()) { field_0x199 = 0; if (mDoCPd_c::getTrigA(0)) { /* dSv_event_tmp_flag_c::T_0080 - Kakariko Village - Put money in fundraiser box */ BOOL iVar2 = dComIfGs_isTmpBit(dSv_event_tmp_flag_c::tempBitLabels[80]); /* dSv_event_flag_c::F_0802 - Faron Woods - Trill attacks when stealing */ if (getInputValue() > 0 && !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[802])) { onPaymentFlagLocal(); } dComIfGp_setItemRupeeCount(-getInputValue()); if (iVar2) { if (getInputValue() > 0) { dMsgObject_addFundRaising(getInputValue()); getFundRaisingValue(); dMsgObject_getFundRaising(); if (dMsgObject_getFundRaising() >= getFundRaisingValue() && /* dSv_event_flag_c::M_091 - Kakariko Village - Buy out fundraiser amount (Malo becomes nice) */ !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[124])) { /* dSv_event_flag_c::F_0376 - Kakariko Village - Gathered funds for bridge repair! (set by program after raising funds) */ if (!dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[376])) { dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[376]); dMsgObject_setFundRaising(0); } else { /* dSv_event_flag_c::M_091 - Kakariko Village - Buy out fundraiser amount (Malo becomes nice) */ dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[124]); dMsgObject_setFundRaising(0); } } } else { /* dSv_event_tmp_flag_c::T_0080 - Kakariko Village - Put money in fundraiser box */ dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[80]); } } else { dMsgObject_addTotalPayment(getInputValue()); fpcM_Search((fpcLyIt_JudgeFunc)dMsgObject_searchSSItem, this); } dMeter2Info_offShopTalkFlag(); setStatusLocal(14); } else if (mDoCPd_c::getTrigB(0)) { /* dSv_event_tmp_flag_c::T_0080 - Kakariko Village - Put money in fundraiser box */ dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[80]); dMeter2Info_offShopTalkFlag(); setStatusLocal(14); } } } void dMsgObject_c::finishProc() { if (field_0x168 != 0x10 && mNoDemoFlag && isTalkMessage() && mpRefer->getForm() != 1) { mDoAud_seStart(daAlink_c::WANM_FALL_LAND, 0, 0, 0); } mpRefer->selectMessage(); jmessage_tReference* pRef = (jmessage_tReference*)mpRenProc->getReference(); if (pRef->getSendFlag() != 1 && pRef->getSendFlag() != 3 && pRef->getSendFlag() != 4 && pRef->getSendFlag() != 6) { mpScrnDraw->dotAnimeMove(); } if (isHowlMessage() && ((dMsgScrnHowl_c*)mpScrnDraw)->isKeyCheck() && mDoCPd_c::getTrigB(0)) { dMsgObject_onMsgSend(); } u8 sendRes = isSend(); if (((mDoCPd_c::getTrigA(0) == 0 && (mDoCPd_c::getTrigB(0) == 0 || ((dMsgScrnHowl_c*)mpScrnDraw)->isKeyCheck())) || !isHowlMessage()) && sendRes != 0) { if (mpRefer->getMsgID() == 0xc4e) { Z2GetAudioMgr()->changeBgmStatus(2); } field_0x16a = 0; setStatusLocal(17); if (isTalkMessage() && sendRes == 2) { mDoAud_seStart(daAlink_c::WANM_ATTACK_POE_START, 0, 0, 0); } } } void dMsgObject_c::endProc() { field_0x16a++; s16 sVar4 = 5; if (isKanbanMessage() || isBookMessage()) { sVar4 = g_MsgObject_HIO_c.field_0x304; } else if (isPlaceMessage() || isStaffMessage()) { sVar4 = g_MsgObject_HIO_c.mStageTitleFadeOut; } else if (isBossMessage()) { sVar4 = g_MsgObject_HIO_c.mBossNameFadeOut; } f32 dVar6 = (f32)field_0x16a / sVar4; mpScrnDraw->fukiAlpha(1.0f - dVar6); if (isBookMessage()) { mpScrnDraw->fukiScale(1.0f - dVar6); } mpOutFont->setAlphaRatio(1.0f - dVar6); if (field_0x16a >= sVar4) { mpScrnDraw->arwAnimeInit(); mpScrnDraw->dotAnimeInit(); if (mNoDemoFlag && !field_0x4d4) { setStatusLocal(18); } else { setStatusLocal(19); } mMessageID = 0; field_0x158 = mMessageID; field_0x15c = 1000; field_0x172 = 0; field_0x199 = 0; mpRefer->setPageNum(field_0x172); } } void dMsgObject_c::deleteProc() { if (field_0x148 != NULL) { mDoExt_setCurrentHeap(field_0x148); field_0x148 = NULL; } delete_screen(true); mpCtrl->reset(); mpCtrl->resetResourceCache(); mpRefer->resetCharCountBuffer(); field_0x17e = 0; updateEquipBombInfoLocal(); dComIfGp_clearMesgAnimeTagInfo(); dComIfGp_clearMesgCameraTagInfo(); dComIfGp_clearMesgAnimeAttrInfo(); dComIfGp_clearMesgFaceAnimeAttrInfo(); dComIfGp_clearMesgCameraAttrInfo(); dMsgObject_offCameraCancelFlag(); dMsgObject_setMsgOutputType(0xff); offKillMessageFlagLocal(); jmessage_tReference* pRef = (jmessage_tReference*)mpRenProc->getReference(); if (pRef->getSendFlag() != 0) { pRef->setSendFlag(0); dMsgObject_offMsgSendControl(); dMsgObject_offMsgSend(); } if (pRef->getStopFlag() != 0) { pRef->setStopFlag(0); } if (mNoDemoFlag != 0) { mNoDemoFlag = 0; } if (field_0x4cc != 0) { field_0x4cc = 0; } if (field_0x4d4 != 0) { field_0x4d4 = 0; } dDemo_c::getControl()->unsuspend(1); if (field_0x4ce == 1) { mDoAud_talkOut(); field_0x4ce = 0; } field_0x13c = NULL; mpTalkPartner = NULL; field_0x4d1 = 0; resetSelectBomBag(); if (getArrowNumLocal() != 0) { dComIfGp_setItemArrowNumCount(getArrowNumLocal()); setArrowNumLocal(0); } mFukiKind = 0xff; dMsgObject_setNowTalkFlowNo(0); setStatusLocal(1); } void dMsgObject_c::textmodeProc() { } void dMsgObject_c::talkStartInit() { f32 dVar19 = 0.0f; JUTFont* local_30 = mDoExt_getMesgFont(); field_0x19b = 0; bool bVar1 = false; if (mFukiKind != mpRefer->getFukiKind()) { if (mpScrnDraw != NULL) { delete_screen(false); dVar19 = 1.0f; bVar1 = true; } mFukiKind = mpRefer->getFukiKind(); } if (dComIfGp_isHeapLockFlag() == 8 || (dComIfGp_isHeapLockFlag() == 5 && dMeter2Info_isFloatingMessageVisible() && !field_0x4cd)) { dMeter2Info_getMeterClass()->emphasisButtonDelete(); } if (((dComIfGp_isHeapLockFlag() == 0 || (dComIfGp_isHeapLockFlag() == 5 && mFukiKind != 15)) || (((dComIfGp_isHeapLockFlag() == 2 || (dComIfGp_isHeapLockFlag() == 3 || dComIfGp_isHeapLockFlag() == 1)) && field_0x4cd == 0 && mpTalkHeap != NULL))) && (mpScrnDraw == NULL && dMeter2Info_getFloatingMessageID() != 0x13eb)) { if (!bVar1 && ((dComIfGp_isHeapLockFlag() == 0 || dComIfGp_isHeapLockFlag() == 5))) { dComIfGp_setHeapLockFlag(7); } if (mpTalkHeap == NULL) { mpTalkHeap = dComIfGp_getSubHeap2D(7); } mpTalkHeap->getTotalFreeSize(); bool local_98 = false; if (mpOutFont == NULL) { OS_REPORT("free size (0x%x)=====> %d\n", mDoExt_getCurrentHeap(), mDoExt_getCurrentHeap()->getTotalFreeSize()); mpOutFont = new COutFont_c(0); JUT_ASSERT(3035, mpOutFont != NULL); mpOutFont->createPane(); mpRenProc->setOutFont(mpOutFont); } dMsgScrnBase_c* pData; jmessage_tReference* pRef; switch (mFukiKind) { case 9: pRef = (jmessage_tReference*)mpRenProc->getReference(); pData = new dMsgScrnItem_c(pRef->getFukiPosType(), pRef->getForm(), mpTalkHeap); JUT_ASSERT(3049, pData != NULL); mpScrnDraw = pData; break; case 2: if (mFukiKind == 15) { local_30 = mDoExt_getRubyFont(); } pData = new dMsgScrnTree_c(local_30, mpTalkHeap); JUT_ASSERT(3061, pData != NULL); mpScrnDraw = pData; break; case 6: pData = new dMsgScrnKanban_c(mpTalkHeap); JUT_ASSERT(3069, pData != NULL); mpScrnDraw = pData; break; case 7: pData = new dMsgScrnStaff_c(((jmessage_tReference*)mpRenProc->getReference())->getArrange()); JUT_ASSERT(3083, pData != NULL); mpScrnDraw = pData; break; case 12: pData = new dMsgScrnPlace_c(); JUT_ASSERT(3092, pData != NULL); mpScrnDraw = pData; break; case 19: pData = new dMsgScrnBoss_c(); JUT_ASSERT(3100, pData != NULL); mpScrnDraw = pData; break; case 17: pData = new dMsgScrnHowl_c(); JUT_ASSERT(3108, pData != NULL); mpScrnDraw = pData; local_98 = true; break; case 1: case 5: pRef = (jmessage_tReference*)mpRenProc->getReference(); pData = new dMsgScrnJimaku_c(pRef->getForm(), mpTalkHeap); JUT_ASSERT(3119, pData != NULL); mpScrnDraw = pData; break; case 10: field_0x19b = 1; default: pRef = (jmessage_tReference*)mpRenProc->getReference(); if (mpRefer->getMsgID() == 0x2a5) { pData = new dMsgScrnItem_c(0, pRef->getForm(), mpTalkHeap); JUT_ASSERT(3131, pData != NULL); mpScrnDraw = pData; } else { pData = new dMsgScrnTalk_c(pRef->getFukiPosType(), pRef->getForm(), mpTalkHeap); JUT_ASSERT(3138, pData != NULL); mpScrnDraw = pData; local_98 = true; } if (field_0x4ce == 0 && mFukiKind != 12) { mDoAud_talkIn(); field_0x4ce = 1; } break; } if (mpRefer->getMsgID() == 0xc73) { Z2GetAudioMgr()->changeBgmStatus(1); } if (mpRefer->getMsgID() == 0xc46) { Z2GetAudioMgr()->changeBgmStatus(1); } mpScrnDraw->setMsgID( mpRefer->getMsgID()); mpScrnDraw->setOutFont(mpOutFont); mpRefer->setFont(local_30); mpRefer->setActorPos(field_0x100->pos); mpRefer->setFontSizeX(mpScrnDraw->getFontSizeX()); mpRefer->setFontSizeY(mpScrnDraw->getFontSizeY()); mpRefer->setRubySize(mpScrnDraw->getRubySize()); mpRefer->setTBoxWidth(mpScrnDraw->getTBoxWidth()); mpRefer->setTBoxHeight(mpScrnDraw->getTBoxHeight()); mpRefer->setLineSpace(mpScrnDraw->getLineSpace()); mpRefer->setCharSpace(mpScrnDraw->getCharSpace()); mpRefer->setRubyCharSpace(mpScrnDraw->getRubyCharSpace()); mpRefer->setSelFontSize(mpScrnDraw->getSelFontSize()); mpRefer->setSelRubySize(mpScrnDraw->getSelRubySize()); mpRefer->setSelTBoxWidth(mpScrnDraw->getSelTBoxWidth()); mpRefer->setSelCharSpace(mpScrnDraw->getSelCharSpace()); mpRefer->setSelRubyCharSpace(mpScrnDraw->getSelRubyCharSpace()); mpRenProc->setCharInfoPtr(mpScrnDraw->getCharInfoPtr()); field_0x16a = 0; field_0x199 = 0; mpScrnDraw->fukiScale(dVar19); mpScrnDraw->fukiAlpha(dVar19); mpOutFont->setAlphaRatio(dVar19); fukiPosCalc(local_98); mpScrnDraw->arwAnimeInit(); mpScrnDraw->dotAnimeInit(); mpScrnDraw->setString("", ""); mpScrnDraw->setRubyString(""); mpScrnDraw->setSelectString("", "", ""); mpScrnDraw->setSelectRubyString("", "", ""); } } void dMsgObject_c::fukiPosCalc(bool param_1) { if (param_1) { mpRenProc->setTextInitOffsetPos(mpScrnDraw->getTextBoxPosOffsetY()); mpScrnDraw->setTextBoxPosOffsetY(0.0f); } else { jmessage_tReference* pRef = (jmessage_tReference*)mpRenProc->getReference(); u8 bVar4 = pRef->getFukiPosType(); if (isKanbanMessage() || isBookMessage()) { bVar4 = 3; } else if (bVar4 == 3) { fopAc_ac_c* player = dComIfGp_getPlayer(0); cXyz local_3c; cXyz cStack_48; mDoLib_project(&player->eyePos, &cStack_48); f32 temp; if ((field_0x100->pos == cXyz(0.0f, 0.0f, 0.0f))) { temp = cStack_48.y; } else { mDoLib_project(&field_0x100->pos, &local_3c); if (local_3c.x >= 0.0f && local_3c.x <= FB_WIDTH && local_3c.y >= 0.0f && local_3c.y <= FB_HEIGHT) { temp = 0.5f * (cStack_48.y + local_3c.y); } else { temp = cStack_48.y; } } if (temp < g_MsgObject_HIO_c.mBoxAppearBound) { bVar4 = 0; } else { bVar4 = 1; } } switch(bVar4) { case 1: mpScrnDraw->setTextBoxPosOffsetY(-200.0f); break; case 2: mpScrnDraw->setTextBoxPosOffsetY(-100.0f); break; default: mpScrnDraw->setTextBoxPosOffsetY(0.0f); break; } mpRenProc->setTextInitOffsetPos(mpScrnDraw->getTextBoxPosOffsetY()); } } void dMsgObject_c::setStatusLocal(u16 status) { ((jmessage_tReference*)mpRenProc->getReference())->setStatus(status); } u16 dMsgObject_c::getStatusLocal() { return ((jmessage_tReference*)mpRenProc->getReference())->getStatus(); } void dMsgObject_c::delete_screen(bool param_1) { if (mpOutFont != NULL) { delete mpOutFont; mpOutFont = NULL; } if (mpScrnDraw != NULL) { delete mpScrnDraw; mpScrnDraw = NULL; if (param_1 && dComIfGp_isHeapLockFlag() == 5) { dComIfGp_offHeapLockFlag(7); } } if (param_1 && mpTalkHeap != NULL) { mpTalkHeap = NULL; } } u8 dMsgObject_c::isSend() { dComIfGp_setDoStatusForce(0, 0); u8 mesgCancelButton = dComIfGp_checkMesgCancelButton(); if (mesgCancelButton) { dComIfGp_setMesgCancelButton(0); } if (mShopWaitTimer != 0) { return 0; } jmessage_tReference* pRef = (jmessage_tReference*)mpRenProc->getReference(); if (pRef->getSendFlag() != 0) { if (pRef->getSendFlag() == 3) { if (dMsgObject_isMsgSend()) { dMsgObject_offMsgSendControl(); dMsgObject_offMsgSend(); return 1; } dMsgObject_onMsgSendControl(); return 0; } if (pRef->getSendFlag() == 4) { if (field_0x17e >= pRef->getDemoFrame()) { return 1; } return 0; } if (pRef->getSendFlag() == 5) { if (getStatusLocal() == 21) { setButtonStatusLocal(); if (mDoCPd_c::getTrigA(0) != 0 || mDoCPd_c::getTrigB(0) != 0) { return 2; } return 0; } else { return 1; } } if (pRef->getSendTimer() > 0) { pRef->decSendTimer(); } else { if (pRef->getSendFlag() == 6) { pRef->setSendFlag(0); } else { return 1; } } if (pRef->getSendFlag() == 2) { setButtonStatusLocal(); if (mDoCPd_c::getTrigA(0) != 0 || mDoCPd_c::getTrigB(0) != 0) { return 2; } } } else { setButtonStatusLocal(); if (isHowlMessage()) { if (dMsgObject_isMsgSend()) { dMsgObject_offMsgSendControl(); dMsgObject_offMsgSend(); return 2; } } else { if (mDoCPd_c::getTrigA(0) != 0 || mDoCPd_c::getTrigB(0) != 0) { return 2; } if (mesgCancelButton) { return 1; } } } if (field_0x199 || field_0x1a3) { return 2; } else { return 0; } } void dMsgObject_c::readMessageGroupLocal(mDoDvdThd_mountXArchive_c** p_arcMount) { static char arcName[22]; int msgGroup = dStage_stagInfo_GetMsgGroup(dComIfGp_getStage()->getStagInfo()); #if REGION_PAL switch (dComIfGs_getPalLanguage()) { case dSv_player_config_c::LANGAUGE_GERMAN: sprintf(arcName, "/res/Msgde/bmgres%d.arc", msgGroup); break; case dSv_player_config_c::LANGAUGE_FRENCH: sprintf(arcName, "/res/Msgfr/bmgres%d.arc", msgGroup); break; case dSv_player_config_c::LANGAUGE_SPANISH: sprintf(arcName, "/res/Msgsp/bmgres%d.arc", msgGroup); break; case dSv_player_config_c::LANGAUGE_ITALIAN: sprintf(arcName, "/res/Msgit/bmgres%d.arc", msgGroup); break; default: sprintf(arcName, "/res/Msguk/bmgres%d.arc", msgGroup); } #elif REGION_JPN sprintf(arcName, "/res/Msgjp/bmgres%d.arc", msgGroup); #else sprintf(arcName, "/res/Msgus/bmgres%d.arc", msgGroup); #endif *p_arcMount = mDoDvdThd_mountXArchive_c::create(arcName, 0, JKRArchive::MOUNT_MEM, NULL); if (msgGroup == 99) { msgGroup = 9; } s_groupID = msgGroup; } void dMsgObject_c::changeFlowGroupLocal(s32 param_0) { mFlowChk = 1; changeGroup(param_0 >= 3000 ? (s16)0 : s_groupID); } void dMsgObject_c::demoMessageGroupLocal() { mFlowChk = 0; changeGroup(0); } void dMsgObject_c::endFlowGroupLocal() { mFlowChk = 0; } void dMsgObject_c::changeGroupLocal(s16 param_1) { JKRHeap* prevHeap = mDoExt_setCurrentHeap(dComIfGp_getMsgExpHeap()); if (field_0x16c != param_1) { if (mFlowChk != 0) { JUT_ASSERT(3688, mFlowChk != 2); mFlowChk = 2; } OS_REPORT("group change =====> %d\n", param_1); if (param_1 >= 1) { OS_REPORT("bmg data change =====> %d --> %d\n", field_0x16c, param_1); if (field_0x16c == 0) { field_0x19d = 1; } mpMsgDt = dMeter2Info_getStageMsgResource(); } else { mpMsgDt = mpMsgRes; } if (field_0x16c >= 0) { field_0x124->parse(mpMsgDt, 0x80); } field_0x16c = param_1; } mDoExt_setCurrentHeap(prevHeap); } bool dMsgObject_c::getStringLocal(u32 param_1, J2DTextBox* param_2, J2DTextBox* param_3, JUTFont* param_4, COutFont_c* param_5, char* param_6, char* param_7, char* param_8, s16* param_9) { if (field_0x4cd == 0) { if (getStatusLocal() == 1) { s16 groupID = getMessageGroup(param_1); JUT_ASSERT(3740, groupID==s_groupID || groupID == 0); changeGroup(groupID); mpSeqProc->setForceForm(1); mpRefer->setFont(param_4); mpRenProc->setOutFont(param_5); mpRefer->setActorPos(cXyz(0.0f, 0.0f, 0.0f)); J2DTextBox::TFontSize fontSize; param_2->getFontSize(fontSize); mpRefer->setFontSizeX(fontSize.mSizeX); mpRefer->setFontSizeY(fontSize.mSizeY); if (param_3 != NULL) { param_3->getFontSize(fontSize); mpRefer->setRubySize(fontSize.mSizeX); } else { mpRefer->setRubySize(0.0f); } mpRefer->setTBoxWidth(param_2->getWidth()); mpRefer->setTBoxHeight(param_2->getHeight()); mpRefer->setLineSpace(param_2->getLineSpace()); mpRefer->setCharSpace(param_2->getCharSpace()); if (param_3 != NULL) { mpRefer->setRubyCharSpace(param_3->getCharSpace()); } else { mpRefer->setRubyCharSpace(0.0f); } mpRenProc->setCharInfoPtr(NULL); field_0x4cd = 1; mpCtrl->setMessageID(param_1, 0, NULL); } } else { jmessage_tReference* pRef = (jmessage_tReference*)mpRenProc->getReference(); if (getStatusLocal() == 11 && (pRef->getStopFlag() == 7 || pRef->getStopFlag() == 1)) { mpCtrl->render(); if (param_9 != NULL) { *param_9 = mpRefer->getCharSoundInfo().field_0x40e; } if (param_6 != NULL) { strcpy(param_6, pRef->getTextPtr()); } if (param_7 != NULL) { strcpy(param_7, pRef->getRubyPtr()); } if (param_8 != NULL) { strcpy(param_8, pRef->getTextSPtr()); } mpCtrl->reset(); mpCtrl->resetResourceCache(); mpRefer->resetCharCountBuffer(); dDemo_c::getControl()->unsuspend(1); field_0x17e = 0; updateEquipBombInfoLocal(); field_0x4cd = 0; pRef->setStopFlag(0); setStatusLocal(1); return true; } } return false; } u8 dMsgObject_c::isGetItemMessage() { return mFukiKind == 9; } bool dMsgObject_c::isKanbanMessage() { if (mFukiKind == 2 || mFukiKind == 6 || mFukiKind == 15) { return true; } return false; } bool dMsgObject_c::isHowlMessage() { if (mFukiKind == 17) { return true; } return false; } bool dMsgObject_c::isMidonaMessage() { if (mFukiKind == 13 && (mpRefer->getMsgID() == 0x7d3 || mpRefer->getMsgID() == 0x7f6 || mpRefer->getMsgID() == 0x7fa)) { return 1; } return 0; } bool dMsgObject_c::isMidonaNormalTalkWait() { if (mFukiKind == 13 && !isMidonaMessage()) { daMidna_c* midna = daPy_py_c::getMidnaActor(); if (midna != NULL && !midna->checkShadowModeTalkWait()) { return true; } else { return false; } return false; } return true; } bool dMsgObject_c::isMidonaTalkWait() { daMidna_c* midna = daPy_py_c::getMidnaActor(); if (midna != NULL) { return midna->checkShadowModeTalkWait(); } return false; } bool dMsgObject_c::isPlaceMessage() { return mFukiKind == 12 ? 1 : 0; } bool dMsgObject_c::isBossMessage() { return mFukiKind == 19 ? 1 : 0; } bool dMsgObject_c::isBookMessage() { return false; } bool dMsgObject_c::isStaffMessage() { return mFukiKind == 7 ? 1 : 0; } bool dMsgObject_c::isSaveMessage() { return mFukiKind == 16 ? 1 : 0; } bool dMsgObject_c::isTalkMessage() { if (isKanbanMessage() || isPlaceMessage() || isBossMessage() || isBookMessage() || isHowlMessage() || isStaffMessage()) { return false; } return true; } const char* dMsgObject_c::getSmellName() { JMSMesgInfo_c* info_header_p = (JMSMesgInfo_c*)((char*)mpMsgRes + 0x20); char* data_ptr = (char*)info_header_p + info_header_p->header.size; JMSMesgEntry_c* info_entries = (JMSMesgEntry_c*)((char*)info_header_p + 0x10); JMSMesgEntry_c* msg_entry = &info_entries[(u16)getMessageIndex(getSmellTypeMessageID())]; return data_ptr + msg_entry->string_offset + 8; } const char* dMsgObject_c::getPortalName() { JMSMesgInfo_c* info_header_p = (JMSMesgInfo_c*)((char*)mpMsgRes + 0x20); char* data_ptr = (char*)info_header_p + info_header_p->header.size; JMSMesgEntry_c* info_entries = (JMSMesgEntry_c*)((char*)info_header_p + 0x10); JMSMesgEntry_c* msg_entry = &info_entries[getMessageIndex(getPortalMessageID())]; return data_ptr + msg_entry->string_offset + 8; } const char* dMsgObject_c::getBombName() { u8 i_selectPos = getSelectCursorPos(); JUT_ASSERT(4075, i_selectPos >= 0 && i_selectPos < dSv_player_item_c::BOMB_BAG_MAX); u8 i_cursorPos; if (field_0x193 != 0) { i_cursorPos = getSelectBomBag(i_selectPos); } else { i_cursorPos = i_selectPos; } JUT_ASSERT(4083, i_cursorPos >= 0 && i_cursorPos < dSv_player_item_c::BOMB_BAG_MAX); JMSMesgInfo_c* info_header_p = (JMSMesgInfo_c*)((char*)mpMsgRes + 0x20); char* data_ptr = (char*)info_header_p + info_header_p->header.size; JMSMesgEntry_c* info_entries = (JMSMesgEntry_c*)((char*)info_header_p + 0x10); JMSMesgEntry_c* msg_entry = &info_entries[getMessageIndexAlways(getBombMessageIDLocal(i_cursorPos) + 0x165)]; return data_ptr + msg_entry->string_offset + 8; } const char* dMsgObject_c::getInsectName() { JMSMesgInfo_c* info_header_p = (JMSMesgInfo_c*)((char*)mpMsgRes + 0x20); char* data_ptr = (char*)info_header_p + info_header_p->header.size; JMSMesgEntry_c* info_entries = (JMSMesgEntry_c*)((char*)info_header_p + 0x10); JMSMesgEntry_c* msg_entry = &info_entries[getMessageIndexAlways(getInsectItemNoLocal() + 0x165)]; return data_ptr + msg_entry->string_offset + 8; } const char* dMsgObject_c::getLetterName() { JMSMesgInfo_c* info_header_p = (JMSMesgInfo_c*)((char*)mpMsgRes + 0x20); char* data_ptr = (char*)info_header_p + info_header_p->header.size; JMSMesgEntry_c* info_entries = (JMSMesgEntry_c*)((char*)info_header_p + 0x10); JMSMesgEntry_c* msg_entry = &info_entries[getMessageIndexAlways(getLetterNameIDLocal())]; return data_ptr + msg_entry->string_offset + 8; } u8 dMsgObject_c::getSelectBombNum() { u8 i_selectPos = getSelectCursorPos(); JUT_ASSERT(4133, i_selectPos >= 0 && i_selectPos < dSv_player_item_c::BOMB_BAG_MAX) if (field_0x193 != 0) { i_selectPos = getSelectBomBag(i_selectPos); } return getBombNumLocal(i_selectPos); } void dMsgObject_c::onMsgSendControlLocal() { mMsgSendControl |= 1; } void dMsgObject_c::offMsgSendControlLocal() { mMsgSendControl &= ~1; ((jmessage_tReference*)mpRenProc->getReference())->setSendFlag(0); } int dMsgObject_c::isMsgSendControlLocal() { return (mMsgSendControl & 1) != 0; } void dMsgObject_c::onMsgSendLocal() { mMsgSendControl |= 2; } void dMsgObject_c::offMsgSendLocal() { mMsgSendControl &= ~2; } int dMsgObject_c::isMsgSendLocal() { return (mMsgSendControl & 2) != 0; } bool dMsgObject_c::isMouthCheckLocal() { return mpSeqProc->getMouthCheck() != 0; } int dMsgObject_c::getBombBuyPriceLocal(u8 param_0) { switch(param_0) { case 0x70: return 15; case 0x71: return 30; case 0x72: return 30; default: return 0; } } void dMsgObject_c::addSelectBomBag(u8 param_1) { if (param_1 == 0xff) { param_1 = field_0x193; } mSelectBombBag[field_0x193] = param_1; field_0x193++; OS_REPORT("addSelectBombBag ==> %d, %d\n", field_0x193, param_1); } void dMsgObject_c::resetSelectBomBag() { for (int i = 0; i < 3; i++) { mSelectBombBag[i] = 0; } field_0x193 = 0; } u8 dMsgObject_c::getSelectBombBagIDLocal() { u8 i_selectPos = getSelectCursorPos(); JUT_ASSERT(4253, i_selectPos >= 0 && i_selectPos < dSv_player_item_c::BOMB_BAG_MAX); if (field_0x193 != 0) { i_selectPos = getSelectBomBag(i_selectPos); } return getBombBagIDLocal(i_selectPos); } s16 dMsgObject_c::getSelectBombPriceLocal() { u8 i_selectPos = getSelectCursorPos(); JUT_ASSERT(4276, i_selectPos >= 0 && i_selectPos < dSv_player_item_c::BOMB_BAG_MAX); u8 i_cursorPos = field_0x193 != 0 ? getSelectBomBag(i_selectPos) : i_selectPos++; u16 uVar1 = getBombBuyPriceLocal(getBombMessageIDLocal(i_cursorPos)); int num = getSelectBombNum(); return (num * uVar1) / 10.0f; } void dMsgObject_c::setEquipBombInfoLocal() { mEquipBombInfo = 1; } void dMsgObject_c::updateEquipBombInfoLocal() { if (mEquipBombInfo == 0) { return; } bool bVar1 = true; if (s_groupID == 2 && (mNowTalkFlowNo == 365 || mNowTalkFlowNo == 366 || mNowTalkFlowNo == 367)) { bVar1 = false; } int iVar5 = 0; for (int i = 0; (int)i < 3; i++) { setBombBagIDLocal(i, 0xff); setBombMessageIDLocal(i, 0); setBombNumLocal(i, 0); u8 bVar3 = dComIfGs_getItem(i + 15, 0); if (bVar3 != 0xff && (bVar3 != 0x50 || bVar1)) { setBombBagIDLocal(iVar5, i); setBombMessageIDLocal(iVar5, bVar3); if (bVar3 == 0x50) { setBombNumLocal(iVar5, 0); } else { setBombNumLocal(iVar5, dComIfGs_getBombNum(i)); } iVar5++; } } if (iVar5 == 1) { for (int i = 1; i < 3; i++) { setBombBagIDLocal(i, getBombBagIDLocal(0)); setBombMessageIDLocal(i, getBombMessageIDLocal(0)); setBombNumLocal(i, getBombNumLocal(0)); } } mEquipBombInfo = 0; } void dMsgObject_c::setShopWaitTimer(u8 timer) { dMsgObject_getMsgObjectClass()->setShopWaitTimerLocal(timer); } void dMsgObject_c::setSelectWordFlagLocal(u8 param_0) { mSelectWordFlag = param_0; } bool dMsgObject_c::isHowlHearingModeLocal() { bool rv = false; if (isHowlMessage() && mpScrnDraw != NULL && ((dMsgScrnHowl_c*)mpScrnDraw)->isHearingMode()) { rv = true; } return rv; } bool dMsgObject_c::isCameraCancelFlag() { return dMsgObject_getMsgObjectClass()->isCameraCancelFlagLocal() ? true : false; } void dMsgObject_c::onCameraCancelFlag() { dMsgObject_getMsgObjectClass()->onCameraCancelFlagLocal(); } void dMsgObject_c::offCameraCancelFlag() { dMsgObject_getMsgObjectClass()->offCameraCancelFlagLocal(); } bool dMsgObject_c::isKillMessageFlag() { return dMsgObject_getMsgObjectClass()->isKillMessageFlagLocal(); } void dMsgObject_c::onKillMessageFlag() { dMsgObject_getMsgObjectClass()->onKillMessageFlagLocal(); } void dMsgObject_c::setKillMessageFlag() { dMsgObject_getMsgObjectClass()->setKillMessageFlagLocal(); } void dMsgObject_c::setKillMessageFlagLocal() { if (!dComIfGp_event_runCheck()) { if (getStatusLocal() != 1) { if (getStatusLocal() == 11) { field_0x4cd = 0; dMeter2Info_resetFloatingMessage(); } deleteProc(); jmessage_tReference* pRef = (jmessage_tReference*)mpRenProc->getReference(); pRef->setStopFlag(0); } else { mNoDemoFlag = 0; field_0x4cc = 0; } } } void dMsgObject_c::setTalkPartner(fopAc_ac_c* param_0) { dMsgObject_getMsgObjectClass()->setTalkPartnerLocal(param_0); } void dMsgObject_c::setNowTalkFlowNo(s16 param_0) { dMsgObject_getMsgObjectClass()->setNowTalkFlowNoLocal(param_0); } s16 dMsgObject_c::getNowTalkFlowNo() { return dMsgObject_getMsgObjectClass()->getNowTalkFlowNoLocal(); } void dMsgObject_c::setDemoMessage(u32 param_0) { dMsgObject_getMsgObjectClass()->setDemoMessageLocal(param_0); } void dMsgObject_c::setTalkHeap(void* param_0) { dMsgObject_getMsgObjectClass()->setTalkHeapLocal(param_0); } void dMsgObject_c::setTalkHeapLocal(void* param_1) { if (param_1 == NULL) { delete_screen(true); } mpTalkHeap = (JKRExpHeap*)param_1; } void* dMsgObject_c::getTalkHeap() { return dMsgObject_getMsgObjectClass()->getTalkHeapLocal(); } bool dMsgObject_c::isDraw() { if ((getStatusLocal() != 0 && getStatusLocal() != 1 && field_0x4c7 == 0) && (getStatusLocal() != 11 && (getStatusLocal() != 6 || field_0x166 != 15))) { return true; } return false; } void dMsgObject_c::setButtonStatusLocal() { jmessage_tReference* pRef = (jmessage_tReference*)mpRenProc->getReference(); if (field_0x168 == getStatusLocal() && (pRef->getSendFlag() != 1 && pRef->getSendFlag() != 3) && pRef->getSendFlag() != 4 && pRef->getSendFlag() != 6 && pRef->getSendFlag() != 2) { if (getStatusLocal() == 0x10) { if (isHowlMessage()) { dComIfGp_setDoStatusForce(5, 0); dComIfGp_setAStatusForce(42, 0); } else { dComIfGp_setDoStatusForce(35, 0); } } else if (getStatusLocal() == 8 || getStatusLocal() == 9 || getStatusLocal() == 20) { dComIfGp_setDoStatusForce(0x22, 0); } else if (getStatusLocal() == 21) { dComIfGp_setDoStatusForce(0x22, 0); dComIfGp_setAStatusForce(0x2a, 0); } else { dComIfGp_setDoStatusForce(0x23, 0); } } } void dMsgObject_c::setDemoMessageLocal(u32 param_1) { field_0x4cc = 1; dMsgObject_onCameraCancelFlag(); fopMsgM_messageSet(dMsgObject_getMsgObjectClass()->getMessageIDAlways(param_1), 1000); } u16 dMsgObject_c::getSmellTypeMessageIDLocal() { u16 msgId = 0; int smell = dComIfGs_getCollectSmell(); if (smell < fpcNm_ITEM_SMELL_MEDICINE + 1 && smell >= fpcNm_ITEM_SMELL_YELIA_POUCH) { msgId = smell + 0x165; } else { if (dComIfGs_getCollectSmell() != -1) { OS_REPORT("smell type ====> %d\n", dComIfGs_getCollectSmell()); JUT_WARN(4858, "smell type no entry!"); } } return msgId; } void dMsgObject_c::setSmellTypeLocal(u8 smellType) { mSmellType = smellType; dComIfGs_onItemFirstBit(smellType); dComIfGs_setCollectSmell(mSmellType); dComIfGs_setSelectItemIndex(2, mSmellType); } u8 dMsgObject_c::getSelectCursorPosLocal() { return ((jmessage_tReference*)mpRenProc->getReference())->getSelectPos(); } void dMsgObject_c::setSelectCursorPosLocal(u8 param_1) { jmessage_tReference* pRef = (jmessage_tReference*)mpRenProc->getReference(); if (!dComIfGp_isPauseFlag() && param_1 != 0xff && pRef->getSelectPos() != param_1) { Z2GetAudioMgr()->seStart(daAlink_c::WANM_ATTACK_POE, NULL, 1, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); } pRef->setSelectPos(param_1); } void dMsgObject_c::setTalkActorLocal(fopAc_ac_c* actor) { mpTalkActor = actor; } static int dMsgObject_Draw(dMsgObject_c* i_this) { return i_this->_draw(); } static int dMsgObject_Execute(dMsgObject_c* i_this) { return i_this->_execute(); } static int dMsgObject_IsDelete(dMsgObject_c* i_this) { return 1; } static int dMsgObject_Delete(dMsgObject_c* i_this) { return i_this->_delete(); } int dMsgObject_Create(msg_class* param_1) { dMsgObject_c* obj = static_cast(param_1); dComIfGp_setMsgObjectClass(obj); JKRHeap* prevHeap = mDoExt_setCurrentHeap(dComIfGp_getMsgExpHeap()); dComIfGp_getMsgExpHeap()->getTotalFreeSize(); fopMsgM_setStageLayer(param_1); param_1->mode = 0; int rv = obj->_create(param_1); g_MsgObject_HIO_c.field_0x4 = -1; OS_REPORT("### msg object size =====> %d\n", dComIfGp_getMsgExpHeap()->getTotalFreeSize()); mDoExt_setCurrentHeap(prevHeap); return rv; } void dMsgObject_c::readMessageGroup(mDoDvdThd_mountXArchive_c** p_arcMount) { dMsgObject_getMsgObjectClass()->readMessageGroupLocal(p_arcMount); } void dMsgObject_c::changeFlowGroup(s32 param_0) { dMsgObject_getMsgObjectClass()->changeFlowGroupLocal(param_0); } void dMsgObject_c::demoMessageGroup() { dMsgObject_getMsgObjectClass()->demoMessageGroupLocal(); } void dMsgObject_c::endFlowGroup() { dMsgObject_getMsgObjectClass()->endFlowGroupLocal(); } void dMsgObject_c::changeGroup(s16 param_0) { dMsgObject_getMsgObjectClass()->changeGroupLocal(param_0); } bool dMsgObject_c::getString(u32 param_0, J2DTextBox* param_1, J2DTextBox* param_2, JUTFont* param_3, COutFont_c* param_4, char* param_5, char* param_6, char* param_7, s16* param_8) { return dMsgObject_getMsgObjectClass()->getStringLocal( param_0, param_1, param_2, param_3, param_4, param_5, param_6, param_7, param_8); } void* dMsgObject_c::getMsgDtPtr() { return dMsgObject_getMsgObjectClass()->getMsgDtPtrLocal(); } void dMsgObject_c::setProcessID(fpc_ProcID id) { dMsgObject_getMsgObjectClass()->setProcessIDLocal(id); } msg_class* dMsgObject_c::getActor() { if (dMsgObject_getMsgObjectClass() == NULL) { return NULL; } return dMsgObject_getMsgObjectClass()->getActorLocal(); } fopAc_ac_c* dMsgObject_c::getpTalkActor() { return dMsgObject_getMsgObjectClass()->getpTalkActorLocal(); } int dMsgObject_c::getIdx() { return dMsgObject_getMsgObjectClass()->getIdxLocal(); } u16 dMsgObject_c::getNodeIdx() { return dMsgObject_getMsgObjectClass()->getNodeIdxLocal(); } void dMsgObject_c::setStatus(u16 status) { dMsgObject_getMsgObjectClass()->setStatusLocal(status); } u16 dMsgObject_c::getStatus() { return dMsgObject_getMsgObjectClass()->getStatusLocal(); } dMsgScrnBase_c* dMsgObject_c::getScrnDrawPtr() { return dMsgObject_getMsgObjectClass()->getScrnDrawPtrLocal(); } void dMsgObject_c::setTalkActor(fopAc_ac_c* actor) { dMsgObject_getMsgObjectClass()->setTalkActorLocal(actor); } void dMsgObject_c::onMsgSendControl() { dMsgObject_getMsgObjectClass()->onMsgSendControlLocal(); } void dMsgObject_c::offMsgSendControl() { dMsgObject_getMsgObjectClass()->offMsgSendControlLocal(); } int dMsgObject_c::isMsgSendControl() { return dMsgObject_getMsgObjectClass()->isMsgSendControlLocal(); } void dMsgObject_c::onMsgSend() { dMsgObject_getMsgObjectClass()->onMsgSendLocal(); } void dMsgObject_c::offMsgSend() { dMsgObject_getMsgObjectClass()->offMsgSendLocal(); } int dMsgObject_c::isMsgSend() { return dMsgObject_getMsgObjectClass()->isMsgSendLocal(); } bool dMsgObject_c::isMouthCheck() { return dMsgObject_getMsgObjectClass()->isMouthCheckLocal(); } u32 dMsgObject_c::getMessageID() { return dMsgObject_getMsgObjectClass()->getMessageIDLocal(); } u16 dMsgObject_c::getSmellTypeMessageID() { return dMsgObject_getMsgObjectClass()->getSmellTypeMessageIDLocal(); } void dMsgObject_c::setSmellType(u8 smellType) { dMsgObject_getMsgObjectClass()->setSmellTypeLocal(smellType); } u8 dMsgObject_c::getSelectCursorPos() { return dMsgObject_getMsgObjectClass()->getSelectCursorPosLocal(); } void dMsgObject_c::setSelectCursorPos(u8 pos) { dMsgObject_getMsgObjectClass()->setSelectCursorPosLocal(pos); } void dMsgObject_c::setPortalMessageID(u16 msgID) { dMsgObject_getMsgObjectClass()->setPortalMessageIDLocal(msgID); } void dMsgObject_c::setInsectItemNo(u8 itemNo) { dMsgObject_getMsgObjectClass()->setInsectItemNoLocal(itemNo); } void dMsgObject_c::setLetterNameID(u16 nameID) { dMsgObject_getMsgObjectClass()->setLetterNameIDLocal(nameID); } void dMsgObject_c::setArrowNum(u8 arrowNum) { dMsgObject_getMsgObjectClass()->setArrowNumLocal(arrowNum); } void dMsgObject_c::setMsgOutputType(u8 outputType) { dMsgObject_getMsgObjectClass()->setMsgOutputTypeLocal(outputType); } u8 dMsgObject_c::getMsgOutputType() { return dMsgObject_getMsgObjectClass()->getMsgOutputTypeLocal(); } const char* dMsgObject_c::getWord() { return dMsgObject_getMsgObjectClass()->getWordLocal(); } const char* dMsgObject_c::getSelectWord(int idx) { return dMsgObject_getMsgObjectClass()->getSelectWordLocal(idx); } void dMsgObject_c::setSelectWordFlag(u8 flag) { dMsgObject_getMsgObjectClass()->setSelectWordFlagLocal(flag); } u8 dMsgObject_c::getSelectWordFlag() { return dMsgObject_getMsgObjectClass()->getSelectWordFlagLocal(); } bool dMsgObject_c::isHowlHearingMode() { return dMsgObject_getMsgObjectClass()->isHowlHearingModeLocal(); } u8 dMsgObject_c::getSelectBombBagID() { return dMsgObject_getMsgObjectClass()->getSelectBombBagIDLocal(); } s16 dMsgObject_c::getSelectBombPrice() { return dMsgObject_getMsgObjectClass()->getSelectBombPriceLocal(); } void dMsgObject_c::setEquipBombInfo() { dMsgObject_getMsgObjectClass()->setEquipBombInfoLocal(); } u8 dMsgObject_c::getItemEquipButton() { return dMsgObject_getMsgObjectClass()->getItemEquipButtonLocal(); } void dMsgObject_c::setSelectCancelPos(u8 pos) { dMsgObject_getMsgObjectClass()->setSelectCancelPosLocal(pos); } u16 dMsgObject_getTotalPrice() { u8 high = dComIfGs_getEventReg(0xfeff); u8 low = dComIfGs_getEventReg(0xfdff); return (high << 8) | low; } void dMsgObject_setTotalPrice(u16 price) { dComIfGs_setEventReg(0xfeff, (price & 0xff00) >> 8); dComIfGs_setEventReg(0xfdff, price & 0xff); } void dMsgObject_addTotalPrice(s16 price) { dMsgObject_getMsgObjectClass()->addNowTotalPrice(price); price += dMsgObject_getTotalPrice(); if (price < 0) { price = 0; } dComIfGs_setEventReg(0xfeff, ((u16)price & 0xff00) >> 8); dComIfGs_setEventReg(0xfdff, (u16)price & 0xff); } u16 dMsgObject_getTotalPayment() { u8 high = dComIfGs_getEventReg(0xfcff); u8 low = dComIfGs_getEventReg(0xfbff); return (high << 8) | low; } void dMsgObject_setTotalPayment(u16 price) { dComIfGs_setEventReg(0xfcff, (price & 0xff00) >> 8); dComIfGs_setEventReg(0xfbff, price & 0xff); } void dMsgObject_addTotalPayment(s16 price) { dMsgObject_getMsgObjectClass()->addNowTotalPayment(price); price += dMsgObject_getTotalPayment(); if (price < 0) { price = 0; } dComIfGs_setEventReg(0xfcff, ((u16)price & 0xff00) >> 8); dComIfGs_setEventReg(0xfbff, (u16)price & 0xff); } u16 dMsgObject_getFundRaising() { u8 high = dComIfGs_getEventReg(0xf9ff); u8 low = dComIfGs_getEventReg(0xfaff); return (high << 8) | low; } void dMsgObject_setFundRaising(u16 price) { dComIfGs_setEventReg(0xf9ff, (price & 0xff00) >> 8); dComIfGs_setEventReg(0xfaff, price & 0xff); } void dMsgObject_addFundRaising(s16 price) { price += dMsgObject_getFundRaising(); if (price < 0) { price = 0; } dComIfGs_setEventReg(0xf9ff, ((u16)price & 0xff00) >> 8); dComIfGs_setEventReg(0xfaff, (u16)price & 0xff); } u16 dMsgObject_getOffering() { u8 high = dComIfGs_getEventReg(0xf7ff); u8 low = dComIfGs_getEventReg(0xf8ff); return (high << 8) | low; } void dMsgObject_addOffering(s16 price) { s16 offering = price + dMsgObject_getOffering(); if (offering < 0) { offering = 0; } dComIfGs_setEventReg(0xf7ff, ((u16)offering & 0xff00) >> 8); dComIfGs_setEventReg(0xf8ff, (u16)offering & 0xff); } static leafdraw_method_class l_dMsgObject_Method = { (process_method_func)dMsgObject_Create, (process_method_func)dMsgObject_Delete, (process_method_func)dMsgObject_Execute, (process_method_func)dMsgObject_IsDelete, (process_method_func)dMsgObject_Draw, }; extern msg_process_profile_definition g_profile_MSG_OBJECT = { fpcLy_CURRENT_e, // mLayerID 12, // mListID fpcPi_CURRENT_e, // mListPrio PROC_MSG_OBJECT, // mProcName &g_fpcLf_Method.base, // sub_method sizeof(dMsgObject_c), // mSize 0, // mSizeOther 0, // mParameters &g_fopMsg_Method, // sub_method 770, // mPriority &l_dMsgObject_Method, // sub_method };