Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-Mania-Decompilation
Path: blob/master/SonicMania/Objects/FBZ/FBZ2Outro.c
338 views
1
// ---------------------------------------------------------------------
2
// RSDK Project: Sonic Mania
3
// Object Description: FBZ2Outro 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
ObjectFBZ2Outro *FBZ2Outro;
12
13
void FBZ2Outro_Update(void)
14
{
15
RSDK_THIS(FBZ2Outro);
16
17
FBZ2Outro_StartCutscene(self);
18
self->active = ACTIVE_NEVER;
19
}
20
21
void FBZ2Outro_LateUpdate(void) {}
22
23
void FBZ2Outro_StaticUpdate(void) {}
24
25
void FBZ2Outro_Draw(void) {}
26
27
void FBZ2Outro_Create(void *data)
28
{
29
RSDK_THIS(FBZ2Outro);
30
31
self->active = ACTIVE_NORMAL;
32
self->isPermanent = true;
33
}
34
35
void FBZ2Outro_StageLoad(void) {}
36
37
void FBZ2Outro_StartCutscene(EntityFBZ2Outro *outro)
38
{
39
CutsceneSeq_StartSequence(outro, FBZ2Outro_Cutscene_SetupGliders, FBZ2Outro_Cutscene_RunToGlider, FBZ2Outro_Cutscene_GlideAway,
40
StateMachine_None);
41
42
#if MANIA_USE_PLUS
43
CutsceneSeq_SetSkipType(SKIPTYPE_RELOADSCN);
44
#endif
45
46
HUD_MoveOut();
47
}
48
49
bool32 FBZ2Outro_Cutscene_SetupGliders(EntityCutsceneSeq *host)
50
{
51
CutsceneSeq_LockAllPlayerControl();
52
53
foreach_active(Player, player)
54
{
55
player->state = Player_State_Ground;
56
player->stateInput = StateMachine_None;
57
player->right = true;
58
}
59
60
Vector2 size;
61
RSDK.GetLayerSize(Zone->fgLayer[0], &size, true);
62
size.x -= 128;
63
64
for (int32 p = 0; p < Player->playerCount; ++p) {
65
Zone->cameraBoundsR[p] = size.x;
66
Zone->playerBoundActiveR[p] = false;
67
}
68
69
foreach_all(HangGlider, glider) { glider->active = ACTIVE_NORMAL; }
70
71
return true;
72
}
73
74
bool32 FBZ2Outro_Cutscene_RunToGlider(EntityCutsceneSeq *host)
75
{
76
foreach_active(Player, player)
77
{
78
player->jumpPress = false;
79
80
if (player->animator.animationID == ANI_PUSH) {
81
player->jumpPress = true;
82
player->jumpHold = true;
83
}
84
else {
85
if (player->velocity.y > 0x20000)
86
player->jumpHold = false;
87
}
88
89
if (player->sidekick) {
90
foreach_active(HangGlider, glider)
91
{
92
if (player->onGround && glider->position.x - player->position.x < 0x1600000 && player->position.y - glider->position.y > 0x300000) {
93
player->jumpPress = true;
94
player->jumpHold = true;
95
player->jumpStrength = 0x70000;
96
}
97
}
98
}
99
}
100
101
if (RSDK.GetEntityCount(Player->classID, true)) {
102
foreach_active(HangGlider, glider)
103
{
104
if (glider->state == HangGlider_State_Glide) {
105
foreach_active(FBZFan, fan)
106
{
107
if (abs(fan->position.x - glider->position.x) < 0x400000 && fan->position.y - glider->position.y < 0xA00000)
108
glider->velocity.y -= 0x3000;
109
}
110
}
111
}
112
}
113
else {
114
for (int32 p = 0; p < Player->playerCount; ++p) Zone->cameraBoundsT[p] = Zone->cameraBoundsB[p] - ScreenInfo->size.y;
115
116
return true;
117
}
118
119
return false;
120
}
121
122
bool32 FBZ2Outro_Cutscene_GlideAway(EntityCutsceneSeq *host)
123
{
124
EntityPlayer *player1 = RSDK_GET_ENTITY(SLOT_PLAYER1, Player);
125
126
foreach_active(HangGlider, glider)
127
{
128
foreach_active(FBZFan, fan)
129
{
130
if (abs(fan->position.x - glider->position.x) < 0x400000 && fan->position.y - glider->position.y < 0xA00000)
131
glider->velocity.y -= 0x3000;
132
}
133
134
if (glider->attachedPlayer == player1 && !glider->onScreen) {
135
Zone_StartFadeOut(10, 0x000000);
136
137
return true;
138
}
139
}
140
141
return false;
142
}
143
144
#if GAME_INCLUDE_EDITOR
145
void FBZ2Outro_EditorDraw(void) {}
146
147
void FBZ2Outro_EditorLoad(void) {}
148
#endif
149
150
void FBZ2Outro_Serialize(void) {}
151
#endif
152
153