Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-Mania-Decompilation
Path: blob/master/SonicMania/Objects/OOZ/Valve.c
338 views
1
// ---------------------------------------------------------------------
2
// RSDK Project: Sonic Mania
3
// Object Description: Valve Object
4
// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges
5
// Decompiled by: Rubberduckycooly & RMGRich
6
// ---------------------------------------------------------------------
7
8
#include "Game.h"
9
10
ObjectValve *Valve;
11
12
void Valve_Update(void)
13
{
14
RSDK_THIS(Valve);
15
16
RSDK.ProcessAnimation(&self->valveAnimator);
17
RSDK.ProcessAnimation(&self->wheelAnimator);
18
19
foreach_active(Player, player)
20
{
21
if (Player_CheckCollisionTouch(player, self, &Valve->hitbox))
22
OOZSetup->smogTimer = 0;
23
}
24
25
if (self->wheelAnimator.animationID == 2 && self->wheelAnimator.frameID == 5 && self->wheelAnimator.timer == 1)
26
RSDK.PlaySfx(Valve->sfxClick, false, 0xFF);
27
}
28
29
void Valve_LateUpdate(void) {}
30
31
void Valve_StaticUpdate(void) {}
32
33
void Valve_Draw(void)
34
{
35
RSDK_THIS(Valve);
36
37
RSDK.DrawSprite(&self->wheelAnimator, NULL, false);
38
RSDK.DrawSprite(&self->valveAnimator, NULL, false);
39
}
40
41
void Valve_Create(void *data)
42
{
43
RSDK_THIS(Valve);
44
45
self->drawFX = FX_FLIP;
46
if (!SceneInfo->inEditor) {
47
self->active = ACTIVE_BOUNDS;
48
self->visible = true;
49
self->drawGroup = Zone->objectDrawGroup[0] - 1;
50
self->updateRange.x = 0x800000;
51
self->updateRange.y = 0x800000;
52
53
RSDK.SetSpriteAnimation(Valve->aniFrames, 1, &self->valveAnimator, true, 3);
54
RSDK.SetSpriteAnimation(Valve->aniFrames, 3, &self->wheelAnimator, true, 3);
55
}
56
}
57
58
void Valve_StageLoad(void)
59
{
60
if (RSDK.CheckSceneFolder("OOZ1") || RSDK.CheckSceneFolder("OOZ2"))
61
Valve->aniFrames = RSDK.LoadSpriteAnimation("OOZ/Valve.bin", SCOPE_STAGE);
62
63
Valve->hitbox.left = -16;
64
Valve->hitbox.top = -16;
65
Valve->hitbox.right = 16;
66
Valve->hitbox.bottom = 16;
67
68
Valve->sfxClick = RSDK.GetSfx("Stage/Click.wav");
69
}
70
71
#if GAME_INCLUDE_EDITOR
72
void Valve_EditorDraw(void)
73
{
74
RSDK_THIS(Valve);
75
76
RSDK.SetSpriteAnimation(Valve->aniFrames, 1, &self->valveAnimator, false, 3);
77
RSDK.SetSpriteAnimation(Valve->aniFrames, 3, &self->wheelAnimator, false, 3);
78
79
Valve_Draw();
80
}
81
82
void Valve_EditorLoad(void)
83
{
84
Valve->aniFrames = RSDK.LoadSpriteAnimation("OOZ/Valve.bin", SCOPE_STAGE);
85
86
RSDK_ACTIVE_VAR(Valve, direction);
87
RSDK_ENUM_VAR("No Flip", FLIP_NONE);
88
RSDK_ENUM_VAR("Flipped", FLIP_X);
89
}
90
#endif
91
92
void Valve_Serialize(void) { RSDK_EDITABLE_VAR(Valve, VAR_UINT8, direction); }
93
94