// // Generated by dtk // Translation Unit: d_mesg.cpp // #include "d/d_mesg.h" #include "JSystem/J2DGraph/J2DOrthoGraph.h" #include "JSystem/J2DGraph/J2DPicture.h" #include "JSystem/J2DGraph/J2DScreen.h" #include "JSystem/J2DGraph/J2DTextBox.h" #include "JSystem/JKernel/JKRExpHeap.h" #include "JSystem/JMessage/resource.h" #include "JSystem/JUtility/JUTAssert.h" #include "d/d_com_inf_game.h" #include "d/d_meter.h" #include "d/d_procname.h" #include "f_op/f_op_msg.h" #include "f_op/f_op_msg_mng.h" #include "m_Do/m_Do_audio.h" #include "m_Do/m_Do_controller_pad.h" #include "stdio.h" JMessage::TResourceContainer* dMesg_gpResourceContainer; dMesg_tControl* dMesg_gpControl; dMesg_tSequenceProcessor* dMesg_gpSequenceProcessor; dMesg_tRenderingProcessor* dMesg_gpRenderingProcessor; JUTFont* dMesg_gpFont; JUTFont* dMesg_gpRFont; bool dMesg_gbUpdate; bool m_strSizeFlag; bool s_strSizeFlag; void* header; u32 nowMesgCode; int oldMesgCode; void* header2; bool headerFlag; short messageOffsetY; u8 zenkaku; u16 zenkakuCode; int retFlag; JMessage::TParse* oParse; s16 linemax = 4; struct unk_messageData { u8 field_0x0[0x4 - 0x0]; u16 field_0x4; u8 field_0x6[0xc - 0x6]; u8 field_0xc; u8 field_0xd; u8 field_0xe; u8 field_0xf[0x10 - 0xf]; u8 field_0x10; u8 field_0x11; u8 field_0x12[0x18 - 0x12]; }; void dMesg_fontsizeCenter(sub_mesg_class*, int, int); void dMesg_fontsizeCenter(sub_mesg_class*, int, int, int, int); /* 801DFEE4-801E000C .text _create__15dMesg_outFont_cFv */ void dMesg_outFont_c::_create() { icon = new J2DPicture("font_07_02.bti"); JUT_ASSERT(117, icon != NULL); kage = new J2DPicture("font_07_02.bti"); JUT_ASSERT(119, kage != NULL); fopMsgM_blendInit(icon,"font_00.bti"); fopMsgM_blendInit(kage,"font_00.bti"); _initialize(); } /* 801E000C-801E0074 .text _delete__15dMesg_outFont_cFv */ void dMesg_outFont_c::_delete() { delete icon; delete kage; } /* 801E0074-801E0120 .text _initialize__15dMesg_outFont_cFv */ void dMesg_outFont_c::_initialize() { /* Nonmatching */ field_0xc = 0; field_0x14 = 0; field_0x12 = 0; field_0x10 = 0; field_0x16 = -1; field_0x19 = -1; icon->hide(); icon->mRotation = 0.0f; icon->calcMtx(); icon->setAlpha(0); kage->hide(); kage->mRotation = 0.0f; kage->calcMtx(); kage->setAlpha(0); } /* 801E0120-801E0184 .text _set__15dMesg_outFont_cFsssUlUc */ bool dMesg_outFont_c::_set(s16 param_1, s16 param_2, s16 param_3, u32 param_4, u8 param_5) { if (field_0x19 == 0xFF) { field_0x10 = param_1; field_0x12 = param_2; field_0x14 = param_3; field_0xc = param_4; field_0x19 = param_5; fopMsgM_outFontSet(icon, kage, &field_0x16, field_0xc, field_0x19); return true; } return false; } /* 801E0184-801E01D0 .text _draw__15dMesg_outFont_cFv */ void dMesg_outFont_c::_draw() { if (field_0x19 != 0xFF) { fopMsgM_outFontDraw(icon, kage, field_0x10, field_0x12, field_0x14, &field_0x16, mAlpha, field_0x19); } } /* 801E01D0-801E01E4 .text _setAlpha__15dMesg_outFont_cFUc */ void dMesg_outFont_c::_setAlpha(u8 alpha) { if (field_0x19 == 0xFF) { return; } mAlpha = alpha; } /* 801E01E4-801E0274 .text __ct__14dMesg_tControlFv */ dMesg_tControl::dMesg_tControl() { mMainFont = NULL; field_0x54 = 0; field_0x58 = 0; field_0x5c = g_msgHIO.field_0x70; field_0x60 = g_msgHIO.field_0x70; field_0x64 = 0; field_0x68 = 0; field_0x6c = 486; field_0x70 = 0; field_0x71 = 0; field_0x44[3] = 0.0f; field_0x44[2] = 0.0f; field_0x44[1] = 0.0f; field_0x44[0] = 0.0f; } /* 801E0274-801E0288 .text do_word__14dMesg_tControlFUl */ const char* dMesg_tControl::do_word(u32 param_1) { static const char* name[] = { "Link", "リンク", "りんく", }; return name[param_1]; } /* 801E0288-801E0364 .text __ct__24dMesg_tSequenceProcessorFPQ28JMessage8TControl */ dMesg_tSequenceProcessor::dMesg_tSequenceProcessor(JMessage::TControl* param_1) : TSequenceProcessor(param_1) { field_0x44 = 0.0; field_0x48 = 0.0; field_0x4c = 0.0; field_0x50 = 0.0; field_0x54 = 0.0; field_0x6c = 0xffffffff; field_0x70 = 0; field_0x74 = 0; field_0x8c = 1; field_0x90 = 0; field_0x15f = 0; field_0x160 = 0; field_0x161 = 0; field_0x162 = 0; field_0x163 = 0; field_0x96 = 0; field_0x95 = 0; field_0x94 = 0; field_0x7c[3] = 0; field_0x7c[2] = 0; field_0x7c[1] = 0; field_0x7c[0] = 0; field_0x68 = 0; field_0x64 = 0; field_0x60 = 0; field_0x5c = 0; strcpy(field_0x97, ""); strcpy(field_0xfb, ""); } /* 801E0364-801E061C .text initialize__24dMesg_tSequenceProcessorFi */ void dMesg_tSequenceProcessor::initialize(int param_1) { /* Nonmatching */ dMesg_tControl* mesgControl = (dMesg_tControl*)mControl; if (retFlag) { retFlag = 0; } s_strSizeFlag = false; m_strSizeFlag = false; dMesg_tMeasureProcessor processor(mControl, param_1); const char* r28 = field_0x40; const void* r31 = field_0x3c; processor.reset_(r28); processor.do_begin_(r31, r28); processor.process(NULL); int r31_2 = mesgControl->field_0x54; u32 r28_2 = nowMesgCode; JMessage::TResource* resource = dMesg_gpControl->getResource_groupID(r28_2 >> 16); void* messageData = resource == NULL ? NULL : resource->getMessageData_messageIndex(r28_2); unk_messageData stack_8c = *(unk_messageData*)messageData; int i1 = 0; int i2 = 0; if (stack_8c.field_0x10 != 3) { for (; i1 < r31_2; i1++) { field_0x7c[i1] = 0; } } else { for (; i2 < r31_2; i2++) { field_0x7c[i2] = mesgControl->field_0x44[i2]; } } mesgControl->field_0x60 = mesgControl->field_0x5c; mesgControl->field_0x68 = 0; mesgControl->field_0x70 = 0; mesgControl->field_0x71 = 0; field_0x44 = 0.0f; field_0x50 = 0.0f; field_0x70 = 0; field_0x161 = 0; field_0x15f = 0; field_0x160 = 0; field_0x162 = 0; field_0x163 = 0; field_0x68 = 0; field_0x64 = 0; field_0x60 = 0; field_0x5c = 0; if (m_strSizeFlag) { retFlag--; } mMesg->screen->shiftSet(0, g_msgHIO.field_0x5e * (4 - (mesgControl->field_0x54 - retFlag)) / 2); char buffer[12]; sprintf(buffer, "\x1b" "CR[%d]", field_0x7c[field_0x70]); strcat(mMesg->text[0], buffer); strcat(mMesg->text[2], buffer); field_0x44 = field_0x7c[field_0x70]; field_0x8c = 1; field_0x90 = 0; } /* 801E067C-801E06A8 .text do_begin__24dMesg_tSequenceProcessorFPCvPCc */ void dMesg_tSequenceProcessor::do_begin(const void* param_1, const char* param_2) { field_0x3c = param_1; field_0x40 = param_2; initialize(0); } /* 801E06A8-801E06C8 .text do_end__24dMesg_tSequenceProcessorFv */ void dMesg_tSequenceProcessor::do_end() { setCharacter(); } /* 801E06C8-801E0834 .text do_isReady__24dMesg_tSequenceProcessorFv */ bool dMesg_tSequenceProcessor::do_isReady() { bool ret = false; if (field_0x15f == 0) { u32 r29 = nowMesgCode; JMessage::TResource* resource = dMesg_gpControl->getResource_groupID(r29 >> 16); void* messageData = resource == NULL ? NULL : resource->getMessageData_messageIndex(r29); unk_messageData stack_2c = *(unk_messageData*)messageData; if (stack_2c.field_0xd == 1) { field_0x161 = 1; if (field_0x160) { field_0x161 = 0; } } else if (stack_2c.field_0xd == 2) { field_0x161 = 0; } if (CPad_CHECK_TRIG_A(0) || CPad_CHECK_TRIG_B(0)) { if (stack_2c.field_0xd != 2 && field_0x160 == 0) { field_0x161 = 1; } } if (field_0x90 <= 0 || field_0x161) { ret = true; field_0x160 = 0; } else { field_0x90--; } if (zenkaku) { ret = true; } } return ret; } /* 801E0834-801E0864 .text do_jump_isReady__24dMesg_tSequenceProcessorFv */ bool dMesg_tSequenceProcessor::do_jump_isReady() { if (CPad_CHECK_TRIG_A(0) || CPad_CHECK_TRIG_B(0)) { return true; } return false; } /* 801E0864-801E0870 .text do_jump__24dMesg_tSequenceProcessorFPCvPCc */ void dMesg_tSequenceProcessor::do_jump(const void*, const char*) { field_0x90 = 0; } /* 801E0870-801E0874 .text do_branch_query__24dMesg_tSequenceProcessorFUs */ void dMesg_tSequenceProcessor::do_branch_query(u16) { } /* 801E0874-801E087C .text do_branch_queryResult__24dMesg_tSequenceProcessorFv */ int dMesg_tSequenceProcessor::do_branch_queryResult() { return 0xFF; } /* 801E087C-801E0888 .text do_branch__24dMesg_tSequenceProcessorFPCvPCc */ void dMesg_tSequenceProcessor::do_branch(const void*, const char*) { field_0x90 = 0; } /* 801E0888-801E0DE8 .text do_character__24dMesg_tSequenceProcessorFi */ void dMesg_tSequenceProcessor::do_character(int param_1) { /* Nonmatching */ dMesg_tControl* mesgControl = (dMesg_tControl*)mControl; u8 r30 = 0; setCharacter(); if (headerFlag) { if ((param_1 & 0xf0) == 0x80 || (param_1 & 0xf0) == 0x90 || zenkaku) { if (zenkaku == 0) { zenkakuCode = param_1 << 8; zenkaku = 1; return; } else { zenkakuCode |= u16(param_1); zenkaku = 0; for (int i = 0; i < 97; i++) { // TODO: zfont } mesgControl->field_0x68 = param_1; field_0x94 = param_1 >> 8; field_0x95 = param_1; } } else { field_0x94 = param_1; field_0x95 = 0; mesgControl->field_0x68 = param_1; if (param_1 == 10) { r30 = 1; } else if (param_1 == 0) { r30 = 2; } zenkaku = 0; } } else { field_0x94 = param_1; field_0x95 = 0; mesgControl->field_0x68 = param_1; if (param_1 == 10) { r30 = 1; } else if (param_1 == 0) { r30 = 2; } } JUTFont::TWidth twidth; int r29 = mesgControl->field_0x60; f32 f31 = f32(r29) / f32(mesgControl->mMainFont->getCellWidth()); mesgControl->mMainFont->getWidthEntry(mesgControl->field_0x68, &twidth); int tmp = twidth.field_0x1; if (mesgControl->field_0x70 == 0) { field_0x44 += tmp * f31; mesgControl->field_0x70 = 1; } else { field_0x44 += tmp * f31 + mesgControl->field_0x64; } if (field_0x74 > 0) { field_0x74--; if (field_0x74 == 0) { f31 = (field_0x48 + (field_0x44 - field_0x48) * 0.5f) - field_0x54 * 0.5f; char buffer[12]; buffer[0] = 0; if (field_0x163) { mMesg->text[1][field_0x60] = '\0'; mMesg->text[3][field_0x68] = '\0'; strcat(mMesg->text[1], field_0xfb); strcat(mMesg->text[3], field_0xfb); field_0x163 = 0; } if (field_0x50 < f31) { sprintf(buffer, "\x1b" "CR[%d]", (f31 - field_0x50) + 0.5f); field_0x50 += (f31 - field_0x50); } else { if (0.0f == field_0x50) { sprintf(buffer, "\x1b" "CL[%d]", (field_0x50 - f31) + 0.5f); field_0x50 += (field_0x50 - f31); } } field_0x50 += field_0x54; strcat(mMesg->text[1], buffer); strcat(mMesg->text[3], buffer); strcat(mMesg->text[1], field_0x97); strcat(mMesg->text[3], field_0x97); strcpy(field_0xfb, field_0x97); } } if (r30 == 1) { strcat(mMesg->text[0], &field_0x94); strcat(mMesg->text[1], &field_0x94); strcat(mMesg->text[2], &field_0x94); strcat(mMesg->text[3], &field_0x94); field_0x44 = 0.0f; field_0x50 = 0.0f; field_0x70 += 1; if (field_0x70 == mesgControl->field_0x54) { field_0x15f = 1; } else { mesgControl->field_0x70 = 0; char buffer[12]; sprintf(buffer, "\x1b" "CR[%d]", field_0x7c[field_0x70]); strcat(mMesg->text[0], buffer); strcat(mMesg->text[2], buffer); field_0x44 = field_0x7c[field_0x70]; } } else { strcat(mMesg->text[0], &field_0x94); strcat(mMesg->text[2], &field_0x94); } if (mesgControl->field_0x68 == 0x8140 || mesgControl->field_0x68 == 0x8141 || mesgControl->field_0x68 == 0x20 || r30 == 1) { if (field_0x8c) { field_0x90 = 1; } } else { field_0x90 = field_0x8c; } } /* 801E0DE8-801E161C .text do_tag__24dMesg_tSequenceProcessorFUlPCvUl */ bool dMesg_tSequenceProcessor::do_tag(u32 param_1, const void* param_2, u32 param_3) { /* Nonmatching */ dMesg_tControl* mesgControl = (dMesg_tControl*)mControl; int r30 = param_1 & 0xFF0000; bool r29 = false; if (field_0x162) { mMesg->text[0][field_0x5c] = 0; mMesg->text[2][field_0x64] = 0; field_0x162 = 0; strcat(mMesg->text[0], &field_0x94); strcat(mMesg->text[2], &field_0x94); field_0x96 = 0; field_0x95 = 0; field_0x94 = 0; } switch (r30) { case 0: switch (param_1) { case 0: { r29 = true; r30 = 0; u32 r25 = nowMesgCode; JMessage::TResource* resource = dMesg_gpControl->getResource_groupID(r25 >> 16); void* messageData = resource == NULL ? NULL : resource->getMessageData_messageIndex(r25); char local_8c[17]; unk_messageData stack_a8 = *(unk_messageData*)messageData; strcpy(local_8c, dComIfGs_getPlayerName()); #if VERSION != VERSION_JPN if (dComIfGs_getPalLanguage() == 1) { if (stack_a8.field_0x4 == 0x33b || stack_a8.field_0x4 == 0xc8b || stack_a8.field_0x4 == 0x1d21 || stack_a8.field_0x4 == 0x31d7 || stack_a8.field_0x4 == 0x37dd || stack_a8.field_0x4 == 0x37de ) { char c = local_8c[strlen(local_8c) - 1]; if (c == 's' || c == 'S' || c == 'z' || c == 'Z' || c == 'x' || c == 'X') { strcat(local_8c, "'"); } else { strcat(local_8c, "s"); } } } #endif char* r27 = local_8c; char local_cc[3]; while (*r27) { u32 r24; if (*r27 >> 4 == 8 || *r27 >> 4 == 9) { local_cc[0] = local_8c[r30++]; r24 = ((*r27 << 8) & ~0xFF) | (local_8c[r30] & 0xFF); local_cc[1] = local_8c[r30]; local_cc[0] = 0; r30++; r27 += 2; } else { r24 = *r27; local_cc[0] = local_8c[r30]; local_cc[1] = 0; r30++; r27++; } JUTFont::TWidth twidth; int r25 = mesgControl->field_0x60; f32 f29 = f32(r25) / f32(mesgControl->mRubyFont->getCellWidth()); mesgControl->mMainFont->getWidthEntry(r24, &twidth); if (field_0x44 == 0.0f) { field_0x44 = (int)twidth.field_0x1 * f29; } else { field_0x44 = (int)twidth.field_0x1 * f29 + mesgControl->field_0x64; } strcat(mMesg->text[0], local_cc); strcat(mMesg->text[2], local_cc); }; break; } case 1: field_0x8c = 0; r29 = true; break; case 2: field_0x8c = 1; r29 = true; break; case 3: r29 = true; break; case 4: r29 = true; field_0x90 = *(u16*)param_2; field_0x160 = 1; field_0x15f = 2; break; case 5: case 6: r29 = true; break; case 7: r29 = true; field_0x90 = *(u16*)param_2; field_0x160 = 1; break; case 8: case 9: field_0x8c = 0; r29 = true; break; case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29: { r30 = field_0x44 + mMesg->screen->field_0x88[0].mPosTopLeftOrig.x + 0.5f; int r24 = field_0x70 * g_msgHIO.field_0x5e + mMesg->screen->field_0x88[0].mPosTopLeftOrig.y + (g_msgHIO.field_0x5e * (4 - mesgControl->field_0x54)) / 2; setCharacter(); for (int i = 0; i < 18; i++) { if (mMesg->outfont[i]->_set(r30, r24, mesgControl->field_0x60, field_0x6c, param_1 - 10)) { mMesg->outfont[i]->_setAlpha(255); break; } } field_0x44 += (mesgControl->field_0x60 + mesgControl->field_0x64); char buffer[16]; sprintf(buffer, "\x1b" "CR[%d]", mesgControl->field_0x60); strcat(mMesg->text[0], buffer); strcat(mMesg->text[2], buffer); field_0x90 = field_0x8c; r29 = true; break; } case 41: { r29 = true; r30 = 0; char local_b8[16]; fopMsgM_passwordGet(local_b8, dComIfGs_getEventReg(0xBA0F) + 0x1B37); char* r27 = local_b8; char local_d0[3]; while (*r27) { u32 r24; if (*r27 >> 4 == 8 || *r27 >> 4 == 9) { local_d0[0] = local_b8[r30++]; r24 = ((*r27 << 8) & ~0xFF) | (local_b8[r30] & 0xFF); local_d0[1] = local_b8[r30]; local_d0[0] = 0; r30++; r27 += 2; } else { r24 = *r27; local_d0[0] = local_b8[r30]; local_d0[1] = 0; r30++; r27++; } JUTFont::TWidth twidth; int r25 = mesgControl->field_0x60; f32 f29 = f32(r25) / f32(mesgControl->mMainFont->getCellWidth()); mesgControl->mMainFont->getWidthEntry(r24, &twidth); if (field_0x44 == 0.0f) { field_0x44 = (int)twidth.field_0x1 * f29; } else { field_0x44 = (int)twidth.field_0x1 * f29 + mesgControl->field_0x64; } strcat(mMesg->text[0], local_d0); strcat(mMesg->text[2], local_d0); } } } break; case 0x10000: u16 r24 = param_1 & 0xFFFF; s8 tmp = dComIfGp_getReverb(dComIfGp_roomControl_getStayNo()); if (r24 == 8) { mDoAud_messageSePlay(r24, NULL, tmp); } else { mDoAud_messageSePlay(r24, NULL, tmp); } r29 = true; break; case 0x20000: dComIfGp_setMesgCameraTagInfo(u16(param_1)); r29 = true; break; case 0x30000: g_dComIfG_gameInfo.play.mMesgAnimeTagInfo = param_1; r29 = true; break; } return r29; } /* 801E161C-801E16F4 .text setCharacter__24dMesg_tSequenceProcessorFv */ void dMesg_tSequenceProcessor::setCharacter() { if (field_0x162) { mMesg->text[0][field_0x5c] = 0; mMesg->text[2][field_0x64] = 0; strcat(mMesg->text[0], &field_0x94); strcat(mMesg->text[2], &field_0x94); field_0x162 = 0; } if (field_0x163) { mMesg->text[1][field_0x60] = 0; mMesg->text[3][field_0x68] = 0; strcat(mMesg->text[1], field_0xfb); strcat(mMesg->text[3], field_0xfb); field_0x163 = 0; } } /* 801E16F4-801E1858 .text ruby_character__24dMesg_tSequenceProcessorFPci */ char* dMesg_tSequenceProcessor::ruby_character(char* param_1, int param_2) { /* Nonmatching */ dMesg_tControl* mesgControl = (dMesg_tControl*)mControl; JUTFont::TWidth twidth; f32 f31 = f32(g_msgHIO.field_0x68) / f32(mesgControl->mRubyFont->getCellWidth()); u8 buffer[3]; u8* src = (u8*)(param_1 + param_2); buffer[0] = src[0]; buffer[1] = src[1]; buffer[2] = 0; int tmp2 = (src[1]); tmp2 |= ((src[0] << 8)); mesgControl->mRubyFont->getWidthEntry(tmp2, &twidth); f32 tmp = (int)twidth.field_0x1; if (param_2 == 1) { if (field_0x50 == 0.0f) { field_0x54 = tmp * f31; } else { field_0x54 = tmp * f31; } } else { field_0x54 += g_msgHIO.field_0x5c + tmp * f31; } return (char*)buffer; } /* 801E1858-801E1B5C .text do_systemTagCode__24dMesg_tSequenceProcessorFUsPCvUl */ bool dMesg_tSequenceProcessor::do_systemTagCode(u16 param_1, const void* param_2, u32 param_3) { /* Nonmatching */ static const u32 colorTable[] = { 0xFFFFFFFF, 0xFF5A5AFF, 0x78FF78FF, 0x7878FFFF, 0xFFFF32FF, 0x82FFFFFF, 0xDC6EFFFF, 0xA0A0A0FF, 0xFF8200FF, }; dMesg_tControl* mesgControl = (dMesg_tControl*)mControl; if (field_0x162) { mMesg->text[0][field_0x5c] = 0; mMesg->text[2][field_0x64] = 0; field_0x162 = 0; } switch (param_1) { case 0: if (param_3 == 1) { field_0x6c = colorTable[u8(*(u8*)param_2)]; char buffer[32]; sprintf(buffer, "\x1b" "CC[%08x]" "\x1b" "GM[0]", field_0x6c); strcat(mMesg->text[0], buffer); } return true; case 1: case 6: if (param_3 == 2) { u16 tmp = *(u16*)param_2; int r31 = mesgControl->field_0x60; int r29 = (tmp * mesgControl->field_0x5c) / 100.0f + 0.5f; mesgControl->field_0x60 = r29; if (field_0x70 == 0) { dMesg_fontsizeCenter(mMesg, r31, r29); } else { if (tmp > 100 && s_strSizeFlag == 0) { strcat(this->mMesg->text[0], "\n"); strcat(this->mMesg->text[1], "\n"); strcat(this->mMesg->text[2], "\n"); strcat(this->mMesg->text[3], "\n"); char buffer[16]; sprintf(buffer, "\x1b" "CR[%d]", int(field_0x44)); strcat(mMesg->text[0], buffer); strcat(mMesg->text[2], buffer); s_strSizeFlag = true; } dMesg_fontsizeCenter(mMesg, r31, r29, mesgControl->field_0x5c, g_msgHIO.field_0x5e); } } return true; case 2: if (field_0x44 == 0.0f) { field_0x48 = field_0x44; } else { field_0x48 = field_0x44 + mesgControl->field_0x64; } field_0x54 = 0.0f; strcpy(field_0x97, ""); field_0x74 = *(u8*)param_2; for (int i = 1; i < int(param_3); i += 2) { strcat(field_0x97, ruby_character((char*)param_2, i)); } return true; case 3: return true; } return true; } /* 801E1B5C-801E1C00 .text __ct__23dMesg_tMeasureProcessorFPQ28JMessage8TControli */ dMesg_tMeasureProcessor::dMesg_tMeasureProcessor(JMessage::TControl* param_1, int param_2) : TSequenceProcessor(param_1) { field_0x48 = 0.0f; field_0x4c = param_2; field_0x50 = 0; field_0x54 = 0; linemax = 4; dMesg_tControl* mesgControl = (dMesg_tControl*)mControl; mesgControl->field_0x60 = mesgControl->field_0x5c; mesgControl->field_0x54 = 0; mesgControl->field_0x68 = 0; mesgControl->field_0x70 = 0; mesgControl->field_0x71 = 0; for (int i = 0; i < 4; i++) { field_0x38[i] = 0.0f; mesgControl->field_0x44[i] = 0.0f; } } /* 801E1C00-801E1EC0 .text do_character__23dMesg_tMeasureProcessorFi */ void dMesg_tMeasureProcessor::do_character(int param_1) { /* Nonmatching */ dMesg_tControl* mesgControl = (dMesg_tControl*)mControl; int r30 = field_0x50 - field_0x4c; bool r29 = false; JUTFont::TWidth twidth; if (param_1 == 10) { if (r30 >= 0 && r30 < linemax - 1) { retFlag++; } field_0x50++; mesgControl->field_0x70 = 0; } else { if (retFlag && r30 >= 0 && r30 < linemax) { retFlag = 0; } r29 = true; u32 r26 = nowMesgCode; JMessage::TResource* resource = dMesg_gpControl->getResource_groupID(r26 >> 16); void* messageData = resource == NULL ? NULL : resource->getMessageData_messageIndex(r26); unk_messageData stack_58 = *(unk_messageData*)messageData; if (dComIfGs_getClearCount() == 0 && stack_58.field_0xc == 12) { for (int i = 0; i < 97; i++) { // TODO: zfont } } mesgControl->field_0x68 = param_1; } if (r29 && r30 >= 0 && r30 <= linemax) { int r28 = mesgControl->field_0x60; f32 f31 = f32(r28) / f32(mesgControl->mMainFont->getCellWidth()); mesgControl->mMainFont->getWidthEntry(mesgControl->field_0x68, &twidth); int tmp = twidth.field_0x1; if (mesgControl->field_0x70 == 0) { field_0x38[r30] += tmp * f31; mesgControl->field_0x70 = 1; } else { field_0x38[r30] += mesgControl->field_0x64 + tmp * f31; } } } /* 801E1EC0-801E1F9C .text do_end__23dMesg_tMeasureProcessorFv */ void dMesg_tMeasureProcessor::do_end() { /* Nonmatching */ dMesg_tControl* mesgControl = (dMesg_tControl*)mControl; int var2 = (field_0x50 - field_0x4c) + 1; if (var2 > linemax) { var2 = linemax; } mesgControl->field_0x54 = var2; mesgControl->field_0x58 = field_0x4c + var2; for (int i = 0; i < 4; i++) { f32 var1; if (field_0x54 == 2 && (i == 1 || i == 2)) { var1 = field_0x48; } else if (field_0x54 == 3 && (i == 0 || i == 1 || i == 2)) { var1 = field_0x48; } else { var1 = (mesgControl->field_0x6c - field_0x38[i]); var1 *= 0.5f; } mesgControl->field_0x44[i] = var1; } } /* 801E1F9C-801E27BC .text do_tag__23dMesg_tMeasureProcessorFUlPCvUl */ bool dMesg_tMeasureProcessor::do_tag(u32 param_1, const void* param_2, u32 param_3) { /* Nonmatching */ dMesg_tControl* mesgControl = (dMesg_tControl*)mControl; int r27 = field_0x50 - field_0x4c; bool r26 = false; switch(param_1 & 0xFF0000) { case 0: switch(param_1) { case 0: { r26 = true; int r25 = 0; char local_7c[17]; u32 r23 = nowMesgCode; JMessage::TResource* resource = dMesg_gpControl->getResource_groupID(r23 >> 16); void* messageData = resource == NULL ? NULL : resource->getMessageData_messageIndex(r23); unk_messageData stack_98 = *(unk_messageData*)messageData; strcpy(local_7c, dComIfGs_getPlayerName()); #if VERSION != VERSION_JPN if (dComIfGs_getPalLanguage() == 1) { if (stack_98.field_0x4 == 0x33b || stack_98.field_0x4 == 0xc8b || stack_98.field_0x4 == 0x1d21 || stack_98.field_0x4 == 0x31d7 || stack_98.field_0x4 == 0x37dd || stack_98.field_0x4 == 0x37de ) { char c = local_7c[strlen(local_7c) - 1]; if (c == 's' || c == 'S' || c == 'z' || c == 'Z' || c == 'x' || c == 'X') { strcat(local_7c, "'"); } else { strcat(local_7c, "s"); } } } #endif if (retFlag && r27 >= 0 && r27 < linemax) { retFlag = 0; } char* r24 = local_7c; while (*r24) { u32 r22; if (*r24 >> 4 == 8 || *r24 >> 4 == 9) { r22 = ((local_7c[r25++] << 8) & ~0xFF) | (local_7c[r25] & 0xFF); r25++; r24 += 2; } else { r22 = local_7c[r25]; r25++; r24++; } JUTFont::TWidth twidth; int r23 = mesgControl->field_0x60; f32 f30 = f32(r23) / f32(mesgControl->mMainFont->getCellWidth()); mesgControl->mMainFont->getWidthEntry(r22, &twidth); if (r27 >= 0 && r27 <= linemax) { if (field_0x38[r27] == 0.0f) { field_0x38[r27] = (int)twidth.field_0x1 * f30; } else { field_0x38[r27] += (int)twidth.field_0x1 * f30 + mesgControl->field_0x64; } } } break; } case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29: if (retFlag && r27 >= 0 && r27 < linemax) { retFlag = 0; } if (r27 >= 0 && r27 <= 3) { field_0x38[r27] += (mesgControl->field_0x60 + mesgControl->field_0x64); } r26 = true; break; case 1: case 2: case 3: case 4: case 5: case 6: case 7: r26 = true; break; case 8: field_0x54 = 2; for (int i = 0; i < 2; i++) { JUTFont::TWidth twidth; int r23 = mesgControl->field_0x60; f32 f29 = f32(r23) / f32(mesgControl->mMainFont->getCellWidth()); mesgControl->mMainFont->getWidthEntry(72, &twidth); int tmp = twidth.field_0x1; if (field_0x48 == 0.0f) { field_0x48 += tmp * f29; } else { field_0x48 += mesgControl->field_0x64 + tmp * f29; } } r26 = true; break; case 9: field_0x54 = 3; for (int i = 0; i < 2; i++) { JUTFont::TWidth twidth; int r23 = mesgControl->field_0x60; f32 f29 = f32(r23) / f32(mesgControl->mMainFont->getCellWidth()); mesgControl->mMainFont->getWidthEntry(72, &twidth); int tmp = twidth.field_0x1; if (field_0x48 == 0.0f) { field_0x48 += tmp * f29; } else { field_0x48 += mesgControl->field_0x64 + tmp * f29; } } r26 = true; break; case 41: { r26 = true; int r25 = 0; char local_a8[16]; fopMsgM_passwordGet(local_a8, dComIfGs_getEventReg(0xBA0F) + 0x1B37); if (retFlag && r27 >= 0 && r27 < linemax) { retFlag = 0; } char* r24 = local_a8; while (*r24) { u32 r22; if (*r24 >> 4 == 8 || *r24 >> 4 == 9) { r22 = ((local_a8[r25++] << 8) & ~0xFF) | (local_a8[r25] & 0xFF); r25++; r24 += 2; } else { r22 = local_a8[r25]; r25++; r24++; } JUTFont::TWidth twidth; int r23 = mesgControl->field_0x60; f32 f30 = f32(r23) / f32(mesgControl->mMainFont->getCellWidth()); mesgControl->mMainFont->getWidthEntry(r22, &twidth); if (r27 >= 0 && r27 <= linemax) { if (field_0x38[r27] == 0.0f) { field_0x38[r27] = (int)twidth.field_0x1 * f30; } else { field_0x38[r27] += (int)twidth.field_0x1 * f30 + mesgControl->field_0x64; } } } break; } } break; case 0x10000: r26 = true; break; case 0x20000: r26 = true; break; case 0x30000: r26 = true; break; } return r26; } /* 801E27BC-801E28A8 .text do_systemTagCode__23dMesg_tMeasureProcessorFUsPCvUl */ bool dMesg_tMeasureProcessor::do_systemTagCode(u16 param_1, const void* param_2, u32 param_3) { /* Nonmatching */ dMesg_tControl* mesgControl = (dMesg_tControl*)mControl; int var2 = field_0x50 - field_0x4c; switch (param_1) { case 1: if (param_3 == 2) { u16 var1 = *(u16*)param_2; mesgControl->field_0x60 = (var1 * mesgControl->field_0x5c) / 100.0f + 0.5f; if (var2 >= 1 && var2 <= 2 && var1 > 100 && m_strSizeFlag == 0) { linemax--; m_strSizeFlag = true; } } return true; case 0: case 2: case 3: case 6: return true; } return true; } /* 801E28A8-801E28E4 .text __ct__25dMesg_tRenderingProcessorFPQ28JMessage8TControl */ dMesg_tRenderingProcessor::dMesg_tRenderingProcessor(JMessage::TControl* param_1) : TRenderingProcessor(param_1) { } /* 801E28E4-801E28E8 .text do_begin__25dMesg_tRenderingProcessorFPCvPCc */ void dMesg_tRenderingProcessor::do_begin(const void*, const char*) { } /* 801E28E8-801E28EC .text do_end__25dMesg_tRenderingProcessorFv */ void dMesg_tRenderingProcessor::do_end() { } /* 801E28EC-801E28F0 .text do_character__25dMesg_tRenderingProcessorFi */ void dMesg_tRenderingProcessor::do_character(int) { } /* 801E28F0-801E2970 .text do_tag__25dMesg_tRenderingProcessorFUlPCvUl */ bool dMesg_tRenderingProcessor::do_tag(u32 param_1, const void*, u32) { bool ret = false; switch (param_1 & 0xff0000) { case 0: switch(param_1) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29: case 41: ret = true; break; } break; case 0x10000: ret = true; break; case 0x20000: ret = true; break; case 0x30000: ret = true; break; } return ret; } /* 801E2970-801E29A4 .text do_systemTagCode__25dMesg_tRenderingProcessorFUsPCvUl */ bool dMesg_tRenderingProcessor::do_systemTagCode(u16 param_1, const void*, u32) { switch (param_1) { case 0: case 1: case 2: case 3: case 6: return true; } return true; } /* 801E29A4-801E2C04 .text setCommonData__18dMesg_screenData_cFv */ void dMesg_screenData_c::setCommonData() { /* Nonmatching */ ((J2DTextBox*)field_0x88[0].pane)->setFont(field_0x10); ((J2DTextBox*)field_0x88[1].pane)->setFont(field_0x14); ((J2DTextBox*)field_0x88[2].pane)->setFont(field_0x10); ((J2DTextBox*)field_0x88[3].pane)->setFont(field_0x14); f32 tmp = g_msgHIO.field_0x70; ((J2DTextBox*)field_0x88[0].pane)->setFontSize(tmp, tmp); ((J2DTextBox*)field_0x88[2].pane)->setFontSize(tmp, tmp); ((J2DTextBox*)field_0x88[0].pane)->setCharSpace(g_msgHIO.field_0x5a); ((J2DTextBox*)field_0x88[1].pane)->setCharSpace(g_msgHIO.field_0x5c); ((J2DTextBox*)field_0x88[2].pane)->setCharSpace(g_msgHIO.field_0x5a); ((J2DTextBox*)field_0x88[3].pane)->setCharSpace(g_msgHIO.field_0x5c); ((J2DTextBox*)field_0x88[0].pane)->setLineSpace(g_msgHIO.field_0x5e); ((J2DTextBox*)field_0x88[2].pane)->setLineSpace(g_msgHIO.field_0x5e); field_0x1a8 = 0; field_0x1b0.set(((J2DPicture*)field_0x18.pane)->getBlack()); field_0x1ac.set(((J2DPicture*)field_0x18.pane)->getWhite()); } /* 801E2C04-801E2CB0 .text initString__18dMesg_screenData_cFPci */ void dMesg_screenData_c::initString(char* param_1, int param_2) { char buffer[24]; u32 tmp = dMesg_gpSequenceProcessor->field_0x6c; switch (param_2){ case 0: sprintf(buffer, "\x1b" "CC[%08x]" "\x1b" "GM[0]", tmp); strcpy(param_1, buffer); break; case 1: strcpy(param_1, "\x1b" "CC[FFFFFFFF]" "\x1b" "GM[0]"); break; case 2: case 3: strcpy(param_1,"\x1b" "CC[000000FF]" "\x1b" "GM[0]"); break; } } /* 801E2CB0-801E2CE0 .text setString__18dMesg_screenData_cFPci */ void dMesg_screenData_c::setString(char* param_1, int param_2) { ((J2DTextBox*)field_0x88[param_2].pane)->setString(param_1, param_2); } /* 801E2CE0-801E2D40 .text shiftSet__18dMesg_screenData_cFii */ void dMesg_screenData_c::shiftSet(int param_1, int param_2) { for (int i = 0; i < 4; i++) { J2DTextBox* textBox = (J2DTextBox*)field_0x88[i].pane; textBox->field_0xd8 = param_1; textBox->field_0xdc = param_2; } } /* 801E2D40-801E2D98 .text arwAnimeInit__18dMesg_screenData_cFv */ void dMesg_screenData_c::arwAnimeInit() { fopMsgM_setNowAlphaZero(&field_0x50); field_0x50.mPosCenter = field_0x50.mPosCenterOrig; field_0x50.mSize = field_0x50.mSizeOrig; field_0x1a8 = 0; } /* 801E2D98-801E315C .text arwAnime__18dMesg_screenData_cFv */ void dMesg_screenData_c::arwAnime() { /* Nonmatching */ static const f32 scaleX[] = {1.0f, 1.3f, 0.8f, 1.2f, 1.0f}; static const f32 scaleY[] = {1.0f, 0.3f, 1.1f, 0.8f, 1.0f}; static const s16 step[] = {60, 67, 71, 74, 76}; field_0x1a8++; if (field_0x50.mNowAlpha < field_0x50.mInitAlpha) { fopMsgM_setNowAlpha(&field_0x50, fopMsgM_valueIncrease(10, field_0x1a8, 0)); if (field_0x1a8 == 10) { field_0x1a8 = 0; } } else { f32 var1, var3; if (field_0x1a8 <= step[0]) { var1 = var3 = 1.0f; } else if (field_0x1a8 <= step[1]) { var3 = f32(field_0x1a8) - f32(step[0]); var1 = (var3 * var3) / (f32(step[1] - step[0]) * f32(step[1] - step[0])); var3 = var1 * (scaleX[0] - scaleX[1]) + scaleX[0]; var1 = var1 * (scaleY[0] - scaleY[1]) + scaleY[0]; } else if (field_0x1a8 <= step[2]) { var3 = f32(field_0x1a8) - f32(step[0]); var1 = (var3 * var3) / (f32(step[2] - step[1]) * f32(step[2] - step[1])); var3 = var1 * (scaleX[1] - scaleX[2]) + scaleX[1]; var1 = var1 * (scaleY[1] - scaleY[2]) + scaleY[1]; } else if (field_0x1a8 <= step[3]) { var3 = f32(field_0x1a8) - f32(step[0]); var1 = (var3 * var3) / (f32(step[3] - step[2]) * f32(step[3] - step[2])); var3 = var1 * (scaleX[2] - scaleX[3]) + scaleX[2]; var1 = var1 * (scaleY[2] - scaleY[3]) + scaleY[2]; } else if (field_0x1a8 <= step[4]) { var3 = f32(field_0x1a8) - f32(step[0]); var1 = (var3 * var3) / (f32(step[4] - step[3]) * f32(step[4] - step[3])); var3 = var1 * (scaleX[3] - scaleX[4]) + scaleX[3]; var1 = var1 * (scaleY[3] - scaleY[4]) + scaleY[3]; } else { var1 = var3 = 1.0f; field_0x1a8 = 0; } field_0x50.mSize.x = field_0x50.mSizeOrig.x * var3; field_0x50.mSize.y = field_0x50.mSizeOrig.y * var1; field_0x50.mPosCenter.y = f32(g_msgHIO.field_0x66) + (f32(field_0x1a4) - field_0x50.mSize.y * 0.5f); fopMsgM_cposMove(&field_0x50); } } /* 801E315C-801E3194 .text dotAnimeInit__18dMesg_screenData_cFv */ void dMesg_screenData_c::dotAnimeInit() { fopMsgM_setNowAlphaZero(&field_0x18); field_0x1a8 = 0; } /* 801E3194-801E36A8 .text dotAnime__18dMesg_screenData_cFv */ void dMesg_screenData_c::dotAnime() { /* Nonmatching */ f32 f31 = 150.0f - field_0x1b0.r; f32 f30 = 150.0f - field_0x1b0.g; f32 f29 = 150.0f - field_0x1b0.b; f32 f28 = 255.0f - field_0x1ac.r; f32 f27 = 255.0f - field_0x1ac.g; f32 f26 = 220.0f - field_0x1ac.b; f32 f25 = 255.0f - field_0x18.mInitAlpha; JUtility::TColor black; JUtility::TColor white; field_0x1a8++; black.a = field_0x1b0.a; white.a = field_0x1ac.a; if (field_0x18.mNowAlpha < field_0x18.mInitAlpha) { fopMsgM_setNowAlpha(&field_0x18, fopMsgM_valueIncrease(10, field_0x1a8, 0)); if (field_0x1a8 == 10) { field_0x1a8 = 0; } } else { if (field_0x1a8 >= 60) { black = field_0x1b0; white = field_0x1ac; fopMsgM_setInitAlpha(&field_0x18); field_0x1a8 = 0; } else if (field_0x1a8 > 30) { f32 tmp = fopMsgM_valueIncrease(30, 60 - field_0x1a8, 0); black.r = field_0x1b0.r + f31 * tmp; black.g = field_0x1b0.g + f30 * tmp; black.b = field_0x1b0.b + f29 * tmp; white.r = field_0x1ac.r + f28 * tmp; white.g = field_0x1ac.g + f27 * tmp; white.b = field_0x1ac.b + f26 * tmp; field_0x18.mNowAlpha = field_0x18.mInitAlpha + f25 * tmp; } else { f32 tmp = fopMsgM_valueIncrease(30, field_0x1a8, 0); black.r = field_0x1b0.r + f31 * tmp; black.g = field_0x1b0.g + f30 * tmp; black.b = field_0x1b0.b + f29 * tmp; white.r = field_0x1ac.r + f28 * tmp; white.g = field_0x1ac.g + f27 * tmp; white.b = field_0x1ac.b + f26 * tmp; field_0x18.mNowAlpha = field_0x18.mInitAlpha + f25 * tmp; } ((J2DPicture*)field_0x18.pane)->setBlack(black); ((J2DPicture*)field_0x18.pane)->setWhite(white); } } /* 801E36A8-801E3998 .text createScreen__22dMesg_screenDataTalk_cFv */ void dMesg_screenDataTalk_c::createScreen() { JUtility::TColor white(30, 30, 30, 215); JUtility::TColor black(30, 30, 75, 0); scrn = new J2DScreen(); JUT_ASSERT(2145, scrn != NULL); scrn->set("hukidashi_d00.blo", dComIfGp_getDmsgArchive()); fopMsgM_setPaneData(&field_0x18, scrn->search('dt00')); fopMsgM_setPaneData(&field_0x50, scrn->search('yz00')); fopMsgM_setPaneData(&field_0x88[0], scrn->search('tx02')); fopMsgM_setPaneData(&field_0x88[1], scrn->search('tx03')); fopMsgM_setPaneData(&field_0x88[2], scrn->search('txt0')); fopMsgM_setPaneData(&field_0x88[3], scrn->search('tx01')); fopMsgM_setPaneData(&field_0x168, scrn->search('ms00')); if (dComIfGs_getOptRuby()) { field_0x88[1].pane->hide(); field_0x88[3].pane->hide(); messageOffsetY = -4; } else { field_0x88[1].pane->show(); field_0x88[3].pane->show(); messageOffsetY = 0; } ((J2DPicture*)field_0x168.pane)->setWhite(white); ((J2DPicture*)field_0x168.pane)->setBlack(black); setCommonData(); } /* 801E3998-801E39F8 .text changeFont__22dMesg_screenDataTalk_cFP7JUTFont */ void dMesg_screenDataTalk_c::changeFont(JUTFont* font) { ((J2DTextBox*)field_0x88[0].pane)->setFont(font); ((J2DTextBox*)field_0x88[1].pane)->setFont(font); ((J2DTextBox*)field_0x88[2].pane)->setFont(font); ((J2DTextBox*)field_0x88[3].pane)->setFont(font); } /* 801E39F8-801E3BBC .text openAnime__22dMesg_screenDataTalk_cFv */ bool dMesg_screenDataTalk_c::openAnime() { /* Nonmatching */ f32 f31, f30, f29, f28, tmp; bool ret = false; field_0x1a8++; if (field_0x1a8 >= 13) { field_0x168.mPosCenter = field_0x168.mPosCenterOrig; fopMsgM_paneScaleXY(&field_0x168, 1.0f); fopMsgM_setInitAlpha(&field_0x168); for (int i = 0; i < 4; i++) { fopMsgM_setInitAlpha(&field_0x88[i]); } ret = true; } else { if (field_0x1a8 < 10) { f31 = 100.0f; f30 = (f31 * field_0x168.mSizeOrig.y) / field_0x168.mSizeOrig.x; f29 = field_0x168.mSizeOrig.x - f31; f28 = field_0x168.mSizeOrig.y - f30; tmp = fopMsgM_valueIncrease(10, field_0x1a8, 0); } else { f31 = field_0x168.mSizeOrig.x; f30 = field_0x168.mSizeOrig.y; f29 = 580.0f - f31; f28 = (f30 * 580.0f) / f31 - f30; tmp = JMASSin((field_0x1a8 - 10) * (0x10000 / 6.0f)); } field_0x168.mSize.x = f31 + f29 * tmp; field_0x168.mSize.y = f30 + f28 * tmp; fopMsgM_cposMove(&field_0x168); field_0x1b4 = fopMsgM_valueIncrease(13, field_0x1a8, 0); fopMsgM_setNowAlpha(&field_0x168, field_0x1b4); } return ret; } /* 801E3BBC-801E3CE0 .text closeAnime__22dMesg_screenDataTalk_cFv */ bool dMesg_screenDataTalk_c::closeAnime() { /* Nonmatching */ bool ret = false; if (field_0x1a8 == 0) { for (int i = 0; i < 4; i++) { fopMsgM_setNowAlphaZero(&field_0x88[i]); } } field_0x1a8++; if (field_0x1a8 >= 10) { fopMsgM_setNowAlphaZero(&field_0x168); ret = true; } else { f32 f31 = field_0x168.mSizeOrig.x; f32 f30 = field_0x168.mSizeOrig.y; f32 f29 = (f30 / f31) * 620.0f - f30; f32 tmp = fopMsgM_valueIncrease(10, field_0x1a8, 0); field_0x168.mSize.x = f31 + (620.0f - f31) * tmp; field_0x168.mSize.y = f30 + f29 * tmp; field_0x1b4 = 1.0f - tmp; fopMsgM_cposMove(&field_0x168); fopMsgM_setNowAlpha(&field_0x168, field_0x1b4); } return ret; } /* 801E3CE0-801E402C .text setTextPosition__22dMesg_screenDataTalk_cFUc */ void dMesg_screenDataTalk_c::setTextPosition(u8 param_1) { /* Nonmatching */ if (param_1 == 1) { field_0x168.mPosTopLeftOrig.y = 21.0f; field_0x50.mPosTopLeftOrig.y = 180.0f; field_0x18.mPosTopLeftOrig.y = 180.0f; field_0x88[0].mPosTopLeftOrig.y = messageOffsetY + 64; field_0x88[1].mPosTopLeftOrig.y = messageOffsetY + 51; field_0x88[2].mPosTopLeftOrig.y = messageOffsetY + 66; field_0x88[3].mPosTopLeftOrig.y = messageOffsetY + 63; } else if (param_1 == 2) { field_0x168.mPosTopLeftOrig.y = 144.0f; field_0x50.mPosTopLeftOrig.y = 303.0f; field_0x18.mPosTopLeftOrig.y = 303.0f; field_0x88[0].mPosTopLeftOrig.y = messageOffsetY + 184; field_0x88[1].mPosTopLeftOrig.y = messageOffsetY + 171; field_0x88[2].mPosTopLeftOrig.y = messageOffsetY + 186; field_0x88[3].mPosTopLeftOrig.y = messageOffsetY + 173; } else { field_0x168.mPosTopLeftOrig.y = 273.0f; field_0x50.mPosTopLeftOrig.y = 432.0f; field_0x18.mPosTopLeftOrig.y = 432.0f; field_0x88[0].mPosTopLeftOrig.y = messageOffsetY + 318; field_0x88[1].mPosTopLeftOrig.y = messageOffsetY + 305; field_0x88[2].mPosTopLeftOrig.y = messageOffsetY + 320; field_0x88[3].mPosTopLeftOrig.y = messageOffsetY + 307; } field_0x168.mPosCenterOrig.y = field_0x168.mPosTopLeftOrig.y + field_0x168.mSizeOrig.y * 0.5f; fopMsgM_paneTrans(&field_0x168, 0.0f, 0.0f); field_0x50.mPosCenterOrig.y = field_0x50.mPosTopLeftOrig.y + field_0x50.mSizeOrig.y * 0.5f; fopMsgM_paneTrans(&field_0x50, 0.0f, 0.0f); field_0x18.mPosCenterOrig.y = field_0x18.mPosTopLeftOrig.y + field_0x18.mSizeOrig.y * 0.5f; fopMsgM_paneTrans(&field_0x18, 0.0f, 0.0f); field_0x88[0].mPosCenterOrig.y = field_0x88[0].mPosTopLeftOrig.y + field_0x88[0].mSizeOrig.y * 0.5f; fopMsgM_paneTrans(&field_0x88[0], 0.0f, 0.0f); field_0x88[1].mPosCenterOrig.y = field_0x88[1].mPosTopLeftOrig.y + field_0x88[1].mSizeOrig.y * 0.5f; fopMsgM_paneTrans(&field_0x88[1], 0.0f, 0.0f); field_0x88[2].mPosCenterOrig.y = field_0x88[2].mPosTopLeftOrig.y + field_0x88[2].mSizeOrig.y * 0.5f; fopMsgM_paneTrans(&field_0x88[2], 0.0f, 0.0f); field_0x88[3].mPosCenterOrig.y = field_0x88[3].mPosTopLeftOrig.y + field_0x88[3].mSizeOrig.y * 0.5f; fopMsgM_paneTrans(&field_0x88[3], 0.0f, 0.0f); field_0x1a4 = field_0x50.mPosTopLeft.y + field_0x50.mSizeOrig.y; } /* 801E402C-801E40CC .text draw__22dMesg_screenDataTalk_cFv */ void dMesg_screenDataTalk_c::draw() { fopMsgM_setAlpha(&field_0x18); fopMsgM_setAlpha(&field_0x50); for (int i = 0; i < 4; i++) { fopMsgM_setAlpha(&field_0x88[i]); } fopMsgM_setAlpha(&field_0x168); J2DOrthoGraph* graph = dComIfGp_getCurrentGrafPort(); graph->setPort(); scrn->draw(0.0f, 0.0f, graph); } /* 801E40CC-801E48D0 .text createScreen__22dMesg_screenDataItem_cFv */ void dMesg_screenDataItem_c::createScreen() { /* Nonmatching */ scrn = new J2DScreen(); JUT_ASSERT(2421, scrn != NULL); texBuffer = (ResTIMG*)mHeap->alloc(0xc00, 0x20); JUT_ASSERT(2424, texBuffer != NULL); field_0x3e4 = NULL; scrn->set("hukidashi_d09.blo", dComIfGp_getDmsgArchive()); fopMsgM_setPaneData(&field_0x18, scrn->search('dt90')); fopMsgM_setPaneData(&field_0x50, scrn->search('yz90')); fopMsgM_setPaneData(&field_0x88[0], scrn->search('tx92')); fopMsgM_setPaneData(&field_0x88[1], scrn->search('tx93')); fopMsgM_setPaneData(&field_0x88[2], scrn->search('tx90')); fopMsgM_setPaneData(&field_0x88[3], scrn->search('tx91')); fopMsgM_setPaneData(&field_0x168, scrn->search('ms90')); fopMsgM_setPaneData(&field_0x1b4, scrn->search('item')); fopMsgM_setPaneData(&field_0x1ec, scrn->search('rin1')); fopMsgM_setPaneData(&field_0x224[0], scrn->search('lig1')); fopMsgM_setPaneData(&field_0x224[1], scrn->search('lig2')); fopMsgM_setPaneData(&field_0x224[2], scrn->search('lig3')); fopMsgM_setPaneData(&field_0x224[3], scrn->search('lig4')); fopMsgM_setPaneData(&field_0x224[4], scrn->search('lig5')); fopMsgM_setPaneData(&field_0x224[5], scrn->search('lig6')); fopMsgM_setPaneData(&field_0x224[6], scrn->search('lig7')); fopMsgM_setPaneData(&field_0x224[7], scrn->search('lig8')); if (dComIfGs_getOptRuby()) { field_0x88[1].pane->hide(); field_0x88[3].pane->hide(); messageOffsetY = -4; } else { field_0x88[1].pane->show(); field_0x88[3].pane->show(); messageOffsetY = 0; } u32 r30 = nowMesgCode; JMessage::TResource* resource = dMesg_gpControl->getResource_groupID(r30 >> 16); void* messageData = resource == NULL ? NULL : resource->getMessageData_messageIndex(r30); unk_messageData stack_message = *(unk_messageData*)messageData; if (dItem_data::getTexture(stack_message.field_0x4 - 101)) { JKRArchive::readTypeResource(texBuffer, 0xc00, 'TIMG', dItem_data::getTexture(stack_message.field_0x4 - 101), dComIfGp_getItemIconArchive()); ((J2DPicture*)field_0x1b4.pane)->changeTexture(texBuffer, 0); } field_0x168.mPosTopLeftOrig.y += 1.0f; field_0x168.mPosCenterOrig.y = field_0x168.mPosTopLeftOrig.y + field_0x168.mPosCenterOrig.y * 0.5f; fopMsgM_paneTrans(&field_0x168, 0.0f, 0.0f); field_0x50.mPosTopLeftOrig.y += 1.0f; field_0x50.mPosCenterOrig.y = field_0x50.mPosTopLeftOrig.y + field_0x50.mPosCenterOrig.y * 0.5f; fopMsgM_paneTrans(&field_0x50, 0.0f, 0.0f); field_0x18.mPosTopLeftOrig.y += 1.0f; field_0x18.mPosCenterOrig.y = field_0x18.mPosTopLeftOrig.y + field_0x18.mPosCenterOrig.y * 0.5f; fopMsgM_paneTrans(&field_0x18, 0.0f, 0.0f); field_0x88[0].mPosTopLeftOrig.y -= (messageOffsetY + 5); field_0x88[0].mPosCenterOrig.y = field_0x88[0].mPosTopLeftOrig.y + field_0x88[0].mPosCenterOrig.y * 0.5f; fopMsgM_paneTrans(&field_0x88[0], 0.0f, 0.0f); field_0x88[1].mPosTopLeftOrig.y -= (messageOffsetY + 8); field_0x88[1].mPosCenterOrig.y = field_0x88[1].mPosTopLeftOrig.y + field_0x88[1].mPosCenterOrig.y * 0.5f; fopMsgM_paneTrans(&field_0x88[1], 0.0f, 0.0f); field_0x88[2].mPosTopLeftOrig.y -= (messageOffsetY + 5); field_0x88[2].mPosCenterOrig.y = field_0x88[2].mPosTopLeftOrig.y + field_0x88[2].mPosCenterOrig.y * 0.5f; fopMsgM_paneTrans(&field_0x88[2], 0.0f, 0.0f); field_0x88[3].mPosTopLeftOrig.y -= (messageOffsetY + 8); field_0x88[3].mPosCenterOrig.y = field_0x88[3].mPosTopLeftOrig.y + field_0x88[3].mPosCenterOrig.y * 0.5f; fopMsgM_paneTrans(&field_0x88[3], 0.0f, 0.0f); setCommonData(); field_0x1a4 = field_0x50.mPosTopLeft.y + field_0x50.mSizeOrig.y; if (nowMesgCode == 0x113A) { field_0x1b4.pane->hide(); } else if (nowMesgCode == 0x7f) { J2DPane* pane = field_0x1b4.pane; f32 y = (field_0x1b4.mSize.y * 0.5f + pane->mScreenBounds.i.y - 240.0f) - 10.0f; f32 x = (field_0x1b4.mSize.x * 0.5f + pane->mScreenBounds.i.x - 320.0f) + 10.0f; field_0x3e4 = dComIfGp_particle_set2Dfore(0x2e1, &cXyz(x, y, 0.0f)); } } /* 801E48D0-801E4930 .text changeFont__22dMesg_screenDataItem_cFP7JUTFont */ void dMesg_screenDataItem_c::changeFont(JUTFont* font) { ((J2DTextBox*)field_0x88[0].pane)->setFont(font); ((J2DTextBox*)field_0x88[1].pane)->setFont(font); ((J2DTextBox*)field_0x88[2].pane)->setFont(font); ((J2DTextBox*)field_0x88[3].pane)->setFont(font); } /* 801E4930-801E49B4 .text deleteScreen__22dMesg_screenDataItem_cFv */ void dMesg_screenDataItem_c::deleteScreen() { delete scrn; if (field_0x3e4) { field_0x3e4->becomeInvalidEmitter(); field_0x3e4->clearStatus(JPAEmtrStts_Immortal); } mHeap->free(texBuffer); } /* 801E49B4-801E4AE8 .text openAnime__22dMesg_screenDataItem_cFv */ bool dMesg_screenDataItem_c::openAnime() { /* Nonmatching */ static const f32 frameScale[] = {0.6f, 1.1f, 1.0f}; bool ret = false; field_0x1a8++; if (field_0x1a8 >= 8) { field_0x168.mPosCenter.x = field_0x168.mPosCenterOrig.x; field_0x168.mPosCenter.y = field_0x168.mPosCenterOrig.y; fopMsgM_paneScaleXY(&field_0x168, 1.0f); fopMsgM_setInitAlpha(&field_0x168); for (int i = 0; i < 4; i++) { fopMsgM_setInitAlpha(&field_0x88[i]); } ret = true; } else if (field_0x1a8 <= 5) { f32 f31 = fopMsgM_valueIncrease(5, field_0x1a8, 0); f32 tmp = (frameScale[1] - frameScale[0]) + frameScale[0]; fopMsgM_paneScaleXY(&field_0x168, f31 * (frameScale[1] - frameScale[0]) + frameScale[0]); fopMsgM_setNowAlpha(&field_0x168, f31); } else { f32 tmp = fopMsgM_valueIncrease(3, field_0x1a8 - 5, 0); fopMsgM_paneScaleXY(&field_0x168, tmp * (frameScale[2] - frameScale[1]) + frameScale[1]); fopMsgM_setInitAlpha(&field_0x168); } return ret; } /* 801E4AE8-801E4C40 .text closeAnime__22dMesg_screenDataItem_cFv */ bool dMesg_screenDataItem_c::closeAnime() { /* Nonmatching */ bool ret = false; if (field_0x1a8 == 0) { for (int i = 0; i < 4; i++) { fopMsgM_setNowAlphaZero(&field_0x88[i]); } fopMsgM_setNowAlphaZero(&field_0x1b4); fopMsgM_setNowAlphaZero(&field_0x1ec); for (int i = 0; i < 8; i++) { fopMsgM_setNowAlphaZero(&field_0x224[i]); } } field_0x1a8++; if (field_0x1a8 >= 10) { fopMsgM_setNowAlphaZero(&field_0x168); ret = true; } else { f32 f31 = field_0x168.mSizeOrig.x; f32 f30 = field_0x168.mSizeOrig.y; f32 f29 = (f30 / f31) * 620.0f - f30; f32 tmp = fopMsgM_valueIncrease(10, field_0x1a8, 0); field_0x168.mSize.x = f31 + (620.0f - f31) * tmp; field_0x168.mSize.y = f30 + f29 * tmp; field_0x3e8 = 1.0f - tmp; fopMsgM_cposMove(&field_0x168); fopMsgM_setNowAlpha(&field_0x168, field_0x3e8); } return ret; } /* 801E4C40-801E4D04 .text move__22dMesg_screenDataItem_cFv */ void dMesg_screenDataItem_c::move() { /* Nonmatching */ ringMove(); lightMove(); cornerMove(); if (field_0x3e4) { J2DPane* pane = field_0x1b4.pane; JGeometry::TVec3 vec; vec.x = (field_0x1b4.mSize.x * 0.5f + pane->mScreenBounds.i.x - 320.0f) + 10.0f; vec.y = (field_0x1b4.mSize.y * 0.5f + pane->mScreenBounds.i.y - 240.0f) - 10.0f; vec.z = 0.0f; field_0x3e4->setGlobalTranslation(vec); field_0x3e4->clearStatus(JPAEmtrStts_StopDraw); field_0x3e4->setGlobalAlpha(field_0x1b4.mNowAlpha); } } /* 801E4D04-801E4E14 .text draw__22dMesg_screenDataItem_cFv */ void dMesg_screenDataItem_c::draw() { fopMsgM_setAlpha(&field_0x18); fopMsgM_setAlpha(&field_0x50); for (int i = 0; i < 4; i++) { fopMsgM_setAlpha(&field_0x88[i]); } fopMsgM_setAlpha(&field_0x168); fopMsgM_setAlpha(&field_0x1b4); fopMsgM_setAlpha(&field_0x1ec); for (int i = 0; i < 8; i++) { fopMsgM_setAlpha(&field_0x224[i]); } J2DOrthoGraph* graph = dComIfGp_getCurrentGrafPort(); graph->setPort(); scrn->draw(0.0f, 0.0f, graph); for (int i = 0; i < 18; i++) { if (mMesg->outfont[i] && mMesg->outfont[i]->field_0x16 != -1) { mMesg->outfont[i]->_draw(); } } } /* 801E4E14-801E4EBC .text ringMove__22dMesg_screenDataItem_cFv */ void dMesg_screenDataItem_c::ringMove() { field_0x1ec.mUserArea++; if (field_0x1ec.mUserArea >= 120) { field_0x1ec.mUserArea = 0; } f32 tmp; if (field_0x1ec.mUserArea < 60) { tmp = fopMsgM_valueIncrease(60, field_0x1ec.mUserArea, 0); } else { tmp = fopMsgM_valueIncrease(60, 120 - field_0x1ec.mUserArea, 0); } if (field_0x168.mNowAlpha == field_0x168.mInitAlpha && field_0x168.mSize.x == field_0x168.mSizeOrig.x) { fopMsgM_setNowAlpha(&field_0x1ec, tmp * 0.25f + 0.25f); } } /* 801E4EBC-801E524C .text lightMove__22dMesg_screenDataItem_cFv */ void dMesg_screenDataItem_c::lightMove() { /* Nonmatching */ field_0x224[0].mUserArea++; if (field_0x224[0].mUserArea >= 800) { field_0x224[0].mUserArea = 0; } f32 f31 = (field_0x224[0].mUserArea / 800.0f) * 360.0f; field_0x224[0].pane->rotate((int)field_0x224[0].mSize.x, 0.0f, ROTATE_Z, -f31); field_0x224[1].pane->rotate(0.0f, 0.0f, ROTATE_Z, -f31); field_0x224[2].pane->rotate((int)field_0x224[2].mSize.x, (int)field_0x224[2].mSize.y, ROTATE_Z, -f31); field_0x224[3].pane->rotate(0.0f, (int)field_0x224[3].mSize.y, ROTATE_Z, -f31); field_0x224[4].pane->rotate((int)field_0x224[4].mSize.x, 0.0f, ROTATE_Z, f31); field_0x224[5].pane->rotate(0.0f, 0.0f, ROTATE_Z, -f31); field_0x224[6].pane->rotate((int)field_0x224[6].mSize.x, (int)field_0x224[6].mSize.y, ROTATE_Z, f31); field_0x224[7].pane->rotate(0.0f, (int)field_0x224[7].mSize.y, ROTATE_Z, f31); if (field_0x168.mNowAlpha == field_0x168.mInitAlpha && field_0x168.mSize.x == field_0x168.mSizeOrig.x) { for (int i = 0; i < 8; i++) { fopMsgM_setInitAlpha(&field_0x224[i]); } fopMsgM_setInitAlpha(&field_0x1b4); } } /* 801E524C-801E5938 .text cornerMove__22dMesg_screenDataItem_cFv */ void dMesg_screenDataItem_c::cornerMove() { /* Nonmatching */ static const u8 cc_r[] = {200, 0, 0, 0}; static const u8 cc_g[] = {128, 0, 0, 0}; static const u8 cc_b[] = {255, 0, 255, 0}; if (g_msgHIO.field_0x7f << 2 >= ++field_0x168.mUserArea) { field_0x168.mUserArea = 0; } f32 tmp = fopMsgM_valueIncrease(g_msgHIO.field_0x7f, field_0x168.mUserArea - field_0x168.mUserArea % g_msgHIO.field_0x7f, 2); GXColor local_68[4]; for (int i = 0; i < 4; i++) { int r9 = i + 1; if (r9 >= 4) { r9 = 0; } local_68[i].r = cc_r[i] + tmp * (cc_r[r9] - cc_r[i]); local_68[i].g = cc_g[i] + tmp * (cc_g[r9] - cc_g[i]); local_68[i].b = cc_b[i] + tmp * (cc_b[r9] - cc_b[i]); local_68[i].a = 255; } if (field_0x168.mUserArea < g_msgHIO.field_0x7f) { ((J2DPicture*)field_0x168.pane)->setCornerColor(local_68[0], local_68[1], local_68[3], local_68[2]); } else if (field_0x168.mUserArea < g_msgHIO.field_0x7f * 2) { ((J2DPicture*)field_0x168.pane)->setCornerColor(local_68[1], local_68[2], local_68[0], local_68[3]); } else if (field_0x168.mUserArea < g_msgHIO.field_0x7f * 3) { ((J2DPicture*)field_0x168.pane)->setCornerColor(local_68[2], local_68[3], local_68[1], local_68[0]); } else { ((J2DPicture*)field_0x168.pane)->setCornerColor(local_68[3], local_68[0], local_68[2], local_68[1]); } } /* 801E5938-801E5ADC .text dMesg_initialize__FP14sub_mesg_class */ void dMesg_initialize(sub_mesg_class* i_Msg) { dMesg_gpResourceContainer = new JMessage::TResourceContainer(); JUT_ASSERT(2901, dMesg_gpResourceContainer != NULL); dMesg_gpControl = dComIfGp_demo_get()->getMesgControl(); dMesg_gpSequenceProcessor = new dMesg_tSequenceProcessor(dMesg_gpControl); JUT_ASSERT(2906, dMesg_gpSequenceProcessor != NULL); dMesg_gpRenderingProcessor = new dMesg_tRenderingProcessor(dMesg_gpControl); JUT_ASSERT(2909, dMesg_gpRenderingProcessor != NULL); dMesg_gpControl->mResourceContainer = dMesg_gpResourceContainer; dMesg_gpControl->setSequenceProcessor(dMesg_gpSequenceProcessor); dMesg_gpControl->setRenderingProcessor(dMesg_gpRenderingProcessor); dMesg_gpControl->setMainFont(dMesg_gpFont); dMesg_gpControl->setRubyFont(dMesg_gpRFont); dMesg_gpSequenceProcessor->setMesg(i_Msg); oldMesgCode = 0; } /* 801E5ADC-801E5B58 .text dMesg_finalize__Fv */ void dMesg_finalize() { delete dMesg_gpResourceContainer; delete dMesg_gpSequenceProcessor; delete dMesg_gpRenderingProcessor; } /* 801E5C8C-801E5E14 .text dMesg_parse__Fv */ int dMesg_parse() { #if VERSION != VERSION_JPN headerFlag = false; #endif header = JKRGetResource('ROOT', "zel_00.bmg", dComIfGp_getMsgDtArchive()); JUT_ASSERT(2956, header != NULL); #if VERSION != VERSION_JPN header2 = JKRGetResource('ROOT', "zel_01.bmg", dComIfGp_getMsgDt2Archive()); JUT_ASSERT(2961, header2 != NULL); #endif oParse = new JMessage::TParse(dMesg_gpResourceContainer); JUT_ASSERT(2964, oParse != NULL); oParse->parse(header, 0); #if VERSION != VERSION_JPN oParse->parse(header2, 0); #endif return 1; } /* 801E5E14-801E5E38 .text dMesg_reset__Fv */ void dMesg_reset() { dMesg_gpControl->reset(); } /* 801E5E38-801E5E60 .text dMesg_update__Fv */ void dMesg_update() { dMesg_gbUpdate = dMesg_gpControl->update(); } /* 801E5E60-801E5E84 .text dMesg_render__Fv */ void dMesg_render() { dMesg_gpControl->render(); } /* 801E5E84-801E5FB0 .text dMesg_fontsizeCenter__FP14sub_mesg_classii */ void dMesg_fontsizeCenter(sub_mesg_class* i_Msg, int param_2, int param_3) { char local_38[12]; char local_2c[24]; int var1 = param_3 - param_2; int var2 = var1 / 2; if (var2 > 0) { sprintf(local_2c, "\x1b" "FX[%d]" "\x1b" "FY[%d]", param_3, param_3); local_38[0] = 0; strcat(i_Msg->text[0], local_2c); strcat(i_Msg->text[1], local_38); strcat(i_Msg->text[2], local_2c); strcat(i_Msg->text[3], local_38); } else if (var2 < 0) { sprintf(local_2c, "\x1b" "FX[%d]" "\x1b" "FY[%d]", param_3, param_3); local_38[0] = 0; strcat(i_Msg->text[0], local_2c); strcat(i_Msg->text[1], local_38); strcat(i_Msg->text[2], local_2c); strcat(i_Msg->text[3], local_38); } else if (param_2 != param_3) { sprintf(local_2c, "\x1b" "FX[%d]" "\x1b" "FY[%d]", param_3, param_3); strcat(i_Msg->text[0], local_2c); strcat(i_Msg->text[2], local_2c); } } /* 801E5FB0-801E627C .text dMesg_hyrule_language_check__FUl */ bool dMesg_hyrule_language_check(u32 param_1) { if (dComIfGs_getClearCount()) { return false; } switch (param_1) { case 0x3a3: dMesg_gpControl->setMessageCode(1, 0); return true; case 0x3a5: dMesg_gpControl->setMessageCode(1, 1); return true; case 0x3a7: dMesg_gpControl->setMessageCode(1, 2); return true; case 0x3a9: dMesg_gpControl->setMessageCode(1, 3); return true; case 0x3ab: dMesg_gpControl->setMessageCode(1, 4); return true; case 0x3ad: dMesg_gpControl->setMessageCode(1, 5); return true; case 0x3ae: dMesg_gpControl->setMessageCode(1, 6); return true; case 0x3af: dMesg_gpControl->setMessageCode(1, 7); return true; case 0x3b1: dMesg_gpControl->setMessageCode(1, 8); return true; case 0x3b3: dMesg_gpControl->setMessageCode(1, 9); return true; case 0x4e8: dMesg_gpControl->setMessageCode(1, 10); return true; case 0x4ea: dMesg_gpControl->setMessageCode(1, 11); return true; case 0x500: dMesg_gpControl->setMessageCode(1, 12); return true; case 0x501: dMesg_gpControl->setMessageCode(1, 13); return true; case 0x70a: dMesg_gpControl->setMessageCode(1, 14); return true; } return false; } /* 801E627C-801E62F8 .text dMesg_fontsizeCenter__FP14sub_mesg_classiiii */ void dMesg_fontsizeCenter(sub_mesg_class* i_Msg, int param_2, int param_3, int param_4, int param_5) { char local_38[12]; char local_2c[24]; sprintf(local_2c, "\x1b" "FX[%d]" "\x1b" "FY[%d]", param_3, param_3); local_38[0] = 0; strcat(i_Msg->text[0], local_2c); strcat(i_Msg->text[1], local_38); strcat(i_Msg->text[2], local_2c); strcat(i_Msg->text[3], local_38); } /* 801E62F8-801E6760 .text dMesg_waitProc__FP14sub_mesg_class */ void dMesg_waitProc(sub_mesg_class* i_Msg) { /* Nonmatching */ nowMesgCode = (dMesg_gpControl->mGroupID << 16) | dMesg_gpControl->mMessageIndex; zenkaku = 0; zenkakuCode = 0; if (oldMesgCode != nowMesgCode) { if (dMesg_hyrule_language_check((dMesg_gpControl->mGroupID << 16) | dMesg_gpControl->mMessageIndex)) { nowMesgCode = (dMesg_gpControl->mGroupID << 16) | dMesg_gpControl->mMessageIndex; if (!headerFlag) { dMesg_gpControl->mMainFont = dMesg_gpRFont; headerFlag = true; } } else { if (headerFlag) { dMesg_gpControl->mMainFont = dMesg_gpFont; headerFlag = false; } } i_Msg->field_0x100 = JKRCreateExpHeap(0xa32d, i_Msg->heap, false); JKRHeap* heap = mDoExt_setCurrentHeap(i_Msg->field_0x100); for (int i = 0; i < 4; i++) { if (!i_Msg->text[i]) { i_Msg->text[i] = (char*)i_Msg->field_0x100->alloc(1001, 4); JUT_ASSERT(3304, i_Msg->text[i] != NULL); } } if (!i_Msg->screen) { u32 r28 = nowMesgCode; JMessage::TResource* resource = dMesg_gpControl->getResource_groupID(r28 >> 16); void* messageData = resource == NULL ? NULL : resource->getMessageData_messageIndex(r28); unk_messageData stack_3c = *(unk_messageData*)messageData; if (stack_3c.field_0xc == 9) { i_Msg->screen = new dMesg_screenDataItem_c(); } else { i_Msg->screen = new dMesg_screenDataTalk_c(); } JUT_ASSERT(3317, i_Msg->screen != NULL); i_Msg->screen->mMesg = i_Msg; i_Msg->screen->mHeap = i_Msg->field_0x100; if (headerFlag) { i_Msg->screen->setFont(dMesg_gpRFont, dMesg_gpRFont); } else { i_Msg->screen->setFont(dMesg_gpFont, dMesg_gpRFont); } i_Msg->screen->createScreen(); i_Msg->screen->setTextPosition(stack_3c.field_0xe); dMesg_gbUpdate = true; i_Msg->field_0x164 = 2; dMesg_gpSequenceProcessor->field_0x6c = -1; mDoAud_talkIn(); mDoAud_seStart(JA_SE_TALK_WIN_OPEN); } else if (headerFlag) { i_Msg->screen->changeFont(dMesg_gpRFont); } else { i_Msg->screen->changeFont(dMesg_gpFont); } for (int i = 0; i < 18; i++) { if (!i_Msg->outfont[i]) { i_Msg->outfont[i] = new dMesg_outFont_c(); JUT_ASSERT(3360, i_Msg->outfont[i]); i_Msg->outfont[i]->_create(); } } oldMesgCode = nowMesgCode; mDoExt_setCurrentHeap(heap); } } /* 801E67C8-801E6908 .text dMesg_openProc__FP14sub_mesg_class */ void dMesg_openProc(sub_mesg_class* i_Msg) { JKRHeap* oldHeap = mDoExt_setCurrentHeap(i_Msg->field_0x100); if (i_Msg->screen->openAnime()) { for (int i = 0; i < 4; i++) { i_Msg->screen->initString(i_Msg->text[i], i); i_Msg->screen->setString(i_Msg->text[i], i); } i_Msg->field_0x164 = 6; u32 r29 = nowMesgCode; JMessage::TResource* resource = dMesg_gpControl->getResource_groupID(r29 >> 16); void* messageData = resource == NULL ? NULL : resource->getMessageData_messageIndex(r29); unk_messageData stack_3c = *(unk_messageData*)messageData; if (stack_3c.field_0x11) { mDoAud_messageSePlay(stack_3c.field_0x11, NULL, dComIfGp_getReverb(dComIfGp_roomControl_getStayNo())); } } mDoExt_setCurrentHeap(oldHeap); } /* 801E6908-801E69D4 .text dMesg_outnowProc__FP14sub_mesg_class */ void dMesg_outnowProc(sub_mesg_class* i_Msg) { JKRHeap* oldHeap = mDoExt_setCurrentHeap(i_Msg->field_0x100); dMesg_update(); dMesg_render(); for (int i = 0; i < 4; i++) { i_Msg->screen->setString(i_Msg->text[i], i); } if (dMesg_gpSequenceProcessor->field_0x15f == 1) { i_Msg->screen->arwAnimeInit(); i_Msg->field_0x164 = 5; } else if (dMesg_gpSequenceProcessor->field_0x15f == 2) { i_Msg->field_0x164 = 7; } else if (dMesg_gbUpdate == 0) { i_Msg->screen->dotAnimeInit(); i_Msg->field_0x164 = 10; } mDoExt_setCurrentHeap(oldHeap); } /* 801E69D4-801E6B10 .text dMesg_outwaitProc__FP14sub_mesg_class */ void dMesg_outwaitProc(sub_mesg_class* i_Msg) { /* Nonmatching */ JKRHeap* oldHeap = mDoExt_setCurrentHeap(i_Msg->field_0x100); if (CPad_CHECK_TRIG_A(0) || CPad_CHECK_TRIG_B(0)) { for (int i = 0; i < 4; i++) { i_Msg->screen->initString(i_Msg->text[i], i); i_Msg->screen->setString(i_Msg->text[i], i); } i_Msg->screen->arwAnimeInit(); dMesg_gpSequenceProcessor->initialize(dMesg_gpControl->field_0x58); if (CPad_CHECK_TRIG_B(0)) { dMesg_gpSequenceProcessor->field_0x161 = 1; } for (int i = 0; i < 18; i++) { i_Msg->outfont[i]->_initialize(); } i_Msg->field_0x164 = 6; mDoAud_seStart(JA_SE_TALK_NEXT); } else { i_Msg->screen->arwAnime(); } mDoExt_setCurrentHeap(oldHeap); } /* 801E6B10-801E6BB8 .text dMesg_stopProc__FP14sub_mesg_class */ void dMesg_stopProc(sub_mesg_class* i_Msg) { /* Nonmatching */ JKRHeap* oldHeap = mDoExt_setCurrentHeap(i_Msg->field_0x100); int var1 = dMesg_gpSequenceProcessor->field_0x90; if (var1 > 0) { dMesg_gpSequenceProcessor->field_0x90 = var1 - 1; } else { var1 = 0; } if (var1 == 0) { i_Msg->field_0x164 = 18; mDoAud_talkOut(); mDoAud_seStart(JA_SE_TALK_WIN_CLOSE); } mDoExt_setCurrentHeap(oldHeap); } /* 801E6BB8-801E6C6C .text dMesg_closewaitProc__FP14sub_mesg_class */ void dMesg_closewaitProc(sub_mesg_class* i_Msg) { /* Nonmatching */ JKRHeap* oldHeap = mDoExt_setCurrentHeap(i_Msg->field_0x100); if (CPad_CHECK_TRIG_A(0) || CPad_CHECK_TRIG_B(0)) { i_Msg->screen->dotAnimeInit(); i_Msg->field_0x164 = 18; mDoAud_talkOut(); mDoAud_seStart(JA_SE_TALK_WIN_CLOSE); } else { i_Msg->screen->dotAnime(); } mDoExt_setCurrentHeap(oldHeap); } /* 801E6C6C-801E6E00 .text dMesg_closeProc__FP14sub_mesg_class */ void dMesg_closeProc(sub_mesg_class* i_Msg) { JKRHeap* oldHeap = mDoExt_setCurrentHeap(i_Msg->field_0x100); if (i_Msg->screen->closeAnime()) { delete i_Msg->screen->scrn; dComIfGp_getDmsgArchive()->removeResourceAll(); delete (void*)i_Msg->screen; i_Msg->screen = NULL; dMesg_reset(); for (int i = 0; i < 18; i++) { if (i_Msg->outfont[i]) { i_Msg->outfont[i]->_delete(); delete (void*)i_Msg->outfont[i]; i_Msg->outfont[i] = NULL; } } for (int i = 0; i < 4; i++) { i_Msg->field_0x100->free(i_Msg->text[i]); i_Msg->text[i] = NULL; } mDoExt_setCurrentHeap(oldHeap); i_Msg->field_0x100->freeAll(); i_Msg->field_0x100->destroy(); i_Msg->field_0x100 = NULL; i_Msg->field_0x164 = 0; dComIfGp_demo_get()->getControl()->referObject_control().suspend(-1); } else { for (int i = 0; i < 18; i++) { if (i_Msg->outfont[i]) { i_Msg->outfont[i]->_setAlpha(0); } } mDoExt_setCurrentHeap(oldHeap); } } /* 801E6E00-801E6E44 .text dMsg_Draw__FP14sub_mesg_class */ static BOOL dMsg_Draw(sub_mesg_class* i_Msg) { if (i_Msg->screen) { dComIfGd_set2DOpa(i_Msg->screen); } return true; } /* 801E6E44-801E6F34 .text dMsg_Execute__FP14sub_mesg_class */ static BOOL dMsg_Execute(sub_mesg_class* i_Msg) { JKRHeap* oldHeap = mDoExt_setCurrentHeap(i_Msg->heap); if (i_Msg->field_0x164 == 0) { dMesg_waitProc(i_Msg); } else if (i_Msg->field_0x164 == 2) { dMesg_openProc(i_Msg); } else if (i_Msg->field_0x164 == 6) { dMesg_outnowProc(i_Msg); } else if (i_Msg->field_0x164 == 5) { dMesg_outwaitProc(i_Msg); } else if (i_Msg->field_0x164 == 7) { dMesg_stopProc(i_Msg); } else if (i_Msg->field_0x164 == 10) { dMesg_closewaitProc(i_Msg); } else if (i_Msg->field_0x164 == 18) { dMesg_closeProc(i_Msg); } if (i_Msg->screen) { i_Msg->screen->move(); } mDoExt_setCurrentHeap(oldHeap); return true; } /* 801E6F38-801E6F40 .text dMsg_IsDelete__FP14sub_mesg_class */ static BOOL dMsg_IsDelete(sub_mesg_class*) { return 1; } /* 801E6F40-801E7130 .text dMsg_Delete__FP14sub_mesg_class */ static BOOL dMsg_Delete(sub_mesg_class* i_Msg) { /* Nonmatching */ JKRHeap* heap = mDoExt_setCurrentHeap(i_Msg->heap); mDoExt_removeMesgFont(); mDoExt_removeRubyFont(); if (i_Msg->field_0x100) { mDoExt_setCurrentHeap(i_Msg->field_0x100); if (i_Msg->screen) { delete i_Msg->screen->scrn; dComIfGp_getDmsgArchive()->removeResourceAll(); delete (void*)i_Msg->screen; i_Msg->screen = NULL; } for (int i = 0; i < 18; i++) { if (i_Msg->outfont[i]) { i_Msg->outfont[i]->_delete(); delete (void*)i_Msg->outfont[i]; i_Msg->outfont[i] = NULL; } } for (int i = 0; i < 4; i++) { i_Msg->field_0x100->free(i_Msg->text[i]); i_Msg->text[i] = NULL; } if (i_Msg->field_0x100) { i_Msg->field_0x100->freeAll(); i_Msg->field_0x100->destroy(); i_Msg->field_0x100 = NULL; } } // TODO: JGadget::TLinkList_factory::Clear_destroy() dMesg_finalize(); if (header) { JKRFileLoader::removeResource(header, NULL); } if (header2) { JKRFileLoader::removeResource(header2, NULL); } if (oParse) { delete oParse; } mDoExt_setCurrentHeap(heap); fopMsgM_destroyExpHeap(i_Msg->heap); return 1; } /* 801E7130-801E7290 .text dMsg_Create__FP9msg_class */ static cPhs_State dMsg_Create(msg_class* i_this) { sub_mesg_class* i_Msg = (sub_mesg_class*)i_this; i_Msg->heap = fopMsgM_createExpHeap(0xb6b5); JUT_ASSERT(3864, i_Msg->heap != NULL); JKRHeap* oldHeap = mDoExt_setCurrentHeap(i_Msg->heap); dMesg_gpFont = mDoExt_getMesgFont(); JUT_ASSERT(3869, dMesg_gpFont != NULL); dMesg_gpRFont = mDoExt_getRubyFont(); JUT_ASSERT(3872, dMesg_gpRFont != NULL); dMesg_initialize(i_Msg); dMesg_parse(); for (int i = 0; i < 4; i++) { i_Msg->text[i] = NULL; } i_Msg->field_0x164 = 0; mDoExt_setCurrentHeap(oldHeap); return cPhs_COMPLEATE_e; } /* 801E7290-801E72D8 .text __dt__15dMesg_outFont_cFv */ dMesg_outFont_c::~dMesg_outFont_c() { } static msg_method_class l_dMesg_Method = { (process_method_func)dMsg_Create, (process_method_func)dMsg_Delete, (process_method_func)dMsg_Execute, (process_method_func)dMsg_IsDelete, (process_method_func)dMsg_Draw }; msg_process_profile_definition g_profile_MESG = { /* LayerID */ fpcLy_CURRENT_e, /* ListID */ 12, /* ListPrio */ fpcPi_CURRENT_e, /* ProcName */ PROC_MESG, /* Proc SubMtd */ &g_fpcLf_Method.base, /* Size */ sizeof(sub_mesg_class), /* SizeOther */ 0, /* Parameters */ 0, /* Leaf SubMtd */ &g_fopMsg_Method, /* Priority */ 0x01D8, /* Msg SubMtd */ &l_dMesg_Method, };