Path: blob/master/SonicMania/Objects/Title/TitleSetup.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: TitleSetup Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectTitleSetup *TitleSetup;1011void TitleSetup_Update(void)12{13RSDK_THIS(TitleSetup);1415StateMachine_Run(self->state);1617ScreenInfo->position.x = 0x100 - ScreenInfo->center.x;18}1920void TitleSetup_LateUpdate(void) {}2122void TitleSetup_StaticUpdate(void) {}2324void TitleSetup_Draw(void)25{26RSDK_THIS(TitleSetup);2728StateMachine_Run(self->stateDraw);29}3031void TitleSetup_Create(void *data)32{33RSDK_THIS(TitleSetup);3435if (!SceneInfo->inEditor) {36RSDK.SetSpriteAnimation(TitleSetup->aniFrames, 0, &self->animator, true, 0);3738self->active = ACTIVE_ALWAYS;39self->visible = true;40self->drawGroup = 12;41self->drawFX = FX_FLIP;42self->state = TitleSetup_State_Wait;43self->stateDraw = TitleSetup_Draw_FadeBlack;44self->timer = 1024;45self->drawPos.x = 256 << 16;46self->drawPos.y = 108 << 16;47}48}4950void TitleSetup_StageLoad(void)51{52String presence;53Localization_GetString(&presence, STR_RPC_TITLE);54API_SetRichPresence(PRESENCE_TITLE, &presence);5556API_SetNoSave(false);5758globals->blueSpheresInit = false;59TimeAttackData_Clear();6061API_ClearPrerollErrors();62#if MANIA_USE_PLUS63API.ClearSaveStatus();64#endif6566globals->saveLoaded = false;67memset(globals->saveRAM, 0, sizeof(globals->saveRAM));6869globals->optionsLoaded = false;70memset(globals->optionsRAM, 0, sizeof(globals->optionsRAM));7172#if MANIA_USE_PLUS73API.ClearUserDB(globals->replayTableID);74API.ClearUserDB(globals->taTableID);7576globals->replayTableID = (uint16)-1;77globals->replayTableLoaded = STATUS_NONE;78globals->taTableID = (uint16)-1;79globals->taTableLoaded = STATUS_NONE;80#endif8182TitleSetup->aniFrames = RSDK.LoadSpriteAnimation("Title/Electricity.bin", SCOPE_STAGE);8384TitleSetup->sfxMenuBleep = RSDK.GetSfx("Global/MenuBleep.wav");85TitleSetup->sfxMenuAccept = RSDK.GetSfx("Global/MenuAccept.wav");86TitleSetup->sfxRing = RSDK.GetSfx("Global/Ring.wav");8788RSDK.ResetEntitySlot(0, TitleSetup->classID, NULL);89}9091#if MANIA_USE_PLUS92void TitleSetup_HandleCheatInputs(void)93{94uint8 keyState = 0;95if (ControllerInfo->keyUp.press || AnalogStickInfoL->keyUp.press)96keyState = 1;97if (ControllerInfo->keyDown.press || AnalogStickInfoL->keyDown.press)98keyState = 2;99100if (keyState) {101TitleSetup->cheatCode[0] = TitleSetup->cheatCode[1];102TitleSetup->cheatCode[1] = TitleSetup->cheatCode[2];103TitleSetup->cheatCode[2] = TitleSetup->cheatCode[3];104TitleSetup->cheatCode[3] = TitleSetup->cheatCode[4];105TitleSetup->cheatCode[4] = TitleSetup->cheatCode[5];106TitleSetup->cheatCode[5] = TitleSetup->cheatCode[6];107TitleSetup->cheatCode[6] = TitleSetup->cheatCode[7];108TitleSetup->cheatCode[7] = keyState;109}110}111112void TitleSetup_CheckCheatCode(void)113{114TitleSetup_HandleCheatInputs();115116if (TitleSetup->cheatCode[0] == 1 && TitleSetup->cheatCode[1] == 1 && TitleSetup->cheatCode[2] == 2 && TitleSetup->cheatCode[3] == 2117&& TitleSetup->cheatCode[4] == 1 && TitleSetup->cheatCode[5] == 1 && TitleSetup->cheatCode[6] == 1 && TitleSetup->cheatCode[7] == 1) {118if (!globals->superSecret) {119RSDK.PlaySfx(TitleSetup->sfxRing, false, 255);120globals->superSecret = true;121}122}123}124#endif125126bool32 TitleSetup_VideoSkipCB(void)127{128if (ControllerInfo->keyA.press || ControllerInfo->keyB.press || ControllerInfo->keyStart.press) {129Music_Stop();130return true;131}132133return false;134}135136void TitleSetup_State_Wait(void)137{138RSDK_THIS(TitleSetup);139140if (self->timer <= -0x400) {141self->timer = 0;142self->state = TitleSetup_State_AnimateUntilFlash;143self->stateDraw = TitleSetup_Draw_DrawRing;144Music_PlayTrack(TRACK_STAGE);145}146else {147self->timer -= 16;148}149}150151void TitleSetup_State_AnimateUntilFlash(void)152{153RSDK_THIS(TitleSetup);154155RSDK.ProcessAnimation(&self->animator);156157if (self->animator.frameID == 31) {158foreach_all(TitleLogo, titleLogo)159{160if (titleLogo->type >= TITLELOGO_EMBLEM) {161if (titleLogo->type <= TITLELOGO_RIBBON) {162titleLogo->active = ACTIVE_NORMAL;163titleLogo->visible = true;164}165else if (titleLogo->type == TITLELOGO_POWERLED) {166destroyEntity(titleLogo);167}168}169}170171self->state = TitleSetup_State_FlashIn;172}173}174175void TitleSetup_State_FlashIn(void)176{177RSDK_THIS(TitleSetup);178179RSDK.ProcessAnimation(&self->animator);180if (self->animator.frameID == self->animator.frameCount - 1) {181foreach_all(TitleLogo, titleLogo)182{183#if MANIA_USE_PLUS184if (titleLogo->type == TITLELOGO_PLUS) {185titleLogo->position.y -= 0x200000;186}187else if (titleLogo->type != TITLELOGO_PRESSSTART) {188#else189if (titleLogo->type != TITLELOGO_PRESSSTART) {190#endif191titleLogo->active = ACTIVE_NORMAL;192titleLogo->visible = true;193}194195if (titleLogo->type == TITLELOGO_RIBBON) {196titleLogo->showRibbonCenter = true;197RSDK.SetSpriteAnimation(TitleLogo->aniFrames, 2, &titleLogo->mainAnimator, true, 0);198}199}200201foreach_all(TitleSonic, titleSonic)202{203titleSonic->active = ACTIVE_NORMAL;204titleSonic->visible = true;205}206207TitleBG_SetupFX();208self->timer = 0x300;209self->state = TitleSetup_State_WaitForSonic;210self->stateDraw = TitleSetup_Draw_Flash;211}212}213214void TitleSetup_State_WaitForSonic(void)215{216RSDK_THIS(TitleSetup);217218#if MANIA_USE_PLUS219TitleSetup_CheckCheatCode();220#endif221222if (self->timer <= 0) {223self->stateDraw = StateMachine_None;224225#if MANIA_USE_PLUS226if (API.CheckDLC(DLC_PLUS))227self->state = TitleSetup_State_SetupPlusLogo;228else229#endif230self->state = TitleSetup_State_SetupLogo;231}232else {233self->timer -= 16;234}235}236237void TitleSetup_State_SetupLogo(void)238{239RSDK_THIS(TitleSetup);240241#if MANIA_USE_PLUS242if (self->timer < 120)243TitleSetup_CheckCheatCode();244#endif245246if (++self->timer == 120) {247foreach_all(TitleLogo, titleLogo)248{249if (titleLogo->type == TITLELOGO_PRESSSTART) {250titleLogo->active = ACTIVE_NORMAL;251titleLogo->visible = true;252253#if MANIA_USE_PLUS254Entity *store = SceneInfo->entity;255SceneInfo->entity = (Entity *)titleLogo;256TitleLogo_SetupPressStart();257SceneInfo->entity = store;258#endif259}260}261262self->timer = 0;263self->state = TitleSetup_State_WaitForEnter;264}265}266#if MANIA_USE_PLUS267void TitleSetup_State_SetupPlusLogo(void)268{269RSDK_THIS(TitleSetup);270271if (self->timer < 120)272TitleSetup_CheckCheatCode();273274if (++self->timer == 120) {275foreach_all(TitleLogo, titleLogo)276{277switch (titleLogo->type) {278case TITLELOGO_RIBBON:279case TITLELOGO_GAMETITLE:280titleLogo->storeY = titleLogo->position.y - 0x70000;281titleLogo->velocity.y = -0x30000;282titleLogo->timer = 2;283titleLogo->state = TitleLogo_State_HandleSetup;284285RSDK.PlaySfx(TitleLogo->sfxPlus, false, 255);286break;287288case TITLELOGO_PRESSSTART: titleLogo->position.y += 0x80000; break;289290case TITLELOGO_PLUS:291titleLogo->active = ACTIVE_NORMAL;292titleLogo->visible = true;293titleLogo->timer = 2;294titleLogo->position.y -= 0x40000;295titleLogo->state = TitleLogo_State_HandleSetup;296break;297298default: break;299}300}301302CREATE_ENTITY(TitleEggman, NULL, 0, 0xC00000);303self->timer = 0;304self->state = TitleSetup_State_SetupLogo;305}306}307#endif308309void TitleSetup_State_WaitForEnter(void)310{311RSDK_THIS(TitleSetup);312313bool32 anyButton = ControllerInfo->keyA.press || ControllerInfo->keyB.press || ControllerInfo->keyC.press || ControllerInfo->keyX.press314|| ControllerInfo->keyY.press || ControllerInfo->keyZ.press || ControllerInfo->keyStart.press315|| ControllerInfo->keySelect.press;316317bool32 anyClick = (!TouchInfo->count && self->touched) || Unknown_anyKeyPress;318self->touched = TouchInfo->count > 0;319320if (anyClick || anyButton) {321RSDK.PlaySfx(TitleSetup->sfxMenuAccept, false, 0xFF);322self->timer = 0;323324const char *nextScene = "Menu";325// Switch 1.0 dev level select cheat (Skips all the funky API setup stuff the menu does, so it was known for causin a bunch of issues)326#if GAME_VERSION == VER_100327if (ControllerInfo->keyA.down && (ControllerInfo->keyX.down || ControllerInfo->keyC.down))328nextScene = "Level Select";329#endif330RSDK.SetScene("Presentation", nextScene);331332#if MANIA_USE_PLUS333int32 id = API_GetFilteredInputDeviceID(false, false, 5);334#else335int32 id = API_GetFilteredInputDeviceID(INPUT_NONE);336#endif337API_ResetInputSlotAssignments();338API_AssignInputSlotToDevice(CONT_P1, id);339340Music_Stop();341self->state = TitleSetup_State_FadeToMenu;342self->stateDraw = TitleSetup_Draw_FadeBlack;343}344else if (++self->timer == 800) {345self->timer = 0;346self->state = TitleSetup_State_FadeToVideo;347self->stateDraw = TitleSetup_Draw_FadeBlack;348}349}350351void TitleSetup_State_FadeToMenu(void)352{353RSDK_THIS(TitleSetup);354355if (self->timer >= 1024)356RSDK.LoadScene();357else358self->timer += 8;359}360361void TitleSetup_State_FadeToVideo(void)362{363RSDK_THIS(TitleSetup);364365if (self->timer >= 1024) {366RSDK.LoadScene();367Music_Stop();368369if (TitleSetup->useAltIntroMusic) {370RSDK.PlayStream("IntroTee.ogg", Music->channelID, 0, 0, false);371RSDK.LoadVideo("Mania.ogv", 1.8, TitleSetup_VideoSkipCB);372TitleSetup->useAltIntroMusic = false;373}374else {375RSDK.PlayStream("IntroHP.ogg", Music->channelID, 0, 0, false);376RSDK.LoadVideo("Mania.ogv", 0, TitleSetup_VideoSkipCB);377TitleSetup->useAltIntroMusic = true;378}379}380else {381self->timer += 8;382}383}384385void TitleSetup_Draw_FadeBlack(void)386{387RSDK_THIS(TitleSetup);388389RSDK.FillScreen(0x000000, self->timer, self->timer - 128, self->timer - 256);390}391392void TitleSetup_Draw_DrawRing(void)393{394RSDK_THIS(TitleSetup);395396self->direction = FLIP_NONE;397RSDK.DrawSprite(&self->animator, &self->drawPos, false);398399self->direction = FLIP_X;400RSDK.DrawSprite(&self->animator, &self->drawPos, false);401}402403void TitleSetup_Draw_Flash(void)404{405RSDK_THIS(TitleSetup);406407RSDK.FillScreen(0xF0F0F0, self->timer, self->timer - 128, self->timer - 256);408}409410#if GAME_INCLUDE_EDITOR411void TitleSetup_EditorDraw(void) {}412413void TitleSetup_EditorLoad(void) {}414#endif415416void TitleSetup_Serialize(void) {}417418419