mirror of
https://github.com/zeldaret/ss
synced 2026-08-17 05:21:27 -04:00
Merge pull request #279 from robojumper/d_lyt_mini_game
d_lyt_mini_game
This commit is contained in:
@@ -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();
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user