diff options
| author | TakaRikka <38417346+TakaRikka@users.noreply.github.com> | 2024-01-03 06:12:17 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-03 16:12:17 +0200 |
| commit | 2e15998e7ac105f2e9977cb5a0d5c3a0111cad89 (patch) | |
| tree | 4bd95fa8988b4c11507de5ad45970a18556d34e5 /src/d/meter/d_meter_string.cpp | |
| parent | f5bf24c77e75a1263cea511ccb881ef6c9c2ad03 (diff) | |
d_meter_string done (#2023)
* d_meter_string done
* remove asm
* some other d_meter fixes
Diffstat (limited to 'src/d/meter/d_meter_string.cpp')
| -rw-r--r-- | src/d/meter/d_meter_string.cpp | 514 |
1 files changed, 233 insertions, 281 deletions
diff --git a/src/d/meter/d_meter_string.cpp b/src/d/meter/d_meter_string.cpp index d6d1077126..5da94a0b02 100644 --- a/src/d/meter/d_meter_string.cpp +++ b/src/d/meter/d_meter_string.cpp @@ -1,315 +1,267 @@ -// -// Generated By: dol2asm -// Translation Unit: d/meter/d_meter_string -// +/** + * d_meter_string.cpp + * UI Mini-Game Text + */ #include "d/meter/d_meter_string.h" -#include "dol2asm.h" - -// -// Types: -// - -struct dMeterSub_c { - /* 80194138 */ bool isDead(); -}; - -struct dMeterString_c { - /* 8020ED60 */ dMeterString_c(int); - /* 8020EDF4 */ ~dMeterString_c(); - /* 8020EE70 */ void _create(); - /* 8020F150 */ void _execute(u32); - /* 8020F1B0 */ void draw(); - /* 8020F49C */ void _delete(); - /* 8020F5A4 */ void createString(int); - /* 8020F66C */ void playBckAnimation(f32); - /* 8020F6EC */ void drawPikari(); - /* 8020FA88 */ void isLeadByte(int); -}; - -struct JMSMesgEntry_c {}; - -struct dMeter2Info_c { - /* 8021C250 */ void getString(u32, char*, JMSMesgEntry_c*); - /* 8021CC00 */ void resetMeterString(); -}; - -struct JUtility { - struct TColor {}; -}; - -struct dMeter2Draw_c { - /* 802140DC */ void drawPikari(f32, f32, f32*, f32, JUtility::TColor, JUtility::TColor, - JUtility::TColor, JUtility::TColor, f32, u8); -}; - -struct JKRFileLoader { - /* 802D4270 */ void getGlbResource(char const*, JKRFileLoader*); -}; - -struct JKRExpHeap {}; - -struct JKRArchive {}; - -struct J2DTextBox { - /* 80300658 */ void getStringPtr() const; - /* 8030074C */ void setString(s16, char const*, ...); -}; - -struct J2DGrafContext {}; - -struct J2DScreen { - /* 802F8498 */ J2DScreen(); - /* 802F8648 */ void setPriority(char const*, u32, JKRArchive*); - /* 802F8ED4 */ void draw(f32, f32, J2DGrafContext const*); -}; - -struct J2DPane { - /* 802F7AFC */ void getParentPane(); - /* 802F7FCC */ void animationTransform(); -}; - -struct J2DAnmLoaderDataBase { - /* 80308A6C */ void load(void const*); -}; - -struct CPaneMgrAlpha { - /* 802557D0 */ void setAlphaRate(f32); -}; - -struct CPaneMgr { - /* 80253984 */ CPaneMgr(J2DScreen*, u64, u8, JKRExpHeap*); - /* 802545B0 */ void paneTrans(f32, f32); - /* 80254EBC */ void getGlobalVtxCenter(J2DPane*, bool, s16); -}; - -// -// Forward References: -// - -extern "C" void __ct__14dMeterString_cFi(); -extern "C" void __dt__14dMeterString_cFv(); -extern "C" void _create__14dMeterString_cFv(); -extern "C" void _execute__14dMeterString_cFUl(); -extern "C" void draw__14dMeterString_cFv(); -extern "C" void _delete__14dMeterString_cFv(); -extern "C" void createString__14dMeterString_cFi(); -extern "C" void playBckAnimation__14dMeterString_cFf(); -extern "C" void drawPikari__14dMeterString_cFv(); -extern "C" void isLeadByte__14dMeterString_cFi(); -extern "C" extern char const* const d_meter_d_meter_string__stringBase0; - -// -// External References: -// - -extern "C" void mDoExt_getMesgFont__Fv(); -extern "C" void dComIfG_TimerDeleteRequest__Fi(); -extern "C" bool isDead__11dMeterSub_cFv(); -extern "C" void -drawPikari__13dMeter2Draw_cFffPffQ28JUtility6TColorQ28JUtility6TColorQ28JUtility6TColorQ28JUtility6TColorfUc(); -extern "C" void getString__13dMeter2Info_cFUlPcP14JMSMesgEntry_c(); -extern "C" void resetMeterString__13dMeter2Info_cFv(); -extern "C" void __ct__8CPaneMgrFP9J2DScreenUxUcP10JKRExpHeap(); -extern "C" void paneTrans__8CPaneMgrFff(); -extern "C" void getGlobalVtxCenter__8CPaneMgrFP7J2DPanebs(); -extern "C" void dPaneClass_showNullPane__FP9J2DScreen(); -extern "C" void setAlphaRate__13CPaneMgrAlphaFf(); -extern "C" void dTimer_createTimer__FlUlUcUcffff(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void getGlbResource__13JKRFileLoaderFPCcP13JKRFileLoader(); -extern "C" void getParentPane__7J2DPaneFv(); -extern "C" void animationTransform__7J2DPaneFv(); -extern "C" void __ct__9J2DScreenFv(); -extern "C" void setPriority__9J2DScreenFPCcUlP10JKRArchive(); -extern "C" void draw__9J2DScreenFffPC14J2DGrafContext(); -extern "C" void getStringPtr__10J2DTextBoxCFv(); -extern "C" void setString__10J2DTextBoxFsPCce(); -extern "C" void load__20J2DAnmLoaderDataBaseFPCv(); -extern "C" void _savegpr_23(); -extern "C" void _restgpr_23(); -extern "C" void strcpy(); -extern "C" extern void* __vt__12dDlst_base_c[3]; -extern "C" extern void* __vt__11dMeterSub_c[8 + 3 /* padding */]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" extern u8 g_drawHIO[3880]; -extern "C" extern u8 g_meter2_info[248]; - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 803BF308-803BF328 01C428 0020+00 2/2 0/0 0/0 .data __vt__14dMeterString_c */ -SECTION_DATA extern void* __vt__14dMeterString_c[8] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)draw__14dMeterString_cFv, - (void*)__dt__14dMeterString_cFv, - (void*)_create__14dMeterString_cFv, - (void*)_execute__14dMeterString_cFUl, - (void*)_delete__14dMeterString_cFv, - (void*)isDead__11dMeterSub_cFv, -}; +#include "JSystem/J2DGraph/J2DAnmLoader.h" +#include "JSystem/J2DGraph/J2DGrafContext.h" +#include "JSystem/J2DGraph/J2DScreen.h" +#include "JSystem/J2DGraph/J2DTextBox.h" +#include "JSystem/JUtility/JUTFont.h" +#include "d/com/d_com_inf_game.h" +#include "d/d_timer.h" +#include "d/meter/d_meter2_draw.h" +#include "d/meter/d_meter2_info.h" +#include "d/meter/d_meter_HIO.h" +#include "d/pane/d_pane_class.h" /* 8020ED60-8020EDF4 2096A0 0094+00 0/0 1/1 0/0 .text __ct__14dMeterString_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dMeterString_c::dMeterString_c(int param_0) { - nofralloc -#include "asm/d/meter/d_meter_string/__ct__14dMeterString_cFi.s" +dMeterString_c::dMeterString_c(int i_stringID) { + mpMapArchive = dComIfGp_getAllMapArchive(); + field_0x28 = 0; + mStringID = i_stringID; + + _create(); + if (mpMapArchive != NULL) { + createString(mStringID); + } } -#pragma pop /* 8020EDF4-8020EE70 209734 007C+00 1/0 0/0 0/0 .text __dt__14dMeterString_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dMeterString_c::~dMeterString_c() { - nofralloc -#include "asm/d/meter/d_meter_string/__dt__14dMeterString_cFv.s" +dMeterString_c::~dMeterString_c() { + _delete(); } -#pragma pop - -/* ############################################################################################## */ -/* 80398210-80398210 024870 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80398210 = "zelda_game_image_cow_get_in.blo"; -SECTION_DEAD static char const* const stringBase_80398230 = "zelda_game_image_cow_get_in.bck"; -SECTION_DEAD static char const* const stringBase_80398250 = ""; -/* @stringBase0 padding */ -SECTION_DEAD static char const* const pad_80398251 = "\0\0\0\0\0\0"; -#pragma pop - -/* 80454848-8045484C 002E48 0004+00 1/1 0/0 0/0 .sdata2 @3758 */ -SECTION_SDATA2 static f32 lit_3758 = 210.0f; - -/* 8045484C-80454850 002E4C 0004+00 1/1 0/0 0/0 .sdata2 @3759 */ -SECTION_SDATA2 static f32 lit_3759 = 410.0f; - -/* 80454850-80454854 002E50 0004+00 1/1 0/0 0/0 .sdata2 @3760 */ -SECTION_SDATA2 static f32 lit_3760 = 32.0f; - -/* 80454854-80454858 002E54 0004+00 1/1 0/0 0/0 .sdata2 @3761 */ -SECTION_SDATA2 static f32 lit_3761 = 419.0f; - -/* 80454858-8045485C 002E58 0004+00 3/3 0/0 0/0 .sdata2 @3762 */ -SECTION_SDATA2 static u8 lit_3762[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; /* 8020EE70-8020F150 2097B0 02E0+00 1/0 0/0 0/0 .text _create__14dMeterString_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMeterString_c::_create() { - nofralloc -#include "asm/d/meter/d_meter_string/_create__14dMeterString_cFv.s" +int dMeterString_c::_create() { + if (mpMapArchive == NULL) { + if (field_0x28 == 0) { + dTimer_createTimer(9, 0x989298, 0, 0, 210.0f, 410.0f, 32.0f, 419.0f); + field_0x28 = 1; + } + + if (dComIfGp_getAllMapArchive() == NULL) { + return cPhs_ERROR_e; + } + + mpMapArchive = dComIfGp_getAllMapArchive(); + } + + mpScreen = new J2DScreen(); + JUT_ASSERT(mpScreen != 0); + + bool fg = mpScreen->setPriority("zelda_game_image_cow_get_in.blo", 0x20000, mpMapArchive); + JUT_ASSERT(fg != false); + dPaneClass_showNullPane(mpScreen); + + i_OSInitFastCast(); + mpGetInBck = (J2DAnmTransformKey*)J2DAnmLoaderDataBase::load( + JKRGetNameResource("zelda_game_image_cow_get_in.bck", mpMapArchive)); + + mpParentPane = new CPaneMgr(mpScreen, 'get_in_n', 2, NULL); + JUT_ASSERT(mpParentPane != 0); + + mpRootPane = new CPaneMgr(mpScreen, 'n_all', 0, NULL); + JUT_ASSERT(mpRootPane != 0); + + mpTextPane = new CPaneMgr(mpScreen, 'get_in', 0, NULL); + JUT_ASSERT(mpTextPane != 0); + + static_cast<J2DTextBox*>(mpScreen->search('get_in_s'))->setFont(mDoExt_getMesgFont()); + static_cast<J2DTextBox*>(mpScreen->search('get_in'))->setFont(mDoExt_getMesgFont()); + static_cast<J2DTextBox*>(mpScreen->search('get_in_s'))->setString(0x100, ""); + static_cast<J2DTextBox*>(mpScreen->search('get_in'))->setString(0x100, ""); + + mAnimFrame = 0.0f; + mPikariAnimFrame = 0.0f; + mOffsetX = 0; + mOffsetY = 0; + mStringID2 = 0; + field_0x3c = 0xFF; + playBckAnimation(0.0f); + return cPhs_COMPLEATE_e; } -#pragma pop /* 8020F150-8020F1B0 209A90 0060+00 1/0 0/0 0/0 .text _execute__14dMeterString_cFUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMeterString_c::_execute(u32 param_0) { - nofralloc -#include "asm/d/meter/d_meter_string/_execute__14dMeterString_cFUl.s" +int dMeterString_c::_execute(u32 unused) { + if (mpMapArchive == NULL) { + _create(); + + if (mpMapArchive != NULL) { + createString(mStringID); + } + } + + return 1; } -#pragma pop -/* ############################################################################################## */ -/* 8045485C-80454860 002E5C 0004+00 1/1 0/0 0/0 .sdata2 @3819 */ -SECTION_SDATA2 static f32 lit_3819 = 60.0f; +/* 8020F1B0-8020F49C 209AF0 02EC+00 1/0 0/0 0/0 .text draw__14dMeterString_cFv */ +void dMeterString_c::draw() { + if (mpMapArchive != NULL && !dComIfGp_isPauseFlag()) { + J2DGrafContext* graf_ctx = dComIfGp_getCurrentGrafPort(); + graf_ctx->setup2D(); + + f32 var_f31 = (f32)g_drawHIO.mMiniGame.field_0x172 + + ((f32)g_drawHIO.mMiniGame.mReadyFightTextWaitFrames + 60.0f); + if (mAnimFrame > 0.0f && mAnimFrame < var_f31) { + f32 var_f30 = 1.0f; + + if (mAnimFrame < 60.0f) { + mAnimFrame += g_drawHIO.mMiniGame.mReadyFightTextAnimSpeed; + if (mAnimFrame > 60.0f) { + mAnimFrame = 60.0f; + } + + playBckAnimation(mAnimFrame); + } else if (mAnimFrame < (f32)g_drawHIO.mMiniGame.mReadyFightTextWaitFrames + 60.0f) { + mAnimFrame += var_f30; + } else if (mAnimFrame < var_f31) { + mAnimFrame += var_f30; + var_f30 = acc(g_drawHIO.mMiniGame.field_0x172, var_f31 - mAnimFrame, 0); + } + + mpParentPane->setAlphaRate(var_f30); + mpRootPane->paneTrans(mOffsetX + g_drawHIO.mMiniGame.mReadyFightTextPosX, + mOffsetY + g_drawHIO.mMiniGame.mReadyFightTextPosY); + mpRootPane->scale(g_drawHIO.mMiniGame.mReadyFightTextSizeX, + g_drawHIO.mMiniGame.mReadyFightTextSizeY); + mpScreen->draw(0.0f, 0.0f, graf_ctx); + + if (mPikariAnimFrame > 0.0f) { + drawPikari(); + } else if (mPikariAnimFrame == -1.0f && + mAnimFrame > g_drawHIO.mMiniGame.mReadyFightHighlightAppearFrames) + { + mPikariAnimFrame = 18.0f - g_drawHIO.mMiniGame.mReadyFightHighlightAnimSpeed; + } + + if (mAnimFrame >= var_f31) { + dMeter2Info_resetMeterString(); + } + } + } +} -/* 80454860-80454864 002E60 0004+00 2/2 0/0 0/0 .sdata2 @3820 */ -SECTION_SDATA2 static f32 lit_3820 = 1.0f; +/* 8020F49C-8020F5A4 209DDC 0108+00 1/0 0/0 0/0 .text _delete__14dMeterString_cFv */ +int dMeterString_c::_delete() { + delete mpScreen; + mpScreen = NULL; -/* 80454864-80454868 002E64 0004+00 2/2 0/0 0/0 .sdata2 @3821 */ -SECTION_SDATA2 static f32 lit_3821 = -1.0f; + delete mpGetInBck; + mpGetInBck = NULL; -/* 80454868-80454870 002E68 0004+04 1/1 0/0 0/0 .sdata2 @3822 */ -SECTION_SDATA2 static f32 lit_3822[1 + 1 /* padding */] = { - 18.0f, - /* padding */ - 0.0f, -}; + delete mpParentPane; + mpParentPane = NULL; -/* 80454870-80454878 002E70 0008+00 2/2 0/0 0/0 .sdata2 @3824 */ -SECTION_SDATA2 static f64 lit_3824 = 4503601774854144.0 /* cast s32 to float */; + delete mpRootPane; + mpRootPane = NULL; -/* 8020F1B0-8020F49C 209AF0 02EC+00 1/0 0/0 0/0 .text draw__14dMeterString_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMeterString_c::draw() { - nofralloc -#include "asm/d/meter/d_meter_string/draw__14dMeterString_cFv.s" -} -#pragma pop + delete mpTextPane; + mpTextPane = NULL; -/* 8020F49C-8020F5A4 209DDC 0108+00 1/0 0/0 0/0 .text _delete__14dMeterString_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMeterString_c::_delete() { - nofralloc -#include "asm/d/meter/d_meter_string/_delete__14dMeterString_cFv.s" -} -#pragma pop + if (field_0x28 != 0) { + dComIfG_TimerDeleteRequest(9); + } -/* ############################################################################################## */ -/* 80454878-8045487C 002E78 0004+00 1/1 0/0 0/0 .sdata2 @3866 */ -SECTION_SDATA2 static f32 lit_3866 = 40.0f; + return 1; +} /* 8020F5A4-8020F66C 209EE4 00C8+00 2/2 1/1 0/0 .text createString__14dMeterString_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMeterString_c::createString(int param_0) { - nofralloc -#include "asm/d/meter/d_meter_string/createString__14dMeterString_cFi.s" +int dMeterString_c::createString(int i_stringID) { + char str_buf[32]; + dMeter2Info_getString(i_stringID, str_buf, NULL); + strcpy(static_cast<J2DTextBox*>(mpScreen->search('get_in_s'))->getStringPtr(), str_buf); + strcpy(static_cast<J2DTextBox*>(mpScreen->search('get_in'))->getStringPtr(), str_buf); + + mAnimFrame = 40.0f; + mPikariAnimFrame = -1.0f; + mOffsetX = 0; + mOffsetY = 0; + mStringID2 = i_stringID; + return 1; } -#pragma pop /* 8020F66C-8020F6EC 209FAC 0080+00 2/2 0/0 0/0 .text playBckAnimation__14dMeterString_cFf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMeterString_c::playBckAnimation(f32 param_0) { - nofralloc -#include "asm/d/meter/d_meter_string/playBckAnimation__14dMeterString_cFf.s" +void dMeterString_c::playBckAnimation(f32 i_frame) { + mpParentPane->getPanePtr()->setAnimation(mpGetInBck); + mpGetInBck->setFrame(i_frame); + mpParentPane->getPanePtr()->animationTransform(); + mpParentPane->getPanePtr()->setAnimation((J2DAnmTransform*)NULL); } -#pragma pop - -/* ############################################################################################## */ -/* 8045487C-80454880 002E7C 0004+00 1/1 0/0 0/0 .sdata2 @3979 */ -SECTION_SDATA2 static f32 lit_3979 = 0.5f; /* 8020F6EC-8020FA88 20A02C 039C+00 1/1 0/0 0/0 .text drawPikari__14dMeterString_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMeterString_c::drawPikari() { - nofralloc -#include "asm/d/meter/d_meter_string/drawPikari__14dMeterString_cFv.s" +void dMeterString_c::drawPikari() { + f32 anim_frame = mPikariAnimFrame; + Vec center = mpTextPane->getGlobalVtxCenter(false, 0); + char* string = static_cast<J2DTextBox*>(mpTextPane->getPanePtr())->getStringPtr(); + + s16 str_idx = 0; + f32 var_f25 = 0.0f; + f32 var_f29 = 0.0f; + J2DTextBox::TFontSize font_size; + static_cast<J2DTextBox*>(mpTextPane->getPanePtr())->getFontSize(font_size); + JUTFont* font_p = mDoExt_getMesgFont(); + + f32 var_f28 = 1.0f; + for (J2DPane* pane = mpTextPane->getPanePtr(); pane != NULL; pane = pane->getParentPane()) { + var_f28 *= pane->getScaleX(); + } + + for (; string[str_idx] != 0; str_idx++) { + int c = string[str_idx] & 0xFF; + if (str_idx > 0) { + var_f25 += var_f28 * static_cast<J2DTextBox*>(mpTextPane->getPanePtr())->getCharSpace(); + } + + if (isLeadByte(c)) { + c = ((string[str_idx] & 0xFF) << 8) | (string[str_idx + 1] & 0xFF); + str_idx++; + } else { + c = string[str_idx] & 0xFF; + } + + var_f25 += + var_f28 * (font_size.mSizeX * ((f32)font_p->getWidth(c) / (f32)font_p->getCellWidth())); + } + + var_f25 = center.x - (var_f25 / 2); + f32 frame; + + for (str_idx = 0; string[str_idx] != 0; str_idx++) { + frame = anim_frame; + int c = string[str_idx] & 0xFF; + if (str_idx > 0) { + var_f29 += var_f28 * static_cast<J2DTextBox*>(mpTextPane->getPanePtr())->getCharSpace(); + } + + if (isLeadByte(c)) { + c = ((string[str_idx] & 0xFF) << 8) | (string[str_idx + 1] & 0xFF); + str_idx++; + } else { + c = string[str_idx] & 0xFF; + } + + f32 temp_f24 = + var_f28 * (font_size.mSizeX * ((f32)font_p->getWidth(c) / (f32)font_p->getCellWidth())); + if (c != 0x20 && c != 0x8140) { + dMeter2Info_getMeterClass()->getMeterDrawPtr()->drawPikari( + (temp_f24 / 2) + (var_f25 + var_f29), center.y, &frame, + g_drawHIO.mMiniGame.mReadyFightHighlightScale, + g_drawHIO.mMiniGame.mReadyFightHighlightFrontOuter, + g_drawHIO.mMiniGame.mReadyFightHighlightFrontInner, + g_drawHIO.mMiniGame.mReadyFightHighlightBackOuter, + g_drawHIO.mMiniGame.mReadyFightHighlightBackInner, + g_drawHIO.mMiniGame.mReadyFightHighlightAnimSpeed, 0); + } + + var_f29 += temp_f24; + } + + mPikariAnimFrame = frame; } -#pragma pop /* 8020FA88-8020FAB4 20A3C8 002C+00 1/1 0/0 0/0 .text isLeadByte__14dMeterString_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMeterString_c::isLeadByte(int param_0) { - nofralloc -#include "asm/d/meter/d_meter_string/isLeadByte__14dMeterString_cFi.s" +bool dMeterString_c::isLeadByte(int c) { + return (c >= 0x81 && c <= 0x9F) || (c >= 0xE0 && c <= 0xFC); } -#pragma pop - -/* 80398210-80398210 024870 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ |
