Path: blob/master/SonicMania/Objects/Menu/ManiaModeMenu.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: ManiaModeMenu Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89#if MANIA_USE_PLUS10ObjectManiaModeMenu *ManiaModeMenu;1112void ManiaModeMenu_Update(void) {}1314void ManiaModeMenu_LateUpdate(void) {}1516void ManiaModeMenu_StaticUpdate(void) {}1718void ManiaModeMenu_Draw(void) {}1920void ManiaModeMenu_Create(void *data) {}2122void ManiaModeMenu_StageLoad(void) {}2324void ManiaModeMenu_Initialize(void)25{26LogHelpers_Print("ManiaModeMenu_Initialize()");2728MainMenu_Initialize();29UISubHeading_Initialize();30TimeAttackMenu_Initialize();31CompetitionMenu_Initialize();32OptionsMenu_Initialize();33ExtrasMenu_Initialize();3435ManiaModeMenu_HandleUnlocks();36ManiaModeMenu_SetupActions();37}3839bool32 ManiaModeMenu_InitAPI(void)40{41if (!MenuSetup->initializedAPI)42MenuSetup->fxFade->timer = 512;4344int32 authStatus = API.GetUserAuthStatus();45if (!authStatus) {46API.TryAuth();47}48else if (authStatus != STATUS_CONTINUE) {49int32 storageStatus = API.GetStorageStatus();50if (!storageStatus) {51API.TryInitStorage();52}53else if (storageStatus != STATUS_CONTINUE) {54int32 saveStatus = API.GetSaveStatus();5556if (!API_GetNoSave() && (authStatus != STATUS_OK || storageStatus != STATUS_OK)) {57if (saveStatus != STATUS_CONTINUE) {58if (saveStatus != STATUS_FORBIDDEN) {59DialogRunner_PromptSavePreference(storageStatus);60}61else {62RSDK.SetScene("Presentation", "Title Screen");63RSDK.LoadScene();64}65}6667return false;68}6970if (!MenuSetup->initializedSaves) {71UIWaitSpinner_StartWait();72Options_LoadFile(Options_LoadCallback);73SaveGame_LoadFile(SaveGame_SaveLoadedCB);74ReplayDB_LoadDB(ReplayDB_LoadCallback);7576MenuSetup->initializedSaves = true;77}7879if (MenuSetup->initializedAPI)80return true;8182if (globals->optionsLoaded == STATUS_OK && globals->saveLoaded == STATUS_OK && globals->replayTableLoaded == STATUS_OK83&& globals->taTableLoaded == STATUS_OK) {8485if (!API_GetNoSave() && DialogRunner_NotifyAutosave())86return false;8788UIWaitSpinner_FinishWait();89if (DialogRunner_CheckUnreadNotifs())90return false;9192MenuSetup->initializedAPI = true;93return true;94}9596if (API_GetNoSave()) {97UIWaitSpinner_FinishWait();98return true;99}100else {101if (globals->optionsLoaded == STATUS_ERROR || globals->saveLoaded == STATUS_ERROR || globals->replayTableLoaded == STATUS_ERROR102|| globals->taTableLoaded == STATUS_ERROR) {103int32 status = API.GetSaveStatus();104105if (status != STATUS_CONTINUE) {106if (status == STATUS_FORBIDDEN) {107RSDK.SetScene("Presentation", "Title Screen");108RSDK.LoadScene();109}110else {111DialogRunner_PromptSavePreference(STATUS_CORRUPT);112}113}114}115}116}117}118119return false;120}121122void ManiaModeMenu_InitLocalization(bool32 success)123{124if (success) {125Localization->loaded = false;126127Localization_LoadStrings();128UIWidgets_ApplyLanguage();129UIHeading_LoadSprites();130}131}132133int32 ManiaModeMenu_GetActiveMenu(void)134{135EntityUIControl *control = UIControl_GetUIControl();136137if (control == MainMenu->menuControl || control == ExtrasMenu->extrasControl || control == OptionsMenu->optionsControl138|| control == OptionsMenu->videoControl || control == OptionsMenu->soundControl || control == OptionsMenu->dataOptionsControl139|| control == OptionsMenu->controlsControl_Windows || control == OptionsMenu->controlsControl_KB140|| control == OptionsMenu->controlsControl_PS4 || control == OptionsMenu->controlsControl_XB1 || control == OptionsMenu->controlsControl_NX141|| control == OptionsMenu->controlsControl_NXGrip || control == OptionsMenu->controlsControl_NXJoycon142|| control == OptionsMenu->controlsControl_NXPro) {143return MAINMENU_MAIN;144}145146if (control == TimeAttackMenu->timeAttackControl || control == TimeAttackMenu->timeAttackControl_Legacy147|| control == TimeAttackMenu->taZoneSelControl || control == TimeAttackMenu->taDetailsControl148|| control == TimeAttackMenu->leaderboardsControl || control == TimeAttackMenu->replaysControl149|| control == CompetitionMenu->competitionControl || control == CompetitionMenu->competitionControl_Legacy150|| control == CompetitionMenu->compRulesControl || control == CompetitionMenu->compZoneControl) {151return MAINMENU_TIMEATTACK;152}153154if (control == CompetitionMenu->compRoundControl || control == CompetitionMenu->compTotalControl)155return MAINMENU_COMPETITION;156157if (control == ManiaModeMenu->saveSelectMenu || control == ManiaModeMenu->noSaveMenu || control == ManiaModeMenu->secretsMenu)158return MAINMENU_SAVESELECT;159160if (control == ManiaModeMenu->encoreSaveSelect || control == ManiaModeMenu->noSaveMenuEncore)161return MAINMENU_SAVESELECT_ENCORE;162163return MAINMENU_MAIN;164}165166void ManiaModeMenu_ChangeMenuTrack(void)167{168int32 trackID = 0;169170switch (ManiaModeMenu_GetActiveMenu()) {171default:172case MAINMENU_MAIN: trackID = 0; break;173case MAINMENU_TIMEATTACK: trackID = 1; break;174case MAINMENU_COMPETITION: trackID = 2; break;175case MAINMENU_SAVESELECT: trackID = 3; break;176case MAINMENU_SAVESELECT_ENCORE: trackID = 4; break;177}178179if (!Music_IsPlaying())180Music_PlayTrack(trackID);181else if (Music->activeTrack != trackID)182Music_TransitionTrack(trackID, 0.12);183}184185void ManiaModeMenu_StartReturnToTitle(void)186{187EntityUIControl *control = UIControl_GetUIControl();188if (control)189control->state = StateMachine_None;190191Music_FadeOut(0.05);192MenuSetup_StartTransition(ManiaModeMenu_ReturnToTitle, 32);193}194195void ManiaModeMenu_SetBGColors(void)196{197switch (ManiaModeMenu_GetActiveMenu()) {198case MAINMENU_MAIN: UIBackground->activeColors = UIBackground->bgColors; break;199200case MAINMENU_TIMEATTACK:201case MAINMENU_COMPETITION: UIBackground->activeColors = &UIBackground->bgColors[3]; break;202203case MAINMENU_SAVESELECT: UIBackground->activeColors = &UIBackground->bgColors[6]; break;204205case MAINMENU_SAVESELECT_ENCORE: UIBackground->activeColors = &UIBackground->bgColors[15]; break;206207default: break;208}209}210211void ManiaModeMenu_ReturnToTitle(void)212{213TimeAttackData_Clear();214215RSDK.SetScene("Presentation", "Title Screen");216RSDK.LoadScene();217}218219void ManiaModeMenu_State_HandleTransition(void)220{221RSDK_THIS(MenuSetup);222223self->fadeTimer = CLAMP(self->timer << ((self->fadeShift & 0xFF) - 1), 0, 0x200);224}225226void ManiaModeMenu_HandleUnlocks(void)227{228MainMenu_HandleUnlocks();229UISubHeading_HandleUnlocks();230TimeAttackMenu_HandleUnlocks();231232int32 maxRounds = CompetitionMenu_HandleUnlocks();233EntityUIControl *compRules = CompetitionMenu->compRulesControl;234235EntityUIVsRoundPicker *vsRoundPicker = (EntityUIVsRoundPicker *)UIButton_GetChoicePtr(compRules->buttons[1], compRules->buttons[1]->selection);236if (vsRoundPicker) {237vsRoundPicker->maxVal = maxRounds;238vsRoundPicker->val = MIN(vsRoundPicker->val, maxRounds);239}240241OptionsMenu_HandleUnlocks();242ExtrasMenu_HandleUnlocks();243}244245void ManiaModeMenu_SetupActions(void)246{247MainMenu_SetupActions();248UISubHeading_SetupActions();249TimeAttackMenu_SetupActions();250CompetitionMenu_SetupActions();251OptionsMenu_SetupActions();252ExtrasMenu_SetupActions();253}254255void ManiaModeMenu_HandleMenuReturn(void)256{257EntityMenuParam *param = MenuParam_GetParam();258259char buffer[0x100];260memset(buffer, 0, 0x100);261if (strcmp(param->menuTag, "") == 0)262UIUsernamePopup_ShowPopup();263264foreach_all(UIControl, control)265{266if (strcmp(param->menuTag, "") != 0) {267RSDK.GetCString(buffer, &control->tag);268269if (strcmp((const char *)buffer, param->menuTag) != 0) {270UIControl_SetInactiveMenu(control);271}272else {273control->storedButtonID = param->menuSelection;274control->hasStoredButton = true;275UIControl_SetActiveMenu(control);276control->buttonID = param->menuSelection;277}278}279}280281UISubHeading_HandleMenuReturn(0);282TimeAttackMenu_HandleMenuReturn();283CompetitionMenu_HandleMenuReturn();284OptionsMenu_HandleMenuReturn();285286if (param->puyoSelection == PUYO_SELECTION_VS_2P) {287EntityUIControl *extras = ExtrasMenu->extrasControl;288UIButton_SetChoiceSelection(extras->buttons[1], 1);289}290291int32 zoneID = 0, actID = 0, characterID = 0, isEncoreMode = false;292bool32 inTimeAttack = param->inTimeAttack;293if (inTimeAttack) {294characterID = param->characterID;295zoneID = param->zoneID;296actID = param->actID;297isEncoreMode = param->isEncoreMode;298}299300TimeAttackData_Clear();301302if (inTimeAttack) {303param->characterID = characterID;304param->zoneID = zoneID;305param->actID = actID;306param->isEncoreMode = isEncoreMode;307}308}309310#if GAME_INCLUDE_EDITOR311void ManiaModeMenu_EditorDraw(void) {}312313void ManiaModeMenu_EditorLoad(void) {}314#endif315316void ManiaModeMenu_Serialize(void) {}317#endif318319320