1 /*****************************************************************************
2 * Copyright (c) 2014-2020 OpenRCT2 developers
3 *
4 * For a complete list of all authors, please refer to contributors.md
5 * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
6 *
7 * OpenRCT2 is licensed under the GNU General Public License version 3.
8 *****************************************************************************/
9
10 #include "../../drawing/Drawing.h"
11 #include "../../interface/Viewport.h"
12 #include "../../paint/Paint.h"
13 #include "../../paint/Supports.h"
14 #include "../../paint/tile_element/Paint.TileElement.h"
15 #include "../../sprites.h"
16 #include "../../world/Map.h"
17 #include "../RideData.h"
18 #include "../TrackData.h"
19 #include "../TrackPaint.h"
20
21 /** rct2: 0x008A59A8 */
steeplechase_track_flat(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)22 static void steeplechase_track_flat(
23 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
24 const TrackElement& trackElement)
25 {
26 if (trackElement.HasChain())
27 {
28 switch (direction)
29 {
30 case 0:
31 case 2:
32 PaintAddImageAsParentRotated(
33 session, direction, session->TrackColours[SCHEME_TRACK] | 28635, 0, 6, 32, 20, 3, height);
34 metal_a_supports_paint_setup(
35 session, METAL_SUPPORTS_STICK, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
36 break;
37 case 1:
38 case 3:
39 PaintAddImageAsParentRotated(
40 session, direction, session->TrackColours[SCHEME_TRACK] | 28636, 0, 6, 32, 20, 3, height);
41 metal_a_supports_paint_setup(
42 session, METAL_SUPPORTS_STICK_ALT, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
43 break;
44 }
45 }
46 else
47 {
48 switch (direction)
49 {
50 case 0:
51 case 2:
52 PaintAddImageAsParentRotated(
53 session, direction, session->TrackColours[SCHEME_TRACK] | 28633, 0, 6, 32, 20, 3, height);
54 metal_a_supports_paint_setup(
55 session, METAL_SUPPORTS_STICK, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
56 break;
57 case 1:
58 case 3:
59 PaintAddImageAsParentRotated(
60 session, direction, session->TrackColours[SCHEME_TRACK] | 28634, 0, 6, 32, 20, 3, height);
61 metal_a_supports_paint_setup(
62 session, METAL_SUPPORTS_STICK_ALT, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
63 break;
64 }
65 }
66 paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0);
67 paint_util_set_segment_support_height(
68 session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0);
69 paint_util_set_general_support_height(session, height + 32, 0x20);
70 }
71
steeplechase_track_station(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)72 static void steeplechase_track_station(
73 paint_session* session, const Ride* ride, [[maybe_unused]] uint8_t trackSequence, uint8_t direction, int32_t height,
74 const TrackElement& trackElement)
75 {
76 static constexpr const uint32_t imageIds[4][3] = {
77 { 28635, SPR_STATION_BASE_B_SW_NE },
78 { 28636, SPR_STATION_BASE_B_NW_SE },
79 { 28635, SPR_STATION_BASE_B_SW_NE },
80 { 28636, SPR_STATION_BASE_B_NW_SE },
81 };
82
83 PaintAddImageAsParentRotated(
84 session, direction, imageIds[direction][1] | session->TrackColours[SCHEME_MISC], 0, 0, 32, 28, 3, height - 2, 0, 2,
85 height);
86 PaintAddImageAsChildRotated(
87 session, direction, imageIds[direction][0] | session->TrackColours[SCHEME_TRACK], 0, 6, 32, 20, 3, height, 0, 0,
88 height);
89 track_paint_util_draw_station_metal_supports_2(session, direction, height, session->TrackColours[SCHEME_SUPPORTS], 3);
90 track_paint_util_draw_station(session, ride, direction, height, trackElement);
91 paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT);
92 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
93 paint_util_set_general_support_height(session, height + 32, 0x20);
94 }
95
96 /** rct2: 0x008A59B8 */
steeplechase_track_25_deg_up(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)97 static void steeplechase_track_25_deg_up(
98 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
99 const TrackElement& trackElement)
100 {
101 if (trackElement.HasChain())
102 {
103 switch (direction)
104 {
105 case 0:
106 PaintAddImageAsParentRotated(
107 session, direction, session->TrackColours[SCHEME_TRACK] | 28649, 0, 6, 32, 20, 3, height);
108 metal_a_supports_paint_setup(
109 session, METAL_SUPPORTS_STICK, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]);
110 break;
111 case 1:
112 PaintAddImageAsParentRotated(
113 session, direction, session->TrackColours[SCHEME_TRACK] | 28655, 0, 6, 32, 20, 3, height);
114 metal_a_supports_paint_setup(
115 session, METAL_SUPPORTS_STICK_ALT, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]);
116 break;
117 case 2:
118 PaintAddImageAsParentRotated(
119 session, direction, session->TrackColours[SCHEME_TRACK] | 28651, 0, 6, 32, 20, 3, height);
120 metal_a_supports_paint_setup(
121 session, METAL_SUPPORTS_STICK, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]);
122 break;
123 case 3:
124 PaintAddImageAsParentRotated(
125 session, direction, session->TrackColours[SCHEME_TRACK] | 28656, 0, 6, 32, 20, 3, height);
126 metal_a_supports_paint_setup(
127 session, METAL_SUPPORTS_STICK_ALT, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]);
128 break;
129 }
130 }
131 else
132 {
133 switch (direction)
134 {
135 case 0:
136 PaintAddImageAsParentRotated(
137 session, direction, session->TrackColours[SCHEME_TRACK] | 28637, 0, 6, 32, 20, 3, height);
138 metal_a_supports_paint_setup(
139 session, METAL_SUPPORTS_STICK, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]);
140 break;
141 case 1:
142 PaintAddImageAsParentRotated(
143 session, direction, session->TrackColours[SCHEME_TRACK] | 28643, 0, 6, 32, 20, 3, height);
144 metal_a_supports_paint_setup(
145 session, METAL_SUPPORTS_STICK_ALT, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]);
146 break;
147 case 2:
148 PaintAddImageAsParentRotated(
149 session, direction, session->TrackColours[SCHEME_TRACK] | 28639, 0, 6, 32, 20, 3, height);
150 metal_a_supports_paint_setup(
151 session, METAL_SUPPORTS_STICK, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]);
152 break;
153 case 3:
154 PaintAddImageAsParentRotated(
155 session, direction, session->TrackColours[SCHEME_TRACK] | 28644, 0, 6, 32, 20, 3, height);
156 metal_a_supports_paint_setup(
157 session, METAL_SUPPORTS_STICK_ALT, 4, 8, height, session->TrackColours[SCHEME_SUPPORTS]);
158 break;
159 }
160 }
161 if (direction == 0 || direction == 3)
162 {
163 paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1);
164 }
165 else
166 {
167 paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_2);
168 }
169 paint_util_set_segment_support_height(
170 session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0);
171 paint_util_set_general_support_height(session, height + 56, 0x20);
172 }
173
174 /** rct2: 0x008A59C8 */
steeplechase_track_flat_to_25_deg_up(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)175 static void steeplechase_track_flat_to_25_deg_up(
176 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
177 const TrackElement& trackElement)
178 {
179 if (trackElement.HasChain())
180 {
181 switch (direction)
182 {
183 case 0:
184 PaintAddImageAsParentRotated(
185 session, direction, session->TrackColours[SCHEME_TRACK] | 28650, 0, 6, 32, 20, 3, height);
186 metal_a_supports_paint_setup(
187 session, METAL_SUPPORTS_STICK, 4, 3, height, session->TrackColours[SCHEME_SUPPORTS]);
188 break;
189 case 1:
190 PaintAddImageAsParentRotated(
191 session, direction, session->TrackColours[SCHEME_TRACK] | 28657, 0, 6, 32, 20, 3, height);
192 metal_a_supports_paint_setup(
193 session, METAL_SUPPORTS_STICK_ALT, 4, 2, height, session->TrackColours[SCHEME_SUPPORTS]);
194 break;
195 case 2:
196 PaintAddImageAsParentRotated(
197 session, direction, session->TrackColours[SCHEME_TRACK] | 28652, 0, 6, 32, 20, 3, height);
198 metal_a_supports_paint_setup(
199 session, METAL_SUPPORTS_STICK, 4, 2, height, session->TrackColours[SCHEME_SUPPORTS]);
200 break;
201 case 3:
202 PaintAddImageAsParentRotated(
203 session, direction, session->TrackColours[SCHEME_TRACK] | 28658, 0, 6, 32, 20, 3, height);
204 metal_a_supports_paint_setup(
205 session, METAL_SUPPORTS_STICK_ALT, 4, 2, height, session->TrackColours[SCHEME_SUPPORTS]);
206 break;
207 }
208 }
209 else
210 {
211 switch (direction)
212 {
213 case 0:
214 PaintAddImageAsParentRotated(
215 session, direction, session->TrackColours[SCHEME_TRACK] | 28638, 0, 6, 32, 20, 3, height);
216 metal_a_supports_paint_setup(
217 session, METAL_SUPPORTS_STICK, 4, 3, height, session->TrackColours[SCHEME_SUPPORTS]);
218 break;
219 case 1:
220 PaintAddImageAsParentRotated(
221 session, direction, session->TrackColours[SCHEME_TRACK] | 28645, 0, 6, 32, 20, 3, height);
222 metal_a_supports_paint_setup(
223 session, METAL_SUPPORTS_STICK_ALT, 4, 2, height, session->TrackColours[SCHEME_SUPPORTS]);
224 break;
225 case 2:
226 PaintAddImageAsParentRotated(
227 session, direction, session->TrackColours[SCHEME_TRACK] | 28640, 0, 6, 32, 20, 3, height);
228 metal_a_supports_paint_setup(
229 session, METAL_SUPPORTS_STICK, 4, 2, height, session->TrackColours[SCHEME_SUPPORTS]);
230 break;
231 case 3:
232 PaintAddImageAsParentRotated(
233 session, direction, session->TrackColours[SCHEME_TRACK] | 28646, 0, 6, 32, 20, 3, height);
234 metal_a_supports_paint_setup(
235 session, METAL_SUPPORTS_STICK_ALT, 4, 2, height, session->TrackColours[SCHEME_SUPPORTS]);
236 break;
237 }
238 }
239 if (direction == 0 || direction == 3)
240 {
241 paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0);
242 }
243 else
244 {
245 paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_2);
246 }
247 paint_util_set_segment_support_height(
248 session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0);
249 paint_util_set_general_support_height(session, height + 48, 0x20);
250 }
251
252 /** rct2: 0x008A59D8 */
steeplechase_track_25_deg_up_to_flat(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)253 static void steeplechase_track_25_deg_up_to_flat(
254 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
255 const TrackElement& trackElement)
256 {
257 if (trackElement.HasChain())
258 {
259 switch (direction)
260 {
261 case 0:
262 PaintAddImageAsParentRotated(
263 session, direction, session->TrackColours[SCHEME_TRACK] | 28654, 0, 6, 32, 20, 3, height);
264 metal_a_supports_paint_setup(
265 session, METAL_SUPPORTS_STICK, 4, 6, height, session->TrackColours[SCHEME_SUPPORTS]);
266 break;
267 case 1:
268 PaintAddImageAsParentRotated(
269 session, direction, session->TrackColours[SCHEME_TRACK] | 28660, 0, 6, 32, 20, 3, height);
270 metal_a_supports_paint_setup(
271 session, METAL_SUPPORTS_STICK_ALT, 4, 6, height, session->TrackColours[SCHEME_SUPPORTS]);
272 break;
273 case 2:
274 PaintAddImageAsParentRotated(
275 session, direction, session->TrackColours[SCHEME_TRACK] | 28653, 0, 6, 32, 20, 3, height);
276 metal_a_supports_paint_setup(
277 session, METAL_SUPPORTS_STICK, 4, 5, height, session->TrackColours[SCHEME_SUPPORTS]);
278 break;
279 case 3:
280 PaintAddImageAsParentRotated(
281 session, direction, session->TrackColours[SCHEME_TRACK] | 28659, 0, 6, 32, 20, 3, height);
282 metal_a_supports_paint_setup(
283 session, METAL_SUPPORTS_STICK_ALT, 4, 5, height, session->TrackColours[SCHEME_SUPPORTS]);
284 break;
285 }
286 }
287 else
288 {
289 switch (direction)
290 {
291 case 0:
292 PaintAddImageAsParentRotated(
293 session, direction, session->TrackColours[SCHEME_TRACK] | 28642, 0, 6, 32, 20, 3, height);
294 metal_a_supports_paint_setup(
295 session, METAL_SUPPORTS_STICK, 4, 6, height, session->TrackColours[SCHEME_SUPPORTS]);
296 break;
297 case 1:
298 PaintAddImageAsParentRotated(
299 session, direction, session->TrackColours[SCHEME_TRACK] | 28648, 0, 6, 32, 20, 3, height);
300 metal_a_supports_paint_setup(
301 session, METAL_SUPPORTS_STICK_ALT, 4, 6, height, session->TrackColours[SCHEME_SUPPORTS]);
302 break;
303 case 2:
304 PaintAddImageAsParentRotated(
305 session, direction, session->TrackColours[SCHEME_TRACK] | 28641, 0, 6, 32, 20, 3, height);
306 metal_a_supports_paint_setup(
307 session, METAL_SUPPORTS_STICK, 4, 5, height, session->TrackColours[SCHEME_SUPPORTS]);
308 break;
309 case 3:
310 PaintAddImageAsParentRotated(
311 session, direction, session->TrackColours[SCHEME_TRACK] | 28647, 0, 6, 32, 20, 3, height);
312 metal_a_supports_paint_setup(
313 session, METAL_SUPPORTS_STICK_ALT, 4, 5, height, session->TrackColours[SCHEME_SUPPORTS]);
314 break;
315 }
316 }
317 if (direction == 0 || direction == 3)
318 {
319 paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_0);
320 }
321 else
322 {
323 paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_12);
324 }
325 paint_util_set_segment_support_height(
326 session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0);
327 paint_util_set_general_support_height(session, height + 40, 0x20);
328 }
329
330 /** rct2: 0x008A59E8 */
steeplechase_track_25_deg_down(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)331 static void steeplechase_track_25_deg_down(
332 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
333 const TrackElement& trackElement)
334 {
335 steeplechase_track_25_deg_up(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
336 }
337
338 /** rct2: 0x008A59F8 */
steeplechase_track_flat_to_25_deg_down(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)339 static void steeplechase_track_flat_to_25_deg_down(
340 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
341 const TrackElement& trackElement)
342 {
343 steeplechase_track_25_deg_up_to_flat(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
344 }
345
346 /** rct2: 0x008A5A08 */
steeplechase_track_25_deg_down_to_flat(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)347 static void steeplechase_track_25_deg_down_to_flat(
348 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
349 const TrackElement& trackElement)
350 {
351 steeplechase_track_flat_to_25_deg_up(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
352 }
353
354 /** rct2: 0x008A5A18 */
steeplechase_track_left_quarter_turn_5(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)355 static void steeplechase_track_left_quarter_turn_5(
356 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
357 const TrackElement& trackElement)
358 {
359 switch (trackSequence)
360 {
361 case 0:
362 switch (direction)
363 {
364 case 0:
365 PaintAddImageAsParentRotated(
366 session, direction, session->TrackColours[SCHEME_TRACK] | 28698, 0, 6, 32, 20, 3, height);
367 metal_a_supports_paint_setup(
368 session, METAL_SUPPORTS_STICK, 4, 1, height, session->TrackColours[SCHEME_SUPPORTS]);
369 break;
370 case 1:
371 PaintAddImageAsParentRotated(
372 session, direction, session->TrackColours[SCHEME_TRACK] | 28703, 0, 6, 32, 20, 3, height);
373 metal_a_supports_paint_setup(
374 session, METAL_SUPPORTS_STICK_ALT, 4, 1, height, session->TrackColours[SCHEME_SUPPORTS]);
375 break;
376 case 2:
377 PaintAddImageAsParentRotated(
378 session, direction, session->TrackColours[SCHEME_TRACK] | 28708, 0, 6, 32, 20, 3, height);
379 metal_a_supports_paint_setup(
380 session, METAL_SUPPORTS_STICK, 4, 0, height - 3, session->TrackColours[SCHEME_SUPPORTS]);
381 break;
382 case 3:
383 PaintAddImageAsParentRotated(
384 session, direction, session->TrackColours[SCHEME_TRACK] | 28693, 0, 6, 32, 20, 3, height);
385 metal_a_supports_paint_setup(
386 session, METAL_SUPPORTS_STICK_ALT, 4, 0, height - 1, session->TrackColours[SCHEME_SUPPORTS]);
387 break;
388 }
389 if (direction == 0 || direction == 3)
390 {
391 paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0);
392 }
393 paint_util_set_segment_support_height(
394 session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0);
395 paint_util_set_general_support_height(session, height + 32, 0x20);
396 break;
397 case 1:
398 paint_util_set_general_support_height(session, height + 32, 0x20);
399 break;
400 case 2:
401 switch (direction)
402 {
403 case 0:
404 PaintAddImageAsParentRotated(
405 session, direction, session->TrackColours[SCHEME_TRACK] | 28697, 0, 0, 32, 16, 3, height);
406 break;
407 case 1:
408 PaintAddImageAsParentRotated(
409 session, direction, session->TrackColours[SCHEME_TRACK] | 28702, 0, 0, 32, 16, 3, height);
410 break;
411 case 2:
412 PaintAddImageAsParentRotated(
413 session, direction, session->TrackColours[SCHEME_TRACK] | 28707, 0, 16, 32, 16, 3, height);
414 break;
415 case 3:
416 PaintAddImageAsParentRotated(
417 session, direction, session->TrackColours[SCHEME_TRACK] | 28692, 0, 16, 32, 16, 3, height);
418 break;
419 }
420 paint_util_set_segment_support_height(
421 session,
422 paint_util_rotate_segments(
423 SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction),
424 0xFFFF, 0);
425 paint_util_set_general_support_height(session, height + 32, 0x20);
426 break;
427 case 3:
428 switch (direction)
429 {
430 case 0:
431 PaintAddImageAsParentRotated(
432 session, direction, session->TrackColours[SCHEME_TRACK] | 28696, 0, 16, 16, 16, 3, height);
433 break;
434 case 1:
435 PaintAddImageAsParentRotated(
436 session, direction, session->TrackColours[SCHEME_TRACK] | 28701, 16, 16, 16, 16, 3, height);
437 break;
438 case 2:
439 PaintAddImageAsParentRotated(
440 session, direction, session->TrackColours[SCHEME_TRACK] | 28706, 16, 0, 16, 16, 3, height);
441 break;
442 case 3:
443 PaintAddImageAsParentRotated(
444 session, direction, session->TrackColours[SCHEME_TRACK] | 28691, 0, 0, 16, 16, 3, height);
445 break;
446 }
447 paint_util_set_segment_support_height(
448 session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0);
449 paint_util_set_general_support_height(session, height + 32, 0x20);
450 break;
451 case 4:
452 paint_util_set_general_support_height(session, height + 32, 0x20);
453 break;
454 case 5:
455 switch (direction)
456 {
457 case 0:
458 PaintAddImageAsParentRotated(
459 session, direction, session->TrackColours[SCHEME_TRACK] | 28695, 16, 0, 16, 32, 3, height);
460 break;
461 case 1:
462 PaintAddImageAsParentRotated(
463 session, direction, session->TrackColours[SCHEME_TRACK] | 28700, 0, 0, 16, 32, 3, height);
464 break;
465 case 2:
466 PaintAddImageAsParentRotated(
467 session, direction, session->TrackColours[SCHEME_TRACK] | 28705, 0, 0, 16, 32, 3, height);
468 break;
469 case 3:
470 PaintAddImageAsParentRotated(
471 session, direction, session->TrackColours[SCHEME_TRACK] | 28690, 16, 0, 16, 32, 3, height);
472 break;
473 }
474 paint_util_set_segment_support_height(
475 session,
476 paint_util_rotate_segments(
477 SEGMENT_B8 | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction),
478 0xFFFF, 0);
479 paint_util_set_general_support_height(session, height + 32, 0x20);
480 break;
481 case 6:
482 switch (direction)
483 {
484 case 0:
485 PaintAddImageAsParentRotated(
486 session, direction, session->TrackColours[SCHEME_TRACK] | 28694, 6, 0, 20, 32, 3, height);
487 metal_a_supports_paint_setup(
488 session, METAL_SUPPORTS_STICK_ALT, 4, 0, height - 3, session->TrackColours[SCHEME_SUPPORTS]);
489 break;
490 case 1:
491 PaintAddImageAsParentRotated(
492 session, direction, session->TrackColours[SCHEME_TRACK] | 28699, 6, 0, 20, 32, 3, height);
493 metal_a_supports_paint_setup(
494 session, METAL_SUPPORTS_STICK, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
495 break;
496 case 2:
497 PaintAddImageAsParentRotated(
498 session, direction, session->TrackColours[SCHEME_TRACK] | 28704, 6, 0, 20, 32, 3, height);
499 metal_a_supports_paint_setup(
500 session, METAL_SUPPORTS_STICK_ALT, 4, 1, height, session->TrackColours[SCHEME_SUPPORTS]);
501 break;
502 case 3:
503 PaintAddImageAsParentRotated(
504 session, direction, session->TrackColours[SCHEME_TRACK] | 28689, 6, 0, 20, 32, 3, height);
505 metal_a_supports_paint_setup(
506 session, METAL_SUPPORTS_STICK, 4, 0, height - 2, session->TrackColours[SCHEME_SUPPORTS]);
507 break;
508 }
509 switch (direction)
510 {
511 case 2:
512 paint_util_push_tunnel_right(session, height, TUNNEL_0);
513 break;
514 case 3:
515 paint_util_push_tunnel_left(session, height, TUNNEL_0);
516 break;
517 }
518 paint_util_set_segment_support_height(
519 session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, 0);
520 paint_util_set_general_support_height(session, height + 32, 0x20);
521 break;
522 }
523 }
524
525 /** rct2: 0x008A5A28 */
steeplechase_track_right_quarter_turn_5(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)526 static void steeplechase_track_right_quarter_turn_5(
527 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
528 const TrackElement& trackElement)
529 {
530 trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence];
531 steeplechase_track_left_quarter_turn_5(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
532 }
533
534 /** rct2: 0x008A5A38 */
steeplechase_track_s_bend_left(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)535 static void steeplechase_track_s_bend_left(
536 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
537 const TrackElement& trackElement)
538 {
539 switch (trackSequence)
540 {
541 case 0:
542 switch (direction)
543 {
544 case 0:
545 PaintAddImageAsParentRotated(
546 session, direction, session->TrackColours[SCHEME_TRACK] | 28665, 0, 6, 32, 20, 3, height);
547 metal_a_supports_paint_setup(
548 session, METAL_SUPPORTS_STICK, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
549 break;
550 case 1:
551 PaintAddImageAsParentRotated(
552 session, direction, session->TrackColours[SCHEME_TRACK] | 28672, 0, 6, 32, 20, 3, height);
553 metal_a_supports_paint_setup(
554 session, METAL_SUPPORTS_STICK_ALT, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
555 break;
556 case 2:
557 PaintAddImageAsParentRotated(
558 session, direction, session->TrackColours[SCHEME_TRACK] | 28668, 0, 6, 32, 20, 3, height);
559 metal_a_supports_paint_setup(
560 session, METAL_SUPPORTS_STICK, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
561 break;
562 case 3:
563 PaintAddImageAsParentRotated(
564 session, direction, session->TrackColours[SCHEME_TRACK] | 28669, 0, 6, 32, 20, 3, height);
565 metal_a_supports_paint_setup(
566 session, METAL_SUPPORTS_STICK_ALT, 4, 0, height - 2, session->TrackColours[SCHEME_SUPPORTS]);
567 break;
568 }
569 if (direction == 0 || direction == 3)
570 {
571 paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0);
572 }
573 paint_util_set_segment_support_height(
574 session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0);
575 paint_util_set_general_support_height(session, height + 32, 0x20);
576 break;
577 case 1:
578 switch (direction)
579 {
580 case 0:
581 PaintAddImageAsParentRotated(
582 session, direction, session->TrackColours[SCHEME_TRACK] | 28666, 0, 0, 32, 26, 3, height);
583 metal_a_supports_paint_setup(
584 session, METAL_SUPPORTS_STICK, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
585 break;
586 case 1:
587 PaintAddImageAsParentRotated(
588 session, direction, session->TrackColours[SCHEME_TRACK] | 28671, 0, 0, 32, 26, 3, height);
589 metal_a_supports_paint_setup(
590 session, METAL_SUPPORTS_STICK_ALT, 6, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
591 break;
592 case 2:
593 PaintAddImageAsParentRotated(
594 session, direction, session->TrackColours[SCHEME_TRACK] | 28667, 0, 6, 32, 26, 3, height);
595 break;
596 case 3:
597 PaintAddImageAsParentRotated(
598 session, direction, session->TrackColours[SCHEME_TRACK] | 28670, 0, 6, 32, 26, 3, height);
599 break;
600 }
601 paint_util_set_segment_support_height(
602 session,
603 paint_util_rotate_segments(
604 SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction),
605 0xFFFF, 0);
606 paint_util_set_general_support_height(session, height + 32, 0x20);
607 break;
608 case 2:
609 switch (direction)
610 {
611 case 0:
612 PaintAddImageAsParentRotated(
613 session, direction, session->TrackColours[SCHEME_TRACK] | 28667, 0, 6, 32, 26, 3, height);
614 break;
615 case 1:
616 PaintAddImageAsParentRotated(
617 session, direction, session->TrackColours[SCHEME_TRACK] | 28670, 0, 6, 32, 26, 3, height);
618 break;
619 case 2:
620 PaintAddImageAsParentRotated(
621 session, direction, session->TrackColours[SCHEME_TRACK] | 28666, 0, 0, 32, 26, 3, height);
622 metal_a_supports_paint_setup(
623 session, METAL_SUPPORTS_STICK, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
624 break;
625 case 3:
626 PaintAddImageAsParentRotated(
627 session, direction, session->TrackColours[SCHEME_TRACK] | 28671, 0, 0, 32, 26, 3, height);
628 metal_a_supports_paint_setup(
629 session, METAL_SUPPORTS_STICK_ALT, 6, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
630 break;
631 }
632 paint_util_set_segment_support_height(
633 session,
634 paint_util_rotate_segments(
635 SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction),
636 0xFFFF, 0);
637 paint_util_set_general_support_height(session, height + 32, 0x20);
638 break;
639 case 3:
640 switch (direction)
641 {
642 case 0:
643 PaintAddImageAsParentRotated(
644 session, direction, session->TrackColours[SCHEME_TRACK] | 28668, 0, 6, 32, 20, 3, height);
645 metal_a_supports_paint_setup(
646 session, METAL_SUPPORTS_STICK, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
647 break;
648 case 1:
649 PaintAddImageAsParentRotated(
650 session, direction, session->TrackColours[SCHEME_TRACK] | 28669, 0, 6, 32, 20, 3, height);
651 metal_a_supports_paint_setup(
652 session, METAL_SUPPORTS_STICK_ALT, 4, 0, height - 2, session->TrackColours[SCHEME_SUPPORTS]);
653 break;
654 case 2:
655 PaintAddImageAsParentRotated(
656 session, direction, session->TrackColours[SCHEME_TRACK] | 28665, 0, 6, 32, 20, 3, height);
657 metal_a_supports_paint_setup(
658 session, METAL_SUPPORTS_STICK, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
659 break;
660 case 3:
661 PaintAddImageAsParentRotated(
662 session, direction, session->TrackColours[SCHEME_TRACK] | 28672, 0, 6, 32, 20, 3, height);
663 metal_a_supports_paint_setup(
664 session, METAL_SUPPORTS_STICK_ALT, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
665 break;
666 }
667 switch (direction)
668 {
669 case 1:
670 paint_util_push_tunnel_right(session, height, TUNNEL_0);
671 break;
672 case 2:
673 paint_util_push_tunnel_left(session, height, TUNNEL_0);
674 break;
675 }
676 paint_util_set_segment_support_height(
677 session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0);
678 paint_util_set_general_support_height(session, height + 32, 0x20);
679 break;
680 }
681 }
682
683 /** rct2: 0x008A5A48 */
steeplechase_track_s_bend_right(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)684 static void steeplechase_track_s_bend_right(
685 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
686 const TrackElement& trackElement)
687 {
688 switch (trackSequence)
689 {
690 case 0:
691 switch (direction)
692 {
693 case 0:
694 PaintAddImageAsParentRotated(
695 session, direction, session->TrackColours[SCHEME_TRACK] | 28661, 0, 6, 32, 20, 3, height);
696 metal_a_supports_paint_setup(
697 session, METAL_SUPPORTS_STICK, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
698 break;
699 case 1:
700 PaintAddImageAsParentRotated(
701 session, direction, session->TrackColours[SCHEME_TRACK] | 28676, 0, 6, 32, 20, 3, height);
702 metal_a_supports_paint_setup(
703 session, METAL_SUPPORTS_STICK_ALT, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
704 break;
705 case 2:
706 PaintAddImageAsParentRotated(
707 session, direction, session->TrackColours[SCHEME_TRACK] | 28664, 0, 6, 32, 20, 3, height);
708 metal_a_supports_paint_setup(
709 session, METAL_SUPPORTS_STICK, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
710 break;
711 case 3:
712 PaintAddImageAsParentRotated(
713 session, direction, session->TrackColours[SCHEME_TRACK] | 28673, 0, 6, 32, 20, 3, height);
714 metal_a_supports_paint_setup(
715 session, METAL_SUPPORTS_STICK_ALT, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
716 break;
717 }
718 if (direction == 0 || direction == 3)
719 {
720 paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0);
721 }
722 paint_util_set_segment_support_height(
723 session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0);
724 paint_util_set_general_support_height(session, height + 32, 0x20);
725 break;
726 case 1:
727 switch (direction)
728 {
729 case 0:
730 PaintAddImageAsParentRotated(
731 session, direction, session->TrackColours[SCHEME_TRACK] | 28662, 0, 6, 32, 26, 3, height);
732 metal_a_supports_paint_setup(
733 session, METAL_SUPPORTS_STICK, 8, 0, height - 2, session->TrackColours[SCHEME_SUPPORTS]);
734 break;
735 case 1:
736 PaintAddImageAsParentRotated(
737 session, direction, session->TrackColours[SCHEME_TRACK] | 28675, 0, 6, 32, 26, 3, height);
738 metal_a_supports_paint_setup(
739 session, METAL_SUPPORTS_STICK_ALT, 7, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
740 break;
741 case 2:
742 PaintAddImageAsParentRotated(
743 session, direction, session->TrackColours[SCHEME_TRACK] | 28663, 0, 0, 32, 26, 3, height);
744 break;
745 case 3:
746 PaintAddImageAsParentRotated(
747 session, direction, session->TrackColours[SCHEME_TRACK] | 28674, 0, 0, 32, 26, 3, height);
748 break;
749 }
750 paint_util_set_segment_support_height(
751 session,
752 paint_util_rotate_segments(
753 SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction),
754 0xFFFF, 0);
755 paint_util_set_general_support_height(session, height + 32, 0x20);
756 break;
757 case 2:
758 switch (direction)
759 {
760 case 0:
761 PaintAddImageAsParentRotated(
762 session, direction, session->TrackColours[SCHEME_TRACK] | 28663, 0, 0, 32, 26, 3, height);
763 break;
764 case 1:
765 PaintAddImageAsParentRotated(
766 session, direction, session->TrackColours[SCHEME_TRACK] | 28674, 0, 0, 32, 26, 3, height);
767 break;
768 case 2:
769 PaintAddImageAsParentRotated(
770 session, direction, session->TrackColours[SCHEME_TRACK] | 28662, 0, 6, 32, 26, 3, height);
771 metal_a_supports_paint_setup(
772 session, METAL_SUPPORTS_STICK, 8, 0, height - 2, session->TrackColours[SCHEME_SUPPORTS]);
773 break;
774 case 3:
775 PaintAddImageAsParentRotated(
776 session, direction, session->TrackColours[SCHEME_TRACK] | 28675, 0, 6, 32, 26, 3, height);
777 metal_a_supports_paint_setup(
778 session, METAL_SUPPORTS_STICK_ALT, 7, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
779 break;
780 }
781 paint_util_set_segment_support_height(
782 session,
783 paint_util_rotate_segments(
784 SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction),
785 0xFFFF, 0);
786 paint_util_set_general_support_height(session, height + 32, 0x20);
787 break;
788 case 3:
789 switch (direction)
790 {
791 case 0:
792 PaintAddImageAsParentRotated(
793 session, direction, session->TrackColours[SCHEME_TRACK] | 28664, 0, 6, 32, 20, 3, height);
794 metal_a_supports_paint_setup(
795 session, METAL_SUPPORTS_STICK, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
796 break;
797 case 1:
798 PaintAddImageAsParentRotated(
799 session, direction, session->TrackColours[SCHEME_TRACK] | 28673, 0, 6, 32, 20, 3, height);
800 metal_a_supports_paint_setup(
801 session, METAL_SUPPORTS_STICK_ALT, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
802 break;
803 case 2:
804 PaintAddImageAsParentRotated(
805 session, direction, session->TrackColours[SCHEME_TRACK] | 28661, 0, 6, 32, 20, 3, height);
806 metal_a_supports_paint_setup(
807 session, METAL_SUPPORTS_STICK, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
808 break;
809 case 3:
810 PaintAddImageAsParentRotated(
811 session, direction, session->TrackColours[SCHEME_TRACK] | 28676, 0, 6, 32, 20, 3, height);
812 metal_a_supports_paint_setup(
813 session, METAL_SUPPORTS_STICK_ALT, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
814 break;
815 }
816 switch (direction)
817 {
818 case 1:
819 paint_util_push_tunnel_right(session, height, TUNNEL_0);
820 break;
821 case 2:
822 paint_util_push_tunnel_left(session, height, TUNNEL_0);
823 break;
824 }
825 paint_util_set_segment_support_height(
826 session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0);
827 paint_util_set_general_support_height(session, height + 32, 0x20);
828 break;
829 }
830 }
831
832 /** rct2: 0x008A5A88 */
steeplechase_track_left_quarter_turn_3(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)833 static void steeplechase_track_left_quarter_turn_3(
834 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
835 const TrackElement& trackElement)
836 {
837 switch (trackSequence)
838 {
839 case 0:
840 switch (direction)
841 {
842 case 0:
843 PaintAddImageAsParentRotated(
844 session, direction, session->TrackColours[SCHEME_TRACK] | 28682, 0, 6, 32, 20, 3, height);
845 metal_a_supports_paint_setup(
846 session, METAL_SUPPORTS_STICK, 4, 3, height, session->TrackColours[SCHEME_SUPPORTS]);
847 break;
848 case 1:
849 PaintAddImageAsParentRotated(
850 session, direction, session->TrackColours[SCHEME_TRACK] | 28685, 0, 6, 32, 20, 3, height);
851 metal_a_supports_paint_setup(
852 session, METAL_SUPPORTS_STICK_ALT, 4, 1, height, session->TrackColours[SCHEME_SUPPORTS]);
853 break;
854 case 2:
855 PaintAddImageAsParentRotated(
856 session, direction, session->TrackColours[SCHEME_TRACK] | 28688, 0, 6, 32, 20, 3, height);
857 metal_a_supports_paint_setup(
858 session, METAL_SUPPORTS_STICK, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
859 break;
860 case 3:
861 PaintAddImageAsParentRotated(
862 session, direction, session->TrackColours[SCHEME_TRACK] | 28679, 0, 6, 32, 20, 3, height);
863 metal_a_supports_paint_setup(
864 session, METAL_SUPPORTS_STICK_ALT, 4, 0, height - 3, session->TrackColours[SCHEME_SUPPORTS]);
865 break;
866 }
867 if (direction == 0 || direction == 3)
868 {
869 paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0);
870 }
871 paint_util_set_segment_support_height(
872 session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0);
873 paint_util_set_general_support_height(session, height + 32, 0x20);
874 break;
875 case 1:
876 paint_util_set_general_support_height(session, height + 32, 0x20);
877 break;
878 case 2:
879 switch (direction)
880 {
881 case 0:
882 PaintAddImageAsParentRotated(
883 session, direction, session->TrackColours[SCHEME_TRACK] | 28681, 16, 0, 16, 16, 3, height);
884 break;
885 case 1:
886 PaintAddImageAsParentRotated(
887 session, direction, session->TrackColours[SCHEME_TRACK] | 28684, 0, 0, 16, 16, 3, height);
888 break;
889 case 2:
890 PaintAddImageAsParentRotated(
891 session, direction, session->TrackColours[SCHEME_TRACK] | 28687, 0, 16, 16, 16, 3, height);
892 break;
893 case 3:
894 PaintAddImageAsParentRotated(
895 session, direction, session->TrackColours[SCHEME_TRACK] | 28678, 16, 16, 16, 16, 3, height);
896 break;
897 }
898 paint_util_set_segment_support_height(
899 session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0);
900 paint_util_set_general_support_height(session, height + 32, 0x20);
901 break;
902 case 3:
903 switch (direction)
904 {
905 case 0:
906 PaintAddImageAsParentRotated(
907 session, direction, session->TrackColours[SCHEME_TRACK] | 28680, 6, 0, 20, 32, 3, height);
908 metal_a_supports_paint_setup(
909 session, METAL_SUPPORTS_STICK_ALT, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
910 break;
911 case 1:
912 PaintAddImageAsParentRotated(
913 session, direction, session->TrackColours[SCHEME_TRACK] | 28683, 6, 0, 20, 32, 3, height);
914 metal_a_supports_paint_setup(
915 session, METAL_SUPPORTS_STICK, 4, 1, height, session->TrackColours[SCHEME_SUPPORTS]);
916 break;
917 case 2:
918 PaintAddImageAsParentRotated(
919 session, direction, session->TrackColours[SCHEME_TRACK] | 28686, 6, 0, 20, 32, 3, height);
920 metal_a_supports_paint_setup(
921 session, METAL_SUPPORTS_STICK_ALT, 4, 3, height, session->TrackColours[SCHEME_SUPPORTS]);
922 break;
923 case 3:
924 PaintAddImageAsParentRotated(
925 session, direction, session->TrackColours[SCHEME_TRACK] | 28677, 6, 0, 20, 32, 3, height);
926 metal_a_supports_paint_setup(
927 session, METAL_SUPPORTS_STICK, 4, 0, height - 3, session->TrackColours[SCHEME_SUPPORTS]);
928 break;
929 }
930 switch (direction)
931 {
932 case 2:
933 paint_util_push_tunnel_right(session, height, TUNNEL_0);
934 break;
935 case 3:
936 paint_util_push_tunnel_left(session, height, TUNNEL_0);
937 break;
938 }
939 paint_util_set_segment_support_height(
940 session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D4, direction), 0xFFFF, 0);
941 paint_util_set_general_support_height(session, height + 32, 0x20);
942 break;
943 }
944 }
945
946 /** rct2: 0x008A5A98 */
steeplechase_track_right_quarter_turn_3(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)947 static void steeplechase_track_right_quarter_turn_3(
948 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
949 const TrackElement& trackElement)
950 {
951 trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence];
952 steeplechase_track_left_quarter_turn_3(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
953 }
954
955 /** rct2: 0x008A5AA8 */
steeplechase_track_brakes(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)956 static void steeplechase_track_brakes(
957 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
958 const TrackElement& trackElement)
959 {
960 switch (direction)
961 {
962 case 0:
963 case 2:
964 PaintAddImageAsParentRotated(
965 session, direction, session->TrackColours[SCHEME_TRACK] | 28635, 0, 6, 32, 20, 3, height);
966 metal_a_supports_paint_setup(session, METAL_SUPPORTS_STICK, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
967 break;
968 case 1:
969 case 3:
970 PaintAddImageAsParentRotated(
971 session, direction, session->TrackColours[SCHEME_TRACK] | 28636, 0, 6, 32, 20, 3, height);
972 metal_a_supports_paint_setup(
973 session, METAL_SUPPORTS_STICK_ALT, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
974 break;
975 }
976 paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0);
977 paint_util_set_segment_support_height(
978 session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0);
979 paint_util_set_general_support_height(session, height + 32, 0x20);
980 }
981
982 /** rct2: 0x008A5AD8 */
steeplechase_track_left_eighth_to_diag(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)983 static void steeplechase_track_left_eighth_to_diag(
984 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
985 const TrackElement& trackElement)
986 {
987 switch (trackSequence)
988 {
989 case 0:
990 switch (direction)
991 {
992 case 0:
993 PaintAddImageAsParentRotated(
994 session, direction, session->TrackColours[SCHEME_TRACK] | 28725, 0, 0, 32, 20, 3, height, 0, 6, height);
995 metal_a_supports_paint_setup(
996 session, METAL_SUPPORTS_STICK, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
997 break;
998 case 1:
999 PaintAddImageAsParentRotated(
1000 session, direction, session->TrackColours[SCHEME_TRACK] | 28729, 0, 0, 32, 20, 3, height, 0, 6, height);
1001 metal_a_supports_paint_setup(
1002 session, METAL_SUPPORTS_STICK_ALT, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1003 break;
1004 case 2:
1005 PaintAddImageAsParentRotated(
1006 session, direction, session->TrackColours[SCHEME_TRACK] | 28733, 0, 0, 32, 20, 3, height, 0, 6, height);
1007 metal_a_supports_paint_setup(
1008 session, METAL_SUPPORTS_STICK, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1009 break;
1010 case 3:
1011 PaintAddImageAsParentRotated(
1012 session, direction, session->TrackColours[SCHEME_TRACK] | 28737, 0, 0, 32, 20, 3, height, 0, 6, height);
1013 metal_a_supports_paint_setup(
1014 session, METAL_SUPPORTS_STICK_ALT, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1015 break;
1016 }
1017 if (direction == 0 || direction == 3)
1018 {
1019 paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0);
1020 }
1021 paint_util_set_segment_support_height(
1022 session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0);
1023 paint_util_set_general_support_height(session, height + 32, 0x20);
1024 break;
1025 case 1:
1026 switch (direction)
1027 {
1028 case 0:
1029 PaintAddImageAsParentRotated(
1030 session, direction, session->TrackColours[SCHEME_TRACK] | 28726, 0, 0, 32, 16, 3, height, 0, 0, height);
1031 break;
1032 case 1:
1033 PaintAddImageAsParentRotated(
1034 session, direction, session->TrackColours[SCHEME_TRACK] | 28730, 0, 0, 34, 16, 3, height, 0, 0, height);
1035 break;
1036 case 2:
1037 PaintAddImageAsParentRotated(
1038 session, direction, session->TrackColours[SCHEME_TRACK] | 28734, 0, 0, 32, 16, 3, height, 0, 16,
1039 height);
1040 break;
1041 case 3:
1042 PaintAddImageAsParentRotated(
1043 session, direction, session->TrackColours[SCHEME_TRACK] | 28738, 0, 0, 32, 16, 3, height, 0, 16,
1044 height);
1045 break;
1046 }
1047 paint_util_set_segment_support_height(
1048 session,
1049 paint_util_rotate_segments(
1050 SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction),
1051 0xFFFF, 0);
1052 paint_util_set_general_support_height(session, height + 32, 0x20);
1053 break;
1054 case 2:
1055 switch (direction)
1056 {
1057 case 0:
1058 PaintAddImageAsParentRotated(
1059 session, direction, session->TrackColours[SCHEME_TRACK] | 28727, 0, 0, 16, 16, 3, height, 0, 16,
1060 height);
1061 break;
1062 case 1:
1063 PaintAddImageAsParentRotated(
1064 session, direction, session->TrackColours[SCHEME_TRACK] | 28731, 0, 0, 16, 16, 3, height, 16, 16,
1065 height);
1066 break;
1067 case 2:
1068 PaintAddImageAsParentRotated(
1069 session, direction, session->TrackColours[SCHEME_TRACK] | 28735, 0, 0, 16, 16, 3, height, 16, 0,
1070 height);
1071 break;
1072 case 3:
1073 PaintAddImageAsParentRotated(
1074 session, direction, session->TrackColours[SCHEME_TRACK] | 28739, 0, 0, 16, 16, 3, height, 0, 0, height);
1075 break;
1076 }
1077 paint_util_set_segment_support_height(
1078 session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction),
1079 0xFFFF, 0);
1080 paint_util_set_general_support_height(session, height + 32, 0x20);
1081 break;
1082 case 3:
1083 paint_util_set_segment_support_height(
1084 session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0);
1085 paint_util_set_general_support_height(session, height + 32, 0x20);
1086 break;
1087 case 4:
1088 switch (direction)
1089 {
1090 case 0:
1091 PaintAddImageAsParentRotated(
1092 session, direction, session->TrackColours[SCHEME_TRACK] | 28728, 0, 0, 16, 16, 3, height, 16, 16,
1093 height);
1094 metal_a_supports_paint_setup(
1095 session, METAL_SUPPORTS_STICK, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1096 break;
1097 case 1:
1098 PaintAddImageAsParentRotated(
1099 session, direction, session->TrackColours[SCHEME_TRACK] | 28732, 0, 0, 16, 18, 3, height, 0, 16,
1100 height);
1101 metal_a_supports_paint_setup(
1102 session, METAL_SUPPORTS_STICK_ALT, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1103 break;
1104 case 2:
1105 PaintAddImageAsParentRotated(
1106 session, direction, session->TrackColours[SCHEME_TRACK] | 28736, 0, 0, 16, 16, 3, height, 0, 0, height);
1107 metal_a_supports_paint_setup(
1108 session, METAL_SUPPORTS_STICK, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1109 break;
1110 case 3:
1111 PaintAddImageAsParentRotated(
1112 session, direction, session->TrackColours[SCHEME_TRACK] | 28740, 0, 0, 16, 16, 3, height, 16, 0,
1113 height);
1114 metal_a_supports_paint_setup(
1115 session, METAL_SUPPORTS_STICK_ALT, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1116 break;
1117 }
1118 paint_util_set_segment_support_height(
1119 session,
1120 paint_util_rotate_segments(
1121 SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction),
1122 0xFFFF, 0);
1123 paint_util_set_general_support_height(session, height + 32, 0x20);
1124 break;
1125 }
1126 }
1127
1128 /** rct2: 0x008A5AE8 */
steeplechase_track_right_eighth_to_diag(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)1129 static void steeplechase_track_right_eighth_to_diag(
1130 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
1131 const TrackElement& trackElement)
1132 {
1133 switch (trackSequence)
1134 {
1135 case 0:
1136 switch (direction)
1137 {
1138 case 0:
1139 PaintAddImageAsParentRotated(
1140 session, direction, session->TrackColours[SCHEME_TRACK] | 28709, 0, 0, 32, 20, 3, height, 0, 6, height);
1141 metal_a_supports_paint_setup(
1142 session, METAL_SUPPORTS_STICK, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1143 break;
1144 case 1:
1145 PaintAddImageAsParentRotated(
1146 session, direction, session->TrackColours[SCHEME_TRACK] | 28713, 0, 0, 32, 20, 3, height, 0, 6, height);
1147 metal_a_supports_paint_setup(
1148 session, METAL_SUPPORTS_STICK_ALT, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1149 break;
1150 case 2:
1151 PaintAddImageAsParentRotated(
1152 session, direction, session->TrackColours[SCHEME_TRACK] | 28717, 0, 0, 32, 20, 3, height, 0, 6, height);
1153 metal_a_supports_paint_setup(
1154 session, METAL_SUPPORTS_STICK, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1155 break;
1156 case 3:
1157 PaintAddImageAsParentRotated(
1158 session, direction, session->TrackColours[SCHEME_TRACK] | 28721, 0, 0, 32, 20, 3, height, 0, 6, height);
1159 metal_a_supports_paint_setup(
1160 session, METAL_SUPPORTS_STICK_ALT, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1161 break;
1162 }
1163 if (direction == 0 || direction == 3)
1164 {
1165 paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0);
1166 }
1167 paint_util_set_segment_support_height(
1168 session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0);
1169 paint_util_set_general_support_height(session, height + 32, 0x20);
1170 break;
1171 case 1:
1172 switch (direction)
1173 {
1174 case 0:
1175 PaintAddImageAsParentRotated(
1176 session, direction, session->TrackColours[SCHEME_TRACK] | 28710, 0, 0, 32, 16, 3, height, 0, 16,
1177 height);
1178 break;
1179 case 1:
1180 PaintAddImageAsParentRotated(
1181 session, direction, session->TrackColours[SCHEME_TRACK] | 28714, 0, 0, 32, 16, 3, height, 0, 16,
1182 height);
1183 break;
1184 case 2:
1185 PaintAddImageAsParentRotated(
1186 session, direction, session->TrackColours[SCHEME_TRACK] | 28718, 0, 0, 34, 16, 3, height, 0, 0, height);
1187 break;
1188 case 3:
1189 PaintAddImageAsParentRotated(
1190 session, direction, session->TrackColours[SCHEME_TRACK] | 28722, 0, 0, 32, 16, 3, height, 0, 0, height);
1191 break;
1192 }
1193 paint_util_set_segment_support_height(
1194 session,
1195 paint_util_rotate_segments(
1196 SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction),
1197 0xFFFF, 0);
1198 paint_util_set_general_support_height(session, height + 32, 0x20);
1199 break;
1200 case 2:
1201 switch (direction)
1202 {
1203 case 0:
1204 PaintAddImageAsParentRotated(
1205 session, direction, session->TrackColours[SCHEME_TRACK] | 28711, 0, 0, 16, 16, 3, height, 0, 0, height);
1206 break;
1207 case 1:
1208 PaintAddImageAsParentRotated(
1209 session, direction, session->TrackColours[SCHEME_TRACK] | 28715, 0, 0, 16, 16, 3, height, 16, 0,
1210 height);
1211 break;
1212 case 2:
1213 PaintAddImageAsParentRotated(
1214 session, direction, session->TrackColours[SCHEME_TRACK] | 28719, 0, 0, 28, 28, 3, height, 4, 4, height);
1215 break;
1216 case 3:
1217 PaintAddImageAsParentRotated(
1218 session, direction, session->TrackColours[SCHEME_TRACK] | 28723, 0, 0, 16, 16, 3, height, 0, 16,
1219 height);
1220 break;
1221 }
1222 paint_util_set_segment_support_height(
1223 session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction),
1224 0xFFFF, 0);
1225 paint_util_set_general_support_height(session, height + 32, 0x20);
1226 break;
1227 case 3:
1228 paint_util_set_segment_support_height(
1229 session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0);
1230 paint_util_set_general_support_height(session, height + 32, 0x20);
1231 break;
1232 case 4:
1233 switch (direction)
1234 {
1235 case 0:
1236 PaintAddImageAsParentRotated(
1237 session, direction, session->TrackColours[SCHEME_TRACK] | 28712, 0, 0, 16, 16, 3, height, 16, 0,
1238 height);
1239 metal_a_supports_paint_setup(
1240 session, METAL_SUPPORTS_STICK, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1241 break;
1242 case 1:
1243 PaintAddImageAsParentRotated(
1244 session, direction, session->TrackColours[SCHEME_TRACK] | 28716, 0, 0, 16, 16, 3, height, 0, 0, height);
1245 metal_a_supports_paint_setup(
1246 session, METAL_SUPPORTS_STICK_ALT, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1247 break;
1248 case 2:
1249 PaintAddImageAsParentRotated(
1250 session, direction, session->TrackColours[SCHEME_TRACK] | 28720, 0, 0, 16, 18, 3, height, 0, 16,
1251 height);
1252 metal_a_supports_paint_setup(
1253 session, METAL_SUPPORTS_STICK, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1254 break;
1255 case 3:
1256 PaintAddImageAsParentRotated(
1257 session, direction, session->TrackColours[SCHEME_TRACK] | 28724, 0, 0, 16, 16, 3, height, 16, 16,
1258 height);
1259 metal_a_supports_paint_setup(
1260 session, METAL_SUPPORTS_STICK_ALT, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1261 break;
1262 }
1263 paint_util_set_segment_support_height(
1264 session,
1265 paint_util_rotate_segments(
1266 SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction),
1267 0xFFFF, 0);
1268 paint_util_set_general_support_height(session, height + 32, 0x20);
1269 break;
1270 }
1271 }
1272
1273 /** rct2: 0x008A5AF8 */
steeplechase_track_left_eighth_to_orthogonal(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)1274 static void steeplechase_track_left_eighth_to_orthogonal(
1275 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
1276 const TrackElement& trackElement)
1277 {
1278 trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence];
1279 steeplechase_track_right_eighth_to_diag(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
1280 }
1281
1282 /** rct2: 0x008A5B08 */
steeplechase_track_right_eighth_to_orthogonal(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)1283 static void steeplechase_track_right_eighth_to_orthogonal(
1284 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
1285 const TrackElement& trackElement)
1286 {
1287 trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence];
1288 steeplechase_track_left_eighth_to_diag(session, ride, trackSequence, (direction + 3) & 3, height, trackElement);
1289 }
1290
1291 /** rct2: 0x008A5AC8 */
steeplechase_track_diag_flat(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)1292 static void steeplechase_track_diag_flat(
1293 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
1294 const TrackElement& trackElement)
1295 {
1296 switch (trackSequence)
1297 {
1298 case 0:
1299 if (trackElement.HasChain())
1300 {
1301 switch (direction)
1302 {
1303 case 3:
1304 PaintAddImageAsParentRotated(
1305 session, direction, session->TrackColours[SCHEME_TRACK] | 28760, -16, -16, 32, 32, 3, height, -16,
1306 -16, height);
1307 break;
1308 }
1309 }
1310 else
1311 {
1312 switch (direction)
1313 {
1314 case 3:
1315 PaintAddImageAsParentRotated(
1316 session, direction, session->TrackColours[SCHEME_TRACK] | 28744, -16, -16, 32, 32, 3, height, -16,
1317 -16, height);
1318 break;
1319 }
1320 }
1321 paint_util_set_segment_support_height(
1322 session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0);
1323 paint_util_set_general_support_height(session, height + 32, 0x20);
1324 break;
1325 case 1:
1326 if (trackElement.HasChain())
1327 {
1328 switch (direction)
1329 {
1330 case 0:
1331 PaintAddImageAsParentRotated(
1332 session, direction, session->TrackColours[SCHEME_TRACK] | 28757, -16, -16, 32, 32, 3, height, -16,
1333 -16, height);
1334 break;
1335 }
1336 }
1337 else
1338 {
1339 switch (direction)
1340 {
1341 case 0:
1342 PaintAddImageAsParentRotated(
1343 session, direction, session->TrackColours[SCHEME_TRACK] | 28741, -16, -16, 32, 32, 3, height, -16,
1344 -16, height);
1345 break;
1346 }
1347 }
1348 paint_util_set_segment_support_height(
1349 session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0);
1350 paint_util_set_general_support_height(session, height + 32, 0x20);
1351 break;
1352 case 2:
1353 if (trackElement.HasChain())
1354 {
1355 switch (direction)
1356 {
1357 case 2:
1358 PaintAddImageAsParentRotated(
1359 session, direction, session->TrackColours[SCHEME_TRACK] | 28759, -16, -16, 32, 32, 3, height, -16,
1360 -16, height);
1361 break;
1362 }
1363 }
1364 else
1365 {
1366 switch (direction)
1367 {
1368 case 2:
1369 PaintAddImageAsParentRotated(
1370 session, direction, session->TrackColours[SCHEME_TRACK] | 28743, -16, -16, 32, 32, 3, height, -16,
1371 -16, height);
1372 break;
1373 }
1374 }
1375 paint_util_set_segment_support_height(
1376 session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0);
1377 paint_util_set_general_support_height(session, height + 32, 0x20);
1378 break;
1379 case 3:
1380 if (trackElement.HasChain())
1381 {
1382 switch (direction)
1383 {
1384 case 0:
1385 metal_a_supports_paint_setup(
1386 session, METAL_SUPPORTS_STICK, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1387 break;
1388 case 1:
1389 PaintAddImageAsParentRotated(
1390 session, direction, session->TrackColours[SCHEME_TRACK] | 28758, -16, -16, 32, 32, 3, height, -16,
1391 -16, height);
1392 metal_a_supports_paint_setup(
1393 session, METAL_SUPPORTS_STICK_ALT, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1394 break;
1395 case 2:
1396 metal_a_supports_paint_setup(
1397 session, METAL_SUPPORTS_STICK, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1398 break;
1399 case 3:
1400 metal_a_supports_paint_setup(
1401 session, METAL_SUPPORTS_STICK_ALT, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1402 break;
1403 }
1404 }
1405 else
1406 {
1407 switch (direction)
1408 {
1409 case 0:
1410 metal_a_supports_paint_setup(
1411 session, METAL_SUPPORTS_STICK, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1412 break;
1413 case 1:
1414 PaintAddImageAsParentRotated(
1415 session, direction, session->TrackColours[SCHEME_TRACK] | 28742, -16, -16, 32, 32, 3, height, -16,
1416 -16, height);
1417 metal_a_supports_paint_setup(
1418 session, METAL_SUPPORTS_STICK_ALT, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1419 break;
1420 case 2:
1421 metal_a_supports_paint_setup(
1422 session, METAL_SUPPORTS_STICK, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1423 break;
1424 case 3:
1425 metal_a_supports_paint_setup(
1426 session, METAL_SUPPORTS_STICK_ALT, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1427 break;
1428 }
1429 }
1430 paint_util_set_segment_support_height(
1431 session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0);
1432 paint_util_set_general_support_height(session, height + 32, 0x20);
1433 break;
1434 }
1435 }
1436
1437 /** rct2: 0x008A5B38 */
steeplechase_track_diag_25_deg_up(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)1438 static void steeplechase_track_diag_25_deg_up(
1439 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
1440 const TrackElement& trackElement)
1441 {
1442 switch (trackSequence)
1443 {
1444 case 0:
1445 if (trackElement.HasChain())
1446 {
1447 switch (direction)
1448 {
1449 case 3:
1450 PaintAddImageAsParentRotated(
1451 session, direction, session->TrackColours[SCHEME_TRACK] | 28772, -16, -16, 32, 32, 3, height, -16,
1452 -16, height);
1453 break;
1454 }
1455 }
1456 else
1457 {
1458 switch (direction)
1459 {
1460 case 3:
1461 PaintAddImageAsParentRotated(
1462 session, direction, session->TrackColours[SCHEME_TRACK] | 28756, -16, -16, 32, 32, 3, height, -16,
1463 -16, height);
1464 break;
1465 }
1466 }
1467 paint_util_set_segment_support_height(
1468 session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0);
1469 paint_util_set_general_support_height(session, height + 56, 0x20);
1470 break;
1471 case 1:
1472 if (trackElement.HasChain())
1473 {
1474 switch (direction)
1475 {
1476 case 0:
1477 PaintAddImageAsParentRotated(
1478 session, direction, session->TrackColours[SCHEME_TRACK] | 28769, -16, -16, 32, 32, 3, height, -16,
1479 -16, height);
1480 break;
1481 }
1482 }
1483 else
1484 {
1485 switch (direction)
1486 {
1487 case 0:
1488 PaintAddImageAsParentRotated(
1489 session, direction, session->TrackColours[SCHEME_TRACK] | 28753, -16, -16, 32, 32, 3, height, -16,
1490 -16, height);
1491 break;
1492 }
1493 }
1494 paint_util_set_segment_support_height(
1495 session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0);
1496 paint_util_set_general_support_height(session, height + 56, 0x20);
1497 break;
1498 case 2:
1499 if (trackElement.HasChain())
1500 {
1501 switch (direction)
1502 {
1503 case 2:
1504 PaintAddImageAsParentRotated(
1505 session, direction, session->TrackColours[SCHEME_TRACK] | 28771, -16, -16, 32, 32, 3, height, -16,
1506 -16, height);
1507 break;
1508 }
1509 }
1510 else
1511 {
1512 switch (direction)
1513 {
1514 case 2:
1515 PaintAddImageAsParentRotated(
1516 session, direction, session->TrackColours[SCHEME_TRACK] | 28755, -16, -16, 32, 32, 3, height, -16,
1517 -16, height);
1518 break;
1519 }
1520 }
1521 paint_util_set_segment_support_height(
1522 session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0);
1523 paint_util_set_general_support_height(session, height + 56, 0x20);
1524 break;
1525 case 3:
1526 if (trackElement.HasChain())
1527 {
1528 switch (direction)
1529 {
1530 case 0:
1531 metal_b_supports_paint_setup(
1532 session, METAL_SUPPORTS_STICK, 1, 6, height, session->TrackColours[SCHEME_SUPPORTS]);
1533 break;
1534 case 1:
1535 PaintAddImageAsParentRotated(
1536 session, direction, session->TrackColours[SCHEME_TRACK] | 28770, -16, -16, 32, 32, 3, height, -16,
1537 -16, height);
1538 metal_b_supports_paint_setup(
1539 session, METAL_SUPPORTS_STICK_ALT, 0, 6, height, session->TrackColours[SCHEME_SUPPORTS]);
1540 break;
1541 case 2:
1542 metal_b_supports_paint_setup(
1543 session, METAL_SUPPORTS_STICK, 2, 6, height, session->TrackColours[SCHEME_SUPPORTS]);
1544 break;
1545 case 3:
1546 metal_b_supports_paint_setup(
1547 session, METAL_SUPPORTS_STICK_ALT, 3, 6, height, session->TrackColours[SCHEME_SUPPORTS]);
1548 break;
1549 }
1550 }
1551 else
1552 {
1553 switch (direction)
1554 {
1555 case 0:
1556 metal_b_supports_paint_setup(
1557 session, METAL_SUPPORTS_STICK, 1, 6, height, session->TrackColours[SCHEME_SUPPORTS]);
1558 break;
1559 case 1:
1560 PaintAddImageAsParentRotated(
1561 session, direction, session->TrackColours[SCHEME_TRACK] | 28754, -16, -16, 32, 32, 3, height, -16,
1562 -16, height);
1563 metal_b_supports_paint_setup(
1564 session, METAL_SUPPORTS_STICK_ALT, 0, 6, height, session->TrackColours[SCHEME_SUPPORTS]);
1565 break;
1566 case 2:
1567 metal_b_supports_paint_setup(
1568 session, METAL_SUPPORTS_STICK, 2, 6, height, session->TrackColours[SCHEME_SUPPORTS]);
1569 break;
1570 case 3:
1571 metal_b_supports_paint_setup(
1572 session, METAL_SUPPORTS_STICK_ALT, 3, 6, height, session->TrackColours[SCHEME_SUPPORTS]);
1573 break;
1574 }
1575 }
1576 paint_util_set_segment_support_height(
1577 session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0);
1578 paint_util_set_general_support_height(session, height + 56, 0x20);
1579 break;
1580 }
1581 }
1582
1583 /** rct2: 0x008A5B18 */
steeplechase_track_diag_flat_to_25_deg_up(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)1584 static void steeplechase_track_diag_flat_to_25_deg_up(
1585 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
1586 const TrackElement& trackElement)
1587 {
1588 switch (trackSequence)
1589 {
1590 case 0:
1591 if (trackElement.HasChain())
1592 {
1593 switch (direction)
1594 {
1595 case 3:
1596 PaintAddImageAsParentRotated(
1597 session, direction, session->TrackColours[SCHEME_TRACK] | 28764, -16, -16, 32, 32, 3, height, -16,
1598 -16, height);
1599 break;
1600 }
1601 }
1602 else
1603 {
1604 switch (direction)
1605 {
1606 case 3:
1607 PaintAddImageAsParentRotated(
1608 session, direction, session->TrackColours[SCHEME_TRACK] | 28748, -16, -16, 32, 32, 3, height, -16,
1609 -16, height);
1610 break;
1611 }
1612 }
1613 paint_util_set_segment_support_height(
1614 session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0);
1615 paint_util_set_general_support_height(session, height + 48, 0x20);
1616 break;
1617 case 1:
1618 if (trackElement.HasChain())
1619 {
1620 switch (direction)
1621 {
1622 case 0:
1623 PaintAddImageAsParentRotated(
1624 session, direction, session->TrackColours[SCHEME_TRACK] | 28761, -16, -16, 32, 32, 3, height, -16,
1625 -16, height);
1626 break;
1627 }
1628 }
1629 else
1630 {
1631 switch (direction)
1632 {
1633 case 0:
1634 PaintAddImageAsParentRotated(
1635 session, direction, session->TrackColours[SCHEME_TRACK] | 28745, -16, -16, 32, 32, 3, height, -16,
1636 -16, height);
1637 break;
1638 }
1639 }
1640 paint_util_set_segment_support_height(
1641 session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0);
1642 paint_util_set_general_support_height(session, height + 48, 0x20);
1643 break;
1644 case 2:
1645 if (trackElement.HasChain())
1646 {
1647 switch (direction)
1648 {
1649 case 2:
1650 PaintAddImageAsParentRotated(
1651 session, direction, session->TrackColours[SCHEME_TRACK] | 28763, -16, -16, 32, 32, 3, height, -16,
1652 -16, height);
1653 break;
1654 }
1655 }
1656 else
1657 {
1658 switch (direction)
1659 {
1660 case 2:
1661 PaintAddImageAsParentRotated(
1662 session, direction, session->TrackColours[SCHEME_TRACK] | 28747, -16, -16, 32, 32, 3, height, -16,
1663 -16, height);
1664 break;
1665 }
1666 }
1667 paint_util_set_segment_support_height(
1668 session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0);
1669 paint_util_set_general_support_height(session, height + 48, 0x20);
1670 break;
1671 case 3:
1672 if (trackElement.HasChain())
1673 {
1674 switch (direction)
1675 {
1676 case 0:
1677 metal_b_supports_paint_setup(
1678 session, METAL_SUPPORTS_STICK, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1679 break;
1680 case 1:
1681 PaintAddImageAsParentRotated(
1682 session, direction, session->TrackColours[SCHEME_TRACK] | 28762, -16, -16, 32, 32, 3, height, -16,
1683 -16, height);
1684 metal_b_supports_paint_setup(
1685 session, METAL_SUPPORTS_STICK_ALT, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1686 break;
1687 case 2:
1688 metal_b_supports_paint_setup(
1689 session, METAL_SUPPORTS_STICK, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1690 break;
1691 case 3:
1692 metal_b_supports_paint_setup(
1693 session, METAL_SUPPORTS_STICK_ALT, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1694 break;
1695 }
1696 }
1697 else
1698 {
1699 switch (direction)
1700 {
1701 case 0:
1702 metal_b_supports_paint_setup(
1703 session, METAL_SUPPORTS_STICK, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1704 break;
1705 case 1:
1706 PaintAddImageAsParentRotated(
1707 session, direction, session->TrackColours[SCHEME_TRACK] | 28746, -16, -16, 32, 32, 3, height, -16,
1708 -16, height);
1709 metal_b_supports_paint_setup(
1710 session, METAL_SUPPORTS_STICK_ALT, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1711 break;
1712 case 2:
1713 metal_b_supports_paint_setup(
1714 session, METAL_SUPPORTS_STICK, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1715 break;
1716 case 3:
1717 metal_b_supports_paint_setup(
1718 session, METAL_SUPPORTS_STICK_ALT, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1719 break;
1720 }
1721 }
1722 paint_util_set_segment_support_height(
1723 session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0);
1724 paint_util_set_general_support_height(session, height + 48, 0x20);
1725 break;
1726 }
1727 }
1728
1729 /** rct2: 0x008A5B28 */
steeplechase_track_diag_25_deg_up_to_flat(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)1730 static void steeplechase_track_diag_25_deg_up_to_flat(
1731 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
1732 const TrackElement& trackElement)
1733 {
1734 switch (trackSequence)
1735 {
1736 case 0:
1737 if (trackElement.HasChain())
1738 {
1739 switch (direction)
1740 {
1741 case 3:
1742 PaintAddImageAsParentRotated(
1743 session, direction, session->TrackColours[SCHEME_TRACK] | 28768, -16, -16, 32, 32, 3, height, -16,
1744 -16, height);
1745 break;
1746 }
1747 }
1748 else
1749 {
1750 switch (direction)
1751 {
1752 case 3:
1753 PaintAddImageAsParentRotated(
1754 session, direction, session->TrackColours[SCHEME_TRACK] | 28752, -16, -16, 32, 32, 3, height, -16,
1755 -16, height);
1756 break;
1757 }
1758 }
1759 paint_util_set_segment_support_height(
1760 session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0);
1761 paint_util_set_general_support_height(session, height + 56, 0x20);
1762 break;
1763 case 1:
1764 if (trackElement.HasChain())
1765 {
1766 switch (direction)
1767 {
1768 case 0:
1769 PaintAddImageAsParentRotated(
1770 session, direction, session->TrackColours[SCHEME_TRACK] | 28765, -16, -16, 32, 32, 3, height, -16,
1771 -16, height);
1772 break;
1773 }
1774 }
1775 else
1776 {
1777 switch (direction)
1778 {
1779 case 0:
1780 PaintAddImageAsParentRotated(
1781 session, direction, session->TrackColours[SCHEME_TRACK] | 28749, -16, -16, 32, 32, 3, height, -16,
1782 -16, height);
1783 break;
1784 }
1785 }
1786 paint_util_set_segment_support_height(
1787 session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0);
1788 paint_util_set_general_support_height(session, height + 56, 0x20);
1789 break;
1790 case 2:
1791 if (trackElement.HasChain())
1792 {
1793 switch (direction)
1794 {
1795 case 2:
1796 PaintAddImageAsParentRotated(
1797 session, direction, session->TrackColours[SCHEME_TRACK] | 28767, -16, -16, 32, 32, 3, height, -16,
1798 -16, height);
1799 break;
1800 }
1801 }
1802 else
1803 {
1804 switch (direction)
1805 {
1806 case 2:
1807 PaintAddImageAsParentRotated(
1808 session, direction, session->TrackColours[SCHEME_TRACK] | 28751, -16, -16, 32, 32, 3, height, -16,
1809 -16, height);
1810 break;
1811 }
1812 }
1813 paint_util_set_segment_support_height(
1814 session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0);
1815 paint_util_set_general_support_height(session, height + 56, 0x20);
1816 break;
1817 case 3:
1818 if (trackElement.HasChain())
1819 {
1820 switch (direction)
1821 {
1822 case 0:
1823 metal_b_supports_paint_setup(
1824 session, METAL_SUPPORTS_STICK, 1, 4, height, session->TrackColours[SCHEME_SUPPORTS]);
1825 break;
1826 case 1:
1827 PaintAddImageAsParentRotated(
1828 session, direction, session->TrackColours[SCHEME_TRACK] | 28766, -16, -16, 32, 32, 3, height, -16,
1829 -16, height);
1830 metal_b_supports_paint_setup(
1831 session, METAL_SUPPORTS_STICK_ALT, 0, 4, height, session->TrackColours[SCHEME_SUPPORTS]);
1832 break;
1833 case 2:
1834 metal_b_supports_paint_setup(
1835 session, METAL_SUPPORTS_STICK, 2, 4, height, session->TrackColours[SCHEME_SUPPORTS]);
1836 break;
1837 case 3:
1838 metal_b_supports_paint_setup(
1839 session, METAL_SUPPORTS_STICK_ALT, 3, 4, height, session->TrackColours[SCHEME_SUPPORTS]);
1840 break;
1841 }
1842 }
1843 else
1844 {
1845 switch (direction)
1846 {
1847 case 0:
1848 metal_b_supports_paint_setup(
1849 session, METAL_SUPPORTS_STICK, 1, 4, height, session->TrackColours[SCHEME_SUPPORTS]);
1850 break;
1851 case 1:
1852 PaintAddImageAsParentRotated(
1853 session, direction, session->TrackColours[SCHEME_TRACK] | 28750, -16, -16, 32, 32, 3, height, -16,
1854 -16, height);
1855 metal_b_supports_paint_setup(
1856 session, METAL_SUPPORTS_STICK_ALT, 0, 4, height, session->TrackColours[SCHEME_SUPPORTS]);
1857 break;
1858 case 2:
1859 metal_b_supports_paint_setup(
1860 session, METAL_SUPPORTS_STICK, 2, 4, height, session->TrackColours[SCHEME_SUPPORTS]);
1861 break;
1862 case 3:
1863 metal_b_supports_paint_setup(
1864 session, METAL_SUPPORTS_STICK_ALT, 3, 4, height, session->TrackColours[SCHEME_SUPPORTS]);
1865 break;
1866 }
1867 }
1868 paint_util_set_segment_support_height(
1869 session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0);
1870 paint_util_set_general_support_height(session, height + 56, 0x20);
1871 break;
1872 }
1873 }
1874
1875 /** rct2: 0x008A5B68 */
steeplechase_track_diag_25_deg_down(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)1876 static void steeplechase_track_diag_25_deg_down(
1877 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
1878 const TrackElement& trackElement)
1879 {
1880 switch (trackSequence)
1881 {
1882 case 0:
1883 if (trackElement.HasChain())
1884 {
1885 switch (direction)
1886 {
1887 case 3:
1888 PaintAddImageAsParentRotated(
1889 session, direction, session->TrackColours[SCHEME_TRACK] | 28770, -16, -16, 32, 32, 3, height, -16,
1890 -16, height);
1891 break;
1892 }
1893 }
1894 else
1895 {
1896 switch (direction)
1897 {
1898 case 3:
1899 PaintAddImageAsParentRotated(
1900 session, direction, session->TrackColours[SCHEME_TRACK] | 28754, -16, -16, 32, 32, 3, height, -16,
1901 -16, height);
1902 break;
1903 }
1904 }
1905 paint_util_set_segment_support_height(
1906 session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0);
1907 paint_util_set_general_support_height(session, height + 56, 0x20);
1908 break;
1909 case 1:
1910 if (trackElement.HasChain())
1911 {
1912 switch (direction)
1913 {
1914 case 0:
1915 PaintAddImageAsParentRotated(
1916 session, direction, session->TrackColours[SCHEME_TRACK] | 28771, -16, -16, 32, 32, 3, height, -16,
1917 -16, height);
1918 break;
1919 }
1920 }
1921 else
1922 {
1923 switch (direction)
1924 {
1925 case 0:
1926 PaintAddImageAsParentRotated(
1927 session, direction, session->TrackColours[SCHEME_TRACK] | 28755, -16, -16, 32, 32, 3, height, -16,
1928 -16, height);
1929 break;
1930 }
1931 }
1932 paint_util_set_segment_support_height(
1933 session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0);
1934 paint_util_set_general_support_height(session, height + 56, 0x20);
1935 break;
1936 case 2:
1937 if (trackElement.HasChain())
1938 {
1939 switch (direction)
1940 {
1941 case 2:
1942 PaintAddImageAsParentRotated(
1943 session, direction, session->TrackColours[SCHEME_TRACK] | 28769, -16, -16, 32, 32, 3, height, -16,
1944 -16, height);
1945 break;
1946 }
1947 }
1948 else
1949 {
1950 switch (direction)
1951 {
1952 case 2:
1953 PaintAddImageAsParentRotated(
1954 session, direction, session->TrackColours[SCHEME_TRACK] | 28753, -16, -16, 32, 32, 3, height, -16,
1955 -16, height);
1956 break;
1957 }
1958 }
1959 paint_util_set_segment_support_height(
1960 session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0);
1961 paint_util_set_general_support_height(session, height + 56, 0x20);
1962 break;
1963 case 3:
1964 if (trackElement.HasChain())
1965 {
1966 switch (direction)
1967 {
1968 case 0:
1969 metal_b_supports_paint_setup(
1970 session, METAL_SUPPORTS_STICK, 1, 6, height, session->TrackColours[SCHEME_SUPPORTS]);
1971 break;
1972 case 1:
1973 PaintAddImageAsParentRotated(
1974 session, direction, session->TrackColours[SCHEME_TRACK] | 28772, -16, -16, 32, 32, 3, height, -16,
1975 -16, height);
1976 metal_b_supports_paint_setup(
1977 session, METAL_SUPPORTS_STICK_ALT, 0, 6, height, session->TrackColours[SCHEME_SUPPORTS]);
1978 break;
1979 case 2:
1980 metal_b_supports_paint_setup(
1981 session, METAL_SUPPORTS_STICK, 2, 6, height, session->TrackColours[SCHEME_SUPPORTS]);
1982 break;
1983 case 3:
1984 metal_b_supports_paint_setup(
1985 session, METAL_SUPPORTS_STICK_ALT, 3, 6, height, session->TrackColours[SCHEME_SUPPORTS]);
1986 break;
1987 }
1988 }
1989 else
1990 {
1991 switch (direction)
1992 {
1993 case 0:
1994 metal_b_supports_paint_setup(
1995 session, METAL_SUPPORTS_STICK, 1, 6, height, session->TrackColours[SCHEME_SUPPORTS]);
1996 break;
1997 case 1:
1998 PaintAddImageAsParentRotated(
1999 session, direction, session->TrackColours[SCHEME_TRACK] | 28756, -16, -16, 32, 32, 3, height, -16,
2000 -16, height);
2001 metal_b_supports_paint_setup(
2002 session, METAL_SUPPORTS_STICK_ALT, 0, 6, height, session->TrackColours[SCHEME_SUPPORTS]);
2003 break;
2004 case 2:
2005 metal_b_supports_paint_setup(
2006 session, METAL_SUPPORTS_STICK, 2, 6, height, session->TrackColours[SCHEME_SUPPORTS]);
2007 break;
2008 case 3:
2009 metal_b_supports_paint_setup(
2010 session, METAL_SUPPORTS_STICK_ALT, 3, 6, height, session->TrackColours[SCHEME_SUPPORTS]);
2011 break;
2012 }
2013 }
2014 paint_util_set_segment_support_height(
2015 session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0);
2016 paint_util_set_general_support_height(session, height + 56, 0x20);
2017 break;
2018 }
2019 }
2020
2021 /** rct2: 0x008A5B48 */
steeplechase_track_diag_flat_to_25_deg_down(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)2022 static void steeplechase_track_diag_flat_to_25_deg_down(
2023 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
2024 const TrackElement& trackElement)
2025 {
2026 switch (trackSequence)
2027 {
2028 case 0:
2029 if (trackElement.HasChain())
2030 {
2031 switch (direction)
2032 {
2033 case 3:
2034 PaintAddImageAsParentRotated(
2035 session, direction, session->TrackColours[SCHEME_TRACK] | 28766, -16, -16, 32, 32, 3, height, -16,
2036 -16, height);
2037 break;
2038 }
2039 }
2040 else
2041 {
2042 switch (direction)
2043 {
2044 case 3:
2045 PaintAddImageAsParentRotated(
2046 session, direction, session->TrackColours[SCHEME_TRACK] | 28750, -16, -16, 32, 32, 3, height, -16,
2047 -16, height);
2048 break;
2049 }
2050 }
2051 paint_util_set_segment_support_height(
2052 session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0);
2053 break;
2054 case 1:
2055 if (trackElement.HasChain())
2056 {
2057 switch (direction)
2058 {
2059 case 0:
2060 PaintAddImageAsParentRotated(
2061 session, direction, session->TrackColours[SCHEME_TRACK] | 28767, -16, -16, 32, 32, 3, height, -16,
2062 -16, height);
2063 break;
2064 }
2065 }
2066 else
2067 {
2068 switch (direction)
2069 {
2070 case 0:
2071 PaintAddImageAsParentRotated(
2072 session, direction, session->TrackColours[SCHEME_TRACK] | 28751, -16, -16, 32, 32, 3, height, -16,
2073 -16, height);
2074 break;
2075 }
2076 }
2077 paint_util_set_segment_support_height(
2078 session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0);
2079 break;
2080 case 2:
2081 if (trackElement.HasChain())
2082 {
2083 switch (direction)
2084 {
2085 case 2:
2086 PaintAddImageAsParentRotated(
2087 session, direction, session->TrackColours[SCHEME_TRACK] | 28765, -16, -16, 32, 32, 3, height, -16,
2088 -16, height);
2089 break;
2090 }
2091 }
2092 else
2093 {
2094 switch (direction)
2095 {
2096 case 2:
2097 PaintAddImageAsParentRotated(
2098 session, direction, session->TrackColours[SCHEME_TRACK] | 28749, -16, -16, 32, 32, 3, height, -16,
2099 -16, height);
2100 break;
2101 }
2102 }
2103 paint_util_set_segment_support_height(
2104 session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0);
2105 break;
2106 case 3:
2107 if (trackElement.HasChain())
2108 {
2109 switch (direction)
2110 {
2111 case 0:
2112 metal_b_supports_paint_setup(
2113 session, METAL_SUPPORTS_STICK, 1, 4, height, session->TrackColours[SCHEME_SUPPORTS]);
2114 break;
2115 case 1:
2116 PaintAddImageAsParentRotated(
2117 session, direction, session->TrackColours[SCHEME_TRACK] | 28768, -16, -16, 32, 32, 3, height, -16,
2118 -16, height);
2119 metal_b_supports_paint_setup(
2120 session, METAL_SUPPORTS_STICK_ALT, 0, 4, height, session->TrackColours[SCHEME_SUPPORTS]);
2121 break;
2122 case 2:
2123 metal_b_supports_paint_setup(
2124 session, METAL_SUPPORTS_STICK, 2, 4, height, session->TrackColours[SCHEME_SUPPORTS]);
2125 break;
2126 case 3:
2127 metal_b_supports_paint_setup(
2128 session, METAL_SUPPORTS_STICK_ALT, 3, 4, height, session->TrackColours[SCHEME_SUPPORTS]);
2129 break;
2130 }
2131 }
2132 else
2133 {
2134 switch (direction)
2135 {
2136 case 0:
2137 metal_b_supports_paint_setup(
2138 session, METAL_SUPPORTS_STICK, 1, 4, height, session->TrackColours[SCHEME_SUPPORTS]);
2139 break;
2140 case 1:
2141 PaintAddImageAsParentRotated(
2142 session, direction, session->TrackColours[SCHEME_TRACK] | 28752, -16, -16, 32, 32, 3, height, -16,
2143 -16, height);
2144 metal_b_supports_paint_setup(
2145 session, METAL_SUPPORTS_STICK_ALT, 0, 4, height, session->TrackColours[SCHEME_SUPPORTS]);
2146 break;
2147 case 2:
2148 metal_b_supports_paint_setup(
2149 session, METAL_SUPPORTS_STICK, 2, 4, height, session->TrackColours[SCHEME_SUPPORTS]);
2150 break;
2151 case 3:
2152 metal_b_supports_paint_setup(
2153 session, METAL_SUPPORTS_STICK_ALT, 3, 4, height, session->TrackColours[SCHEME_SUPPORTS]);
2154 break;
2155 }
2156 }
2157 paint_util_set_segment_support_height(
2158 session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0);
2159 break;
2160 }
2161
2162 paint_util_set_general_support_height(session, height + 56, 0x20);
2163 }
2164
2165 /** rct2: 0x008A5B58 */
steeplechase_track_diag_25_deg_down_to_flat(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)2166 static void steeplechase_track_diag_25_deg_down_to_flat(
2167 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
2168 const TrackElement& trackElement)
2169 {
2170 switch (trackSequence)
2171 {
2172 case 0:
2173 if (trackElement.HasChain())
2174 {
2175 switch (direction)
2176 {
2177 case 3:
2178 PaintAddImageAsParentRotated(
2179 session, direction, session->TrackColours[SCHEME_TRACK] | 28762, -16, -16, 32, 32, 3, height, -16,
2180 -16, height);
2181 break;
2182 }
2183 }
2184 else
2185 {
2186 switch (direction)
2187 {
2188 case 3:
2189 PaintAddImageAsParentRotated(
2190 session, direction, session->TrackColours[SCHEME_TRACK] | 28746, -16, -16, 32, 32, 3, height, -16,
2191 -16, height);
2192 break;
2193 }
2194 }
2195 paint_util_set_segment_support_height(
2196 session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0);
2197 paint_util_set_general_support_height(session, height + 48, 0x20);
2198 break;
2199 case 1:
2200 if (trackElement.HasChain())
2201 {
2202 switch (direction)
2203 {
2204 case 0:
2205 PaintAddImageAsParentRotated(
2206 session, direction, session->TrackColours[SCHEME_TRACK] | 28763, -16, -16, 32, 32, 3, height, -16,
2207 -16, height);
2208 break;
2209 }
2210 }
2211 else
2212 {
2213 switch (direction)
2214 {
2215 case 0:
2216 PaintAddImageAsParentRotated(
2217 session, direction, session->TrackColours[SCHEME_TRACK] | 28747, -16, -16, 32, 32, 3, height, -16,
2218 -16, height);
2219 break;
2220 }
2221 }
2222 paint_util_set_segment_support_height(
2223 session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC, direction), 0xFFFF, 0);
2224 paint_util_set_general_support_height(session, height + 48, 0x20);
2225 break;
2226 case 2:
2227 if (trackElement.HasChain())
2228 {
2229 switch (direction)
2230 {
2231 case 2:
2232 PaintAddImageAsParentRotated(
2233 session, direction, session->TrackColours[SCHEME_TRACK] | 28761, -16, -16, 32, 32, 3, height, -16,
2234 -16, height);
2235 break;
2236 }
2237 }
2238 else
2239 {
2240 switch (direction)
2241 {
2242 case 2:
2243 PaintAddImageAsParentRotated(
2244 session, direction, session->TrackColours[SCHEME_TRACK] | 28745, -16, -16, 32, 32, 3, height, -16,
2245 -16, height);
2246 break;
2247 }
2248 }
2249 paint_util_set_segment_support_height(
2250 session, paint_util_rotate_segments(SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0);
2251 paint_util_set_general_support_height(session, height + 48, 0x20);
2252 break;
2253 case 3:
2254 if (trackElement.HasChain())
2255 {
2256 switch (direction)
2257 {
2258 case 0:
2259 metal_b_supports_paint_setup(
2260 session, METAL_SUPPORTS_STICK, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
2261 break;
2262 case 1:
2263 PaintAddImageAsParentRotated(
2264 session, direction, session->TrackColours[SCHEME_TRACK] | 28764, -16, -16, 32, 32, 3, height, -16,
2265 -16, height);
2266 metal_b_supports_paint_setup(
2267 session, METAL_SUPPORTS_STICK_ALT, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
2268 break;
2269 case 2:
2270 metal_b_supports_paint_setup(
2271 session, METAL_SUPPORTS_STICK, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
2272 break;
2273 case 3:
2274 metal_b_supports_paint_setup(
2275 session, METAL_SUPPORTS_STICK_ALT, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
2276 break;
2277 }
2278 }
2279 else
2280 {
2281 switch (direction)
2282 {
2283 case 0:
2284 metal_b_supports_paint_setup(
2285 session, METAL_SUPPORTS_STICK, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
2286 break;
2287 case 1:
2288 PaintAddImageAsParentRotated(
2289 session, direction, session->TrackColours[SCHEME_TRACK] | 28748, -16, -16, 32, 32, 3, height, -16,
2290 -16, height);
2291 metal_b_supports_paint_setup(
2292 session, METAL_SUPPORTS_STICK_ALT, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
2293 break;
2294 case 2:
2295 metal_b_supports_paint_setup(
2296 session, METAL_SUPPORTS_STICK, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
2297 break;
2298 case 3:
2299 metal_b_supports_paint_setup(
2300 session, METAL_SUPPORTS_STICK_ALT, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
2301 break;
2302 }
2303 }
2304 paint_util_set_segment_support_height(
2305 session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0);
2306 paint_util_set_general_support_height(session, height + 48, 0x20);
2307 break;
2308 }
2309 }
2310
2311 /** rct2: 0x008A5AB8 */
steeplechase_track_block_brakes(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)2312 static void steeplechase_track_block_brakes(
2313 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
2314 const TrackElement& trackElement)
2315 {
2316 switch (direction)
2317 {
2318 case 0:
2319 case 2:
2320 PaintAddImageAsParentRotated(
2321 session, direction, session->TrackColours[SCHEME_TRACK] | 28635, 0, 6, 32, 20, 3, height);
2322 metal_a_supports_paint_setup(session, METAL_SUPPORTS_STICK, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
2323 break;
2324 case 1:
2325 case 3:
2326 PaintAddImageAsParentRotated(
2327 session, direction, session->TrackColours[SCHEME_TRACK] | 28636, 0, 6, 32, 20, 3, height);
2328 metal_a_supports_paint_setup(
2329 session, METAL_SUPPORTS_STICK_ALT, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
2330 break;
2331 }
2332 paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0);
2333 paint_util_set_segment_support_height(
2334 session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0);
2335 paint_util_set_general_support_height(session, height + 32, 0x20);
2336 }
2337
get_track_paint_function_steeplechase(int32_t trackType)2338 TRACK_PAINT_FUNCTION get_track_paint_function_steeplechase(int32_t trackType)
2339 {
2340 switch (trackType)
2341 {
2342 case TrackElemType::Flat:
2343 return steeplechase_track_flat;
2344 case TrackElemType::EndStation:
2345 case TrackElemType::BeginStation:
2346 case TrackElemType::MiddleStation:
2347 return steeplechase_track_station;
2348 case TrackElemType::Up25:
2349 return steeplechase_track_25_deg_up;
2350 case TrackElemType::FlatToUp25:
2351 return steeplechase_track_flat_to_25_deg_up;
2352 case TrackElemType::Up25ToFlat:
2353 return steeplechase_track_25_deg_up_to_flat;
2354 case TrackElemType::Down25:
2355 return steeplechase_track_25_deg_down;
2356 case TrackElemType::FlatToDown25:
2357 return steeplechase_track_flat_to_25_deg_down;
2358 case TrackElemType::Down25ToFlat:
2359 return steeplechase_track_25_deg_down_to_flat;
2360 case TrackElemType::LeftQuarterTurn5Tiles:
2361 return steeplechase_track_left_quarter_turn_5;
2362 case TrackElemType::RightQuarterTurn5Tiles:
2363 return steeplechase_track_right_quarter_turn_5;
2364 case TrackElemType::SBendLeft:
2365 return steeplechase_track_s_bend_left;
2366 case TrackElemType::SBendRight:
2367 return steeplechase_track_s_bend_right;
2368 case TrackElemType::LeftQuarterTurn3Tiles:
2369 return steeplechase_track_left_quarter_turn_3;
2370 case TrackElemType::RightQuarterTurn3Tiles:
2371 return steeplechase_track_right_quarter_turn_3;
2372 case TrackElemType::Brakes:
2373 return steeplechase_track_brakes;
2374 case TrackElemType::LeftEighthToDiag:
2375 return steeplechase_track_left_eighth_to_diag;
2376 case TrackElemType::RightEighthToDiag:
2377 return steeplechase_track_right_eighth_to_diag;
2378 case TrackElemType::LeftEighthToOrthogonal:
2379 return steeplechase_track_left_eighth_to_orthogonal;
2380 case TrackElemType::RightEighthToOrthogonal:
2381 return steeplechase_track_right_eighth_to_orthogonal;
2382 case TrackElemType::DiagFlat:
2383 return steeplechase_track_diag_flat;
2384 case TrackElemType::DiagUp25:
2385 return steeplechase_track_diag_25_deg_up;
2386 case TrackElemType::DiagFlatToUp25:
2387 return steeplechase_track_diag_flat_to_25_deg_up;
2388 case TrackElemType::DiagUp25ToFlat:
2389 return steeplechase_track_diag_25_deg_up_to_flat;
2390 case TrackElemType::DiagDown25:
2391 return steeplechase_track_diag_25_deg_down;
2392 case TrackElemType::DiagFlatToDown25:
2393 return steeplechase_track_diag_flat_to_25_deg_down;
2394 case TrackElemType::DiagDown25ToFlat:
2395 return steeplechase_track_diag_25_deg_down_to_flat;
2396 case TrackElemType::BlockBrakes:
2397 return steeplechase_track_block_brakes;
2398 }
2399 return nullptr;
2400 }
2401