Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-Mania-Decompilation
Path: blob/master/SonicMania/Objects/MSZ/LocoSmoke.c
338 views
1
// ---------------------------------------------------------------------
2
// RSDK Project: Sonic Mania
3
// Object Description: LocoSmoke Object
4
// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges
5
// Decompiled by: Rubberduckycooly & RMGRich
6
// ---------------------------------------------------------------------
7
8
#include "Game.h"
9
10
ObjectLocoSmoke *LocoSmoke;
11
12
void LocoSmoke_Update(void)
13
{
14
RSDK_THIS(LocoSmoke);
15
16
RSDK.ProcessAnimation(&self->animator);
17
18
if (++self->timer == 26) {
19
for (int32 i = 0; i < 8; ++i) {
20
int32 x = self->position.x + RSDK.Rand(-0x280000, 0x180000);
21
int32 y = self->position.y + RSDK.Rand(-0x480000, -0x180000);
22
EntityDebris *debris = CREATE_ENTITY(Debris, NULL, x, y);
23
24
debris->state = Debris_State_Fall;
25
debris->gravityStrength = 512;
26
debris->velocity.x = RSDK.Rand(-0x20000, -0x8000);
27
debris->velocity.y = RSDK.Rand(-0x20000, -0x8000);
28
debris->drawGroup = Zone->objectDrawGroup[0] - 1;
29
debris->timer = 42;
30
RSDK.SetSpriteAnimation(LocoSmoke->aniFrames, 9, &debris->animator, true, 0);
31
}
32
}
33
34
if (self->timer > 0x20) {
35
self->alpha -= 0x10;
36
37
if (self->alpha <= 0)
38
destroyEntity(self);
39
}
40
}
41
42
void LocoSmoke_LateUpdate(void) {}
43
44
void LocoSmoke_StaticUpdate(void) {}
45
46
void LocoSmoke_Draw(void)
47
{
48
RSDK_THIS(LocoSmoke);
49
50
RSDK.DrawSprite(&self->animator, NULL, false);
51
}
52
53
void LocoSmoke_Create(void *data)
54
{
55
RSDK_THIS(LocoSmoke);
56
57
self->active = ACTIVE_NORMAL;
58
self->visible = true;
59
self->drawGroup = Zone->objectDrawGroup[0];
60
self->inkEffect = INK_ALPHA;
61
self->alpha = 0x100;
62
63
RSDK.SetSpriteAnimation(LocoSmoke->aniFrames, 8, &self->animator, true, 0);
64
}
65
66
void LocoSmoke_StageLoad(void) { LocoSmoke->aniFrames = RSDK.LoadSpriteAnimation("MSZ/Train.bin", SCOPE_STAGE); }
67
68
#if GAME_INCLUDE_EDITOR
69
void LocoSmoke_EditorDraw(void)
70
{
71
RSDK_THIS(LocoSmoke);
72
73
RSDK.SetSpriteAnimation(LocoSmoke->aniFrames, 8, &self->animator, true, 0);
74
75
LocoSmoke_Draw();
76
}
77
78
void LocoSmoke_EditorLoad(void) { LocoSmoke->aniFrames = RSDK.LoadSpriteAnimation("MSZ/Train.bin", SCOPE_STAGE); }
79
#endif
80
81
void LocoSmoke_Serialize(void) {}
82
83