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/Entity.h"
17 #include "../../world/Map.h"
18 #include "../RideData.h"
19 #include "../TrackData.h"
20 #include "../TrackPaint.h"
21 #include "../Vehicle.h"
22 #include "../VehiclePaint.h"
23
24 #ifndef NO_VEHICLES
25 /**
26 *
27 * rct2: 0x006D4453
28 */
vehicle_visual_reverser(paint_session * session,int32_t x,int32_t imageDirection,int32_t y,int32_t z,const Vehicle * vehicle,const rct_ride_entry_vehicle * vehicleEntry)29 void vehicle_visual_reverser(
30 paint_session* session, int32_t x, int32_t imageDirection, int32_t y, int32_t z, const Vehicle* vehicle,
31 const rct_ride_entry_vehicle* vehicleEntry)
32 {
33 Vehicle* v1 = GetEntity<Vehicle>(vehicle->prev_vehicle_on_ride);
34 Vehicle* v2 = GetEntity<Vehicle>(vehicle->next_vehicle_on_ride);
35 if (v1 == nullptr || v2 == nullptr)
36 {
37 return;
38 }
39 x = (v1->x + v2->x) / 2;
40 y = (v1->y + v2->y) / 2;
41 z = (v1->z + v2->z) / 2;
42 session->SpritePosition.x = x;
43 session->SpritePosition.y = y;
44 vehicle_visual_default(session, imageDirection, z, vehicle, vehicleEntry);
45 }
46 #endif
47
48 /** rct2: 0x0086E65C */
reverser_rc_track_flat(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)49 static void reverser_rc_track_flat(
50 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
51 const TrackElement& trackElement)
52 {
53 if (trackElement.HasChain())
54 {
55 switch (direction)
56 {
57 case 0:
58 case 2:
59 PaintAddImageAsParentRotated(
60 session, direction, session->TrackColours[SCHEME_TRACK] | 21520, 0, 0, 32, 27, 2, height, 0, 2, height);
61 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
62 break;
63 case 1:
64 case 3:
65 PaintAddImageAsParentRotated(
66 session, direction, session->TrackColours[SCHEME_TRACK] | 21521, 0, 0, 32, 27, 2, height, 0, 2, height);
67 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
68 break;
69 }
70 }
71 else
72 {
73 switch (direction)
74 {
75 case 0:
76 case 2:
77 PaintAddImageAsParentRotated(
78 session, direction, session->TrackColours[SCHEME_TRACK] | 21504, 0, 0, 32, 27, 2, height, 0, 2, height);
79 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
80 break;
81 case 1:
82 case 3:
83 PaintAddImageAsParentRotated(
84 session, direction, session->TrackColours[SCHEME_TRACK] | 21505, 0, 0, 32, 27, 2, height, 0, 2, height);
85 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
86 break;
87 }
88 }
89 paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT);
90 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
91 paint_util_set_general_support_height(session, height + 32, 0x20);
92 }
93
reverser_rc_track_station(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)94 static void reverser_rc_track_station(
95 paint_session* session, const Ride* ride, [[maybe_unused]] uint8_t trackSequence, uint8_t direction, int32_t height,
96 const TrackElement& trackElement)
97 {
98 static constexpr const uint32_t imageIds[4][3] = {
99 { 21506, SPR_STATION_BASE_A_SW_NE },
100 { 21507, SPR_STATION_BASE_A_NW_SE },
101 { 21506, SPR_STATION_BASE_A_SW_NE },
102 { 21507, SPR_STATION_BASE_A_NW_SE },
103 };
104
105 PaintAddImageAsParentRotated(
106 session, direction, imageIds[direction][1] | session->TrackColours[SCHEME_MISC], 0, 0, 32, 27, 2, height, 0, 2, height);
107 PaintAddImageAsChildRotated(
108 session, direction, imageIds[direction][0] | session->TrackColours[SCHEME_TRACK], 0, 0, 32, 27, 2, height, 0, 2,
109 height);
110 wooden_a_supports_paint_setup(session, direction & 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
111 track_paint_util_draw_station_2(session, ride, direction, height, trackElement, 9, 11);
112 paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT);
113 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
114 paint_util_set_general_support_height(session, height + 32, 0x20);
115 }
116
117 /** rct2: 0x0086E66C */
reverser_rc_track_25_deg_up(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)118 static void reverser_rc_track_25_deg_up(
119 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
120 const TrackElement& trackElement)
121 {
122 if (trackElement.HasChain())
123 {
124 switch (direction)
125 {
126 case 0:
127 PaintAddImageAsParentRotated(
128 session, direction, session->TrackColours[SCHEME_TRACK] | 21530, 0, 0, 32, 27, 2, height, 0, 2, height);
129 wooden_a_supports_paint_setup(session, 0, 9, height, session->TrackColours[SCHEME_SUPPORTS]);
130 break;
131 case 1:
132 PaintAddImageAsParentRotated(
133 session, direction, session->TrackColours[SCHEME_TRACK] | 21531, 0, 0, 32, 27, 2, height, 0, 2, height);
134 wooden_a_supports_paint_setup(session, 1, 10, height, session->TrackColours[SCHEME_SUPPORTS]);
135 break;
136 case 2:
137 PaintAddImageAsParentRotated(
138 session, direction, session->TrackColours[SCHEME_TRACK] | 21532, 0, 0, 32, 27, 2, height, 0, 2, height);
139 wooden_a_supports_paint_setup(session, 0, 11, height, session->TrackColours[SCHEME_SUPPORTS]);
140 break;
141 case 3:
142 PaintAddImageAsParentRotated(
143 session, direction, session->TrackColours[SCHEME_TRACK] | 21533, 0, 0, 32, 27, 2, height, 0, 2, height);
144 wooden_a_supports_paint_setup(session, 1, 12, height, session->TrackColours[SCHEME_SUPPORTS]);
145 break;
146 }
147 }
148 else
149 {
150 switch (direction)
151 {
152 case 0:
153 PaintAddImageAsParentRotated(
154 session, direction, session->TrackColours[SCHEME_TRACK] | 21516, 0, 0, 32, 27, 2, height, 0, 2, height);
155 wooden_a_supports_paint_setup(session, 0, 9, height, session->TrackColours[SCHEME_SUPPORTS]);
156 break;
157 case 1:
158 PaintAddImageAsParentRotated(
159 session, direction, session->TrackColours[SCHEME_TRACK] | 21517, 0, 0, 32, 27, 2, height, 0, 2, height);
160 wooden_a_supports_paint_setup(session, 1, 10, height, session->TrackColours[SCHEME_SUPPORTS]);
161 break;
162 case 2:
163 PaintAddImageAsParentRotated(
164 session, direction, session->TrackColours[SCHEME_TRACK] | 21518, 0, 0, 32, 27, 2, height, 0, 2, height);
165 wooden_a_supports_paint_setup(session, 0, 11, height, session->TrackColours[SCHEME_SUPPORTS]);
166 break;
167 case 3:
168 PaintAddImageAsParentRotated(
169 session, direction, session->TrackColours[SCHEME_TRACK] | 21519, 0, 0, 32, 27, 2, height, 0, 2, height);
170 wooden_a_supports_paint_setup(session, 1, 12, height, session->TrackColours[SCHEME_SUPPORTS]);
171 break;
172 }
173 }
174 if (direction == 0 || direction == 3)
175 {
176 paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_7);
177 }
178 else
179 {
180 paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_SQUARE_8);
181 }
182 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
183 paint_util_set_general_support_height(session, height + 56, 0x20);
184 }
185
186 /** rct2: 0x0086E67C */
reverser_rc_track_flat_to_25_deg_up(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)187 static void reverser_rc_track_flat_to_25_deg_up(
188 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
189 const TrackElement& trackElement)
190 {
191 if (trackElement.HasChain())
192 {
193 switch (direction)
194 {
195 case 0:
196 PaintAddImageAsParentRotated(
197 session, direction, session->TrackColours[SCHEME_TRACK] | 21522, 0, 0, 32, 27, 2, height, 0, 2, height);
198 wooden_a_supports_paint_setup(session, 0, 1, height, session->TrackColours[SCHEME_SUPPORTS]);
199 break;
200 case 1:
201 PaintAddImageAsParentRotated(
202 session, direction, session->TrackColours[SCHEME_TRACK] | 21523, 0, 0, 32, 27, 2, height, 0, 2, height);
203 wooden_a_supports_paint_setup(session, 1, 2, height, session->TrackColours[SCHEME_SUPPORTS]);
204 break;
205 case 2:
206 PaintAddImageAsParentRotated(
207 session, direction, session->TrackColours[SCHEME_TRACK] | 21524, 0, 0, 32, 27, 2, height, 0, 2, height);
208 wooden_a_supports_paint_setup(session, 0, 3, height, session->TrackColours[SCHEME_SUPPORTS]);
209 break;
210 case 3:
211 PaintAddImageAsParentRotated(
212 session, direction, session->TrackColours[SCHEME_TRACK] | 21525, 0, 0, 32, 27, 2, height, 0, 2, height);
213 wooden_a_supports_paint_setup(session, 1, 4, height, session->TrackColours[SCHEME_SUPPORTS]);
214 break;
215 }
216 }
217 else
218 {
219 switch (direction)
220 {
221 case 0:
222 PaintAddImageAsParentRotated(
223 session, direction, session->TrackColours[SCHEME_TRACK] | 21508, 0, 0, 32, 27, 2, height, 0, 2, height);
224 wooden_a_supports_paint_setup(session, 0, 1, height, session->TrackColours[SCHEME_SUPPORTS]);
225 break;
226 case 1:
227 PaintAddImageAsParentRotated(
228 session, direction, session->TrackColours[SCHEME_TRACK] | 21509, 0, 0, 32, 27, 2, height, 0, 2, height);
229 wooden_a_supports_paint_setup(session, 1, 2, height, session->TrackColours[SCHEME_SUPPORTS]);
230 break;
231 case 2:
232 PaintAddImageAsParentRotated(
233 session, direction, session->TrackColours[SCHEME_TRACK] | 21510, 0, 0, 32, 27, 2, height, 0, 2, height);
234 wooden_a_supports_paint_setup(session, 0, 3, height, session->TrackColours[SCHEME_SUPPORTS]);
235 break;
236 case 3:
237 PaintAddImageAsParentRotated(
238 session, direction, session->TrackColours[SCHEME_TRACK] | 21511, 0, 0, 32, 27, 2, height, 0, 2, height);
239 wooden_a_supports_paint_setup(session, 1, 4, height, session->TrackColours[SCHEME_SUPPORTS]);
240 break;
241 }
242 }
243 if (direction == 0 || direction == 3)
244 {
245 paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT);
246 }
247 else
248 {
249 paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_8);
250 }
251 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
252 paint_util_set_general_support_height(session, height + 48, 0x20);
253 }
254
255 /** rct2: 0x0086E68C */
reverser_rc_track_25_deg_up_to_flat(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)256 static void reverser_rc_track_25_deg_up_to_flat(
257 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
258 const TrackElement& trackElement)
259 {
260 if (trackElement.HasChain())
261 {
262 switch (direction)
263 {
264 case 0:
265 PaintAddImageAsParentRotated(
266 session, direction, session->TrackColours[SCHEME_TRACK] | 21526, 0, 0, 32, 27, 2, height, 0, 2, height);
267 wooden_a_supports_paint_setup(session, 0, 5, height, session->TrackColours[SCHEME_SUPPORTS]);
268 break;
269 case 1:
270 PaintAddImageAsParentRotated(
271 session, direction, session->TrackColours[SCHEME_TRACK] | 21527, 0, 0, 32, 27, 2, height, 0, 2, height);
272 wooden_a_supports_paint_setup(session, 1, 6, height, session->TrackColours[SCHEME_SUPPORTS]);
273 break;
274 case 2:
275 PaintAddImageAsParentRotated(
276 session, direction, session->TrackColours[SCHEME_TRACK] | 21528, 0, 0, 32, 27, 2, height, 0, 2, height);
277 wooden_a_supports_paint_setup(session, 0, 7, height, session->TrackColours[SCHEME_SUPPORTS]);
278 break;
279 case 3:
280 PaintAddImageAsParentRotated(
281 session, direction, session->TrackColours[SCHEME_TRACK] | 21529, 0, 0, 32, 27, 2, height, 0, 2, height);
282 wooden_a_supports_paint_setup(session, 1, 8, height, session->TrackColours[SCHEME_SUPPORTS]);
283 break;
284 }
285 }
286 else
287 {
288 switch (direction)
289 {
290 case 0:
291 PaintAddImageAsParentRotated(
292 session, direction, session->TrackColours[SCHEME_TRACK] | 21512, 0, 0, 32, 27, 2, height, 0, 2, height);
293 wooden_a_supports_paint_setup(session, 0, 5, height, session->TrackColours[SCHEME_SUPPORTS]);
294 break;
295 case 1:
296 PaintAddImageAsParentRotated(
297 session, direction, session->TrackColours[SCHEME_TRACK] | 21513, 0, 0, 32, 27, 2, height, 0, 2, height);
298 wooden_a_supports_paint_setup(session, 1, 6, height, session->TrackColours[SCHEME_SUPPORTS]);
299 break;
300 case 2:
301 PaintAddImageAsParentRotated(
302 session, direction, session->TrackColours[SCHEME_TRACK] | 21514, 0, 0, 32, 27, 2, height, 0, 2, height);
303 wooden_a_supports_paint_setup(session, 0, 7, height, session->TrackColours[SCHEME_SUPPORTS]);
304 break;
305 case 3:
306 PaintAddImageAsParentRotated(
307 session, direction, session->TrackColours[SCHEME_TRACK] | 21515, 0, 0, 32, 27, 2, height, 0, 2, height);
308 wooden_a_supports_paint_setup(session, 1, 8, height, session->TrackColours[SCHEME_SUPPORTS]);
309 break;
310 }
311 }
312 if (direction == 0 || direction == 3)
313 {
314 paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_SQUARE_FLAT);
315 }
316 else
317 {
318 paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_14);
319 }
320 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
321 paint_util_set_general_support_height(session, height + 40, 0x20);
322 }
323
324 /** rct2: 0x0086E69C */
reverser_rc_track_25_deg_down(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)325 static void reverser_rc_track_25_deg_down(
326 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
327 const TrackElement& trackElement)
328 {
329 reverser_rc_track_25_deg_up(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
330 }
331
332 /** rct2: 0x0086E6AC */
reverser_rc_track_flat_to_25_deg_down(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)333 static void reverser_rc_track_flat_to_25_deg_down(
334 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
335 const TrackElement& trackElement)
336 {
337 reverser_rc_track_25_deg_up_to_flat(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
338 }
339
340 /** rct2: 0x0086E6BC */
reverser_rc_track_25_deg_down_to_flat(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)341 static void reverser_rc_track_25_deg_down_to_flat(
342 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
343 const TrackElement& trackElement)
344 {
345 reverser_rc_track_flat_to_25_deg_up(session, ride, trackSequence, (direction + 2) & 3, height, trackElement);
346 }
347
348 /** rct2: 0x0086E6CC */
reverser_rc_track_left_quarter_turn_5(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)349 static void reverser_rc_track_left_quarter_turn_5(
350 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
351 const TrackElement& trackElement)
352 {
353 switch (trackSequence)
354 {
355 case 0:
356 switch (direction)
357 {
358 case 0:
359 PaintAddImageAsParentRotated(
360 session, direction, session->TrackColours[SCHEME_TRACK] | 21543, 0, 2, 32, 27, 2, height);
361 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
362 break;
363 case 1:
364 PaintAddImageAsParentRotated(
365 session, direction, session->TrackColours[SCHEME_TRACK] | 21548, 0, 2, 32, 27, 2, height);
366 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
367 break;
368 case 2:
369 PaintAddImageAsParentRotated(
370 session, direction, session->TrackColours[SCHEME_TRACK] | 21553, 0, 2, 32, 32, 2, height);
371 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
372 break;
373 case 3:
374 PaintAddImageAsParentRotated(
375 session, direction, session->TrackColours[SCHEME_TRACK] | 21538, 0, 2, 32, 32, 2, height);
376 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
377 break;
378 }
379 if (direction == 0 || direction == 3)
380 {
381 paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT);
382 }
383 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
384 paint_util_set_general_support_height(session, height + 32, 0x20);
385 break;
386 case 1:
387 paint_util_set_segment_support_height(
388 session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0);
389 paint_util_set_general_support_height(session, height + 32, 0x20);
390 break;
391 case 2:
392 switch (direction)
393 {
394 case 0:
395 PaintAddImageAsParentRotated(
396 session, direction, session->TrackColours[SCHEME_TRACK] | 21542, 0, 0, 32, 16, 2, height);
397 wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
398 break;
399 case 1:
400 PaintAddImageAsParentRotated(
401 session, direction, session->TrackColours[SCHEME_TRACK] | 21547, 0, 0, 32, 16, 2, height);
402 wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
403 break;
404 case 2:
405 PaintAddImageAsParentRotated(
406 session, direction, session->TrackColours[SCHEME_TRACK] | 21552, 0, 16, 32, 16, 2, height);
407 wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
408 break;
409 case 3:
410 PaintAddImageAsParentRotated(
411 session, direction, session->TrackColours[SCHEME_TRACK] | 21537, 0, 16, 32, 16, 2, height);
412 wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
413 break;
414 }
415 paint_util_set_segment_support_height(
416 session,
417 paint_util_rotate_segments(
418 SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction),
419 0xFFFF, 0);
420 paint_util_set_general_support_height(session, height + 32, 0x20);
421 break;
422 case 3:
423 switch (direction)
424 {
425 case 0:
426 PaintAddImageAsParentRotated(
427 session, direction, session->TrackColours[SCHEME_TRACK] | 21541, 0, 16, 16, 16, 2, height);
428 wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
429 break;
430 case 1:
431 PaintAddImageAsParentRotated(
432 session, direction, session->TrackColours[SCHEME_TRACK] | 21546, 16, 16, 16, 16, 2, height);
433 wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
434 break;
435 case 2:
436 PaintAddImageAsParentRotated(
437 session, direction, session->TrackColours[SCHEME_TRACK] | 21551, 16, 0, 16, 16, 2, height);
438 wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
439 break;
440 case 3:
441 PaintAddImageAsParentRotated(
442 session, direction, session->TrackColours[SCHEME_TRACK] | 21536, 0, 0, 16, 16, 2, height);
443 wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
444 break;
445 }
446 paint_util_set_segment_support_height(
447 session,
448 paint_util_rotate_segments(
449 SEGMENT_B4 | SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4,
450 direction),
451 0xFFFF, 0);
452 paint_util_set_general_support_height(session, height + 32, 0x20);
453 break;
454 case 4:
455 paint_util_set_segment_support_height(
456 session, paint_util_rotate_segments(SEGMENT_BC | SEGMENT_CC | SEGMENT_D4, direction), 0xFFFF, 0);
457 paint_util_set_general_support_height(session, height + 32, 0x20);
458 break;
459 case 5:
460 switch (direction)
461 {
462 case 0:
463 PaintAddImageAsParentRotated(
464 session, direction, session->TrackColours[SCHEME_TRACK] | 21540, 16, 0, 16, 34, 2, height);
465 wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
466 break;
467 case 1:
468 PaintAddImageAsParentRotated(
469 session, direction, session->TrackColours[SCHEME_TRACK] | 21545, 0, 0, 16, 32, 2, height);
470 wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
471 break;
472 case 2:
473 PaintAddImageAsParentRotated(
474 session, direction, session->TrackColours[SCHEME_TRACK] | 21550, 0, 0, 16, 32, 2, height);
475 wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
476 break;
477 case 3:
478 PaintAddImageAsParentRotated(
479 session, direction, session->TrackColours[SCHEME_TRACK] | 21535, 16, 0, 16, 32, 2, height);
480 wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
481 break;
482 }
483 paint_util_set_segment_support_height(
484 session,
485 paint_util_rotate_segments(
486 SEGMENT_B8 | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0 | SEGMENT_D4, direction),
487 0xFFFF, 0);
488 paint_util_set_general_support_height(session, height + 32, 0x20);
489 break;
490 case 6:
491 switch (direction)
492 {
493 case 0:
494 PaintAddImageAsParentRotated(
495 session, direction, session->TrackColours[SCHEME_TRACK] | 21539, 2, 0, 32, 32, 2, height);
496 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
497 break;
498 case 1:
499 PaintAddImageAsParentRotated(
500 session, direction, session->TrackColours[SCHEME_TRACK] | 21544, 2, 0, 27, 32, 2, height);
501 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
502 break;
503 case 2:
504 PaintAddImageAsParentRotated(
505 session, direction, session->TrackColours[SCHEME_TRACK] | 21549, 2, 0, 27, 32, 2, height);
506 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
507 break;
508 case 3:
509 PaintAddImageAsParentRotated(
510 session, direction, session->TrackColours[SCHEME_TRACK] | 21534, 2, 0, 32, 32, 2, height);
511 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
512 break;
513 }
514 switch (direction)
515 {
516 case 2:
517 paint_util_push_tunnel_right(session, height, TUNNEL_SQUARE_FLAT);
518 break;
519 case 3:
520 paint_util_push_tunnel_left(session, height, TUNNEL_SQUARE_FLAT);
521 break;
522 }
523 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
524 paint_util_set_general_support_height(session, height + 32, 0x20);
525 break;
526 }
527 }
528
529 /** rct2: 0x0086E6DC */
reverser_rc_track_right_quarter_turn_5(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)530 static void reverser_rc_track_right_quarter_turn_5(
531 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
532 const TrackElement& trackElement)
533 {
534 trackSequence = mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence];
535 reverser_rc_track_left_quarter_turn_5(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
536 }
537
538 /** rct2: 0x0086E6EC */
reverser_rc_track_s_bend_left(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)539 static void reverser_rc_track_s_bend_left(
540 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
541 const TrackElement& trackElement)
542 {
543 switch (trackSequence)
544 {
545 case 0:
546 switch (direction)
547 {
548 case 0:
549 PaintAddImageAsParentRotated(
550 session, direction, session->TrackColours[SCHEME_TRACK] | 21566, 0, 0, 32, 27, 2, height, 0, 2, height);
551 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
552 break;
553 case 1:
554 PaintAddImageAsParentRotated(
555 session, direction, session->TrackColours[SCHEME_TRACK] | 21570, 0, 0, 32, 27, 2, height, 0, 2, height);
556 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
557 break;
558 case 2:
559 PaintAddImageAsParentRotated(
560 session, direction, session->TrackColours[SCHEME_TRACK] | 21569, 0, 0, 32, 27, 2, height, 0, 2, height);
561 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
562 break;
563 case 3:
564 PaintAddImageAsParentRotated(
565 session, direction, session->TrackColours[SCHEME_TRACK] | 21573, 0, 0, 32, 27, 2, height, 0, 2, height);
566 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
567 break;
568 }
569 if (direction == 0 || direction == 3)
570 {
571 paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT);
572 }
573 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
574 paint_util_set_general_support_height(session, height + 32, 0x20);
575 break;
576 case 1:
577 switch (direction)
578 {
579 case 0:
580 PaintAddImageAsParentRotated(
581 session, direction, session->TrackColours[SCHEME_TRACK] | 21567, 0, 0, 32, 26, 2, height, 0, 0, height);
582 wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
583 break;
584 case 1:
585 PaintAddImageAsParentRotated(
586 session, direction, session->TrackColours[SCHEME_TRACK] | 21571, 0, 0, 32, 26, 2, height, 0, 0, height);
587 wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
588 break;
589 case 2:
590 PaintAddImageAsParentRotated(
591 session, direction, session->TrackColours[SCHEME_TRACK] | 21568, 0, 0, 32, 26, 2, height, 0, 6, height);
592 wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
593 break;
594 case 3:
595 PaintAddImageAsParentRotated(
596 session, direction, session->TrackColours[SCHEME_TRACK] | 21572, 0, 0, 32, 26, 2, height, 0, 6, height);
597 wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
598 break;
599 }
600 paint_util_set_segment_support_height(
601 session,
602 paint_util_rotate_segments(
603 SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction),
604 0xFFFF, 0);
605 paint_util_set_general_support_height(session, height + 32, 0x20);
606 break;
607 case 2:
608 switch (direction)
609 {
610 case 0:
611 PaintAddImageAsParentRotated(
612 session, direction, session->TrackColours[SCHEME_TRACK] | 21568, 0, 0, 32, 26, 2, height, 0, 6, height);
613 wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
614 break;
615 case 1:
616 PaintAddImageAsParentRotated(
617 session, direction, session->TrackColours[SCHEME_TRACK] | 21572, 0, 0, 32, 26, 2, height, 0, 6, height);
618 wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
619 break;
620 case 2:
621 PaintAddImageAsParentRotated(
622 session, direction, session->TrackColours[SCHEME_TRACK] | 21567, 0, 0, 32, 26, 2, height, 0, 0, height);
623 wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
624 break;
625 case 3:
626 PaintAddImageAsParentRotated(
627 session, direction, session->TrackColours[SCHEME_TRACK] | 21571, 0, 0, 32, 26, 2, height, 0, 0, height);
628 wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
629 break;
630 }
631 paint_util_set_segment_support_height(
632 session,
633 paint_util_rotate_segments(
634 SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction),
635 0xFFFF, 0);
636 paint_util_set_general_support_height(session, height + 32, 0x20);
637 break;
638 case 3:
639 switch (direction)
640 {
641 case 0:
642 PaintAddImageAsParentRotated(
643 session, direction, session->TrackColours[SCHEME_TRACK] | 21569, 0, 0, 32, 27, 2, height, 0, 2, height);
644 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
645 break;
646 case 1:
647 PaintAddImageAsParentRotated(
648 session, direction, session->TrackColours[SCHEME_TRACK] | 21573, 0, 0, 32, 27, 2, height, 0, 2, height);
649 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
650 break;
651 case 2:
652 PaintAddImageAsParentRotated(
653 session, direction, session->TrackColours[SCHEME_TRACK] | 21566, 0, 0, 32, 27, 2, height, 0, 2, height);
654 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
655 break;
656 case 3:
657 PaintAddImageAsParentRotated(
658 session, direction, session->TrackColours[SCHEME_TRACK] | 21570, 0, 0, 32, 27, 2, height, 0, 2, height);
659 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
660 break;
661 }
662 switch (direction)
663 {
664 case 1:
665 paint_util_push_tunnel_right(session, height, TUNNEL_SQUARE_FLAT);
666 break;
667 case 2:
668 paint_util_push_tunnel_left(session, height, TUNNEL_SQUARE_FLAT);
669 break;
670 }
671 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
672 paint_util_set_general_support_height(session, height + 32, 0x20);
673 break;
674 }
675 }
676
677 /** rct2: 0x0086E6FC */
reverser_rc_track_s_bend_right(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)678 static void reverser_rc_track_s_bend_right(
679 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
680 const TrackElement& trackElement)
681 {
682 switch (trackSequence)
683 {
684 case 0:
685 switch (direction)
686 {
687 case 0:
688 PaintAddImageAsParentRotated(
689 session, direction, session->TrackColours[SCHEME_TRACK] | 21574, 0, 0, 32, 27, 2, height, 0, 2, height);
690 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
691 break;
692 case 1:
693 PaintAddImageAsParentRotated(
694 session, direction, session->TrackColours[SCHEME_TRACK] | 21578, 0, 0, 32, 27, 2, height, 0, 2, height);
695 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
696 break;
697 case 2:
698 PaintAddImageAsParentRotated(
699 session, direction, session->TrackColours[SCHEME_TRACK] | 21577, 0, 0, 32, 27, 2, height, 0, 2, height);
700 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
701 break;
702 case 3:
703 PaintAddImageAsParentRotated(
704 session, direction, session->TrackColours[SCHEME_TRACK] | 21581, 0, 0, 32, 27, 2, height, 0, 2, height);
705 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
706 break;
707 }
708 if (direction == 0 || direction == 3)
709 {
710 paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT);
711 }
712 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
713 paint_util_set_general_support_height(session, height + 32, 0x20);
714 break;
715 case 1:
716 switch (direction)
717 {
718 case 0:
719 PaintAddImageAsParentRotated(
720 session, direction, session->TrackColours[SCHEME_TRACK] | 21575, 0, 0, 32, 26, 2, height, 0, 6, height);
721 wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
722 break;
723 case 1:
724 PaintAddImageAsParentRotated(
725 session, direction, session->TrackColours[SCHEME_TRACK] | 21579, 0, 0, 32, 26, 2, height, 0, 6, height);
726 wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
727 break;
728 case 2:
729 PaintAddImageAsParentRotated(
730 session, direction, session->TrackColours[SCHEME_TRACK] | 21576, 0, 0, 32, 26, 2, height, 0, 0, height);
731 wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
732 break;
733 case 3:
734 PaintAddImageAsParentRotated(
735 session, direction, session->TrackColours[SCHEME_TRACK] | 21580, 0, 0, 32, 26, 2, height, 0, 0, height);
736 wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
737 break;
738 }
739 paint_util_set_segment_support_height(
740 session,
741 paint_util_rotate_segments(
742 SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction),
743 0xFFFF, 0);
744 paint_util_set_general_support_height(session, height + 32, 0x20);
745 break;
746 case 2:
747 switch (direction)
748 {
749 case 0:
750 PaintAddImageAsParentRotated(
751 session, direction, session->TrackColours[SCHEME_TRACK] | 21576, 0, 0, 32, 26, 2, height, 0, 0, height);
752 wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
753 break;
754 case 1:
755 PaintAddImageAsParentRotated(
756 session, direction, session->TrackColours[SCHEME_TRACK] | 21580, 0, 0, 32, 26, 2, height, 0, 0, height);
757 wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
758 break;
759 case 2:
760 PaintAddImageAsParentRotated(
761 session, direction, session->TrackColours[SCHEME_TRACK] | 21575, 0, 0, 32, 26, 2, height, 0, 6, height);
762 wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
763 break;
764 case 3:
765 PaintAddImageAsParentRotated(
766 session, direction, session->TrackColours[SCHEME_TRACK] | 21579, 0, 0, 32, 26, 2, height, 0, 6, height);
767 wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
768 break;
769 }
770 paint_util_set_segment_support_height(
771 session,
772 paint_util_rotate_segments(
773 SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction),
774 0xFFFF, 0);
775 paint_util_set_general_support_height(session, height + 32, 0x20);
776 break;
777 case 3:
778 switch (direction)
779 {
780 case 0:
781 PaintAddImageAsParentRotated(
782 session, direction, session->TrackColours[SCHEME_TRACK] | 21577, 0, 0, 32, 27, 2, height, 0, 2, height);
783 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
784 break;
785 case 1:
786 PaintAddImageAsParentRotated(
787 session, direction, session->TrackColours[SCHEME_TRACK] | 21581, 0, 0, 32, 27, 2, height, 0, 2, height);
788 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
789 break;
790 case 2:
791 PaintAddImageAsParentRotated(
792 session, direction, session->TrackColours[SCHEME_TRACK] | 21574, 0, 0, 32, 27, 2, height, 0, 2, height);
793 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
794 break;
795 case 3:
796 PaintAddImageAsParentRotated(
797 session, direction, session->TrackColours[SCHEME_TRACK] | 21578, 0, 0, 32, 27, 2, height, 0, 2, height);
798 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
799 break;
800 }
801 switch (direction)
802 {
803 case 1:
804 paint_util_push_tunnel_right(session, height, TUNNEL_SQUARE_FLAT);
805 break;
806 case 2:
807 paint_util_push_tunnel_left(session, height, TUNNEL_SQUARE_FLAT);
808 break;
809 }
810 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
811 paint_util_set_general_support_height(session, height + 32, 0x20);
812 break;
813 }
814 }
815
816 /** rct2: 0x0086E73C */
reverser_rc_track_left_quarter_turn_3(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)817 static void reverser_rc_track_left_quarter_turn_3(
818 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
819 const TrackElement& trackElement)
820 {
821 switch (trackSequence)
822 {
823 case 0:
824 switch (direction)
825 {
826 case 0:
827 PaintAddImageAsParentRotated(
828 session, direction, session->TrackColours[SCHEME_TRACK] | 21559, 0, 0, 32, 20, 2, height, 0, 6, height);
829 wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
830 break;
831 case 1:
832 PaintAddImageAsParentRotated(
833 session, direction, session->TrackColours[SCHEME_TRACK] | 21562, 0, 0, 32, 20, 2, height, 0, 6, height);
834 wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
835 break;
836 case 2:
837 PaintAddImageAsParentRotated(
838 session, direction, session->TrackColours[SCHEME_TRACK] | 21565, 0, 0, 32, 20, 2, height, 0, 6, height);
839 wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
840 break;
841 case 3:
842 PaintAddImageAsParentRotated(
843 session, direction, session->TrackColours[SCHEME_TRACK] | 21556, 0, 0, 32, 20, 2, height, 0, 6, height);
844 wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
845 break;
846 }
847 if (direction == 0 || direction == 3)
848 {
849 paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT);
850 }
851 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
852 paint_util_set_general_support_height(session, height + 32, 0x20);
853 break;
854 case 1:
855 paint_util_set_general_support_height(session, height + 32, 0x20);
856 break;
857 case 2:
858 switch (direction)
859 {
860 case 0:
861 PaintAddImageAsParentRotated(
862 session, direction, session->TrackColours[SCHEME_TRACK] | 21558, 0, 0, 16, 16, 2, height, 16, 0,
863 height);
864 break;
865 case 1:
866 PaintAddImageAsParentRotated(
867 session, direction, session->TrackColours[SCHEME_TRACK] | 21561, 0, 0, 16, 16, 2, height, 0, 0, height);
868 break;
869 case 2:
870 PaintAddImageAsParentRotated(
871 session, direction, session->TrackColours[SCHEME_TRACK] | 21564, 0, 0, 16, 16, 2, height, 0, 16,
872 height);
873 break;
874 case 3:
875 PaintAddImageAsParentRotated(
876 session, direction, session->TrackColours[SCHEME_TRACK] | 21555, 0, 0, 16, 16, 2, height, 16, 16,
877 height);
878 break;
879 }
880 paint_util_set_segment_support_height(
881 session, paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0);
882 paint_util_set_general_support_height(session, height + 32, 0x20);
883 break;
884 case 3:
885 switch (direction)
886 {
887 case 0:
888 PaintAddImageAsParentRotated(
889 session, direction, session->TrackColours[SCHEME_TRACK] | 21557, 0, 0, 20, 32, 2, height, 6, 0, height);
890 wooden_a_supports_paint_setup(session, 5, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
891 break;
892 case 1:
893 PaintAddImageAsParentRotated(
894 session, direction, session->TrackColours[SCHEME_TRACK] | 21560, 0, 0, 20, 32, 2, height, 6, 0, height);
895 wooden_a_supports_paint_setup(session, 2, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
896 break;
897 case 2:
898 PaintAddImageAsParentRotated(
899 session, direction, session->TrackColours[SCHEME_TRACK] | 21563, 0, 0, 20, 32, 2, height, 6, 0, height);
900 wooden_a_supports_paint_setup(session, 3, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
901 break;
902 case 3:
903 PaintAddImageAsParentRotated(
904 session, direction, session->TrackColours[SCHEME_TRACK] | 21554, 0, 0, 20, 32, 2, height, 6, 0, height);
905 wooden_a_supports_paint_setup(session, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
906 break;
907 }
908 switch (direction)
909 {
910 case 2:
911 paint_util_push_tunnel_right(session, height, TUNNEL_SQUARE_FLAT);
912 break;
913 case 3:
914 paint_util_push_tunnel_left(session, height, TUNNEL_SQUARE_FLAT);
915 break;
916 }
917 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
918 paint_util_set_general_support_height(session, height + 32, 0x20);
919 break;
920 }
921 }
922
923 /** rct2: 0x0086E74C */
reverser_rc_track_right_quarter_turn_3(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)924 static void reverser_rc_track_right_quarter_turn_3(
925 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
926 const TrackElement& trackElement)
927 {
928 trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence];
929 reverser_rc_track_left_quarter_turn_3(session, ride, trackSequence, (direction - 1) & 3, height, trackElement);
930 }
931
932 /** rct2: 0x0086E75C */
reverser_rc_track_brakes(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)933 static void reverser_rc_track_brakes(
934 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
935 const TrackElement& trackElement)
936 {
937 switch (direction)
938 {
939 case 0:
940 case 2:
941 PaintAddImageAsParentRotated(
942 session, direction, session->TrackColours[SCHEME_TRACK] | 21506, 0, 0, 32, 27, 2, height, 0, 2, height);
943 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
944 break;
945 case 1:
946 case 3:
947 PaintAddImageAsParentRotated(
948 session, direction, session->TrackColours[SCHEME_TRACK] | 21507, 0, 0, 32, 27, 2, height, 0, 2, height);
949 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
950 break;
951 }
952 paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT);
953 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
954 paint_util_set_general_support_height(session, height + 32, 0x20);
955 }
956
957 /** rct2: 0x0086E76C */
reverser_rc_track_left_reverser(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)958 static void reverser_rc_track_left_reverser(
959 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
960 const TrackElement& trackElement)
961 {
962 switch (trackSequence)
963 {
964 case 0:
965 switch (direction)
966 {
967 case 0:
968 PaintAddImageAsParentRotated(
969 session, direction, session->TrackColours[SCHEME_TRACK] | 21582, 0, 0, 32, 27, 2, height, 0, 2, height);
970 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
971 break;
972 case 1:
973 PaintAddImageAsParentRotated(
974 session, direction, session->TrackColours[SCHEME_TRACK] | 21588, 0, 0, 32, 27, 2, height, 0, 2, height);
975 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
976 break;
977 case 2:
978 PaintAddImageAsParentRotated(
979 session, direction, session->TrackColours[SCHEME_TRACK] | 21594, 0, 0, 32, 27, 2, height, 0, 2, height);
980 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
981 break;
982 case 3:
983 PaintAddImageAsParentRotated(
984 session, direction, session->TrackColours[SCHEME_TRACK] | 21600, 0, 0, 32, 27, 2, height, 0, 2, height);
985 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
986 break;
987 }
988 if (direction == 0 || direction == 3)
989 {
990 paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT);
991 }
992 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
993 paint_util_set_general_support_height(session, height + 32, 0x20);
994 break;
995 case 1:
996 switch (direction)
997 {
998 case 0:
999 PaintAddImageAsParentRotated(
1000 session, direction, session->TrackColours[SCHEME_TRACK] | 21585, 0, 0, 32, 27, 2, height, 0, 2, height);
1001 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1002 break;
1003 case 1:
1004 PaintAddImageAsParentRotated(
1005 session, direction, session->TrackColours[SCHEME_TRACK] | 21591, 0, 0, 32, 27, 2, height, 0, 2, height);
1006 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1007 break;
1008 case 2:
1009 PaintAddImageAsParentRotated(
1010 session, direction, session->TrackColours[SCHEME_TRACK] | 21597, 0, 0, 32, 27, 2, height, 0, 2, height);
1011 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1012 break;
1013 case 3:
1014 PaintAddImageAsParentRotated(
1015 session, direction, session->TrackColours[SCHEME_TRACK] | 21603, 0, 0, 32, 27, 2, height, 0, 2, height);
1016 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1017 break;
1018 }
1019 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
1020 paint_util_set_general_support_height(session, height + 32, 0x20);
1021 break;
1022 case 2:
1023 switch (direction)
1024 {
1025 case 0:
1026 PaintAddImageAsParentRotated(
1027 session, direction, session->TrackColours[SCHEME_TRACK] | 21586, 0, 0, 32, 27, 2, height, 0, 2, height);
1028 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1029 break;
1030 case 1:
1031 PaintAddImageAsParentRotated(
1032 session, direction, session->TrackColours[SCHEME_TRACK] | 21592, 0, 0, 32, 27, 2, height, 0, 2, height);
1033 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1034 break;
1035 case 2:
1036 PaintAddImageAsParentRotated(
1037 session, direction, session->TrackColours[SCHEME_TRACK] | 21598, 0, 0, 32, 27, 2, height, 0, 2, height);
1038 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1039 break;
1040 case 3:
1041 PaintAddImageAsParentRotated(
1042 session, direction, session->TrackColours[SCHEME_TRACK] | 21604, 0, 0, 32, 27, 2, height, 0, 2, height);
1043 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1044 break;
1045 }
1046 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
1047 paint_util_set_general_support_height(session, height + 32, 0x20);
1048 break;
1049 case 3:
1050 switch (direction)
1051 {
1052 case 0:
1053 PaintAddImageAsParentRotated(
1054 session, direction, session->TrackColours[SCHEME_TRACK] | 21587, 0, 0, 32, 27, 2, height, 0, 2, height);
1055 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1056 break;
1057 case 1:
1058 PaintAddImageAsParentRotated(
1059 session, direction, session->TrackColours[SCHEME_TRACK] | 21593, 0, 0, 32, 27, 2, height, 0, 2, height);
1060 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1061 break;
1062 case 2:
1063 PaintAddImageAsParentRotated(
1064 session, direction, session->TrackColours[SCHEME_TRACK] | 21599, 0, 0, 32, 27, 2, height, 0, 2, height);
1065 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1066 break;
1067 case 3:
1068 PaintAddImageAsParentRotated(
1069 session, direction, session->TrackColours[SCHEME_TRACK] | 21605, 0, 0, 32, 27, 2, height, 0, 2, height);
1070 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1071 break;
1072 }
1073 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
1074 paint_util_set_general_support_height(session, height + 32, 0x20);
1075 break;
1076 case 4:
1077 switch (direction)
1078 {
1079 case 0:
1080 PaintAddImageAsParentRotated(
1081 session, direction, session->TrackColours[SCHEME_TRACK] | 21583, 0, 0, 32, 27, 2, height, 0, 2, height);
1082 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1083 break;
1084 case 1:
1085 PaintAddImageAsParentRotated(
1086 session, direction, session->TrackColours[SCHEME_TRACK] | 21589, 0, 0, 32, 27, 2, height, 0, 2, height);
1087 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1088 break;
1089 case 2:
1090 PaintAddImageAsParentRotated(
1091 session, direction, session->TrackColours[SCHEME_TRACK] | 21595, 0, 0, 32, 27, 2, height, 0, 2, height);
1092 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1093 break;
1094 case 3:
1095 PaintAddImageAsParentRotated(
1096 session, direction, session->TrackColours[SCHEME_TRACK] | 21601, 0, 0, 32, 27, 2, height, 0, 2, height);
1097 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1098 break;
1099 }
1100 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
1101 paint_util_set_general_support_height(session, height + 32, 0x20);
1102 break;
1103 case 5:
1104 switch (direction)
1105 {
1106 case 0:
1107 PaintAddImageAsParentRotated(
1108 session, direction, session->TrackColours[SCHEME_TRACK] | 21584, 0, 0, 32, 27, 2, height, 0, 2, height);
1109 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1110 break;
1111 case 1:
1112 PaintAddImageAsParentRotated(
1113 session, direction, session->TrackColours[SCHEME_TRACK] | 21590, 0, 0, 32, 27, 2, height, 0, 2, height);
1114 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1115 break;
1116 case 2:
1117 PaintAddImageAsParentRotated(
1118 session, direction, session->TrackColours[SCHEME_TRACK] | 21596, 0, 0, 32, 27, 2, height, 0, 2, height);
1119 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1120 break;
1121 case 3:
1122 PaintAddImageAsParentRotated(
1123 session, direction, session->TrackColours[SCHEME_TRACK] | 21602, 0, 0, 32, 27, 2, height, 0, 2, height);
1124 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1125 break;
1126 }
1127 switch (direction)
1128 {
1129 case 1:
1130 paint_util_push_tunnel_right(session, height, TUNNEL_SQUARE_FLAT);
1131 break;
1132 case 2:
1133 paint_util_push_tunnel_left(session, height, TUNNEL_SQUARE_FLAT);
1134 break;
1135 }
1136 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
1137 paint_util_set_general_support_height(session, height + 32, 0x20);
1138 break;
1139 }
1140 }
1141
1142 /** rct2: 0x0086E77C */
reverser_rc_track_right_reverser(paint_session * session,const Ride * ride,uint8_t trackSequence,uint8_t direction,int32_t height,const TrackElement & trackElement)1143 static void reverser_rc_track_right_reverser(
1144 paint_session* session, const Ride* ride, uint8_t trackSequence, uint8_t direction, int32_t height,
1145 const TrackElement& trackElement)
1146 {
1147 switch (trackSequence)
1148 {
1149 case 0:
1150 switch (direction)
1151 {
1152 case 0:
1153 PaintAddImageAsParentRotated(
1154 session, direction, session->TrackColours[SCHEME_TRACK] | 21596, 0, 0, 32, 27, 2, height, 0, 2, height);
1155 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1156 break;
1157 case 1:
1158 PaintAddImageAsParentRotated(
1159 session, direction, session->TrackColours[SCHEME_TRACK] | 21602, 0, 0, 32, 27, 2, height, 0, 2, height);
1160 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1161 break;
1162 case 2:
1163 PaintAddImageAsParentRotated(
1164 session, direction, session->TrackColours[SCHEME_TRACK] | 21584, 0, 0, 32, 27, 2, height, 0, 2, height);
1165 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1166 break;
1167 case 3:
1168 PaintAddImageAsParentRotated(
1169 session, direction, session->TrackColours[SCHEME_TRACK] | 21590, 0, 0, 32, 27, 2, height, 0, 2, height);
1170 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1171 break;
1172 }
1173 if (direction == 0 || direction == 3)
1174 {
1175 paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_SQUARE_FLAT);
1176 }
1177 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
1178 paint_util_set_general_support_height(session, height + 32, 0x20);
1179 break;
1180 case 1:
1181 switch (direction)
1182 {
1183 case 0:
1184 PaintAddImageAsParentRotated(
1185 session, direction, session->TrackColours[SCHEME_TRACK] | 21599, 0, 0, 32, 27, 2, height, 0, 2, height);
1186 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1187 break;
1188 case 1:
1189 PaintAddImageAsParentRotated(
1190 session, direction, session->TrackColours[SCHEME_TRACK] | 21605, 0, 0, 32, 27, 2, height, 0, 2, height);
1191 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1192 break;
1193 case 2:
1194 PaintAddImageAsParentRotated(
1195 session, direction, session->TrackColours[SCHEME_TRACK] | 21587, 0, 0, 32, 27, 2, height, 0, 2, height);
1196 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1197 break;
1198 case 3:
1199 PaintAddImageAsParentRotated(
1200 session, direction, session->TrackColours[SCHEME_TRACK] | 21593, 0, 0, 32, 27, 2, height, 0, 2, height);
1201 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1202 break;
1203 }
1204 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
1205 paint_util_set_general_support_height(session, height + 32, 0x20);
1206 break;
1207 case 2:
1208 switch (direction)
1209 {
1210 case 0:
1211 PaintAddImageAsParentRotated(
1212 session, direction, session->TrackColours[SCHEME_TRACK] | 21598, 0, 0, 32, 27, 2, height, 0, 2, height);
1213 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1214 break;
1215 case 1:
1216 PaintAddImageAsParentRotated(
1217 session, direction, session->TrackColours[SCHEME_TRACK] | 21604, 0, 0, 32, 27, 2, height, 0, 2, height);
1218 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1219 break;
1220 case 2:
1221 PaintAddImageAsParentRotated(
1222 session, direction, session->TrackColours[SCHEME_TRACK] | 21586, 0, 0, 32, 27, 2, height, 0, 2, height);
1223 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1224 break;
1225 case 3:
1226 PaintAddImageAsParentRotated(
1227 session, direction, session->TrackColours[SCHEME_TRACK] | 21592, 0, 0, 32, 27, 2, height, 0, 2, height);
1228 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1229 break;
1230 }
1231 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
1232 paint_util_set_general_support_height(session, height + 32, 0x20);
1233 break;
1234 case 3:
1235 switch (direction)
1236 {
1237 case 0:
1238 PaintAddImageAsParentRotated(
1239 session, direction, session->TrackColours[SCHEME_TRACK] | 21597, 0, 0, 32, 27, 2, height, 0, 2, height);
1240 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1241 break;
1242 case 1:
1243 PaintAddImageAsParentRotated(
1244 session, direction, session->TrackColours[SCHEME_TRACK] | 21603, 0, 0, 32, 27, 2, height, 0, 2, height);
1245 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1246 break;
1247 case 2:
1248 PaintAddImageAsParentRotated(
1249 session, direction, session->TrackColours[SCHEME_TRACK] | 21585, 0, 0, 32, 27, 2, height, 0, 2, height);
1250 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1251 break;
1252 case 3:
1253 PaintAddImageAsParentRotated(
1254 session, direction, session->TrackColours[SCHEME_TRACK] | 21591, 0, 0, 32, 27, 2, height, 0, 2, height);
1255 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1256 break;
1257 }
1258 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
1259 paint_util_set_general_support_height(session, height + 32, 0x20);
1260 break;
1261 case 4:
1262 switch (direction)
1263 {
1264 case 0:
1265 PaintAddImageAsParentRotated(
1266 session, direction, session->TrackColours[SCHEME_TRACK] | 21595, 0, 0, 32, 27, 2, height, 0, 2, height);
1267 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1268 break;
1269 case 1:
1270 PaintAddImageAsParentRotated(
1271 session, direction, session->TrackColours[SCHEME_TRACK] | 21601, 0, 0, 32, 27, 2, height, 0, 2, height);
1272 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1273 break;
1274 case 2:
1275 PaintAddImageAsParentRotated(
1276 session, direction, session->TrackColours[SCHEME_TRACK] | 21583, 0, 0, 32, 27, 2, height, 0, 2, height);
1277 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1278 break;
1279 case 3:
1280 PaintAddImageAsParentRotated(
1281 session, direction, session->TrackColours[SCHEME_TRACK] | 21589, 0, 0, 32, 27, 2, height, 0, 2, height);
1282 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1283 break;
1284 }
1285 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
1286 paint_util_set_general_support_height(session, height + 32, 0x20);
1287 break;
1288 case 5:
1289 switch (direction)
1290 {
1291 case 0:
1292 PaintAddImageAsParentRotated(
1293 session, direction, session->TrackColours[SCHEME_TRACK] | 21594, 0, 0, 32, 27, 2, height, 0, 2, height);
1294 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1295 break;
1296 case 1:
1297 PaintAddImageAsParentRotated(
1298 session, direction, session->TrackColours[SCHEME_TRACK] | 21600, 0, 0, 32, 27, 2, height, 0, 2, height);
1299 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1300 break;
1301 case 2:
1302 PaintAddImageAsParentRotated(
1303 session, direction, session->TrackColours[SCHEME_TRACK] | 21582, 0, 0, 32, 27, 2, height, 0, 2, height);
1304 wooden_a_supports_paint_setup(session, 0, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1305 break;
1306 case 3:
1307 PaintAddImageAsParentRotated(
1308 session, direction, session->TrackColours[SCHEME_TRACK] | 21588, 0, 0, 32, 27, 2, height, 0, 2, height);
1309 wooden_a_supports_paint_setup(session, 1, 0, height, session->TrackColours[SCHEME_SUPPORTS]);
1310 break;
1311 }
1312 switch (direction)
1313 {
1314 case 1:
1315 paint_util_push_tunnel_right(session, height, TUNNEL_SQUARE_FLAT);
1316 break;
1317 case 2:
1318 paint_util_push_tunnel_left(session, height, TUNNEL_SQUARE_FLAT);
1319 break;
1320 }
1321 paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
1322 paint_util_set_general_support_height(session, height + 32, 0x20);
1323 break;
1324 }
1325 }
1326
get_track_paint_function_reverser_rc(int32_t trackType)1327 TRACK_PAINT_FUNCTION get_track_paint_function_reverser_rc(int32_t trackType)
1328 {
1329 switch (trackType)
1330 {
1331 case TrackElemType::Flat:
1332 return reverser_rc_track_flat;
1333 case TrackElemType::EndStation:
1334 case TrackElemType::BeginStation:
1335 case TrackElemType::MiddleStation:
1336 return reverser_rc_track_station;
1337 case TrackElemType::Up25:
1338 return reverser_rc_track_25_deg_up;
1339 case TrackElemType::FlatToUp25:
1340 return reverser_rc_track_flat_to_25_deg_up;
1341 case TrackElemType::Up25ToFlat:
1342 return reverser_rc_track_25_deg_up_to_flat;
1343 case TrackElemType::Down25:
1344 return reverser_rc_track_25_deg_down;
1345 case TrackElemType::FlatToDown25:
1346 return reverser_rc_track_flat_to_25_deg_down;
1347 case TrackElemType::Down25ToFlat:
1348 return reverser_rc_track_25_deg_down_to_flat;
1349 case TrackElemType::LeftQuarterTurn5Tiles:
1350 return reverser_rc_track_left_quarter_turn_5;
1351 case TrackElemType::RightQuarterTurn5Tiles:
1352 return reverser_rc_track_right_quarter_turn_5;
1353 case TrackElemType::SBendLeft:
1354 return reverser_rc_track_s_bend_left;
1355 case TrackElemType::SBendRight:
1356 return reverser_rc_track_s_bend_right;
1357 case TrackElemType::LeftQuarterTurn3Tiles:
1358 return reverser_rc_track_left_quarter_turn_3;
1359 case TrackElemType::RightQuarterTurn3Tiles:
1360 return reverser_rc_track_right_quarter_turn_3;
1361 case TrackElemType::Brakes:
1362 return reverser_rc_track_brakes;
1363 case TrackElemType::LeftReverser:
1364 return reverser_rc_track_left_reverser;
1365 case TrackElemType::RightReverser:
1366 return reverser_rc_track_right_reverser;
1367 }
1368 return nullptr;
1369 }
1370