Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-Mania-Decompilation
Path: blob/master/SonicMania/Objects/Menu/LogoSetup.c
338 views
1
// ---------------------------------------------------------------------
2
// RSDK Project: Sonic Mania
3
// Object Description: LogoSetup Object
4
// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges
5
// Decompiled by: Rubberduckycooly & RMGRich
6
// ---------------------------------------------------------------------
7
8
#include "Game.h"
9
10
ObjectLogoSetup *LogoSetup;
11
12
void LogoSetup_Update(void)
13
{
14
RSDK_THIS(LogoSetup);
15
16
StateMachine_Run(self->state);
17
18
ScreenInfo->position.x = 0x100 - ScreenInfo->center.x;
19
}
20
21
void LogoSetup_LateUpdate(void) {}
22
23
void LogoSetup_StaticUpdate(void) {}
24
25
void LogoSetup_Draw(void)
26
{
27
RSDK_THIS(LogoSetup);
28
29
StateMachine_Run(self->stateDraw);
30
}
31
32
void LogoSetup_Create(void *data)
33
{
34
RSDK_THIS(LogoSetup);
35
36
if (!SceneInfo->inEditor) {
37
self->active = ACTIVE_ALWAYS;
38
self->visible = true;
39
self->drawGroup = 12;
40
self->state = sku_region == REGION_JP ? LogoSetup_State_CESAScreen : LogoSetup_State_ShowLogos;
41
self->stateDraw = LogoSetup_Draw_Fade;
42
self->timer = 1024;
43
}
44
}
45
46
void LogoSetup_StageLoad(void)
47
{
48
LogoSetup->sfxSega = RSDK.GetSfx("Stage/Sega.wav");
49
RSDK.ResetEntitySlot(0, LogoSetup->classID, NULL);
50
UIPicture->aniFrames = RSDK.LoadSpriteAnimation("Logos/Logos.bin", SCOPE_STAGE);
51
52
// What... is this for...?
53
// LogoSetup is never in any other stages besides category 0, scene 0 (Logos) so this should never be used...
54
// However it was even updated for plus which means it has to have been some sort of dev/debug feature
55
56
if (SceneInfo->listPos >= 3) {
57
switch (SceneInfo->listPos) {
58
case 3: globals->playerID = ID_SONIC; break;
59
case 4: globals->playerID = ID_TAILS; break;
60
case 5: globals->playerID = ID_KNUCKLES; break;
61
#if MANIA_USE_PLUS
62
case 6: globals->playerID = ID_MIGHTY; break;
63
case 7: globals->playerID = ID_RAY; break;
64
#endif
65
default: break;
66
}
67
}
68
}
69
70
bool32 LogoSetup_ImageCallback(void)
71
{
72
if (LogoSetup->timer > 120
73
&& (ControllerInfo->keyA.press || ControllerInfo->keyB.press || ControllerInfo->keyStart.press || LogoSetup->timer >= 300)) {
74
return true;
75
}
76
77
LogoSetup->timer++;
78
return false;
79
}
80
81
void LogoSetup_State_CESAScreen(void)
82
{
83
RSDK_THIS(LogoSetup);
84
85
LogoSetup->timer = 0;
86
#if MANIA_USE_PLUS
87
RSDK.LoadImage("CESA.png", 60.0, 2.0, LogoSetup_ImageCallback);
88
#else
89
RSDK.LoadImage("CESA.tga", 60.0, 2.0, LogoSetup_ImageCallback);
90
#endif
91
92
self->timer = 1024;
93
self->state = LogoSetup_State_ShowLogos;
94
}
95
96
void LogoSetup_State_ShowLogos(void)
97
{
98
RSDK_THIS(LogoSetup);
99
100
if (self->timer <= 0) {
101
if (!ScreenInfo->position.y)
102
RSDK.PlaySfx(LogoSetup->sfxSega, false, 0xFF);
103
104
self->timer = 0;
105
self->state = LogoSetup_State_FadeToNextLogos;
106
self->stateDraw = StateMachine_None;
107
}
108
else {
109
self->timer -= 16;
110
}
111
}
112
113
void LogoSetup_State_FadeToNextLogos(void)
114
{
115
RSDK_THIS(LogoSetup);
116
117
if (++self->timer > 120 || (self->timer > 30 && ControllerInfo->keyStart.press)) {
118
self->timer = 0;
119
self->state = LogoSetup_State_NextLogos;
120
self->stateDraw = LogoSetup_Draw_Fade;
121
}
122
}
123
124
void LogoSetup_State_NextLogos(void)
125
{
126
RSDK_THIS(LogoSetup);
127
128
if (self->timer >= 1024) {
129
if (ScreenInfo->position.y >= SCREEN_YSIZE) {
130
++SceneInfo->listPos;
131
RSDK.LoadScene();
132
}
133
else {
134
ScreenInfo->position.y += SCREEN_YSIZE;
135
self->state = LogoSetup_State_ShowLogos;
136
self->stateDraw = LogoSetup_Draw_Fade;
137
self->timer = 0x400;
138
}
139
}
140
else {
141
self->timer += 16;
142
}
143
}
144
145
void LogoSetup_Draw_Fade(void)
146
{
147
RSDK_THIS(LogoSetup);
148
149
RSDK.FillScreen(0x000000, self->timer, self->timer - 128, self->timer - 256);
150
}
151
152
#if GAME_INCLUDE_EDITOR
153
void LogoSetup_EditorDraw(void) {}
154
155
void LogoSetup_EditorLoad(void) {}
156
#endif
157
158
void LogoSetup_Serialize(void) {}
159
160