d_s_open_sub work

This commit is contained in:
Jasper St. Pierre
2024-07-01 23:35:25 -07:00
parent 6d078a7eeb
commit 30103693f5
6 changed files with 433 additions and 98 deletions
+1
View File
@@ -52,6 +52,7 @@ public:
void setBlack(JUtility::TColor c) { mBlack = c; }
void setWhite(JUtility::TColor c) { mBlack = c; }
void setLineSpace(f32 x) { mLineSpace = x; }
f32 getLineSpace() const { return mLineSpace; }
void setCharSpace(f32 x) { mCharSpace = x; }
void draw(f32, f32, f32, J2DTextBoxHBinding);
char* getStringPtr() const;
+25 -2
View File
@@ -2,6 +2,7 @@
#define D_S_OPEN
#include "d/d_drawlist.h"
#include "f_op/f_op_msg_mng.h"
#include "f_op/f_op_scene.h"
class J2DScreen;
@@ -13,6 +14,24 @@ public:
virtual ~dScnOpen_message_c();
void set_message(u32, int);
void exec();
public:
/* 0x0000 */ u8 field_0x00[0x2000];
/* 0x2004 */ fopMsgM_msgDataProc_c mMsgDataProc;
/* 0x22A4 */ u8 field_0x22a4[0x22c0 - 0x22a4];
/* 0x22C0 */ u32 field_0x22c0;
/* 0x22C4 */ J2DTextBox* field_0x22c4;
/* 0x22C8 */ J2DTextBox* field_0x22c8;
/* 0x22CC */ JUTFont* tFont;
/* 0x22D0 */ JUTFont* rFont;
/* 0x22D4 */ JKRExpHeap* exp_heap;
/* 0x22D8 */ f32 field_0x22d8;
/* 0x22DC */ u32 field_0x22dc;
/* 0x22E0 */ u32 field_0x22e0;
/* 0x22E4 */ u32 field_0x22e4;
/* 0x22E8 */ u8 field_0x22e8;
/* 0x22EC */ u32 field_0x22ec;
/* 0x22F0 */ u32 field_0x22f0;
};
class dScnOpen_proc_c : public dDlst_base_c {
@@ -37,8 +56,12 @@ public:
/* 0x030 */ J2DPane* mak2;
/* 0x034 */ J2DTextBox* tx1;
/* 0x038 */ J2DTextBox* tx2;
/* 0x03C */ u8 pad[0x2B0 - 0x03C];
/* 0x2B0 */ s32 field_0x2b0;
/* 0x03C */ fopMsgM_pane_class pane[11];
/* 0x2A4 */ f32 mPosX;
/* 0x2A8 */ f32 mAlpha;
/* 0x2AC */ s32 mTimer;
/* 0x2B0 */ s32 mState;
/* 0x2B4 */ f32 mScale;
/* 0x010 */ u8 pad2[0x014];
};
+95
View File
@@ -55,6 +55,101 @@ struct fopMsgM_pane_alpha_class {
/* 0x05 */ u8 mNowAlpha;
};
class fopMsgM_msgDataProc_c {
public:
fopMsgM_msgDataProc_c();
virtual ~fopMsgM_msgDataProc_c();
void dataInit();
void charLength(int, int, bool);
void rubyLength(int, bool);
void stringLength();
void stringShift();
void iconSelect(int, u8);
void iconIdxRefresh();
void selectCheck2(J2DPane*, int, int, int);
void selectCheck3(J2DPane*, int, int, int);
void selectCheckYoko(J2DPane*, int, int, int);
void inputNumber(int);
void selectArrow(J2DPicture*, f32, f32, f32, f32);
void selectArrow(J2DPicture*, f32, f32);
void colorAnime(J2DPicture*);
void stringSet();
void setSelectFlagYokoOn();
void setSelectFlagOn();
void setHandSendFlagOn();
void setAutoSendFlagOn();
void getHandSendFlag();
void getAutoSendFlag();
void getString(char*, u32);
void getString(char*, char*, char*, char*, u32, f32*, f32*, int*);
void getRubyString(char*, char*, char*, char*, char*, char*, f32*, f32*, int*);
void tag_len_kaisen_game(int*, f32*, int*, int*, int*);
void tag_len_rupee(int*, f32*, int*, int*, int*);
void tag_len_num_input(int*, f32*, int*, int*, int*);
void tag_len_sword_game(int*, f32*, int*, int*, int*);
void tag_len_letter_game(int*, f32*, int*, int*, int*);
void tag_len_letter_game_max(int*, f32*, int*, int*, int*);
void tag_len_fish(int*, f32*, int*, int*, int*);
void tag_len_fish_rupee(int*, f32*, int*, int*, int*);
void tag_len_letter(int*, f32*, int*, int*, int*);
void tag_len_rescue(int*, f32*, int*, int*, int*);
void tag_len_forest_timer(int*, f32*, int*, int*, int*);
void tag_len_birdman(int*, f32*, int*, int*, int*);
void tag_len_point(int*, f32*, int*, int*, int*);
void tag_len_get_pendant(int*, f32*, int*, int*, int*);
void tag_len_rev_pendant(int*, f32*, int*, int*, int*);
void tag_len_pig_timer(int*, f32*, int*, int*, int*);
void tag_len_get_bomb(int*, f32*, int*, int*, int*);
void tag_len_get_arrow(int*, f32*, int*, int*, int*);
void tag_len_stock_bokobaba(int*, f32*, int*, int*, int*);
void tag_len_stock_dokuro(int*, f32*, int*, int*, int*);
void tag_len_stock_chuchu(int*, f32*, int*, int*, int*);
void tag_len_stock_pendant(int*, f32*, int*, int*, int*);
void tag_len_stock_hane(int*, f32*, int*, int*, int*);
void tag_len_stock_kenshi(int*, f32*, int*, int*, int*);
void tag_len_terry_rupee(int*, f32*, int*, int*, int*);
void tag_len_input_bokobaba(int*, f32*, int*, int*, int*);
void tag_len_input_dokuro(int*, f32*, int*, int*, int*);
void tag_len_input_chuchu(int*, f32*, int*, int*, int*);
void tag_len_input_pendant(int*, f32*, int*, int*, int*);
void tag_len_input_hane(int*, f32*, int*, int*, int*);
void tag_len_input_kenshi(int*, f32*, int*, int*, int*);
void tag_kaisen_game();
void tag_rupee();
void tag_num_input();
void tag_sword_game();
void tag_letter_game();
void tag_letter_game_max();
void tag_fish();
void tag_fish_rupee();
void tag_letter();
void tag_rescue();
void tag_forest_timer();
void tag_birdman();
void tag_point();
void tag_get_pendant();
void tag_rev_pendant();
void tag_pig_timer();
void tag_get_bomb();
void tag_get_arrow();
void tag_stock_bokobaba();
void tag_stock_dokuro();
void tag_stock_chuchu();
void tag_stock_pendant();
void tag_stock_hane();
void tag_stock_kenshi();
void tag_terry_rupee();
void tag_input_bokobaba();
void tag_input_dokuro();
void tag_input_chuchu();
void tag_input_pendant();
void tag_input_hane();
void tag_input_kenshi();
public:
/* 0x000 */ u8 field_0x00[0x29C];
};
typedef int (*fopMsgCreateFunc)(void*);
JKRExpHeap* fopMsgM_createExpHeap(u32, JKRHeap*);
+3
View File
@@ -651,6 +651,9 @@ JKRHeap* mDoExt_setCurrentHeap(JKRHeap* pHeap);
JUTFont* mDoExt_getMesgFont();
JUTFont* mDoExt_getRubyFont();
void mDoExt_removeMesgFont();
void mDoExt_removeRubyFont();
extern JKRExpHeap* zeldaHeap;
extern JKRExpHeap* gameHeap;
extern JKRExpHeap* commandHeap;
+309 -4
View File
@@ -6,6 +6,8 @@
#include "d/d_s_open.h"
#include "d/d_com_inf_game.h"
#include "f_op/f_op_msg_mng.h"
#include "f_op/f_op_overlap_mng.h"
#include "JSystem/J2DGraph/J2DOrthoGraph.h"
#include "JSystem/J2DGraph/J2DScreen.h"
#include "JSystem/J2DGraph/J2DTextBox.h"
#include "JSystem/JKernel/JKRExpHeap.h"
@@ -22,13 +24,24 @@ void dScnOpen_message_c::exec() {
}
/* 80233524-80233620 .text __ct__18dScnOpen_message_cFP10JKRExpHeap */
dScnOpen_message_c::dScnOpen_message_c(JKRExpHeap*) {
dScnOpen_message_c::dScnOpen_message_c(JKRExpHeap* heap) {
/* Nonmatching */
exp_heap = heap;
JKRHeap* old_heap = mDoExt_setCurrentHeap(exp_heap);
tFont = mDoExt_getMesgFont();
JUT_ASSERT(0xCD, tFont != NULL);
rFont = mDoExt_getRubyFont();
JUT_ASSERT(0xD0, rFont != NULL);
mDoExt_setCurrentHeap(old_heap);
}
/* 80233620-80233698 .text __dt__18dScnOpen_message_cFv */
dScnOpen_message_c::~dScnOpen_message_c() {
/* Nonmatching */
mDoExt_removeMesgFont();
mDoExt_removeRubyFont();
JKRHeap* old_heap = mDoExt_setCurrentHeap(exp_heap);
mDoExt_setCurrentHeap(old_heap);
}
/* 80233698-80233B0C .text __ct__15dScnOpen_proc_cFv */
@@ -36,7 +49,7 @@ dScnOpen_proc_c::dScnOpen_proc_c() {
/* Nonmatching */
exp_heap = fopMsgM_createExpHeap(0x20000);
JUT_ASSERT(0xe2, exp_heap != NULL);
JKRHeap* oldHeap = mDoExt_setCurrentHeap(exp_heap);
JKRHeap* old_heap = mDoExt_setCurrentHeap(exp_heap);
m_Screen = new J2DScreen();
JUT_ASSERT(0xe7, m_Screen != NULL);
m_message = new dScnOpen_message_c(exp_heap);
@@ -56,21 +69,313 @@ dScnOpen_proc_c::dScnOpen_proc_c() {
tx1 = (J2DTextBox*)m_Screen->search('\0tx1');
tx2 = (J2DTextBox*)m_Screen->search('\0tx2');
tx1->move(tx1->mBounds.i.x, 376.0f);
m_message->field_0x22c4 = tx1;
m_message->field_0x22c8 = tx2;
m_message->field_0x22c4->setFont(m_message->tFont);
m_message->field_0x22c8->setFont(m_message->rFont);
m_message->field_0x22c8->setLineSpace(m_message->field_0x22c4->getLineSpace());
for (s32 i = 0; i < (s32)ARRAY_SIZE(pane); i++) {
fopMsgM_setPaneData(&pane[i], &d1[i]);
fopMsgM_setNowAlpha(&pane[i], 0.0f);
fopMsgM_setAlpha(&pane[i]);
}
for (s32 i = 7; i < 9; i++) {
fopMsgM_setNowAlpha(&pane[i], 1.0f);
fopMsgM_setAlpha(&pane[i]);
}
m_message->set_message(0, 0);
mState = 0;
mDoExt_setCurrentHeap(old_heap);
}
/* 80233B0C-80233BE4 .text __dt__15dScnOpen_proc_cFv */
dScnOpen_proc_c::~dScnOpen_proc_c() {
/* Nonmatching */
JKRHeap* old_heap = mDoExt_setCurrentHeap(exp_heap);
delete m_Screen;
m_Screen = NULL;
delete m_message;
m_message = NULL;
mDoExt_setCurrentHeap(old_heap);
fopMsgM_destroyExpHeap(exp_heap);
}
/* 80233BE4-802344D8 .text proc_execute__15dScnOpen_proc_cFv */
void dScnOpen_proc_c::proc_execute() {
/* Nonmatching */
JKRHeap* old_heap = mDoExt_setCurrentHeap(exp_heap);
m_message->exec();
switch (mState) {
case 0:
mTimer = 0;
mState = 1;
case 1:
if (mTimer >= 90)
mState = 2;
else
mTimer++;
if (mTimer == 40 && ! fopOvlpM_IsPeek())
mDoAud_bgmStreamPrepare(JA_STRM_DEMO_01_01);
break;
case 2:
mDoAud_bgmStreamPlay();
m_message->set_message(0x58e, 1);
fopMsgM_paneTrans(&pane[9], 0.0f, -190.0f);
fopMsgM_paneTrans(&pane[10], 0.0f, -190.0f);
mState = 3;
case 3:
if (m_message->field_0x22e8 != 0)
mState = 4;
break;
case 4:
fopMsgM_paneTrans(&pane[9], 0.0f, 0.0f);
fopMsgM_paneTrans(&pane[10], 0.0f, 0.0f);
mTimer = 0;
mState = 5;
case 5:
if (mTimer >= 60)
mState = 6;
else
mTimer++;
break;
case 6:
fopMsgM_setNowAlpha(&pane[0], 0.0f);
mPosX = 0.0f;
mAlpha = 0.0f;
mState = 7;
case 7:
mPosX -= 0.5719626f;
mAlpha += 0.067f;
if (mAlpha >= 1.0f) {
mAlpha = 1.0f;
mState = 8;
}
fopMsgM_paneTrans(&pane[0], 0.0f, mPosX);
fopMsgM_setNowAlpha(&pane[0], mAlpha);
break;
case 8:
m_message->set_message(0x579, 2);
fopMsgM_setNowAlpha(&pane[0], 1.0f);
mState = 9;
case 9:
mPosX -= 0.5719626f;
if (m_message->field_0x22e8 != 0)
mState = 10;
fopMsgM_paneTrans(&pane[0], 0.0f, mPosX);
break;
case 10:
fopMsgM_setNowAlpha(&pane[0], 1.0f);
fopMsgM_setNowAlpha(&pane[1], 0.0f);
mAlpha = 0;
mState = 11;
case 11:
mPosX -= 0.5719626f;
mAlpha += 0.0223f;
if (mAlpha >= 1.0f) {
mAlpha = 1.0f;
mState = 12;
}
fopMsgM_paneTrans(&pane[0], 0.0f, mPosX);
fopMsgM_setNowAlpha(&pane[0], 1.0f - mAlpha);
fopMsgM_setNowAlpha(&pane[1], mAlpha);
break;
case 12:
m_message->set_message(0x57b, 3);
mState = 13;
case 13:
if (m_message->field_0x22e8 != 0)
mState = 14;
break;
case 14:
mAlpha = 1.0f;
mState = 15;
case 15:
mAlpha -= 0.067f;
if (mAlpha <= 0.0f) {
mAlpha = 0.0f;
mState = 16;
}
fopMsgM_setNowAlpha(&pane[1], mAlpha);
break;
case 16:
mAlpha = 0.0f;
mState = 17;
case 17:
mAlpha += 0.067f;
if (mAlpha >= 1.0f) {
mAlpha = 1.0f;
mState = 18;
}
fopMsgM_setNowAlpha(&pane[2], mAlpha);
break;
case 18:
m_message->set_message(0x57e, 2);
fopMsgM_setNowAlpha(&pane[2], 1.0f);
mState = 19;
case 19:
if (m_message->field_0x22e8 != 0)
mState = 20;
break;
case 20:
mAlpha = 1.0f;
mState = 21;
case 21:
mAlpha -= 0.067f;
if (mAlpha <= 0.0f) {
mAlpha = 0.0f;
mState = 22;
}
fopMsgM_setNowAlpha(&pane[2], mAlpha);
break;
case 22:
mPosX = 0.0f;
mAlpha = 0.0f;
mState = 23;
case 23:
mPosX -= 0.4748201f;
mAlpha += 0.067f;
if (mAlpha >= 1.0f) {
mAlpha = 1.0f;
mState = 24;
}
fopMsgM_paneTrans(&pane[3], mPosX, 0.0f);
fopMsgM_setNowAlpha(&pane[3], mAlpha);
fopMsgM_setNowAlpha(&pane[4], mAlpha);
break;
case 24:
m_message->set_message(0x580, 5);
fopMsgM_setNowAlpha(&pane[3], 1.0f);
fopMsgM_setNowAlpha(&pane[4], 1.0f);
mState = 25;
case 25:
mPosX -= 0.4748201f;
if (m_message->field_0x22e8 != 0)
mState = 26;
fopMsgM_paneTrans(&pane[3], mPosX, 0.0f);
break;
case 26:
fopMsgM_setNowAlpha(&pane[3], 1.0f);
fopMsgM_setNowAlpha(&pane[4], 1.0f);
fopMsgM_setNowAlpha(&pane[5], 0.0f);
mAlpha = 0.0f;
mState = 27;
case 27:
mPosX -= 0.4748201f;
mAlpha += 0.0223f;
if (mAlpha >= 1.0f) {
mAlpha = 1.0f;
mState = 28;
}
fopMsgM_paneTrans(&pane[3], mPosX, 0.0f);
fopMsgM_setNowAlpha(&pane[3], 1.0f - mAlpha);
fopMsgM_setNowAlpha(&pane[4], 1.0f - mAlpha);
fopMsgM_setNowAlpha(&pane[5], mAlpha);
break;
case 28:
m_message->set_message(0x585, 4);
fopMsgM_setNowAlpha(&pane[5], 1.0f);
mState = 29;
case 29:
if (m_message->field_0x22e8 != 0)
mState = 30;
break;
case 30:
mAlpha = 1.0f;
mState = 31;
case 31:
mAlpha -= 0.067f;
if (mAlpha <= 0.0f) {
mAlpha = 0.0f;
mState = 32;
}
fopMsgM_setNowAlpha(&pane[5], mAlpha);
break;
case 32:
mTimer = 0;
mState = 31;
case 33:
if (mTimer >= 90)
mState = 34;
else
mTimer++;
break;
case 34:
m_message->set_message(0x589, 1);
fopMsgM_paneTrans(&pane[9], 0.0f, -190.0f);
fopMsgM_paneTrans(&pane[10], 0.0f, -190.0f);
mState = 35;
case 35:
if (m_message->field_0x22e8 != 0)
mState = 36;
break;
case 36:
fopMsgM_paneTrans(&pane[9], 0.0f, 0.0f);
fopMsgM_paneTrans(&pane[10], 0.0f, 0.0f);
mTimer = 0;
mState = 37;
case 37:
if (mTimer >= 60)
mState = 38;
else
mTimer++;
break;
case 38:
mScale = 2.0f;
mAlpha = 0.0f;
mState = 39;
case 39:
mScale -= 0.0007633588f;
mAlpha += 0.067f;
if (mAlpha >= 1.0f) {
mAlpha = 1.0f;
mState = 40;
}
fopMsgM_setNowAlpha(&pane[7], mAlpha);
fopMsgM_paneScaleXY(&pane[7], mScale);
break;
case 40:
m_message->set_message(0x58a, 4);
fopMsgM_setNowAlpha(&pane[6], 1.0f);
mState = 41;
case 41:
mScale -= 0.0007633588f;
if (mScale < 1.0f)
mScale = 1.0f;
fopMsgM_paneScaleXY(&pane[6], mScale);
if (m_message->field_0x22e8 != 0)
mState = 42;
break;
case 42:
mAlpha = 1.0f;
mState = 43;
case 43:
mAlpha -= 0.067f;
if (mAlpha <= 0.0f) {
mAlpha = 0.0f;
mState = 44;
}
fopMsgM_setNowAlpha(&pane[6], mAlpha);
break;
case 44:
break;
}
f32 alpha = m_message->field_0x22d8;
fopMsgM_setNowAlpha(&pane[9], alpha);
fopMsgM_setNowAlpha(&pane[10], alpha);
for (s32 i = 0; i < (s32)ARRAY_SIZE(pane); i++)
fopMsgM_setAlpha(&pane[i]);
mDoExt_setCurrentHeap(old_heap);
}
/* 802344D8-80234550 .text proc_draw__15dScnOpen_proc_cFv */
void dScnOpen_proc_c::proc_draw() {
/* Nonmatching */
JKRHeap* old_heap = mDoExt_setCurrentHeap(exp_heap);
J2DOrthoGraph* graf = dComIfGp_getCurrentGrafPort();
graf->setPort();
m_Screen->draw(0.0f, 0.0f, graf);
mDoExt_setCurrentHeap(old_heap);
}
/* 80234550-80234570 .text draw__15dScnOpen_proc_cFv */
-92
View File
@@ -564,98 +564,6 @@ void* fopMsgM_itemMsgGet_c::getMessage(mesg_header*) {
/* Nonmatching */
}
class fopMsgM_msgDataProc_c {
public:
fopMsgM_msgDataProc_c() {}
virtual ~fopMsgM_msgDataProc_c() {};
void dataInit();
void charLength(int, int, bool);
void rubyLength(int, bool);
void stringLength();
void stringShift();
void iconSelect(int, u8);
void iconIdxRefresh();
void selectCheck2(J2DPane*, int, int, int);
void selectCheck3(J2DPane*, int, int, int);
void selectCheckYoko(J2DPane*, int, int, int);
void inputNumber(int);
void selectArrow(J2DPicture*, f32, f32, f32, f32);
void selectArrow(J2DPicture*, f32, f32);
void colorAnime(J2DPicture*);
void stringSet();
void setSelectFlagYokoOn();
void setSelectFlagOn();
void setHandSendFlagOn();
void setAutoSendFlagOn();
void getHandSendFlag();
void getAutoSendFlag();
void getString(char*, u32);
void getString(char*, char*, char*, char*, u32, f32*, f32*, int*);
void getRubyString(char*, char*, char*, char*, char*, char*, f32*, f32*, int*);
void tag_len_kaisen_game(int*, f32*, int*, int*, int*);
void tag_len_rupee(int*, f32*, int*, int*, int*);
void tag_len_num_input(int*, f32*, int*, int*, int*);
void tag_len_sword_game(int*, f32*, int*, int*, int*);
void tag_len_letter_game(int*, f32*, int*, int*, int*);
void tag_len_letter_game_max(int*, f32*, int*, int*, int*);
void tag_len_fish(int*, f32*, int*, int*, int*);
void tag_len_fish_rupee(int*, f32*, int*, int*, int*);
void tag_len_letter(int*, f32*, int*, int*, int*);
void tag_len_rescue(int*, f32*, int*, int*, int*);
void tag_len_forest_timer(int*, f32*, int*, int*, int*);
void tag_len_birdman(int*, f32*, int*, int*, int*);
void tag_len_point(int*, f32*, int*, int*, int*);
void tag_len_get_pendant(int*, f32*, int*, int*, int*);
void tag_len_rev_pendant(int*, f32*, int*, int*, int*);
void tag_len_pig_timer(int*, f32*, int*, int*, int*);
void tag_len_get_bomb(int*, f32*, int*, int*, int*);
void tag_len_get_arrow(int*, f32*, int*, int*, int*);
void tag_len_stock_bokobaba(int*, f32*, int*, int*, int*);
void tag_len_stock_dokuro(int*, f32*, int*, int*, int*);
void tag_len_stock_chuchu(int*, f32*, int*, int*, int*);
void tag_len_stock_pendant(int*, f32*, int*, int*, int*);
void tag_len_stock_hane(int*, f32*, int*, int*, int*);
void tag_len_stock_kenshi(int*, f32*, int*, int*, int*);
void tag_len_terry_rupee(int*, f32*, int*, int*, int*);
void tag_len_input_bokobaba(int*, f32*, int*, int*, int*);
void tag_len_input_dokuro(int*, f32*, int*, int*, int*);
void tag_len_input_chuchu(int*, f32*, int*, int*, int*);
void tag_len_input_pendant(int*, f32*, int*, int*, int*);
void tag_len_input_hane(int*, f32*, int*, int*, int*);
void tag_len_input_kenshi(int*, f32*, int*, int*, int*);
void tag_kaisen_game();
void tag_rupee();
void tag_num_input();
void tag_sword_game();
void tag_letter_game();
void tag_letter_game_max();
void tag_fish();
void tag_fish_rupee();
void tag_letter();
void tag_rescue();
void tag_forest_timer();
void tag_birdman();
void tag_point();
void tag_get_pendant();
void tag_rev_pendant();
void tag_pig_timer();
void tag_get_bomb();
void tag_get_arrow();
void tag_stock_bokobaba();
void tag_stock_dokuro();
void tag_stock_chuchu();
void tag_stock_pendant();
void tag_stock_hane();
void tag_stock_kenshi();
void tag_terry_rupee();
void tag_input_bokobaba();
void tag_input_dokuro();
void tag_input_chuchu();
void tag_input_pendant();
void tag_input_hane();
void tag_input_kenshi();
};
/* 8002E7DC-8002E95C .text dataInit__21fopMsgM_msgDataProc_cFv */
void fopMsgM_msgDataProc_c::dataInit() {
/* Nonmatching */