Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-Mania-Decompilation
Path: blob/master/SonicMania/Objects/Global/DebugMode.c
338 views
1
// ---------------------------------------------------------------------
2
// RSDK Project: Sonic Mania
3
// Object Description: DebugMode Object
4
// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges
5
// Decompiled by: Rubberduckycooly & RMGRich
6
// ---------------------------------------------------------------------
7
8
#include "Game.h"
9
10
ObjectDebugMode *DebugMode;
11
12
void DebugMode_Update(void)
13
{
14
RSDK_THIS(DebugMode);
15
16
API_SetAchievementsEnabled(false);
17
18
if (Zone)
19
Zone->stageFinishCallback = StateMachine_None;
20
21
bool32 moved = false;
22
23
#if MANIA_USE_PLUS
24
if (ControllerInfo[CONT_P1].keyUp.down || (AnalogStickInfoL[CONT_P1].vDelta > 0.3)) {
25
self->position.y -= self->velocity.y;
26
moved = true;
27
}
28
else if (ControllerInfo[CONT_P1].keyDown.down || (AnalogStickInfoL[CONT_P1].vDelta < -0.3)) {
29
self->position.y += self->velocity.y;
30
moved = true;
31
}
32
33
if (ControllerInfo[CONT_P1].keyLeft.down || (AnalogStickInfoL[CONT_P1].hDelta < -0.3)) {
34
self->position.x -= self->velocity.y;
35
moved = true;
36
}
37
else if (ControllerInfo[CONT_P1].keyRight.down || (AnalogStickInfoL[CONT_P1].hDelta > 0.3)) {
38
self->position.x += self->velocity.y;
39
moved = true;
40
}
41
#else
42
if (ControllerInfo[CONT_P1].keyUp.down || (AnalogStickInfoL[CONT_P1].vDeltaL > 0.3)) {
43
self->position.y -= self->velocity.y;
44
moved = true;
45
}
46
else if (ControllerInfo[CONT_P1].keyDown.down || (AnalogStickInfoL[CONT_P1].vDeltaL < -0.3)) {
47
self->position.y += self->velocity.y;
48
moved = true;
49
}
50
51
if (ControllerInfo[CONT_P1].keyLeft.down || (AnalogStickInfoL[CONT_P1].hDeltaL < -0.3)) {
52
self->position.x -= self->velocity.y;
53
moved = true;
54
}
55
else if (ControllerInfo[CONT_P1].keyRight.down || (AnalogStickInfoL[CONT_P1].hDeltaL > 0.3)) {
56
self->position.x += self->velocity.y;
57
moved = true;
58
}
59
#endif
60
61
if (!moved) {
62
self->velocity.y = 0;
63
}
64
else {
65
self->velocity.y += 0xC00;
66
if (self->velocity.y > TO_FIXED(16))
67
self->velocity.y = TO_FIXED(16);
68
}
69
70
#if GAME_VERSION != VER_100
71
bool32 keySpawn = ControllerInfo[CONT_P1].keyY.press;
72
bool32 keyBack = ControllerInfo[CONT_P1].keyX.press;
73
#else
74
bool32 keySpawn = ControllerInfo[CONT_P1].keyX.press;
75
bool32 keyBack = ControllerInfo[CONT_P1].keyY.press;
76
#endif
77
78
if (ControllerInfo[CONT_P1].keyA.press) {
79
++DebugMode->itemID;
80
DebugMode->itemID %= DebugMode->itemCount;
81
DebugMode->itemType = 0;
82
}
83
else if (keyBack) {
84
// Do this so we can access the player variables again
85
RSDK_THIS(Player);
86
self->classID = Player->classID;
87
self->groundVel = 0;
88
self->velocity.x = 0;
89
self->velocity.y = 0;
90
self->state = Player_State_Air;
91
self->collisionPlane = 0;
92
self->tileCollisions = TILECOLLISION_DOWN;
93
self->interaction = true;
94
self->visible = true;
95
self->drawGroup = Zone->playerDrawGroup[0];
96
97
SceneInfo->timeEnabled = true;
98
if (SceneInfo->minutes == 9 && SceneInfo->seconds == 59 && SceneInfo->milliseconds == 99) {
99
SceneInfo->minutes = 0;
100
SceneInfo->seconds = 0;
101
SceneInfo->milliseconds = 0;
102
}
103
104
DebugMode->debugActive = false;
105
}
106
else if (ControllerInfo[CONT_P1].keyA.down) {
107
if (ControllerInfo[CONT_P1].keyC.press || keySpawn) {
108
if (--DebugMode->itemID < 0)
109
DebugMode->itemID = DebugMode->itemCount - 1;
110
111
DebugMode->itemType = 0;
112
}
113
114
if (ControllerInfo[CONT_P1].keyB.press) {
115
DebugMode->itemType--;
116
117
if (DebugMode->itemType >= DebugMode->itemTypeCount)
118
DebugMode->itemType = DebugMode->itemTypeCount - 1;
119
}
120
}
121
else if (ControllerInfo[CONT_P1].keyC.press || keySpawn) {
122
StateMachine_Run(DebugMode->spawn[DebugMode->itemID]);
123
}
124
else if (ControllerInfo[CONT_P1].keyB.press) {
125
if (DebugMode->itemType >= DebugMode->itemTypeCount - 1)
126
DebugMode->itemType = 0;
127
else
128
DebugMode->itemType++;
129
}
130
}
131
132
void DebugMode_LateUpdate(void) {}
133
134
void DebugMode_StaticUpdate(void) {}
135
136
void DebugMode_Draw(void) { StateMachine_Run(DebugMode->draw[DebugMode->itemID]); }
137
138
void DebugMode_Create(void *data)
139
{
140
RSDK_THIS(DebugMode);
141
142
self->active = ACTIVE_NORMAL;
143
self->visible = true;
144
}
145
146
void DebugMode_StageLoad(void)
147
{
148
DebugMode->itemID = 0;
149
DebugMode->itemCount = 0;
150
DebugMode->debugActive = false;
151
152
for (int32 i = 0; i < DEBUGMODE_OBJECT_COUNT; ++i) {
153
DebugMode->classIDs[i] = TYPE_BLANK;
154
DebugMode->draw[i] = StateMachine_None;
155
DebugMode->spawn[i] = DebugMode_NullState;
156
}
157
}
158
159
void DebugMode_NullState(void) {}
160
161
void DebugMode_AddObject(uint16 id, void (*draw)(void), void (*spawn)(void))
162
{
163
if (DebugMode->itemCount < DEBUGMODE_OBJECT_COUNT) {
164
DebugMode->classIDs[DebugMode->itemCount] = id;
165
DebugMode->draw[DebugMode->itemCount] = draw;
166
DebugMode->spawn[DebugMode->itemCount] = spawn;
167
DebugMode->itemCount++;
168
}
169
}
170
171
#if GAME_INCLUDE_EDITOR
172
void DebugMode_EditorDraw(void) {}
173
174
void DebugMode_EditorLoad(void) {}
175
#endif
176
177
void DebugMode_Serialize(void) {}
178
179