From 81a33e27ea3a4c00013b7683a843474ee31f60ff Mon Sep 17 00:00:00 2001 From: Irastris Date: Tue, 18 Aug 2026 19:14:00 -0400 Subject: [PATCH] Delta time msg --- include/d/d_msg_class.h | 8 +++ include/d/d_msg_object.h | 5 +- include/d/d_msg_out_font.h | 4 +- include/d/d_msg_scrn_3select.h | 9 +++ include/d/d_msg_scrn_base.h | 4 ++ include/d/d_msg_scrn_explain.h | 5 +- include/d/d_msg_scrn_howl.h | 7 +- include/d/d_msg_scrn_item.h | 6 ++ include/d/d_msg_scrn_kanban.h | 3 + include/d/d_msg_scrn_talk.h | 6 +- include/d/d_msg_scrn_tree.h | 3 + src/d/d_msg_class.cpp | 11 ++++ src/d/d_msg_object.cpp | 117 +++++++++++++++++++++++++++++---- src/d/d_msg_out_font.cpp | 89 +++++++++++++++++-------- src/d/d_msg_scrn_3select.cpp | 85 ++++++++++++++++++++++++ src/d/d_msg_scrn_arrow.cpp | 14 ++++ src/d/d_msg_scrn_base.cpp | 11 ++++ src/d/d_msg_scrn_explain.cpp | 30 ++++++++- src/d/d_msg_scrn_howl.cpp | 76 +++++++++++++++++++-- src/d/d_msg_scrn_item.cpp | 30 ++++++++- src/d/d_msg_scrn_kanban.cpp | 12 ++++ src/d/d_msg_scrn_light.cpp | 15 +++-- src/d/d_msg_scrn_talk.cpp | 18 ++++- src/d/d_msg_scrn_tree.cpp | 13 ++++ 24 files changed, 518 insertions(+), 63 deletions(-) diff --git a/include/d/d_msg_class.h b/include/d/d_msg_class.h index 49a99a6ef1..bd26cae084 100644 --- a/include/d/d_msg_class.h +++ b/include/d/d_msg_class.h @@ -197,12 +197,16 @@ struct jmessage_tReference : public JMessage::TReference { void addDrawLightCount() { mDrawLightCount++; } void setCharAlpha(f32 alpha) { mCharAlpha = alpha; } +#if TARGET_PC + void addCharAlpha(); +#else void addCharAlpha() { mCharAlpha += mAddCharAlpha; if (mCharAlpha > 255.0f) { mCharAlpha = 255.0f; } } +#endif void setLineLength(int i_no, f32 i_strLen, f32 i_spaceLen) { mStrLength[i_no] = i_strLen; @@ -215,12 +219,16 @@ struct jmessage_tReference : public JMessage::TReference { } } +#if TARGET_PC + void addCharAllAlphaRate(); +#else void addCharAllAlphaRate() { mCharAllAlphaRate += mAddCharAllAlphaRate; if (mCharAllAlphaRate > 1.0f) { mCharAllAlphaRate = 1.0f; } } +#endif void addLineLength(int param_0, f32 param_1, f32 param_2) { mStrLength[param_0] += param_1; diff --git a/include/d/d_msg_object.h b/include/d/d_msg_object.h index 3e8c535800..84dbcc9f8d 100644 --- a/include/d/d_msg_object.h +++ b/include/d/d_msg_object.h @@ -21,6 +21,9 @@ public: int _create(msg_class*); int _execute(); int _draw(); +#if TARGET_PC + void presentAnims(); +#endif int _delete(); void setMessageIndex(u32, u32, bool); void setMessageIndexDemo(u32, bool); @@ -285,7 +288,7 @@ public: /* 0x164 */ u16 mNodeIdx; /* 0x166 */ u16 field_0x166; /* 0x168 */ u16 field_0x168; - /* 0x16A */ s16 field_0x16a; + /* 0x16A */ DUSK_IF_ELSE(f32, s16) field_0x16a; /* 0x16C */ s16 mCurrentGroupID; // group whose BMG is parsed; -1 none, 0 common, 1-8 stage /* 0x16E */ s16 field_0x16e; /* 0x170 */ s16 mNowTalkFlowNo; diff --git a/include/d/d_msg_out_font.h b/include/d/d_msg_out_font.h index 3bd41ca825..df9b9e4368 100644 --- a/include/d/d_msg_out_font.h +++ b/include/d/d_msg_out_font.h @@ -39,7 +39,7 @@ class COutFont_c { public: COutFont_c(u8); void initialize(); - void setBlendAnime(J2DPicture*, s16); + void setBlendAnime(J2DPicture*, DUSK_IF_ELSE(f32, s16)); const char* getBtiName(int); virtual ~COutFont_c(); @@ -57,7 +57,7 @@ public: /* 0x1A8 */ f32 mAlphaRatio; /* 0x1AC */ f32 field_0x1ac; /* 0x1B0 */ f32 field_0x1b0; - /* 0x1B4 */ s16 field_0x1b4[70]; + /* 0x1B4 */ DUSK_IF_ELSE(f32, s16) field_0x1b4[70]; /* 0x240 */ bool field_0x240; /* 0x241 */ u8 mRupeeColor; /* 0x242 */ u8 field_0x242; diff --git a/include/d/d_msg_scrn_3select.h b/include/d/d_msg_scrn_3select.h index 35c831d3c5..de74919d4f 100644 --- a/include/d/d_msg_scrn_3select.h +++ b/include/d/d_msg_scrn_3select.h @@ -26,10 +26,16 @@ public: dMsgScrn3Select_c(); virtual ~dMsgScrn3Select_c(); bool isSelect(); +#if TARGET_PC + bool isAnimeActive() { return mProcess < PROC_MAX_e; } +#endif void setString(DUSK_CONST char*, DUSK_CONST char*, DUSK_CONST char*); void setRubyString(DUSK_CONST char*, DUSK_CONST char*, DUSK_CONST char*); void translate(f32, f32); void draw(f32, f32); +#if TARGET_PC + void presentAnims(); +#endif void selAnimeInit(u8, u8, u8, f32, u8); bool selAnimeMove(u8, u8, bool); bool selAnimeEnd(); @@ -101,6 +107,9 @@ public: /* 0x115 */ u8 mDPDPoint; /* 0x116 */ u8 field_0x116; /* 0x117 */ u8 field_0x117; +#if TARGET_PC + bool mPresenting; +#endif }; // Size: 0x118 #endif /* MSG_SCRN_D_MSG_SCRN_3SELECT_H */ diff --git a/include/d/d_msg_scrn_base.h b/include/d/d_msg_scrn_base.h index 17fd7380d3..fe91363970 100644 --- a/include/d/d_msg_scrn_base.h +++ b/include/d/d_msg_scrn_base.h @@ -37,6 +37,10 @@ public: virtual void fukiAlpha(f32); virtual void fontAlpha(f32); virtual void fukiPosCalc(u8) {} +#if TARGET_PC + virtual void presentAnims(); + virtual bool isSelectAnimeActive() { return false; } +#endif f32 getSelTextBoxPosX(int idx) { return mSelTextBoxPosX[idx]; } f32 getSelTextBoxPosY(int idx) { return mSelTextBoxPosY[idx]; } diff --git a/include/d/d_msg_scrn_explain.h b/include/d/d_msg_scrn_explain.h index 1b638f9b83..2868d173f9 100644 --- a/include/d/d_msg_scrn_explain.h +++ b/include/d/d_msg_scrn_explain.h @@ -23,6 +23,9 @@ public: dMsgScrnExplain_c(STControl*, u8, bool, u8); void move(); void draw(J2DOrthoGraph*); +#if TARGET_PC + void presentAnims(); +#endif void wait_init(); void wait_proc(); void open_request_init(); @@ -67,7 +70,7 @@ public: /* 0x50 */ f32 field_0x50; /* 0x54 */ u32 mOpenMsgId; /* 0x58 */ bool field_0x58; - /* 0x5A */ s16 field_0x5a; + /* 0x5A */ DUSK_IF_ELSE(f32, s16) field_0x5a; /* 0x5C */ s16 field_0x5c; /* 0x5E */ s16 mKeyWaitTimer; /* 0x60 */ u8 mStatus; diff --git a/include/d/d_msg_scrn_howl.h b/include/d/d_msg_scrn_howl.h index 5db5db0232..c168b1f4f3 100644 --- a/include/d/d_msg_scrn_howl.h +++ b/include/d/d_msg_scrn_howl.h @@ -8,6 +8,9 @@ struct dMsgScrnHowl_c : public dMsgScrnBase_c { ~dMsgScrnHowl_c(); void exec(); void drawSelf(); +#if TARGET_PC + void presentAnims(); +#endif void guide_on_init(); void guide_on_proc(); void guide_off_init(); @@ -77,7 +80,7 @@ struct dMsgScrnHowl_c : public dMsgScrnBase_c { /* 0x1A18 */ f32 field_0x1a18[30]; /* 0x1A90 */ f32 field_0x1a90[30]; /* 0x1B08 */ f32 field_0x1b08[3]; - /* 0x1B14 */ s16 field_0x1b14[0x300]; + /* 0x1B14 */ DUSK_IF_ELSE(f32, s16) field_0x1b14[0x300]; /* 0x2114 */ u32 field_0x2114; /* 0x2118 */ u32 field_0x2118; /* 0x211C */ u32 field_0x211c; @@ -113,6 +116,8 @@ struct dMsgScrnHowl_c : public dMsgScrnBase_c { #if TARGET_PC u8 showCursor; + f32 mSampleAcc; + f32 mPulseFrame; #endif }; diff --git a/include/d/d_msg_scrn_item.h b/include/d/d_msg_scrn_item.h index 865071a2af..a0387b8127 100644 --- a/include/d/d_msg_scrn_item.h +++ b/include/d/d_msg_scrn_item.h @@ -13,6 +13,9 @@ struct dMsgScrnItem_c : public dMsgScrnBase_c { ~dMsgScrnItem_c(); void exec(); void drawSelf(); +#if TARGET_PC + void presentAnims(); +#endif void arwAnimeInit(); void arwAnimeMove(); void dotAnimeInit(); @@ -23,6 +26,9 @@ struct dMsgScrnItem_c : public dMsgScrnBase_c { void selectAnimeInit(u8, u8, f32, u8); bool selectAnimeMove(u8, u8, bool); bool selectAnimeEnd(); +#if TARGET_PC + bool isSelectAnimeActive(); +#endif void fukiScale(f32); void fukiTrans(f32, f32); void fukiAlpha(f32); diff --git a/include/d/d_msg_scrn_kanban.h b/include/d/d_msg_scrn_kanban.h index bba4ebd734..7e9fcb1caf 100644 --- a/include/d/d_msg_scrn_kanban.h +++ b/include/d/d_msg_scrn_kanban.h @@ -13,6 +13,9 @@ struct dMsgScrnKanban_c : public dMsgScrnBase_c { ~dMsgScrnKanban_c(); void exec(); void draw(); +#if TARGET_PC + void presentAnims(); +#endif void fukiAlpha(f32); void fukiScale(f32); void fukiTrans(f32, f32); diff --git a/include/d/d_msg_scrn_talk.h b/include/d/d_msg_scrn_talk.h index 1c8283ad44..c33b67a76c 100644 --- a/include/d/d_msg_scrn_talk.h +++ b/include/d/d_msg_scrn_talk.h @@ -23,6 +23,10 @@ struct dMsgScrnTalk_c : public dMsgScrnBase_c { void selectAnimeInit(u8, u8, f32, u8); bool selectAnimeMove(u8, u8, bool); bool selectAnimeEnd(); +#if TARGET_PC + void presentAnims(); + bool isSelectAnimeActive(); +#endif void fukiScale(f32); void fukiTrans(f32, f32); void fukiAlpha(f32); @@ -42,7 +46,7 @@ struct dMsgScrnTalk_c : public dMsgScrnBase_c { /* 0x0F4 */ f32 field_0xf4; /* 0x0F8 */ f32 field_0xf8[150]; /* 0x350 */ f32 field_0x350[3]; - /* 0x35C */ s16 field_0x35c[150]; + /* 0x35C */ DUSK_IF_ELSE(f32, s16) field_0x35c[150]; /* 0x488 */ u8 field_0x488; }; diff --git a/include/d/d_msg_scrn_tree.h b/include/d/d_msg_scrn_tree.h index f30f8a6193..844d378efd 100644 --- a/include/d/d_msg_scrn_tree.h +++ b/include/d/d_msg_scrn_tree.h @@ -11,6 +11,9 @@ struct dMsgScrnTree_c : public dMsgScrnBase_c { virtual ~dMsgScrnTree_c(); void exec(); void draw(); +#if TARGET_PC + void presentAnims(); +#endif void fukiAlpha(f32); void fukiScale(f32); void fukiTrans(f32, f32); diff --git a/src/d/d_msg_class.cpp b/src/d/d_msg_class.cpp index 0c2c3cf358..e0f9584a9c 100644 --- a/src/d/d_msg_class.cpp +++ b/src/d/d_msg_class.cpp @@ -13,6 +13,7 @@ #include "JSystem/JUtility/JUTFont.h" #if TARGET_PC +#include "dusk/interp/user_interface.h" #include "dusk/menu_pointer.h" #include "dusk/scope_guard.hpp" #include "dusk/version.hpp" @@ -907,6 +908,16 @@ bool jmessage_tReference::isLightEnd() { return false; } +#if TARGET_PC +void jmessage_tReference::addCharAlpha() { + dusk::vdt::advance_toward_frame(mCharAlpha, 255.0f, mAddCharAlpha); +} + +void jmessage_tReference::addCharAllAlphaRate() { + dusk::vdt::advance_toward_frame(mCharAllAlphaRate, 1.0f, mAddCharAllAlphaRate); +} +#endif + void jmessage_tReference::decideOutFontRupeeColor(int i_inputVal) { int price_diff = getObjectPtr()->getNowTotalPrice() - getObjectPtr()->getNowTotalPayment(); diff --git a/src/d/d_msg_object.cpp b/src/d/d_msg_object.cpp index 072bd5039b..0157d2521f 100644 --- a/src/d/d_msg_object.cpp +++ b/src/d/d_msg_object.cpp @@ -30,9 +30,7 @@ #include "m_Do/m_Do_lib.h" #if TARGET_PC -#include -#include -#include +#include "dusk/interp/user_interface.h" #include "dusk/language.hpp" #include "dusk/logging.h" #include "dusk/menu_pointer.h" @@ -40,6 +38,10 @@ #include "dusk/mods/svc/flow.hpp" #include "dusk/settings.h" #include "dusk/version.hpp" + +#include +#include +#include #endif static void dMsgObject_addFundRaising(s16 param_0); @@ -569,6 +571,97 @@ int dMsgObject_c::_draw() { return 1; } +#if TARGET_PC +void dMsgObject_c::presentAnims() { + if (mpScrnDraw == NULL || mpOutFont == NULL) { + return; + } + + const u16 status = getStatusLocal(); + f32 target = 0.0f; + if (status == 2) { + if (isPlaceMessage() || isStaffMessage()) { + target = g_MsgObject_HIO_c.mStageTitleFadeIn; + } else if (isBossMessage()) { + target = g_MsgObject_HIO_c.mBossNameFadeIn; + } else if (isBookMessage()) { + target = g_MsgObject_HIO_c.mBoxAppearFrame + g_MsgObject_HIO_c.mWaitFrame + + g_MsgObject_HIO_c.mLightAppearFrame; + } else { + target = g_MsgObject_HIO_c.mBoxAppearFrame; + } + dusk::vdt::advance_toward_frame(field_0x16a, target, 1.0f); + if (isKanbanMessage() || isPlaceMessage() || isStaffMessage() || isBossMessage()) { + f32 ratio = dusk::vdt::clamped_fraction(field_0x16a, target); + mpScrnDraw->fukiScale(ratio); + mpScrnDraw->fukiAlpha(ratio); + mpOutFont->setAlphaRatio(ratio); + } else if (isBookMessage()) { + if (field_0x16a <= g_MsgObject_HIO_c.mBoxAppearFrame) { + f32 ratio = dusk::vdt::clamped_fraction(field_0x16a, g_MsgObject_HIO_c.mBoxAppearFrame); + mpScrnDraw->fukiAlpha(ratio); + mpOutFont->setAlphaRatio(ratio); + } else { + mpScrnDraw->fukiAlpha(1.0f); + mpOutFont->setAlphaRatio(1.0f); + } + s16 waitEnd = g_MsgObject_HIO_c.mBoxAppearFrame + g_MsgObject_HIO_c.mWaitFrame; + if (field_0x16a >= waitEnd && + field_0x16a <= waitEnd + g_MsgObject_HIO_c.mLightAppearFrame) + { + f32 scale = dusk::vdt::clamped_fraction(field_0x16a - waitEnd, g_MsgObject_HIO_c.mLightAppearFrame); + mpScrnDraw->fukiScale(scale); + } + } else { + f32 ratio = dusk::vdt::clamped_fraction(field_0x16a, target); + mpScrnDraw->fukiScale(1.0f); + mpScrnDraw->fukiAlpha(ratio); + mpOutFont->setAlphaRatio(ratio); + } + } else if (status == 17) { + if (isKanbanMessage() || isBookMessage()) { + target = g_MsgObject_HIO_c.field_0x304; + } else if (isPlaceMessage() || isStaffMessage()) { + target = g_MsgObject_HIO_c.mStageTitleFadeOut; + } else if (isBossMessage()) { + target = g_MsgObject_HIO_c.mBossNameFadeOut; + } else { + target = 5.0f; + } + dusk::vdt::advance_toward_frame(field_0x16a, target, 1.0f); + f32 ratio = dusk::vdt::clamped_fraction(field_0x16a, target); + mpScrnDraw->fukiAlpha(1.0f - ratio); + if (isBookMessage()) { + mpScrnDraw->fukiScale(1.0f - ratio); + } + mpOutFont->setAlphaRatio(1.0f - ratio); + } else if (status == 6) { + if (isBookMessage() && field_0x16a > 0) { + dusk::vdt::advance_toward_frame(field_0x16a, 0.0f, 1.0f); + f32 alpha = (10 - field_0x16a) / 10.0f; + mpScrnDraw->fontAlpha(alpha); + mpOutFont->setAlphaRatio(alpha); + } + jmessage_tReference* pRef = (jmessage_tReference*)mpRenProc->getReference(); + if (pRef->getCharAllAlphaRate() < 1.0f) { + pRef->addCharAllAlphaRate(); + f32 alpha = pRef->getCharAllAlphaRate(); + mpScrnDraw->setCharAlphaRate(alpha); + mpOutFont->setAlphaRatio(alpha); + } + } else if (status == 5 && isBookMessage() && + (isSend() || field_0x16a > 0)) + { + dusk::vdt::advance_toward_frame(field_0x16a, 10.0f, 1.0f); + if (field_0x16a <= 10) { + f32 alpha = (10 - field_0x16a) / 10.0f; + mpScrnDraw->fontAlpha(alpha); + mpOutFont->setAlphaRatio(alpha); + } + } +} +#endif + int dMsgObject_c::_delete() { mpResCont->destroyResource_all(); if (mpScrnDraw != NULL) { @@ -961,7 +1054,7 @@ void dMsgObject_c::waitProc() { void dMsgObject_c::openProc() { if (isMidonaMessage()) { bool uVar12 = 0; - if (field_0x16a == 0) { + if (DUSK_IF_ELSE(!mpScrnDraw->isSelectAnimeActive(), field_0x16a == 0)) { jmessage_tReference* pRef = (jmessage_tReference*)mpRenProc->getReference(); field_0x1a3 = 0; if (mpRefer->getMsgID() == 0x7fa) { @@ -995,7 +1088,7 @@ void dMsgObject_c::openProc() { } } } - field_0x16a++; + IF_NOT_DUSK(field_0x16a++); s16 sVar7; if (isKanbanMessage()) { sVar7 = g_MsgObject_HIO_c.mBoxAppearFrame; @@ -1062,12 +1155,12 @@ void dMsgObject_c::openProc() { void dMsgObject_c::outnowProc() { mpRefer->shiftCharCountBuffer(); - if (isBookMessage() && field_0x16a > 0) { - field_0x16a--; + if (isBookMessage() && field_0x16a DUSK_IF_ELSE(>, !=) 0) { + IF_NOT_DUSK(field_0x16a--); f32 alpha = (10 - field_0x16a) / 10.0f; mpScrnDraw->fontAlpha(alpha); mpOutFont->setAlphaRatio(alpha); - if (field_0x16a > 0) { + if (field_0x16a DUSK_IF_ELSE(>, !=) 0) { return; } } @@ -1077,7 +1170,7 @@ void dMsgObject_c::outnowProc() { if (mDoCPd_c::getTrigA(0)) { pRef->setCharAllAlphaRate(1.0f); } else { - pRef->addCharAllAlphaRate(); + IF_NOT_DUSK(pRef->addCharAllAlphaRate()); } f32 alpha = pRef->getCharAllAlphaRate(); mpScrnDraw->setCharAlphaRate(alpha); @@ -1131,8 +1224,8 @@ void dMsgObject_c::outwaitProc() { (jmessage_tReference*)mpRenProc->getReference(); mpScrnDraw->arwAnimeMove(); if (isBookMessage()) { - if (isSend() || field_0x16a > 0) { - field_0x16a++; + if (isSend() || field_0x16a DUSK_IF_ELSE(>, !=) 0) { + IF_NOT_DUSK(field_0x16a++); if (field_0x16a <= 10) { f32 alpha = (10 - field_0x16a) / 10.0f; mpScrnDraw->fontAlpha(alpha); @@ -1413,7 +1506,7 @@ void dMsgObject_c::finishProc() { } void dMsgObject_c::endProc() { - field_0x16a++; + IF_NOT_DUSK(field_0x16a++); s16 sVar4 = 5; if (isKanbanMessage() || isBookMessage()) { sVar4 = g_MsgObject_HIO_c.field_0x304; diff --git a/src/d/d_msg_out_font.cpp b/src/d/d_msg_out_font.cpp index ce5e97c2d0..9cab28a328 100644 --- a/src/d/d_msg_out_font.cpp +++ b/src/d/d_msg_out_font.cpp @@ -8,7 +8,7 @@ #include "f_op/f_op_msg_mng.h" #if TARGET_PC -#include "dusk/interp/frame_interpolation.h" +#include "dusk/interp/user_interface.h" #include "dusk/version.hpp" #endif @@ -312,20 +312,12 @@ void COutFont_c::setAlphaRatio(f32 i_ratio) { } void COutFont_c::draw(J2DTextBox* i_textbox, f32 param_1, f32 param_2, f32 param_3) { - s16 sp256[70]; + DUSK_IF_ELSE(f32, s16) sp256[70]; for (int i = 0; i < 70; i++) { sp256[i] = field_0x1b4[i]; } -#if TARGET_PC - if (dusk::interp::get_ui_tick_pending()) { - for (int i = 0; i < 70; i++) { - sp256[i] = -1; - } - } -#endif - for (int i = 0; i < 35; i++) { u8 type = mpOfs[i]->getType(); J2DTextBox* tbox = mpOfs[i]->getTextBoxPtr(); @@ -413,11 +405,14 @@ void COutFont_c::draw(J2DTextBox* i_textbox, f32 param_1, f32 param_2, f32 param } case 9: if (sp256[type] == field_0x1b4[type]) { +#if TARGET_PC + dusk::vdt::advance_looping_frame(field_0x1b4[type], 1.0f, 80.0f); +#else field_0x1b4[type]++; - if (field_0x1b4[type] >= 80) { field_0x1b4[type] = 0; } +#endif setBlendAnime(mpPane[type], field_0x1b4[type]); } @@ -433,55 +428,70 @@ void COutFont_c::draw(J2DTextBox* i_textbox, f32 param_1, f32 param_2, f32 param break; case 14: if (sp256[type] == field_0x1b4[type]) { +#if TARGET_PC + dusk::vdt::advance_looping_frame(field_0x1b4[type], 1.0f, 20.0f); +#else field_0x1b4[type]++; - if (field_0x1b4[type] >= 20) { field_0x1b4[type] = 0; } +#endif setBlendAnime(mpPane[type], field_0x1b4[type]); } mpPane[type]->draw(posX, posY, sizeX, sizeY, false, false, true); break; case 15: if (sp256[type] == field_0x1b4[type]) { +#if TARGET_PC + dusk::vdt::advance_looping_frame(field_0x1b4[type], 1.0f, 20.0f); +#else field_0x1b4[type]++; - if (field_0x1b4[type] >= 20) { field_0x1b4[type] = 0; } +#endif setBlendAnime(mpPane[type], field_0x1b4[type]); } mpPane[type]->draw(posX, posY, sizeX, sizeY, true, true, true); break; case 16: if (sp256[type] == field_0x1b4[type]) { +#if TARGET_PC + dusk::vdt::advance_looping_frame(field_0x1b4[type], 1.0f, 20.0f); +#else field_0x1b4[type]++; - if (field_0x1b4[type] >= 20) { field_0x1b4[type] = 0; } +#endif setBlendAnime(mpPane[type], field_0x1b4[type]); } mpPane[type]->draw(posX, posY, sizeX, sizeY, false, false, false); break; case 17: if (sp256[type] == field_0x1b4[type]) { +#if TARGET_PC + dusk::vdt::advance_looping_frame(field_0x1b4[type], 1.0f, 20.0f); +#else field_0x1b4[type]++; - if (field_0x1b4[type] >= 20) { field_0x1b4[type] = 0; } +#endif setBlendAnime(mpPane[type], field_0x1b4[type]); } mpPane[type]->draw(posX, posY, sizeX, sizeY, true, true, false); break; case 18: if (sp256[type] == field_0x1b4[type]) { +#if TARGET_PC + dusk::vdt::advance_looping_frame(field_0x1b4[type], 1.0f, 40.0f); +#else field_0x1b4[type]++; - if (field_0x1b4[type] >= 40) { field_0x1b4[type] = 0; } +#endif setBlendAnime(mpPane[type], field_0x1b4[type]); } @@ -493,11 +503,14 @@ void COutFont_c::draw(J2DTextBox* i_textbox, f32 param_1, f32 param_2, f32 param break; case 19: if (sp256[type] == field_0x1b4[type]) { +#if TARGET_PC + dusk::vdt::advance_looping_frame(field_0x1b4[type], 1.0f, 40.0f); +#else field_0x1b4[type]++; - if (field_0x1b4[type] >= 40) { field_0x1b4[type] = 0; } +#endif setBlendAnime(mpPane[type], field_0x1b4[type]); } @@ -528,24 +541,28 @@ void COutFont_c::draw(J2DTextBox* i_textbox, f32 param_1, f32 param_2, f32 param case 20: case 21: case 22: - IF_DUSK_BLOCK(dusk::interp::get_ui_tick_pending()) +#if TARGET_PC + dusk::vdt::advance_looping_frame(field_0x1b4[type], 1.0f, 28.0f); +#else field_0x1b4[type]++; if (field_0x1b4[type] >= 28) { field_0x1b4[type] = 0; } - IF_DUSK_BLOCK_END - +#endif mpPane[type]->rotate(0.5f * sizeX, 0.5f * sizeY, ROTATE_Z, (360.0f * (f32)field_0x1b4[type]) / 28.0f); mpPane[type]->draw(posX, posY, sizeX, sizeY, false, false, false); break; case 25: // some issues in here, 2020 if (sp256[type] == field_0x1b4[type]) { +#if TARGET_PC + dusk::vdt::advance_looping_frame(field_0x1b4[type], 1.0f, 18.0f); +#else field_0x1b4[type]++; - if (field_0x1b4[type] >= 18) { field_0x1b4[type] -= 18; } +#endif } f32 alpha; @@ -622,11 +639,14 @@ void COutFont_c::draw(J2DTextBox* i_textbox, f32 param_1, f32 param_2, f32 param case 67: case 68: if (sp256[type] == field_0x1b4[type]) { +#if TARGET_PC + dusk::vdt::advance_looping_frame(field_0x1b4[type], 1.0f, 40.0f); +#else field_0x1b4[type]++; - if (field_0x1b4[type] >= 40) { field_0x1b4[type] = 0; } +#endif setBlendAnime(mpPane[type], field_0x1b4[type]); } @@ -642,23 +662,28 @@ void COutFont_c::draw(J2DTextBox* i_textbox, f32 param_1, f32 param_2, f32 param case 59: case 60: if (sp256[type] == field_0x1b4[type]) { +#if TARGET_PC + dusk::vdt::advance_looping_frame(field_0x1b4[type], 1.0f, 40.0f); +#else field_0x1b4[type]++; - if (field_0x1b4[type] >= 40) { field_0x1b4[type] = 0; } +#endif setBlendAnime(mpPane[type], field_0x1b4[type]); } mpPane[type]->draw(posX, posY, sizeX, sizeY, false, false, false); break; case 62: if (sp256[type] == field_0x1b4[type]) { +#if TARGET_PC + dusk::vdt::advance_looping_frame(field_0x1b4[type], 1.0f, 10.0f); +#else field_0x1b4[type]++; - if (field_0x1b4[type] >= 10) { field_0x1b4[type] = 0; } - +#endif if (field_0x1b4[type] < 5) { mpPane[type]->setBlendRatio(1.0f, 0.0f); } else { @@ -697,14 +722,22 @@ void COutFont_c::reset(J2DTextBox* i_textbox) { } } -void COutFont_c::setBlendAnime(J2DPicture* i_pic, s16 param_1) { +void COutFont_c::setBlendAnime(J2DPicture* i_pic, DUSK_IF_ELSE(f32, s16) param_1) { +#if TARGET_PC + f32 i = fmodf(param_1, 20.0f); + if (i < 0.0f) { + i += 20.0f; + } +#else int i = param_1 % 20; +#endif if (i < 10) { - f32 dVar6 = fopMsgM_valueIncrease(10, i, 0); + f32 dVar6 = DUSK_IF_ELSE((i / 10.0f) * (i / 10.0f), fopMsgM_valueIncrease(10, i, 0)); i_pic->setBlendRatio(1.0f - dVar6, dVar6); } else { - f32 dVar6 = fopMsgM_valueIncrease(10, i - 10, 0); + f32 dVar6 = DUSK_IF_ELSE(((i - 10.0f) / 10.0f) * ((i - 10.0f) / 10.0f), + fopMsgM_valueIncrease(10, i - 10, 0)); i_pic->setBlendRatio(dVar6, 1.0f - dVar6); } } diff --git a/src/d/d_msg_scrn_3select.cpp b/src/d/d_msg_scrn_3select.cpp index b7e0e8a8db..1545f51584 100644 --- a/src/d/d_msg_scrn_3select.cpp +++ b/src/d/d_msg_scrn_3select.cpp @@ -17,6 +17,7 @@ #include "d/d_pane_class.h" #if TARGET_PC +#include "dusk/interp/user_interface.h" #include "dusk/menu_pointer.h" #include "dusk/version.hpp" @@ -315,6 +316,7 @@ dMsgScrn3Select_c::dMsgScrn3Select_c() { mDPDPoint = 0xFF; field_0x116 = 0xFF; field_0x117 = 0; + IF_DUSK(mPresenting = false); mSelMsgInactiveCol.set(0xFF, 0xFF, 0xFF, 0xFF); } @@ -441,6 +443,34 @@ void dMsgScrn3Select_c::translate(f32 i_x, f32 i_y) { mpParent->translate(i_x, i_y); } +#if TARGET_PC +void dMsgScrn3Select_c::presentAnims() { + if (mProcess >= PROC_MAX_e) { + return; + } + mPresenting = true; + if (mProcess == PROC_OPEN2_e || mProcess == PROC_CHANGE_e || mProcess == PROC_CLOSE_e) { + (this->*process[mProcess])(); + } + dusk::vdt::present_looping(mBpkFrame, mpAnmBpk, 1.0f); + dusk::vdt::present_looping(mBtkFrame, mpAnmBtk, 1.0f); + mpScreen->animation(); + + for (int i = 0; i < 3; i++) { + if (i == mSelNo) { + mpSelCld_c[i]->getPanePtr()->scale(1.0f, 1.0f); + mpSelCldr_c[i]->getPanePtr()->scale(1.0f, 1.0f); + } else { + mpSelCld_c[i]->getPanePtr()->scale(0.0f, 0.0f); + mpSelCldr_c[i]->getPanePtr()->scale(0.0f, 0.0f); + } + } + selectTrans(); + + mPresenting = false; +} +#endif + void dMsgScrn3Select_c::draw(f32 i_xPos, f32 i_yPos) { J2DGrafContext* port = dComIfGp_getCurrentGrafPort(); port->setup2D(); @@ -574,10 +604,14 @@ bool dMsgScrn3Select_c::selAnimeMove(u8 i_selNum, u8 param_1, bool param_2) { field_0x108 = param_2; #if TARGET_PC pointerMove(); + if (mProcess >= PROC_MAX_e) { + return false; + } #endif (this->*process[mProcess])(); +#if !TARGET_PC mBpkFrame++; if (mBpkFrame >= mpAnmBpk->getFrameMax()) { mBpkFrame -= mpAnmBpk->getFrameMax(); @@ -603,6 +637,7 @@ bool dMsgScrn3Select_c::selAnimeMove(u8 i_selNum, u8 param_1, bool param_2) { } selectTrans(); +#endif for (int i = 0; i < 3; i++) { if (i == mSelNo) { @@ -689,6 +724,7 @@ bool dMsgScrn3Select_c::selAnimeEnd() { (this->*process[mProcess])(); +#if !TARGET_PC mBpkFrame++; if (mBpkFrame >= mpAnmBpk->getFrameMax()) { mBpkFrame -= mpAnmBpk->getFrameMax(); @@ -702,6 +738,7 @@ bool dMsgScrn3Select_c::selAnimeEnd() { mpAnmBtk->setFrame(mBtkFrame); mpScreen->animation(); +#endif for (int i = 0; i < 3; i++) { if (i == mSelNo) { @@ -778,7 +815,13 @@ void dMsgScrn3Select_c::open1Proc() { void dMsgScrn3Select_c::open2Proc() { f32 sel_anm_frame[3] = {204.0f, 304.0f, 404.0f}; +#if TARGET_PC + if (mPresenting) { + dusk::vdt::advance_toward_frame(mBckFrame, 199.0f, 1.0f); + } +#else mBckFrame++; +#endif mpSelectCursor->setAlphaRate(1.0f); if (mBckFrame >= 199.0f) { @@ -903,7 +946,13 @@ void dMsgScrn3Select_c::changeProc() { if (field_0x108 != 0) { mBckFrame = 303.0f; } else { +#if TARGET_PC + if (mPresenting) { + dusk::vdt::advance_toward_frame(mBckFrame, 303.0f, 1.0f); + } +#else mBckFrame++; +#endif } selectAnimeTransform(0); @@ -915,7 +964,13 @@ void dMsgScrn3Select_c::changeProc() { if (field_0x108 != 0) { mBckFrame = 403.0f; } else { +#if TARGET_PC + if (mPresenting) { + dusk::vdt::advance_toward_frame(mBckFrame, 403.0f, 1.0f); + } +#else mBckFrame++; +#endif } selectAnimeTransform(0); @@ -930,7 +985,13 @@ void dMsgScrn3Select_c::changeProc() { if (field_0x108 != 0) { mBckFrame = 300.0f; } else { +#if TARGET_PC + if (mPresenting) { + dusk::vdt::advance_toward_frame(mBckFrame, 300.0f, 1.0f); + } +#else mBckFrame--; +#endif } selectAnimeTransform(1); @@ -942,7 +1003,13 @@ void dMsgScrn3Select_c::changeProc() { if (field_0x108 != 0) { mBckFrame = 403.0f; } else { +#if TARGET_PC + if (mPresenting) { + dusk::vdt::advance_toward_frame(mBckFrame, 403.0f, 1.0f); + } +#else mBckFrame++; +#endif } selectAnimeTransform(1); @@ -957,7 +1024,13 @@ void dMsgScrn3Select_c::changeProc() { if (field_0x108 != 0) { mBckFrame = 400.0f; } else { +#if TARGET_PC + if (mPresenting) { + dusk::vdt::advance_toward_frame(mBckFrame, 400.0f, 1.0f); + } +#else mBckFrame--; +#endif } selectAnimeTransform(2); @@ -969,7 +1042,13 @@ void dMsgScrn3Select_c::changeProc() { if (field_0x108 != 0) { mBckFrame = 300.0f; } else { +#if TARGET_PC + if (mPresenting) { + dusk::vdt::advance_toward_frame(mBckFrame, 300.0f, 1.0f); + } +#else mBckFrame--; +#endif } selectAnimeTransform(2); @@ -985,7 +1064,13 @@ void dMsgScrn3Select_c::changeProc() { void dMsgScrn3Select_c::closeProc() { mpSelectCursor->setAlphaRate(0.0f); +#if TARGET_PC + if (mPresenting) { + dusk::vdt::advance_toward_frame(mBckFrame, 190.0f, 1.0f); + } +#else mBckFrame--; +#endif for (int i = 0; i < 3; i++) { f32 scale_x = mpSel_c[i]->getPanePtr()->getScaleX(); diff --git a/src/d/d_msg_scrn_arrow.cpp b/src/d/d_msg_scrn_arrow.cpp index cea0dae145..587eb6a21a 100644 --- a/src/d/d_msg_scrn_arrow.cpp +++ b/src/d/d_msg_scrn_arrow.cpp @@ -7,6 +7,7 @@ #include "d/d_pane_class.h" #if TARGET_PC +#include "dusk/interp/user_interface.h" #include "dusk/settings.h" #endif @@ -73,6 +74,14 @@ void dMsgScrnArrow_c::draw() { if (dusk::getSettings().game.recordingMode) { return; } + if (mpArw_c->isVisible()) { + dusk::vdt::present_looping(mBckFrame, mpBck, 1.0f); + dusk::vdt::present_looping(mBpkFrame, mpBpk, 1.0f); + mpScreen->animation(); + } else if (mpDot_c->isVisible()) { + dusk::vdt::present_looping(mBpkFrame, mpBpk, 1.0f); + mpScreen->animation(); + } #endif J2DGrafContext* graf_ctx = dComIfGp_getCurrentGrafPort(); mpScreen->draw(0.0f, 0.0f, graf_ctx); @@ -103,6 +112,7 @@ void dMsgScrnArrow_c::arwAnimeMove() { mpDot_c->hide(); } +#if !TARGET_PC mBckFrame += 1.0f; if (mBckFrame >= (f32)mpBck->getFrameMax()) { mBckFrame -= (f32)mpBck->getFrameMax(); @@ -114,6 +124,7 @@ void dMsgScrnArrow_c::arwAnimeMove() { mBpkFrame -= (f32)mpBpk->getFrameMax(); } mpBpk->setFrame(mBpkFrame); +#endif mpScreen->animation(); } @@ -136,11 +147,14 @@ void dMsgScrnArrow_c::dotAnimeMove() { mpDot_c->show(); } +#if !TARGET_PC mBpkFrame += 1.0f; if (mBpkFrame >= (f32)mpBpk->getFrameMax()) { mBpkFrame -= (f32)mpBpk->getFrameMax(); } mpBpk->setFrame(mBpkFrame); +#endif + mpScreen->animation(); } diff --git a/src/d/d_msg_scrn_base.cpp b/src/d/d_msg_scrn_base.cpp index 5488b76648..638bf1fc8b 100644 --- a/src/d/d_msg_scrn_base.cpp +++ b/src/d/d_msg_scrn_base.cpp @@ -71,8 +71,19 @@ void dMsgScrnBase_c::multiDraw() { } } +#if TARGET_PC +void dMsgScrnBase_c::presentAnims() { + if (dMsgObject_c* msg = dMsgObject_getMsgObjectClass()) { + if (msg->getScrnDrawPtrLocal() == this) { + msg->presentAnims(); + } + } +} +#endif + void dMsgScrnBase_c::draw() { #if TARGET_PC + presentAnims(); if (dusk::getSettings().game.recordingMode) { return; } diff --git a/src/d/d_msg_scrn_explain.cpp b/src/d/d_msg_scrn_explain.cpp index 4771257ccd..1d90898017 100644 --- a/src/d/d_msg_scrn_explain.cpp +++ b/src/d/d_msg_scrn_explain.cpp @@ -15,6 +15,7 @@ #include #if TARGET_PC +#include "dusk/interp/user_interface.h" #include "dusk/version.hpp" #endif @@ -326,6 +327,7 @@ dMsgScrnExplain_c::~dMsgScrnExplain_c() { void dMsgScrnExplain_c::move() { u8 currentStatus = mStatus; +#if !TARGET_PC f32 y_offset = 0.0f; if (field_0x66 == 2) { y_offset = -35.0f; @@ -335,6 +337,7 @@ void dMsgScrnExplain_c::move() { mpRoot_c[i]->paneTrans(field_0x48 + g_MsgObject_HIO_c.mChoicePos[0][6], field_0x4c + g_MsgObject_HIO_c.mBoxPos[0][6] + y_offset); } +#endif (this->*move_process[mStatus])(); @@ -346,7 +349,29 @@ void dMsgScrnExplain_c::move() { g_MsgObject_HIO_c.mBoxTalkScaleY); } +#if TARGET_PC +void dMsgScrnExplain_c::presentAnims() { + if (mStatus == STATUS_OPEN_e || mStatus == STATUS_CLOSE_e) { + dusk::vdt::advance_toward_frame(field_0x5a, mStatus == STATUS_OPEN_e ? 5.0f : 0.0f, 1.0f); + field_0x48 = FB_WIDTH_BASE * getAlphaRatio(); + for (int i = 0; i < 2; i++) { + mpRoot_c[i]->setAlphaRate(1.0f - getAlphaRatio()); + } + if (mpBackTex != NULL) { + mpBackTex->setAlpha((1.0f - getAlphaRatio()) * 150.0f); + } + } + + const f32 y_offset = field_0x66 == 2 ? -35.0f : 0.0f; + for (int i = 0; i < 2; i++) { + mpRoot_c[i]->paneTrans(field_0x48 + g_MsgObject_HIO_c.mChoicePos[0][6], + field_0x4c + g_MsgObject_HIO_c.mBoxPos[0][6] + y_offset); + } +} +#endif + void dMsgScrnExplain_c::draw(J2DOrthoGraph* i_graf) { + IF_DUSK(presentAnims()); if (mStatus == STATUS_WAIT_e || mStatus == STATUS_OPEN_REQ_e) { return; } @@ -389,6 +414,7 @@ void dMsgScrnExplain_c::draw(J2DOrthoGraph* i_graf) { mpSelect_c->translate(486.0f + g_MsgObject_HIO_c.mChoicePos[0][7], 209.0f + g_MsgObject_HIO_c.mBoxPos[0][7] + y_offset); + IF_DUSK(mpSelect_c->presentAnims()); mpSelect_c->draw(0.0f, 0.0f); } @@ -445,7 +471,7 @@ void dMsgScrnExplain_c::open_init() { } void dMsgScrnExplain_c::open_proc() { - field_0x5a++; + IF_NOT_DUSK(field_0x5a++); if (field_0x5a >= 5) { field_0x5a = 5; if (field_0x64 == 1 || field_0x64 == 2) { @@ -627,7 +653,7 @@ void dMsgScrnExplain_c::close_proc() { iVar1 = true; } - field_0x5a--; + IF_NOT_DUSK(field_0x5a--); if (field_0x5a <= 0) { field_0x5a = 0; if (iVar1) { diff --git a/src/d/d_msg_scrn_howl.cpp b/src/d/d_msg_scrn_howl.cpp index c87c4bbb0f..a661526b9c 100644 --- a/src/d/d_msg_scrn_howl.cpp +++ b/src/d/d_msg_scrn_howl.cpp @@ -21,7 +21,8 @@ #include "m_Do/m_Do_graphic.h" #if TARGET_PC -#include "dusk/interp/frame_interpolation.h" +#include "dusk/game_clock.h" +#include "dusk/interp/user_interface.h" #endif // POSIX already defines a macro with this name, but we know that this specific name is @@ -147,6 +148,10 @@ dMsgScrnHowl_c::dMsgScrnHowl_c() { field_0x2124 = 0; field_0x2128 = 0; mPlotTime = 0; +#if TARGET_PC + mSampleAcc = 0.0f; + mPulseFrame = 0.0f; +#endif field_0x212c = 0; field_0x212e = 0; field_0x2126 = 0; @@ -288,18 +293,52 @@ dMsgScrnHowl_c::~dMsgScrnHowl_c() { dComIfGp_getMsgArchive(5)->removeResourceAll();; } +#if TARGET_PC +void dMsgScrnHowl_c::presentAnims() { + dMsgScrnBase_c::presentAnims(); + for (int i = 0; i < 0x300; i++) { + if (field_0x1b14[i] > 0) { + dusk::vdt::advance_toward_frame(field_0x1b14[i], 0.0f, 1.0f); + } + } + f32 alphaRate = mpPmP_c->getAlphaRate(); + f32 fVar1; + f32 fVar2; + if (field_0x2798 == 3) { + fVar1 = 0.5f; + fVar2 = 0.0f; + } else { + fVar1 = 1.0f; + fVar2 = 1.0f; + } + if (field_0x1994 != fVar1) { + dusk::vdt::present_addCalc2(&field_0x1994, fVar1, 0.2f, 1.0f, 0.1f); + } + if (field_0x1998 != fVar2) { + dusk::vdt::present_addCalc2(&field_0x1998, fVar2, 0.2f, 1.0f, 0.1f); + } + mpButtonIcon[0]->setAlphaRate(field_0x1994 * alphaRate); + mpButtonIcon[1]->setAlphaRate(field_0x1994 * alphaRate); + mpButtonText[0]->setAlphaRate(field_0x1998 * alphaRate); + mpButtonText[1]->setAlphaRate(field_0x1998 * alphaRate); +} +#endif + void dMsgScrnHowl_c::exec() { field_0x2799 = field_0x2798; (this->*process[field_0x2798])(); +#if !TARGET_PC for (int i = 0; i < 0x300; i++) { if (field_0x1b14[i] > 0) { field_0x1b14[i]--; } } +#endif if (field_0x2799 != field_0x2798) { (this->*init_proc[field_0x2798])(); } - + +#if !TARGET_PC f32 alphaRate = mpPmP_c->getAlphaRate(); f32 fVar1; f32 fVar2; @@ -326,6 +365,7 @@ void dMsgScrnHowl_c::exec() { mpButtonIcon[1]->setAlphaRate(field_0x1994 * alphaRate); mpButtonText[0]->setAlphaRate(field_0x1998 * alphaRate); mpButtonText[1]->setAlphaRate(field_0x1998 * alphaRate); +#endif #if TARGET_PC showCursor = true; @@ -466,6 +506,7 @@ void dMsgScrnHowl_c::resetLine() { field_0x2195 = 0; field_0x2128 = 0; mPlotTime = 0; + IF_DUSK(mSampleAcc = 0.0f); field_0x212c = 0; field_0x212e = 0; field_0x2124 = 0; @@ -502,7 +543,7 @@ void dMsgScrnHowl_c::drawWave() { if (local_80 < 0) { local_80 = 0; } - s32 local_94 = 0; + DUSK_IF_ELSE(f32, s32) local_94 = 0; Vec fVar12 = field_0x128; Vec this_02 = field_0x140; #if TARGET_PC // TODO: make this actually use the scissor @@ -540,7 +581,7 @@ void dMsgScrnHowl_c::drawWave() { for (int iVar10 = 0; iVar10 < field_0x2128 - 1; iVar10++) { f32 local_54 = local_e0; f32 local_c8 = field_0x180[sVar14]; - s32 sVar3 = field_0x1b14[sVar14]; + DUSK_IF_ELSE(f32, s32) sVar3 = field_0x1b14[sVar14]; local_e0 += field_0x1980; local_68 += field_0x1984; if (local_68 > 255.0f) { @@ -548,7 +589,7 @@ void dMsgScrnHowl_c::drawWave() { } sVar14 = addCount(sVar14); f32 fVar2 = field_0x180[sVar14]; - s16 temp_r4 = field_0x1b14[sVar14]; + DUSK_IF_ELSE(f32, s16) temp_r4 = field_0x1b14[sVar14]; if (iVar10 == field_0x2128 - 2) { local_60 = local_e0; local_64 = fVar2; @@ -595,17 +636,24 @@ void dMsgScrnHowl_c::drawWave() { f17 = local_60; f18 = local_64; } else { - IF_DUSK_BLOCK(dusk::interp::get_ui_tick_pending()) +#if TARGET_PC + dusk::vdt::advance_looping_frame(mPulseFrame, 1.0f, 31.0f); + if (mPulseFrame < 15.0f) { + local_dc = mPulseFrame / 15.0f; + } else { + local_dc = (30.0f - mPulseFrame) / 15.0f; + } +#else field_0x2134++; if (field_0x2134 > 30) { field_0x2134 = 0; } - IF_DUSK_BLOCK_END if (field_0x2134 < 15) { local_dc = field_0x2134 / 15.0f; } else { local_dc = (30.0f - field_0x2134) / 15.0f; } +#endif f17 = f26; f18 = local_e4; } @@ -878,6 +926,19 @@ void dMsgScrnHowl_c::drawEffect() { } void dMsgScrnHowl_c::calcMain() { +#if TARGET_PC + mSampleAcc += dusk::game_clock::original_frames(); + while (mSampleAcc >= 1.0f) { + mSampleAcc -= 1.0f; + if (mPlotTime < field_0x2138 + 380) { + mPlotTime++; + } else { + field_0x212c--; + } + calcWave(); + calcGuide(); + } +#else if (mPlotTime < field_0x2138 + 380) { mPlotTime++; } else { @@ -885,6 +946,7 @@ void dMsgScrnHowl_c::calcMain() { } calcWave(); calcGuide(); +#endif } void dMsgScrnHowl_c::calcWave() { diff --git a/src/d/d_msg_scrn_item.cpp b/src/d/d_msg_scrn_item.cpp index 17007403dc..33a975b6e9 100644 --- a/src/d/d_msg_scrn_item.cpp +++ b/src/d/d_msg_scrn_item.cpp @@ -25,6 +25,7 @@ #include #if TARGET_PC +#include "dusk/interp/user_interface.h" #include "dusk/version.hpp" #endif @@ -396,6 +397,25 @@ dMsgScrnItem_c::~dMsgScrnItem_c() { dComIfGp_getMsgCommonArchive()->removeResourceAll();; } +#if TARGET_PC +void dMsgScrnItem_c::presentAnims() { + dMsgScrnBase_c::presentAnims(); + mpSelect_c->presentAnims(); + for (int i = 0; i < 1; i++) { + dusk::vdt::present_looping(field_0x140[i], field_0x118[i], g_MsgObject_HIO_c.mBoxItemAnmSpeed); + } + for (int i = 0; i < 2; i++) { + dusk::vdt::present_looping(field_0x154[i], field_0x12c[i], g_MsgObject_HIO_c.mBoxItemAnmSpeed); + } + mpScreen->animation(); + if (isTalkNow()) { + fukiAlpha(1.0f); + } else { + fukiAlpha(field_0x13c); + } +} +#endif + void dMsgScrnItem_c::exec() { f32 dVar12 = field_0x13c; if (!field_0x19d) { @@ -404,6 +424,7 @@ void dMsgScrnItem_c::exec() { setBpk1Animation(field_0x12c[1]); field_0x19d = true; } +#if !TARGET_PC for (int i = 0; i < 1; i++) { field_0x140[i] += g_MsgObject_HIO_c.mBoxItemAnmSpeed; if (field_0x140[i] >= field_0x118[i]->getFrameMax()) { @@ -425,7 +446,8 @@ void dMsgScrnItem_c::exec() { } else { fukiAlpha(dVar12); } - +#endif + f32 yOffset; switch(field_0x19c) { case 1: @@ -578,6 +600,12 @@ bool dMsgScrnItem_c::selectAnimeEnd() { return mpSelect_c->selAnimeEnd(); } +#if TARGET_PC +bool dMsgScrnItem_c::isSelectAnimeActive() { + return mpSelect_c != NULL && mpSelect_c->isAnimeActive(); +} +#endif + void dMsgScrnItem_c::fukiScale(f32 param_0) { } diff --git a/src/d/d_msg_scrn_kanban.cpp b/src/d/d_msg_scrn_kanban.cpp index 7f254bbafb..41efff8824 100644 --- a/src/d/d_msg_scrn_kanban.cpp +++ b/src/d/d_msg_scrn_kanban.cpp @@ -14,6 +14,7 @@ #include "d/d_pane_class.h" #if TARGET_PC +#include "dusk/interp/user_interface.h" #include "dusk/settings.h" #include "dusk/version.hpp" #endif @@ -204,7 +205,16 @@ dMsgScrnKanban_c::~dMsgScrnKanban_c() { dComIfGp_getMsgArchive(2)->removeResourceAll(); } +#if TARGET_PC +void dMsgScrnKanban_c::presentAnims() { + dMsgScrnBase_c::presentAnims(); + dusk::vdt::present_looping(field_0xd8, field_0xd0, 1.0f); + mpScreen->animation(); +} +#endif + void dMsgScrnKanban_c::exec() { +#if !TARGET_PC field_0xd8 += 1.0f; if (field_0xd8 >= field_0xd0->getFrameMax()) { field_0xd8 -= field_0xd0->getFrameMax(); @@ -212,6 +222,7 @@ void dMsgScrnKanban_c::exec() { field_0xd0->setFrame(field_0xd8); mpScreen->animation(); +#endif if (isTalkNow()) { fukiAlpha(1.0f); @@ -222,6 +233,7 @@ void dMsgScrnKanban_c::exec() { void dMsgScrnKanban_c::draw() { #if TARGET_PC + presentAnims(); if (dusk::getSettings().game.recordingMode) { return; } diff --git a/src/d/d_msg_scrn_light.cpp b/src/d/d_msg_scrn_light.cpp index 0d9f409978..0434da93b1 100644 --- a/src/d/d_msg_scrn_light.cpp +++ b/src/d/d_msg_scrn_light.cpp @@ -8,7 +8,7 @@ #include "d/d_pane_class.h" #if TARGET_PC -#include "dusk/interp/frame_interpolation.h" +#include "dusk/interp/user_interface.h" #endif class dMsgScrnLight_HIO_c { @@ -206,12 +206,14 @@ void dMsgScrnLight_c::draw(f32* i_anmFrame, f32 i_posX, f32 i_posY, f32 i_scaleX } if (mPlayAnim) { - IF_DUSK_BLOCK(dusk::interp::get_ui_tick_pending()) +#if TARGET_PC + dusk::vdt::advance_looping_frame(*i_anmFrame, 1.0f, mpBck->getFrameMax()); +#else *i_anmFrame += 1.0f; if (*i_anmFrame >= mpBck->getFrameMax()) { *i_anmFrame = 0.0f; } - IF_DUSK_BLOCK_END +#endif mBckFrame = *i_anmFrame; mBpkFrame = *i_anmFrame; @@ -226,13 +228,14 @@ void dMsgScrnLight_c::draw(f32* i_anmFrame, f32 i_posX, f32 i_posY, f32 i_scaleX mpParent_c->setBlackWhite(i_black, i_white); if (mPlayAnim) { - IF_DUSK_BLOCK(dusk::interp::get_ui_tick_pending()) +#if TARGET_PC + dusk::vdt::advance_looping_frame(*i_anmFrame, i_anmRate, mpBck->getFrameMax()); +#else *i_anmFrame += i_anmRate; - if (*i_anmFrame >= mpBck->getFrameMax()) { *i_anmFrame = 0.0f; } - IF_DUSK_BLOCK_END +#endif mBckFrame = *i_anmFrame; mBpkFrame = *i_anmFrame; diff --git a/src/d/d_msg_scrn_talk.cpp b/src/d/d_msg_scrn_talk.cpp index 1e63d67a9b..d4b5d4e24f 100644 --- a/src/d/d_msg_scrn_talk.cpp +++ b/src/d/d_msg_scrn_talk.cpp @@ -21,6 +21,7 @@ #include #if TARGET_PC +#include "dusk/interp/user_interface.h" #include "dusk/settings.h" #include "dusk/version.hpp" #endif @@ -373,6 +374,15 @@ void dMsgScrnTalk_c::exec() { } } +#if TARGET_PC +void dMsgScrnTalk_c::presentAnims() { + dMsgScrnBase_c::presentAnims(); + if (mpSelect_c != NULL) { + mpSelect_c->presentAnims(); + } +} +#endif + void dMsgScrnTalk_c::drawSelf() { #if TARGET_PC if (dusk::getSettings().game.recordingMode) { @@ -404,7 +414,7 @@ void dMsgScrnTalk_c::drawSelf() { } } if (field_0x35c[i] > 0) { - field_0x35c[i]--; + DUSK_IF_ELSE(dusk::vdt::advance_toward_frame(field_0x35c[i], 0.0f, 1.0f), field_0x35c[i]--); } else { mpLight_c->draw( &mCharInfoPtr[i].field_0x14, mCharInfoPtr[i].field_0x00, mCharInfoPtr[i].field_0x04, @@ -489,6 +499,12 @@ bool dMsgScrnTalk_c::selectAnimeEnd() { return false; } +#if TARGET_PC +bool dMsgScrnTalk_c::isSelectAnimeActive() { + return mpSelect_c != NULL && mpSelect_c->isAnimeActive(); +} +#endif + void dMsgScrnTalk_c::fukiScale(f32 param_0) { } diff --git a/src/d/d_msg_scrn_tree.cpp b/src/d/d_msg_scrn_tree.cpp index bbed47cb05..36d4b9494f 100644 --- a/src/d/d_msg_scrn_tree.cpp +++ b/src/d/d_msg_scrn_tree.cpp @@ -10,6 +10,7 @@ #include "d/d_pane_class.h" #if TARGET_PC +#include "dusk/interp/user_interface.h" #include "dusk/settings.h" #include "dusk/version.hpp" #endif @@ -216,7 +217,17 @@ dMsgScrnTree_c::~dMsgScrnTree_c() { dComIfGp_getMsgArchive(2)->removeResourceAll(); } +#if TARGET_PC +void dMsgScrnTree_c::presentAnims() { + dMsgScrnBase_c::presentAnims(); + dusk::vdt::present_looping(field_0xdc, field_0xd0, 1.0f); + dusk::vdt::present_looping(field_0xe0, field_0xd4, 1.0f); + mpScreen->animation(); +} +#endif + void dMsgScrnTree_c::exec() { +#if !TARGET_PC field_0xdc += 1.0f; if (field_0xdc >= field_0xd0->getFrameMax()) { field_0xdc -= field_0xd0->getFrameMax(); @@ -229,6 +240,7 @@ void dMsgScrnTree_c::exec() { } field_0xd4->setFrame(field_0xe0); mpScreen->animation(); +#endif if (isTalkNow()) { fukiAlpha(1.0f); @@ -246,6 +258,7 @@ void dMsgScrnTree_c::exec() { void dMsgScrnTree_c::draw() { #if TARGET_PC + presentAnims(); if (dusk::getSettings().game.recordingMode) { return; }