Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-Mania-Decompilation
Path: blob/master/SonicMania/Objects/Menu/ExtrasMenu.c
338 views
1
// ---------------------------------------------------------------------
2
// RSDK Project: Sonic Mania
3
// Object Description: ExtrasMenu Object
4
// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges
5
// Decompiled by: Rubberduckycooly & RMGRich
6
// ---------------------------------------------------------------------
7
8
#include "Game.h"
9
10
#if MANIA_USE_PLUS
11
ObjectExtrasMenu *ExtrasMenu;
12
13
void ExtrasMenu_Update(void) {}
14
15
void ExtrasMenu_LateUpdate(void) {}
16
17
void ExtrasMenu_StaticUpdate(void) {}
18
19
void ExtrasMenu_Draw(void) {}
20
21
void ExtrasMenu_Create(void *data) {}
22
23
void ExtrasMenu_StageLoad(void) {}
24
25
void ExtrasMenu_Initialize(void)
26
{
27
String tag;
28
INIT_STRING(tag);
29
RSDK.SetString(&tag, "Extras");
30
31
LogHelpers_Print("ManiaModeMenu_Initialize()");
32
33
foreach_all(UIControl, control)
34
{
35
if (RSDK.CompareStrings(&tag, &control->tag, false))
36
ExtrasMenu->extrasControl = control;
37
}
38
}
39
40
void ExtrasMenu_HandleUnlocks(void)
41
{
42
EntityUIControl *control = (EntityUIControl *)ExtrasMenu->extrasControl;
43
44
EntityUIButton *bssButton = control->buttons[0];
45
bssButton->disabled = !GameProgress_CheckUnlock(GAMEPROGRESS_UNLOCK_BLUESPHERES);
46
if (bssButton->disabled)
47
UIButton_ManageChoices(bssButton);
48
49
EntityUIButton *puyoButton = control->buttons[1];
50
puyoButton->disabled = !GameProgress_CheckUnlock(GAMEPROGRESS_UNLOCK_MEANBEAN);
51
if (puyoButton->disabled)
52
UIButton_ManageChoices(puyoButton);
53
54
EntityUIButton *daGardenButton = control->buttons[2];
55
daGardenButton->disabled = !GameProgress_CheckUnlock(GAMEPROGRESS_UNLOCK_DAGARDEN) && !globals->medallionDebug;
56
}
57
58
void ExtrasMenu_SetupActions(void)
59
{
60
EntityUIControl *control = (EntityUIControl *)ExtrasMenu->extrasControl;
61
62
control->processButtonInputCB = ExtrasMenu_ProcessInputs;
63
64
foreach_all(UIButton, button)
65
{
66
if (button->listID == 7) {
67
switch (button->frameID) {
68
default: break;
69
70
case 4:
71
button->actionCB = ExtrasMenu_DAGarden_ActionCB;
72
button->clearParentState = true;
73
break;
74
75
case 8:
76
button->actionCB = ExtrasMenu_CreditsButton_ActionCB;
77
button->clearParentState = true;
78
break;
79
}
80
}
81
}
82
83
foreach_all(UIChoice, choice)
84
{
85
if (choice->listID == 7) {
86
switch (choice->frameID) {
87
default: break;
88
89
case 2:
90
choice->actionCB = ExtrasMenu_Puyo_vsAI_ActionCB;
91
choice->clearParentState = true;
92
break;
93
94
case 3:
95
choice->actionCB = ExtrasMenu_Puyo_vs2P_ActionCB;
96
choice->clearParentState = true;
97
break;
98
99
case 6:
100
choice->actionCB = ExtrasMenu_BSS_S3_ActionCB;
101
choice->clearParentState = true;
102
break;
103
104
case 7:
105
choice->actionCB = ExtrasMenu_BSS_Mania_ActionCB;
106
choice->clearParentState = true;
107
break;
108
}
109
}
110
}
111
}
112
113
void ExtrasMenu_ProcessMedallionCheat(void)
114
{
115
int32 key = 0;
116
if (UIControl->anyLeftPress)
117
key = 1;
118
else if (UIControl->anyRightPress)
119
key = 2;
120
121
if (key) {
122
for (int32 i = 0; i < 7; ++i) ExtrasMenu->cheatCode[i] = ExtrasMenu->cheatCode[i + 1];
123
124
ExtrasMenu->cheatCode[7] = key;
125
}
126
}
127
128
bool32 ExtrasMenu_CheckMedallionCheat(void)
129
{
130
// left, left, right, right, left, right, left, right
131
return ExtrasMenu->cheatCode[0] == 1 && ExtrasMenu->cheatCode[1] == 1 && ExtrasMenu->cheatCode[2] == 2 && ExtrasMenu->cheatCode[3] == 2
132
&& ExtrasMenu->cheatCode[4] == 1 && ExtrasMenu->cheatCode[5] == 2 && ExtrasMenu->cheatCode[6] == 1 && ExtrasMenu->cheatCode[7] == 2;
133
}
134
135
void ExtrasMenu_ProcessInputs(void)
136
{
137
RSDK_THIS(UIControl);
138
139
#if GAME_VERSION == VER_106
140
// this "cheat" is technically PC only, but I can't be bothered to ifdef it and it's cooler to have on all platforms
141
142
// buttonID == 2: DAGarden
143
if (self->buttonID == 2) {
144
ExtrasMenu_ProcessMedallionCheat();
145
146
if (ExtrasMenu_CheckMedallionCheat()) {
147
if (!globals->medallionDebug) {
148
RSDK.PlaySfx(UIWidgets->sfxEvent, false, 255);
149
globals->medallionDebug = true;
150
ExtrasMenu_HandleUnlocks();
151
}
152
}
153
}
154
#endif
155
156
UIControl_ProcessButtonInput();
157
}
158
159
void ExtrasMenu_Start_Puyo_vsAI(void)
160
{
161
EntityMenuParam *param = MenuParam_GetParam();
162
163
TimeAttackData_Clear();
164
165
param->puyoSelection = PUYO_SELECTION_VS_CPU;
166
strcpy(param->menuTag, "Extras");
167
param->menuSelection = EXTRAS_SELECTION_PUYO;
168
169
RSDK.SetScene("Extras", "Puyo Puyo");
170
RSDK.LoadScene();
171
}
172
173
void ExtrasMenu_Puyo_vsAI_ActionCB(void) { MenuSetup_StartTransition(ExtrasMenu_Start_Puyo_vsAI, 32); }
174
175
void ExtrasMenu_Start_Puyo_vs2P(void)
176
{
177
EntityMenuParam *param = MenuParam_GetParam();
178
179
TimeAttackData_Clear();
180
181
param->puyoSelection = PUYO_SELECTION_VS_2P;
182
strcpy(param->menuTag, "Extras");
183
param->menuSelection = EXTRAS_SELECTION_PUYO;
184
185
RSDK.SetScene("Extras", "Puyo Puyo");
186
RSDK.LoadScene();
187
}
188
189
void ExtrasMenu_Puyo_vs2P_ActionCB(void) { MenuSetup_StartTransition(ExtrasMenu_Start_Puyo_vs2P, 32); }
190
191
void ExtrasMenu_Start_Credits(void)
192
{
193
EntityMenuParam *param = MenuParam_GetParam();
194
195
TimeAttackData_Clear();
196
197
param->bssSelection = CREDITS_SELECTION_EXTRAS;
198
strcpy(param->menuTag, "Extras");
199
param->menuSelection = EXTRAS_SELECTION_CREDITS;
200
param->creditsReturnToMenu = true;
201
202
RSDK.SetScene("Presentation", "Credits");
203
RSDK.LoadScene();
204
}
205
206
void ExtrasMenu_CreditsButton_ActionCB(void) { MenuSetup_StartTransition(ExtrasMenu_Start_Credits, 32); }
207
208
void ExtrasMenu_Start_DAGarden(void)
209
{
210
EntityMenuParam *param = MenuParam_GetParam();
211
212
TimeAttackData_Clear();
213
214
strcpy(param->menuTag, "Extras");
215
param->menuSelection = EXTRAS_SELECTION_DAGARDEN;
216
217
#if MANIA_USE_PLUS
218
if (API.CheckDLC(DLC_PLUS))
219
RSDK.SetScene("Extras", "D.A. Garden Plus");
220
else
221
#endif
222
RSDK.SetScene("Extras", "D.A. Garden");
223
224
RSDK.LoadScene();
225
}
226
227
void ExtrasMenu_DAGarden_ActionCB(void) { MenuSetup_StartTransition(ExtrasMenu_Start_DAGarden, 32); }
228
229
void ExtrasMenu_Start_BSS_3K(void)
230
{
231
EntityMenuParam *param = MenuParam_GetParam();
232
233
TimeAttackData_Clear();
234
235
param->bssSelection = BSS_SELECTION_EXTRAS;
236
strcpy(param->menuTag, "Extras");
237
param->menuSelection = EXTRAS_SELECTION_BSS;
238
239
RSDK.SetScene("Blue Spheres", "Random");
240
RSDK.LoadScene();
241
}
242
243
void ExtrasMenu_BSS_S3_ActionCB(void) { MenuSetup_StartTransition(ExtrasMenu_Start_BSS_3K, 32); }
244
245
void ExtrasMenu_Start_BSS_Mania(void)
246
{
247
EntityMenuParam *param = MenuParam_GetParam();
248
249
TimeAttackData_Clear();
250
251
param->bssSelection = BSS_SELECTION_EXTRAS;
252
strcpy(param->menuTag, "Extras");
253
param->menuSelection = EXTRAS_SELECTION_BSS;
254
255
RSDK.SetScene("Blue Spheres", "Random 2");
256
RSDK.LoadScene();
257
}
258
259
void ExtrasMenu_BSS_Mania_ActionCB(void) { MenuSetup_StartTransition(ExtrasMenu_Start_BSS_Mania, 32); }
260
261
#if GAME_INCLUDE_EDITOR
262
void ExtrasMenu_EditorDraw(void) {}
263
264
void ExtrasMenu_EditorLoad(void) {}
265
#endif
266
267
void ExtrasMenu_Serialize(void) {}
268
#endif
269
270