Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-Mania-Decompilation
Path: blob/master/SonicMania/Objects/AIZ/AIZEggRobo.c
338 views
1
// ---------------------------------------------------------------------
2
// RSDK Project: Sonic Mania
3
// Object Description: AIZEggRobo Object
4
// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges
5
// Decompiled by: Rubberduckycooly & RMGRich
6
// ---------------------------------------------------------------------
7
8
#include "Game.h"
9
10
ObjectAIZEggRobo *AIZEggRobo;
11
12
void AIZEggRobo_Update(void)
13
{
14
RSDK_THIS(AIZEggRobo);
15
16
if (self->oscillate)
17
self->position.y += RSDK.Sin256(4 * (self->oscillateOffset + Zone->timer)) << 7;
18
19
if (self->movePos.x != self->position.x) {
20
int32 distance = self->position.x - self->movePos.x;
21
if (distance < 0)
22
self->direction = FLIP_X;
23
else if (distance > 0)
24
self->direction = FLIP_NONE;
25
}
26
27
self->movePos = self->position;
28
RSDK.ProcessAnimation(&self->animatorBody);
29
RSDK.ProcessAnimation(&self->animatorLegs);
30
RSDK.ProcessAnimation(&self->animatorArm);
31
}
32
33
void AIZEggRobo_LateUpdate(void) {}
34
35
void AIZEggRobo_StaticUpdate(void) {}
36
37
void AIZEggRobo_Draw(void)
38
{
39
RSDK_THIS(AIZEggRobo);
40
41
RSDK.DrawSprite(&self->animatorLegs, NULL, false);
42
RSDK.DrawSprite(&self->animatorBody, NULL, false);
43
RSDK.DrawSprite(&self->animatorArm, NULL, false);
44
}
45
46
void AIZEggRobo_Create(void *data)
47
{
48
RSDK_THIS(AIZEggRobo);
49
self->active = ACTIVE_BOUNDS;
50
self->drawGroup = Zone->objectDrawGroup[0];
51
self->rotation = self->angle;
52
self->startPos = self->position;
53
self->movePos.x = self->position.x;
54
self->movePos.y = self->position.y;
55
self->visible = true;
56
self->drawFX = FX_ROTATE | FX_FLIP;
57
self->updateRange.x = 0x800000;
58
self->updateRange.y = 0x800000;
59
self->oscillateOffset = RSDK.Rand(0, 256);
60
61
RSDK.SetSpriteAnimation(AIZEggRobo->aniFrames, 0, &self->animatorBody, true, 0);
62
RSDK.SetSpriteAnimation(AIZEggRobo->aniFrames, 1, &self->animatorArm, true, 0);
63
RSDK.SetSpriteAnimation(AIZEggRobo->aniFrames, 2, &self->animatorLegs, true, 0);
64
}
65
66
void AIZEggRobo_StageLoad(void) { AIZEggRobo->aniFrames = RSDK.LoadSpriteAnimation("AIZ/AIZEggRobo.bin", SCOPE_STAGE); }
67
68
#if GAME_INCLUDE_EDITOR
69
void AIZEggRobo_EditorDraw(void) { AIZEggRobo_Draw(); }
70
71
void AIZEggRobo_EditorLoad(void)
72
{
73
AIZEggRobo->aniFrames = RSDK.LoadSpriteAnimation("AIZ/AIZEggRobo.bin", SCOPE_STAGE);
74
75
RSDK_ACTIVE_VAR(AIZEggRobo, direction);
76
RSDK_ENUM_VAR("Right", FLIP_NONE);
77
RSDK_ENUM_VAR("Left", FLIP_X);
78
}
79
#endif
80
81
void AIZEggRobo_Serialize(void)
82
{
83
RSDK_EDITABLE_VAR(AIZEggRobo, VAR_UINT8, direction);
84
RSDK_EDITABLE_VAR(AIZEggRobo, VAR_BOOL, oscillate);
85
RSDK_EDITABLE_VAR(AIZEggRobo, VAR_ENUM, angle);
86
RSDK_EDITABLE_VAR(AIZEggRobo, VAR_BOOL, forKnux);
87
}
88
89