Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Rubberduckycooly
GitHub Repository: Rubberduckycooly/RSDKv5-Decompilation
Path: blob/master/RSDKv5/RSDK/Graphics/Legacy/v4/DrawingLegacyv4.cpp
1171 views
1
2
3
void RSDK::Legacy::v4::DrawObjectList(int32 group)
4
{
5
for (int32 i = 0; i < drawListEntries[group].listSize; ++i) {
6
objectEntityPos = drawListEntries[group].entityRefs[i];
7
8
int32 type = objectEntityList[objectEntityPos].type;
9
if (type) {
10
if (scriptCode[objectScriptList[type].eventDraw.scriptCodePtr] > 0)
11
ProcessScript(objectScriptList[type].eventDraw.scriptCodePtr, objectScriptList[type].eventDraw.jumpTablePtr, EVENT_DRAW);
12
}
13
}
14
}
15
void RSDK::Legacy::v4::DrawStageGFX()
16
{
17
waterDrawPos = waterLevel - yScrollOffset;
18
19
if (waterDrawPos < 0)
20
waterDrawPos = 0;
21
22
if (waterDrawPos > SCREEN_YSIZE)
23
waterDrawPos = SCREEN_YSIZE;
24
25
if (tLayerMidPoint < 3) {
26
DrawObjectList(0);
27
28
if (activeTileLayers[0] < LEGACY_LAYER_COUNT) {
29
switch (stageLayouts[activeTileLayers[0]].type) {
30
case LAYER_HSCROLL: DrawHLineScrollLayer(0); break;
31
case LAYER_VSCROLL: DrawVLineScrollLayer(0); break;
32
case LAYER_3DFLOOR: Draw3DFloorLayer(0); break;
33
case LAYER_3DSKY: Draw3DSkyLayer(0); break;
34
35
default: break;
36
}
37
}
38
39
DrawObjectList(1);
40
41
if (activeTileLayers[1] < LEGACY_LAYER_COUNT) {
42
switch (stageLayouts[activeTileLayers[1]].type) {
43
case LAYER_HSCROLL: DrawHLineScrollLayer(1); break;
44
case LAYER_VSCROLL: DrawVLineScrollLayer(1); break;
45
case LAYER_3DFLOOR: Draw3DFloorLayer(1); break;
46
case LAYER_3DSKY: Draw3DSkyLayer(1); break;
47
default: break;
48
}
49
}
50
51
DrawObjectList(2);
52
DrawObjectList(3);
53
DrawObjectList(4);
54
55
if (activeTileLayers[2] < LEGACY_LAYER_COUNT) {
56
switch (stageLayouts[activeTileLayers[2]].type) {
57
case LAYER_HSCROLL: DrawHLineScrollLayer(2); break;
58
case LAYER_VSCROLL: DrawVLineScrollLayer(2); break;
59
case LAYER_3DFLOOR: Draw3DFloorLayer(2); break;
60
case LAYER_3DSKY: Draw3DSkyLayer(2); break;
61
default: break;
62
}
63
}
64
}
65
else if (tLayerMidPoint < 6) {
66
DrawObjectList(0);
67
68
if (activeTileLayers[0] < LEGACY_LAYER_COUNT) {
69
switch (stageLayouts[activeTileLayers[0]].type) {
70
case LAYER_HSCROLL: DrawHLineScrollLayer(0); break;
71
case LAYER_VSCROLL: DrawVLineScrollLayer(0); break;
72
case LAYER_3DFLOOR: Draw3DFloorLayer(0); break;
73
case LAYER_3DSKY: Draw3DSkyLayer(0); break;
74
default: break;
75
}
76
}
77
78
DrawObjectList(1);
79
80
if (activeTileLayers[1] < LEGACY_LAYER_COUNT) {
81
switch (stageLayouts[activeTileLayers[1]].type) {
82
case LAYER_HSCROLL: DrawHLineScrollLayer(1); break;
83
case LAYER_VSCROLL: DrawVLineScrollLayer(1); break;
84
case LAYER_3DFLOOR: Draw3DFloorLayer(1); break;
85
case LAYER_3DSKY: Draw3DSkyLayer(1); break;
86
default: break;
87
}
88
}
89
90
DrawObjectList(2);
91
92
if (activeTileLayers[2] < LEGACY_LAYER_COUNT) {
93
switch (stageLayouts[activeTileLayers[2]].type) {
94
case LAYER_HSCROLL: DrawHLineScrollLayer(2); break;
95
case LAYER_VSCROLL: DrawVLineScrollLayer(2); break;
96
case LAYER_3DFLOOR: Draw3DFloorLayer(2); break;
97
case LAYER_3DSKY: Draw3DSkyLayer(2); break;
98
default: break;
99
}
100
}
101
102
DrawObjectList(3);
103
DrawObjectList(4);
104
}
105
106
if (tLayerMidPoint < 6) {
107
if (activeTileLayers[3] < LEGACY_LAYER_COUNT) {
108
switch (stageLayouts[activeTileLayers[3]].type) {
109
case LAYER_HSCROLL: DrawHLineScrollLayer(3); break;
110
case LAYER_VSCROLL: DrawVLineScrollLayer(3); break;
111
case LAYER_3DFLOOR: Draw3DFloorLayer(3); break;
112
case LAYER_3DSKY: Draw3DSkyLayer(3); break;
113
default: break;
114
}
115
}
116
117
DrawObjectList(5);
118
DrawObjectList(7); // ???
119
DrawObjectList(6);
120
}
121
122
if (fadeMode > 0)
123
DrawRectangle(0, 0, SCREEN_XSIZE, SCREEN_YSIZE, fadeR, fadeG, fadeB, fadeA);
124
125
#if !RETRO_USE_ORIGINAL_CODE
126
DrawDebugOverlays();
127
#endif
128
}
129
130
#if !RETRO_USE_ORIGINAL_CODE
131
void RSDK::Legacy::v4::DrawDebugOverlays()
132
{
133
if (showHitboxes) {
134
for (int32 i = 0; i < debugHitboxCount; ++i) {
135
DebugHitboxInfo *info = &debugHitboxList[i];
136
int32 x = info->pos.x + (info->hitbox.left << 16);
137
int32 y = info->pos.y + (info->hitbox.top << 16);
138
int32 w = abs((info->pos.x + (info->hitbox.right << 16)) - x) >> 16;
139
int32 h = abs((info->pos.y + (info->hitbox.bottom << 16)) - y) >> 16;
140
x = (x >> 16) - xScrollOffset;
141
y = (y >> 16) - yScrollOffset;
142
143
switch (info->type) {
144
case H_TYPE_TOUCH:
145
if (showHitboxes & 1)
146
DrawRectangle(x, y, w, h, info->collision ? 0x80 : 0xFF, info->collision ? 0x80 : 0x00, 0x00, 0x60);
147
break;
148
149
case H_TYPE_BOX:
150
if (showHitboxes & 1) {
151
DrawRectangle(x, y, w, h, 0x00, 0x00, 0xFF, 0x60);
152
if (info->collision & 1) // top
153
DrawRectangle(x, y, w, 1, 0xFF, 0xFF, 0x00, 0xC0);
154
if (info->collision & 8) // bottom
155
DrawRectangle(x, y + h, w, 1, 0xFF, 0xFF, 0x00, 0xC0);
156
if (info->collision & 2) { // left
157
int32 sy = y;
158
int32 sh = h;
159
if (info->collision & 1) {
160
sy++;
161
sh--;
162
}
163
if (info->collision & 8)
164
sh--;
165
DrawRectangle(x, sy, 1, sh, 0xFF, 0xFF, 0x00, 0xC0);
166
}
167
if (info->collision & 4) { // right
168
int32 sy = y;
169
int32 sh = h;
170
if (info->collision & 1) {
171
sy++;
172
sh--;
173
}
174
if (info->collision & 8)
175
sh--;
176
DrawRectangle(x + w, sy, 1, sh, 0xFF, 0xFF, 0x00, 0xC0);
177
}
178
}
179
break;
180
181
case H_TYPE_PLAT:
182
if (showHitboxes & 1) {
183
DrawRectangle(x, y, w, h, 0x00, 0xFF, 0x00, 0x60);
184
if (info->collision & 1) // top
185
DrawRectangle(x, y, w, 1, 0xFF, 0xFF, 0x00, 0xC0);
186
if (info->collision & 8) // bottom
187
DrawRectangle(x, y + h, w, 1, 0xFF, 0xFF, 0x00, 0xC0);
188
}
189
break;
190
}
191
}
192
}
193
194
if (engine.showPaletteOverlay) {
195
for (int32 p = 0; p < LEGACY_PALETTE_COUNT; ++p) {
196
int32 x = (SCREEN_XSIZE - (0x10 << 3));
197
int32 y = (SCREEN_YSIZE - (0x10 << 2));
198
199
for (int32 c = 0; c < PALETTE_BANK_SIZE; ++c) {
200
uint32 clr = GetPaletteEntryPacked(p, c);
201
202
DrawRectangle(x + ((c & 0xF) << 1) + ((p % (LEGACY_PALETTE_COUNT / 2)) * (2 * 16)),
203
y + ((c >> 4) << 1) + ((p / (LEGACY_PALETTE_COUNT / 2)) * (2 * 16)), 2, 2, (clr >> 16) & 0xFF, (clr >> 8) & 0xFF,
204
(clr >> 0) & 0xFF, 0xFF);
205
}
206
}
207
}
208
}
209
#endif
210