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 #pragma once 11 12 #include "../common.h" 13 #include "../paint/Paint.h" 14 #include "../paint/tile_element/Paint.TileElement.h" 15 #include "../world/Map.h" 16 17 class StationObject; 18 19 extern const uint8_t track_map_2x2[][4]; 20 extern const uint8_t edges_2x2[]; 21 22 extern const uint8_t track_map_3x3[][9]; 23 extern const uint8_t edges_3x3[]; 24 25 extern const uint8_t track_map_4x4[][16]; 26 extern const uint8_t edges_4x4[]; 27 28 extern const uint8_t track_map_1x4[][4]; 29 30 enum 31 { 32 SPR_FLOOR_PLANKS = 3395, 33 SPR_FLOOR_PLANKS_90_DEG = 3396, 34 SPR_FLOOR_PLANKS_SLOPE_NE_SW = 3397, 35 SPR_FLOOR_PLANKS_SLOPE_SE_NW = 3398, 36 SPR_FLOOR_PLANKS_SLOPE_SW_NE = 3399, 37 SPR_FLOOR_PLANKS_SLOPE_NW_SE = 3400, 38 SPR_FLOOR_PLANKS_N_SEGMENT = 3401, 39 SPR_FLOOR_PLANKS_E_SEGMENT = 3402, 40 SPR_FLOOR_PLANKS_S_SEGMENT = 3403, 41 SPR_FLOOR_PLANKS_W_SEGMENT = 3404, 42 SPR_FLOOR_METAL = 14567, 43 SPR_FENCE_METAL_NE = 14568, 44 SPR_FENCE_METAL_SE = 14569, 45 SPR_FENCE_METAL_SW = 14570, 46 SPR_FENCE_METAL_NW = 14571, 47 48 SPR_FLOOR_METAL_B = 14989, 49 SPR_FENCE_METAL_B_NE = 14990, 50 SPR_FENCE_METAL_B_SE = 14991, 51 SPR_FENCE_METAL_B_SW = 14992, 52 SPR_FENCE_METAL_B_NW = 14993, 53 54 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_NE_SW = 16870, 55 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_SE_NW = 16871, 56 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_QUARTER_TURN_3_TILES_SW_SE_PART_0 = 16872, 57 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_QUARTER_TURN_3_TILES_SW_SE_PART_1 = 16873, 58 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_QUARTER_TURN_3_TILES_SW_SE_PART_2 = 16874, 59 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_QUARTER_TURN_3_TILES_NW_SW_PART_0 = 16875, 60 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_QUARTER_TURN_3_TILES_NW_SW_PART_1 = 16876, 61 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_QUARTER_TURN_3_TILES_NW_SW_PART_2 = 16877, 62 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_QUARTER_TURN_3_TILES_NE_NW_PART_0 = 16878, 63 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_QUARTER_TURN_3_TILES_NE_NW_PART_1 = 16879, 64 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_QUARTER_TURN_3_TILES_NE_NW_PART_2 = 16880, 65 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_QUARTER_TURN_3_TILES_SE_NE_PART_0 = 16881, 66 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_QUARTER_TURN_3_TILES_SE_NE_PART_1 = 16882, 67 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_QUARTER_TURN_3_TILES_SE_NE_PART_2 = 16883, 68 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_TO_25_DEG_UP_SW_NE = 16884, 69 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_TO_25_DEG_UP_NW_SE = 16885, 70 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_TO_25_DEG_UP_NE_SW = 16886, 71 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_TO_25_DEG_UP_SE_NW = 16887, 72 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_25_DEG_UP_TO_FLAT_SW_NE = 16888, 73 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_25_DEG_UP_TO_FLAT_NW_SE = 16889, 74 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_25_DEG_UP_TO_FLAT_NE_SW = 16890, 75 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_25_DEG_UP_TO_FLAT_SE_NW = 16891, 76 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_25_DEG_UP_SW_NE = 16892, 77 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_25_DEG_UP_NW_SE = 16893, 78 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_25_DEG_UP_NE_SW = 16894, 79 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_25_DEG_UP_SE_NW = 16895, 80 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_QUARTER_TURN_1_TILE_SW_NW = 16896, 81 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_QUARTER_TURN_1_TILE_NW_NE = 16897, 82 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_QUARTER_TURN_1_TILE_NE_SE = 16898, 83 SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_QUARTER_TURN_1_TILE_SE_SW = 16899, 84 85 SPR_FLOOR_CORK_SE_SW = 22134, 86 SPR_FLOOR_CORK_SW = 22135, 87 SPR_FLOOR_CORK_SE = 22136, 88 SPR_FLOOR_CORK = 22137, 89 SPR_FENCE_ROPE_NE = 22138, 90 SPR_FENCE_ROPE_SE = 22139, 91 SPR_FENCE_ROPE_SW = 22140, 92 SPR_FENCE_ROPE_NW = 22141, 93 94 SPR_STATION_PLATFORM_SW_NE = 22362, 95 SPR_STATION_PLATFORM_NW_SE = 22363, 96 SPR_STATION_PLATFORM_FENCED_SW_NE = 22364, 97 SPR_STATION_PLATFORM_FENCED_NW_SE = 22365, 98 SPR_STATION_PLATFORM_BEGIN_FENCED_SW_NE = 22366, 99 SPR_STATION_PLATFORM_BEGIN_FENCED_NW_SE = 22367, 100 SPR_STATION_PLATFORM_BEGIN_SW_NE = 22368, 101 SPR_STATION_PLATFORM_BEGIN_NW_SE = 22369, 102 SPR_STATION_FENCE_SW_NE = 22370, 103 SPR_STATION_FENCE_NW_SE = 22371, 104 SPR_STATION_BEGIN_ANGLE_FENCE_SW_NE = 22372, 105 SPR_STATION_BEGIN_ANGLE_FENCE_NW_SE = 22373, 106 SPR_STATION_FENCE_SMALL_NW_SE = 22374, 107 SPR_STATION_FENCE_SMALL_SW_NE = 22375, 108 109 SPR_STATION_PLATFORM_FENCED_END_RED_LIGHT_SW_NE = 22380, 110 SPR_STATION_PLATFORM_FENCED_END_RED_LIGHT_NW_SE = 22381, 111 SPR_STATION_PLATFORM_FENCED_END_GREEN_LIGHT_SW_NE = 22382, 112 SPR_STATION_PLATFORM_FENCED_END_GREEN_LIGHT_NW_SE = 22383, 113 SPR_STATION_LIGHT_BACK_NE_SW = 22384, 114 SPR_STATION_LIGHT_BACK_NW_SE = 22385, 115 SPR_STATION_LIGHT_BACK_ANGLE_FENCED_NE_SW = 22386, 116 SPR_STATION_LIGHT_BACK_ANGLE_FENCED_NW_SE = 22387, 117 SPR_STATION_PLATFORM_END_RED_LIGHT_SW_NE = 22388, 118 SPR_STATION_PLATFORM_END_RED_LIGHT_NW_SE = 22389, 119 SPR_STATION_PLATFORM_END_GREEN_LIGHT_SW_NE = 22390, 120 SPR_STATION_PLATFORM_END_GREEN_LIGHT_NW_SE = 22391, 121 SPR_STATION_INVERTED_FENCE_SW_NE = 22392, 122 SPR_STATION_INVERTED_FENCE_NW_SE = 22393, 123 SPR_STATION_INVERTED_BEGIN_ANGLE_FENCE_SW_NE = 22394, 124 SPR_STATION_INVERTED_BEGIN_ANGLE_FENCE_NW_SE = 22395, 125 SPR_STATION_INVERTED_LIGHT_BACK_ANGLE_FENCED_NE_SW = 22396, 126 SPR_STATION_INVERTED_LIGHT_BACK_ANGLE_FENCED_NW_SE = 22397, 127 SPR_STATION_INVERTED_BAR_C_SW_NE = 22398, 128 SPR_STATION_INVERTED_BAR_C_NW_SE = 22399, 129 SPR_STATION_INVERTED_BAR_D_SW_NE = 22400, 130 SPR_STATION_INVERTED_BAR_D_NW_SE = 22401, 131 SPR_STATION_INVERTED_BAR_E_SW_NE = 22402, 132 SPR_STATION_INVERTED_BAR_E_NW_SE = 22403, 133 SPR_STATION_PIER_EDGE_SE = 22404, 134 SPR_STATION_PIER_EDGE_SW = 22405, 135 SPR_STATION_PIER_EDGE_NW = 22406, 136 SPR_STATION_PIER_EDGE_NE = 22407, 137 SPR_STATION_PIER_EDGE_NW_FENCED = 22408, 138 SPR_STATION_PIER_EDGE_NE_FENCED = 22409, 139 SPR_STATION_PIER_FENCE_SE = 22410, 140 SPR_STATION_PIER_FENCE_SW = 22411, 141 SPR_STATION_NARROW_EDGE_SE = 22412, 142 SPR_STATION_NARROW_EDGE_SW = 22413, 143 SPR_STATION_NARROW_EDGE_FENCED_NW = 22414, 144 SPR_STATION_NARROW_EDGE_FENCED_NE = 22415, 145 SPR_STATION_NARROW_EDGE_NW = 22416, 146 SPR_STATION_NARROW_EDGE_NE = 22417, 147 SPR_STATION_INVERTED_BAR_F_SW_NE = 22418, 148 SPR_STATION_INVERTED_BAR_F_NW_SE = 22419, 149 SPR_STATION_INVERTED_BAR_0_SW_NE = 22420, 150 SPR_STATION_INVERTED_BAR_0_NW_SE = 22421, 151 SPR_STATION_INVERTED_BAR_A_SW_NE = 22422, 152 SPR_STATION_INVERTED_BAR_A_NW_SE = 22423, 153 SPR_STATION_INVERTED_BAR_B_SW_NE = 22424, 154 SPR_STATION_INVERTED_BAR_B_NW_SE = 22425, 155 SPR_STATION_BASE_A_SW_NE = 22426, 156 SPR_STATION_BASE_A_NW_SE = 22427, 157 SPR_STATION_BASE_B_SW_NE = 22428, 158 SPR_STATION_BASE_B_NW_SE = 22429, 159 SPR_STATION_BASE_C_SW_NE = 22430, 160 SPR_STATION_BASE_C_NW_SE = 22431, 161 SPR_STATION_BASE_D = 22432, // Metal plate without borders, used for some stations and for the on-ride photo segment. 162 163 SPR_ON_RIDE_PHOTO_CAMERA_SMALL_N = 23485, 164 SPR_ON_RIDE_PHOTO_CAMERA_SMALL_E = 23486, 165 SPR_ON_RIDE_PHOTO_CAMERA_SMALL_S = 23487, 166 SPR_ON_RIDE_PHOTO_CAMERA_SMALL_W = 23488, 167 SPR_ON_RIDE_PHOTO_CAMERA_FLASH_SMALL_N = 23489, 168 SPR_ON_RIDE_PHOTO_CAMERA_FLASH_SMALL_E = 23490, 169 SPR_ON_RIDE_PHOTO_CAMERA_FLASH_SMALL_S = 23491, 170 SPR_ON_RIDE_PHOTO_CAMERA_FLASH_SMALL_W = 23492, 171 SPR_ON_RIDE_PHOTO_SIGN_SMALL_SW_NE = 23493, 172 SPR_ON_RIDE_PHOTO_SIGN_SMALL_NW_SE = 23494, 173 SPR_ON_RIDE_PHOTO_SIGN_SMALL_NE_SW = 23495, 174 SPR_ON_RIDE_PHOTO_SIGN_SMALL_SE_NW = 23496, 175 176 SPR_ON_RIDE_PHOTO_CAMERA_N = 25615, 177 SPR_ON_RIDE_PHOTO_CAMERA_E = 25616, 178 SPR_ON_RIDE_PHOTO_CAMERA_S = 25617, 179 SPR_ON_RIDE_PHOTO_CAMERA_W = 25618, 180 SPR_ON_RIDE_PHOTO_CAMERA_FLASH_N = 25619, 181 SPR_ON_RIDE_PHOTO_CAMERA_FLASH_E = 25620, 182 SPR_ON_RIDE_PHOTO_CAMERA_FLASH_S = 25621, 183 SPR_ON_RIDE_PHOTO_CAMERA_FLASH_W = 25622, 184 SPR_ON_RIDE_PHOTO_SIGN_SW_NE = 25623, 185 SPR_ON_RIDE_PHOTO_SIGN_NW_SE = 25624, 186 SPR_ON_RIDE_PHOTO_SIGN_NE_SW = 25625, 187 SPR_ON_RIDE_PHOTO_SIGN_SE_NW = 25626, 188 189 SPR_GHOST_TRAIN_SPINNING_TUNNEL_BACK_SW_NE_FRAME_0 = 28865, 190 SPR_GHOST_TRAIN_SPINNING_TUNNEL_BACK_SW_NE_FRAME_1 = 28866, 191 SPR_GHOST_TRAIN_SPINNING_TUNNEL_BACK_SW_NE_FRAME_2 = 28867, 192 SPR_GHOST_TRAIN_SPINNING_TUNNEL_BACK_SW_NE_FRAME_3 = 28868, 193 SPR_GHOST_TRAIN_SPINNING_TUNNEL_BACK_NW_SE_FRAME_0 = 28869, 194 SPR_GHOST_TRAIN_SPINNING_TUNNEL_BACK_NW_SE_FRAME_1 = 28870, 195 SPR_GHOST_TRAIN_SPINNING_TUNNEL_BACK_NW_SE_FRAME_2 = 28871, 196 SPR_GHOST_TRAIN_SPINNING_TUNNEL_BACK_NW_SE_FRAME_3 = 28872, 197 SPR_GHOST_TRAIN_SPINNING_TUNNEL_FRONT_SW_NE_FRAME_0 = 28873, 198 SPR_GHOST_TRAIN_SPINNING_TUNNEL_FRONT_SW_NE_FRAME_1 = 28874, 199 SPR_GHOST_TRAIN_SPINNING_TUNNEL_FRONT_SW_NE_FRAME_2 = 28875, 200 SPR_GHOST_TRAIN_SPINNING_TUNNEL_FRONT_SW_NE_FRAME_3 = 28876, 201 SPR_GHOST_TRAIN_SPINNING_TUNNEL_FRONT_NW_SE_FRAME_0 = 28877, 202 SPR_GHOST_TRAIN_SPINNING_TUNNEL_FRONT_NW_SE_FRAME_1 = 28878, 203 SPR_GHOST_TRAIN_SPINNING_TUNNEL_FRONT_NW_SE_FRAME_2 = 28879, 204 SPR_GHOST_TRAIN_SPINNING_TUNNEL_FRONT_NW_SE_FRAME_3 = 28880, 205 }; 206 207 enum 208 { 209 SCHEME_TRACK = 0, 210 SCHEME_SUPPORTS = 1, 211 SCHEME_MISC = 2, 212 SCHEME_3 = 3, 213 }; 214 215 enum 216 { 217 STATION_VARIANT_BASIC, 218 STATION_VARIANT_1, 219 STATION_VARIANT_TALL, 220 }; 221 222 enum 223 { 224 MAZE_ENTRY_FLAG_0 = (1 << 0), 225 MAZE_ENTRY_FLAG_1 = (1 << 1), 226 MAZE_ENTRY_FLAG_2 = (1 << 2), 227 MAZE_ENTRY_FLAG_3 = (1 << 3), 228 MAZE_ENTRY_FLAG_4 = (1 << 4), 229 MAZE_ENTRY_FLAG_5 = (1 << 5), 230 MAZE_ENTRY_FLAG_6 = (1 << 6), 231 MAZE_ENTRY_FLAG_7 = (1 << 7), 232 MAZE_ENTRY_FLAG_8 = (1 << 8), 233 MAZE_ENTRY_FLAG_9 = (1 << 9), 234 MAZE_ENTRY_FLAG_10 = (1 << 10), 235 MAZE_ENTRY_FLAG_11 = (1 << 11), 236 MAZE_ENTRY_FLAG_12 = (1 << 12), 237 MAZE_ENTRY_FLAG_13 = (1 << 13), 238 MAZE_ENTRY_FLAG_14 = (1 << 14), 239 MAZE_ENTRY_FLAG_15 = (1 << 15), 240 }; 241 242 extern const uint32_t floorSpritesCork[]; 243 extern const uint32_t floorSpritesMetal[]; 244 extern const uint32_t floorSpritesMetalB[]; 245 246 extern const uint32_t fenceSpritesRope[]; 247 extern const uint32_t fenceSpritesMetal[]; 248 extern const uint32_t fenceSpritesMetalB[]; 249 250 extern const uint32_t trackSpritesSubmarineRideMiniHelicoptersQuarterTurn3Tiles[4][3]; 251 extern const uint32_t trackSpritesSubmarineRideMiniHelicoptersQuarterTurn1Tile[4]; 252 253 extern const uint8_t mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[]; 254 extern const CoordsXY defaultRightQuarterTurn5TilesOffsets[4][5]; 255 extern const CoordsXYZ defaultRightQuarterTurn5TilesBoundOffsets[4][5]; 256 extern const CoordsXY defaultRightQuarterTurn5TilesBoundLengths[4][5]; 257 258 extern const uint8_t mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[]; 259 extern const CoordsXY defaultRightQuarterTurn3TilesOffsets[4][3]; 260 extern const CoordsXYZ defaultRightQuarterTurn3TilesBoundOffsets[4][3]; 261 extern const CoordsXY defaultRightQuarterTurn3TilesBoundLengths[4][3]; 262 263 extern const CoordsXY defaultRightHelixUpSmallQuarterBoundLengths[4][3][2]; 264 extern const CoordsXYZ defaultRightHelixUpSmallQuarterBoundOffsets[4][3][2]; 265 266 extern const CoordsXY defaultRightHelixUpLargeQuarterBoundLengths[4][5][2]; 267 extern const CoordsXYZ defaultRightHelixUpLargeQuarterBoundOffsets[4][5][2]; 268 269 extern const CoordsXYZ defaultLeftEighthToDiagBoundOffsets[4][4]; 270 extern const CoordsXY defaultLeftEighthToDiagBoundLengths[4][4]; 271 extern const CoordsXYZ defaultRightEighthToDiagBoundOffsets[4][4]; 272 extern const CoordsXY defaultRightEighthToDiagBoundLengths[4][4]; 273 extern const int8_t defaultEighthToDiagThickness[4][4]; 274 275 extern const CoordsXY defaultDiagBoundLengths[4]; 276 extern const CoordsXY defaultDiagTileOffsets[4]; 277 278 extern const uint8_t mapLeftEighthTurnToOrthogonal[5]; 279 280 extern const size_t mini_golf_peep_animation_lengths[]; 281 282 bool track_paint_util_has_fence( 283 enum edge_t edge, const CoordsXY& position, const TrackElement& trackElement, const Ride* ride, uint8_t rotation); 284 void track_paint_util_paint_floor( 285 paint_session* session, uint8_t edges, uint32_t colourFlags, uint16_t height, const uint32_t floorSprites[4], 286 const StationObject* stationStyle); 287 void track_paint_util_paint_fences( 288 paint_session* session, uint8_t edges, const CoordsXY& position, const TrackElement& trackElement, const Ride* ride, 289 uint32_t colourFlags, uint16_t height, const uint32_t fenceSprites[4], uint8_t rotation); 290 bool track_paint_util_draw_station_covers( 291 paint_session* session, enum edge_t edge, bool hasFence, const StationObject* stationObject, uint16_t height); 292 bool track_paint_util_draw_station_covers_2( 293 paint_session* session, enum edge_t edge, bool hasFence, const StationObject* stationObject, uint16_t height, 294 uint8_t stationVariant); 295 void track_paint_util_draw_narrow_station_platform( 296 paint_session* session, const Ride* ride, Direction direction, int32_t height, int32_t zOffset, 297 const TrackElement& trackElement); 298 void track_paint_util_draw_station( 299 paint_session* session, const Ride* ride, Direction direction, uint16_t height, const TrackElement& trackElement); 300 void track_paint_util_draw_station_2( 301 paint_session* session, const Ride* ride, Direction direction, uint16_t height, const TrackElement& trackElement, 302 int32_t fenceOffsetA, int32_t fenceOffsetB); 303 void track_paint_util_draw_station_3( 304 paint_session* session, const Ride* ride, Direction direction, uint16_t height, uint16_t coverHeight, 305 const TrackElement& trackElement); 306 void track_paint_util_draw_station_inverted( 307 paint_session* session, const Ride* ride, Direction direction, int32_t height, const TrackElement& trackElement, 308 uint8_t stationVariant); 309 bool track_paint_util_should_paint_supports(const CoordsXY& position); 310 void track_paint_util_draw_pier( 311 paint_session* session, const Ride* ride, const StationObject* stationObject, const CoordsXY& position, Direction direction, 312 int32_t height, const TrackElement& trackElement, uint8_t rotation); 313 void track_paint_util_draw_station_metal_supports( 314 paint_session* session, Direction direction, uint16_t height, uint32_t colour); 315 void track_paint_util_draw_station_metal_supports_2( 316 paint_session* session, Direction direction, uint16_t height, uint32_t colour, uint8_t type); 317 318 void track_paint_util_right_quarter_turn_5_tiles_paint( 319 paint_session* session, int8_t thickness, int16_t height, Direction direction, uint8_t trackSequence, uint32_t colourFlags, 320 const uint32_t sprites[4][5], const CoordsXY offsets[4][5], const CoordsXY boundsLengths[4][5], 321 const CoordsXYZ boundsOffsets[4][5]); 322 void track_paint_util_right_quarter_turn_5_tiles_paint_2( 323 paint_session* session, int16_t height, Direction direction, uint8_t trackSequence, uint32_t colourFlags, 324 const sprite_bb sprites[][5]); 325 void track_paint_util_right_quarter_turn_5_tiles_paint_3( 326 paint_session* session, int16_t height, Direction direction, uint8_t trackSequence, uint32_t colourFlags, 327 const sprite_bb sprites[][5]); 328 void track_paint_util_right_quarter_turn_5_tiles_tunnel( 329 paint_session* session, int16_t height, Direction direction, uint8_t trackSequence, uint8_t tunnelType); 330 void track_paint_util_right_quarter_turn_5_tiles_wooden_supports( 331 paint_session* session, int16_t height, Direction direction, uint8_t trackSequence); 332 void track_paint_util_right_quarter_turn_3_tiles_25_deg_up_tunnel( 333 paint_session* session, int16_t height, Direction direction, uint8_t trackSequence, uint8_t tunnelType0, 334 uint8_t tunnelType3); 335 void track_paint_util_right_quarter_turn_3_tiles_25_deg_down_tunnel( 336 paint_session* session, int16_t height, Direction direction, uint8_t trackSequence, uint8_t tunnelType0, 337 uint8_t tunnelType3); 338 void track_paint_util_right_quarter_turn_3_tiles_paint( 339 paint_session* session, int8_t thickness, int16_t height, Direction direction, uint8_t trackSequence, uint32_t colourFlags, 340 const uint32_t sprites[4][3], const CoordsXY offsets[4][3], const CoordsXY boundsLengths[4][3], 341 const CoordsXYZ boundsOffsets[4][3]); 342 void track_paint_util_right_quarter_turn_3_tiles_paint_2( 343 paint_session* session, int8_t thickness, int16_t height, Direction direction, uint8_t trackSequence, uint32_t colourFlags, 344 const uint32_t sprites[4][3]); 345 void track_paint_util_right_quarter_turn_3_tiles_paint_2_with_height_offset( 346 paint_session* session, int8_t thickness, int16_t height, Direction direction, uint8_t trackSequence, uint32_t colourFlags, 347 const uint32_t sprites[4][3], int32_t heightOffset); 348 void track_paint_util_right_quarter_turn_3_tiles_paint_3( 349 paint_session* session, int16_t height, Direction direction, uint8_t trackSequence, uint32_t colourFlags, 350 const sprite_bb sprites[4][3]); 351 void track_paint_util_right_quarter_turn_3_tiles_paint_4( 352 paint_session* session, int16_t height, Direction direction, uint8_t trackSequence, uint32_t colourFlags, 353 const sprite_bb sprites[4][3]); 354 void track_paint_util_right_quarter_turn_3_tiles_tunnel( 355 paint_session* session, int16_t height, Direction direction, uint8_t trackSequence, uint8_t tunnelType); 356 void track_paint_util_left_quarter_turn_3_tiles_paint( 357 paint_session* session, int8_t thickness, int16_t height, Direction direction, uint8_t trackSequence, uint32_t colourFlags, 358 const uint32_t sprites[4][3]); 359 void track_paint_util_left_quarter_turn_3_tiles_paint_with_height_offset( 360 paint_session* session, int8_t thickness, int16_t height, Direction direction, uint8_t trackSequence, uint32_t colourFlags, 361 const uint32_t sprites[4][3], int32_t heightOffset); 362 void track_paint_util_left_quarter_turn_3_tiles_tunnel( 363 paint_session* session, int16_t height, uint8_t tunnelType, Direction direction, uint8_t trackSequence); 364 void track_paint_util_left_quarter_turn_1_tile_paint( 365 paint_session* session, int8_t thickness, int16_t height, int16_t boundBoxZOffset, Direction direction, 366 uint32_t colourFlags, const uint32_t* sprites); 367 void track_paint_util_spinning_tunnel_paint(paint_session* session, int8_t thickness, int16_t height, Direction direction); 368 void track_paint_util_onride_photo_small_paint( 369 paint_session* session, Direction direction, int32_t height, const TrackElement& trackElement); 370 void track_paint_util_onride_photo_paint( 371 paint_session* session, Direction direction, int32_t height, const TrackElement& trackElement); 372 void track_paint_util_right_helix_up_small_quarter_tiles_paint( 373 paint_session* session, const int8_t thickness[2], int16_t height, Direction direction, uint8_t trackSequence, 374 uint32_t colourFlags, const uint32_t sprites[4][3][2], const CoordsXY offsets[4][3][2], 375 const CoordsXY boundsLengths[4][3][2], const CoordsXYZ boundsOffsets[4][3][2]); 376 void track_paint_util_right_helix_up_large_quarter_tiles_paint( 377 paint_session* session, const int8_t thickness[2], int16_t height, Direction direction, uint8_t trackSequence, 378 uint32_t colourFlags, const uint32_t sprites[4][5][2], const CoordsXY offsets[4][5][2], 379 const CoordsXY boundsLengths[4][5][2], const CoordsXYZ boundsOffsets[4][5][2]); 380 void track_paint_util_eighth_to_diag_tiles_paint( 381 paint_session* session, const int8_t thickness[4][4], int16_t height, Direction direction, uint8_t trackSequence, 382 uint32_t colourFlags, const uint32_t sprites[4][4], const CoordsXY offsets[4][4], const CoordsXY boundsLengths[4][4], 383 const CoordsXYZ boundsOffsets[4][4]); 384 void track_paint_util_diag_tiles_paint( 385 paint_session* session, int8_t thickness, int16_t height, Direction direction, uint8_t trackSequence, uint32_t colourFlags, 386 const uint32_t sprites[4], const CoordsXY offsets[4], const CoordsXY boundsLengths[4], const CoordsXYZ boundsOffsets[4]); 387 388 void track_paint_util_left_quarter_turn_1_tile_tunnel( 389 paint_session* session, Direction direction, uint16_t baseHeight, int8_t startOffset, uint8_t startTunnel, int8_t endOffset, 390 uint8_t endTunnel); 391 void track_paint_util_right_quarter_turn_1_tile_tunnel( 392 paint_session* session, Direction direction, uint16_t baseHeight, int8_t startOffset, uint8_t startTunnel, int8_t endOffset, 393 uint8_t endTunnel); 394 395 void track_paint_util_right_vertical_loop_segments(paint_session* session, Direction direction, uint8_t trackSequence); 396 397 void track_paint_util_left_corkscrew_up_supports(paint_session* session, Direction direction, uint16_t height); 398 399 using TRACK_PAINT_FUNCTION = void (*)( 400 paint_session* session, const Ride* ride, uint8_t trackSequence, Direction direction, int32_t height, 401 const TrackElement& trackElement); 402 using TRACK_PAINT_FUNCTION_GETTER = TRACK_PAINT_FUNCTION (*)(int32_t trackType); 403 404 TRACK_PAINT_FUNCTION get_track_paint_function_stand_up_rc(int32_t trackType); 405 TRACK_PAINT_FUNCTION get_track_paint_function_suspended_swinging_rc(int32_t trackType); 406 TRACK_PAINT_FUNCTION get_track_paint_function_inverted_rc(int32_t trackType); 407 TRACK_PAINT_FUNCTION get_track_paint_function_junior_rc(int32_t trackType); 408 TRACK_PAINT_FUNCTION get_track_paint_function_monorail(int32_t trackType); 409 TRACK_PAINT_FUNCTION get_track_paint_function_mini_suspended_rc(int32_t trackType); 410 TRACK_PAINT_FUNCTION get_track_paint_function_miniature_railway(int32_t trackType); 411 TRACK_PAINT_FUNCTION get_track_paint_function_boat_hire(int32_t trackType); 412 TRACK_PAINT_FUNCTION get_track_paint_function_wooden_wild_mouse(int32_t trackType); 413 TRACK_PAINT_FUNCTION get_track_paint_function_steeplechase(int32_t trackType); 414 TRACK_PAINT_FUNCTION get_track_paint_function_car_ride(int32_t trackType); 415 TRACK_PAINT_FUNCTION get_track_paint_function_launched_freefall(int32_t trackType); 416 TRACK_PAINT_FUNCTION get_track_paint_function_bobsleigh_rc(int32_t trackType); 417 TRACK_PAINT_FUNCTION get_track_paint_function_observation_tower(int32_t trackType); 418 TRACK_PAINT_FUNCTION get_track_paint_function_looping_rc(int32_t trackType); 419 TRACK_PAINT_FUNCTION get_track_paint_function_dinghy_slide(int32_t trackType); 420 TRACK_PAINT_FUNCTION get_track_paint_function_mine_train_rc(int32_t trackType); 421 TRACK_PAINT_FUNCTION get_track_paint_function_chairlift(int32_t trackType); 422 TRACK_PAINT_FUNCTION get_track_paint_function_corkscrew_rc(int32_t trackType); 423 TRACK_PAINT_FUNCTION get_track_paint_function_maze(int32_t trackType); 424 TRACK_PAINT_FUNCTION get_track_paint_function_spiral_slide(int32_t trackType); 425 TRACK_PAINT_FUNCTION get_track_paint_function_go_karts(int32_t trackType); 426 TRACK_PAINT_FUNCTION get_track_paint_function_log_flume(int32_t trackType); 427 TRACK_PAINT_FUNCTION get_track_paint_function_river_rapids(int32_t trackType); 428 TRACK_PAINT_FUNCTION get_track_paint_function_dodgems(int32_t trackType); 429 TRACK_PAINT_FUNCTION get_track_paint_function_swinging_ship(int32_t trackType); 430 TRACK_PAINT_FUNCTION get_track_paint_function_swinging_inverter_ship(int32_t trackType); 431 TRACK_PAINT_FUNCTION get_track_paint_function_ferris_wheel(int32_t trackType); 432 TRACK_PAINT_FUNCTION get_track_paint_function_motionsimulator(int32_t trackType); 433 TRACK_PAINT_FUNCTION get_track_paint_function_3d_cinema(int32_t trackType); 434 TRACK_PAINT_FUNCTION get_track_paint_function_topspin(int32_t trackType); 435 TRACK_PAINT_FUNCTION get_track_paint_function_space_rings(int32_t trackType); 436 TRACK_PAINT_FUNCTION get_track_paint_function_reverse_freefall_rc(int32_t trackType); 437 TRACK_PAINT_FUNCTION get_track_paint_function_lift(int32_t trackType); 438 TRACK_PAINT_FUNCTION get_track_paint_function_vertical_drop_rc(int32_t trackType); 439 TRACK_PAINT_FUNCTION get_track_paint_function_shop(int32_t trackType); 440 TRACK_PAINT_FUNCTION get_track_paint_function_merry_go_round(int32_t trackType); 441 TRACK_PAINT_FUNCTION get_track_paint_function_facility(int32_t trackType); 442 TRACK_PAINT_FUNCTION get_track_paint_function_twist(int32_t trackType); 443 TRACK_PAINT_FUNCTION get_track_paint_function_haunted_house(int32_t trackType); 444 TRACK_PAINT_FUNCTION get_track_paint_function_circus(int32_t trackType); 445 TRACK_PAINT_FUNCTION get_track_paint_function_ghost_train(int32_t trackType); 446 TRACK_PAINT_FUNCTION get_track_paint_function_twister_rc(int32_t trackType); 447 TRACK_PAINT_FUNCTION get_track_paint_function_side_friction_rc(int32_t trackType); 448 TRACK_PAINT_FUNCTION get_track_paint_function_wooden_rc(int32_t trackType); 449 TRACK_PAINT_FUNCTION get_track_paint_function_wild_mouse(int32_t trackType); 450 TRACK_PAINT_FUNCTION get_track_paint_function_multi_dimension_rc(int32_t trackType); 451 TRACK_PAINT_FUNCTION get_track_paint_function_flying_rc(int32_t trackType); 452 TRACK_PAINT_FUNCTION get_track_paint_function_virginia_reel(int32_t trackType); 453 TRACK_PAINT_FUNCTION get_track_paint_function_splash_boats(int32_t trackType); 454 TRACK_PAINT_FUNCTION get_track_paint_function_mini_helicopters(int32_t trackType); 455 TRACK_PAINT_FUNCTION get_track_paint_function_lay_down_rc(int32_t trackType); 456 TRACK_PAINT_FUNCTION get_track_paint_function_suspended_monorail(int32_t trackType); 457 TRACK_PAINT_FUNCTION get_track_paint_function_reverser_rc(int32_t trackType); 458 TRACK_PAINT_FUNCTION get_track_paint_function_heartline_twister_rc(int32_t trackType); 459 TRACK_PAINT_FUNCTION get_track_paint_function_mini_golf(int32_t trackType); 460 TRACK_PAINT_FUNCTION get_track_paint_function_giga_rc(int32_t trackType); 461 TRACK_PAINT_FUNCTION get_track_paint_function_roto_drop(int32_t trackType); 462 TRACK_PAINT_FUNCTION get_track_paint_function_flying_saucers(int32_t trackType); 463 TRACK_PAINT_FUNCTION get_track_paint_function_crooked_house(int32_t trackType); 464 TRACK_PAINT_FUNCTION get_track_paint_function_monorail_cycles(int32_t trackType); 465 TRACK_PAINT_FUNCTION get_track_paint_function_compact_inverted_rc(int32_t trackType); 466 TRACK_PAINT_FUNCTION get_track_paint_function_water_rc(int32_t trackType); 467 TRACK_PAINT_FUNCTION get_track_paint_function_air_powered_vertical_rc(int32_t trackType); 468 TRACK_PAINT_FUNCTION get_track_paint_function_inverted_hairpin_rc(int32_t trackType); 469 TRACK_PAINT_FUNCTION get_track_paint_function_magic_carpet(int32_t trackType); 470 TRACK_PAINT_FUNCTION get_track_paint_function_submarine_ride(int32_t trackType); 471 TRACK_PAINT_FUNCTION get_track_paint_function_enterprise(int32_t trackType); 472 TRACK_PAINT_FUNCTION get_track_paint_function_inverted_impulse_rc(int32_t trackType); 473 TRACK_PAINT_FUNCTION get_track_paint_function_mini_rc(int32_t trackType); 474 TRACK_PAINT_FUNCTION get_track_paint_function_mine_ride(int32_t trackType); 475 TRACK_PAINT_FUNCTION get_track_paint_function_lim_launched_rc(int32_t trackType); 476 namespace HybridRC 477 { 478 TRACK_PAINT_FUNCTION GetTrackPaintFunction(int32_t trackType); 479 } 480 namespace SingleRailRC 481 { 482 TRACK_PAINT_FUNCTION GetTrackPaintFunction(int32_t trackType); 483 } 484