This commit is contained in:
robojumper
2025-12-04 00:31:49 +01:00
parent ba810ccc9e
commit f8c9af7dc6
6 changed files with 689 additions and 123 deletions
+1
View File
@@ -1620,6 +1620,7 @@ d/lyt/d_lyt_mini_game.cpp:
.text start:0x8028BCE0 end:0x802969E0 align:16
.rodata start:0x804EE7D8 end:0x804EEB68
.data start:0x80538E58 end:0x80539B68
.sdata start:0x80573B90 end:0x80573BB0
.sbss start:0x80575970 end:0x80575990
.sdata2 start:0x8057C700 end:0x8057C760
+25 -25
View File
@@ -15409,21 +15409,21 @@ remove__21dLytMiniGameScoreSd_cFv = .text:0x802937C0; // type:function size:0x74
execute__21dLytMiniGameScoreSd_cFv = .text:0x80293840; // type:function size:0xF0
draw__21dLytMiniGameScoreSd_cFv = .text:0x80293930; // type:function size:0x48
init__21dLytMiniGameScoreSd_cFv = .text:0x80293980; // type:function size:0xA8
fn_80293A30__21dLytMiniGameScoreSd_cFv = .text:0x80293A30; // type:function size:0x60
fn_80293A90__21dLytMiniGameScoreSd_cFv = .text:0x80293A90; // type:function size:0x60
fn_80293AF0__21dLytMiniGameScoreSd_cFl = .text:0x80293AF0; // type:function size:0xC0
fn_80293BB0__21dLytMiniGameScoreSd_cFv = .text:0x80293BB0; // type:function size:0xA8
fn_80293C60__21dLytMiniGameScoreSd_cFv = .text:0x80293C60; // type:function size:0xE0
fn_80293D40__21dLytMiniGameScoreSd_cFv = .text:0x80293D40; // type:function size:0x80
fn_80293DC0__21dLytMiniGameScoreSd_cFv = .text:0x80293DC0; // type:function size:0x80
fn_80293E40__21dLytMiniGameScoreSd_cFv = .text:0x80293E40; // type:function size:0x88
fn_80293ED0__21dLytMiniGameScoreSd_cFv = .text:0x80293ED0; // type:function size:0x74
fn_80293F50__21dLytMiniGameScoreSd_cFv = .text:0x80293F50; // type:function size:0x54
fn_80293FB0__21dLytMiniGameScoreSd_cFv = .text:0x80293FB0; // type:function size:0x54
fn_80294010__21dLytMiniGameScoreSd_cFv = .text:0x80294010; // type:function size:0xC
fn_80294020__21dLytMiniGameScoreSd_cFv = .text:0x80294020; // type:function size:0xC
fn_80294030__21dLytMiniGameScoreSd_cCFv = .text:0x80294030; // type:function size:0x44
fn_80294080__21dLytMiniGameScoreSd_cCFv = .text:0x80294080; // type:function size:0x44
setScoreUp__21dLytMiniGameScoreSd_cFl = .text:0x80293A30; // type:function size:0x60
setScoreDown__21dLytMiniGameScoreSd_cFl = .text:0x80293A90; // type:function size:0x60
setScoreInternal__21dLytMiniGameScoreSd_cFl = .text:0x80293AF0; // type:function size:0xC0
setHighestDigitIndex__21dLytMiniGameScoreSd_cFl = .text:0x80293BB0; // type:function size:0xA8
setDigit__21dLytMiniGameScoreSd_cFll = .text:0x80293C60; // type:function size:0xE0
resetScoreUp__21dLytMiniGameScoreSd_cFv = .text:0x80293D40; // type:function size:0x80
resetScoreDown__21dLytMiniGameScoreSd_cFv = .text:0x80293DC0; // type:function size:0x80
resetDigits__21dLytMiniGameScoreSd_cFv = .text:0x80293E40; // type:function size:0x88
resetPosition__21dLytMiniGameScoreSd_cFv = .text:0x80293ED0; // type:function size:0x74
startScoreUp__21dLytMiniGameScoreSd_cFv = .text:0x80293F50; // type:function size:0x54
startScoreDown__21dLytMiniGameScoreSd_cFv = .text:0x80293FB0; // type:function size:0x54
stopScoreUp__21dLytMiniGameScoreSd_cFv = .text:0x80294010; // type:function size:0xC
stopScoreDown__21dLytMiniGameScoreSd_cFv = .text:0x80294020; // type:function size:0xC
isScoreUpEndReached__21dLytMiniGameScoreSd_cCFv = .text:0x80294030; // type:function size:0x44
isScoreDownEndReached__21dLytMiniGameScoreSd_cCFv = .text:0x80294080; // type:function size:0x44
dLytMiniGame_c_classInit__Fv = .text:0x802940D0; // type:function size:0x380
__dt__19dLytMiniGameScore_cFv = .text:0x80294450; // type:function size:0x74
__dt__21dLytMiniGameScoreSd_cFv = .text:0x802944D0; // type:function size:0x74
@@ -15433,10 +15433,10 @@ __dt__18dLytMiniGameBugs_cFv = .text:0x80294650; // type:function size:0x74
__ct__26dLytMiniGamePumpkinParts_cFv = .text:0x802946D0; // type:function size:0x6C
__dt__26dLytMiniGamePumpkinParts_cFv = .text:0x80294740; // type:function size:0x74
__dt__21dLytMiniGamePumpkin_cFv = .text:0x802947C0; // type:function size:0x68
LytMiniGame__init = .text:0x80294830; // type:function size:0xA94
LytMiniGame__destructRes = .text:0x802952D0; // type:function size:0x31C
fn_802955F0 = .text:0x802955F0; // type:function size:0xD4
fn_802956D0 = .text:0x802956D0; // type:function size:0x6C
create__14dLytMiniGame_cFv = .text:0x80294830; // type:function size:0xA94
doDelete__14dLytMiniGame_cFv = .text:0x802952D0; // type:function size:0x31C
execute__14dLytMiniGame_cFv = .text:0x802955F0; // type:function size:0xD4
draw__14dLytMiniGame_cFv = .text:0x802956D0; // type:function size:0x6C
scoreRelatedExecute__14dLytMiniGame_cFv = .text:0x80295740; // type:function size:0x8C
scoreRelated__14dLytMiniGame_cFv = .text:0x802957D0; // type:function size:0x78
setDisplayedPoints__14dLytMiniGame_cFl = .text:0x80295850; // type:function size:0xA8
@@ -15480,11 +15480,11 @@ fn_802962A0 = .text:0x802962A0; // type:function size:0x88
fn_80296330 = .text:0x80296330; // type:function size:0xA4
fn_802963E0 = .text:0x802963E0; // type:function size:0x98
fn_80296480 = .text:0x80296480; // type:function size:0x98
fn_80296520 = .text:0x80296520; // type:function size:0x58
fn_80296580 = .text:0x80296580; // type:function size:0x130
fn_802966B0 = .text:0x802966B0; // type:function size:0x30
fn_802966E0 = .text:0x802966E0; // type:function size:0x40
decrementLayoutArcRefCount = .text:0x80296720; // type:function size:0x4C
init__14dLytMiniGame_cFv = .text:0x80296520; // type:function size:0x58
loadData__14dLytMiniGame_cFPCcl = .text:0x80296580; // type:function size:0x130
isLoading__14dLytMiniGame_cCFPCc = .text:0x802966B0; // type:function size:0x30
attachLoadedData__14dLytMiniGame_cFPCcRQ23d2d10ResAccIf_c = .text:0x802966E0; // type:function size:0x40
unloadData__14dLytMiniGame_cFPCc = .text:0x80296720; // type:function size:0x4C
__dt__14dLytMiniGame_cFv = .text:0x80296770; // type:function size:0x270
LytMeterSuiryuScoreBase__stateNoneEnter = .text:0x802969E0; // type:function size:0x4
LytMeterSuiryuScoreBase__stateNoneUpdate = .text:0x802969F0; // type:function size:0x4
@@ -20855,7 +20855,7 @@ playMinigameStartSound__20dSndSmallEffectMgr_cFv = .text:0x8037EA80; // type:fun
playMinigameFinishSound__20dSndSmallEffectMgr_cFv = .text:0x8037EA90; // type:function size:0x40
playMinigameFinishWhistleSound__20dSndSmallEffectMgr_cFv = .text:0x8037EAD0; // type:function size:0x40
playMinigameScoreUpSound__20dSndSmallEffectMgr_cFl = .text:0x8037EB10; // type:function size:0x11C
playMinigameScoreDownSound__20dSndSmallEffectMgr_cFv = .text:0x8037EC30; // type:function size:0x8
playMinigameScoreDownSound__20dSndSmallEffectMgr_cFl = .text:0x8037EC30; // type:function size:0x8
playMinigameMusasabiSound__20dSndSmallEffectMgr_cFl = .text:0x8037EC40; // type:function size:0x3C
playSkbSound__20dSndSmallEffectMgr_cFUl = .text:0x8037EC80; // type:function size:0xB0
playDemoSound__20dSndSmallEffectMgr_cFUlPQ34nw4r3snd11SoundHandle = .text:0x8037ED30; // type:function size:0x68
+109 -30
View File
@@ -145,18 +145,28 @@ private:
/** 2D UI - Mini Game - Time */
class dLytMiniGameTime_c {
public:
enum Variant_e {
TIME_VARIANT_0,
TIME_VARIANT_1,
TIME_VARIANT_2,
TIME_VARIANT_3,
TIME_VARIANT_4,
TIME_VARIANT_5,
};
public:
dLytMiniGameTime_c()
: field_0x7D4(0),
mCurrentTimerValueMilliSeconds(0),
mCurrentTimerValueSeconds(0),
mLastTimerValueSeconds(0),
mTimerVariant(0),
mTimeFormat(0),
mHighestDigitIndex(0),
field_0x7EC(false),
field_0x7ED(false),
field_0x7EE(false),
field_0x7F0(0),
mVariant(0),
field_0x7F4(0),
mIsVisible(false) {}
virtual ~dLytMiniGameTime_c() {}
@@ -167,8 +177,16 @@ public:
bool draw();
void init();
void setVariant(s32 var) {
mVariant = var;
}
void setField_0x7EE(bool v) {
field_0x7EE = v;
}
private:
enum TimerVariant_e {
enum TimeFormat_e {
TIMER_LONG,
TIMER_SECONDS,
};
@@ -224,12 +242,12 @@ private:
/* 0x7D8 */ s32 mCurrentTimerValueMilliSeconds;
/* 0x7DC */ s32 mCurrentTimerValueSeconds;
/* 0x7E0 */ s32 mLastTimerValueSeconds;
/* 0x7E4 */ u8 mTimerVariant;
/* 0x7E4 */ u8 mTimeFormat;
/* 0x7E4 */ s32 mHighestDigitIndex;
/* 0x7EC */ bool field_0x7EC;
/* 0x7ED */ bool field_0x7ED;
/* 0x7EE */ bool field_0x7EE;
/* 0x7F0 */ UNKWORD field_0x7F0;
/* 0x7F0 */ s32 mVariant;
/* 0x7F4 */ u8 field_0x7F4;
/* 0x7F5 */ bool mIsVisible;
};
@@ -278,6 +296,15 @@ private:
/** 2D UI - Mini Game - Score counter */
class dLytMiniGameScore_c {
public:
enum Variant_e {
SCORE_VARIANT_0,
SCORE_VARIANT_1,
SCORE_VARIANT_2,
SCORE_VARIANT_3,
SCORE_VARIANT_4,
};
public:
dLytMiniGameScore_c()
: mScore(0),
@@ -298,7 +325,7 @@ public:
field_0x814(false),
field_0x815(false),
field_0x816(false),
field_0x818(0),
mVariant(SCORE_VARIANT_0),
field_0x81C(0),
field_0x820(false),
field_0x824(0),
@@ -315,6 +342,14 @@ public:
bool draw();
void init();
void setVariant(s32 var) {
mVariant = var;
}
void setField_0x816(bool v) {
field_0x816 = v;
}
private:
void fn_80291410();
void fn_802915B0();
@@ -396,7 +431,7 @@ private:
/* 0x814 */ bool field_0x814;
/* 0x815 */ bool field_0x815;
/* 0x816 */ bool field_0x816;
/* 0x818 */ s32 field_0x818;
/* 0x818 */ s32 mVariant;
/* 0x81C */ s32 field_0x81C;
/* 0x820 */ bool field_0x820;
/* 0x824 */ s32 field_0x824;
@@ -423,21 +458,21 @@ public:
private:
static dLytMiniGameScoreSd_c *sInstance;
void fn_80293A30();
void fn_80293A90();
void fn_80293AF0(s32);
void fn_80293BB0();
void fn_80293C60();
void fn_80293D40();
void fn_80293DC0();
void fn_80293E40();
void fn_80293ED0();
void fn_80293F50();
void fn_80293FB0();
void fn_80294010();
void fn_80294020();
bool fn_80294030() const;
bool fn_80294080() const;
void setScoreUp(s32 score);
void setScoreDown(s32 score);
void setScoreInternal(s32 score);
void setHighestDigitIndex(s32);
void setDigit(s32 digitIndex, s32 number);
void resetScoreUp();
void resetScoreDown();
void resetDigits();
void resetPosition();
void startScoreUp();
void startScoreDown();
void stopScoreUp();
void stopScoreDown();
bool isScoreUpEndReached() const;
bool isScoreDownEndReached() const;
/* 0x004 */ d2d::LytBase_c mLyt;
/* 0x094 */ d2d::AnmGroup_c mAnm[5];
@@ -447,6 +482,37 @@ private:
};
class dLytMiniGame_c : public dBase_c {
public:
enum Variant_e {
VARIANT_0,
VARIANT_1,
VARIANT_2,
VARIANT_3,
VARIANT_4,
VARIANT_5,
VARIANT_6,
VARIANT_7,
VARIANT_8,
VARIANT_9,
VARIANT_10,
VARIANT_11,
VARIANT_12,
VARIANT_13,
VARIANT_14,
VARIANT_15,
VARIANT_16,
};
private:
enum Slot_e {
SLOT_MINI_GAME,
SLOT_MINI_GAME_SCORE,
SLOT_MINI_GAME_TIME,
SLOT_MINI_GAME_BUGS,
SLOT_MINI_GAME_PUMPKIN,
SLOT_MINI_GAME_SCORE_SD,
};
public:
dLytMiniGame_c()
: field_0x0068(0),
@@ -455,7 +521,7 @@ public:
field_0x006B(0),
field_0x006C(0),
field_0x006D(0),
field_0x1510(1),
mVariant(1),
field_0x3864(0),
field_0x3865(0),
field_0x3866(false),
@@ -463,6 +529,11 @@ public:
field_0x3868(0) {}
virtual ~dLytMiniGame_c() {}
virtual int create() override;
virtual int doDelete() override;
virtual int execute() override;
virtual int draw() override;
static dLytMiniGame_c *GetInstance() {
return sInstance;
}
@@ -498,6 +569,14 @@ public:
private:
static dLytMiniGame_c *sInstance;
bool isLoading(const char *name) const;
bool loadData(const char *name, s32 slot);
void unloadData(const char *name);
void attachLoadedData(const char *name, d2d::ResAccIf_c &resAcc);
void init();
/* 0x0068 */ u8 field_0x0068;
/* 0x0069 */ u8 field_0x0069;
/* 0x006A */ u8 field_0x006A;
@@ -505,14 +584,14 @@ private:
/* 0x006C */ u8 field_0x006C;
/* 0x006D */ u8 field_0x006D;
/* 0x0070 */ d2d::ResAccIf_c mResAcc1;
/* 0x03E0 */ d2d::ResAccIf_c mResAcc2;
/* 0x0750 */ d2d::ResAccIf_c mResAcc3;
/* 0x0AC0 */ d2d::ResAccIf_c mResAcc4;
/* 0x0E30 */ d2d::ResAccIf_c mResAcc5;
/* 0x11A0 */ d2d::ResAccIf_c mResAcc6;
/* 0x0070 */ d2d::ResAccIf_c mResAccStart;
/* 0x03E0 */ d2d::ResAccIf_c mResAccScore;
/* 0x0750 */ d2d::ResAccIf_c mResAccTime;
/* 0x0AC0 */ d2d::ResAccIf_c mResAccBugs;
/* 0x0E30 */ d2d::ResAccIf_c mResAccPumpkin;
/* 0x11A0 */ d2d::ResAccIf_c mResAccScoreSd;
/* 0x1510 */ UNKWORD field_0x1510;
/* 0x1510 */ s32 mVariant;
/* 0x1514 */ dLytMiniGameScore_c mScore;
/* 0x1D64 */ dLytMiniGameScoreSd_c mScoreSd;
+1 -1
View File
@@ -62,7 +62,7 @@ public:
bool playMinigameFinishSound();
bool playMinigameFinishWhistleSound();
bool playMinigameScoreUpSound(s32 param);
bool playMinigameScoreDownSound();
bool playMinigameScoreDownSound(s32 score);
bool playMinigameMusasabiSound(s32 count);
bool playSkbSound(u32 soundId);
+552 -66
View File
@@ -8,6 +8,7 @@
#include "d/lyt/d2d.h"
#include "d/snd/d_snd_small_effect_mgr.h"
#include "d/snd/d_snd_wzsound.h"
#include "f/f_base.h"
#include "m/m_vec.h"
#include "nw4r/lyt/lyt_pane.h"
#include "nw4r/lyt/lyt_types.h"
@@ -819,7 +820,7 @@ bool dLytMiniGameTime_c::execute() {
}
if (mIsVisible) {
switch (mTimerVariant) {
switch (mTimeFormat) {
case TIMER_LONG: updateLongTimer(); break;
case TIMER_SECONDS: updateSecondsTimer(); break;
}
@@ -865,14 +866,14 @@ bool dLytMiniGameTime_c::execute() {
mLyt.calc();
}
if (mTimerVariant == TIMER_SECONDS) {
if (mTimeFormat == TIMER_SECONDS) {
if (mCurrentTimerValueSeconds <= 10 && mLastTimerValueSeconds != mCurrentTimerValueSeconds) {
dSndSmallEffectMgr_c::GetInstance()->playMinigameTimeUpSound(mCurrentTimerValueSeconds);
}
saveSecondsTimer();
}
if (field_0x7F0 == 0) {
if (mVariant == TIME_VARIANT_0) {
if (mCurrentTimerValueSeconds >= 590 && mLastTimerValueSeconds != mCurrentTimerValueSeconds &&
mCurrentTimerValueSeconds != 600) {
dSndSmallEffectMgr_c::GetInstance()->playMinigameTimeUpSound(600 - mCurrentTimerValueSeconds);
@@ -898,13 +899,13 @@ void dLytMiniGameTime_c::init() {
return;
}
switch (field_0x7F0) {
case 0: mTimerVariant = TIMER_LONG; break;
case 1: mTimerVariant = TIMER_SECONDS; break;
case 2: mTimerVariant = TIMER_SECONDS; break;
case 3: mTimerVariant = TIMER_LONG; break;
case 4: mTimerVariant = TIMER_LONG; break;
case 5: mTimerVariant = TIMER_LONG; break;
switch (mVariant) {
case TIME_VARIANT_0: mTimeFormat = TIMER_LONG; break;
case TIME_VARIANT_1: mTimeFormat = TIMER_SECONDS; break;
case TIME_VARIANT_2: mTimeFormat = TIMER_SECONDS; break;
case TIME_VARIANT_3: mTimeFormat = TIMER_LONG; break;
case TIME_VARIANT_4: mTimeFormat = TIMER_LONG; break;
case TIME_VARIANT_5: mTimeFormat = TIMER_LONG; break;
}
resetAlphaIn();
@@ -1267,7 +1268,7 @@ void dLytMiniGameTime_c::resetDigits() {
}
void dLytMiniGameTime_c::resetPosition() {
switch (mTimerVariant) {
switch (mTimeFormat) {
case TIMER_LONG:
setTimePosition(false);
setBestHasSixDigits(false);
@@ -1904,13 +1905,13 @@ bool dLytMiniGameScore_c::execute() {
if (mIsVisible) {
fn_80291BC0();
if (!field_0x816) {
switch (field_0x818) {
case 0:
switch (mVariant) {
case SCORE_VARIANT_0:
if (hasIncreasedScore()) {
startGetScore();
}
break;
case 2:
case SCORE_VARIANT_2:
if (field_0x829) {
if (hasIncreasedScore()) {
startGetScore();
@@ -1923,15 +1924,15 @@ bool dLytMiniGameScore_c::execute() {
field_0x829 = false;
}
break;
case 1:
case SCORE_VARIANT_1:
if (mScore != 1) {
if (hasIncreasedScore()) {
startGetScore();
}
}
break;
case 3:
case 4:
case SCORE_VARIANT_3:
case SCORE_VARIANT_4:
if (hasIncreasedScore()) {
startGetScore();
}
@@ -1985,7 +1986,7 @@ bool dLytMiniGameScore_c::execute() {
mLyt.calc();
}
if (!field_0x816 && field_0x818 == 0 && hasIncreasedScore()) {
if (!field_0x816 && mVariant == SCORE_VARIANT_0 && hasIncreasedScore()) {
dSndSmallEffectMgr_c::GetInstance()->playMinigameScoreUpSound(mScore);
}
@@ -2050,8 +2051,8 @@ void dLytMiniGameScore_c::init() {
mLyt.calc();
mAnm[SCORE_ANIM_IN].setAnimEnable(false);
switch (field_0x818) {
case 0:
switch (mVariant) {
case SCORE_VARIANT_0:
field_0x82C = 0;
field_0x81C = 21;
field_0x7E4 = 4;
@@ -2087,7 +2088,7 @@ void dLytMiniGameScore_c::init() {
fn_80293450(field_0x81C);
break;
case 1:
case SCORE_VARIANT_1:
field_0x830 = 0;
field_0x82C = 0;
field_0x81C = 11;
@@ -2148,7 +2149,7 @@ void dLytMiniGameScore_c::init() {
}
fn_80293450(field_0x81C);
break;
case 2:
case SCORE_VARIANT_2:
field_0x830 = 0;
field_0x82C = 0;
field_0x81C = 6;
@@ -2167,7 +2168,7 @@ void dLytMiniGameScore_c::init() {
fn_80293450(field_0x81C);
break;
case 3:
case SCORE_VARIANT_3:
field_0x82C = 0;
field_0x81C = 21;
field_0x7E4 = 4;
@@ -2203,7 +2204,7 @@ void dLytMiniGameScore_c::init() {
fn_80293450(field_0x81C);
break;
case 4:
case SCORE_VARIANT_4:
field_0x830 = 0;
field_0x82C = 0;
field_0x81C = 19;
@@ -2265,7 +2266,7 @@ void dLytMiniGameScore_c::fn_80291410() {
field_0x820 = true;
mIsVisible = true;
if (field_0x818 == 1) {
if (mVariant == SCORE_VARIANT_1) {
setScore(1);
calcNumDigits();
mAnm[SCORE_ANIM_SET_POSITION].setFrame(field_0x81C);
@@ -2455,11 +2456,11 @@ void dLytMiniGameScore_c::fn_80291BC0() {
calcNumDigits();
realizePosition();
if (field_0x818 == 1) {
if (mVariant == SCORE_VARIANT_1) {
if (field_0x828) {
fn_80291EF0();
}
} else if (field_0x818 == 2) {
} else if (mVariant == SCORE_VARIANT_2) {
fn_80292040();
}
@@ -2835,8 +2836,8 @@ void dLytMiniGameScore_c::fn_80292C30() {
PaneCalc calc;
switch (field_0x818) {
case 0: {
switch (mVariant) {
case SCORE_VARIANT_0: {
dMessage_c::getGlobalTagProcessor()->setNumericArg0(mScore);
loadTextVariant(1);
field_0x7E8 = mpTextBoxes[0]->GetLineWidth(nullptr);
@@ -2850,7 +2851,7 @@ void dLytMiniGameScore_c::fn_80292C30() {
break;
}
case 3: {
case SCORE_VARIANT_3: {
dMessage_c::getGlobalTagProcessor()->setNumericArg0(mScore);
loadTextVariant(0);
field_0x7E8 = mpTextBoxes[0]->GetLineWidth(nullptr);
@@ -2948,14 +2949,15 @@ static const d2d::LytBrlanMapping brlanMapScoreSd[] = {
{ "miniGameScoreSd_00_scoreDown.brlan", "G_animAll_00"},
};
#define SCORE_SD_ANIM_0_TO_9_0 0
#define SCORE_SD_ANIM_0_TO_9_1 1
#define SCORE_SD_ANIM_0_TO_9_OFFSET 0
#define SCORE_SD_ANIM_SET_POSITION 2
#define SCORE_SD_ANIM_SCORE_UP 3
#define SCORE_SD_ANIM_SCORE_DOWN 4
#define SCORE_SD_NUM_ANIMS 5
#define SCORE_SD_NUM_DIGITS 2
bool dLytMiniGameScoreSd_c::build(d2d::ResAccIf_c *resAcc) {
mLyt.setResAcc(resAcc);
mLyt.build("miniGameScoreSd_00.brlyt", nullptr);
@@ -2990,13 +2992,13 @@ bool dLytMiniGameScoreSd_c::execute() {
}
if (mIsVisible) {
if (fn_80294030()) {
fn_80294010();
if (isScoreUpEndReached()) {
stopScoreUp();
mIsVisible = false;
}
if (fn_80294080()) {
fn_80294020();
if (isScoreDownEndReached()) {
stopScoreDown();
mIsVisible = false;
}
@@ -3027,11 +3029,11 @@ void dLytMiniGameScoreSd_c::init() {
return;
}
fn_80293D40();
fn_80293DC0();
fn_80293E40();
fn_80293ED0();
fn_80293AF0(0);
resetScoreUp();
resetScoreDown();
resetDigits();
resetPosition();
setScoreInternal(0);
mAnm[SCORE_SD_ANIM_SCORE_UP].setToEnd2();
mAnm[SCORE_SD_ANIM_SCORE_UP].setAnimEnable(true);
@@ -3039,65 +3041,549 @@ void dLytMiniGameScoreSd_c::init() {
mAnm[SCORE_SD_ANIM_SCORE_UP].setAnimEnable(false);
}
void dLytMiniGameScoreSd_c::fn_80293A30() {
void dLytMiniGameScoreSd_c::setScoreUp(s32 score) {
if (sInstance == nullptr) {
return;
}
setScoreInternal(score);
startScoreUp();
dSndSmallEffectMgr_c::GetInstance()->playMinigameScoreUpSound(score);
mIsVisible = true;
}
void dLytMiniGameScoreSd_c::fn_80293A90() {
void dLytMiniGameScoreSd_c::setScoreDown(s32 score) {
if (sInstance == nullptr) {
return;
}
setScoreInternal(score);
startScoreUp();
dSndSmallEffectMgr_c::GetInstance()->playMinigameScoreDownSound(score);
mIsVisible = true;
}
void dLytMiniGameScoreSd_c::fn_80293AF0(s32) {
void dLytMiniGameScoreSd_c::setScoreInternal(s32 score) {
s32 digits[2];
digits[1] = score / 10;
digits[0] = score % 10;
s32 num = 0;
if (digits[1] != 0) {
num = 1;
} else if (digits[0] != 0) {
num = 0;
}
setHighestDigitIndex(num);
for (int i = 0; i <= num; i++) {
setDigit(i, digits[i]);
}
field_0x1D4 = score;
}
void dLytMiniGameScoreSd_c::fn_80293BB0() {
void dLytMiniGameScoreSd_c::setHighestDigitIndex(s32 num) {
f32 frame = num + 6.0f;
mAnm[SCORE_SD_ANIM_SET_POSITION].setRate(0.0f);
mAnm[SCORE_SD_ANIM_SET_POSITION].setFrame(frame);
mAnm[SCORE_SD_ANIM_SET_POSITION].setAnimEnable(true);
mLyt.calc();
mAnm[SCORE_SD_ANIM_SET_POSITION].setAnimEnable(false);
}
void dLytMiniGameScoreSd_c::fn_80293C60() {
void dLytMiniGameScoreSd_c::setDigit(s32 digitIndex, s32 number) {
u8 idx = digitIndex + SCORE_SD_ANIM_0_TO_9_OFFSET;
f32 frame = 0.0f;
switch (number) {
case 0: frame = 0.0f; break;
case 1: frame = 1.0f; break;
case 2: frame = 2.0f; break;
case 4: frame = 3.0f; break;
case 6: frame = 4.0f; break;
case 8: frame = 5.0f; break;
}
mAnm[idx].setFrame(frame);
mAnm[idx].setAnimEnable(true);
mLyt.calc();
mAnm[idx].setAnimEnable(false);
}
void dLytMiniGameScoreSd_c::fn_80293D40() {
void dLytMiniGameScoreSd_c::resetScoreUp() {
mAnm[SCORE_SD_ANIM_SCORE_UP].setForwardOnce();
mAnm[SCORE_SD_ANIM_SCORE_UP].setToEnd2();
mAnm[SCORE_SD_ANIM_SCORE_UP].setAnimEnable(true);
mLyt.calc();
mAnm[SCORE_SD_ANIM_SCORE_UP].setAnimEnable(false);
}
void dLytMiniGameScoreSd_c::fn_80293DC0() {
void dLytMiniGameScoreSd_c::resetScoreDown() {
mAnm[SCORE_SD_ANIM_SCORE_DOWN].setForwardOnce();
mAnm[SCORE_SD_ANIM_SCORE_DOWN].setToEnd2();
mAnm[SCORE_SD_ANIM_SCORE_DOWN].setAnimEnable(true);
mLyt.calc();
mAnm[SCORE_SD_ANIM_SCORE_DOWN].setAnimEnable(false);
}
void dLytMiniGameScoreSd_c::fn_80293E40() {
void dLytMiniGameScoreSd_c::resetDigits() {
// NOTE: includes SCORE_SD_ANIM_SET_POSITION
for (int i = 0; i <= SCORE_SD_NUM_DIGITS; i++) {
mAnm[i + SCORE_SD_ANIM_0_TO_9_OFFSET].setForwardOnce();
mAnm[i + SCORE_SD_ANIM_0_TO_9_OFFSET].setFrame(0.0f);
mAnm[i + SCORE_SD_ANIM_0_TO_9_OFFSET].setAnimEnable(false);
}
}
void dLytMiniGameScoreSd_c::fn_80293ED0() {
void dLytMiniGameScoreSd_c::resetPosition() {
mAnm[SCORE_SD_ANIM_SET_POSITION].setForwardOnce();
mAnm[SCORE_SD_ANIM_SET_POSITION].setFrame(6.0f);
mAnm[SCORE_SD_ANIM_SET_POSITION].setAnimEnable(true);
mLyt.calc();
mAnm[SCORE_SD_ANIM_SET_POSITION].setAnimEnable(false);
}
void dLytMiniGameScoreSd_c::fn_80293F50() {
void dLytMiniGameScoreSd_c::startScoreUp() {
mAnm[SCORE_SD_ANIM_SCORE_UP].setToStart();
mAnm[SCORE_SD_ANIM_SCORE_UP].setAnimEnable(true);
}
void dLytMiniGameScoreSd_c::fn_80293FB0() {
void dLytMiniGameScoreSd_c::startScoreDown() {
mAnm[SCORE_SD_ANIM_SCORE_DOWN].setToStart();
mAnm[SCORE_SD_ANIM_SCORE_DOWN].setAnimEnable(true);
}
void dLytMiniGameScoreSd_c::fn_80294010() {
void dLytMiniGameScoreSd_c::stopScoreUp() {
mAnm[SCORE_SD_ANIM_SCORE_UP].setAnimEnable(false);
}
void dLytMiniGameScoreSd_c::fn_80294020() {
void dLytMiniGameScoreSd_c::stopScoreDown() {
mAnm[SCORE_SD_ANIM_SCORE_DOWN].setAnimEnable(false);
}
bool dLytMiniGameScoreSd_c::fn_80294030() const {
bool dLytMiniGameScoreSd_c::isScoreUpEndReached() const {
s32 idx = SCORE_SD_ANIM_SCORE_UP;
if (mAnm[idx].isEnabled() && mAnm[idx].isStop2()) {
return true;
}
return false;
}
bool dLytMiniGameScoreSd_c::fn_80294080() const {
bool dLytMiniGameScoreSd_c::isScoreDownEndReached() const {
s32 idx = SCORE_SD_ANIM_SCORE_DOWN;
if (mAnm[idx].isEnabled() && mAnm[idx].isStop2()) {
return true;
}
return false;
}
SPECIAL_BASE_PROFILE(LYT_MINI_GAME, dLytMiniGame_c, fProfile::LYT_MINI_GAME, 0x2B4, 0x6F9);
static const char *sMiniGame = "MiniGame";
static const char *sMiniGameScore = "MiniGameScore";
static const char *sMiniGameTime = "MiniGameTime";
static const char *sMiniGameBugs = "MiniGameBugs";
static const char *sMiniGamePumpkin = "MiniGamePumpkin";
static const char *sMiniGameSd = "MiniGameSd";
int dLytMiniGame_c::create() {
mVariant = mParams;
switch (mVariant) {
case VARIANT_1: {
if (loadData(sMiniGame, SLOT_MINI_GAME) || loadData(sMiniGameScore, SLOT_MINI_GAME_SCORE)) {
return NOT_READY;
}
if (isLoading(sMiniGame) || isLoading(sMiniGameScore)) {
return NOT_READY;
}
attachLoadedData(sMiniGame, mResAccStart);
attachLoadedData(sMiniGameScore, mResAccScore);
mScore.setVariant(dLytMiniGameScore_c::SCORE_VARIANT_0);
mScore.build(&mResAccScore);
mStart.build(&mResAccStart);
break;
}
case VARIANT_2: {
if (loadData(sMiniGame, SLOT_MINI_GAME) || loadData(sMiniGameSd, SLOT_MINI_GAME_SCORE_SD) ||
loadData(sMiniGameScore, SLOT_MINI_GAME_SCORE)) {
return NOT_READY;
}
if (isLoading(sMiniGame) || isLoading(sMiniGameSd) || isLoading(sMiniGameScore)) {
return NOT_READY;
}
attachLoadedData(sMiniGame, mResAccStart);
attachLoadedData(sMiniGameSd, mResAccScoreSd);
attachLoadedData(sMiniGameScore, mResAccScore);
mScore.setVariant(dLytMiniGameScore_c::SCORE_VARIANT_1);
mScore.build(&mResAccScore);
mScoreSd.build(&mResAccScoreSd);
mStart.build(&mResAccStart);
break;
}
case VARIANT_3: {
if (loadData(sMiniGame, SLOT_MINI_GAME) || loadData(sMiniGameScore, SLOT_MINI_GAME_SCORE)) {
return NOT_READY;
}
if (isLoading(sMiniGame) || isLoading(sMiniGameScore)) {
return NOT_READY;
}
attachLoadedData(sMiniGame, mResAccStart);
attachLoadedData(sMiniGameScore, mResAccScore);
mScore.setVariant(dLytMiniGameScore_c::SCORE_VARIANT_2);
mScore.build(&mResAccScore);
mStart.build(&mResAccStart);
break;
}
case VARIANT_4: {
if (loadData(sMiniGame, SLOT_MINI_GAME) || loadData(sMiniGameBugs, SLOT_MINI_GAME_BUGS) ||
loadData(sMiniGameTime, SLOT_MINI_GAME_TIME)) {
return NOT_READY;
}
if (isLoading(sMiniGame) || isLoading(sMiniGameBugs) || isLoading(sMiniGameTime)) {
return NOT_READY;
}
attachLoadedData(sMiniGame, mResAccStart);
attachLoadedData(sMiniGameBugs, mResAccBugs);
attachLoadedData(sMiniGameTime, mResAccTime);
mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_0);
mTime.build(&mResAccTime);
mBugs.build(&mResAccBugs);
mStart.build(&mResAccStart);
break;
}
case VARIANT_5: {
if (loadData(sMiniGame, SLOT_MINI_GAME) || loadData(sMiniGameScore, SLOT_MINI_GAME_SCORE) ||
loadData(sMiniGameTime, SLOT_MINI_GAME_TIME)) {
return NOT_READY;
}
if (isLoading(sMiniGame) || isLoading(sMiniGameScore) || isLoading(sMiniGameTime)) {
return NOT_READY;
}
attachLoadedData(sMiniGame, mResAccStart);
attachLoadedData(sMiniGameScore, mResAccScore);
attachLoadedData(sMiniGameTime, mResAccTime);
mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_1);
mTime.build(&mResAccTime);
mScore.setVariant(dLytMiniGameScore_c::SCORE_VARIANT_4);
mScore.build(&mResAccScore);
mStart.build(&mResAccStart);
break;
}
case VARIANT_6: {
if (loadData(sMiniGame, SLOT_MINI_GAME) || loadData(sMiniGamePumpkin, SLOT_MINI_GAME_PUMPKIN) ||
loadData(sMiniGameScore, SLOT_MINI_GAME_SCORE) || loadData(sMiniGameTime, SLOT_MINI_GAME_TIME)) {
return NOT_READY;
}
if (isLoading(sMiniGame) || isLoading(sMiniGamePumpkin) || isLoading(sMiniGameScore) ||
isLoading(sMiniGameTime)) {
return NOT_READY;
}
attachLoadedData(sMiniGame, mResAccStart);
attachLoadedData(sMiniGamePumpkin, mResAccPumpkin);
attachLoadedData(sMiniGameScore, mResAccScore);
attachLoadedData(sMiniGameTime, mResAccTime);
mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_2);
mTime.build(&mResAccTime);
mScore.setVariant(dLytMiniGameScore_c::SCORE_VARIANT_3);
mScore.build(&mResAccScore);
mStart.build(&mResAccStart);
mPumpkin.build(&mResAccPumpkin);
break;
}
case VARIANT_7: {
if (loadData(sMiniGame, SLOT_MINI_GAME) || loadData(sMiniGameTime, SLOT_MINI_GAME_TIME)) {
return NOT_READY;
}
if (isLoading(sMiniGame) || isLoading(sMiniGameTime)) {
return NOT_READY;
}
attachLoadedData(sMiniGame, mResAccStart);
attachLoadedData(sMiniGameTime, mResAccTime);
mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_3);
mTime.build(&mResAccTime);
mStart.build(&mResAccStart);
break;
}
case VARIANT_8: {
if (loadData(sMiniGame, SLOT_MINI_GAME) || loadData(sMiniGameTime, SLOT_MINI_GAME_TIME)) {
return NOT_READY;
}
if (isLoading(sMiniGame) || isLoading(sMiniGameTime)) {
return NOT_READY;
}
attachLoadedData(sMiniGame, mResAccStart);
attachLoadedData(sMiniGameTime, mResAccTime);
mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_4);
mTime.build(&mResAccTime);
mStart.build(&mResAccStart);
break;
}
case VARIANT_9: {
if (loadData(sMiniGame, SLOT_MINI_GAME) || loadData(sMiniGameTime, SLOT_MINI_GAME_TIME)) {
return NOT_READY;
}
if (isLoading(sMiniGame) || isLoading(sMiniGameTime)) {
return NOT_READY;
}
attachLoadedData(sMiniGame, mResAccStart);
attachLoadedData(sMiniGameTime, mResAccTime);
mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_5);
mTime.build(&mResAccTime);
mStart.build(&mResAccStart);
break;
}
case VARIANT_10: {
if (loadData(sMiniGameScore, SLOT_MINI_GAME_SCORE)) {
return NOT_READY;
}
if (isLoading(sMiniGameScore)) {
return NOT_READY;
}
attachLoadedData(sMiniGameScore, mResAccScore);
mScore.setVariant(dLytMiniGameScore_c::SCORE_VARIANT_0);
mScore.setField_0x816(true);
mScore.build(&mResAccScore);
break;
}
case VARIANT_11: {
if (loadData(sMiniGameScore, SLOT_MINI_GAME_SCORE)) {
return NOT_READY;
}
if (isLoading(sMiniGameScore)) {
return NOT_READY;
}
attachLoadedData(sMiniGameScore, mResAccScore);
mScore.setVariant(dLytMiniGameScore_c::SCORE_VARIANT_2);
mScore.setField_0x816(true);
mScore.build(&mResAccScore);
break;
}
case VARIANT_12: {
if (loadData(sMiniGameTime, SLOT_MINI_GAME_TIME)) {
return NOT_READY;
}
if (isLoading(sMiniGameTime)) {
return NOT_READY;
}
attachLoadedData(sMiniGameTime, mResAccTime);
mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_0);
mTime.setField_0x7EE(true);
mTime.build(&mResAccTime);
break;
}
case VARIANT_13: {
if (loadData(sMiniGameScore, SLOT_MINI_GAME_SCORE)) {
return NOT_READY;
}
if (isLoading(sMiniGameScore)) {
return NOT_READY;
}
attachLoadedData(sMiniGameScore, mResAccScore);
mScore.setVariant(dLytMiniGameScore_c::SCORE_VARIANT_3);
mScore.setField_0x816(true);
mScore.build(&mResAccScore);
break;
}
case VARIANT_14: {
if (loadData(sMiniGameTime, SLOT_MINI_GAME_TIME)) {
return NOT_READY;
}
if (isLoading(sMiniGameTime)) {
return NOT_READY;
}
attachLoadedData(sMiniGameTime, mResAccTime);
mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_3);
mTime.setField_0x7EE(true);
mTime.build(&mResAccTime);
break;
}
case VARIANT_15: {
if (loadData(sMiniGameTime, SLOT_MINI_GAME_TIME)) {
return NOT_READY;
}
if (isLoading(sMiniGameTime)) {
return NOT_READY;
}
attachLoadedData(sMiniGameTime, mResAccTime);
mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_4);
mTime.setField_0x7EE(true);
mTime.build(&mResAccTime);
break;
}
case VARIANT_16: {
if (loadData(sMiniGameTime, SLOT_MINI_GAME_TIME)) {
return NOT_READY;
}
if (isLoading(sMiniGameTime)) {
return NOT_READY;
}
attachLoadedData(sMiniGameTime, mResAccTime);
mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_5);
mTime.setField_0x7EE(true);
mTime.build(&mResAccTime);
break;
}
}
init();
sInstance = this;
return SUCCEEDED;
}
int dLytMiniGame_c::doDelete() {
mScore.remove();
mScoreSd.remove();
mStart.remove();
mTime.remove();
mBugs.remove();
mPumpkin.remove();
switch (mVariant) {
case VARIANT_1: {
mResAccStart.detach();
mResAccScore.detach();
unloadData(sMiniGame);
unloadData(sMiniGameScore);
break;
}
case VARIANT_2: {
mResAccStart.detach();
mResAccScoreSd.detach();
mResAccScore.detach();
unloadData(sMiniGame);
unloadData(sMiniGameSd);
unloadData(sMiniGameScore);
break;
}
case VARIANT_3: {
mResAccStart.detach();
mResAccScore.detach();
unloadData(sMiniGame);
unloadData(sMiniGameScore);
break;
}
case VARIANT_4: {
mResAccStart.detach();
mResAccBugs.detach();
mResAccTime.detach();
unloadData(sMiniGame);
unloadData(sMiniGameBugs);
unloadData(sMiniGameTime);
break;
}
case VARIANT_5: {
mResAccStart.detach();
mResAccScore.detach();
mResAccTime.detach();
unloadData(sMiniGame);
unloadData(sMiniGameScore);
unloadData(sMiniGameTime);
break;
}
case VARIANT_6: {
mResAccStart.detach();
mResAccPumpkin.detach();
mResAccScore.detach();
mResAccTime.detach();
unloadData(sMiniGame);
unloadData(sMiniGamePumpkin);
unloadData(sMiniGameScore);
unloadData(sMiniGameTime);
break;
}
case VARIANT_7: {
mResAccStart.detach();
mResAccTime.detach();
unloadData(sMiniGame);
unloadData(sMiniGameTime);
break;
}
case VARIANT_8: {
mResAccStart.detach();
mResAccTime.detach();
unloadData(sMiniGame);
unloadData(sMiniGameTime);
break;
}
case VARIANT_9: {
mResAccStart.detach();
mResAccTime.detach();
unloadData(sMiniGame);
unloadData(sMiniGameTime);
break;
}
case VARIANT_10: {
mResAccScore.detach();
unloadData(sMiniGameScore);
break;
}
case VARIANT_11: {
mResAccScore.detach();
unloadData(sMiniGameScore);
break;
}
case VARIANT_12: {
mResAccTime.detach();
unloadData(sMiniGameTime);
break;
}
case VARIANT_13: {
mResAccScore.detach();
unloadData(sMiniGameScore);
break;
}
case VARIANT_14: {
mResAccTime.detach();
unloadData(sMiniGameTime);
break;
}
case VARIANT_15: {
mResAccTime.detach();
unloadData(sMiniGameTime);
break;
}
case VARIANT_16: {
mResAccTime.detach();
unloadData(sMiniGameTime);
break;
}
}
sInstance = nullptr;
return SUCCEEDED;
}
int dLytMiniGame_c::execute() {
return SUCCEEDED;
}
int dLytMiniGame_c::draw() {
return SUCCEEDED;
}
void dLytMiniGame_c::init() {
mScore.init();
mScoreSd.init();
mStart.init();
mTime.init();
mBugs.init();
mPumpkin.init();
}
+1 -1
View File
@@ -544,7 +544,7 @@ bool dSndSmallEffectMgr_c::playMinigameScoreUpSound(s32 param) {
return playSoundInternal(soundId);
}
bool dSndSmallEffectMgr_c::playMinigameScoreDownSound() {
bool dSndSmallEffectMgr_c::playMinigameScoreDownSound(s32 score) {
return playSoundInternal(SE_S_MG_SCORE_DOWN);
}