Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-Mania-Decompilation
Path: blob/master/SonicMania/Objects/MMZ/MMZLightning.c
338 views
1
// ---------------------------------------------------------------------
2
// RSDK Project: Sonic Mania
3
// Object Description: MMZLightning 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
ObjectMMZLightning *MMZLightning;
12
13
void MMZLightning_Update(void)
14
{
15
RSDK_THIS(MMZLightning);
16
17
StateMachine_Run(self->state);
18
}
19
20
void MMZLightning_LateUpdate(void) {}
21
22
void MMZLightning_StaticUpdate(void) {}
23
24
void MMZLightning_Draw(void)
25
{
26
RSDK_THIS(MMZLightning);
27
28
RSDK.SetActivePalette(1, 0, ScreenInfo->size.y);
29
30
RSDK.DrawSprite(&self->animator, NULL, true);
31
32
RSDK.SetActivePalette(0, 0, ScreenInfo->size.y);
33
}
34
35
void MMZLightning_Create(void *data)
36
{
37
RSDK_THIS(MMZLightning);
38
39
if (!SceneInfo->inEditor) {
40
self->active = ACTIVE_NORMAL;
41
self->state = (Type_StateMachine)data;
42
}
43
}
44
45
void MMZLightning_StageLoad(void) { MMZLightning->aniFrames = RSDK.LoadSpriteAnimation("MMZ/Lightning.bin", SCOPE_STAGE); }
46
47
void MMZLightning_State_BeginFadeIn(void)
48
{
49
RSDK_THIS(MMZLightning);
50
51
if (!self->timer)
52
RSDK.SetLimitedFade(0, 0, 5, 192, 0, 255);
53
54
if (++self->timer == 4) {
55
self->timer = 0;
56
self->state = MMZLightning_State_FadeIn;
57
}
58
}
59
60
void MMZLightning_State_FadeIn(void)
61
{
62
RSDK_THIS(MMZLightning);
63
64
RSDK.SetLimitedFade(0, 4, 1, self->timer, false, 255);
65
66
self->timer += 4;
67
if (self->timer > 256)
68
destroyEntity(self);
69
}
70
71
void MMZLightning_State_SetupLightningBig(void)
72
{
73
RSDK_THIS(MMZLightning);
74
75
RSDK.SetSpriteAnimation(MMZLightning->aniFrames, 0, &self->animator, true, 0);
76
77
self->position.x = (ScreenInfo->center.x + RSDK.Rand(-140, 140)) << 16;
78
self->position.y = RSDK.Rand(0x200000, 0x400000);
79
self->visible = true;
80
self->drawFX = FX_FLIP;
81
self->direction = RSDK.Rand(0, 2);
82
self->alpha = 0x200;
83
self->inkEffect = INK_ADD;
84
self->drawGroup = 1;
85
86
self->state = MMZLightning_State_ShowLightningBig;
87
}
88
89
void MMZLightning_State_ShowLightningBig(void)
90
{
91
RSDK_THIS(MMZLightning);
92
93
RSDK.ProcessAnimation(&self->animator);
94
95
if (self->animator.frameID == self->animator.frameCount - 1)
96
self->state = MMZLightning_State_LightningBigFadeOut;
97
}
98
99
void MMZLightning_State_LightningBigFadeOut(void)
100
{
101
RSDK_THIS(MMZLightning);
102
103
if (self->alpha > 0)
104
self->alpha -= 8;
105
else
106
destroyEntity(self);
107
}
108
109
void MMZLightning_State_SetupLightningSmall(void)
110
{
111
RSDK_THIS(MMZLightning);
112
113
RSDK.SetSpriteAnimation(MMZLightning->aniFrames, 1, &self->animator, true, RSDK.Rand(0, 4));
114
115
self->position.x = (ScreenInfo->center.x + RSDK.Rand(-64, 64)) << 16;
116
self->position.y = RSDK.Rand(0x400000, 0x600000);
117
self->visible = true;
118
self->drawFX = FX_FLIP;
119
self->direction = RSDK.Rand(0, 4);
120
self->alpha = 320;
121
self->inkEffect = INK_ADD;
122
self->drawGroup = 1;
123
124
self->state = MMZLightning_State_LightningSmallFadeOut;
125
}
126
127
void MMZLightning_State_LightningSmallFadeOut(void)
128
{
129
RSDK_THIS(MMZLightning);
130
131
if (self->alpha > 0)
132
self->alpha -= 0x20;
133
else
134
destroyEntity(self);
135
}
136
137
#if GAME_INCLUDE_EDITOR
138
void MMZLightning_EditorDraw(void) {}
139
140
void MMZLightning_EditorLoad(void) {}
141
#endif
142
143
void MMZLightning_Serialize(void) {}
144
#endif
145
146