Merge pull request #279 from robojumper/d_lyt_mini_game

d_lyt_mini_game
This commit is contained in:
robojumper
2025-12-08 16:30:13 +01:00
committed by GitHub
22 changed files with 5315 additions and 391 deletions
+10 -10
View File
@@ -68,12 +68,12 @@ int dTgSwordBattleGame_c::actorExecuteInEvent() {
} break;
case 'cndn': {
if (advance) {
dLytMiniGame_c::GetInstance()->fn_80295940();
dLytMiniGame_c::GetInstance()->startCountdown();
} else if (dLytMiniGame_c::GetInstance()->fn_80295AB0()) {
dLytMiniGame_c::GetInstance()->timeRelatedExecute();
dLytMiniGame_c::GetInstance()->setHighscore(getBossHighscore());
dLytMiniGame_c::GetInstance()->fn_80295CB0(true);
} else if (dLytMiniGame_c::GetInstance()->isStartCountdownDone()) {
dLytMiniGame_c::GetInstance()->timeRelatedInit();
dLytMiniGame_c::GetInstance()->setBestTime(getBossHighscore());
dLytMiniGame_c::GetInstance()->setShowBestTime(true);
mTimer.initUpCounter();
field_0x1A8 = true;
field_0x1AC = true;
@@ -83,8 +83,8 @@ int dTgSwordBattleGame_c::actorExecuteInEvent() {
} break;
case 'fnsh': {
if (advance) {
dLytMiniGame_c::GetInstance()->fn_80295980();
} else if (dLytMiniGame_c::GetInstance()->fn_80295AD0()) {
dLytMiniGame_c::GetInstance()->startFinish();
} else if (dLytMiniGame_c::GetInstance()->isFinishAnimDone()) {
mEventRelated.advanceNext();
}
ret = SUCCEEDED;
@@ -112,8 +112,8 @@ int dTgSwordBattleGame_c::actorExecuteInEvent() {
setInBossRushFlag();
setCurrentBossNumber(mBossNumber + 1);
if (MinigameManager::endMinigame(MinigameManager::BOSS_RUSH)) {
dLytMiniGame_c::GetInstance()->fn_80295980();
dLytMiniGame_c::GetInstance()->timeRelated();
dLytMiniGame_c::GetInstance()->startFinish();
dLytMiniGame_c::GetInstance()->endTimeResult();
}
}
} break;
@@ -163,7 +163,7 @@ void dTgSwordBattleGame_c::finalizeState_Manage() {}
void dTgSwordBattleGame_c::init() {
if (MinigameManager::GetInstance()->checkInBossRush()) {
createBase(fProfile::LYT_MINI_GAME, this, 8, OTHER);
createBase(fProfile::LYT_MINI_GAME, this, dLytMiniGame_c::VARIANT_BOSS_RUSH, OTHER);
}
mTimer.vt_0x0C();
+1 -1
View File
@@ -124,7 +124,7 @@ bool dCursorHitCheckCC_c::checkHit(s32 x, s32 y) {
);
mVec3_c v;
d3d::fn_80016B60(v, pos);
d3d::screenToWorld(v, pos);
nw4r::g3d::Camera cam = dStageMgr_c::GetInstance()->getCamera(0);
+75 -53
View File
@@ -437,9 +437,7 @@ bool dFlow_c::handleEventInternal(const MsbFlowInfo *element) {
dMessage_c::getInstance()->setInMapEvent(true);
dMessage_c::getInstance()->clearLightPillarRelatedArgs();
if (dLytControlGame_c::getInstance()->isStateNotNormalOrInEvent()) {
dLytControlGame_c::getInstance()->openMapEvent(
mapEvent, arg1, arg2
);
dLytControlGame_c::getInstance()->openMapEvent(mapEvent, arg1, arg2);
}
} else {
dLytMap_c::GetInstance()->queueMapEvent(mapEvent, arg1, arg2);
@@ -482,17 +480,17 @@ bool dFlow_c::handleEventInternal(const MsbFlowInfo *element) {
break;
}
case EVENT_LYT_MINI_GAME: {
if (dMessage_c::getInstance()->getField_0x340() != 0) {
// cancel something minigame related if running
if (dMessage_c::getInstance()->hasSetMinigameResult()) {
// clear old result
clearMinigame();
}
// start something minigame related
// create new result
dMessage_c::getInstance()->setMiniGameVariant(params1n2);
createLytMiniGame();
break;
}
case EVENT_LYT_MINI_GAME_END:
// cancel something minigame related
// hide score/time
clearMinigame();
break;
case EVENT_46: dMessage_c::getInstance()->setField_0x344(params1n2); break;
@@ -1195,57 +1193,81 @@ void dFlow_c::clear() {
void dFlow_c::createLytMiniGame() {
if (dLytMiniGame_c::GetInstance() == nullptr) {
switch (dMessage_c::getInstance()->getMiniGameVariant()) {
case 0:
dBase_c::createBase(fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), 11, fBase_c::OTHER);
case dMessage_c::MG_THRILL_DIGGER:
dBase_c::createBase(
fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(),
dLytMiniGame_c::VARIANT_THRILL_DIGGER_RESULT, fBase_c::OTHER
);
break;
case 1:
dBase_c::createBase(fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), 10, fBase_c::OTHER);
case dMessage_c::MG_BAMBOO_CUTTING:
dBase_c::createBase(
fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(),
dLytMiniGame_c::VARIANT_BAMBOO_CUTTING_RESULT, fBase_c::OTHER
);
break;
case 2:
dBase_c::createBase(fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), 12, fBase_c::OTHER);
case dMessage_c::MG_INSECT_CAPTURE:
dBase_c::createBase(
fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(),
dLytMiniGame_c::VARIANT_INSECT_CAPTURE_RESULT, fBase_c::OTHER
);
break;
case 3:
dBase_c::createBase(fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), 14, fBase_c::OTHER);
case dMessage_c::MG_ROLLERCOASTER:
dBase_c::createBase(
fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(),
dLytMiniGame_c::VARIANT_ROLLERCOASTER_RESULT, fBase_c::OTHER
);
break;
case 4:
dBase_c::createBase(fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), 13, fBase_c::OTHER);
case dMessage_c::MG_PUMPKIN_ARCHERY:
dBase_c::createBase(
fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(),
dLytMiniGame_c::VARIANT_PUMPKIN_ARCHERY_RESULT, fBase_c::OTHER
);
break;
case 5:
dBase_c::createBase(fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), 2, fBase_c::OTHER);
case dMessage_c::MG_FUN_FUN_ISLAND:
dBase_c::createBase(
fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), dLytMiniGame_c::VARIANT_FUN_FUN_ISLAND,
fBase_c::OTHER
);
break;
case 6:
dBase_c::createBase(fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), 16, fBase_c::OTHER);
case dMessage_c::MG_TRIAL_TIME_ATTACK:
dBase_c::createBase(
fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(),
dLytMiniGame_c::VARIANT_TRIAL_TIME_ATTACK_RESULT, fBase_c::OTHER
);
break;
case 7:
dBase_c::createBase(fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), 15, fBase_c::OTHER);
case dMessage_c::MG_BOSS_RUSH:
dBase_c::createBase(
fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), dLytMiniGame_c::VARIANT_BOSS_RUSH_RESULT,
fBase_c::OTHER
);
break;
}
}
}
void dFlow_c::clearMinigame() {
if (dMessage_c::getInstance()->getField_0x340()) {
if (dMessage_c::getInstance()->hasSetMinigameResult()) {
switch (dMessage_c::getInstance()->getMiniGameVariant()) {
case 0:
case 1:
case 4:
case 5:
case dMessage_c::MG_THRILL_DIGGER:
case dMessage_c::MG_BAMBOO_CUTTING:
case dMessage_c::MG_PUMPKIN_ARCHERY:
case dMessage_c::MG_FUN_FUN_ISLAND:
if (dLytMiniGame_c::GetInstance() != nullptr) {
dLytMiniGame_c::GetInstance()->scoreRelated();
dLytMiniGame_c::GetInstance()->endScoreResult();
}
break;
case 2:
case 3:
case 6:
case 7:
case dMessage_c::MG_INSECT_CAPTURE:
case dMessage_c::MG_ROLLERCOASTER:
case dMessage_c::MG_TRIAL_TIME_ATTACK:
case dMessage_c::MG_BOSS_RUSH:
if (dLytMiniGame_c::GetInstance() != nullptr) {
dLytMiniGame_c::GetInstance()->timeRelated();
dLytMiniGame_c::GetInstance()->endTimeResult();
}
break;
}
}
dMessage_c::getInstance()->setField_0x340(0);
dMessage_c::getInstance()->setMiniGameVariant(8);
dMessage_c::getInstance()->setHasSetMinigameResult(false);
dMessage_c::getInstance()->setMiniGameVariant(dMessage_c::MG_NONE);
}
SPECIAL_BASE_PROFILE(MESSAGE, dMessage_c, fProfile::MESSAGE, 0x2A8, 0);
@@ -1733,29 +1755,29 @@ void dMessage_c::clearLightPillarRelatedArgs() {
}
void dMessage_c::executeMinigame() {
if (mMiniGameVariant == 8) {
if (mMinigameVariant == MG_NONE) {
return;
}
if (!dMessage_c::getInstance()->getField_0x340()) {
switch (mMiniGameVariant) {
case 0:
case 1:
case 4:
case 5:
if (!dMessage_c::getInstance()->hasSetMinigameResult()) {
switch (mMinigameVariant) {
case MG_THRILL_DIGGER:
case MG_BAMBOO_CUTTING:
case MG_PUMPKIN_ARCHERY:
case MG_FUN_FUN_ISLAND:
if (dLytMiniGame_c::GetInstance() != nullptr) {
dLytMiniGame_c::GetInstance()->scoreRelatedExecute();
dLytMiniGame_c::GetInstance()->scoreRelatedInit();
dLytMiniGame_c::GetInstance()->setDisplayedPoints(mMinigameResultPoints);
sInstance->field_0x340 = 1;
sInstance->mHasSetMinigameResult = true;
}
break;
case 2:
case 3:
case 6:
case 7:
case MG_INSECT_CAPTURE:
case MG_ROLLERCOASTER:
case MG_TRIAL_TIME_ATTACK:
case MG_BOSS_RUSH:
if (dLytMiniGame_c::GetInstance() != nullptr) {
dLytMiniGame_c::GetInstance()->timeRelatedExecute();
dLytMiniGame_c::GetInstance()->timeRelatedInit();
dLytMiniGame_c::GetInstance()->setDisplayedTime(mMinigameTime);
sInstance->field_0x340 = 1;
sInstance->mHasSetMinigameResult = true;
}
break;
}
@@ -1774,8 +1796,8 @@ void dMessage_c::init() {
void dMessage_c::reset() {
init();
mMiniGameVariant = 8;
field_0x340 = 0;
mMinigameVariant = MG_NONE;
mHasSetMinigameResult = false;
mMinigameResultPoints = 0;
mMinigameTime = 0;
}
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -581,7 +581,7 @@ bool dLytMeterMain_c::fn_800C9FE0() {
return false;
}
bool dLytMeterMain_c::fn_800CA040() {
bool dLytMeterMain_c::isPopupOpen() {
if (mHelpOpen || isInModeMap() || isInModePause()) {
return true;
}
@@ -439,7 +439,7 @@ bool dLytMeterGanbariGauge_c::execute() {
mVec3_c diff = dAcPy_c::GetLink()->mPositionCopy3 - dScGame_c::getCamera(0)->getPositionMaybe();
f32 len = diff.mag();
mVec3_c v;
d3d::fn_80016960(v, dAcPy_c::GetLink()->mPositionCopy3);
d3d::worldToScreen(v, dAcPy_c::GetLink()->mPositionCopy3);
if (!EventManager::isInEvent()) {
field_0x524 = v;
}
@@ -602,7 +602,7 @@ bool dLytMeterGanbariGauge_c::execute() {
if (!EventManager::isInEvent() && !dAcPy_c::GetLink()->hasvt_0x1C0() &&
!dAcPy_c::GetLink()->checkActionFlagsCont(0x10) &&
(d3d::fn_80016A90(dAcPy_c::GetLink()->mPositionCopy3) || fn_80104710(false) || isCrawling()) &&
(d3d::isOnScreen(dAcPy_c::GetLink()->mPositionCopy3) || fn_80104710(false) || isCrawling()) &&
*mStateMgrWheel.getStateID() != StateID_Full && *mStateMgrMain.getStateID() == StateID_InvisibleWait &&
!field_0x530) {
mStateMgrMain.changeState(StateID_In);
@@ -611,7 +611,7 @@ bool dLytMeterGanbariGauge_c::execute() {
mStateMgrMain.changeState(StateID_OutWait);
} else if ((EventManager::isInEvent() || dAcPy_c::GetLink()->hasvt_0x1C0() ||
dAcPy_c::GetLink()->checkActionFlagsCont(0x10) ||
(!d3d::fn_80016A90(dAcPy_c::GetLink()->mPositionCopy3) && !fn_80104710(false) && !isCrawling())) &&
(!d3d::isOnScreen(dAcPy_c::GetLink()->mPositionCopy3) && !fn_80104710(false) && !isCrawling())) &&
*mStateMgrMain.getStateID() == StateID_Wait) {
mStateMgrMain.changeState(StateID_CameraOut);
} else if (field_0x530 && *mStateMgrMain.getStateID() == StateID_Wait) {
+1 -1
View File
@@ -474,7 +474,7 @@ bool dLytMeterRupy_c::updateDisplayedAmount(bool suppressSound) {
newNumDigits = 3;
setDigit(0, newNumDisplayed / 100);
s32 rem = (newNumDisplayed % 100);
setDigit(1, rem / 10); // x
setDigit(1, rem / 10);
setDigit(2, rem % 10);
} else if (newNumDisplayed >= 10) {
newNumDigits = 2;
+2 -2
View File
@@ -264,8 +264,8 @@ void dLytMsgWindow_c::initializeState_In() {
param = 2;
} else if (mpTagProcessor->getField_0x90D() == 3) {
param = 1;
} else if (obj != nullptr && d3d::fn_80016A90(obj->mPositionCopy2)) {
d3d::fn_80016960(field_0x768, obj->mPositionCopy2);
} else if (obj != nullptr && d3d::isOnScreen(obj->mPositionCopy2)) {
d3d::worldToScreen(field_0x768, obj->mPositionCopy2);
mVec3_c v = field_0x768;
v.z = 0.f;
field_0x768 = v;
+2 -2
View File
@@ -483,7 +483,7 @@ bool dSndSmallEffectMgr_c::playSirenCountdownSound(s32 timer) {
return ok;
}
bool dSndSmallEffectMgr_c::playMinigameCountdownSound() {
bool dSndSmallEffectMgr_c::playMinigameCountdownSound(s32 timer) {
return playSoundInternal(SE_S_MG_COUNT_DOWN_1);
}
@@ -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);
}