Path: blob/master/SonicMania/Objects/Menu/E3MenuSetup.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: E3MenuSetup Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89#if !MANIA_USE_PLUS10ObjectE3MenuSetup *E3MenuSetup = NULL;1112void E3MenuSetup_Update(void)13{14RSDK_THIS(E3MenuSetup);1516StateMachine_Run(self->state);1718if (self->timer >= self->delay) {19StateMachine_Run(self->callback);2021destroyEntity(self);22}23else {24self->timer++;25}26}2728void E3MenuSetup_LateUpdate(void) {}2930void E3MenuSetup_StaticUpdate(void)31{32if (!E3MenuSetup->initialized) {33E3MenuSetup_SetupUI();34E3MenuSetup->initialized = true;35}36}3738void E3MenuSetup_Draw(void)39{40RSDK_THIS(E3MenuSetup);4142RSDK.FillScreen(self->fadeColor, self->fadeTimer, self->fadeTimer - 128, self->fadeTimer - 256);43}4445void E3MenuSetup_Create(void *data)46{47RSDK_THIS(E3MenuSetup);4849self->active = ACTIVE_NORMAL;50self->visible = true;51self->drawGroup = 14;52}5354void E3MenuSetup_StageLoad(void) { RSDK.SetVideoSetting(VIDEOSETTING_SHADERID, 1); }5556void E3MenuSetup_SetupUI(void)57{58String string;59INIT_STRING(string);6061foreach_all(UIControl, control)62{63RSDK.SetString(&string, "Char Select");64if (RSDK.CompareStrings(&string, &control->tag, false))65E3MenuSetup->charSelControl = control;6667RSDK.SetString(&string, "Zone");68if (RSDK.CompareStrings(&string, &control->tag, false))69E3MenuSetup->zoneControl = control;70}7172E3MenuSetup_SetupButtons();73}7475void E3MenuSetup_SetupButtons(void)76{77foreach_all(UICharButton, button)78{79if (button->parent == (Entity *)E3MenuSetup->charSelControl) {80switch (button->characterID) {81case 0: button->actionCB = E3MenuSetup_ActionCB_Sonic; break;82case 1: button->actionCB = E3MenuSetup_ActionCB_Tails; break;83case 2: button->actionCB = E3MenuSetup_ActionCB_Knux; break;84}85}86}8788int32 id = 0;89foreach_all(UITAZoneModule, module)90{91module->actionCB = E3MenuSetup_ActionCB_ZoneSelect;9293if (id == 0) { // GHZ294module->zoneID = 0;95module->actID = 1;96}97else if (id == 1) { // MSZ298module->zoneID = 7;99module->actID = 1;100}101++id;102}103}104105void E3MenuSetup_Callback_LoadScene(void)106{107EntityMenuParam *param = MenuParam_GetParam();108EntityUIControl *control = E3MenuSetup->zoneControl;109110globals->gameMode = MODE_NOSAVE;111globals->medalMods = 0;112RSDK.SetScene("Mania Mode", "");113114EntityUITAZoneModule *module = (EntityUITAZoneModule *)control->buttons[control->buttonID];115param->zoneID = module->zoneID;116param->actID = module->actID;117118SceneInfo->listPos += TimeAttackData_GetManiaListPos(param->zoneID, param->characterID, param->actID);119switch (param->characterID) {120default: break;121case 1: globals->playerID = ID_SONIC; break;122case 2: globals->playerID = ID_TAILS; break;123case 3: globals->playerID = ID_KNUCKLES; break;124}125126RSDK.LoadScene();127}128129void E3MenuSetup_ActionCB_ZoneSelect(void)130{131EntityE3MenuSetup *entity = CREATE_ENTITY(E3MenuSetup, NULL, 0xFFF0 << 16, 0xFFF0 << 16);132133entity->fadeColor = 0x000000;134entity->delay = 32;135entity->fadeSpeed = 5;136entity->state = E3MenuSetup_State_FadeOut;137entity->callback = E3MenuSetup_Callback_LoadScene;138}139140// Sonic Sel141void E3MenuSetup_ActionCB_Sonic(void)142{143EntityMenuParam *param = MenuParam_GetParam();144145TimeAttackData_Clear();146param->characterID = 1;147148EntityUIControl *control = E3MenuSetup->zoneControl;149for (int32 i = 0; i < control->buttonCount; ++i) {150control->buttons[i]->animator.animationID = 1;151}152153UIControl_MatchMenuTag("Zones");154}155156// Tails Sel157void E3MenuSetup_ActionCB_Tails(void)158{159EntityMenuParam *param = MenuParam_GetParam();160161TimeAttackData_Clear();162param->characterID = 2;163164EntityUIControl *control = E3MenuSetup->zoneControl;165for (int32 i = 0; i < control->buttonCount; ++i) {166control->buttons[i]->animator.animationID = 2;167}168169UIControl_MatchMenuTag("Zones");170}171172// Knux Sel173void E3MenuSetup_ActionCB_Knux(void)174{175EntityMenuParam *param = MenuParam_GetParam();176177TimeAttackData_Clear();178param->characterID = 3;179180EntityUIControl *control = E3MenuSetup->zoneControl;181for (int32 i = 0; i < control->buttonCount; ++i) {182control->buttons[i]->animator.animationID = 3;183}184185UIControl_MatchMenuTag("Zones");186}187188void E3MenuSetup_State_FadeOut(void)189{190RSDK_THIS(E3MenuSetup);191192self->fadeTimer = CLAMP(self->timer << (self->fadeSpeed - 1), 0, 0x200);193}194195#if GAME_INCLUDE_EDITOR196void E3MenuSetup_EditorDraw(void) {}197198void E3MenuSetup_EditorLoad(void) {}199#endif200201void E3MenuSetup_Serialize(void) {}202#endif203204205