Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-Mania-Decompilation
Path: blob/master/SonicMania/Objects/MSZ/MSZ1KIntro.c
338 views
1
// ---------------------------------------------------------------------
2
// RSDK Project: Sonic Mania
3
// Object Description: MSZ1KIntro Object
4
// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges
5
// Decompiled by: Rubberduckycooly & RMGRich
6
// ---------------------------------------------------------------------
7
8
#include "Game.h"
9
10
ObjectMSZ1KIntro *MSZ1KIntro;
11
12
void MSZ1KIntro_Update(void)
13
{
14
RSDK_THIS(MSZ1KIntro);
15
16
if (!self->activated) {
17
if (!isMainGameMode() || !globals->enableIntro || CutsceneRules_CheckStageReload()) {
18
self->active = ACTIVE_NEVER;
19
}
20
else {
21
self->activated = true;
22
CutsceneSeq_StartSequence(self, MSZ1KIntro_Cutscene_SetupPlane, MSZ1KIntro_Cutscene_MagicianMischief, MSZ1KIntro_Cutscene_StartAct,
23
StateMachine_None);
24
25
#if MANIA_USE_PLUS
26
CutsceneSeq_SetSkipType(SKIPTYPE_RELOADSCN);
27
#endif
28
}
29
}
30
}
31
32
void MSZ1KIntro_LateUpdate(void) {}
33
34
void MSZ1KIntro_StaticUpdate(void) {}
35
36
void MSZ1KIntro_Draw(void) {}
37
38
void MSZ1KIntro_Create(void *data)
39
{
40
RSDK_THIS(MSZ1KIntro);
41
42
INIT_ENTITY(self);
43
CutsceneRules_SetupEntity(self, &self->size, &self->hitbox);
44
self->active = ACTIVE_NORMAL;
45
46
if (!globals->suppressTitlecard)
47
destroyEntity(self);
48
}
49
50
void MSZ1KIntro_StageLoad(void)
51
{
52
MSZ1KIntro->playerFrames = RSDK.LoadSpriteAnimation("Players/KnuxCutsceneAIZ.bin", SCOPE_STAGE);
53
54
MSZ1KIntro->sfxImpact = RSDK.GetSfx("Stage/Impact3.wav");
55
}
56
57
bool32 MSZ1KIntro_Cutscene_SetupPlane(EntityCutsceneSeq *host)
58
{
59
MANIA_GET_PLAYER(player1, player2, camera);
60
UNUSED(player2);
61
UNUSED(camera);
62
63
if (!host->timer) {
64
player1->position.y -= 0x4000000;
65
player1->state = Player_State_Air;
66
player1->nextGroundState = StateMachine_None;
67
player1->nextAirState = StateMachine_None;
68
player1->onGround = false;
69
player1->velocity.y = 0x80000;
70
player1->stateInput = StateMachine_None;
71
CutsceneSeq_LockAllPlayerControl();
72
}
73
74
RSDK.SetSpriteAnimation(MSZ1KIntro->playerFrames, 4, &player1->animator, false, 0);
75
76
if (player1->onGround) {
77
RSDK.SetSpriteAnimation(MSZ1KIntro->playerFrames, 5, &player1->animator, true, 0);
78
player1->state = Player_State_Static;
79
return true;
80
}
81
82
return false;
83
}
84
85
bool32 MSZ1KIntro_Cutscene_MagicianMischief(EntityCutsceneSeq *host)
86
{
87
MANIA_GET_PLAYER(player1, player2, camera);
88
UNUSED(player2);
89
UNUSED(camera);
90
91
if (!host->timer) {
92
RSDK.SetSpriteAnimation(MSZ1KIntro->playerFrames, 5, &player1->animator, true, 0);
93
player1->state = Player_State_Static;
94
player1->tileCollisions = TILECOLLISION_NONE;
95
}
96
97
if (player1->animator.animationID == 5 && player1->animator.frameID == 1 && !host->values[0]) {
98
RSDK.PlaySfx(MSZ1KIntro->sfxImpact, false, 0xFF);
99
Camera_ShakeScreen(0, 0, 4);
100
host->values[0] = true;
101
}
102
103
if (host->timer == 60)
104
RSDK.SetSpriteAnimation(MSZ1KIntro->playerFrames, 7, &player1->animator, false, 0);
105
106
if (host->timer == 180)
107
RSDK.SetSpriteAnimation(MSZ1KIntro->playerFrames, 3, &player1->animator, true, 0);
108
109
if (player1->animator.animationID == 3 && player1->animator.frameID == player1->animator.frameCount - 1) {
110
RSDK.SetSpriteAnimation(player1->aniFrames, 0, &player1->animator, true, 0);
111
return true;
112
}
113
return false;
114
}
115
116
bool32 MSZ1KIntro_Cutscene_StartAct(EntityCutsceneSeq *host)
117
{
118
MANIA_GET_PLAYER(player1, player2, camera);
119
UNUSED(player2);
120
UNUSED(camera);
121
122
if (host->timer == 30) {
123
player1->stateInput = Player_Input_P1;
124
player1->tileCollisions = TILECOLLISION_DOWN;
125
player1->onGround = true;
126
player1->state = Player_State_Ground;
127
128
foreach_all(TitleCard, titleCard)
129
{
130
titleCard->active = ACTIVE_NORMAL;
131
titleCard->state = TitleCard_State_SetupBGElements;
132
titleCard->stateDraw = TitleCard_Draw_SlideIn;
133
foreach_break;
134
}
135
136
Music_PlayTrack(TRACK_STAGE);
137
return true;
138
}
139
140
return false;
141
}
142
143
#if GAME_INCLUDE_EDITOR
144
void MSZ1KIntro_EditorDraw(void)
145
{
146
RSDK_THIS(MSZ1KIntro);
147
148
CutsceneRules_DrawCutsceneBounds(self, &self->size);
149
}
150
151
void MSZ1KIntro_EditorLoad(void) {}
152
#endif
153
154
void MSZ1KIntro_Serialize(void) { RSDK_EDITABLE_VAR(MSZ1KIntro, VAR_VECTOR2, size); }
155
156