diff --git a/include/d/d_menu_option.h b/include/d/d_menu_option.h index c3529d8bf..5c8634a61 100644 --- a/include/d/d_menu_option.h +++ b/include/d/d_menu_option.h @@ -60,20 +60,17 @@ private: /* 0x7B0 */ fopMsgM_pane_class m7B0; /* 0x7E8 */ fopMsgM_pane_class m7E8; /* 0x820 */ fopMsgM_pane_class m820; - /* 0x858 */ fopMsgM_pane_class m858; - /* 0x890 */ fopMsgM_pane_class m890; + /* 0x858 */ fopMsgM_pane_class m858[2]; /* 0x8C8 */ fopMsgM_pane_class m8C8[4]; /* 0x9A8 */ fopMsgM_pane_class m9A8[2]; /* 0xA18 */ fopMsgM_pane_class mA18[3]; /* 0xAC0 */ fopMsgM_pane_class mAC0[2]; - /* 0xB30 */ fopMsgM_pane_class mB30; - /* 0xB68 */ fopMsgM_pane_class mB68; + /* 0xB30 */ fopMsgM_pane_class mB30[2]; /* 0xBA0 */ fopMsgM_pane_class mBA0; /* 0xBD8 */ fopMsgM_pane_class mBD8; /* 0xC10 */ fopMsgM_pane_class mC10; /* 0xC48 */ fopMsgM_pane_class mC48; - /* 0xC80 */ fopMsgM_pane_class mC80; - /* 0xCB8 */ fopMsgM_pane_class mCB8; + /* 0xC80 */ fopMsgM_pane_class mC80[2]; /* 0xCF0 */ fopMsgM_pane_class mCF0; /* 0xD28 */ JKRArchive* mpArchive; /* 0xD2C */ JUTFont* mD2C; @@ -89,7 +86,10 @@ private: /* 0xE39 */ u8 mE39; /* 0xE3A */ u8 mE3A; /* 0xE3B */ u8 mE3B; - /* 0xE3C */ u8 mE3C[0xE40 - 0xE3C]; + /* 0xE3C */ u8 mE3C; + /* 0xE3D */ u8 mE3D; + /* 0xE3E */ u8 mE3E; + /* 0xE3F */ u8 mE3F; /* 0xE40 */ u8 mE40; /* 0xE41 */ u8 mE41[0xE42 - 0xE41]; }; // Size: 0xE42 diff --git a/src/d/d_menu_option.cpp b/src/d/d_menu_option.cpp index 94e6ad176..9d2065bd5 100644 --- a/src/d/d_menu_option.cpp +++ b/src/d/d_menu_option.cpp @@ -8,6 +8,7 @@ #include "JSystem/JUtility/JUTAssert.h" #include "d/d_lib.h" #include "f_op/f_op_msg_mng.h" +#include "m_Do/m_Do_audio.h" #include "global.h" dMo_HIO_c g_moHIO; @@ -45,8 +46,8 @@ void dMenu_Option_c::screenSet() { fopMsgM_setPaneData(&m7B0, scrn->search('nt00')); fopMsgM_setPaneData(&m7E8, scrn->search('nk00')); fopMsgM_setPaneData(&m820, scrn->search('no11')); - fopMsgM_setPaneData(&m858, scrn->search('yaz2')); - fopMsgM_setPaneData(&m890, scrn->search('yaz1')); + fopMsgM_setPaneData(&m858[0], scrn->search('yaz2')); + fopMsgM_setPaneData(&m858[1], scrn->search('yaz1')); fopMsgM_setPaneData(&m8C8[0], scrn->search('ttyu')); fopMsgM_setPaneData(&m9A8[0], scrn->search('thld')); fopMsgM_setPaneData(&m9A8[1], scrn->search('tsic')); @@ -57,16 +58,16 @@ void dMenu_Option_c::screenSet() { fopMsgM_setPaneData(&m8C8[2], scrn->search('tvib')); fopMsgM_setPaneData(&mAC0[1], scrn->search('tari')); fopMsgM_setPaneData(&mAC0[0], scrn->search('tnas')); - fopMsgM_setPaneData(&mB30, scrn->search('cr32')); - fopMsgM_setPaneData(&mB68, scrn->search('cr31')); + fopMsgM_setPaneData(&mB30[0], scrn->search('cr32')); + fopMsgM_setPaneData(&mB30[1], scrn->search('cr31')); fopMsgM_setPaneData(&mBA0, scrn->search('cc22')); fopMsgM_setPaneData(&mBD8, scrn->search('cc21')); fopMsgM_setPaneData(&mC10, scrn->search('cc12')); fopMsgM_setPaneData(&mC48, scrn->search('cr11')); - fopMsgM_setPaneData(&mC80, scrn->search('bs09')); - fopMsgM_setPaneData(&mCB8, scrn->search('bs00')); + fopMsgM_setPaneData(&mC80[0], scrn->search('bs09')); + fopMsgM_setPaneData(&mC80[1], scrn->search('bs00')); fopMsgM_setPaneData(&mCF0, scrn->search('blak')); - + fopMsgM_messageGet(mD48, 0x19D); fopMsgM_messageGet(mD5C[0], 0x19B); fopMsgM_messageGet(mD5C[1], 0x1A9); @@ -120,31 +121,157 @@ void dMenu_Option_c::screenSet() { /* 801D3388-801D3518 .text mainInit__14dMenu_Option_cFv */ void dMenu_Option_c::mainInit() { /* Nonmatching */ + fopMsgM_pane_class* mpPane; + + fopMsgM_setNowAlphaZero(&mCF0); + + for (int i = 0; i < 2; i++) { + mpPane = &m858[i]; + fopMsgM_paneTrans(mpPane, 0.0f, 0.0f); + + m858[i].pane->rotate(m858[i].mSize.x / 2.0f, m858[i].mSize.y / 2.0f, ROTATE_Z, 90.0f); + + fopMsgM_setNowAlphaZero((fopMsgM_pane_class*)(&mC80[i].pane)); + fopMsgM_setNowAlphaZero(mpPane); + fopMsgM_setNowAlphaZero((fopMsgM_pane_class*)(&m9A8[i].pane)); + fopMsgM_setNowAlphaZero((fopMsgM_pane_class*)(&mAC0[i].pane)); + } + + for (int i = 0; i < 3; i++) { + fopMsgM_setNowAlphaZero((fopMsgM_pane_class*)(&mA18[i].pane)); + } + + for (int i = 0; i < 4; i++) { + if (i != 1) { + fopMsgM_setNowAlphaZero((fopMsgM_pane_class*)(&m8C8[i].pane)); + } + } + + for (int i = 0; i < 6; i++) { + mpPane = (fopMsgM_pane_class*)(&mB30[i].pane); + fopMsgM_paneTrans(mpPane, 0.0f, 0.0f); + fopMsgM_setNowAlphaZero(mpPane); + } + + mB30[0].mUserArea = 0; + mB30[1].mUserArea = 0; + mBA0.mUserArea = 0; + m858[0].mUserArea = 0; + m858[1].mUserArea = 0; + + cursorMove(); } /* 801D3518-801D35DC .text noteInit__14dMenu_Option_cFv */ -void dMenu_Option_c::noteInit() { - /* Nonmatching */ +void dMenu_Option_c::noteInit() { + fopMsgM_paneTrans(&m820, 0.0f, 35.0f); + + m820.pane->rotate(m820.mSize.x / 2.0f, m820.mSize.y / 2.0f, ROTATE_Z, m820.mUserArea + -12.0f); + + fopMsgM_setNowAlphaZero(&m740); + fopMsgM_setNowAlphaZero(&m778); + fopMsgM_setNowAlphaZero(&m7B0); + fopMsgM_setNowAlphaZero(&m7E8); + fopMsgM_setNowAlphaZero(&m820); } /* 801D35DC-801D37C8 .text titleInit__14dMenu_Option_cFv */ -void dMenu_Option_c::titleInit() { - /* Nonmatching */ +void dMenu_Option_c::titleInit() { + float rotate_angle = m008.mUserArea + 20; + if (rotate_angle > 180.0f) { + rotate_angle -= 360.0f; + } + + if (rotate_angle < -180.0f) { + rotate_angle += 360.0f; + } + + fopMsgM_paneTrans(&m008, 0.0f, -50.0f); + fopMsgM_paneTrans(&m040, 0.0f, -50.0f); + fopMsgM_paneTrans(&m078, 0.0f, -50.0f); + + m008.pane->rotate(m008.mSize.x / 2.0f, m008.mSize.y / 2.0f, ROTATE_Z, rotate_angle + m008.mUserArea); + m040.pane->rotate(m040.mSize.x / 2.0f, m040.mSize.y / 2.0f, ROTATE_Z, rotate_angle + m040.mUserArea); + m078.pane->rotate(m078.mSize.x / 2.0f, m078.mSize.y / 2.0f, ROTATE_Z, rotate_angle + m078.mUserArea); + + fopMsgM_setNowAlphaZero(&m008); + fopMsgM_setNowAlphaZero(&m040); + fopMsgM_setNowAlphaZero(&m078); } /* 801D37C8-801D38E0 .text mainMove__14dMenu_Option_cFv */ void dMenu_Option_c::mainMove() { - /* Nonmatching */ + float alpha = fopMsgM_valueIncrease(7, mC80[0].mUserArea, 0); + + fopMsgM_setNowAlpha(&mCF0, alpha); + + fopMsgM_setNowAlpha(&m9A8[mE3C], alpha); + fopMsgM_setNowAlpha(&mAC0[mE3F], alpha); + fopMsgM_setNowAlpha(&mA18[mE3E], alpha); + + for(int i = 0; i < 2; i++) { + fopMsgM_setNowAlpha((fopMsgM_pane_class*)(&mC80[i].pane), alpha); + fopMsgM_setNowAlpha((fopMsgM_pane_class*)(&m858[i].pane), alpha); + } + + for (int i = 0; i < 4; i++) { + if (i != 1) { + fopMsgM_setNowAlpha((fopMsgM_pane_class*)(&m8C8[i].pane), alpha); + } + } + + fopMsgM_setNowAlpha(&mB30[0], alpha); + fopMsgM_setNowAlpha(&mB30[1], alpha); } /* 801D38E0-801D39F4 .text noteMove__14dMenu_Option_cFv */ void dMenu_Option_c::noteMove() { - /* Nonmatching */ + float alpha; + + alpha = fopMsgM_valueIncrease(7, mC80[0].mUserArea + -7, 0); + fopMsgM_paneTrans(&m820, 0.0f, (1.0f - alpha) * 35.0f); + + m820.pane->rotate(m820.mSize.x / 2.0f, m820.mSize.y / 2.0f, ROTATE_Z, (1.0f - alpha) * -12.0f + m820.mUserArea); + + fopMsgM_setNowAlpha(&m740, alpha); + fopMsgM_setNowAlpha(&m778, alpha); + fopMsgM_setNowAlpha(&m7B0, alpha); + fopMsgM_setNowAlpha(&m7E8, alpha); } /* 801D39F4-801D3C6C .text titleMove__14dMenu_Option_cFv */ void dMenu_Option_c::titleMove() { - /* Nonmatching */ + /* Nonmatching - regalloc */ + float alpha = fopMsgM_valueIncrease(7, mC80[0].mUserArea + -7,0); + + float rotate_angle = m008.mUserArea + 20; + if (rotate_angle > 180.0f) { + rotate_angle -= 360.0f; + } + + if (rotate_angle < -180.0f) { + rotate_angle += 360.0f; + } + + rotate_angle *= 1.0f - alpha; + + if (mC80[0].mUserArea == 8) { + mDoAud_seStart(0x84e, NULL, 0, 0); + } + + float y = 1.0f - alpha; + + fopMsgM_paneTrans(&m008, 0.0f, y * -50.0f); + fopMsgM_paneTrans(&m040, 0.0f, y * -50.0f); + fopMsgM_paneTrans(&m078, 0.0f, y * -50.0f); + + m008.pane->rotate(m008.mSize.x / 2.0f, m008.mSize.y / 2.0f, ROTATE_Z, rotate_angle + m008.mUserArea); + m040.pane->rotate(m040.mSize.x / 2.0f, m040.mSize.y / 2.0f, ROTATE_Z, rotate_angle + m040.mUserArea); + m078.pane->rotate(m078.mSize.x / 2.0f, m078.mSize.y / 2.0f, ROTATE_Z, rotate_angle + m078.mUserArea); + + fopMsgM_setNowAlpha(&m008, alpha); + fopMsgM_setNowAlpha(&m040, alpha); + fopMsgM_setNowAlpha(&m078, alpha); } /* 801D3C6C-801D3D34 .text cursorMove__14dMenu_Option_cFv */