Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-Mania-Decompilation
Path: blob/master/SonicMania/Objects/PGZ/PSZEggman.c
338 views
1
// ---------------------------------------------------------------------
2
// RSDK Project: Sonic Mania
3
// Object Description: PSZEggman Object
4
// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges
5
// Decompiled by: Rubberduckycooly & RMGRich
6
// ---------------------------------------------------------------------
7
8
#include "Game.h"
9
10
ObjectPSZEggman *PSZEggman;
11
12
void PSZEggman_Update(void)
13
{
14
RSDK_THIS(PSZEggman);
15
16
StateMachine_Run(self->state);
17
18
RSDK.ProcessAnimation(&self->eggmanAnimator);
19
RSDK.ProcessAnimation(&self->displayAnimator);
20
RSDK.ProcessAnimation(&self->scanlinesAnimator);
21
}
22
23
void PSZEggman_LateUpdate(void) {}
24
25
void PSZEggman_StaticUpdate(void) {}
26
27
void PSZEggman_Draw(void)
28
{
29
RSDK_THIS(PSZEggman);
30
31
RSDK.DrawSprite(&self->terminalAnimator, NULL, false);
32
RSDK.DrawSprite(&self->displayAnimator, NULL, false);
33
34
self->inkEffect = INK_ALPHA;
35
RSDK.DrawSprite(&self->scanlinesAnimator, NULL, false);
36
37
self->inkEffect = INK_NONE;
38
RSDK.DrawSprite(&self->eggmanAnimator, &self->eggmanPos, false);
39
}
40
41
void PSZEggman_Create(void *data)
42
{
43
RSDK_THIS(PSZEggman);
44
45
if (!SceneInfo->inEditor) {
46
self->visible = true;
47
self->drawGroup = Zone->objectDrawGroup[0];
48
self->eggmanPos.x = self->position.x - 0x180000;
49
self->eggmanPos.y = self->position.y + 0x10000;
50
51
self->alpha = 64;
52
self->active = ACTIVE_BOUNDS;
53
self->updateRange.x = 0x800000;
54
self->updateRange.y = 0x800000;
55
56
RSDK.SetSpriteAnimation(PSZEggman->controlFrames, 0, &self->terminalAnimator, true, 0);
57
RSDK.SetSpriteAnimation(PSZEggman->controlFrames, 1, &self->displayAnimator, true, 0);
58
RSDK.SetSpriteAnimation(PSZEggman->controlFrames, 2, &self->scanlinesAnimator, true, 0);
59
RSDK.SetSpriteAnimation(PSZEggman->aniFrames, 0, &self->eggmanAnimator, true, 0);
60
}
61
}
62
63
void PSZEggman_StageLoad(void)
64
{
65
PSZEggman->controlFrames = RSDK.LoadSpriteAnimation("PSZ2/ControlPanel.bin", SCOPE_STAGE);
66
PSZEggman->aniFrames = RSDK.LoadSpriteAnimation("Eggman/EggmanPSZ.bin", SCOPE_STAGE);
67
}
68
69
void PSZEggman_State_TurnRound(void)
70
{
71
RSDK_THIS(PSZEggman);
72
73
if (self->eggmanAnimator.timer == 1) {
74
if (self->ruby) {
75
self->ruby->position.x += 0x10000;
76
++self->timer;
77
}
78
else if (self->eggmanAnimator.frameID == 7) {
79
self->ruby = CREATE_ENTITY(PhantomRuby, NULL, self->eggmanPos.x - 0x100000, self->eggmanPos.y - 0x20000);
80
}
81
}
82
83
if (self->timer == 6) {
84
self->ruby->startPos.x = self->ruby->position.x;
85
self->ruby->startPos.y = self->ruby->position.y;
86
self->ruby->state = PhantomRuby_State_Oscillate;
87
self->state = StateMachine_None;
88
}
89
}
90
91
#if GAME_INCLUDE_EDITOR
92
void PSZEggman_EditorDraw(void)
93
{
94
RSDK_THIS(PSZEggman);
95
96
self->visible = true;
97
self->drawGroup = Zone->objectDrawGroup[0];
98
self->eggmanPos.x = self->position.x - 0x180000;
99
self->eggmanPos.y = self->position.y + 0x10000;
100
self->alpha = 0x40;
101
self->active = ACTIVE_BOUNDS;
102
self->updateRange.x = 0x800000;
103
self->updateRange.y = 0x800000;
104
105
RSDK.SetSpriteAnimation(PSZEggman->controlFrames, 0, &self->terminalAnimator, true, 0);
106
RSDK.SetSpriteAnimation(PSZEggman->controlFrames, 1, &self->displayAnimator, true, 0);
107
RSDK.SetSpriteAnimation(PSZEggman->controlFrames, 2, &self->scanlinesAnimator, true, 0);
108
RSDK.SetSpriteAnimation(PSZEggman->aniFrames, 0, &self->eggmanAnimator, true, 0);
109
110
PSZEggman_Draw();
111
}
112
113
void PSZEggman_EditorLoad(void)
114
{
115
PSZEggman->controlFrames = RSDK.LoadSpriteAnimation("PSZ2/ControlPanel.bin", SCOPE_STAGE);
116
PSZEggman->aniFrames = RSDK.LoadSpriteAnimation("Eggman/EggmanPSZ.bin", SCOPE_STAGE);
117
}
118
#endif
119
120
void PSZEggman_Serialize(void) {}
121
122