diff options
Diffstat (limited to 'src/d/msg/d_msg_scrn_jimaku.cpp')
| -rw-r--r-- | src/d/msg/d_msg_scrn_jimaku.cpp | 405 |
1 files changed, 156 insertions, 249 deletions
diff --git a/src/d/msg/d_msg_scrn_jimaku.cpp b/src/d/msg/d_msg_scrn_jimaku.cpp index 7528519e19..25fd348428 100644 --- a/src/d/msg/d_msg_scrn_jimaku.cpp +++ b/src/d/msg/d_msg_scrn_jimaku.cpp @@ -1,272 +1,179 @@ -// -// Generated By: dol2asm -// Translation Unit: msg/scrn/d_msg_scrn_jimaku -// +/** + * d_msg_scrn_jimaku.cpp + * + */ #include "d/msg/d_msg_scrn_jimaku.h" -#include "dol2asm.h" - -// -// Types: -// - -struct dMsgScrnLight_c { - /* 80245934 */ dMsgScrnLight_c(u8, u8); -}; - -struct JKRExpHeap {}; - -struct dMsgScrnJimaku_c { - /* 80244558 */ dMsgScrnJimaku_c(u8, JKRExpHeap*); - /* 80244A74 */ ~dMsgScrnJimaku_c(); - /* 80244C2C */ void exec(); - /* 80244D34 */ void drawSelf(); - /* 80244D8C */ void fukiAlpha(f32); - /* 80244E2C */ void fukiScale(f32); - /* 80244E30 */ void fukiTrans(f32, f32); - /* 80244E34 */ void fontAlpha(f32); -}; - -struct dMsgScrnBase_c { - /* 80238C40 */ void setSelectRubyString(char*, char*, char*); - /* 80238C44 */ void setSelectString(char*, char*, char*); - /* 80238C48 */ bool selectAnimeMove(u8, u8, bool); - /* 80238C50 */ void selectAnimeInit(u8, u8, f32, u8); - /* 80238C54 */ void arwAnimeMove(); - /* 80238C58 */ void arwAnimeInit(); - /* 80238C5C */ void fukiPosCalc(u8); - /* 80238C60 */ bool isSelect(); - /* 80238C68 */ bool selectAnimeEnd(); - /* 80238C70 */ void dotAnimeMove(); - /* 80238C74 */ void dotAnimeInit(); - /* 8023C0DC */ dMsgScrnBase_c(); - /* 8023C124 */ ~dMsgScrnBase_c(); - /* 8023C16C */ void init(); - /* 8023C234 */ void multiDraw(); - /* 8023C274 */ void draw(); - /* 8023C32C */ void drawOutFont(f32, f32, f32); - /* 8023C574 */ void isTalkNow(); -}; - -struct JUtility { - struct TColor {}; -}; - -struct JKRHeap { - /* 802CE4D4 */ void alloc(u32, int); - /* 802CE548 */ void free(void*); -}; - -struct JKRArchive {}; - -struct J2DTextBox { - /* 8030074C */ void setString(s16, char const*, ...); -}; - -struct J2DScreen { - /* 802F8498 */ J2DScreen(); - /* 802F8648 */ void setPriority(char const*, u32, JKRArchive*); -}; - -struct CPaneMgrAlpha { - /* 802557D0 */ void setAlphaRate(f32); -}; - -struct CPaneMgr { - /* 80253984 */ CPaneMgr(J2DScreen*, u64, u8, JKRExpHeap*); - /* 802542E8 */ void getGlobalPosX(); - /* 80254364 */ void getGlobalPosY(); - /* 80254458 */ void setBlackWhite(JUtility::TColor, JUtility::TColor); - /* 802545B0 */ void paneTrans(f32, f32); -}; - -// -// Forward References: -// - -extern "C" void __ct__16dMsgScrnJimaku_cFUcP10JKRExpHeap(); -extern "C" void __dt__16dMsgScrnJimaku_cFv(); -extern "C" void exec__16dMsgScrnJimaku_cFv(); -extern "C" void drawSelf__16dMsgScrnJimaku_cFv(); -extern "C" void fukiAlpha__16dMsgScrnJimaku_cFf(); -extern "C" void fukiScale__16dMsgScrnJimaku_cFf(); -extern "C" void fukiTrans__16dMsgScrnJimaku_cFff(); -extern "C" void fontAlpha__16dMsgScrnJimaku_cFf(); -extern "C" extern char const* const msg_scrn_d_msg_scrn_jimaku__stringBase0; - -// -// External References: -// - -SECTION_INIT void memset(); -extern "C" void mDoExt_getMesgFont__Fv(); -extern "C" void dComIfGp_getSubHeap2D__Fi(); -extern "C" void setSelectRubyString__14dMsgScrnBase_cFPcPcPc(); -extern "C" void setSelectString__14dMsgScrnBase_cFPcPcPc(); -extern "C" bool selectAnimeMove__14dMsgScrnBase_cFUcUcb(); -extern "C" void selectAnimeInit__14dMsgScrnBase_cFUcUcfUc(); -extern "C" void arwAnimeMove__14dMsgScrnBase_cFv(); -extern "C" void arwAnimeInit__14dMsgScrnBase_cFv(); -extern "C" void fukiPosCalc__14dMsgScrnBase_cFUc(); -extern "C" bool isSelect__14dMsgScrnBase_cFv(); -extern "C" bool selectAnimeEnd__14dMsgScrnBase_cFv(); -extern "C" void dotAnimeMove__14dMsgScrnBase_cFv(); -extern "C" void dotAnimeInit__14dMsgScrnBase_cFv(); -extern "C" void __ct__14dMsgScrnBase_cFv(); -extern "C" void __dt__14dMsgScrnBase_cFv(); -extern "C" void init__14dMsgScrnBase_cFv(); -extern "C" void multiDraw__14dMsgScrnBase_cFv(); -extern "C" void draw__14dMsgScrnBase_cFv(); -extern "C" void drawOutFont__14dMsgScrnBase_cFfff(); -extern "C" void isTalkNow__14dMsgScrnBase_cFv(); -extern "C" void __ct__15dMsgScrnLight_cFUcUc(); -extern "C" void __ct__8CPaneMgrFP9J2DScreenUxUcP10JKRExpHeap(); -extern "C" void getGlobalPosX__8CPaneMgrFv(); -extern "C" void getGlobalPosY__8CPaneMgrFv(); -extern "C" void setBlackWhite__8CPaneMgrFQ28JUtility6TColorQ28JUtility6TColor(); -extern "C" void paneTrans__8CPaneMgrFff(); -extern "C" void dPaneClass_showNullPane__FP9J2DScreen(); -extern "C" void setAlphaRate__13CPaneMgrAlphaFf(); -extern "C" void alloc__7JKRHeapFUli(); -extern "C" void free__7JKRHeapFPv(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void __ct__9J2DScreenFv(); -extern "C" void setPriority__9J2DScreenFPCcUlP10JKRArchive(); -extern "C" void setString__10J2DTextBoxFsPCce(); -extern "C" void _savegpr_23(); -extern "C" void _savegpr_24(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _restgpr_23(); -extern "C" void _restgpr_24(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_28(); -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" extern u8 g_MsgObject_HIO_c[1040]; - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 80399A80-80399A80 0260E0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80399A80 = "zelda_jimaku_message_text.blo"; -SECTION_DEAD static char const* const stringBase_80399A9E = ""; -/* @stringBase0 padding */ -SECTION_DEAD static char const* const pad_80399A9F = ""; -#pragma pop - -/* 803C11E8-803C1240 01E308 0058+00 2/2 0/0 0/0 .data __vt__16dMsgScrnJimaku_c */ -SECTION_DATA extern void* __vt__16dMsgScrnJimaku_c[22] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)draw__14dMsgScrnBase_cFv, - (void*)__dt__16dMsgScrnJimaku_cFv, - (void*)exec__16dMsgScrnJimaku_cFv, - (void*)multiDraw__14dMsgScrnBase_cFv, - (void*)drawSelf__16dMsgScrnJimaku_cFv, - (void*)setSelectString__14dMsgScrnBase_cFPcPcPc, - (void*)setSelectRubyString__14dMsgScrnBase_cFPcPcPc, - (void*)arwAnimeInit__14dMsgScrnBase_cFv, - (void*)arwAnimeMove__14dMsgScrnBase_cFv, - (void*)dotAnimeInit__14dMsgScrnBase_cFv, - (void*)dotAnimeMove__14dMsgScrnBase_cFv, - (void*)isSelect__14dMsgScrnBase_cFv, - (void*)selectAnimeInit__14dMsgScrnBase_cFUcUcfUc, - (void*)selectAnimeMove__14dMsgScrnBase_cFUcUcb, - (void*)selectAnimeEnd__14dMsgScrnBase_cFv, - (void*)fukiScale__16dMsgScrnJimaku_cFf, - (void*)fukiTrans__16dMsgScrnJimaku_cFff, - (void*)fukiAlpha__16dMsgScrnJimaku_cFf, - (void*)fontAlpha__16dMsgScrnJimaku_cFf, - (void*)fukiPosCalc__14dMsgScrnBase_cFUc, -}; - -/* 80454CB0-80454CB4 0032B0 0004+00 2/2 0/0 0/0 .sdata2 @3941 */ -SECTION_SDATA2 static u8 lit_3941[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; - -/* 80454CB4-80454CB8 0032B4 0004+00 1/1 0/0 0/0 .sdata2 @3942 */ -SECTION_SDATA2 static f32 lit_3942 = 6.0f / 5.0f; +#include "JSystem/J2DGraph/J2DGrafContext.h" +#include "JSystem/J2DGraph/J2DScreen.h" +#include "JSystem/J2DGraph/J2DTextBox.h" +#include "d/com/d_com_inf_game.h" +#include "d/msg/d_msg_object.h" +#include "d/msg/d_msg_scrn_light.h" +#include "d/pane/d_pane_class.h" + +extern "C" extern dMsgObject_HIO_c g_MsgObject_HIO_c; /* 80244558-80244A74 23EE98 051C+00 0/0 1/1 0/0 .text __ct__16dMsgScrnJimaku_cFUcP10JKRExpHeap */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dMsgScrnJimaku_c::dMsgScrnJimaku_c(u8 param_0, JKRExpHeap* param_1) { - nofralloc -#include "asm/msg/scrn/d_msg_scrn_jimaku/__ct__16dMsgScrnJimaku_cFUcP10JKRExpHeap.s" +dMsgScrnJimaku_c::dMsgScrnJimaku_c(u8 param_0, JKRExpHeap* i_heap) { + if (i_heap != NULL) { + heap = i_heap; + } else { + heap = dComIfGp_getSubHeap2D(7); + } + + init(); + + mpScreen = new J2DScreen(); + JUT_ASSERT(mpScreen != 0); + + bool fg = mpScreen->setPriority("zelda_jimaku_message_text.blo", 0x20000, + dComIfGp_getMsgCommonArchive()); + JUT_ASSERT(fg != false); + dPaneClass_showNullPane(mpScreen); + + mpLight_c = new dMsgScrnLight_c(0, param_0); + JUT_ASSERT(mpLight_c != 0); + + void* mpBuf = heap->alloc(0x106A, 0x20); + JUT_ASSERT(mpBuf != 0); + memset(mpBuf, 0, 0x106A); + mCharInfoPtr = (CharInfo_c*)mpBuf; + + mpPmP_c = new CPaneMgr(mpScreen, 'mg_null', 3, NULL); + JUT_ASSERT(mpPmP_c != 0); + mpPmP_c->scale(g_MsgObject_HIO_c.mSubtitleScaleX, g_MsgObject_HIO_c.mSubtitleScaleY); + field_0xcc = g_MsgObject_HIO_c.mBoxPos[0][5]; + mpPmP_c->paneTrans(0.0f, field_0xcc); + + mpTm_c[0] = new CPaneMgr(mpScreen, 'mg_e4lin', 0, NULL); + JUT_ASSERT(mpTm_c[0] != 0); + + mpTm_c[1] = new CPaneMgr(mpScreen, 't4_s', 0, NULL); + JUT_ASSERT(mpTm_c[1] != 0); + + mpScreen->search('n_3line')->hide(); + mpScreen->search('n_3fline')->hide(); + mpScreen->search('n_e4line')->show(); + + for (int i = 0; i < 2; i++) { + ((J2DTextBox*)mpTm_c[i]->getPanePtr())->setFont(mDoExt_getMesgFont()); + ((J2DTextBox*)mpTm_c[i]->getPanePtr())->setString(0x200, ""); + mpTm_c[i]->setBlackWhite(g_MsgObject_HIO_c.mBoxStartBlack[4 + (i * 10)], + g_MsgObject_HIO_c.mBoxStartWhite[4 + (i * 10)]); + + if (mpTmr_c[i] != NULL) { + ((J2DTextBox*)mpTmr_c[i]->getPanePtr())->setFont(mDoExt_getMesgFont()); + ((J2DTextBox*)mpTmr_c[i]->getPanePtr())->setString(0x200, ""); + mpTmr_c[i]->setBlackWhite(g_MsgObject_HIO_c.mBoxStartBlack[4 + (i * 10)], + g_MsgObject_HIO_c.mBoxStartWhite[4 + (i * 10)]); + } + } + + ((J2DTextBox*)mpTm_c[0]->getPanePtr())->getFontSize(mFontSize); + mTBoxWidth = mpTm_c[0]->getSizeX(); + mTBoxHeight = mpTm_c[0]->getSizeY(); + mLineSpace = ((J2DTextBox*)mpTm_c[0]->getPanePtr())->getLineSpace(); + mCharSpace = ((J2DTextBox*)mpTm_c[0]->getPanePtr())->getCharSpace(); + + for (int i = 0; i < 2; i++) { + ((J2DTextBox*)mpTm_c[i]->getPanePtr())->setLineSpace(mLineSpace); + mpTm_c[i]->resize(mpTm_c[i]->getSizeX() * 1.2f, mpTm_c[i]->getSizeY()); + } + + mTextBoxPosX = mpTm_c[0]->getGlobalPosX(); + mTextBoxPosY = mpTm_c[0]->getGlobalPosY(); + + for (int i = 0; i < 2; i++) { + if (mpTmr_c[i] != NULL) { + ((J2DTextBox*)mpTmr_c[i]->getPanePtr())->setLineSpace(mLineSpace); + + if (i == 0) { + J2DTextBox::TFontSize font_size; + ((J2DTextBox*)mpTmr_c[0]->getPanePtr())->getFontSize(font_size); + mRubySize = font_size.mSizeX; + mRubyCharSpace = ((J2DTextBox*)mpTmr_c[0]->getPanePtr())->getCharSpace(); + } + + mpTmr_c[i]->resize(mpTmr_c[i]->getSizeX() * 1.2f, mpTmr_c[i]->getSizeY()); + } + } } -#pragma pop /* 80244A74-80244C2C 23F3B4 01B8+00 1/0 0/0 0/0 .text __dt__16dMsgScrnJimaku_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dMsgScrnJimaku_c::~dMsgScrnJimaku_c() { - nofralloc -#include "asm/msg/scrn/d_msg_scrn_jimaku/__dt__16dMsgScrnJimaku_cFv.s" +dMsgScrnJimaku_c::~dMsgScrnJimaku_c() { + delete mpScreen; + mpScreen = NULL; + + delete mpLight_c; + mpLight_c = NULL; + + if (mCharInfoPtr != NULL) { + heap->free(mCharInfoPtr); + mCharInfoPtr = NULL; + } + + delete mpPmP_c; + mpPmP_c = NULL; + + for (int i = 0; i < 2; i++) { + delete mpTm_c[i]; + mpTm_c[i] = NULL; + + if (mpTmr_c[i] != NULL) { + delete mpTmr_c[i]; + mpTmr_c[i] = NULL; + } + } + + dComIfGp_getMsgArchive(0)->removeResourceAll(); + dComIfGp_getMsgArchive(1)->removeResourceAll(); + dComIfGp_getMsgCommonArchive()->removeResourceAll(); } -#pragma pop - -/* ############################################################################################## */ -/* 80454CB8-80454CC0 0032B8 0004+04 2/2 0/0 0/0 .sdata2 @4021 */ -SECTION_SDATA2 static f32 lit_4021[1 + 1 /* padding */] = { - 1.0f, - /* padding */ - 0.0f, -}; /* 80244C2C-80244D34 23F56C 0108+00 1/0 0/0 0/0 .text exec__16dMsgScrnJimaku_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMsgScrnJimaku_c::exec() { - nofralloc -#include "asm/msg/scrn/d_msg_scrn_jimaku/exec__16dMsgScrnJimaku_cFv.s" +void dMsgScrnJimaku_c::exec() { + if (isTalkNow()) { + fukiAlpha(1.0f); + } + + mpPmP_c->scale(g_MsgObject_HIO_c.mSubtitleScaleX, g_MsgObject_HIO_c.mSubtitleScaleY); + + for (int i = 0; i < 2; i++) { + mpTm_c[i]->setBlackWhite(g_MsgObject_HIO_c.mBoxStartBlack[4 + (i * 10)], + g_MsgObject_HIO_c.mBoxStartWhite[4 + (i * 10)]); + + if (mpTmr_c[i] != NULL) { + mpTmr_c[i]->setBlackWhite(g_MsgObject_HIO_c.mBoxStartBlack[4 + (i * 10)], + g_MsgObject_HIO_c.mBoxStartWhite[4 + (i * 10)]); + } + } } -#pragma pop /* 80244D34-80244D8C 23F674 0058+00 1/0 0/0 0/0 .text drawSelf__16dMsgScrnJimaku_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMsgScrnJimaku_c::drawSelf() { - nofralloc -#include "asm/msg/scrn/d_msg_scrn_jimaku/drawSelf__16dMsgScrnJimaku_cFv.s" +void dMsgScrnJimaku_c::drawSelf() { + dComIfGp_getCurrentGrafPort()->setup2D(); + drawOutFont(0.0f, 0.0f, 1.0f); } -#pragma pop /* 80244D8C-80244E2C 23F6CC 00A0+00 1/0 0/0 0/0 .text fukiAlpha__16dMsgScrnJimaku_cFf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMsgScrnJimaku_c::fukiAlpha(f32 param_0) { - nofralloc -#include "asm/msg/scrn/d_msg_scrn_jimaku/fukiAlpha__16dMsgScrnJimaku_cFf.s" +void dMsgScrnJimaku_c::fukiAlpha(f32 i_alpha) { + mpPmP_c->setAlphaRate(i_alpha * g_MsgObject_HIO_c.mSubtitleAlphaP); + + for (int i = 0; i < 2; i++) { + mpTm_c[i]->setAlphaRate(i_alpha * mCharAlphaRate); + + if (mpTmr_c[i] != NULL) { + mpTmr_c[i]->setAlphaRate(i_alpha * mCharAlphaRate); + } + } } -#pragma pop /* 80244E2C-80244E30 23F76C 0004+00 1/0 0/0 0/0 .text fukiScale__16dMsgScrnJimaku_cFf */ -void dMsgScrnJimaku_c::fukiScale(f32 param_0) { - /* empty function */ -} +void dMsgScrnJimaku_c::fukiScale(f32 i_scale) {} /* 80244E30-80244E34 23F770 0004+00 1/0 0/0 0/0 .text fukiTrans__16dMsgScrnJimaku_cFff */ -void dMsgScrnJimaku_c::fukiTrans(f32 param_0, f32 param_1) { - /* empty function */ -} +void dMsgScrnJimaku_c::fukiTrans(f32 i_posX, f32 i_posY) {} /* 80244E34-80244E38 23F774 0004+00 1/0 0/0 0/0 .text fontAlpha__16dMsgScrnJimaku_cFf */ -void dMsgScrnJimaku_c::fontAlpha(f32 param_0) { - /* empty function */ -} - -/* 80399A80-80399A80 0260E0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +void dMsgScrnJimaku_c::fontAlpha(f32 i_alpha) {} |
