Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-Mania-Decompilation
Path: blob/master/SonicMania/Objects/Global/COverlay.c
338 views
1
// ---------------------------------------------------------------------
2
// RSDK Project: Sonic Mania
3
// Object Description: COverlay Object
4
// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges
5
// Decompiled by: Rubberduckycooly & RMGRich
6
// ---------------------------------------------------------------------
7
8
#include "Game.h"
9
10
ObjectCOverlay *COverlay;
11
12
void COverlay_Update(void) {}
13
14
void COverlay_LateUpdate(void) {}
15
16
void COverlay_StaticUpdate(void) {}
17
18
void COverlay_Draw(void)
19
{
20
RSDK_THIS(COverlay);
21
22
int32 tileX = 0;
23
for (self->position.x = (ScreenInfo->position.x & 0xFFFFFFF0) << 16; tileX < (ScreenInfo->size.x >> 4) + 2; ++tileX) {
24
int32 tileY = 0;
25
for (self->position.y = (ScreenInfo->position.y & 0xFFFFFFF0) << 16; tileY < (ScreenInfo->size.y >> 4) + 2; ++tileY) {
26
COverlay_DrawTile();
27
self->position.y += TO_FIXED(16);
28
}
29
self->position.x += TO_FIXED(16);
30
}
31
}
32
33
void COverlay_Create(void *data)
34
{
35
RSDK_THIS(COverlay);
36
37
if (!SceneInfo->inEditor) {
38
self->active = ACTIVE_ALWAYS;
39
self->visible = true;
40
self->drawGroup = Zone->objectDrawGroup[1];
41
}
42
}
43
44
void COverlay_StageLoad(void)
45
{
46
COverlay->aniFrames = RSDK.LoadSpriteAnimation("Global/PlaneSwitch.bin", SCOPE_STAGE);
47
48
DEBUGMODE_ADD_OBJ(COverlay);
49
}
50
51
void COverlay_DebugDraw(void)
52
{
53
RSDK.SetSpriteAnimation(COverlay->aniFrames, 0, &DebugMode->animator, true, 0);
54
DebugMode->animator.frameID = 4;
55
56
RSDK.DrawSprite(&DebugMode->animator, NULL, false);
57
}
58
59
void COverlay_DebugSpawn(void)
60
{
61
RSDK_THIS(DebugMode);
62
63
int32 count = 0;
64
foreach_all(COverlay, overlay)
65
{
66
destroyEntity(overlay);
67
++count;
68
}
69
70
if (!count)
71
CREATE_ENTITY(COverlay, NULL, self->position.x, self->position.y);
72
}
73
74
void COverlay_DrawTile(void)
75
{
76
RSDK_THIS(COverlay);
77
78
EntityPlayer *player = RSDK_GET_ENTITY(SLOT_PLAYER1, Player);
79
int32 tx = 0;
80
for (int32 x = 0; x < 0x10; ++x) {
81
uint8 ty = -1;
82
uint8 th2 = -1;
83
uint8 ty2 = -1;
84
uint8 th = -1;
85
uint8 solid = 0;
86
for (int32 y = 0; y < 0x10; ++y) {
87
if (RSDK.ObjectTileCollision(self, Zone->collisionLayers, CMODE_FLOOR, player->collisionPlane, TO_FIXED(x), TO_FIXED(y), false)) {
88
solid |= 1;
89
th2 = y + 1;
90
if (ty == 0xFF)
91
ty = y;
92
}
93
94
if (RSDK.ObjectTileCollision(self, Zone->collisionLayers, CMODE_ROOF, player->collisionPlane, TO_FIXED(x), TO_FIXED(y), false)) {
95
solid |= 2;
96
th = y + 1;
97
if (ty2 == 0xFF)
98
ty2 = y - 1;
99
}
100
}
101
102
if ((ty <= ty2 || ty == 0xFF) && ty2 != 0xFF)
103
ty = ty2;
104
if (th2 < th)
105
th = th2;
106
107
if (ty != 0xFF) {
108
switch (solid) {
109
default: break;
110
111
case 1:
112
RSDK.DrawLine(self->position.x + tx, self->position.y + TO_FIXED(ty), self->position.x + tx, self->position.y + TO_FIXED(th),
113
0xE0E000, 0xFF, INK_NONE, false);
114
break;
115
116
case 2:
117
RSDK.DrawLine(self->position.x + tx, self->position.y + TO_FIXED(ty), self->position.x + tx, self->position.y + TO_FIXED(th),
118
0xE00000, 0xFF, INK_NONE, false);
119
break;
120
121
case 3:
122
RSDK.DrawLine(self->position.x + tx, self->position.y + TO_FIXED(ty), self->position.x + tx, self->position.y + TO_FIXED(th),
123
0xE0E0E0, 0xFF, INK_NONE, false);
124
break;
125
}
126
}
127
128
tx += TO_FIXED(1);
129
}
130
}
131
132
#if GAME_INCLUDE_EDITOR
133
void COverlay_EditorDraw(void) {}
134
135
void COverlay_EditorLoad(void) {}
136
#endif
137
138
void COverlay_Serialize(void) {}
139
140