From 0d27cf3652fa213384b40f599f1c41f726e5e091 Mon Sep 17 00:00:00 2001 From: TakaRikka <38417346+TakaRikka@users.noreply.github.com> Date: Mon, 29 Jun 2026 21:07:14 -0700 Subject: [PATCH] d_name mostly done (#1082) --- include/JSystem/J2DGraph/J2DPicture.h | 2 +- include/d/d_com_inf_game.h | 2 + include/d/d_name.h | 202 ++- include/global.h | 6 + src/d/d_name.cpp | 2147 ++++++++++++++++++++++++- 5 files changed, 2263 insertions(+), 96 deletions(-) diff --git a/include/JSystem/J2DGraph/J2DPicture.h b/include/JSystem/J2DGraph/J2DPicture.h index 94c714911..dd55e7e88 100644 --- a/include/JSystem/J2DGraph/J2DPicture.h +++ b/include/JSystem/J2DGraph/J2DPicture.h @@ -114,7 +114,7 @@ public: void setCornerColor(JUtility::TColor c) { setCornerColor(c, c, c, c); } void setBinding(J2DBinding v) { mBinding = v; } - void setMirror(J2DMirror v) {} // untested { mFlag = (mFlag & ~0x03) | v; } + void setMirror(J2DMirror v) { mFlag = (mFlag & 0x04) | v; } J2DMirror getMirror() const { return J2DMirror(mFlag & 0x03); } void setTumble(bool v) {} // untested { mFlag = (mFlag & ~0x04) | (v << 2); } diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 44660cf35..1e8795224 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -593,6 +593,7 @@ public: void setFontArchive(JKRArchive * pArc) { mpFont0Archive = pArc; } void setMsgDtArchive(JKRArchive * pArc) { mpEnglishTextArchive = pArc; } JKRArchive* getMsgDtArchive() { return mpEnglishTextArchive; } + JKRArchive* getNameResArchive() { return mpNameResArchive; } #if VERSION > VERSION_JPN void setMsgDt2Archive(JKRArchive * pArc) { mpHyruleTextArchive = pArc; } JKRArchive* getMsgDt2Archive() { return mpHyruleTextArchive; } @@ -3880,6 +3881,7 @@ inline void dComIfGp_setWindResArchive(JKRArchive * pArc) { g_dComIfG_gameInfo.p inline void dComIfGp_setFontArchive(JKRArchive * pArc) { g_dComIfG_gameInfo.play.setFontArchive(pArc); } inline void dComIfGp_setMsgDtArchive(JKRArchive * pArc) { g_dComIfG_gameInfo.play.setMsgDtArchive(pArc); } inline JKRArchive* dComIfGp_getMsgDtArchive() { return g_dComIfG_gameInfo.play.getMsgDtArchive(); } +inline JKRArchive* dComIfGp_getNameResArchive() { return g_dComIfG_gameInfo.play.getNameResArchive(); } #if VERSION > VERSION_JPN inline void dComIfGp_setMsgDt2Archive(JKRArchive * pArc) { g_dComIfG_gameInfo.play.setMsgDt2Archive(pArc); } inline JKRArchive* dComIfGp_getMsgDt2Archive() { return g_dComIfG_gameInfo.play.getMsgDt2Archive(); } diff --git a/include/d/d_name.h b/include/d/d_name.h index 6b85e1eb1..853584043 100644 --- a/include/d/d_name.h +++ b/include/d/d_name.h @@ -3,35 +3,122 @@ #include "d/d_drawlist.h" #include "m_Do/m_Do_hostIO.h" +#include "f_op/f_op_msg_mng.h" -class dNm_HIO_c { +class dNm_HIO_c : public JORReflexible { public: dNm_HIO_c(); + virtual ~dNm_HIO_c() {} void genMessage(JORMContext* ctx) { /* TODO */ } + + /* 0x04 */ s8 id; + /* 0x05 */ u8 field_0x5; + /* 0x06 */ u8 field_0x6; + /* 0x07 */ u8 field_0x7; + /* 0x08 */ u8 field_0x8; + /* 0x09 */ u8 field_0x9; + /* 0x0A */ u8 field_0xa; + /* 0x0B */ u8 field_0xb; + /* 0x0C */ u8 field_0xc; + /* 0x0D */ u8 field_0xd; + /* 0x0E */ u8 field_0xe; + /* 0x0F */ u8 field_0xf; + /* 0x10 */ u8 field_0x10; + /* 0x11 */ u8 field_0x11; + /* 0x12 */ u8 field_0x12; + /* 0x13 */ u8 field_0x13; + /* 0x14 */ u8 field_0x14; + /* 0x15 */ u8 field_0x15; + /* 0x16 */ u8 field_0x16; + /* 0x17 */ u8 field_0x17; + /* 0x18 */ u8 field_0x18; + /* 0x19 */ u8 field_0x19; + /* 0x1A */ u8 field_0x1a; + /* 0x1B */ u8 field_0x1b; + /* 0x1C */ u8 field_0x1c; + /* 0x1D */ u8 field_0x1d; + /* 0x1E */ u8 field_0x1e; + /* 0x1F */ u8 field_0x1f; + /* 0x20 */ u8 field_0x20; + /* 0x21 */ u8 field_0x21; + /* 0x22 */ u8 field_0x22; + /* 0x23 */ u8 field_0x23; + /* 0x24 */ u8 field_0x24[0x26 - 0x24]; + /* 0x26 */ s16 field_0x26; + /* 0x28 */ s16 field_0x28; + /* 0x2A */ s16 field_0x2a[3]; + /* 0x30 */ s16 field_0x30[3]; + /* 0x36 */ s16 field_0x36[3]; + /* 0x3C */ s16 field_0x3c[3]; + /* 0x42 */ s16 field_0x42; + /* 0x44 */ s16 field_0x44; + /* 0x46 */ s16 field_0x46; + /* 0x48 */ s16 field_0x48; }; +class J2DScreen; + class dDlst_NameIN_c : public dDlst_base_c { public: virtual ~dDlst_NameIN_c() {} void draw(); + + /* 0x4 */ J2DScreen* NameInScr; + /* 0x8 */ JUTFont* font; +}; + +class STControl; + +class ChrInfo_c { +public: + /* 0x0 */ u8 column; + /* 0x1 */ u8 row; + /* 0x2 */ u8 set; + /* 0x3 */ u8 field_0x3; + /* 0x4 */ int character; }; class dName_c { public: + enum { + PROC_MOJI_SELECT, + PROC_MENU_SELECT, + PROC_MENU_BUTTON_ANIME, + PROC_END_WAIT + }; + + enum { + MOJI_HIRA, // hiragana characters + MOJI_KATA, // katakana characters + MOJI_EIGO, // english characters + }; + + enum { + MENU_HIRA, // (JPN )hiragana menu, (PAL) uppercase menu + MENU_KATA, // (JPN )katakana menu, (PAL) lowercase menu +#if VERSION < VERSION_PAL + MENU_EIGO, // english menu +#endif + MENU_BACKSPACE, + MENU_END, + + MENU_MAX = 5, + }; + dName_c() {} virtual ~dName_c() {} void draw() { _draw(); } - int isInputEnd() { return mIsInputEnd; } - char* getInputStrPtr() { return mInputStr; } - void setNextNameStr(char* i_name) { strcpy(mNextNameStr, i_name); } + int isInputEnd() { return isInputEnd_; } + char* getInputStrPtr() { return inputStr; } + void setNextNameStr(char* i_name) { strcpy(nextNameStr, i_name); } void _create(); void initial(); void _delete(); void _move(); - void nameCheck(); + int nameCheck(); void playNameSet(int); bool _open(); bool _close(); @@ -39,9 +126,9 @@ public: void nameCursorAnime(); void EndWait(); void MojiSelect(); - void mojiChange(u8); + int mojiChange(u8); void selectMojiSet(); - void getMoji(); + int getMoji(); void setMoji(int); void setNameText(); void nameCursorMove(); @@ -60,28 +147,93 @@ public: void _draw(); void screenSet(); void paneTransInit(); - void PaneTranceTitle(s16, u8, f32, f32, u8, int); - void PaneTranceName(s16, u8, f32, f32, u8, int); - void PaneTranceBase0(s16, u8, f32, f32, u8, int); - void PaneTranceBase(s16, u8, f32, f32, u8, int); - void PaneTranceHira(s16, u8, f32, f32, u8, int); - void PaneTranceKata(s16, u8, f32, f32, u8, int); - void PaneTranceEisu(s16, u8, f32, f32, u8, int); - void PaneTranceArrow(s16, u8, f32, f32, u8, int); - void PaneTranceEnd(s16, u8, f32, f32, u8, int); + int PaneTranceTitle(s16, u8, f32, f32, u8, int); + int PaneTranceName(s16, u8, f32, f32, u8, int); + int PaneTranceBase0(s16, u8, f32, f32, u8, int); + int PaneTranceBase(s16, u8, f32, f32, u8, int); + int PaneTranceHira(s16, u8, f32, f32, u8, int); + int PaneTranceKata(s16, u8, f32, f32, u8, int); + int PaneTranceEisu(s16, u8, f32, f32, u8, int); + int PaneTranceArrow(s16, u8, f32, f32, u8, int); + int PaneTranceEnd(s16, u8, f32, f32, u8, int); void displayInit(); void NameStrSet(); - /* 0x0004 */ u8 field_0x4[0x0008 - 0x0004]; - /* 0x0008 */ dDlst_NameIN_c field_0x8; - /* 0x000C */ u8 field_0xc[0x290B - 0x000C]; - /* 0x290B */ u8 mIsInputEnd; - /* 0x290C */ u8 field_0x290c[0x2A5C - 0x290C]; - /* 0x2A5C */ char mInputStr[8]; - /* 0x2A64 */ u8 field_0x2964[0x2AD0 - 0x2A64]; - /* 0x2AD0 */ char mNextNameStr[0x2AE8 - 0x2AD0]; + void _deleteSp(); + + #if VERSION <= VERSION_JPN + BOOL checkDakuon(int, u8); + BOOL setDakuon(int, u8); + #endif + + /* 0x0004 */ JKRArchive* archive; + /* 0x0008 */ dDlst_NameIN_c nameIn; + /* 0x0014 */ fopMsgM_pane_class field_0x14; + /* 0x004C */ fopMsgM_pane_class eisuMojiPanes[13]; + /* 0x0324 */ fopMsgM_pane_class kataMojiPanes[13]; + /* 0x05FC */ fopMsgM_pane_class hiraMojiPanes[13]; + /* 0x08D4 */ fopMsgM_pane_class field_0x8d4[3]; + /* 0x097C */ fopMsgM_pane_class field_0x97c[5]; + /* 0x0A94 */ fopMsgM_pane_class finBtnPane; + /* 0x0ACC */ fopMsgM_pane_class field_0xacc[10]; + /* 0x0CFC */ fopMsgM_pane_class field_0xcfc[5]; + /* 0x0E14 */ fopMsgM_pane_class yazBtnPane; + /* 0x0E4C */ fopMsgM_pane_class field_0xe4c[10]; + /* 0x107C */ fopMsgM_pane_class field_0x107c[5]; + /* 0x1194 */ fopMsgM_pane_class englBtnPane; + /* 0x11CC */ fopMsgM_pane_class field_0x11cc[10]; + /* 0x13FC */ fopMsgM_pane_class field_0x13fc[5]; + /* 0x1514 */ fopMsgM_pane_class kanaBtnPane; + /* 0x154C */ fopMsgM_pane_class field_0x154c[10]; + /* 0x177C */ fopMsgM_pane_class field_0x177c[5]; + /* 0x1894 */ fopMsgM_pane_class hiraBtnPane; + /* 0x18CC */ fopMsgM_pane_class field_0x18cc[10]; + /* 0x1AFC */ fopMsgM_pane_class field_0x1afc[5]; + /* 0x1C14 */ fopMsgM_pane_class namePane; + /* 0x1C4C */ fopMsgM_pane_class field_0x1c4c; + /* 0x1C84 */ fopMsgM_pane_class field_0x1c84[5]; + /* 0x1D9C */ fopMsgM_pane_class field_0x1d9c[7]; + /* 0x1F24 */ fopMsgM_pane_class field_0x1f24[7]; + /* 0x20AC */ fopMsgM_pane_class titlePane; + /* 0x20E4 */ fopMsgM_pane_class field_0x20e4[5]; + /* 0x21FC */ fopMsgM_pane_class field_0x21fc[7]; + /* 0x2384 */ fopMsgM_pane_class field_0x2384[7]; + /* 0x250C */ fopMsgM_pane_class field_0x250c[9]; + /* 0x2704 */ fopMsgM_pane_class field_0x2704[9]; + /* 0x28FC */ STControl* stick; + /* 0x2900 */ u8 charColumn; + /* 0x2901 */ u8 charRow; + /* 0x2902 */ u8 mojiSet; + /* 0x2903 */ u8 selProc; + /* 0x2904 */ u8 selMenu; + /* 0x2905 */ u8 field_0x2905; + /* 0x2906 */ u8 field_0x2906; + /* 0x2907 */ u8 curPos; + /* 0x2908 */ u8 field_0x2908; + /* 0x2909 */ u8 field_0x2909; + /* 0x290A */ u8 field_0x290a; + /* 0x290B */ u8 isInputEnd_; + /* 0x290C */ u8 prevMojiSet; + /* 0x290D */ u8 field_0x290d; + /* 0x290E */ u8 field_0x290E[0x2910 - 0x290E]; + /* 0x2910 */ s16 paneTransTimer; + /* 0x2912 */ u8 field_0x2912[0x2914 - 0x2912]; + /* 0x2914 */ char nameBuffer[320]; + /* 0x2A54 */ char* pCurTxt; + /* 0x2A58 */ char* pNameTxt; + /* 0x2A5C */ char inputStr[20]; + /* 0x2A70 */ ChrInfo_c chrInfo[8]; + /* 0x2AB0 */ u8 field_0x2ab0[MENU_MAX][4]; + /* 0x2AC4 */ f32 field_0x2ac4; + /* 0x2AC8 */ f32 field_0x2ac8; + /* 0x2ACC */ f32 field_0x2acc; + /* 0x2AD0 */ char nextNameStr[20]; + /* 0x2AE4 */ u32 inputCompleteSound; +#if VERSION == VERSION_PAL + /* 0x2AE8 */ char* field_0x2ae8; +#endif }; -STATIC_ASSERT(sizeof(dName_c) == 0x2AE8); +//STATIC_ASSERT(sizeof(dName_c) == 0x2AE8); #endif /* D_NAME_H */ diff --git a/include/global.h b/include/global.h index ff4ac7d1c..a598a4a0d 100644 --- a/include/global.h +++ b/include/global.h @@ -73,4 +73,10 @@ extern void __sync(); #define DEMO_SELECT(DEMO, RETAIL) (RETAIL) #endif +#ifdef __MWERKS__ +#define SJIS(character, value) character +#else +#define SJIS(character, value) ((u32)value) +#endif + #endif diff --git a/src/d/d_name.cpp b/src/d/d_name.cpp index 18916bac5..e0218023e 100644 --- a/src/d/d_name.cpp +++ b/src/d/d_name.cpp @@ -1,238 +1,2245 @@ -// -// Generated by dtk -// Translation Unit: d_name.cpp -// - #include "d/dolzel.h" // IWYU pragma: keep #include "d/d_name.h" -#include "dolphin/types.h" +#include "d/d_lib.h" +#include "m_Do/m_Do_controller_pad.h" +#include "JSystem/J2DGraph/J2DTextBox.h" +#include "JSystem/J2DGraph/J2DOrthoGraph.h" +#include "stdio.h" /* 80215E38-80215F64 .text __ct__9dNm_HIO_cFv */ dNm_HIO_c::dNm_HIO_c() { - /* Nonmatching */ + field_0x42 = -150; + field_0x44 = 350; + field_0x46 = 490; + field_0x48 = 120; + field_0x6 = 6; + field_0x7 = 6; + field_0x8 = 6; + field_0x9 = 6; + field_0xa = 6; + field_0xb = 6; + field_0xc = 6; + field_0xd = 6; + field_0xe = 0; + field_0xf = 0; + field_0x10 = 0; + field_0x11 = 0; + field_0x12 = 2; + field_0x13 = 4; + field_0x14 = 4; +#if VERSION == VERSION_USA + field_0x15 = 6; +#else + field_0x15 = 8; +#endif + field_0x1f = 14; + field_0x20 = 140; + field_0x21 = 70; + field_0x1b = 15; + field_0x1d = 255; + field_0x1e = 64; + field_0x1c = 31; + field_0x28 = 0; + field_0x26 = 0; + field_0x16 = 7; + field_0x17 = 160; + field_0x18 = 80; + field_0x19 = 14; + field_0x1a = 0; + + field_0x2a[0] = 0; + field_0x2a[1] = 1; + field_0x2a[2] = 1; + + field_0x30[0] = 0; + field_0x30[1] = 0; + field_0x30[2] = 0; + + field_0x36[0] = 0; + field_0x36[1] = -1; + field_0x36[2] = -1; + + field_0x3c[0] = 0; + field_0x3c[1] = 0; + field_0x3c[2] = 0; + + field_0x23 = 5; + field_0x22 = 20; + field_0x5 = 0; } +dNm_HIO_c g_nmHIO; + +typedef void (dName_c::*selProcFunc)(void); +static selProcFunc SelProc[] = { + &dName_c::MojiSelect, + &dName_c::MenuSelect, + &dName_c::MenuButtonAnime, + &dName_c::EndWait +}; + /* 80215F64-80216190 .text _create__7dName_cFv */ void dName_c::_create() { - /* Nonmatching */ + nameIn.NameInScr = new J2DScreen(); + JUT_ASSERT(VERSION_SELECT(208, 208, 212, 212), nameIn.NameInScr != NULL); + + stick = new STControl(5, 2, 3, 2); + JUT_ASSERT(VERSION_SELECT(212, 212, 216, 216), stick != NULL); + stick->setWaitParm(5, 2, 3, 2, 0.9f, 0.5f, 0, 0x800); + + archive = dComIfGp_getNameResArchive(); + nameIn.NameInScr->set("name_input.blo", archive); + nameIn.font = mDoExt_getMesgFont(); + JUT_ASSERT(VERSION_SELECT(222, 222, 226, 226), nameIn.font != NULL); + + g_nmHIO.id = mDoHIO_createChild("名前登録画面", &g_nmHIO); + + screenSet(); + *nextNameStr = 0; +#if VERSION_JPN + displayInit(); +#endif + paneTransInit(); } /* 80216190-802161C4 .text initial__7dName_cFv */ void dName_c::initial() { - /* Nonmatching */ + displayInit(); + paneTransInit(); +} + +void dName_c::_deleteSp() { + mDoHIO_deleteChild(g_nmHIO.id); } /* 802161C4-80216248 .text _delete__7dName_cFv */ void dName_c::_delete() { - /* Nonmatching */ + delete nameIn.NameInScr; + mDoExt_removeMesgFont(); + delete stick; + archive->removeResourceAll(); + mDoHIO_deleteChild(g_nmHIO.id); // supposed to be _deleteSp? } /* 80216248-80216268 .text _move__7dName_cFv */ void dName_c::_move() { - /* Nonmatching */ + NameInMain(); } /* 80216268-802162A4 .text nameCheck__7dName_cFv */ -void dName_c::nameCheck() { - /* Nonmatching */ +int dName_c::nameCheck() { + for (int i = 8, len = 7; i > 0; i--) { +#if VERSION <= VERSION_JPN + // ' ' (full-width space) + if (chrInfo[len].character != ' ' && chrInfo[len].character != '\x81\x40') +#else + if (chrInfo[len].character != ' ') +#endif + { + return len + 1; + } + len--; + } + + return 0; } /* 802162A4-802162F8 .text playNameSet__7dName_cFi */ -void dName_c::playNameSet(int) { - /* Nonmatching */ +void dName_c::playNameSet(int nameLength) { + char* str = inputStr; + + for (int i = 0; i < nameLength; i++) { +#if VERSION <= VERSION_USA + if (chrInfo[i].set == MOJI_EIGO) { + *str = chrInfo[i].character; + str += 1; + } else { + *(u16*)str = chrInfo[i].character; + str += 2; + } +#else + *str = chrInfo[i].character; + str += 1; +#endif + } + + *str = 0; } /* 802162F8-80216670 .text _open__7dName_cFv */ bool dName_c::_open() { - /* Nonmatching */ + BOOL base0_rt = PaneTranceBase0(paneTransTimer - g_nmHIO.field_0x10, g_nmHIO.field_0x8, g_nmHIO.field_0x46, 0.0f, 1, 0); + BOOL title_rt = PaneTranceTitle(paneTransTimer - g_nmHIO.field_0xe, g_nmHIO.field_0x6, g_nmHIO.field_0x42, 0.0f, 1, 0); + BOOL name_rt = PaneTranceName(paneTransTimer - g_nmHIO.field_0xf, g_nmHIO.field_0x7, g_nmHIO.field_0x44, 0.0f, 1, 0); + BOOL base_rt = PaneTranceBase(paneTransTimer - g_nmHIO.field_0x10, g_nmHIO.field_0x8, g_nmHIO.field_0x46, 0.0f, 1, 0); + BOOL kata_rt = PaneTranceKata(paneTransTimer - g_nmHIO.field_0x12, g_nmHIO.field_0xa, g_nmHIO.field_0x48, 0.0f, 1, 0); + BOOL hira_rt = PaneTranceHira(paneTransTimer - g_nmHIO.field_0x11, g_nmHIO.field_0x9, g_nmHIO.field_0x48, 0.0f, 1, 0); +#if VERSION <= VERSION_USA + BOOL eisu_rt = PaneTranceEisu(paneTransTimer - g_nmHIO.field_0x13, g_nmHIO.field_0xb, g_nmHIO.field_0x48, 0.0f, 1, 0); +#endif + BOOL arw_rt = PaneTranceArrow(paneTransTimer - g_nmHIO.field_0x14, g_nmHIO.field_0xc, g_nmHIO.field_0x48, 0.0f, 1, 0); + BOOL end_rt = PaneTranceEnd(paneTransTimer - g_nmHIO.field_0x15, g_nmHIO.field_0x15, g_nmHIO.field_0x48, 0.0f, 1, 0); + + paneTransTimer++; + + if (base0_rt == TRUE + && title_rt == TRUE + && name_rt == TRUE + && base_rt == TRUE + && kata_rt == TRUE + && hira_rt == TRUE +#if VERSION <= VERSION_USA + && eisu_rt == TRUE +#endif + && arw_rt == TRUE + && end_rt == TRUE) + { + paneTransTimer = 0; + return true; + } + + return false; } /* 80216670-802169E0 .text _close__7dName_cFv */ bool dName_c::_close() { - /* Nonmatching */ + BOOL base0_rt = PaneTranceBase0(paneTransTimer - g_nmHIO.field_0x10, g_nmHIO.field_0x8, 0.0f, g_nmHIO.field_0x46, 0, 1); + BOOL title_rt = PaneTranceTitle(paneTransTimer - g_nmHIO.field_0xe, g_nmHIO.field_0x6, 0.0f, g_nmHIO.field_0x42, 0, 1); + BOOL name_rt = PaneTranceName(paneTransTimer - g_nmHIO.field_0xf, g_nmHIO.field_0x7, 0.0f, g_nmHIO.field_0x44, 0, 1); + BOOL base_rt = PaneTranceBase(paneTransTimer - g_nmHIO.field_0x10, g_nmHIO.field_0x8, 0.0f, g_nmHIO.field_0x46, 0, 1); + BOOL kata_rt = PaneTranceKata(paneTransTimer - g_nmHIO.field_0x12, g_nmHIO.field_0xa, 0.0f, g_nmHIO.field_0x48, 0, 1); + BOOL hira_rt = PaneTranceHira(paneTransTimer - g_nmHIO.field_0x11, g_nmHIO.field_0x9, 0.0f, g_nmHIO.field_0x48, 0, 1); +#if VERSION <= VERSION_USA + BOOL eisu_rt = PaneTranceEisu(paneTransTimer - g_nmHIO.field_0x13, g_nmHIO.field_0xb, 0.0f, g_nmHIO.field_0x48, 0, 1); +#endif + BOOL arw_rt = PaneTranceArrow(paneTransTimer - g_nmHIO.field_0x14, g_nmHIO.field_0xc, 0.0f, g_nmHIO.field_0x48, 0, 1); + BOOL end_rt = PaneTranceEnd(paneTransTimer - g_nmHIO.field_0x15, g_nmHIO.field_0x15, 0.0f, g_nmHIO.field_0x48, 0, 1); + + paneTransTimer++; + + if (base0_rt == TRUE + && title_rt == TRUE + && name_rt == TRUE + && base_rt == TRUE + && kata_rt == TRUE + && hira_rt == TRUE +#if VERSION <= VERSION_USA + && eisu_rt == TRUE +#endif + && arw_rt == TRUE + && end_rt == TRUE) + { + return true; + } + + return false; } /* 802169E0-80216C08 .text NameInMain__7dName_cFv */ void dName_c::NameInMain() { - /* Nonmatching */ + stick->checkTrigger(); + (this->*SelProc[selProc])(); + +#if VERSION <= VERSION_JPN || VERSION == VERSION_PAL + if (CPad_CHECK_TRIG_Y(0)) { + mDoAud_seStart(JA_SE_NAME_PUSH_BUTTON, NULL, 0, 0); + prevMojiSet = mojiSet; + mojiSet++; +#if VERSION <= VERSION_JPN + if (mojiSet > MOJI_EIGO) { +#else + if (mojiSet > MOJI_KATA) { +#endif + mojiSet = MOJI_HIRA; + } + mojiListChange(prevMojiSet); + } else +#endif + +#if VERSION <= VERSION_JPN + if (CPad_CHECK_TRIG_X(0)) { + if (curPos != 0) { + if (mojiChange(curPos - 1) == 1) { + mDoAud_seStart(JA_SE_NAME_STR_SWITCH, NULL, 0, 0); + } else { + mDoAud_seStart(JA_SE_NAME_INPUT_LIMIT, NULL, 0, 0); + } + } + } else +#endif + + if (CPad_CHECK_TRIG_RIGHT(0)) { + if (curPos != 8) { + mDoAud_seStart(JA_SE_NAME_NAME_CURSOR, NULL, 0, 0); + curPos++; + nameCursorMove(); + } + } else if (CPad_CHECK_TRIG_LEFT(0)) { + if (curPos != 0) { + mDoAud_seStart(JA_SE_NAME_NAME_CURSOR, NULL, 0, 0); + curPos--; + nameCursorMove(); + } + } else if (CPad_CHECK_TRIG_B(0)) { + if (curPos == 0) { + mDoAud_seStart(JA_SE_MSEL_CANCEL_1, NULL, 0, 0); + field_0x97c[0].pane->hide(); + selProc = PROC_END_WAIT; + isInputEnd_ = 2; + } else { + backSpace(); + } + } else if (CPad_CHECK_TRIG_START(0)) { + if (selProc != PROC_MENU_BUTTON_ANIME && (selProc != PROC_MENU_SELECT || selMenu != MENU_END)) { + mDoAud_seStart(JA_SE_NAME_CURSOR, NULL, 0, 0); + selProc = PROC_MENU_SELECT; + selMenu = MENU_END; + menuCursorMove(); + + for (int i = 0; i < 3; i++) { + field_0x8d4[i].pane->hide(); + } + + field_0x97c[0].pane->show(); + selectCursorMove(); + } + } + + nameCursorAnime(); } /* 80216C08-80216D14 .text nameCursorAnime__7dName_cFv */ +// NONMATCHING - one float reg swap void dName_c::nameCursorAnime() { - /* Nonmatching */ + f32 var_f1 = fopMsgM_valueIncrease(g_nmHIO.field_0x1f, field_0x1c4c.mUserArea, 0); + if (field_0x2906 != 0) { + var_f1 = 1.0f - var_f1; + } + + field_0x1c4c.mNowAlpha = (f32)g_nmHIO.field_0x1e + (u32)((g_nmHIO.field_0x1d - g_nmHIO.field_0x1e) * var_f1); + fopMsgM_setAlpha(&field_0x1c4c); + + if (field_0x1c4c.mUserArea == 0) { + field_0x2906 ^= 1; + field_0x1c4c.mUserArea = g_nmHIO.field_0x1b; + } else { + field_0x1c4c.mUserArea--; + } } /* 80216D14-80216D18 .text EndWait__7dName_cFv */ -void dName_c::EndWait() { - /* Nonmatching */ -} +void dName_c::EndWait() {} /* 80216D18-80216F14 .text MojiSelect__7dName_cFv */ void dName_c::MojiSelect() { - /* Nonmatching */ + if (CPad_CHECK_TRIG_A(0)) { + selectMojiSet(); + } else if (stick->checkRightTrigger()) { + mDoAud_seStart(JA_SE_NAME_CURSOR, NULL, 0, 0); + charColumn++; + if (charColumn > 12) { + charColumn = 0; + } + selectCursorMove(); + } else if (stick->checkLeftTrigger()) { + mDoAud_seStart(JA_SE_NAME_CURSOR, NULL, 0, 0); + if (charColumn == 0) { + charColumn = 12; + } else { + charColumn--; + } + selectCursorMove(); + } + + if (stick->checkUpTrigger()) { + mDoAud_seStart(JA_SE_NAME_CURSOR, NULL, 0, 0); + if (charRow == 0) { + selProc = PROC_MENU_SELECT; + menuCursorPosSet(); + } else { + charRow--; + } + selectCursorMove(); + } else if (stick->checkDownTrigger()) { + mDoAud_seStart(JA_SE_NAME_CURSOR, NULL, 0, 0); + charRow++; + if (charRow > 4) { + charRow = 4; + selProc = PROC_MENU_SELECT; + menuCursorPosSet(); + } + selectCursorMove(); + } + + selectCursorAnime(); } /* 80216F14-80217284 .text mojiChange__7dName_cFUc */ -void dName_c::mojiChange(u8) { - /* Nonmatching */ +int dName_c::mojiChange(u8 idx) { + if (chrInfo[idx].field_0x3 == 0 || chrInfo[idx].set == MOJI_EIGO || chrInfo[idx].character == SJIS(' ', 0x8140U)) { + return 0; + } + + if (chrInfo[idx].column == 4 || chrInfo[idx].column == 6 || chrInfo[idx].column == 8 || chrInfo[idx].column == 9) { + return 0; + } + + switch (chrInfo[idx].column) { + case 0: + case 10: { + if (chrInfo[idx].character == SJIS('ウ', 0x8345U) || chrInfo[idx].character == SJIS('ゥ', 0x8344U) || + chrInfo[idx].character == SJIS('ヴ', 0x8394U)) + { + chrInfo[idx].character++; + + if (chrInfo[idx].character == SJIS('ェ', 0x8346U)) { + chrInfo[idx].character = SJIS('ヴ', 0x8394U); + } + + if (chrInfo[idx].character == SJIS('ヵ', 0x8395U)) { + chrInfo[idx].character = SJIS('ゥ', 0x8344U); + } + } else { + int c = chrInfo[idx].set != MOJI_HIRA ? SJIS('ァ', 0x8340U) : SJIS('ぁ', 0x829fU); + + if ((chrInfo[idx].character - c) % 2) { + --chrInfo[idx].character; + } else { + ++chrInfo[idx].character; + } + } + break; + } + case 1: { + int c = chrInfo[idx].set != MOJI_HIRA ? SJIS('カ', 0x834aU) : SJIS('か', 0x82a9U); + c = ((chrInfo[idx].character - c) % 2); + + int c2 = c + 1; + chrInfo[idx].character = (chrInfo[idx].character - c) + (c2 & 1); + break; + } + case 2: { + int c = chrInfo[idx].set != MOJI_HIRA ? SJIS('サ', 0x8354U) : SJIS('さ', 0x82b3U); + c = ((chrInfo[idx].character - c) % 2); + + int c2 = c + 1; + chrInfo[idx].character = (chrInfo[idx].character - c) + (c2 & 1); + break; + } + case 3: + case 12: { + if (chrInfo[idx].character != (u32)0x815b) { + if (chrInfo[idx].character <= (chrInfo[idx].set != MOJI_HIRA ? SJIS('ヂ', 0x8361U) : SJIS('ぢ', 0x82c0U))) { + int c = chrInfo[idx].set != MOJI_HIRA ? SJIS('タ', 0x835eU) : SJIS('た', 0x82bdU); + c = ((chrInfo[idx].character - c) % 2); + + int c2 = c + 1; + chrInfo[idx].character = (chrInfo[idx].character - c) + (c2 & 1); + } else if (chrInfo[idx].character <= + (chrInfo[idx].set != MOJI_HIRA ? SJIS('ド', 0x8368U) : SJIS('ど', 0x82c7U)) && + chrInfo[idx].character >= + (chrInfo[idx].set != MOJI_HIRA ? SJIS('テ', 0x8365U) : SJIS('て', 0x82c4U))) + { + int c = chrInfo[idx].set != MOJI_HIRA ? SJIS('テ', 0x8365U) : SJIS('て', 0x82c4U); + c = ((chrInfo[idx].character - c) % 2); + + int c2 = c + 1; + chrInfo[idx].character = (chrInfo[idx].character - c) + (c2 & 1); + } else { + int c = chrInfo[idx].set != MOJI_HIRA ? SJIS('ッ', 0x8362U) : SJIS('っ', 0x82c1U); + int c2 = (chrInfo[idx].character - c) % 3; + + int ivar2 = c2 + 1; + if (ivar2 > 2) { + ivar2 = 0; + } + + chrInfo[idx].character = ivar2 + (chrInfo[idx].character - c2); + } + } + break; + } + case 5: { + int c = chrInfo[idx].set != MOJI_HIRA ? SJIS('ハ', 0x836eU) : SJIS('は', 0x82cdU); + int c2 = (chrInfo[idx].character - c) % 3; + + int ivar2 = c2 + 1; + if (ivar2 > 2) { + ivar2 = 0; + } + + chrInfo[idx].character = ivar2 + (chrInfo[idx].character - c2); + break; + } + case 7: + case 11: { + int c = chrInfo[idx].set != MOJI_HIRA ? SJIS('ャ', 0x8383U) : SJIS('ゃ', 0x82e1U); + c = ((chrInfo[idx].character - c) % 2); + + int c2 = c + 1; + chrInfo[idx].character = (chrInfo[idx].character - c) + (c2 & 1); + break; + } + } + + setNameText(); + return 1; } /* 80217284-802172CC .text selectMojiSet__7dName_cFv */ void dName_c::selectMojiSet() { - /* Nonmatching */ +#if VERSION <= VERSION_JPN + int moji = getMoji(); + if (moji != -1) { + if (moji == '゛' || moji == '゜') { + if (curPos != 0) { + if (checkDakuon(moji, curPos - 1) == 1) { + mDoAud_seStart(JA_SE_NAME_INPUT, NULL, 0, 0); + setDakuon(moji, curPos - 1); + } else { + mDoAud_seStart(JA_SE_NAME_INPUT_LIMIT, NULL, 0, 0); + } + } + } else { + setMoji(moji); + } + } +#else + setMoji(getMoji()); +#endif + setNameText(); + nameCursorMove(); + } +#if VERSION <= VERSION_JPN +BOOL dName_c::checkDakuon(int param_0, u8 param_1) { + if (chrInfo[param_1].set == MOJI_EIGO) { + return 0; + } + + if (param_1 == 0 && chrInfo[param_1].field_0x3 == 0) { + return 0; + } + + if (param_0 == '゜' && chrInfo[param_1].column != 5) { + return 0; + } + + if (param_0 == '゛' && + (chrInfo[param_1].character == 'ウ' || chrInfo[param_1].character == 'ヴ')) + { + return 1; + } + + if (param_0 == '゛' && chrInfo[param_1].column != 1 && chrInfo[param_1].column != 2 && + chrInfo[param_1].column != 3 && chrInfo[param_1].column != 5) + { + return 0; + } + + return 1; +} + +BOOL dName_c::setDakuon(int param_1, u8 param_2) { + int c; + + if (param_1 == '゛') { + switch (chrInfo[param_2].column) { + case 0: { + c = -1; + if (chrInfo[param_2].character == 'ウ' || chrInfo[param_2].character == 'ヴ') { + c = 4; + chrInfo[param_2].character = 'ヴ'; + } + break; + } + case 1: { + int c2 = chrInfo[param_2].set != MOJI_HIRA ? 'カ' : 'か'; + c = (chrInfo[param_2].character - c2) % 2; + break; + } + case 2: { + int c2 = chrInfo[param_2].set != MOJI_HIRA ? 'サ' : 'さ'; + c = (chrInfo[param_2].character - c2) % 2; + break; + } + case 3: { + int c2; + if (chrInfo[param_2].character <= + ((chrInfo[param_2].set != MOJI_HIRA ? 'ヂ' : 'ぢ'))) + { + c2 = chrInfo[param_2].set != MOJI_HIRA ? 'タ' : 'た'; + c = (chrInfo[param_2].character - c2) % 2; + } else { + if (chrInfo[param_2].character <= (chrInfo[param_2].set != 0 ? 'ド' : 'ど')) + { + if (chrInfo[param_2].character >= + (chrInfo[param_2].set != 0 ? 'テ' : 'て')) + { + c2 = chrInfo[param_2].set != MOJI_HIRA ? 'テ' : 'て'; + c = (chrInfo[param_2].character - c2) % 2; + break; + } + } + + c2 = chrInfo[param_2].set != MOJI_HIRA ? 'ッ' : 'っ'; + c = (chrInfo[param_2].character - c2) % 3; + if (c == 2) { + c = 1; + } else if (c == 1) { + c = 0; + } else if (c == 0) { + c = 3; + } + } + break; + } + case 5: { + int c2 = chrInfo[param_2].set != MOJI_HIRA ? 'ハ' : 'は'; + c = (chrInfo[param_2].character - c2) % 3; + break; + } + } + + if (c != 1) { + if (c == 2) { + chrInfo[param_2].character -= 1; + } else if (c == 0) { + chrInfo[param_2].character += 1; + } else if (c == 3) { + chrInfo[param_2].character += 2; + } + + setNameText(); + + return 1; + } + } else if (param_1 == '゜') { + int c2 = chrInfo[param_2].set != MOJI_HIRA ? 'ハ' : 'は'; + c = (chrInfo[param_2].character - c2) % 3; + if (c != 2) { + chrInfo[param_2].character = chrInfo[param_2].character + (2 - c); + setNameText(); + + return 1; + } + } + + return 0; +} +#endif + /* 802172CC-802173E8 .text getMoji__7dName_cFv */ -void dName_c::getMoji() { - /* Nonmatching */ +// NONMATCHING - reg alloc +int dName_c::getMoji() { + int result = -1; + const char* moji; + + fopMsgM_pane_class* pane; + switch (mojiSet) { + case MOJI_HIRA: + pane = &hiraMojiPanes[charColumn]; + break; + case MOJI_KATA: + pane = &kataMojiPanes[charColumn]; + break; +#if VERSION <= VERSION_USA + case MOJI_EIGO: + pane = &eisuMojiPanes[charColumn]; + break; +#endif + } + + moji = ((J2DTextBox*)(pane->pane))->getStringPtr(); + int i = 0; + while (*moji != 0) { + if (*moji == '\n') { + moji++; + continue; + } + +#if VERSION <= VERSION_USA + if (*(u8*)moji >> 4 == 0x8 || *(u8*)moji >> 4 == 0x9) { + if (i == charRow) { + result = *(u16*)moji; + break; + } + moji += 2; + i++; + } else { + if (i == charRow) { + result = *(u8*)moji; + break; + } + moji++; + i++; + } +#else + if (i == charRow) { + result = *moji; + break; + } + moji++; + i++; +#endif + } + + return result; } /* 802173E8-80217610 .text setMoji__7dName_cFi */ -void dName_c::setMoji(int) { - /* Nonmatching */ +void dName_c::setMoji(int moji) { + if (curPos == 8 || nameCheck() == 8) { + mDoAud_seStart(JA_SE_NAME_INPUT_LIMIT, NULL, 0, 0); + } else { + mDoAud_seStart(JA_SE_NAME_INPUT, NULL, 0, 0); + + s32 notEmpty = false; + for (int i = curPos; i < 8; i++) { +#if VERSION <= VERSION_JPN + // ' ' (full-width space) + if (chrInfo[i].character != '\x81\x40') +#else + if (chrInfo[i].character != ' ') +#endif + { + notEmpty = true; + break; + } + } + + if (notEmpty) { +#if VERSION <= VERSION_JPN + // ' ' (full-width space) + if (chrInfo[7].character == '\x81\x40') +#else + if (chrInfo[7].character == ' ') +#endif + { + for (int i = 6; i >= curPos; i--) { + chrInfo[i + 1] = chrInfo[i]; + } + + chrInfo[curPos].column = charColumn; + chrInfo[curPos].row = charRow; + chrInfo[curPos].set = mojiSet; + chrInfo[curPos].field_0x3 = 1; +#if VERSION <= VERSION_USA + chrInfo[curPos].character = moji; +#else + chrInfo[curPos].character = moji & 0xFF; +#endif + + if (curPos != 8) { + curPos++; + } + } + } else { + chrInfo[curPos].column = charColumn; + chrInfo[curPos].row = charRow; + chrInfo[curPos].set = mojiSet; + chrInfo[curPos].field_0x3 = 1; +#if VERSION <= VERSION_USA + chrInfo[curPos].character = moji; +#else + chrInfo[curPos].character = moji & 0xFF; +#endif + + if (curPos != 8) { + curPos++; + } + } + } } /* 80217610-802177E4 .text setNameText__7dName_cFv */ +// NONMATCHING - some float math issues void dName_c::setNameText() { - /* Nonmatching */ + f32 var_f31 = ((J2DTextBox*)namePane.pane)->mFontSizeX; + f32 ratio = var_f31 / nameIn.font->getCellWidth(); + *pNameTxt = 0; + + for (int i = 0; i < 8; i++) { + if (chrInfo[i].field_0x3 != 0) { + JUTFont::TWidth twidth; + nameIn.font->getWidthEntry(chrInfo[i].character, &twidth); + + int sp50 = (int)twidth.field_0x1 * ratio * 10000.0f; + + f32 fvar4 = sp50 / 10000.0f; + f32 fvar5 = (var_f31 - fvar4) * 0.5f; + f32 fvar6 = var_f31 - (fvar4 + fvar5); + + int ivar2 = fvar5; + + int ivar7 = ivar2 + (int)fvar4 + (int)fvar6; + if (ivar7 < (int)var_f31) { + fvar6 += (int)var_f31 - ivar7; + } + + char spC[320]; + +#if VERSION <= VERSION_JPN + if (chrInfo[i].set == MOJI_EIGO) +#endif + { + sprintf(spC, + "\x1b" + "CR[%d]%c\x1b" + "CR[%d]\x1b" + "CR[%d]", + ivar2, + (u8)chrInfo[i].character, + (int)fvar6, + 2 + ); + } +#if VERSION <= VERSION_JPN + else { + sprintf(spC, + "\x1b" + "CR[%d]%c%c\x1b" + "CR[%d]\x1b" + "CR[%d]", + ivar2, + (u8)((chrInfo[i].character & 0xFF00) >> 8), + (u8)chrInfo[i].character, + (int)fvar6, + 2 + ); + } +#endif + strcat(pNameTxt, spC); + } + } } /* 802177E4-80217870 .text nameCursorMove__7dName_cFv */ void dName_c::nameCursorMove() { - /* Nonmatching */ + fopMsgM_paneTrans(&field_0x1c4c, (f32)g_nmHIO.field_0x28 + curPos * g_nmHIO.field_0x1c, g_nmHIO.field_0x26); } /* 80217870-802179BC .text selectCursorMove__7dName_cFv */ void dName_c::selectCursorMove() { - /* Nonmatching */ + int idx; +#if VERSION == VERSION_PAL + if (charColumn < 3) { + idx = 0; + } else if (charColumn < 6) { + idx = 1; + } else if (charColumn < 8) { + idx = 4; + } else if (charColumn < 10) { + idx = 2; + } else if (charColumn >= 10) { + idx = 3; + } +#else + +#if VERSION <= VERSION_JPN + if (charColumn < 3) { + idx = 0; + } else if (charColumn < 6) { + idx = 1; + } else if (charColumn < 8) { + idx = 2; + } else +#endif + if (charColumn < 10) { + idx = 3; + } else if (charColumn >= 10) { + idx = 4; + } + +#endif + + field_0x2ab0[idx][0] = charColumn; + field_0x2ab0[idx][1] = charRow; + field_0x2ab0[idx][2] = 1; + + for (int i = 0; i < 2; i++) { + fopMsgM_paneTrans(&field_0x8d4[i], charColumn * 39.0f, charRow * 40.0f); + } + + fopMsgM_paneTrans(&field_0x8d4[2], charColumn * 39.0f, charRow * 40.0f); + selectCursorTxtChange(); } /* 802179BC-80217A28 .text selectCursorTxtChange__7dName_cFv */ void dName_c::selectCursorTxtChange() { - /* Nonmatching */ + int moji = getMoji(); + if (moji > 0xFF) { + pCurTxt[0] = (moji >> 8) & 0xFF; + pCurTxt[1] = moji; + pCurTxt[2] = 0; + } else { + pCurTxt[0] = moji; + pCurTxt[1] = 0; + } } /* 80217A28-80217D44 .text selectCursorAnime__7dName_cFv */ +// NONMATCHING - one float reg swap void dName_c::selectCursorAnime() { - /* Nonmatching */ + f32 sp14[3] = {0.0f, -3.0f, 4.0f}; + f32 sp8[3] = {0.0f, 4.0f, -3.0f}; + + if (field_0x8d4[0].mUserArea == 0) { + field_0x8d4[0].mUserArea = g_nmHIO.field_0x16; + + fopMsgM_paneTrans(&field_0x8d4[0], + (f32)charColumn * 39.0f + (f32)g_nmHIO.field_0x2a[field_0x2905], + (f32)charRow * 40.0f + (f32)g_nmHIO.field_0x30[field_0x2905]); + + fopMsgM_paneTrans(&field_0x8d4[1], + (f32)charColumn * 39.0f + (f32)g_nmHIO.field_0x36[field_0x2905], + (f32)charRow * 40.0f + (f32)g_nmHIO.field_0x3c[field_0x2905]); + + field_0x8d4[0].pane->rotate(field_0x2ac8 + sp14[field_0x2905]); + field_0x8d4[1].pane->rotate(field_0x2acc + sp8[field_0x2905]); + + field_0x2905++; + if (field_0x2905 > 2) { + field_0x2905 = 0; + } + } else { + field_0x8d4[0].mUserArea--; + } + + if (field_0x8d4[2].mUserArea == 0) { + f32 temp_f1 = fopMsgM_valueIncrease(g_nmHIO.field_0x19, field_0x8d4[1].mUserArea, 0); + if (field_0x2909) { + temp_f1 = 1.0f - temp_f1; + } + + u32 temp = (g_nmHIO.field_0x17 - g_nmHIO.field_0x18) * temp_f1; + field_0x8d4[0].mNowAlpha = g_nmHIO.field_0x18 + temp; + field_0x8d4[1].mNowAlpha = g_nmHIO.field_0x18 + temp; + fopMsgM_setAlpha(&field_0x8d4[0]); + fopMsgM_setAlpha(&field_0x8d4[1]); + + if (field_0x8d4[1].mUserArea == 0) { + field_0x8d4[1].mUserArea = g_nmHIO.field_0x19; + field_0x2909 ^= 1; + } else { + field_0x8d4[1].mUserArea--; + } + + field_0x8d4[2].mUserArea = g_nmHIO.field_0x1a; + } else { + field_0x8d4[2].mUserArea--; + } } /* 80217D44-80217DC8 .text menuCursorPosSet__7dName_cFv */ void dName_c::menuCursorPosSet() { - /* Nonmatching */ +#if VERSION <= VERSION_JPN || VERSION == VERSION_PAL + if (charColumn < 3) { + selMenu = MENU_HIRA; + } else if (charColumn < 6) { + selMenu = MENU_KATA; + } +#if VERSION != VERSION_PAL + else if (charColumn < 8) { + selMenu = MENU_EIGO; + } +#endif + else +#endif + if (charColumn < 10) { + selMenu = MENU_BACKSPACE; + } else if (charColumn >= 10) { + selMenu = MENU_END; + } + + menuCursorMove(); + + for (int i = 0; i < 3; i++) { + field_0x8d4[i].pane->hide(); + } + + field_0x97c[0].pane->show(); } /* 80217DC8-802180E4 .text MenuSelect__7dName_cFv */ void dName_c::MenuSelect() { - /* Nonmatching */ + if (stick->checkRightTrigger()) { + mDoAud_seStart(JA_SE_NAME_CURSOR, NULL, 0, 0); + selMenu++; + if (selMenu > MENU_END) { + #if VERSION <= VERSION_JPN || VERSION == VERSION_PAL + selMenu = MENU_HIRA; + #else + selMenu = MENU_BACKSPACE; + #endif + } + menuCursorMove(); + } else if (stick->checkLeftTrigger()) { + mDoAud_seStart(JA_SE_NAME_CURSOR, NULL, 0, 0); +#if VERSION <= VERSION_JPN || VERSION == VERSION_PAL + if (selMenu == MENU_HIRA) +#else + if (selMenu == MENU_BACKSPACE) +#endif + { + selMenu = MENU_END; + } else { + selMenu--; + } + menuCursorMove(); + } else if (stick->checkUpTrigger()) { + mDoAud_seStart(JA_SE_NAME_CURSOR, NULL, 0, 0); + selProc = PROC_MOJI_SELECT; + selectCursorPosSet(4); + } else if (stick->checkDownTrigger()) { + mDoAud_seStart(JA_SE_NAME_CURSOR, NULL, 0, 0); + selProc = PROC_MOJI_SELECT; + selectCursorPosSet(0); + } else if (CPad_CHECK_TRIG_A(0)) { + if (selMenu == MENU_END) { + if (nameCheck() != 0) { + mDoAud_seStart(inputCompleteSound, NULL, 0, 0); + } else { + mDoAud_seStart(JA_SE_NAME_INPUT_LIMIT, NULL, 0, 0); + } + } else { + mDoAud_seStart(JA_SE_NAME_PUSH_BUTTON, NULL, 0, 0); + } + field_0x97c[0].pane->hide(); + paneTransTimer = 0; + selProc = PROC_MENU_BUTTON_ANIME; + } else if (CPad_CHECK_TRIG_START(0)) { + if (selMenu == MENU_END) { + if (nameCheck() != 0) { + mDoAud_seStart(inputCompleteSound, NULL, 0, 0); + } else { + mDoAud_seStart(JA_SE_NAME_INPUT_LIMIT, NULL, 0, 0); + } + field_0x97c[0].pane->hide(); + paneTransTimer = 0; + selProc = PROC_MENU_BUTTON_ANIME; + } + } + + menuCursorAnime(); } /* 802180E4-80218228 .text MenuButtonAnime__7dName_cFv */ void dName_c::MenuButtonAnime() { - /* Nonmatching */ + field_0x2ac4 = g_nmHIO.field_0x22 * fopMsgM_valueIncrease(g_nmHIO.field_0x23, paneTransTimer, 5); + + switch (selMenu) { + case MENU_HIRA: + fopMsgM_paneTrans(&field_0x1afc[0], 0.0f, field_0x2ac4); + break; + case MENU_KATA: + fopMsgM_paneTrans(&field_0x177c[0], 0.0f, field_0x2ac4); + break; +#if VERSION <= VERSION_USA + case MENU_EIGO: + fopMsgM_paneTrans(&field_0x13fc[0], 0.0f, field_0x2ac4); + break; +#endif + case MENU_BACKSPACE: + fopMsgM_paneTrans(&field_0x107c[0], 0.0f, field_0x2ac4); + break; + case MENU_END: + fopMsgM_paneTrans(&field_0xcfc[0], 0.0f, field_0x2ac4); + break; + } + + paneTransTimer++; + if (paneTransTimer > g_nmHIO.field_0x23) { + field_0x97c[0].pane->show(); + menuAbtnSelect(); + selProc = PROC_MENU_SELECT; + paneTransTimer = 0; + } } /* 80218228-802182FC .text menuAbtnSelect__7dName_cFv */ void dName_c::menuAbtnSelect() { - /* Nonmatching */ + switch (selMenu) { + case MENU_HIRA: + case MENU_KATA: +#if VERSION <= VERSION_USA + case MENU_EIGO: +#endif + if (selMenu != mojiSet) { + prevMojiSet = mojiSet; + mojiSet = selMenu; + mojiListChange(prevMojiSet); + } + break; + case MENU_BACKSPACE: + backSpace(); + break; + case MENU_END: + int namelen = nameCheck(); + if (namelen != 0) { + field_0x97c[0].pane->hide(); + playNameSet(namelen); + isInputEnd_ = 1; + } else { + mDoAud_seStart(JA_SE_NAME_INPUT_LIMIT, NULL, 0, 0); + } + break; + } } /* 802182FC-80218428 .text backSpace__7dName_cFv */ void dName_c::backSpace() { - /* Nonmatching */ + if (curPos != 0) { + mDoAud_seStart(JA_SE_NAME_DELETE, NULL, 0, 0); + +#if VERSION <= VERSION_JPN + // ' ' (full-width space) + if (curPos == 8 && chrInfo[7].character != '\x81\x40') +#else + if (curPos == 8 && chrInfo[7].character != ' ') +#endif + { + chrInfo[7].column = 7; + chrInfo[7].row = 1; +#if VERSION <= VERSION_JPN || VERSION == VERSION_PAL + chrInfo[7].set = MOJI_HIRA; +#else + chrInfo[7].set = MOJI_EIGO; +#endif + chrInfo[7].field_0x3 = 1; +#if VERSION <= VERSION_JPN + chrInfo[7].character = '\x81\x40'; +#else + chrInfo[7].character = ' '; +#endif + } else { + for (int i = curPos - 1; i < 7; i++) { + chrInfo[i] = chrInfo[i + 1]; + } + chrInfo[7].column = 7; + chrInfo[7].row = 1; +#if VERSION <= VERSION_JPN || VERSION == VERSION_PAL + chrInfo[7].set = MOJI_HIRA; +#else + chrInfo[7].set = MOJI_EIGO; +#endif + chrInfo[7].field_0x3 = 1; +#if VERSION <= VERSION_JPN + chrInfo[7].character = '\x81\x40'; +#else + chrInfo[7].character = ' '; +#endif + } + + curPos--; + setNameText(); + nameCursorMove(); + } } /* 80218428-802184EC .text mojiListChange__7dName_cFUc */ -void dName_c::mojiListChange(u8) { - /* Nonmatching */ +void dName_c::mojiListChange(u8 i_prevSet) { + fopMsgM_pane_class* prevMojiPanes; + switch (i_prevSet) { + case MOJI_HIRA: + prevMojiPanes = hiraMojiPanes; + break; + case MOJI_KATA: + prevMojiPanes = kataMojiPanes; + break; +#if VERSION <= VERSION_USA + case MOJI_EIGO: + prevMojiPanes = eisuMojiPanes; + break; +#endif + } + + fopMsgM_pane_class* newMojiPanes; + switch (mojiSet) { + case MOJI_HIRA: + newMojiPanes = hiraMojiPanes; + break; + case MOJI_KATA: + newMojiPanes = kataMojiPanes; + break; +#if VERSION <= VERSION_USA + case MOJI_EIGO: + newMojiPanes = eisuMojiPanes; + break; +#endif + } + + for (int i = 0; i < 13; i++) { + prevMojiPanes[i].pane->hide(); + newMojiPanes[i].pane->show(); + } + + selectCursorTxtChange(); } /* 802184EC-80218818 .text menuCursorMove__7dName_cFv */ void dName_c::menuCursorMove() { - /* Nonmatching */ + field_0x97c[0].mNowAlpha = 0; + field_0x97c[0].mUserArea = 0; + field_0x97c[1].mUserArea = 0; + field_0x2908 = 0; + fopMsgM_setAlpha(&field_0x97c[0]); + + for (int i = 0; i < 5; i++) { + field_0x97c[i].mInitAlpha = field_0x97c[i].pane->getAlpha(); + field_0x97c[i].mPosTopLeft.x = field_0x97c[i].mPosTopLeftOrig.x; + field_0x97c[i].mPosTopLeft.y = field_0x97c[i].mPosTopLeftOrig.y; + field_0x97c[i].mPosCenter.x = field_0x97c[i].mPosCenterOrig.x; + field_0x97c[i].mPosCenter.y = field_0x97c[i].mPosCenterOrig.y; + field_0x97c[i].mSize.x = field_0x97c[i].mSizeOrig.x; + field_0x97c[i].mSize.y = field_0x97c[i].mSizeOrig.y; + fopMsgM_cposMove(&field_0x97c[i]); + } + + static f32 PosData[] = { + #if VERSION <= VERSION_USA + -117.0f, + 0.0f, + 117.0f, + 194.0f, + 272.0f, + #else + -130.0f, + 0.0f, + 130.0f, + 260.0f, + #endif + }; + + switch (selMenu) { + case MENU_HIRA: + case MENU_KATA: + ((J2DPicture*)field_0x97c[1].pane)->setMirror((J2DMirror)3); + ((J2DPicture*)field_0x97c[3].pane)->setMirror((J2DMirror)0); + + fopMsgM_paneTrans(&field_0x97c[0], PosData[selMenu], 0.0f); + break; +#if VERSION <= VERSION_USA + case MENU_EIGO: +#endif + case MENU_BACKSPACE: + ((J2DPicture*)field_0x97c[1].pane)->setMirror((J2DMirror)3); + ((J2DPicture*)field_0x97c[3].pane)->setMirror((J2DMirror)0); + + fopMsgM_paneTrans(&field_0x97c[0], PosData[selMenu], 0.0f); +#if VERSION <= VERSION_USA + fopMsgM_paneScaleX(&field_0x97c[1], 0.45f); + fopMsgM_paneScaleX(&field_0x97c[3], 0.45f); + fopMsgM_paneScaleX(&field_0x97c[4], 0.45f); + + field_0x97c[1].pane->move(field_0x97c[0].mSizeOrig.x, field_0x97c[1].mPosTopLeft.y); + field_0x97c[3].pane->move(field_0x97c[0].mSizeOrig.x, field_0x97c[3].mPosTopLeft.y); + field_0x97c[4].pane->move(field_0x97c[0].mSizeOrig.x, field_0x97c[4].mPosTopLeft.y); + field_0x97c[2].pane->move(field_0x97c[0].mSizeOrig.x + field_0x97c[1].mSize.x, field_0x97c[2].mPosTopLeft.y); +#endif + break; + case MENU_END: + ((J2DPicture*)field_0x97c[1].pane)->setMirror(J2DMirror_Y); + ((J2DPicture*)field_0x97c[3].pane)->setMirror(J2DMirror_X); + + fopMsgM_paneTrans(&field_0x97c[0], PosData[selMenu], 2.0f); + fopMsgM_paneTrans(&field_0x97c[1], PosData[selMenu], -2.0f); + fopMsgM_paneTrans(&field_0x97c[3], PosData[selMenu], -2.0f); + fopMsgM_paneTrans(&field_0x97c[4], PosData[selMenu], -2.0f); + fopMsgM_paneTrans(&field_0x97c[2], PosData[selMenu], -5.0f); + + for (int i = 1; i < 5; i++) { + field_0x97c[i].mPosCenter.x = field_0x97c[i].mPosCenterOrig.x; + field_0x97c[i].mPosTopLeft.x = field_0x97c[i].mPosCenter.x - (field_0x97c[i].mSize.x / 2); + field_0x97c[i].pane->move(field_0x97c[i].mPosTopLeft.x, field_0x97c[i].mPosTopLeft.y); + } + break; + } } /* 80218818-80218944 .text selectCursorPosSet__7dName_cFi */ -void dName_c::selectCursorPosSet(int) { - /* Nonmatching */ +void dName_c::selectCursorPosSet(int row) { + if (field_0x2ab0[selMenu][2] == 1) { + charColumn = field_0x2ab0[selMenu][0]; + charRow = row; + } else { + switch (selMenu) { + case MENU_HIRA: + charColumn = 0; + break; + case MENU_KATA: + charColumn = 3; + break; +#if VERSION <= VERSION_USA + case MENU_EIGO: + charColumn = 6; + break; +#endif + case MENU_BACKSPACE: + charColumn = 8; + break; + case MENU_END: + charColumn = 10; + break; + } + + charRow = row; + field_0x2ab0[selMenu][0] = charColumn; + field_0x2ab0[selMenu][1] = charRow; + field_0x2ab0[selMenu][2] = 1; + } + + for (int i = 0; i < 3; i++) { + field_0x8d4[i].pane->show(); + } + + selectCursorMove(); + field_0x97c[0].pane->hide(); } /* 80218944-80218A48 .text menuCursorAnime__7dName_cFv */ +// NONMATCHING - one float reg swap void dName_c::menuCursorAnime() { - /* Nonmatching */ + f32 var_f1 = fopMsgM_valueIncrease(g_nmHIO.field_0x1f, field_0x97c[0].mUserArea, 0); + if (field_0x2908 != 0) { + var_f1 = 1.0f - var_f1; + } + + field_0x97c[0].mNowAlpha = (f32)g_nmHIO.field_0x21 + (u32)((g_nmHIO.field_0x20 - g_nmHIO.field_0x21) * var_f1); + fopMsgM_setAlpha(&field_0x97c[0]); + + if (field_0x97c[0].mUserArea == 0) { + field_0x97c[0].mUserArea = g_nmHIO.field_0x1f; + field_0x2908 ^= 1; + } else { + field_0x97c[0].mUserArea--; + } } /* 80218A48-80218A84 .text _draw__7dName_cFv */ void dName_c::_draw() { - /* Nonmatching */ + dComIfGd_set2DOpa(&nameIn); } /* 80218A84-8021937C .text screenSet__7dName_cFv */ +// NONMATCHING - some reg alloc at the end void dName_c::screenSet() { - /* Nonmatching */ + fopMsgM_setPaneData(&field_0x14, nameIn.NameInScr->search('cc00')); + + for (int i = 0; i < 13; i++) { +#if VERSION <= VERSION_USA + static u32 l_Eisu[] = { + 'ena', 'enb', 'enc', + 'end', 'ene', 'enf', + 'eng', 'enh', 'eni', + 'enj', 'enk', 'enl', + 'enm', + }; + fopMsgM_setPaneData(&eisuMojiPanes[i], nameIn.NameInScr->search(l_Eisu[i])); +#endif + + static u32 l_Kata[] = { + 'jka', 'jkk', 'jks', + 'jkt', 'jkn', 'jkh', + 'jkm', 'jky', 'jkr', + 'jkw', 'jkxa', 'jkxy', + 'jkxt', + }; + fopMsgM_setPaneData(&kataMojiPanes[i], nameIn.NameInScr->search(l_Kata[i])); + + static u32 l_Hira[] = { + 'jha', 'jhk', 'jhs', + 'jht', 'jhn', 'jhh', + 'jhm', 'jhy', 'jhr', + 'jhw', 'jhxa', 'jhxy', + 'jhxt', + }; + fopMsgM_setPaneData(&hiraMojiPanes[i], nameIn.NameInScr->search(l_Hira[i])); + +#if VERSION <= VERSION_USA + ((J2DTextBox*)eisuMojiPanes[i].pane)->setFont(nameIn.font); +#endif + ((J2DTextBox*)kataMojiPanes[i].pane)->setFont(nameIn.font); + ((J2DTextBox*)hiraMojiPanes[i].pane)->setFont(nameIn.font); + +#if VERSION == VERSION_PAL + static char str01[13][10] = { + "A\nN\n\xC0\n\xCF\n1", + "B\nO\n\xC1\n\xD0\n2", + "C\nP\n\xC2\n\xD1\n3", + "D\nQ\n\xC4\n\xD2\n4", + "E\nR\n\xC6\n\xD3\n5", + "F\nS\n\xC7\n\xD4\n6", + "G\nT\n\xC8\n\xD6\n7", + "H\nU\n\xC9\n\x8C\n8", + "I\nV\n\xCA\n\xD9\n9", + "J\nW\n\xCB\n\xDA\n0", + "K\nX\n\xCC\n\xDB\n,", + "L\nY\n\xCD\n\xDC\n.", + "M\nZ\n\xCE\n-\n ", + }; + + static char str02[13][10] = { + "a\nn\n\xE0\n\xEF\n1", + "b\no\n\xE1\n\xF0\n2", + "c\np\n\xE2\n\xF1\n3", + "d\nq\n\xE4\n\xF2\n4", + "e\nr\n\xE6\n\xF3\n5", + "f\ns\n\xE7\n\xF4\n6", + "g\nt\n\xE8\n\xF6\n7", + "h\nu\n\xE9\n\x9C\n8", + "i\nv\n\xEA\n\xF9\n9", + "j\nw\n\xEB\n\xFA\n0", + "k\nx\n\xEC\n\xFB\n,", + "l\ny\n\xED\n\xFC\n.", + "m\nz\n\xEE\n\xDF\n ", + }; + + ((J2DTextBox*)hiraMojiPanes[i].pane)->setString(str01[i]); + ((J2DTextBox*)kataMojiPanes[i].pane)->setString(str02[i]); +#endif + } + + fopMsgM_setPaneData(&titlePane, nameIn.NameInScr->search('dtle')); + char msg[32]; + if (strcmp(dComIfGp_getStartStageName(), "Name") != 0) { +#if VERSION <= VERSION_JPN + ((J2DTextBox*)titlePane.pane)->setString("合言葉入力"); +#elif VERSION == VERSION_USA + ((J2DTextBox*)titlePane.pane)->setString("Enter the password!"); +#else + switch (dComIfGs_getPalLanguage()) { + case 0: + ((J2DTextBox*)titlePane.pane)->setString("Enter the password!"); + break; + case 1: + ((J2DTextBox*)titlePane.pane)->setString("Paroleneingabe"); + break; + case 2: + ((J2DTextBox*)titlePane.pane)->setString("Saisissez le mot de passe."); + break; + case 3: { + strcpy(msg, "Ingresar contrasena"); + msg[17] = 0xF1; + ((J2DTextBox*)titlePane.pane)->setString(msg); + break; + } + case 4: + ((J2DTextBox*)titlePane.pane)->setString("Inserisci la parola d\'ordine"); + break; + } +#endif + } else { + fopMsgM_messageGet(msg, 0x28); + ((J2DTextBox*)titlePane.pane)->setString(msg); + } + + fopMsgM_setPaneData(&hiraBtnPane, nameIn.NameInScr->search('hira')); + ((J2DTextBox*)hiraBtnPane.pane)->setFont(nameIn.font); + + fopMsgM_setPaneData(&kanaBtnPane, nameIn.NameInScr->search('kana')); + ((J2DTextBox*)kanaBtnPane.pane)->setFont(nameIn.font); + +#if VERSION <= VERSION_USA + fopMsgM_setPaneData(&englBtnPane, nameIn.NameInScr->search('engl')); + ((J2DTextBox*)englBtnPane.pane)->setFont(nameIn.font); +#endif + + fopMsgM_setPaneData(&yazBtnPane, nameIn.NameInScr->search('yaz')); + #if VERSION <= VERSION_JPN + ((J2DTextBox*)yazBtnPane.pane)->setFont(nameIn.font); + #endif + + fopMsgM_setPaneData(&finBtnPane, nameIn.NameInScr->search('fin')); + ((J2DTextBox*)finBtnPane.pane)->setFont(nameIn.font); + + fopMsgM_setPaneData(&namePane, nameIn.NameInScr->search('name')); + ((J2DTextBox*)namePane.pane)->setFont(nameIn.font); +#if VERSION == VERSION_PAL + for (int i = 0; i < 8; i++) {} + field_0x2ae8 = ((J2DTextBox*)finBtnPane.pane)->getStringPtr(); +#endif + ((J2DTextBox*)namePane.pane)->setCharSpace(0.0f); + + for (int i = 0; i < 320; i++) { + nameBuffer[i] = 'A'; + } + nameBuffer[320 - 1] = 0; + ((J2DTextBox*)namePane.pane)->setString(nameBuffer); + + pNameTxt = ((J2DTextBox*)namePane.pane)->getStringPtr(); + *pNameTxt = 0; + JUT_ASSERT(VERSION_SELECT(1774, 1776, 2052, 2057), pNameTxt != NULL); + + fopMsgM_setPaneData(&field_0x8d4[0], nameIn.NameInScr->search('1cu1')); + fopMsgM_setPaneData(&field_0x8d4[1], nameIn.NameInScr->search('1cu2')); + fopMsgM_setPaneData(&field_0x8d4[2], nameIn.NameInScr->search('4cu')); + ((J2DTextBox*)field_0x8d4[2].pane)->setFont(nameIn.font); + + pCurTxt = ((J2DTextBox*)field_0x8d4[2].pane)->getStringPtr(); + JUT_ASSERT(VERSION_SELECT(1781, 1783, 2059, 2064), pCurTxt != NULL); + + field_0x8d4[0].mNowAlpha = g_nmHIO.field_0x17; + field_0x8d4[1].mNowAlpha = g_nmHIO.field_0x18; + + field_0x8d4[0].mUserArea = g_nmHIO.field_0x16; + field_0x8d4[1].mUserArea = g_nmHIO.field_0x19; + field_0x8d4[2].mUserArea = g_nmHIO.field_0x1a; + + field_0x2909 = 0; + field_0x2905 = 0; + field_0x2ac8 = field_0x8d4[0].pane->getRotate(); + field_0x2acc = field_0x8d4[1].pane->getRotate(); + fopMsgM_setAlpha(&field_0x8d4[0]); + fopMsgM_setAlpha(&field_0x8d4[1]); + + u32 var_r22 = '2cu1'; + u32 var_r27 = 'nk51'; + u32 var_r26 = 'nk41'; + u32 var_r25 = 'nk31'; + u32 var_r24 = 'nk21'; + u32 var_r23 = 'nk11'; + for (int i = 0; i < 5; i++) { + fopMsgM_setPaneData(&field_0x97c[i], nameIn.NameInScr->search(var_r22)); + fopMsgM_setPaneData(&field_0xcfc[i], nameIn.NameInScr->search(var_r27)); + fopMsgM_setPaneData(&field_0x107c[i], nameIn.NameInScr->search(var_r26)); +#if VERSION <= VERSION_USA + fopMsgM_setPaneData(&field_0x13fc[i], nameIn.NameInScr->search(var_r25)); +#endif + fopMsgM_setPaneData(&field_0x177c[i], nameIn.NameInScr->search(var_r24)); + fopMsgM_setPaneData(&field_0x1afc[i], nameIn.NameInScr->search(var_r23)); + + static u32 l_NameNt[] = {'d007', 'd008', 'd009', 'd010', 'd011'}; + fopMsgM_setPaneData(&field_0x1c84[i], nameIn.NameInScr->search(l_NameNt[i])); + + static u32 l_MenuNmB[] = {'c007', 'c008', 'c009', 'c010', 'c011'}; + fopMsgM_setPaneData(&field_0x20e4[i], nameIn.NameInScr->search(l_MenuNmB[i])); + + var_r22++; + var_r27++; + var_r26++; + var_r25++; + var_r24++; + var_r23++; + } + + for (int i = 0; i < 10; i++) { + static u32 l_endB[] = { + 'n501', 'n502', 'n503', 'n504', 'n505', + 'n506', 'n507', 'n508', 'n509', 'n510', + }; + fopMsgM_setPaneData(&field_0xacc[i], nameIn.NameInScr->search(l_endB[i])); + + static u32 l_ArwB[] = { + 'n401', 'n402', 'n403', 'n404', 'n405', + 'n406', 'n407', 'n408', 'n409', 'n410', + }; + fopMsgM_setPaneData(&field_0xe4c[i], nameIn.NameInScr->search(l_ArwB[i])); + + static u32 l_EisuB[] = { + 'n301', 'n302', 'n303', 'n304', 'n305', + 'n306', 'n307', 'n308', 'n309', 'n310', + }; + +#if VERSION <= VERSION_USA + fopMsgM_setPaneData(&field_0x11cc[i], nameIn.NameInScr->search(l_EisuB[i])); +#endif + + static u32 l_KataB[] = { + 'n201', 'n202', 'n203', 'n204', 'n205', + 'n206', 'n207', 'n208', 'n209', 'n210', + }; + fopMsgM_setPaneData(&field_0x154c[i], nameIn.NameInScr->search(l_KataB[i])); + + static u32 l_HiraB[] = { + 'n101', 'n102', 'n103', 'n104', 'n105', + 'n106', 'n107', 'n108', 'n109', 'n110', + }; + fopMsgM_setPaneData(&field_0x18cc[i], nameIn.NameInScr->search(l_HiraB[i])); + } + + fopMsgM_setPaneData(&field_0x1c4c, nameIn.NameInScr->search('3cu1')); + fopMsgM_paneTrans(&field_0x1c4c, g_nmHIO.field_0x28, g_nmHIO.field_0x26); + field_0x2906 = 0; + field_0x1c4c.mUserArea = g_nmHIO.field_0x1b; + field_0x1c4c.mNowAlpha = g_nmHIO.field_0x1d; + fopMsgM_setAlpha(&field_0x1c4c); + + u32 var_r21 = 'd000'; + u32 var_r22_2 = 'dk00'; + u32 var_r23_2 = 'c000'; + u32 var_r24_2 = 'ck00'; + for (int i = 0; i < 7; i++) { + fopMsgM_setPaneData(&field_0x1d9c[i], nameIn.NameInScr->search(var_r21)); + fopMsgM_setPaneData(&field_0x1f24[i], nameIn.NameInScr->search(var_r22_2)); + fopMsgM_setPaneData(&field_0x21fc[i], nameIn.NameInScr->search(var_r23_2)); + fopMsgM_setPaneData(&field_0x2384[i], nameIn.NameInScr->search(var_r24_2)); + + var_r21++; + var_r22_2++; + var_r23_2++; + var_r24_2++; + } + + u32 var_r21_2 = 'b000'; + u32 var_r22_3 = 'bk00'; + for (int i = 0; i < 9; i++) { + fopMsgM_setPaneData(&field_0x250c[i], nameIn.NameInScr->search(var_r21_2)); + fopMsgM_setPaneData(&field_0x2704[i], nameIn.NameInScr->search(var_r22_3)); + + var_r21_2++; + var_r22_3++; + } } /* 8021937C-8021960C .text paneTransInit__7dName_cFv */ void dName_c::paneTransInit() { - /* Nonmatching */ + paneTransTimer = 0; + + PaneTranceBase0(paneTransTimer, g_nmHIO.field_0x8, g_nmHIO.field_0x46, 0.0f, 1, 0); + PaneTranceTitle(paneTransTimer, g_nmHIO.field_0x6, g_nmHIO.field_0x42, 0.0f, 1, 0); + PaneTranceName(paneTransTimer, g_nmHIO.field_0x7, g_nmHIO.field_0x44, 0.0f, 1, 0); + PaneTranceBase(paneTransTimer, g_nmHIO.field_0x8, g_nmHIO.field_0x46, 0.0f, 1, 0); + PaneTranceKata(paneTransTimer, g_nmHIO.field_0x9, g_nmHIO.field_0x48, 0.0f, 1, 0); + PaneTranceHira(paneTransTimer, g_nmHIO.field_0xa, g_nmHIO.field_0x48, 0.0f, 1, 0); +#if VERSION <= VERSION_USA + PaneTranceEisu(paneTransTimer, g_nmHIO.field_0xb, g_nmHIO.field_0x48, 0.0f, 1, 0); +#endif + PaneTranceArrow(paneTransTimer, g_nmHIO.field_0xc, g_nmHIO.field_0x48, 0.0f, 1, 0); + PaneTranceEnd(paneTransTimer, g_nmHIO.field_0xd, g_nmHIO.field_0x48, 0.0f, 1, 0); } /* 8021960C-802197A0 .text PaneTranceTitle__7dName_cFsUcffUci */ -void dName_c::PaneTranceTitle(s16, u8, f32, f32, u8, int) { - /* Nonmatching */ +int dName_c::PaneTranceTitle(s16 i_value, u8 i_max, f32 param_2, f32 param_3, u8 i_mode, int param_5) { + int i; + + if (i_value < 0) { + return 0; + } + + if (i_value > i_max) { + return 1; + } + + f32 ratio = fopMsgM_valueIncrease(i_max, i_value, i_mode); + f32 temp_f0 = ratio * (param_3 - param_2); + fopMsgM_paneTrans(&titlePane, 0.0f, param_2 + temp_f0); + + for (i = 0; i < 5; i++) { + fopMsgM_paneTrans(&field_0x20e4[i], 0.0f, param_2 + temp_f0); + } + + fopMsgM_paneTrans(&field_0x21fc[0], 0.0f, param_2 + temp_f0); + fopMsgM_paneTrans(&field_0x2384[0], 0.0f, param_2 + temp_f0); + + if (param_5 != 2) { + if (param_5 == 1) { + ratio = 1.0f - ratio; + } + + fopMsgM_setNowAlpha(&titlePane, ratio); + fopMsgM_setAlpha(&titlePane); + + for (i = 0; i < 5; i++) { + fopMsgM_setNowAlpha(&field_0x20e4[i], ratio); + fopMsgM_setAlpha(&field_0x20e4[i]); + } + + fopMsgM_setNowAlpha(&field_0x21fc[0], ratio); + fopMsgM_setNowAlpha(&field_0x2384[0], ratio); + fopMsgM_setAlpha(&field_0x21fc[0]); + fopMsgM_setAlpha(&field_0x2384[0]); + } + + return 0; } /* 802197A0-802199F4 .text PaneTranceName__7dName_cFsUcffUci */ -void dName_c::PaneTranceName(s16, u8, f32, f32, u8, int) { - /* Nonmatching */ +int dName_c::PaneTranceName(s16 i_value, u8 i_max, f32 param_2, f32 param_3, u8 i_mode, int param_5) { + int i; + + if (i_value < 0) { + return 0; + } + + if (i_value > i_max) { + return 1; + } + + f32 ratio = fopMsgM_valueIncrease(i_max, i_value, i_mode); + f32 temp_f0 = ratio * (param_3 - param_2); + fopMsgM_paneTrans(&namePane, param_2 + temp_f0, 0.0f); + fopMsgM_paneTrans(&field_0x1f24[0], param_2 + temp_f0, 0.0f); + fopMsgM_paneTrans(&field_0x1c4c, (g_nmHIO.field_0x28 + (param_2 + temp_f0)) + (curPos * g_nmHIO.field_0x1c), g_nmHIO.field_0x26); + + for (i = 0; i < 5; i++) { + fopMsgM_paneTrans(&field_0x1c84[i], param_2 + temp_f0, 0.0f); + } + + for (i = 0; i < 7; i++) { + fopMsgM_paneTrans(&field_0x1d9c[i], param_2 + temp_f0, 0.0f); + } + + if (param_5 != 2) { + if (param_5 == 1) { + ratio = 1.0f - ratio; + } + + fopMsgM_setNowAlpha(&namePane, ratio); + fopMsgM_setNowAlpha(&field_0x1f24[0], ratio); + fopMsgM_setAlpha(&namePane); + fopMsgM_setAlpha(&field_0x1f24[0]); + + fopMsgM_setNowAlpha(&field_0x1c4c, ratio); + fopMsgM_setAlpha(&field_0x1c4c); + + for (i = 0; i < 5; i++) { + fopMsgM_setNowAlpha(&field_0x1c84[i], ratio); + fopMsgM_setAlpha(&field_0x1c84[i]); + } + + for (i = 0; i < 7; i++) { + fopMsgM_setNowAlpha(&field_0x1d9c[i], ratio); + fopMsgM_setAlpha(&field_0x1d9c[i]); + } + } + + return 0; } /* 802199F4-80219ADC .text PaneTranceBase0__7dName_cFsUcffUci */ -void dName_c::PaneTranceBase0(s16, u8, f32, f32, u8, int) { - /* Nonmatching */ +int dName_c::PaneTranceBase0(s16 i_value, u8 i_max, f32 param_2, f32 param_3, u8 i_mode, int param_5) { + int i; + + if (i_value < 0) { + return 0; + } + + if (i_value > i_max) { + return 1; + } + + f32 ratio = fopMsgM_valueIncrease(i_max, i_value, i_mode); + f32 temp_f0 = ratio * (param_3 - param_2); + fopMsgM_paneTrans(&field_0x14, 0.0f, param_2 + temp_f0); + + if (param_5 != 2) { + if (param_5 == 1) { + ratio = 1.0f - ratio; + } + + fopMsgM_setNowAlpha(&field_0x14, ratio); + fopMsgM_setAlpha(&field_0x14); + } + + return 0; } /* 80219ADC-80219D04 .text PaneTranceBase__7dName_cFsUcffUci */ -void dName_c::PaneTranceBase(s16, u8, f32, f32, u8, int) { - /* Nonmatching */ +int dName_c::PaneTranceBase(s16 i_value, u8 i_max, f32 param_2, f32 param_3, u8 i_mode, int param_5) { + int i; + + if (i_value < 0) { + return 0; + } + + if (i_value > i_max) { + return 1; + } + + fopMsgM_pane_class* pane; + switch (mojiSet) { + case MOJI_HIRA: + pane = hiraMojiPanes; + break; + case MOJI_KATA: + pane = kataMojiPanes; + break; +#if VERSION <= VERSION_USA + case MOJI_EIGO: + pane = eisuMojiPanes; + break; +#endif + } + + f32 ratio = fopMsgM_valueIncrease(i_max, i_value, i_mode); + f32 temp_f0 = ratio * (param_3 - param_2); + fopMsgM_paneTrans(&field_0x250c[0], 0.0f, param_2 + temp_f0); + fopMsgM_paneTrans(&field_0x2704[0], 0.0f, param_2 + temp_f0); + + for (i = 0; i < 3; i++) { + fopMsgM_paneTrans(&field_0x8d4[i], 0.0f, param_2 + temp_f0); + } + + for (i = 0; i < 13; i++) { + fopMsgM_paneTrans(&hiraMojiPanes[i], 0.0f, param_2 + temp_f0); + fopMsgM_paneTrans(&kataMojiPanes[i], 0.0f, param_2 + temp_f0); +#if VERSION <= VERSION_USA + fopMsgM_paneTrans(&eisuMojiPanes[i], 0.0f, param_2 + temp_f0); +#endif + } + + if (param_5 != 2) { + if (param_5 == 1) { + ratio = 1.0f - ratio; + } + + fopMsgM_setNowAlpha(&field_0x250c[0], ratio); + fopMsgM_setNowAlpha(&field_0x2704[0], ratio); + fopMsgM_setAlpha(&field_0x250c[0]); + fopMsgM_setAlpha(&field_0x2704[0]); + + for (i = 0; i < 3; i++) { + fopMsgM_setNowAlpha(&field_0x8d4[i], ratio); + fopMsgM_setAlpha(&field_0x8d4[i]); + } + + for (i = 0; i < 13; i++) { + fopMsgM_setNowAlpha(&pane[i], ratio); + fopMsgM_setAlpha(&pane[i]); + } + } + + return 0; } /* 80219D04-80219E14 .text PaneTranceHira__7dName_cFsUcffUci */ -void dName_c::PaneTranceHira(s16, u8, f32, f32, u8, int) { - /* Nonmatching */ +int dName_c::PaneTranceHira(s16 i_value, u8 i_max, f32 param_2, f32 param_3, u8 i_mode, int param_5) { + int i; + + if (i_value < 0) { + return 0; + } + + if (i_value > i_max) { + return 1; + } + + f32 ratio = fopMsgM_valueIncrease(i_max, i_value, i_mode); + f32 temp_f0 = ratio * (param_3 - param_2); + fopMsgM_paneTrans(&field_0x1afc[0], 0.0f, param_2 + temp_f0); + + if (param_5 != 2) { + if (param_5 == 1) { + ratio = 1.0f - ratio; + } + + fopMsgM_setNowAlpha(&hiraBtnPane, ratio); + fopMsgM_setNowAlpha(&field_0x1afc[0], ratio); + fopMsgM_setNowAlpha(&field_0x18cc[0], ratio); + fopMsgM_setAlpha(&hiraBtnPane); + fopMsgM_setAlpha(&field_0x1afc[0]); + fopMsgM_setAlpha(&field_0x18cc[0]); + } + + return 0; } /* 80219E14-80219F24 .text PaneTranceKata__7dName_cFsUcffUci */ -void dName_c::PaneTranceKata(s16, u8, f32, f32, u8, int) { - /* Nonmatching */ +int dName_c::PaneTranceKata(s16 i_value, u8 i_max, f32 param_2, f32 param_3, u8 i_mode, int param_5) { + int i; + + if (i_value < 0) { + return 0; + } + + if (i_value > i_max) { + return 1; + } + + f32 ratio = fopMsgM_valueIncrease(i_max, i_value, i_mode); + f32 temp_f0 = ratio * (param_3 - param_2); + fopMsgM_paneTrans(&field_0x177c[0], 0.0f, param_2 + temp_f0); + + if (param_5 != 2) { + if (param_5 == 1) { + ratio = 1.0f - ratio; + } + + fopMsgM_setNowAlpha(&kanaBtnPane, ratio); + fopMsgM_setNowAlpha(&field_0x154c[0], ratio); + fopMsgM_setNowAlpha(&field_0x177c[0], ratio); + fopMsgM_setAlpha(&kanaBtnPane); + fopMsgM_setAlpha(&field_0x154c[0]); + fopMsgM_setAlpha(&field_0x177c[0]); + } + + return 0; } /* 80219F24-8021A034 .text PaneTranceEisu__7dName_cFsUcffUci */ -void dName_c::PaneTranceEisu(s16, u8, f32, f32, u8, int) { - /* Nonmatching */ +int dName_c::PaneTranceEisu(s16 i_value, u8 i_max, f32 param_2, f32 param_3, u8 i_mode, int param_5) { + int i; + + if (i_value < 0) { + return 0; + } + + if (i_value > i_max) { + return 1; + } + + f32 ratio = fopMsgM_valueIncrease(i_max, i_value, i_mode); + f32 temp_f0 = ratio * (param_3 - param_2); + fopMsgM_paneTrans(&field_0x13fc[0], 0.0f, param_2 + temp_f0); + + if (param_5 != 2) { + if (param_5 == 1) { + ratio = 1.0f - ratio; + } + + fopMsgM_setNowAlpha(&englBtnPane, ratio); + fopMsgM_setNowAlpha(&field_0x11cc[0], ratio); + fopMsgM_setNowAlpha(&field_0x13fc[0], ratio); + fopMsgM_setAlpha(&englBtnPane); + fopMsgM_setAlpha(&field_0x11cc[0]); + fopMsgM_setAlpha(&field_0x13fc[0]); + } + + return 0; } /* 8021A034-8021A144 .text PaneTranceArrow__7dName_cFsUcffUci */ -void dName_c::PaneTranceArrow(s16, u8, f32, f32, u8, int) { - /* Nonmatching */ +int dName_c::PaneTranceArrow(s16 i_value, u8 i_max, f32 param_2, f32 param_3, u8 i_mode, int param_5) { + int i; + + if (i_value < 0) { + return 0; + } + + if (i_value > i_max) { + return 1; + } + + f32 ratio = fopMsgM_valueIncrease(i_max, i_value, i_mode); + f32 temp_f0 = ratio * (param_3 - param_2); + fopMsgM_paneTrans(&field_0x107c[0], 0.0f, param_2 + temp_f0); + + if (param_5 != 2) { + if (param_5 == 1) { + ratio = 1.0f - ratio; + } + + fopMsgM_setNowAlpha(&yazBtnPane, ratio); + fopMsgM_setNowAlpha(&field_0xe4c[0], ratio); + fopMsgM_setNowAlpha(&field_0x107c[0], ratio); + fopMsgM_setAlpha(&yazBtnPane); + fopMsgM_setAlpha(&field_0xe4c[0]); + fopMsgM_setAlpha(&field_0x107c[0]); + } + + return 0; } /* 8021A144-8021A254 .text PaneTranceEnd__7dName_cFsUcffUci */ -void dName_c::PaneTranceEnd(s16, u8, f32, f32, u8, int) { - /* Nonmatching */ +int dName_c::PaneTranceEnd(s16 i_value, u8 i_max, f32 param_2, f32 param_3, u8 i_mode, int param_5) { + int i; + + if (i_value < 0) { + return 0; + } + + if (i_value > i_max) { + return 1; + } + + f32 ratio = fopMsgM_valueIncrease(i_max, i_value, i_mode); + f32 temp_f0 = ratio * (param_3 - param_2); + fopMsgM_paneTrans(&field_0xcfc[0], 0.0f, param_2 + temp_f0); + + if (param_5 != 2) { + if (param_5 == 1) { + ratio = 1.0f - ratio; + } + + fopMsgM_setNowAlpha(&finBtnPane, ratio); + fopMsgM_setNowAlpha(&field_0xacc[0], ratio); + fopMsgM_setNowAlpha(&field_0xcfc[0], ratio); + fopMsgM_setAlpha(&finBtnPane); + fopMsgM_setAlpha(&field_0xacc[0]); + fopMsgM_setAlpha(&field_0xcfc[0]); + } + + return 0; } /* 8021A254-8021A43C .text displayInit__7dName_cFv */ void dName_c::displayInit() { - /* Nonmatching */ + int i; + + field_0x290d = 1; + + for (i = 0; i < 5; i++) { + field_0x2ab0[i][2] = 0; + } + + charColumn = 0; + charRow = 0; + field_0x2ab0[0][0] = 0; + field_0x2ab0[0][1] = 0; + field_0x2ab0[0][2] = 1; + curPos = 0; + + *pNameTxt = 0; + + for (i = 0; i < 8; i++) { + chrInfo[i].column = 7; + chrInfo[i].row = 1; +#if VERSION <= VERSION_JPN || VERSION == VERSION_PAL + chrInfo[i].set = MOJI_HIRA; +#else + chrInfo[i].set = MOJI_EIGO; +#endif + chrInfo[i].field_0x3 = 1; +#if VERSION <= VERSION_JPN + chrInfo[i].character = '\x81\x40'; +#else + chrInfo[i].character = ' '; +#endif + } + + inputCompleteSound = JA_SE_TALK_WIN_CLOSE; + + if (strcmp(dComIfGp_getStartStageName(), "Name") == 0) { + field_0x14.pane->hide(); + if (nextNameStr[0] != 0) { + NameStrSet(); + } + +#if VERSION == VERSION_PAL + char msg[32]; + fopMsgM_messageGet(msg, 0x28); + ((J2DTextBox*)titlePane.pane)->setString(msg); +#endif + + inputCompleteSound = JA_SE_MSEL_ENTER_GAME; + } + +#if VERSION == VERSION_PAL + switch (dComIfGs_getPalLanguage()) { + case 0: + strcpy(field_0x2ae8, "END"); + break; + case 1: + strcpy(field_0x2ae8, "O.K."); + break; + case 2: + strcpy(field_0x2ae8, "FIN"); + break; + case 3: + strcpy(field_0x2ae8, "FIN"); + break; + case 4: + strcpy(field_0x2ae8, "FINE"); + break; + } +#endif + +#if VERSION <= VERSION_JPN || VERSION == VERSION_PAL + selMenu = MENU_HIRA; + mojiSet = MOJI_HIRA; +#else + selMenu = MENU_BACKSPACE; + mojiSet = MOJI_EIGO; + + field_0x1afc[0].pane->hide(); + field_0x177c[0].pane->hide(); + field_0x13fc[0].pane->hide(); +#endif + + selProc = PROC_MOJI_SELECT; + + for (i = 0; i < 13; i++) { + fopMsgM_setInitAlpha(&hiraMojiPanes[i]); +#if VERSION <= VERSION_USA + fopMsgM_setInitAlpha(&eisuMojiPanes[i]); +#endif + fopMsgM_setInitAlpha(&kataMojiPanes[i]); + fopMsgM_setAlpha(&hiraMojiPanes[i]); +#if VERSION <= VERSION_USA + fopMsgM_setAlpha(&eisuMojiPanes[i]); +#endif + fopMsgM_setAlpha(&kataMojiPanes[i]); + +#if VERSION <= VERSION_JPN + hiraMojiPanes[i].pane->show(); + eisuMojiPanes[i].pane->hide(); + kataMojiPanes[i].pane->hide(); +#elif VERSION == VERSION_USA + hiraMojiPanes[i].pane->hide(); + eisuMojiPanes[i].pane->show(); + kataMojiPanes[i].pane->hide(); +#else + hiraMojiPanes[i].pane->show(); + kataMojiPanes[i].pane->hide(); +#endif + } + + field_0x97c[0].pane->hide(); + + for (i = 0; i < 3; i++) { + field_0x8d4[i].pane->show(); + } + + selectCursorTxtChange(); + isInputEnd_ = 0; } /* 8021A43C-8021A658 .text NameStrSet__7dName_cFv */ void dName_c::NameStrSet() { - /* Nonmatching */ + char* moji = nextNameStr; + + int i = 0; + int j; + BOOL found; + while (*moji != 0) { +#if VERSION == VERSION_PAL + chrInfo[i].character = *moji; + + found = false; + for (j = 0; j < 13; j++) { + if (found) + break; + + char* upperMoji = ((J2DTextBox*)hiraMojiPanes[j].pane)->getStringPtr(); + char* lowerMoji = ((J2DTextBox*)kataMojiPanes[j].pane)->getStringPtr(); + + int row = 0; + while (*upperMoji != 0) { + if (*upperMoji == '\n') { + upperMoji++; + continue; + } + + if (*upperMoji == chrInfo[i].character) { + chrInfo[i].column = j; + chrInfo[i].row = row; + chrInfo[i].set = MOJI_HIRA; + found = true; + break; + } + + row++; + upperMoji++; + } + + row = 0; + while (*lowerMoji != 0) { + if (*lowerMoji == '\n') { + lowerMoji++; + continue; + } + + if (*lowerMoji == chrInfo[i].character) { + chrInfo[i].column = j; + chrInfo[i].row = row; + chrInfo[i].set = MOJI_KATA; + found = true; + break; + } + + row++; + lowerMoji++; + } + } + moji++; + i++; +#else + if (*(u8*)moji >> 4 == 8 || *(u8*)moji >> 4 == 9) { + chrInfo[i].character = *(u16*)moji; + + found = false; + for (j = 0; j < 13; j++) { + if (found) + break; + + char* hiraMoji = ((J2DTextBox*)hiraMojiPanes[j].pane)->getStringPtr(); + char* kataMoji = ((J2DTextBox*)kataMojiPanes[j].pane)->getStringPtr(); + + int row = 0; + while (*hiraMoji != 0) { + if (*hiraMoji == '\n') { + hiraMoji++; + continue; + } + + if (*(u16*)hiraMoji == chrInfo[i].character) { + chrInfo[i].column = j; + chrInfo[i].row = row; + chrInfo[i].set = MOJI_HIRA; + found = true; + break; + } + + row++; + hiraMoji += 2; + } + + row = 0; + while (*kataMoji != 0) { + if (*kataMoji == '\n') { + kataMoji++; + continue; + } + + if (*(u16*)kataMoji == chrInfo[i].character) { + chrInfo[i].column = j; + chrInfo[i].row = row; + chrInfo[i].set = MOJI_KATA; + found = true; + break; + } + + row++; + kataMoji += 2; + } + } + moji += 2; + i++; + } else { + chrInfo[i].character = *moji; + chrInfo[i].set = MOJI_EIGO; + + found = false; + for (j = 0; j < 13; j++) { + if (found) + break; + + char* eisuMoji = ((J2DTextBox*)eisuMojiPanes[j].pane)->getStringPtr(); + + int row = 0; + while (*eisuMoji != 0) { + if (*eisuMoji == '\n') { + eisuMoji++; + continue; + } + + if (*eisuMoji == chrInfo[i].character) { + chrInfo[i].column = j; + chrInfo[i].row = row; + found = true; + break; + } + + row++; + eisuMoji++; + } + } + moji++; + i++; + } +#endif + } + + curPos = i; + setNameText(); + nameCursorMove(); } /* 8021A658-8021A6BC .text draw__14dDlst_NameIN_cFv */ void dDlst_NameIN_c::draw() { - /* Nonmatching */ + J2DOrthoGraph* graf = dComIfGp_getCurrentGrafPort(); + graf->setPort(); + NameInScr->draw(0.0f, 0.0f, graf); }