From f448d1670718b207c6aca7a2397acb82a3510f37 Mon Sep 17 00:00:00 2001 From: Michael Steenbeek Date: Tue, 14 Nov 2017 15:01:19 +0100 Subject: [PATCH] Add methods for getting and setting track element type --- src/openrct2-ui/windows/Ride.cpp | 4 +- src/openrct2-ui/windows/RideConstruction.cpp | 18 +-- src/openrct2/interface/viewport_interaction.c | 2 +- src/openrct2/peep/Peep.cpp | 4 +- src/openrct2/rct1/S4Importer.cpp | 2 +- src/openrct2/ride/CableLift.cpp | 14 +- src/openrct2/ride/Track.cpp | 46 +++--- src/openrct2/ride/Track.h | 2 + src/openrct2/ride/TrackDesign.cpp | 2 +- src/openrct2/ride/Vehicle.cpp | 28 ++-- .../ride/coaster/BolligerMabillardTrack.cpp | 2 +- .../ride/coaster/CorkscrewRollerCoaster.cpp | 2 +- .../ride/coaster/FlyingRollerCoaster.cpp | 2 +- src/openrct2/ride/coaster/GigaCoaster.cpp | 2 +- .../ride/coaster/JuniorRollerCoaster.cpp | 4 +- .../ride/coaster/LayDownRollerCoaster.cpp | 2 +- .../ride/coaster/LimLaunchedRollerCoaster.cpp | 2 +- .../ride/coaster/MineTrainCoaster.cpp | 2 +- .../ride/coaster/MiniRollerCoaster.cpp | 2 +- .../coaster/MultiDimensionRollerCoaster.cpp | 2 +- .../ride/coaster/StandUpRollerCoaster.cpp | 2 +- src/openrct2/ride/coaster/WildMouse.cpp | 2 +- .../ride/coaster/WoodenRollerCoaster.cpp | 2 +- src/openrct2/ride/ride.c | 136 +++++++++--------- src/openrct2/ride/ride_ratings.c | 20 ++- src/openrct2/ride/thrill/GoKarts.cpp | 4 +- src/openrct2/ride/track_design_save.c | 8 +- src/openrct2/ride/track_paint.c | 82 +++++------ src/openrct2/ride/transport/Chairlift.cpp | 8 +- .../ride/transport/MiniatureRailway.cpp | 4 +- src/openrct2/windows/TileInspector.cpp | 2 +- src/openrct2/world/Entrance.cpp | 4 +- src/openrct2/world/Wall.cpp | 2 +- src/openrct2/world/footpath.c | 4 +- src/openrct2/world/map.c | 6 +- src/openrct2/world/map_animation.c | 10 +- src/openrct2/world/tile_inspector.c | 8 +- test/testpaint/TestTrack.cpp | 10 +- test/testpaint/generate.cpp | 2 +- 39 files changed, 235 insertions(+), 225 deletions(-) diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index 589da336d0..31f5abda64 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -1616,7 +1616,7 @@ rct_window *window_ride_open_track(rct_tile_element *tileElement) sint32 rideIndex = track_element_get_ride_index(tileElement); if ( (tile_element_get_type(tileElement) == TILE_ELEMENT_TYPE_ENTRANCE) || - (TrackSequenceProperties[tileElement->properties.track.type][0] & TRACK_SEQUENCE_FLAG_ORIGIN) + (TrackSequenceProperties[track_element_get_type(tileElement)][0] & TRACK_SEQUENCE_FLAG_ORIGIN) ) { // Open ride window in station view return window_ride_open_station(rideIndex, tile_element_get_station(tileElement)); @@ -4117,7 +4117,7 @@ static void window_ride_set_track_colour_scheme(rct_window *w, sint32 x, sint32 z = tileElement->base_height * 8; direction = tile_element_get_direction(tileElement); - sub_6C683D(&x, &y, &z, direction, tileElement->properties.track.type, newColourScheme, nullptr, 4); + sub_6C683D(&x, &y, &z, direction, track_element_get_type(tileElement), newColourScheme, nullptr, 4); } /** diff --git a/src/openrct2-ui/windows/RideConstruction.cpp b/src/openrct2-ui/windows/RideConstruction.cpp index 0e0e9f5102..5fee0ed89e 100644 --- a/src/openrct2-ui/windows/RideConstruction.cpp +++ b/src/openrct2-ui/windows/RideConstruction.cpp @@ -1712,7 +1712,7 @@ static void window_ride_construction_construct(rct_window *w) _currentTrackBeginY = trackBeginEnd.begin_y; _currentTrackBeginZ = trackBeginEnd.begin_z; _currentTrackPieceDirection = trackBeginEnd.begin_direction; - _currentTrackPieceType = trackBeginEnd.begin_element->properties.track.type; + _currentTrackPieceType = track_element_get_type(trackBeginEnd.begin_element); _currentTrackSelectionFlags = 0; _rideConstructionArrowPulseTime = 0; _rideConstructionState = RIDE_CONSTRUCTION_STATE_SELECTED; @@ -1736,7 +1736,7 @@ static void window_ride_construction_construct(rct_window *w) _currentTrackBeginY = next_track.y; _currentTrackBeginZ = z; _currentTrackPieceDirection = tile_element_get_direction(next_track.element); - _currentTrackPieceType = next_track.element->properties.track.type; + _currentTrackPieceType = track_element_get_type(next_track.element); _currentTrackSelectionFlags = 0; _rideConstructionArrowPulseTime = 0; _rideConstructionState = RIDE_CONSTRUCTION_STATE_SELECTED; @@ -1806,14 +1806,14 @@ static void window_ride_construction_mouseup_demolish(rct_window* w) y = trackBeginEnd.begin_y; z = trackBeginEnd.begin_z; direction = trackBeginEnd.begin_direction; - type = trackBeginEnd.begin_element->properties.track.type; + type = track_element_get_type(trackBeginEnd.begin_element); gGotoStartPlacementMode = false; } else if (track_block_get_next(&inputElement, &outputElement, &z, &direction)) { x = outputElement.x; y = outputElement.y; direction = tile_element_get_direction(outputElement.element); - type = outputElement.element->properties.track.type; + type = track_element_get_type(outputElement.element); gGotoStartPlacementMode = false; } else { x = _currentTrackBeginX; @@ -1827,7 +1827,7 @@ static void window_ride_construction_mouseup_demolish(rct_window* w) return; } - const rct_preview_track *trackBlock = get_track_def_from_ride_index(_currentRideIndex, tileElement->properties.track.type); + const rct_preview_track *trackBlock = get_track_def_from_ride_index(_currentRideIndex, track_element_get_type(tileElement)); z = (tileElement->base_height * 8) - trackBlock->z; gGotoStartPlacementMode = true; } @@ -2328,7 +2328,7 @@ static void sub_6CBCE2( _tempTrackTileElement.flags = (bl & 0x0F) | TILE_ELEMENT_FLAG_LAST_TILE; _tempTrackTileElement.base_height = baseZ; _tempTrackTileElement.clearance_height = clearanceZ; - _tempTrackTileElement.properties.track.type = trackType; + track_element_set_type(&_tempTrackTileElement, trackType); tile_element_set_track_sequence(&_tempTrackTileElement, trackBlock->index); track_element_set_colour_scheme(&_tempTrackTileElement, 0); track_element_set_ride_index(&_tempTrackTileElement, rideIndex); @@ -2384,8 +2384,8 @@ void window_ride_construction_update_active_elements_impl() sint32 y = _currentTrackBeginY; sint32 z = _currentTrackBeginZ; if (!sub_6C683D(&x, &y, &z, _currentTrackPieceDirection & 3, _currentTrackPieceType, 0, &tileElement, 0)) { - _selectedTrackType = tileElement->properties.track.type; - if (track_element_has_speed_setting(tileElement->properties.track.type)) + _selectedTrackType = track_element_get_type(tileElement); + if (track_element_has_speed_setting(track_element_get_type(tileElement))) _currentBrakeSpeed2 = tile_element_get_brake_booster_speed(tileElement); _currentSeatRotationAngle = track_element_get_seat_rotation(tileElement); } @@ -3276,7 +3276,7 @@ static void ride_construction_set_brakes_speed(sint32 brakesSpeed) _currentTrackBeginX, GAME_COMMAND_FLAG_APPLY | ((brakesSpeed) << 8), _currentTrackBeginY, - tileElement->properties.track.type, + track_element_get_type(tileElement), GAME_COMMAND_SET_BRAKES_SPEED, _currentTrackBeginZ, 0 diff --git a/src/openrct2/interface/viewport_interaction.c b/src/openrct2/interface/viewport_interaction.c index a28ef86688..57c0206b23 100644 --- a/src/openrct2/interface/viewport_interaction.c +++ b/src/openrct2/interface/viewport_interaction.c @@ -228,7 +228,7 @@ sint32 viewport_interaction_get_item_right(sint32 x, sint32 y, viewport_interact if (tile_element_get_type(tileElement) == TILE_ELEMENT_TYPE_ENTRANCE) { rct_string_id stringId; - if (tileElement->properties.track.type == ENTRANCE_TYPE_RIDE_ENTRANCE) { + if (tileElement->properties.entrance.type == ENTRANCE_TYPE_RIDE_ENTRANCE) { if (ride->num_stations > 1) { stringId = STR_RIDE_STATION_X_ENTRANCE; } else { diff --git a/src/openrct2/peep/Peep.cpp b/src/openrct2/peep/Peep.cpp index ddd5420e54..6a3a596a45 100644 --- a/src/openrct2/peep/Peep.cpp +++ b/src/openrct2/peep/Peep.cpp @@ -5008,9 +5008,7 @@ static bool peep_update_fixing_sub_state_9(bool firstRun, rct_peep * peep, Ride track_begin_end trackBeginEnd; while (track_block_get_previous(input.x, input.y, input.element, &trackBeginEnd)) { - uint8 trackType = trackBeginEnd.begin_element->properties.track.type; - if (trackType == TRACK_ELEM_BEGIN_STATION || trackType == TRACK_ELEM_MIDDLE_STATION || - trackType == TRACK_ELEM_END_STATION) + if (track_element_is_station(trackBeginEnd.begin_element)) { input.x = trackBeginEnd.begin_x; input.y = trackBeginEnd.begin_y; diff --git a/src/openrct2/rct1/S4Importer.cpp b/src/openrct2/rct1/S4Importer.cpp index ef051f0259..1e32150b00 100644 --- a/src/openrct2/rct1/S4Importer.cpp +++ b/src/openrct2/rct1/S4Importer.cpp @@ -2682,7 +2682,7 @@ private: if (!track_element_is_lift_hill(tileElement)) continue; - uint8 trackType = tileElement->properties.track.type; + uint8 trackType = track_element_get_type(tileElement); switch (trackType) { case TRACK_ELEM_25_DEG_UP_TO_FLAT: case TRACK_ELEM_60_DEG_UP_TO_FLAT: diff --git a/src/openrct2/ride/CableLift.cpp b/src/openrct2/ride/CableLift.cpp index 37f0e989bd..e3d389090b 100644 --- a/src/openrct2/ride/CableLift.cpp +++ b/src/openrct2/ride/CableLift.cpp @@ -272,15 +272,15 @@ static bool sub_6DF01A_loop(rct_vehicle * vehicle) if (!track_block_get_next(&input, &output, &outputZ, &outputDirection)) return false; - if (TrackDefinitions[output.element->properties.track.type].vangle_start != _vehicleVAngleEndF64E36 || - TrackDefinitions[output.element->properties.track.type].bank_start != _vehicleBankEndF64E37) + if (TrackDefinitions[track_element_get_type(output.element)].vangle_start != _vehicleVAngleEndF64E36 || + TrackDefinitions[track_element_get_type(output.element)].bank_start != _vehicleBankEndF64E37) return false; vehicle->track_x = output.x; vehicle->track_y = output.y; vehicle->track_z = outputZ; vehicle->track_direction = outputDirection; - vehicle->track_type |= output.element->properties.track.type << 2; + vehicle->track_type |= track_element_get_type(output.element) << 2; trackProgress = 0; } @@ -354,17 +354,17 @@ static bool sub_6DF21B_loop(rct_vehicle * vehicle) if (!track_block_get_previous(input.x, input.y, input.element, &output)) return false; - if (TrackDefinitions[output.begin_element->properties.track.type].vangle_end != _vehicleVAngleEndF64E36 || - TrackDefinitions[output.begin_element->properties.track.type].bank_end != _vehicleBankEndF64E37) + if (TrackDefinitions[track_element_get_type(output.begin_element)].vangle_end != _vehicleVAngleEndF64E36 || + TrackDefinitions[track_element_get_type(output.begin_element)].bank_end != _vehicleBankEndF64E37) return false; vehicle->track_x = output.begin_x; vehicle->track_y = output.begin_y; vehicle->track_z = output.begin_z; vehicle->track_direction = output.begin_direction; - vehicle->track_type |= output.begin_element->properties.track.type << 2; + vehicle->track_type |= track_element_get_type(output.begin_element) << 2; - if (output.begin_element->properties.track.type == TRACK_ELEM_END_STATION) + if (track_element_get_type(output.begin_element) == TRACK_ELEM_END_STATION) { _vehicleMotionTrackFlags = VEHICLE_UPDATE_MOTION_TRACK_FLAG_VEHICLE_AT_STATION; } diff --git a/src/openrct2/ride/Track.cpp b/src/openrct2/ride/Track.cpp index 535012e6d9..2c28588e11 100644 --- a/src/openrct2/ride/Track.cpp +++ b/src/openrct2/ride/Track.cpp @@ -571,12 +571,12 @@ sint32 track_is_connected_by_shape(rct_tile_element * a, rct_tile_element * b) { sint32 trackType, aBank, aAngle, bBank, bAngle; - trackType = a->properties.track.type; + trackType = track_element_get_type(a); aBank = TrackDefinitions[trackType].bank_end; aAngle = TrackDefinitions[trackType].vangle_end; aBank = track_get_actual_bank(a, aBank); - trackType = b->properties.track.type; + trackType = track_element_get_type(b); bBank = TrackDefinitions[trackType].bank_start; bAngle = TrackDefinitions[trackType].vangle_start; bBank = track_get_actual_bank(b, bBank); @@ -688,7 +688,7 @@ static bool track_add_station_element(sint32 x, sint32 y, sint32 z, sint32 direc stationElement = find_station_element(x, y, z, direction, rideIndex); if (stationElement != nullptr) { - if (stationElement->properties.track.type == TRACK_ELEM_END_STATION) + if (track_element_get_type(stationElement) == TRACK_ELEM_END_STATION) { if (flags & GAME_COMMAND_FLAG_APPLY) { @@ -714,7 +714,7 @@ static bool track_add_station_element(sint32 x, sint32 y, sint32 z, sint32 direc stationElement = find_station_element(x, y, z, direction, rideIndex); if (stationElement != nullptr) { - if (stationElement->properties.track.type == TRACK_ELEM_END_STATION) + if (track_element_get_type(stationElement) == TRACK_ELEM_END_STATION) { if (flags & GAME_COMMAND_FLAG_APPLY) { @@ -777,7 +777,7 @@ static bool track_add_station_element(sint32 x, sint32 y, sint32 z, sint32 direc { targetTrackType = TRACK_ELEM_MIDDLE_STATION; } - stationElement->properties.track.type = targetTrackType; + track_element_set_type(stationElement, targetTrackType); map_invalidate_element(x, y, stationElement); @@ -830,7 +830,7 @@ static bool track_remove_station_element(sint32 x, sint32 y, sint32 z, sint32 di y = stationY0; while ((stationElement = find_station_element(x, y, z, direction, rideIndex)) != nullptr) { - if (stationElement->properties.track.type == TRACK_ELEM_END_STATION) + if (track_element_get_type(stationElement) == TRACK_ELEM_END_STATION) { if (flags & GAME_COMMAND_FLAG_APPLY) { @@ -857,7 +857,7 @@ static bool track_remove_station_element(sint32 x, sint32 y, sint32 z, sint32 di stationElement = find_station_element(x, y, z, direction, rideIndex); if (stationElement != nullptr) { - if (stationElement->properties.track.type == TRACK_ELEM_END_STATION) + if (track_element_get_type(stationElement) == TRACK_ELEM_END_STATION) { if (flags & GAME_COMMAND_FLAG_APPLY) { @@ -944,7 +944,7 @@ static bool track_remove_station_element(sint32 x, sint32 y, sint32 z, sint32 di } } } - stationElement->properties.track.type = targetTrackType; + track_element_set_type(stationElement, targetTrackType); map_invalidate_element(x, y, stationElement); } @@ -1492,7 +1492,7 @@ static money32 track_place(sint32 rideIndex, tile_element_set_track_sequence(tileElement, trackBlock->index); track_element_set_ride_index(tileElement, rideIndex); - tileElement->properties.track.type = type; + track_element_set_type(tileElement, type); tileElement->properties.track.colour = 0; if (flags & GAME_COMMAND_FLAG_GHOST) { @@ -1667,7 +1667,7 @@ static money32 track_remove(uint8 type, // Probably should add a check for ghost here as well! - uint8 track_type = tileElement->properties.track.type; + uint8 track_type = track_element_get_type(tileElement); switch (track_type) { case TRACK_ELEM_BEGIN_STATION: @@ -1696,7 +1696,7 @@ static money32 track_remove(uint8 type, } uint8 rideIndex = track_element_get_ride_index(tileElement); - type = tileElement->properties.track.type; + type = track_element_get_type(tileElement); bool isLiftHill = track_element_is_lift_hill(tileElement); Ride * ride = get_ride(rideIndex); @@ -1778,7 +1778,7 @@ static money32 track_remove(uint8 type, if (tile_element_get_track_sequence(tileElement) != trackBlock->index) continue; - if (tileElement->properties.track.type != type) + if (track_element_get_type(tileElement) != type) continue; found = 1; @@ -2098,7 +2098,7 @@ static money32 set_maze_track(uint16 x, uint8 flags, uint8 direction, uint16 y, assert(tileElement != nullptr); tileElement->clearance_height = clearanceHeight; tileElement->type = TILE_ELEMENT_TYPE_TRACK; - tileElement->properties.track.type = TRACK_ELEM_MAZE; + track_element_set_type(tileElement, TRACK_ELEM_MAZE); track_element_set_ride_index(tileElement, rideIndex); tileElement->properties.track.maze_entry = 0xFFFF; @@ -2313,7 +2313,7 @@ void game_command_set_brakes_speed(sint32 * eax, continue; if (tile_element_get_type(tileElement) != TILE_ELEMENT_TYPE_TRACK) continue; - if (tileElement->properties.track.type != trackType) + if (track_element_get_type(tileElement) != trackType) continue; tile_element_set_brake_booster_speed(tileElement, brakesSpeed); @@ -2454,7 +2454,7 @@ bool track_element_is_lift_hill(rct_tile_element * trackElement) */ bool track_element_is_block_start(rct_tile_element * trackElement) { - switch (trackElement->properties.track.type) + switch (track_element_get_type(trackElement)) { case TRACK_ELEM_END_STATION: case TRACK_ELEM_CABLE_LIFT_HILL: @@ -2534,7 +2534,7 @@ sint32 track_get_actual_bank_2(sint32 rideType, bool isInverted, sint32 bank) sint32 track_get_actual_bank_3(rct_vehicle * vehicle, rct_tile_element * tileElement) { bool isInverted = (vehicle->update_flags & VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES) && track_element_is_inverted(tileElement); - sint32 trackType = tileElement->properties.track.type; + sint32 trackType = track_element_get_type(tileElement); sint32 rideType = get_ride(track_element_get_ride_index(tileElement))->type; sint32 bankStart = TrackDefinitions[trackType].bank_start; return track_get_actual_bank_2(rideType, isInverted, bankStart); @@ -2542,7 +2542,7 @@ sint32 track_get_actual_bank_3(rct_vehicle * vehicle, rct_tile_element * tileEle bool track_element_is_station(rct_tile_element * trackElement) { - switch (trackElement->properties.track.type) + switch (track_element_get_type(trackElement)) { case TRACK_ELEM_END_STATION: case TRACK_ELEM_BEGIN_STATION: @@ -2700,4 +2700,14 @@ uint8 track_element_get_ride_index(const rct_tile_element * tileElement) void track_element_set_ride_index(rct_tile_element * tileElement, uint8 rideIndex) { tileElement->properties.track.ride_index = rideIndex; -} \ No newline at end of file +} + +uint8 track_element_get_type(const rct_tile_element * tileElement) +{ + return tileElement->properties.track.type; +} + +void track_element_set_type(rct_tile_element * tileElement, uint8 type) +{ + tileElement->properties.track.type = type; +} diff --git a/src/openrct2/ride/Track.h b/src/openrct2/ride/Track.h index adb86013f2..09d4cb59d9 100644 --- a/src/openrct2/ride/Track.h +++ b/src/openrct2/ride/Track.h @@ -579,6 +579,8 @@ void tile_element_decrement_onride_photo_timout(rct_tile_element * tileElement); uint16 track_element_get_maze_entry(const rct_tile_element * tileElement); uint8 track_element_get_ride_index(const rct_tile_element * tileElement); void track_element_set_ride_index(rct_tile_element * tileElement, uint8 rideIndex); +uint8 track_element_get_type(const rct_tile_element * tileElement); +void track_element_set_type(rct_tile_element * tileElement, uint8 rideIndex); #ifdef __cplusplus } diff --git a/src/openrct2/ride/TrackDesign.cpp b/src/openrct2/ride/TrackDesign.cpp index ce6f4e7c3d..bbdedf0f1f 100644 --- a/src/openrct2/ride/TrackDesign.cpp +++ b/src/openrct2/ride/TrackDesign.cpp @@ -2112,7 +2112,7 @@ static money32 place_maze_design(uint8 flags, uint8 rideIndex, uint16 mazeEntry, rct_tile_element * tileElement = tile_element_insert(fx >> 5, fy >> 5, fz, 15); tileElement->clearance_height = fz + 4; tileElement->type = TILE_ELEMENT_TYPE_TRACK; - tileElement->properties.track.type = TRACK_ELEM_MAZE; + track_element_set_type(tileElement, TRACK_ELEM_MAZE); track_element_set_ride_index(tileElement, rideIndex); tileElement->properties.track.maze_entry = mazeEntry; if (flags & GAME_COMMAND_FLAG_GHOST) diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index 8071290538..e6037dba6b 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -3123,7 +3123,7 @@ static bool vehicle_next_tower_element_is_top(rct_vehicle * vehicle) if (tileElement->clearance_height == (tileElement + 1)->base_height) { - if ((tileElement + 1)->properties.track.type == TRACK_ELEM_TOWER_SECTION) + if (track_element_get_type(tileElement + 1) == TRACK_ELEM_TOWER_SECTION) { return false; } @@ -3139,7 +3139,7 @@ static bool vehicle_next_tower_element_is_top(rct_vehicle * vehicle) return true; } - if ((tileElement + 2)->properties.track.type == TRACK_ELEM_TOWER_SECTION) + if (track_element_get_type(tileElement + 2) == TRACK_ELEM_TOWER_SECTION) { return false; } @@ -4281,7 +4281,7 @@ static void loc_6DA9F9(rct_vehicle * vehicle, sint32 x, sint32 y, sint32 bx, sin rct_tile_element * tileElement = map_get_track_element_at(vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3); Ride * ride = get_ride(vehicle->ride); - vehicle->track_type = (tileElement->properties.track.type << 2) | (ride->boat_hire_return_direction & 3); + vehicle->track_type = (track_element_get_type(tileElement) << 2) | (ride->boat_hire_return_direction & 3); vehicle->track_progress = 0; vehicle->status = VEHICLE_STATUS_TRAVELLING; @@ -6774,7 +6774,7 @@ static void vehicle_update_block_brakes_open_previous_section(rct_vehicle * vehi tileElement->flags &= ~TILE_ELEMENT_FLAG_BLOCK_BRAKE_CLOSED; map_invalidate_element(x, y, tileElement); - sint32 trackType = tileElement->properties.track.type; + sint32 trackType = track_element_get_type(tileElement); if (trackType == TRACK_ELEM_BLOCK_BRAKES || trackType == TRACK_ELEM_END_STATION) { Ride * ride = get_ride(vehicle->ride); @@ -7445,7 +7445,7 @@ static bool loc_6DB38B(rct_vehicle * vehicle, rct_tile_element * tileElement) sint32 bankStart = track_get_actual_bank_3(vehicle, tileElement); // Get vangle - sint32 trackType = tileElement->properties.track.type; + sint32 trackType = track_element_get_type(tileElement); sint32 vangleStart = TrackDefinitions[trackType].vangle_start; if (vangleStart != _vehicleVAngleEndF64E36 || bankStart != _vehicleBankEndF64E37) @@ -8003,8 +8003,8 @@ loc_6DB358: regs.edx = z; regs.bl = direction; } - if (tileElement->properties.track.type == TRACK_ELEM_LEFT_REVERSER || - tileElement->properties.track.type == TRACK_ELEM_RIGHT_REVERSER) + if (track_element_get_type(tileElement) == TRACK_ELEM_LEFT_REVERSER || + track_element_get_type(tileElement) == TRACK_ELEM_RIGHT_REVERSER) { if (!vehicle->is_child && vehicle->velocity <= 0x30000) { @@ -8040,7 +8040,7 @@ loc_6DB41D: if ((vehicleEntry->flags & VEHICLE_ENTRY_FLAG_30) && vehicle->var_CD < 7) { - trackType = tileElement->properties.track.type; + trackType = track_element_get_type(tileElement); if (trackType == TRACK_ELEM_FLAT) { loc_6DB481(vehicle); @@ -8077,7 +8077,7 @@ loc_6DB41D: vehicle->update_flags |= VEHICLE_UPDATE_FLAG_0; } - trackType = tileElement->properties.track.type; + trackType = track_element_get_type(tileElement); if (trackType != TRACK_ELEM_BRAKES) { vehicle->target_seat_rotation = track_element_get_seat_rotation(tileElement); @@ -8393,7 +8393,7 @@ static bool vehicle_update_track_motion_backwards_get_new_track(rct_vehicle * ve } tileElement = trackBeginEnd.begin_element; - trackType = tileElement->properties.track.type; + trackType = track_element_get_type(tileElement); if (trackType == TRACK_ELEM_LEFT_REVERSER || trackType == TRACK_ELEM_RIGHT_REVERSER) { return false; @@ -8468,7 +8468,7 @@ static bool vehicle_update_track_motion_backwards_get_new_track(rct_vehicle * ve { if (vehicle->next_vehicle_on_train == SPRITE_INDEX_NULL) { - trackType = tileElement->properties.track.type; + trackType = track_element_get_type(tileElement); if (!(TrackFlags[trackType] & TRACK_ELEM_FLAG_DOWN)) { _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_9; @@ -8492,7 +8492,7 @@ static bool vehicle_update_track_motion_backwards_get_new_track(rct_vehicle * ve } } - trackType = tileElement->properties.track.type; + trackType = track_element_get_type(tileElement); if (trackType != TRACK_ELEM_BRAKES) { vehicle->target_seat_rotation = track_element_get_seat_rotation(tileElement); @@ -8866,7 +8866,7 @@ loc_6DC476: } vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_0; - vehicle->track_type = (tileElement->properties.track.type << 2) | (direction & 3); + vehicle->track_type = (track_element_get_type(tileElement) << 2) | (direction & 3); vehicle->var_CF = tile_element_get_brake_booster_speed(tileElement); regs.ax = 0; @@ -9117,7 +9117,7 @@ loc_6DCA9A: } } - vehicle->track_type = (tileElement->properties.track.type << 2) | (direction & 3); + vehicle->track_type = (track_element_get_type(tileElement) << 2) | (direction & 3); vehicle->var_CF = track_element_get_seat_rotation(tileElement) << 1; // There are two bytes before the move info list diff --git a/src/openrct2/ride/coaster/BolligerMabillardTrack.cpp b/src/openrct2/ride/coaster/BolligerMabillardTrack.cpp index b5d65e2690..36a5692bb3 100644 --- a/src/openrct2/ride/coaster/BolligerMabillardTrack.cpp +++ b/src/openrct2/ride/coaster/BolligerMabillardTrack.cpp @@ -92,7 +92,7 @@ void bolliger_mabillard_track_station(paint_session * session, uint8 rideIndex, { 17155, 17151, SPR_STATION_BASE_A_NW_SE }, }; - if (tileElement->properties.track.type == TRACK_ELEM_END_STATION) + if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION) { sub_98197C_rotated(session, direction, imageIds[direction][1] | session->TrackColours[SCHEME_TRACK], 0, 0, 32, 20, 1, height, 0, 6, height + 3); diff --git a/src/openrct2/ride/coaster/CorkscrewRollerCoaster.cpp b/src/openrct2/ride/coaster/CorkscrewRollerCoaster.cpp index 1049bbfdb0..b91fa313d1 100644 --- a/src/openrct2/ride/coaster/CorkscrewRollerCoaster.cpp +++ b/src/openrct2/ride/coaster/CorkscrewRollerCoaster.cpp @@ -93,7 +93,7 @@ static void corkscrew_rc_track_station(paint_session * session, uint8 rideIndex, { 16237, 16233, SPR_STATION_BASE_A_NW_SE }, }; - if (tileElement->properties.track.type == TRACK_ELEM_END_STATION) + if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION) { sub_98197C_rotated(session, direction, imageIds[direction][1] | session->TrackColours[SCHEME_TRACK], 0, 0, 32, 20, 1, height, 0, 6, height + 3); diff --git a/src/openrct2/ride/coaster/FlyingRollerCoaster.cpp b/src/openrct2/ride/coaster/FlyingRollerCoaster.cpp index f021409908..2d75e148bb 100644 --- a/src/openrct2/ride/coaster/FlyingRollerCoaster.cpp +++ b/src/openrct2/ride/coaster/FlyingRollerCoaster.cpp @@ -164,7 +164,7 @@ static void flying_rc_track_station(paint_session * session, uint8 rideIndex, ui { 17155, 17151, SPR_STATION_BASE_A_NW_SE }, }; - if (tileElement->properties.track.type == TRACK_ELEM_END_STATION) + if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION) { sub_98197C_rotated(session, direction, imageIds[direction][1] | session->TrackColours[SCHEME_TRACK], 0, 0, 32, 20, 1, height, 0, 6, height + 3); diff --git a/src/openrct2/ride/coaster/GigaCoaster.cpp b/src/openrct2/ride/coaster/GigaCoaster.cpp index f0ffdf4646..2bc2703472 100644 --- a/src/openrct2/ride/coaster/GigaCoaster.cpp +++ b/src/openrct2/ride/coaster/GigaCoaster.cpp @@ -112,7 +112,7 @@ static void giga_rc_track_station(paint_session * session, uint8 rideIndex, uint { 18085, 18077, SPR_STATION_BASE_A_NW_SE }, }; - if (tileElement->properties.track.type == TRACK_ELEM_END_STATION) + if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION) { sub_98197C_rotated(session, direction, imageIds[direction][1] | session->TrackColours[SCHEME_TRACK], 0, 0, 32, 20, 1, height, 0, 6, height + 3); diff --git a/src/openrct2/ride/coaster/JuniorRollerCoaster.cpp b/src/openrct2/ride/coaster/JuniorRollerCoaster.cpp index f893d2e146..bbbaf17dc6 100644 --- a/src/openrct2/ride/coaster/JuniorRollerCoaster.cpp +++ b/src/openrct2/ride/coaster/JuniorRollerCoaster.cpp @@ -1654,7 +1654,7 @@ void junior_rc_paint_station(paint_session * session, uint8 rideIndex, uint8 tra sub_98197C(session, imageId, 0, 0, 32, 28, 1, height - 2, 0, 2, height, get_current_rotation()); // height += 2 (height) - if (tileElement->properties.track.type == TRACK_ELEM_END_STATION && rideType == RIDE_TYPE_JUNIOR_ROLLER_COASTER) + if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && rideType == RIDE_TYPE_JUNIOR_ROLLER_COASTER) { imageId = junior_rc_track_pieces_block_brake[isBraked][direction] | session->TrackColours[SCHEME_TRACK]; } @@ -1676,7 +1676,7 @@ void junior_rc_paint_station(paint_session * session, uint8 rideIndex, uint8 tra sub_98197C(session, imageId, 0, 0, 28, 32, 1, height - 2, 2, 0, height, get_current_rotation()); // height += 2 (height) - if (tileElement->properties.track.type == TRACK_ELEM_END_STATION && rideType == RIDE_TYPE_JUNIOR_ROLLER_COASTER) + if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && rideType == RIDE_TYPE_JUNIOR_ROLLER_COASTER) { imageId = junior_rc_track_pieces_block_brake[isBraked][direction] | session->TrackColours[SCHEME_TRACK]; } diff --git a/src/openrct2/ride/coaster/LayDownRollerCoaster.cpp b/src/openrct2/ride/coaster/LayDownRollerCoaster.cpp index 199923c409..e976edf60a 100644 --- a/src/openrct2/ride/coaster/LayDownRollerCoaster.cpp +++ b/src/openrct2/ride/coaster/LayDownRollerCoaster.cpp @@ -166,7 +166,7 @@ static void lay_down_rc_track_station(paint_session * session, uint8 rideIndex, { 16237, 16233, SPR_STATION_BASE_A_NW_SE }, }; - if (tileElement->properties.track.type == TRACK_ELEM_END_STATION) + if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION) { sub_98197C_rotated(session, direction, imageIds[direction][1] | session->TrackColours[SCHEME_TRACK], 0, 0, 32, 20, 1, height, 0, 6, height + 3); diff --git a/src/openrct2/ride/coaster/LimLaunchedRollerCoaster.cpp b/src/openrct2/ride/coaster/LimLaunchedRollerCoaster.cpp index f03b9d1b5d..d1271fb1d2 100644 --- a/src/openrct2/ride/coaster/LimLaunchedRollerCoaster.cpp +++ b/src/openrct2/ride/coaster/LimLaunchedRollerCoaster.cpp @@ -37,7 +37,7 @@ static void lim_launched_rc_track_station(paint_session * session, uint8 rideInd { 15019, 15021, SPR_STATION_BASE_B_NW_SE }, }; - if (tileElement->properties.track.type == TRACK_ELEM_END_STATION) + if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION) { sub_98197C_rotated(session, direction, imageIds[direction][1] | session->TrackColours[SCHEME_TRACK], 0, 0, 32, 20, 1, height, 0, 6, height + 3); diff --git a/src/openrct2/ride/coaster/MineTrainCoaster.cpp b/src/openrct2/ride/coaster/MineTrainCoaster.cpp index a89e4ff311..e510e7ff4c 100644 --- a/src/openrct2/ride/coaster/MineTrainCoaster.cpp +++ b/src/openrct2/ride/coaster/MineTrainCoaster.cpp @@ -92,7 +92,7 @@ static void mine_train_rc_track_station(paint_session * session, uint8 rideIndex sub_98197C_rotated(session, direction, imageIds[direction][2] | session->TrackColours[SCHEME_MISC], 0, 0, 32, 28, 1, height - 2, 0, 2, height); - if (tileElement->properties.track.type == TRACK_ELEM_END_STATION) + if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION) { sub_98199C_rotated(session, direction, imageIds[direction][1] | session->TrackColours[SCHEME_TRACK], 0, 0, 32, 20, 1, height, 0, 0, height); diff --git a/src/openrct2/ride/coaster/MiniRollerCoaster.cpp b/src/openrct2/ride/coaster/MiniRollerCoaster.cpp index d679f6b536..f7030ba61b 100644 --- a/src/openrct2/ride/coaster/MiniRollerCoaster.cpp +++ b/src/openrct2/ride/coaster/MiniRollerCoaster.cpp @@ -114,7 +114,7 @@ static void mini_rc_track_station(paint_session * session, uint8 rideIndex, uint { 18747, 18743, SPR_STATION_BASE_A_NW_SE }, }; - if (tileElement->properties.track.type == TRACK_ELEM_END_STATION) + if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION) { sub_98197C_rotated(session, direction, imageIds[direction][1] | session->TrackColours[SCHEME_TRACK], 0, 0, 32, 20, 1, height, 0, 6, height + 3); diff --git a/src/openrct2/ride/coaster/MultiDimensionRollerCoaster.cpp b/src/openrct2/ride/coaster/MultiDimensionRollerCoaster.cpp index d2f94b4bd4..fef0df812b 100644 --- a/src/openrct2/ride/coaster/MultiDimensionRollerCoaster.cpp +++ b/src/openrct2/ride/coaster/MultiDimensionRollerCoaster.cpp @@ -120,7 +120,7 @@ static void multi_dimension_rc_track_station(paint_session * session, uint8 ride LocationXY16 position = session->MapPosition; - if (tileElement->properties.track.type == TRACK_ELEM_END_STATION) + if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION) { sub_98197C_rotated(session, direction, imageIds[direction][1] | session->TrackColours[SCHEME_TRACK], 0, 0, 32, 26, 1, height, 0, 3, height + 3); diff --git a/src/openrct2/ride/coaster/StandUpRollerCoaster.cpp b/src/openrct2/ride/coaster/StandUpRollerCoaster.cpp index 9f5ccce5b7..93a5769a86 100644 --- a/src/openrct2/ride/coaster/StandUpRollerCoaster.cpp +++ b/src/openrct2/ride/coaster/StandUpRollerCoaster.cpp @@ -87,7 +87,7 @@ static void stand_up_rc_track_station(paint_session * session, uint8 rideIndex, { 25568, 25572, SPR_STATION_BASE_A_NW_SE }, }; - if (tileElement->properties.track.type == TRACK_ELEM_END_STATION) + if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION) { sub_98197C_rotated(session, direction, imageIds[direction][1] | session->TrackColours[SCHEME_TRACK], 0, 6, 32, 20, 1, height, 0, 6, height + 3); diff --git a/src/openrct2/ride/coaster/WildMouse.cpp b/src/openrct2/ride/coaster/WildMouse.cpp index 5e1e7e54a5..7ef84825dd 100644 --- a/src/openrct2/ride/coaster/WildMouse.cpp +++ b/src/openrct2/ride/coaster/WildMouse.cpp @@ -203,7 +203,7 @@ static void wild_mouse_track_station(paint_session * session, uint8 rideIndex, u SPR_STATION_BASE_B_NW_SE, }; - sint32 trackType = tileElement->properties.track.type; + sint32 trackType = track_element_get_type(tileElement); sub_98197C_rotated(session, direction, baseImageIds[direction] | session->TrackColours[SCHEME_MISC], 0, 0, 32, 28, 2, height - 2, 0, 2, height); if (trackType == TRACK_ELEM_END_STATION) diff --git a/src/openrct2/ride/coaster/WoodenRollerCoaster.cpp b/src/openrct2/ride/coaster/WoodenRollerCoaster.cpp index 07d75050e8..62c0298db8 100644 --- a/src/openrct2/ride/coaster/WoodenRollerCoaster.cpp +++ b/src/openrct2/ride/coaster/WoodenRollerCoaster.cpp @@ -472,7 +472,7 @@ static void wooden_rc_track_station(paint_session * session, uint8 rideIndex, ui { SPR_WOODEN_RC_STATION_NW_SE, SPR_WOODEN_RC_STATION_RAILS_NW_SE }, }; - sint32 trackType = tileElement->properties.track.type; + sint32 trackType = track_element_get_type(tileElement); if (trackType == TRACK_ELEM_END_STATION) { wooden_rc_track_paint(session, _wooden_rc_block_brakes_image_ids[direction][0], diff --git a/src/openrct2/ride/ride.c b/src/openrct2/ride/ride.c index a9c99691e5..96f5e642ce 100644 --- a/src/openrct2/ride/ride.c +++ b/src/openrct2/ride/ride.c @@ -495,9 +495,9 @@ bool ride_try_get_origin_element(sint32 rideIndex, rct_xy_element *output) // Check if it's not the station or ??? (but allow end piece of station) bool specialTrackPiece = ( - it.element->properties.track.type != TRACK_ELEM_BEGIN_STATION && - it.element->properties.track.type != TRACK_ELEM_MIDDLE_STATION && - (TrackSequenceProperties[it.element->properties.track.type][0] & TRACK_SEQUENCE_FLAG_ORIGIN) + track_element_get_type(it.element) != TRACK_ELEM_BEGIN_STATION && + track_element_get_type(it.element) != TRACK_ELEM_MIDDLE_STATION && + (TrackSequenceProperties[track_element_get_type(it.element)][0] & TRACK_SEQUENCE_FLAG_ORIGIN) ); // Set result tile to this track piece if first found track or a ??? @@ -553,8 +553,8 @@ bool track_block_get_next_from_zero(sint16 x, sint16 y, sint16 z_start, uint8 ri if (tile_element_get_track_sequence(tileElement) != 0) continue; - const rct_preview_track* nextTrackBlock = get_track_def_from_ride(ride, tileElement->properties.track.type); - const rct_track_coordinates* nextTrackCoordinate = get_track_coord_from_ride(ride, tileElement->properties.track.type); + const rct_preview_track* nextTrackBlock = get_track_def_from_ride(ride, track_element_get_type(tileElement)); + const rct_track_coordinates* nextTrackCoordinate = get_track_coord_from_ride(ride, track_element_get_type(tileElement)); uint8 nextRotation = tile_element_get_direction_with_offset(tileElement, nextTrackCoordinate->rotation_begin) | @@ -592,11 +592,11 @@ bool track_block_get_next(rct_xy_element *input, rct_xy_element *output, sint32 uint8 rideIndex = track_element_get_ride_index(input->element); Ride* ride = get_ride(rideIndex); - const rct_preview_track* trackBlock = get_track_def_from_ride(ride, input->element->properties.track.type); + const rct_preview_track* trackBlock = get_track_def_from_ride(ride, track_element_get_type(input->element)); uint8 sequence = tile_element_get_track_sequence(input->element); trackBlock += sequence; - const rct_track_coordinates* trackCoordinate = get_track_coord_from_ride(ride, input->element->properties.track.type); + const rct_track_coordinates* trackCoordinate = get_track_coord_from_ride(ride, track_element_get_type(input->element)); sint32 x = input->x; sint32 y = input->y; @@ -674,8 +674,8 @@ bool track_block_get_previous_from_zero(sint16 x, sint16 y, sint16 z, uint8 ride if (track_element_get_ride_index(tileElement) != rideIndex) continue; - const rct_preview_track* nextTrackBlock = get_track_def_from_ride(ride, tileElement->properties.track.type); - const rct_track_coordinates* nextTrackCoordinate = get_track_coord_from_ride(ride, tileElement->properties.track.type); + const rct_preview_track* nextTrackBlock = get_track_def_from_ride(ride, track_element_get_type(tileElement)); + const rct_track_coordinates* nextTrackCoordinate = get_track_coord_from_ride(ride, track_element_get_type(tileElement)); nextTrackBlock += tile_element_get_track_sequence(tileElement); if ((nextTrackBlock + 1)->index != 255) @@ -721,7 +721,7 @@ bool track_block_get_previous_from_zero(sint16 x, sint16 y, sint16 z, uint8 ride outTrackBeginEnd->begin_z = tileElement->base_height * 8; outTrackBeginEnd->begin_z += - get_track_def_from_ride(ride, tileElement->properties.track.type)->z - + get_track_def_from_ride(ride, track_element_get_type(tileElement))->z - nextTrackBlock->z; outTrackBeginEnd->begin_direction = nextRotation; @@ -750,11 +750,11 @@ bool track_block_get_previous(sint32 x, sint32 y, rct_tile_element *tileElement, uint8 rideIndex = track_element_get_ride_index(tileElement); Ride* ride = get_ride(rideIndex); - const rct_preview_track* trackBlock = get_track_def_from_ride(ride, tileElement->properties.track.type); + const rct_preview_track* trackBlock = get_track_def_from_ride(ride, track_element_get_type(tileElement)); uint8 sequence = tile_element_get_track_sequence(tileElement); trackBlock += sequence; - const rct_track_coordinates* trackCoordinate = get_track_coord_from_ride(ride, tileElement->properties.track.type); + const rct_track_coordinates* trackCoordinate = get_track_coord_from_ride(ride, track_element_get_type(tileElement)); sint32 z = tileElement->base_height * 8; @@ -1219,7 +1219,7 @@ sint32 sub_6C683D(sint32* x, sint32* y, sint32* z, sint32 direction, sint32 type if ((tile_element_get_direction(tileElement)) != direction) continue; - if (type != tileElement->properties.track.type) + if (type != track_element_get_type(tileElement)) continue; successTileElement = tileElement; @@ -1298,7 +1298,7 @@ sint32 sub_6C683D(sint32* x, sint32* y, sint32* z, sint32 direction, sint32 type if (tile_element_get_track_sequence(tileElement) != trackBlock[i].index) continue; - if (type == tileElement->properties.track.type) { + if (type == track_element_get_type(tileElement)) { successTileElement = tileElement; break; } @@ -1389,7 +1389,7 @@ void ride_remove_provisional_track_piece() next_track.x, flags | ((direction & 3) << 8), next_track.y, - next_track.element->properties.track.type | (tile_element_get_track_sequence(next_track.element) << 8), + track_element_get_type(next_track.element) | (tile_element_get_track_sequence(next_track.element) << 8), GAME_COMMAND_REMOVE_TRACK, z, 0 @@ -1512,7 +1512,7 @@ void ride_construction_set_default_next_piece() return; } tileElement = trackBeginEnd.begin_element; - trackType = tileElement->properties.track.type; + trackType = track_element_get_type(tileElement); if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_NO_TRACK)) { ride_construction_reset_current_piece(); @@ -1574,7 +1574,7 @@ void ride_construction_set_default_next_piece() return; } tileElement = xyElement.element; - trackType = tileElement->properties.track.type; + trackType = track_element_get_type(tileElement); // Set whether track is covered _currentTrackAlternative &= ~RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; @@ -1659,7 +1659,7 @@ void ride_select_next_section() _currentTrackBeginY = outputElement.y; _currentTrackBeginZ = z; _currentTrackPieceDirection = direction; - _currentTrackPieceType = tileElement->properties.track.type; + _currentTrackPieceType = track_element_get_type(tileElement); _currentTrackSelectionFlags = 0; _rideConstructionArrowPulseTime = 0; ride_construction_set_default_next_piece(); @@ -1671,7 +1671,7 @@ void ride_select_next_section() _currentTrackBeginY = y; _currentTrackBeginZ = z; _currentTrackPieceDirection = tile_element_get_direction(tileElement); - _currentTrackPieceType = tileElement->properties.track.type; + _currentTrackPieceType = track_element_get_type(tileElement); _currentTrackSelectionFlags = 0; _rideConstructionArrowPulseTime = 0; window_ride_construction_update_active_elements(); @@ -1707,7 +1707,7 @@ void ride_select_previous_section() _currentTrackBeginY = trackBeginEnd.begin_y; _currentTrackBeginZ = trackBeginEnd.begin_z; _currentTrackPieceDirection = trackBeginEnd.begin_direction; - _currentTrackPieceType = trackBeginEnd.begin_element->properties.track.type; + _currentTrackPieceType = track_element_get_type(trackBeginEnd.begin_element); _currentTrackSelectionFlags = 0; _rideConstructionArrowPulseTime = 0; window_ride_construction_update_active_elements(); @@ -1717,7 +1717,7 @@ void ride_select_previous_section() _currentTrackBeginY = trackBeginEnd.end_y; _currentTrackBeginZ = trackBeginEnd.begin_z; _currentTrackPieceDirection = trackBeginEnd.end_direction; - _currentTrackPieceType = tileElement->properties.track.type; + _currentTrackPieceType = track_element_get_type(tileElement); _currentTrackSelectionFlags = 0; _rideConstructionArrowPulseTime = 0; ride_construction_set_default_next_piece(); @@ -1859,7 +1859,7 @@ sint32 ride_modify(rct_xy_element *input) y = tileElement.y; z = tileElement.element->base_height * 8; direction = tile_element_get_direction(tileElement.element); - type = tileElement.element->properties.track.type; + type = track_element_get_type(tileElement.element); if (sub_6C683D(&x, &y, &z, direction, type, 0, NULL, 0)) return 0; @@ -3295,7 +3295,7 @@ static void ride_shop_connected(Ride* ride, sint32 ride_idx) } while (!tile_element_is_last_for_tile(tileElement++)); uint16 entrance_directions = 0; - uint8 track_type = tileElement->properties.track.type; + uint8 track_type = track_element_get_type(tileElement); ride = get_ride(track_element_get_ride_index(tileElement)); if (ride == NULL) { @@ -3445,16 +3445,18 @@ static void ride_entrance_set_map_tooltip(rct_tile_element *tileElement) void ride_set_map_tooltip(rct_tile_element *tileElement) { - if (tile_element_get_type(tileElement) == TILE_ELEMENT_TYPE_ENTRANCE) { + if (tile_element_get_type(tileElement) == TILE_ELEMENT_TYPE_ENTRANCE) + { ride_entrance_set_map_tooltip(tileElement); - } else { - if ( - tileElement->properties.track.type == 2 || - tileElement->properties.track.type == 3 || - tileElement->properties.track.type == 1 - ) { + } + else + { + if (track_element_is_station(tileElement)) + { ride_station_set_map_tooltip(tileElement); - } else { + } + else + { ride_track_set_map_tooltip(tileElement); } } @@ -4211,8 +4213,8 @@ static sint32 ride_check_block_brakes(rct_xy_element *input, rct_xy_element *out track_circuit_iterator_begin(&it, *input); while (track_circuit_iterator_next(&it)) { - if (it.current.element->properties.track.type == TRACK_ELEM_BLOCK_BRAKES) { - type = it.last.element->properties.track.type; + if (track_element_get_type(it.current.element) == TRACK_ELEM_BLOCK_BRAKES) { + type = track_element_get_type(it.last.element); if (type == TRACK_ELEM_END_STATION) { gGameCommandErrorText = STR_BLOCK_BRAKES_CANNOT_BE_USED_DIRECTLY_AFTER_STATION; *output = it.current; @@ -4262,7 +4264,7 @@ static bool ride_check_track_contains_inversions(rct_xy_element *input, rct_xy_e track_circuit_iterator it; track_circuit_iterator_begin(&it, *input); while (track_circuit_iterator_next(&it)) { - sint32 trackType = it.current.element->properties.track.type; + sint32 trackType = track_element_get_type(it.current.element); if (TrackFlags[trackType] & TRACK_ELEM_FLAG_INVERSION_TO_NORMAL) { *output = it.current; return true; @@ -4293,7 +4295,7 @@ static bool ride_check_track_contains_banked(rct_xy_element *input, rct_xy_eleme track_circuit_iterator it; track_circuit_iterator_begin(&it, *input); while (track_circuit_iterator_next(&it)) { - sint32 trackType = output->element->properties.track.type; + sint32 trackType = track_element_get_type(output->element); if (TrackFlags[trackType] & TRACK_ELEM_FLAG_BANKED) { *output = it.current; return true; @@ -4330,7 +4332,7 @@ static sint32 ride_check_station_length(rct_xy_element *input, rct_xy_element *o rct_xy_element last_good_station = *output; do{ - if (TrackSequenceProperties[output->element->properties.track.type][0] & TRACK_SEQUENCE_FLAG_ORIGIN){ + if (TrackSequenceProperties[track_element_get_type(output->element)][0] & TRACK_SEQUENCE_FLAG_ORIGIN){ num_station_elements++; last_good_station = *output; } @@ -4373,7 +4375,7 @@ static bool ride_check_start_and_end_is_station(rct_xy_element *input, rct_xy_el // Check back of the track track_get_back(input, &trackBack); - trackType = trackBack.element->properties.track.type; + trackType = track_element_get_type(trackBack.element); if (!(TrackSequenceProperties[trackType][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) { return false; } @@ -4383,7 +4385,7 @@ static bool ride_check_start_and_end_is_station(rct_xy_element *input, rct_xy_el // Check front of the track track_get_front(input, &trackFront); - trackType = trackFront.element->properties.track.type; + trackType = track_element_get_type(trackFront.element); if (!(TrackSequenceProperties[trackType][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) { return false; } @@ -4415,13 +4417,13 @@ static void ride_set_boat_hire_return_point(Ride *ride, rct_xy_element *startEle sint32 y = trackBeginEnd.begin_y; sint32 z = trackBeginEnd.begin_z; sint32 direction = trackBeginEnd.begin_direction; - trackType = trackBeginEnd.begin_element->properties.track.type; + trackType = track_element_get_type(trackBeginEnd.begin_element); sub_6C683D(&x, &y, &z, direction, trackType, 0, &returnTrackElement, 0); returnX = x; returnY = y; }; - trackType = returnTrackElement->properties.track.type; + trackType = track_element_get_type(returnTrackElement); sint32 elementReturnDirection = TrackCoordinates[trackType].rotation_begin; ride->boat_hire_return_direction = (returnTrackElement->type + elementReturnDirection) & 3; ride->boat_hire_return_position.x = returnX >> 5; @@ -4479,7 +4481,7 @@ static void ride_set_block_points(rct_xy_element *startElement) { rct_xy_element currentElement = *startElement; do { - sint32 trackType = currentElement.element->properties.track.type; + sint32 trackType = track_element_get_type(currentElement.element); switch (trackType) { case TRACK_ELEM_END_STATION: case TRACK_ELEM_CABLE_LIFT_HILL: @@ -4628,7 +4630,7 @@ static rct_vehicle *vehicle_create_car( z += RideData5[ride->type].z_offset; - vehicle->track_type = tileElement->properties.track.type << 2; + vehicle->track_type = track_element_get_type(tileElement) << 2; vehicle->track_progress = 0; vehicle->status = 0; vehicle->sub_state = 0; @@ -4703,7 +4705,7 @@ static rct_vehicle *vehicle_create_car( z += RideData5[ride->type].z_offset; sprite_move(x, y, z, (rct_sprite*)vehicle); - vehicle->track_type = (tileElement->properties.track.type << 2) | (vehicle->sprite_direction >> 3); + vehicle->track_type = (track_element_get_type(tileElement) << 2) | (vehicle->sprite_direction >> 3); vehicle->track_progress = 31; if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_MINI_GOLF) { vehicle->track_progress = 15; @@ -4825,7 +4827,7 @@ static void ride_create_vehicles_find_first_block(Ride *ride, rct_xy_element *ou break; } - sint32 trackType = trackElement->properties.track.type; + sint32 trackType = track_element_get_type(trackElement); switch (trackType) { case TRACK_ELEM_25_DEG_UP_TO_FLAT: case TRACK_ELEM_60_DEG_UP_TO_FLAT: @@ -4842,7 +4844,7 @@ static void ride_create_vehicles_find_first_block(Ride *ride, rct_xy_element *ou rct_tile_element *tileElement = map_get_first_element_at(trackBeginEnd.begin_x >> 5, trackBeginEnd.begin_y >> 5); do { if (tile_element_get_type(tileElement) != TILE_ELEMENT_TYPE_TRACK) continue; - if (tileElement->properties.track.type != trackType) continue; + if (track_element_get_type(tileElement) != trackType) continue; if (tile_element_get_track_sequence(tileElement) != 0) continue; if (tileElement->base_height != trackBeginEnd.begin_z / 8) continue; outXYElement->x = trackBeginEnd.begin_x; @@ -5026,7 +5028,7 @@ static bool ride_initialise_cable_lift_track(Ride *ride, bool isApplying) if (tile_element_get_type(tileElement) != TILE_ELEMENT_TYPE_TRACK) continue; if (tileElement->base_height != z) continue; - if (!(TrackSequenceProperties[tileElement->properties.track.type][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) { + if (!(TrackSequenceProperties[track_element_get_type(tileElement)][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) { continue; } success = true; @@ -5051,7 +5053,7 @@ static bool ride_initialise_cable_lift_track(Ride *ride, bool isApplying) }); while (track_circuit_iterator_previous(&it)) { tileElement = it.current.element; - sint32 trackType = tileElement->properties.track.type; + sint32 trackType = track_element_get_type(tileElement); uint16 flags = 16; switch (state) { @@ -5087,7 +5089,7 @@ static bool ride_initialise_cable_lift_track(Ride *ride, bool isApplying) if (isApplying) { z = tileElement->base_height * 8; sint32 direction = tile_element_get_direction(tileElement); - trackType = tileElement->properties.track.type; + trackType = track_element_get_type(tileElement); x = it.current.x; y = it.current.y; sub_6C683D(&x, &y, &z, direction, trackType, 0, &tileElement, flags); @@ -5253,10 +5255,10 @@ static rct_tile_element *loc_6B4F6B(sint32 rideIndex, sint32 x, sint32 y) continue; if (RideProperties[ride->type].flags & RIDE_TYPE_FLAG_FLAT_RIDE) { - if (!(FlatRideTrackSequenceProperties[tileElement->properties.track.type][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) + if (!(FlatRideTrackSequenceProperties[track_element_get_type(tileElement)][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) continue; } else { - if (!(TrackSequenceProperties[tileElement->properties.track.type][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) + if (!(TrackSequenceProperties[track_element_get_type(tileElement)][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) continue; } @@ -5548,7 +5550,7 @@ sint32 ride_get_refund_price(sint32 ride_id) sint32 z = it.element->base_height * 8; uint8 rotation = tile_element_get_direction(it.element); - uint8 type = it.element->properties.track.type; + uint8 type = track_element_get_type(it.element); if (type != TRACK_ELEM_INVERTED_90_DEG_UP_TO_FLAT_QUARTER_LOOP){ money32 removePrice = game_do_command( @@ -5931,7 +5933,7 @@ void game_command_callback_ride_construct_placed_back(sint32 eax, sint32 ebx, si _currentTrackBeginY = trackBeginEnd.begin_y; _currentTrackBeginZ = trackBeginEnd.begin_z; _currentTrackPieceDirection = trackBeginEnd.begin_direction; - _currentTrackPieceType = trackBeginEnd.begin_element->properties.track.type; + _currentTrackPieceType = track_element_get_type(trackBeginEnd.begin_element); _currentTrackSelectionFlags = 0; _rideConstructionArrowPulseTime = 0; _rideConstructionState = RIDE_CONSTRUCTION_STATE_SELECTED; @@ -5964,7 +5966,7 @@ void game_command_callback_ride_construct_placed_front(sint32 eax, sint32 ebx, s _currentTrackBeginY = next_track.y; _currentTrackBeginZ = z; _currentTrackPieceDirection = tile_element_get_direction(next_track.element); - _currentTrackPieceType = next_track.element->properties.track.type; + _currentTrackPieceType = track_element_get_type(next_track.element); _currentTrackSelectionFlags = 0; _rideConstructionArrowPulseTime = 0; _rideConstructionState = RIDE_CONSTRUCTION_STATE_SELECTED; @@ -6648,9 +6650,9 @@ void ride_get_entrance_or_exit_position_from_screen_position(sint32 screenX, sin { if (track_element_get_ride_index(tileElement) == gRideEntranceExitPlaceRideIndex) { - if (TrackSequenceProperties[tileElement->properties.track.type][0] & TRACK_SEQUENCE_FLAG_ORIGIN) + if (TrackSequenceProperties[track_element_get_type(tileElement)][0] & TRACK_SEQUENCE_FLAG_ORIGIN) { - if (tileElement->properties.track.type == TRACK_ELEM_MAZE) + if (track_element_get_type(tileElement) == TRACK_ELEM_MAZE) { gRideEntranceExitPlaceStationIndex = 0; } @@ -6717,7 +6719,7 @@ void ride_get_entrance_or_exit_position_from_screen_position(sint32 screenX, sin continue; if (track_element_get_ride_index(tileElement) != gRideEntranceExitPlaceRideIndex) continue; - if (tileElement->properties.track.type == TRACK_ELEM_INVERTED_90_DEG_UP_TO_FLAT_QUARTER_LOOP) + if (track_element_get_type(tileElement) == TRACK_ELEM_INVERTED_90_DEG_UP_TO_FLAT_QUARTER_LOOP) { gRideEntranceExitPlaceDirection = direction ^ 2; *outDirection = direction ^ 2; @@ -6727,7 +6729,7 @@ void ride_get_entrance_or_exit_position_from_screen_position(sint32 screenX, sin continue; sint32 eax = (direction + 2 - tile_element_get_direction(tileElement)) & TILE_ELEMENT_DIRECTION_MASK; - if (FlatRideTrackSequenceProperties[tileElement->properties.track.type][tile_element_get_track_sequence(tileElement)] & (1 << eax)) + if (FlatRideTrackSequenceProperties[track_element_get_type(tileElement)][tile_element_get_track_sequence(tileElement)] & (1 << eax)) { gRideEntranceExitPlaceDirection = direction ^ 2; *outDirection = direction ^ 2; @@ -6774,7 +6776,7 @@ void ride_get_entrance_or_exit_position_from_screen_position(sint32 screenX, sin if (tile_element_get_station(tileElement) != gRideEntranceExitPlaceStationIndex) continue; - switch (tileElement->properties.track.type) + switch (track_element_get_type(tileElement)) { case TRACK_ELEM_END_STATION: case TRACK_ELEM_BEGIN_STATION: @@ -6823,7 +6825,7 @@ bool ride_select_backwards_from_front() _currentTrackBeginY = trackBeginEnd.begin_y; _currentTrackBeginZ = trackBeginEnd.begin_z; _currentTrackPieceDirection = trackBeginEnd.begin_direction; - _currentTrackPieceType = trackBeginEnd.begin_element->properties.track.type; + _currentTrackPieceType = track_element_get_type(trackBeginEnd.begin_element); _currentTrackSelectionFlags = 0; _rideConstructionArrowPulseTime = 0; return true; @@ -6850,7 +6852,7 @@ bool ride_select_forwards_from_back() _currentTrackBeginY = next_track.y; _currentTrackBeginZ = z; _currentTrackPieceDirection = tile_element_get_direction(next_track.element); - _currentTrackPieceType = next_track.element->properties.track.type; + _currentTrackPieceType = track_element_get_type(next_track.element); _currentTrackSelectionFlags = 0; _rideConstructionArrowPulseTime = 0; return true; @@ -7097,7 +7099,7 @@ static sint32 ride_get_track_length(Ride * ride) if (tile_element_get_type(tileElement) != TILE_ELEMENT_TYPE_TRACK) continue; - trackType = tileElement->properties.track.type; + trackType = track_element_get_type(tileElement); if (!(TrackSequenceProperties[trackType][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) continue; @@ -7123,7 +7125,7 @@ static sint32 ride_get_track_length(Ride * ride) track_circuit_iterator_begin(&it, (rct_xy_element) {x, y, tileElement}); while (track_circuit_iterator_next(&it)) { - trackType = it.current.element->properties.track.type; + trackType = track_element_get_type(it.current.element); result += TrackPieceLengths[trackType]; } return result; @@ -7513,7 +7515,7 @@ void sub_6CB945(sint32 rideIndex) if (tile_element_get_type(tileElement) != TILE_ELEMENT_TYPE_TRACK) continue; if (track_element_get_ride_index(tileElement) != rideIndex) continue; if (tile_element_get_track_sequence(tileElement) != 0) continue; - if (!(TrackSequenceProperties[tileElement->properties.track.type][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) continue; + if (!(TrackSequenceProperties[track_element_get_type(tileElement)][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) continue; trackFound = true; break; @@ -7536,7 +7538,7 @@ void sub_6CB945(sint32 rideIndex) continue; } - const rct_preview_track *trackBlock = get_track_def_from_ride(ride, tileElement->properties.track.type); + const rct_preview_track *trackBlock = get_track_def_from_ride(ride, track_element_get_type(tileElement)); while ((++trackBlock)->index != 0xFF) { LocationXYZ16 blockLocation = location; map_offset_with_rotation(&blockLocation.x, &blockLocation.y, trackBlock->x, trackBlock->y, direction); @@ -7546,7 +7548,7 @@ void sub_6CB945(sint32 rideIndex) do { if (blockLocation.z != tileElement->base_height) continue; if (tile_element_get_type(tileElement) != TILE_ELEMENT_TYPE_TRACK) continue; - if (!(TrackSequenceProperties[tileElement->properties.track.type][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) continue; + if (!(TrackSequenceProperties[track_element_get_type(tileElement)][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) continue; trackFound = true; break; @@ -7616,7 +7618,7 @@ void sub_6CB945(sint32 rideIndex) if (track_element_get_ride_index(tileElement) != rideIndex) continue; if (trackElement->base_height != tileElement->base_height) continue; - uint8 trackType = trackElement->properties.track.type; + uint8 trackType = track_element_get_type(tileElement); uint8 trackSequence = tile_element_get_track_sequence(tileElement); uint8 direction = (tile_element_get_direction(tileElement) - tile_element_get_direction(trackElement) + 2) & 3; @@ -7626,7 +7628,7 @@ void sub_6CB945(sint32 rideIndex) } uint8 stationId = 0; - if (trackElement->properties.track.type != TRACK_ELEM_INVERTED_90_DEG_UP_TO_FLAT_QUARTER_LOOP) { + if (track_element_get_type(tileElement) != TRACK_ELEM_INVERTED_90_DEG_UP_TO_FLAT_QUARTER_LOOP) { stationId = tile_element_get_station(trackElement); } diff --git a/src/openrct2/ride/ride_ratings.c b/src/openrct2/ride/ride_ratings.c index 5a341fbaf7..03f63781d1 100644 --- a/src/openrct2/ride/ride_ratings.c +++ b/src/openrct2/ride/ride_ratings.c @@ -202,7 +202,7 @@ static void ride_ratings_update_state_2() if ( trackType == 255 || - (tile_element_get_track_sequence(tileElement) == 0 && trackType == tileElement->properties.track.type)) + (tile_element_get_track_sequence(tileElement) == 0 && trackType == tile_element_get_type(tileElement))) { if (trackType == TRACK_ELEM_END_STATION) { sint32 entranceIndex = tile_element_get_station(tileElement); @@ -236,7 +236,7 @@ static void ride_ratings_update_state_2() gRideRatingsCalcData.proximity_x = x; gRideRatingsCalcData.proximity_y = y; gRideRatingsCalcData.proximity_z = z; - gRideRatingsCalcData.proximity_track_type = tileElement->properties.track.type; + gRideRatingsCalcData.proximity_track_type = tile_element_get_type(tileElement); return; } } while (!tile_element_is_last_for_tile(tileElement++)); @@ -297,7 +297,7 @@ static void ride_ratings_update_state_5() if (tileElement->base_height != z) continue; - if (trackType == 255 || trackType == tileElement->properties.track.type) { + if (trackType == 255 || trackType == tile_element_get_type(tileElement)) { ride_ratings_score_close_proximity(tileElement); x = gRideRatingsCalcData.proximity_x; @@ -318,7 +318,7 @@ static void ride_ratings_update_state_5() gRideRatingsCalcData.proximity_x = x; gRideRatingsCalcData.proximity_y = y; gRideRatingsCalcData.proximity_z = z; - gRideRatingsCalcData.proximity_track_type = trackBeginEnd.begin_element->properties.track.type; + gRideRatingsCalcData.proximity_track_type = track_element_get_type(trackBeginEnd.begin_element); return; } } while (!tile_element_is_last_for_tile(tileElement++)); @@ -444,10 +444,8 @@ static void ride_ratings_score_close_proximity_loops_helper(rct_tile_element *in if (zDiff >= 0 && zDiff <= 16) { proximity_score_increment(PROXIMITY_TRACK_THROUGH_VERTICAL_LOOP); - if ( - tileElement->properties.track.type == TRACK_ELEM_LEFT_VERTICAL_LOOP || - tileElement->properties.track.type == TRACK_ELEM_RIGHT_VERTICAL_LOOP - ) + if (tile_element_get_type(tileElement) == TRACK_ELEM_LEFT_VERTICAL_LOOP || + tile_element_get_type(tileElement) == TRACK_ELEM_RIGHT_VERTICAL_LOOP) { proximity_score_increment(PROXIMITY_INTERSECTING_VERTICAL_LOOP); } @@ -464,7 +462,7 @@ static void ride_ratings_score_close_proximity_loops_helper(rct_tile_element *in */ static void ride_ratings_score_close_proximity_loops(rct_tile_element *inputTileElement) { - sint32 trackType = inputTileElement->properties.track.type; + sint32 trackType = tile_element_get_type(inputTileElement); if (trackType == TRACK_ELEM_LEFT_VERTICAL_LOOP || trackType == TRACK_ELEM_RIGHT_VERTICAL_LOOP) { sint32 x = gRideRatingsCalcData.proximity_x; sint32 y = gRideRatingsCalcData.proximity_y; @@ -541,7 +539,7 @@ static void ride_ratings_score_close_proximity(rct_tile_element *inputTileElemen break; case TILE_ELEMENT_TYPE_TRACK: { - sint32 trackType = tileElement->properties.track.type; + sint32 trackType = track_element_get_type(tileElement); if (trackType == TRACK_ELEM_LEFT_VERTICAL_LOOP || trackType == TRACK_ELEM_RIGHT_VERTICAL_LOOP) { sint32 sequence = tile_element_get_track_sequence(tileElement); if (sequence == 3 || sequence == 6) { @@ -569,7 +567,7 @@ static void ride_ratings_score_close_proximity(rct_tile_element *inputTileElemen } } } else { - trackType = tileElement->properties.track.type; + trackType = track_element_get_type(tileElement); bool isStation = ( trackType == TRACK_ELEM_END_STATION || trackType == TRACK_ELEM_MIDDLE_STATION || diff --git a/src/openrct2/ride/thrill/GoKarts.cpp b/src/openrct2/ride/thrill/GoKarts.cpp index a8d522c2bb..342472b92a 100644 --- a/src/openrct2/ride/thrill/GoKarts.cpp +++ b/src/openrct2/ride/thrill/GoKarts.cpp @@ -354,7 +354,7 @@ static void paint_go_karts_station(paint_session * session, uint8 rideIndex, uin uint32 imageId; const uint32(*sprites)[2] = go_karts_track_pieces_starting_grid; - if (tileElement->properties.track.type == TRACK_ELEM_END_STATION) + if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION) { sprites = go_karts_track_pieces_starting_grid_end; } @@ -405,7 +405,7 @@ static void paint_go_karts_station(paint_session * session, uint8 rideIndex, uin track_paint_util_draw_station_covers(session, EDGE_SW, hasFence, entranceStyle, direction, height); } - if (tileElement->properties.track.type == TRACK_ELEM_END_STATION) + if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION) { const bool hasGreenLight = tile_element_get_green_light(tileElement); diff --git a/src/openrct2/ride/track_design_save.c b/src/openrct2/ride/track_design_save.c index 6b7f210c63..586665fffc 100644 --- a/src/openrct2/ride/track_design_save.c +++ b/src/openrct2/ride/track_design_save.c @@ -979,7 +979,7 @@ static bool track_design_save_to_td6_for_tracked_ride(uint8 rideIndex, rct_track } z = trackElement.element->base_height * 8; - uint8 track_type = trackElement.element->properties.track.type; + uint8 track_type = track_element_get_type(trackElement.element); uint8 direction = tile_element_get_direction(trackElement.element); _trackSaveDirection = direction; @@ -988,7 +988,7 @@ static bool track_design_save_to_td6_for_tracked_ride(uint8 rideIndex, rct_track return 0; } - const rct_track_coordinates *trackCoordinates = &TrackCoordinates[trackElement.element->properties.track.type]; + const rct_track_coordinates *trackCoordinates = &TrackCoordinates[track_element_get_type(trackElement.element)]; // Used in the following loop to know when we have // completed all of the elements and are back at the // start. @@ -1003,7 +1003,7 @@ static bool track_design_save_to_td6_for_tracked_ride(uint8 rideIndex, rct_track td6->track_elements = calloc(8192, sizeof(rct_td6_track_element)); rct_td6_track_element *track = td6->track_elements; do { - track->type = trackElement.element->properties.track.type; + track->type = track_element_get_type(trackElement.element); if (track->type == TRACK_ELEM_255) { track->type = TRACK_ELEM_255_ALIAS; } @@ -1038,7 +1038,7 @@ static bool track_design_save_to_td6_for_tracked_ride(uint8 rideIndex, rct_track z = trackElement.element->base_height * 8; direction = tile_element_get_direction(trackElement.element); - track_type = trackElement.element->properties.track.type; + track_type = track_element_get_type(trackElement.element); if (sub_6C683D(&trackElement.x, &trackElement.y, &z, direction, track_type, 0, &trackElement.element, 0)) { diff --git a/src/openrct2/ride/track_paint.c b/src/openrct2/ride/track_paint.c index 54086763b8..9def25f3e5 100644 --- a/src/openrct2/ride/track_paint.c +++ b/src/openrct2/ride/track_paint.c @@ -312,13 +312,13 @@ void track_paint_util_draw_station_impl(paint_session * session, uint8 rideIndex //height += 5 (height + 5); hasFence = track_paint_util_has_fence(EDGE_NW, position, tileElement, ride, get_current_rotation()); - if (tileElement->properties.track.type == TRACK_ELEM_END_STATION && direction == 0) { + if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && direction == 0) { if (hasGreenLight) { imageId = (hasFence ? SPR_STATION_PLATFORM_FENCED_END_GREEN_LIGHT_SW_NE : SPR_STATION_PLATFORM_END_GREEN_LIGHT_SW_NE) | session->TrackColours[SCHEME_SUPPORTS]; } else { imageId = (hasFence ? SPR_STATION_PLATFORM_FENCED_END_RED_LIGHT_SW_NE : SPR_STATION_PLATFORM_END_RED_LIGHT_SW_NE) | session->TrackColours[SCHEME_SUPPORTS]; } - } else if (tileElement->properties.track.type == TRACK_ELEM_BEGIN_STATION && direction == 2) { + } else if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 2) { imageId = (hasFence ? SPR_STATION_PLATFORM_BEGIN_FENCED_SW_NE : SPR_STATION_PLATFORM_BEGIN_SW_NE) | session->TrackColours[SCHEME_SUPPORTS]; } else { imageId = (hasFence ? SPR_STATION_PLATFORM_FENCED_SW_NE : SPR_STATION_PLATFORM_SW_NE) | session->TrackColours[SCHEME_SUPPORTS]; @@ -328,9 +328,9 @@ void track_paint_util_draw_station_impl(paint_session * session, uint8 rideIndex track_paint_util_draw_station_covers(session, EDGE_NW, hasFence, entranceStyle, direction, coverHeight); //height += 5 (height + 5) - if (tileElement->properties.track.type == TRACK_ELEM_END_STATION && direction == 0) { + if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && direction == 0) { imageId = (hasGreenLight ? SPR_STATION_PLATFORM_END_GREEN_LIGHT_SW_NE : SPR_STATION_PLATFORM_END_RED_LIGHT_SW_NE) | session->TrackColours[SCHEME_SUPPORTS]; - } else if (tileElement->properties.track.type == TRACK_ELEM_BEGIN_STATION && direction == 2) { + } else if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 2) { imageId = SPR_STATION_PLATFORM_BEGIN_SW_NE | session->TrackColours[SCHEME_SUPPORTS]; } else { imageId = SPR_STATION_PLATFORM_SW_NE | session->TrackColours[SCHEME_SUPPORTS]; @@ -340,19 +340,19 @@ void track_paint_util_draw_station_impl(paint_session * session, uint8 rideIndex hasFence = track_paint_util_has_fence(EDGE_SE, position, tileElement, ride, get_current_rotation()); if (hasFence) { - if (tileElement->properties.track.type == TRACK_ELEM_BEGIN_STATION && direction == 0) { + if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 0) { imageId = SPR_STATION_BEGIN_ANGLE_FENCE_SW_NE | session->TrackColours[SCHEME_SUPPORTS]; - } else if (tileElement->properties.track.type == TRACK_ELEM_END_STATION && direction == 2) { + } else if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && direction == 2) { imageId = SPR_STATION_LIGHT_BACK_ANGLE_FENCED_NE_SW | session->TrackColours[SCHEME_SUPPORTS]; } else { imageId = SPR_STATION_FENCE_SW_NE | session->TrackColours[SCHEME_SUPPORTS]; } sub_98196C(session, imageId, 0, 31, 32, 1, 7, height + fenceOffsetB, get_current_rotation()); - } else if (tileElement->properties.track.type == TRACK_ELEM_BEGIN_STATION && direction == 0) { + } else if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 0) { // Addition: draw only small fence if there is an entrance/exit at the beginning imageId = SPR_STATION_FENCE_SMALL_NW_SE | session->TrackColours[SCHEME_SUPPORTS]; sub_98196C(session, imageId, 31, 23, 1, 8, 7, height + fenceOffsetB, get_current_rotation()); - } else if (tileElement->properties.track.type == TRACK_ELEM_END_STATION && direction == 2) { + } else if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && direction == 2) { // Addition: draw only small fence if there is an entrance/exit at the end imageId = SPR_STATION_LIGHT_BACK_NE_SW | session->TrackColours[SCHEME_SUPPORTS]; sub_98196C(session, imageId, 31, 23, 1, 8, 7, height + fenceOffsetB, get_current_rotation()); @@ -361,10 +361,10 @@ void track_paint_util_draw_station_impl(paint_session * session, uint8 rideIndex track_paint_util_draw_station_covers(session, EDGE_SE, hasFence, entranceStyle, direction, coverHeight); //height += 7 (height + 7) - if (tileElement->properties.track.type == TRACK_ELEM_BEGIN_STATION && direction == 0) { + if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 0) { imageId = SPR_STATION_FENCE_SMALL_NW_SE | session->TrackColours[SCHEME_SUPPORTS]; sub_98196C(session, imageId, 31, 0, 1, 8, 7, height + fenceOffsetB, get_current_rotation()); - } else if (tileElement->properties.track.type == TRACK_ELEM_END_STATION && direction == 2) { + } else if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && direction == 2) { imageId = SPR_STATION_LIGHT_BACK_NE_SW | session->TrackColours[SCHEME_SUPPORTS]; sub_98196C(session, imageId, 31, 0, 1, 8, 7, height + fenceOffsetB, get_current_rotation()); } @@ -372,13 +372,13 @@ void track_paint_util_draw_station_impl(paint_session * session, uint8 rideIndex //height += 5 (height + 5); hasFence = track_paint_util_has_fence(EDGE_NE, position, tileElement, ride, get_current_rotation()); - if (tileElement->properties.track.type == TRACK_ELEM_END_STATION && direction == 3) { + if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && direction == 3) { if (hasGreenLight) { imageId = (hasFence ? SPR_STATION_PLATFORM_FENCED_END_GREEN_LIGHT_NW_SE : SPR_STATION_PLATFORM_END_GREEN_LIGHT_NW_SE) | session->TrackColours[SCHEME_SUPPORTS]; } else { imageId = (hasFence ? SPR_STATION_PLATFORM_FENCED_END_RED_LIGHT_NW_SE : SPR_STATION_PLATFORM_END_RED_LIGHT_NW_SE) | session->TrackColours[SCHEME_SUPPORTS]; } - } else if (tileElement->properties.track.type == TRACK_ELEM_BEGIN_STATION && direction == 1) { + } else if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 1) { imageId = (hasFence ? SPR_STATION_PLATFORM_BEGIN_FENCED_NW_SE : SPR_STATION_PLATFORM_BEGIN_NW_SE) | session->TrackColours[SCHEME_SUPPORTS]; } else { imageId = (hasFence ? SPR_STATION_PLATFORM_FENCED_NW_SE : SPR_STATION_PLATFORM_NW_SE) | session->TrackColours[SCHEME_SUPPORTS]; @@ -388,9 +388,9 @@ void track_paint_util_draw_station_impl(paint_session * session, uint8 rideIndex track_paint_util_draw_station_covers(session, EDGE_NE, hasFence, entranceStyle, direction, coverHeight); //height += 5 (height + 5) - if (tileElement->properties.track.type == TRACK_ELEM_END_STATION && direction == 3) { + if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && direction == 3) { imageId = (hasGreenLight ? SPR_STATION_PLATFORM_END_GREEN_LIGHT_NW_SE : SPR_STATION_PLATFORM_END_RED_LIGHT_NW_SE) | session->TrackColours[SCHEME_SUPPORTS]; - } else if (tileElement->properties.track.type == TRACK_ELEM_BEGIN_STATION && direction == 1) { + } else if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 1) { imageId = SPR_STATION_PLATFORM_BEGIN_NW_SE | session->TrackColours[SCHEME_SUPPORTS]; } else { imageId = SPR_STATION_PLATFORM_NW_SE | session->TrackColours[SCHEME_SUPPORTS]; @@ -400,19 +400,19 @@ void track_paint_util_draw_station_impl(paint_session * session, uint8 rideIndex hasFence = track_paint_util_has_fence(EDGE_SW, position, tileElement, ride, get_current_rotation()); if (hasFence) { - if (tileElement->properties.track.type == TRACK_ELEM_BEGIN_STATION && direction == 3) { + if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 3) { imageId = SPR_STATION_BEGIN_ANGLE_FENCE_NW_SE | session->TrackColours[SCHEME_SUPPORTS]; - } else if (tileElement->properties.track.type == TRACK_ELEM_END_STATION && direction == 1) { + } else if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && direction == 1) { imageId = SPR_STATION_LIGHT_BACK_ANGLE_FENCED_NW_SE | session->TrackColours[SCHEME_SUPPORTS]; } else { imageId = SPR_STATION_FENCE_NW_SE | session->TrackColours[SCHEME_SUPPORTS]; } sub_98196C(session, imageId, 31, 0, 1, 32, 7, height + fenceOffsetB, get_current_rotation()); - } else if (tileElement->properties.track.type == TRACK_ELEM_BEGIN_STATION && direction == 3) { + } else if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 3) { // Addition: draw only small fence if there is an entrance/exit at the beginning imageId = SPR_STATION_FENCE_SMALL_SW_NE | session->TrackColours[SCHEME_SUPPORTS]; sub_98196C(session, imageId, 23, 31, 8, 1, 7, height + fenceOffsetB, get_current_rotation()); - } else if (tileElement->properties.track.type == TRACK_ELEM_END_STATION && direction == 1) { + } else if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && direction == 1) { // Addition: draw only small fence if there is an entrance/exit at the end imageId = SPR_STATION_LIGHT_BACK_NW_SE | session->TrackColours[SCHEME_SUPPORTS]; sub_98196C(session, imageId, 23, 31, 8, 1, 7, height + fenceOffsetB, get_current_rotation()); @@ -422,10 +422,10 @@ void track_paint_util_draw_station_impl(paint_session * session, uint8 rideIndex track_paint_util_draw_station_covers(session, EDGE_SW, hasFence, entranceStyle, direction, coverHeight); //height += 7 (height + 7) - if (tileElement->properties.track.type == TRACK_ELEM_BEGIN_STATION && direction == 3) { + if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 3) { imageId = SPR_STATION_FENCE_SMALL_SW_NE | session->TrackColours[SCHEME_SUPPORTS]; sub_98196C(session, imageId, 0, 31, 8, 1, 7, height + fenceOffsetB, get_current_rotation()); - } else if (tileElement->properties.track.type == TRACK_ELEM_END_STATION && direction == 1) { + } else if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && direction == 1) { imageId = SPR_STATION_LIGHT_BACK_NW_SE | session->TrackColours[SCHEME_SUPPORTS]; sub_98196C(session, imageId, 0, 31, 8, 1, 7, height + fenceOffsetB, get_current_rotation()); } @@ -446,13 +446,13 @@ void track_paint_util_draw_station_inverted(paint_session * session, uint8 rideI //height += 5 (height + 5); hasFence = track_paint_util_has_fence(EDGE_NW, position, tileElement, ride, get_current_rotation()); - if (tileElement->properties.track.type == TRACK_ELEM_END_STATION && direction == 0) { + if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && direction == 0) { if (hasGreenLight) { imageId = (hasFence ? SPR_STATION_PLATFORM_FENCED_END_GREEN_LIGHT_SW_NE : SPR_STATION_PLATFORM_END_GREEN_LIGHT_SW_NE) | session->TrackColours[SCHEME_SUPPORTS]; } else { imageId = (hasFence ? SPR_STATION_PLATFORM_FENCED_END_RED_LIGHT_SW_NE : SPR_STATION_PLATFORM_END_RED_LIGHT_SW_NE) | session->TrackColours[SCHEME_SUPPORTS]; } - } else if (tileElement->properties.track.type == TRACK_ELEM_BEGIN_STATION && direction == 2) { + } else if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 2) { imageId = (hasFence ? SPR_STATION_PLATFORM_BEGIN_FENCED_SW_NE : SPR_STATION_PLATFORM_BEGIN_SW_NE) | session->TrackColours[SCHEME_SUPPORTS]; } else { imageId = (hasFence ? SPR_STATION_PLATFORM_FENCED_SW_NE : SPR_STATION_PLATFORM_SW_NE) | session->TrackColours[SCHEME_SUPPORTS]; @@ -462,9 +462,9 @@ void track_paint_util_draw_station_inverted(paint_session * session, uint8 rideI track_paint_util_draw_station_covers_2(session, EDGE_NW, hasFence, entranceStyle, direction, height, stationVariant); //height += 5 (height + 5) - if (tileElement->properties.track.type == TRACK_ELEM_END_STATION && direction == 0) { + if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && direction == 0) { imageId = (hasGreenLight ? SPR_STATION_PLATFORM_END_GREEN_LIGHT_SW_NE : SPR_STATION_PLATFORM_END_RED_LIGHT_SW_NE) | session->TrackColours[SCHEME_SUPPORTS]; - } else if (tileElement->properties.track.type == TRACK_ELEM_BEGIN_STATION && direction == 2) { + } else if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 2) { imageId = SPR_STATION_PLATFORM_BEGIN_SW_NE | session->TrackColours[SCHEME_SUPPORTS]; } else { imageId = SPR_STATION_PLATFORM_SW_NE | session->TrackColours[SCHEME_SUPPORTS]; @@ -474,19 +474,19 @@ void track_paint_util_draw_station_inverted(paint_session * session, uint8 rideI hasFence = track_paint_util_has_fence(EDGE_SE, position, tileElement, ride, get_current_rotation()); if (hasFence) { - if (tileElement->properties.track.type == TRACK_ELEM_BEGIN_STATION && direction == 0) { + if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 0) { imageId = SPR_STATION_INVERTED_BEGIN_ANGLE_FENCE_SW_NE | session->TrackColours[SCHEME_SUPPORTS]; - } else if (tileElement->properties.track.type == TRACK_ELEM_END_STATION && direction == 2) { + } else if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && direction == 2) { imageId = SPR_STATION_INVERTED_LIGHT_BACK_ANGLE_FENCED_NE_SW | session->TrackColours[SCHEME_SUPPORTS]; } else { imageId = SPR_STATION_INVERTED_FENCE_SW_NE | session->TrackColours[SCHEME_SUPPORTS]; } sub_98196C(session, imageId, 0, 31, 32, 1, 7, height + 8, get_current_rotation()); - } else if (tileElement->properties.track.type == TRACK_ELEM_BEGIN_STATION && direction == 0) { + } else if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 0) { // Addition: draw only small fence if there is an entrance/exit at the beginning imageId = SPR_STATION_FENCE_SMALL_NW_SE | session->TrackColours[SCHEME_SUPPORTS]; sub_98196C(session, imageId, 31, 23, 1, 8, 7, height + 8, get_current_rotation()); - } else if (tileElement->properties.track.type == TRACK_ELEM_END_STATION && direction == 2) { + } else if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && direction == 2) { // Addition: draw only small fence if there is an entrance/exit at the end imageId = SPR_STATION_LIGHT_BACK_NE_SW | session->TrackColours[SCHEME_SUPPORTS]; sub_98196C(session, imageId, 31, 23, 1, 8, 7, height + 8, get_current_rotation()); @@ -495,10 +495,10 @@ void track_paint_util_draw_station_inverted(paint_session * session, uint8 rideI track_paint_util_draw_station_covers_2(session, EDGE_SE, hasFence, entranceStyle, direction, height, stationVariant); //height += 7 (height + 7) - if (tileElement->properties.track.type == TRACK_ELEM_BEGIN_STATION && direction == 0) { + if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 0) { imageId = SPR_STATION_FENCE_SMALL_NW_SE | session->TrackColours[SCHEME_SUPPORTS]; sub_98196C(session, imageId, 31, 0, 1, 8, 7, height + 8, get_current_rotation()); - } else if (tileElement->properties.track.type == TRACK_ELEM_END_STATION && direction == 2) { + } else if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && direction == 2) { imageId = SPR_STATION_LIGHT_BACK_NE_SW | session->TrackColours[SCHEME_SUPPORTS]; sub_98196C(session, imageId, 31, 0, 1, 8, 7, height + 8, get_current_rotation()); } @@ -506,13 +506,13 @@ void track_paint_util_draw_station_inverted(paint_session * session, uint8 rideI //height += 5 (height + 5); hasFence = track_paint_util_has_fence(EDGE_NE, position, tileElement, ride, get_current_rotation()); - if (tileElement->properties.track.type == TRACK_ELEM_END_STATION && direction == 3) { + if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && direction == 3) { if (hasGreenLight) { imageId = (hasFence ? SPR_STATION_PLATFORM_FENCED_END_GREEN_LIGHT_NW_SE : SPR_STATION_PLATFORM_END_GREEN_LIGHT_NW_SE) | session->TrackColours[SCHEME_SUPPORTS]; } else { imageId = (hasFence ? SPR_STATION_PLATFORM_FENCED_END_RED_LIGHT_NW_SE : SPR_STATION_PLATFORM_END_RED_LIGHT_NW_SE) | session->TrackColours[SCHEME_SUPPORTS]; } - } else if (tileElement->properties.track.type == TRACK_ELEM_BEGIN_STATION && direction == 1) { + } else if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 1) { imageId = (hasFence ? SPR_STATION_PLATFORM_BEGIN_FENCED_NW_SE : SPR_STATION_PLATFORM_BEGIN_NW_SE) | session->TrackColours[SCHEME_SUPPORTS]; } else { imageId = (hasFence ? SPR_STATION_PLATFORM_FENCED_NW_SE : SPR_STATION_PLATFORM_NW_SE) | session->TrackColours[SCHEME_SUPPORTS]; @@ -522,9 +522,9 @@ void track_paint_util_draw_station_inverted(paint_session * session, uint8 rideI track_paint_util_draw_station_covers_2(session, EDGE_NE, hasFence, entranceStyle, direction, height, stationVariant); //height += 5 (height + 5) - if (tileElement->properties.track.type == TRACK_ELEM_END_STATION && direction == 3) { + if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && direction == 3) { imageId = (hasGreenLight ? SPR_STATION_PLATFORM_END_GREEN_LIGHT_NW_SE : SPR_STATION_PLATFORM_END_RED_LIGHT_NW_SE) | session->TrackColours[SCHEME_SUPPORTS]; - } else if (tileElement->properties.track.type == TRACK_ELEM_BEGIN_STATION && direction == 1) { + } else if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 1) { imageId = SPR_STATION_PLATFORM_BEGIN_NW_SE | session->TrackColours[SCHEME_SUPPORTS]; } else { imageId = SPR_STATION_PLATFORM_NW_SE | session->TrackColours[SCHEME_SUPPORTS]; @@ -534,19 +534,19 @@ void track_paint_util_draw_station_inverted(paint_session * session, uint8 rideI hasFence = track_paint_util_has_fence(EDGE_SW, position, tileElement, ride, get_current_rotation()); if (hasFence) { - if (tileElement->properties.track.type == TRACK_ELEM_BEGIN_STATION && direction == 3) { + if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 3) { imageId = SPR_STATION_INVERTED_BEGIN_ANGLE_FENCE_NW_SE | session->TrackColours[SCHEME_SUPPORTS]; - } else if (tileElement->properties.track.type == TRACK_ELEM_END_STATION && direction == 1) { + } else if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && direction == 1) { imageId = SPR_STATION_INVERTED_LIGHT_BACK_ANGLE_FENCED_NW_SE | session->TrackColours[SCHEME_SUPPORTS]; } else { imageId = SPR_STATION_INVERTED_FENCE_NW_SE | session->TrackColours[SCHEME_SUPPORTS]; } sub_98196C(session, imageId, 31, 0, 1, 32, 7, height + 8, get_current_rotation()); - } else if (tileElement->properties.track.type == TRACK_ELEM_BEGIN_STATION && direction == 3) { + } else if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 3) { // Addition: draw only small fence if there is an entrance/exit at the beginning imageId = SPR_STATION_FENCE_SMALL_SW_NE | session->TrackColours[SCHEME_SUPPORTS]; sub_98196C(session, imageId, 23, 31, 8, 1, 7, height + 8, get_current_rotation()); - } else if (tileElement->properties.track.type == TRACK_ELEM_END_STATION && direction == 1) { + } else if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && direction == 1) { // Addition: draw only small fence if there is an entrance/exit at the end imageId = SPR_STATION_LIGHT_BACK_NW_SE | session->TrackColours[SCHEME_SUPPORTS]; sub_98196C(session, imageId, 23, 31, 8, 1, 7, height + 8, get_current_rotation()); @@ -556,10 +556,10 @@ void track_paint_util_draw_station_inverted(paint_session * session, uint8 rideI track_paint_util_draw_station_covers_2(session, EDGE_SW, hasFence, entranceStyle, direction, height, stationVariant); //height += 7 (height + 7) - if (tileElement->properties.track.type == TRACK_ELEM_BEGIN_STATION && direction == 3) { + if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 3) { imageId = SPR_STATION_FENCE_SMALL_SW_NE | session->TrackColours[SCHEME_SUPPORTS]; sub_98196C(session, imageId, 0, 31, 8, 1, 7, height + 8, get_current_rotation()); - } else if (tileElement->properties.track.type == TRACK_ELEM_END_STATION && direction == 1) { + } else if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && direction == 1) { imageId = SPR_STATION_LIGHT_BACK_NW_SE | session->TrackColours[SCHEME_SUPPORTS]; sub_98196C(session, imageId, 0, 31, 8, 1, 7, height + 8, get_current_rotation()); } @@ -1752,7 +1752,7 @@ void track_paint(paint_session * session, uint8 direction, sint32 height, rct_ti rct_drawpixelinfo *dpi = session->Unk140E9A8; if (!gTrackDesignSaveMode || rideIndex == gTrackDesignSaveRideIndex) { - sint32 trackType = tileElement->properties.track.type; + sint32 trackType = track_element_get_type(tileElement); sint32 trackSequence = tile_element_get_track_sequence(tileElement); sint32 trackColourScheme = track_element_get_colour_scheme(tileElement); diff --git a/src/openrct2/ride/transport/Chairlift.cpp b/src/openrct2/ride/transport/Chairlift.cpp index a984a50804..418b886e69 100644 --- a/src/openrct2/ride/transport/Chairlift.cpp +++ b/src/openrct2/ride/transport/Chairlift.cpp @@ -141,7 +141,7 @@ static rct_tile_element * chairlift_paint_util_map_get_track_element_at_from_rid static bool chairlift_paint_util_is_first_track(uint8 rideIndex, const rct_tile_element * tileElement, LocationXY16 pos, uint8 trackType) { - if (tileElement->properties.track.type != TRACK_ELEM_BEGIN_STATION) + if (track_element_get_type(tileElement) != TRACK_ELEM_BEGIN_STATION) { return false; } @@ -161,7 +161,7 @@ static bool chairlift_paint_util_is_first_track(uint8 rideIndex, const rct_tile_ static bool chairlift_paint_util_is_last_track(uint8 rideIndex, const rct_tile_element * tileElement, LocationXY16 pos, uint8 trackType) { - if (tileElement->properties.track.type != TRACK_ELEM_END_STATION) + if (track_element_get_type(tileElement) != TRACK_ELEM_END_STATION) { return false; } @@ -182,7 +182,7 @@ static void chairlift_paint_station_ne_sw(paint_session * session, uint8 rideInd sint32 height, rct_tile_element * tileElement) { const LocationXY16 pos = session->MapPosition; - uint8 trackType = tileElement->properties.track.type; + uint8 trackType = track_element_get_type(tileElement); Ride * ride = get_ride(rideIndex); uint32 imageId; @@ -273,7 +273,7 @@ static void chairlift_paint_station_se_nw(paint_session * session, uint8 rideInd sint32 height, rct_tile_element * tileElement) { const LocationXY16 pos = session->MapPosition; - uint8 trackType = tileElement->properties.track.type; + uint8 trackType = track_element_get_type(tileElement); Ride * ride = get_ride(rideIndex); uint32 imageId; diff --git a/src/openrct2/ride/transport/MiniatureRailway.cpp b/src/openrct2/ride/transport/MiniatureRailway.cpp index cea941062b..2c942563cc 100644 --- a/src/openrct2/ride/transport/MiniatureRailway.cpp +++ b/src/openrct2/ride/transport/MiniatureRailway.cpp @@ -1381,7 +1381,7 @@ static void paint_miniature_railway_track_left_eighth_to_diag(paint_session * se const uint8 supportType[4][5] = { { 0, 0, 3, 5, 1 }, { 1, 1, 4, 2, 0 }, { 0, 0, 5, 3, 1 }, { 1, 1, 2, 4, 0 } }; bool isSupported = false; - bool isRightEighthToOrthog = tileElement->properties.track.type == TRACK_ELEM_RIGHT_EIGHTH_TO_ORTHOGONAL; + bool isRightEighthToOrthog = track_element_get_type(tileElement) == TRACK_ELEM_RIGHT_EIGHTH_TO_ORTHOGONAL; // Right eighth to orthogonal calls this function but we do not want to have a support call for it // for track sequence 4 if (trackSequence != 4 || !isRightEighthToOrthog) @@ -1519,7 +1519,7 @@ static void paint_miniature_railway_track_right_eighth_to_diag(paint_session * s const uint8 supportType[4][5] = { { 0, 0, 2, 4, 1 }, { 1, 1, 3, 5, 0 }, { 0, 0, 4, 2, 1 }, { 1, 1, 5, 3, 0 } }; bool isSupported = false; - bool isLeftEighthToOrthog = tileElement->properties.track.type == TRACK_ELEM_LEFT_EIGHTH_TO_ORTHOGONAL; + bool isLeftEighthToOrthog = track_element_get_type(tileElement) == TRACK_ELEM_LEFT_EIGHTH_TO_ORTHOGONAL; // Right eighth to orthogonal calls this function but we do not want to have a support call for it // for track sequence 4 if (trackSequence != 4 || !isLeftEighthToOrthog) diff --git a/src/openrct2/windows/TileInspector.cpp b/src/openrct2/windows/TileInspector.cpp index 3245ad23b2..96e582c7cc 100644 --- a/src/openrct2/windows/TileInspector.cpp +++ b/src/openrct2/windows/TileInspector.cpp @@ -1729,7 +1729,7 @@ static void window_tile_inspector_paint(rct_window *w, rct_drawpixelinfo *dpi) set_format_arg(0 + sizeof(rct_string_id), uint32, ride->name_arguments); gfx_draw_string_left(dpi, STR_TILE_INSPECTOR_TRACK_RIDE_NAME, gCommonFormatArgs, COLOUR_DARK_GREEN, x, y + 22); // Track - sint16 trackType = tileElement->properties.track.type; + sint16 trackType = track_element_get_type(tileElement); sint16 sequenceNumber = tile_element_get_track_sequence(tileElement); gfx_draw_string_left(dpi, STR_TILE_INSPECTOR_TRACK_PIECE_ID, &trackType, COLOUR_DARK_GREEN, x, y + 33); gfx_draw_string_left(dpi, STR_TILE_INSPECTOR_TRACK_SEQUENCE, &sequenceNumber, COLOUR_DARK_GREEN, x, y + 44); diff --git a/src/openrct2/world/Entrance.cpp b/src/openrct2/world/Entrance.cpp index a13ba618f2..c68b3dc66b 100644 --- a/src/openrct2/world/Entrance.cpp +++ b/src/openrct2/world/Entrance.cpp @@ -633,7 +633,7 @@ extern "C" if (tileElement->type != TILE_ELEMENT_TYPE_TRACK) continue; if (track_element_get_ride_index(tileElement) != rideIndex) continue; if (tileElement->base_height != z) continue; - if (tileElement->properties.track.type != TRACK_ELEM_MAZE) continue; + if (track_element_get_type(tileElement) != TRACK_ELEM_MAZE) continue; // Each maze element is split into 4 sections with 4 different walls uint8 mazeSection = direction * 4; @@ -664,7 +664,7 @@ extern "C" if (tileElement->type != TILE_ELEMENT_TYPE_TRACK) continue; if (track_element_get_ride_index(tileElement) != rideIndex) continue; if (tileElement->base_height != z) continue; - if (tileElement->properties.track.type != TRACK_ELEM_MAZE) continue; + if (track_element_get_type(tileElement) != TRACK_ELEM_MAZE) continue; // Each maze element is split into 4 sections with 4 different walls uint8 mazeSection = direction * 4; diff --git a/src/openrct2/world/Wall.cpp b/src/openrct2/world/Wall.cpp index 80b9a1461b..c53e55e438 100644 --- a/src/openrct2/world/Wall.cpp +++ b/src/openrct2/world/Wall.cpp @@ -66,7 +66,7 @@ static bool WallCheckObstructionWithTrack(rct_scenery_entry * wall, rct_tile_element * trackElement, bool * wallAcrossTrack) { - sint32 trackType = trackElement->properties.track.type; + sint32 trackType = track_element_get_type(trackElement); sint32 sequence = tile_element_get_track_sequence(trackElement); sint32 direction = (edge - tile_element_get_direction(trackElement)) & TILE_ELEMENT_DIRECTION_MASK; Ride * ride = get_ride(track_element_get_ride_index(trackElement)); diff --git a/src/openrct2/world/footpath.c b/src/openrct2/world/footpath.c index 7f0ef129eb..ab334f6813 100644 --- a/src/openrct2/world/footpath.c +++ b/src/openrct2/world/footpath.c @@ -1269,7 +1269,7 @@ static void loc_6A6D7E( continue; } - const uint8 trackType = tileElement->properties.track.type; + const uint8 trackType = track_element_get_type(tileElement); const uint8 trackSequence = tile_element_get_track_sequence(tileElement); if (!(FlatRideTrackSequenceProperties[trackType][trackSequence] & TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH)) { return; @@ -1361,7 +1361,7 @@ static void loc_6A6C85( if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_FLAT_RIDE)) { return; } - const uint8 trackType = tileElement->properties.track.type; + const uint8 trackType = track_element_get_type(tileElement); const uint8 trackSequence = tile_element_get_track_sequence(tileElement); if (!(FlatRideTrackSequenceProperties[trackType][trackSequence] & TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH)) { return; diff --git a/src/openrct2/world/map.c b/src/openrct2/world/map.c index ec4e773948..3949d45c9b 100644 --- a/src/openrct2/world/map.c +++ b/src/openrct2/world/map.c @@ -4452,7 +4452,7 @@ rct_tile_element *map_get_track_element_at_of_type(sint32 x, sint32 y, sint32 z, do { if (tile_element_get_type(tileElement) != TILE_ELEMENT_TYPE_TRACK) continue; if (tileElement->base_height != z) continue; - if (tileElement->properties.track.type != trackType) continue; + if (track_element_get_type(tileElement) != trackType) continue; return tileElement; } while (!tile_element_is_last_for_tile(tileElement++)); @@ -4475,7 +4475,7 @@ rct_tile_element *map_get_track_element_at_of_type_seq(sint32 x, sint32 y, sint3 if (tileElement == NULL) break; if (tile_element_get_type(tileElement) != TILE_ELEMENT_TYPE_TRACK) continue; if (tileElement->base_height != z) continue; - if (tileElement->properties.track.type != trackType) continue; + if (track_element_get_type(tileElement) != trackType) continue; if (tile_element_get_track_sequence(tileElement) != sequence) continue; return tileElement; @@ -4498,7 +4498,7 @@ rct_tile_element *map_get_track_element_at_of_type_from_ride(sint32 x, sint32 y, if (tile_element_get_type(tileElement) != TILE_ELEMENT_TYPE_TRACK) continue; if (tileElement->base_height != z) continue; if (track_element_get_ride_index(tileElement) != rideIndex) continue; - if (tileElement->properties.track.type != trackType) continue; + if (track_element_get_type(tileElement) != trackType) continue; return tileElement; } while (!tile_element_is_last_for_tile(tileElement++)); diff --git a/src/openrct2/world/map_animation.c b/src/openrct2/world/map_animation.c index 140804d9ff..2020518c54 100644 --- a/src/openrct2/world/map_animation.c +++ b/src/openrct2/world/map_animation.c @@ -268,7 +268,7 @@ static bool map_animation_invalidate_track_waterfall(sint32 x, sint32 y, sint32 if (tile_element_get_type(tileElement) != TILE_ELEMENT_TYPE_TRACK) continue; - if (tileElement->properties.track.type == TRACK_ELEM_WATERFALL) { + if (track_element_get_type(tileElement) == TRACK_ELEM_WATERFALL) { sint32 z = tileElement->base_height * 8; map_invalidate_tile_zoom1(x, y, z + 14, z + 46); return false; @@ -293,7 +293,7 @@ static bool map_animation_invalidate_track_rapids(sint32 x, sint32 y, sint32 bas if (tile_element_get_type(tileElement) != TILE_ELEMENT_TYPE_TRACK) continue; - if (tileElement->properties.track.type == TRACK_ELEM_RAPIDS) { + if (track_element_get_type(tileElement) == TRACK_ELEM_RAPIDS) { sint32 z = tileElement->base_height * 8; map_invalidate_tile_zoom1(x, y, z + 14, z + 18); return false; @@ -320,7 +320,7 @@ static bool map_animation_invalidate_track_onridephoto(sint32 x, sint32 y, sint3 if (tile_element_get_type(tileElement) != TILE_ELEMENT_TYPE_TRACK) continue; - if (tileElement->properties.track.type == TRACK_ELEM_ON_RIDE_PHOTO) { + if (track_element_get_type(tileElement) == TRACK_ELEM_ON_RIDE_PHOTO) { map_invalidate_tile_zoom1(x, y, tileElement->base_height * 8, tileElement->clearance_height * 8); if (game_is_paused()) { return false; @@ -352,7 +352,7 @@ static bool map_animation_invalidate_track_whirlpool(sint32 x, sint32 y, sint32 if (tile_element_get_type(tileElement) != TILE_ELEMENT_TYPE_TRACK) continue; - if (tileElement->properties.track.type == TRACK_ELEM_WHIRLPOOL) { + if (track_element_get_type(tileElement) == TRACK_ELEM_WHIRLPOOL) { sint32 z = tileElement->base_height * 8; map_invalidate_tile_zoom1(x, y, z + 14, z + 18); return false; @@ -377,7 +377,7 @@ static bool map_animation_invalidate_track_spinningtunnel(sint32 x, sint32 y, si if (tile_element_get_type(tileElement) != TILE_ELEMENT_TYPE_TRACK) continue; - if (tileElement->properties.track.type == TRACK_ELEM_SPINNING_TUNNEL) { + if (track_element_get_type(tileElement) == TRACK_ELEM_SPINNING_TUNNEL) { sint32 z = tileElement->base_height * 8; map_invalidate_tile_zoom1(x, y, z + 14, z + 32); return false; diff --git a/src/openrct2/world/tile_inspector.c b/src/openrct2/world/tile_inspector.c index 7970877c8d..7d00469731 100644 --- a/src/openrct2/world/tile_inspector.c +++ b/src/openrct2/world/tile_inspector.c @@ -594,7 +594,7 @@ sint32 tile_inspector_track_base_height_offset(sint32 x, sint32 y, sint32 elemen if (flags & GAME_COMMAND_FLAG_APPLY) { - uint8 type = trackElement->properties.track.type; + uint8 type = track_element_get_type(trackElement); sint16 originX = x << 5; sint16 originY = y << 5; sint16 originZ = trackElement->base_height * 8; @@ -672,7 +672,7 @@ sint32 tile_inspector_track_base_height_offset(sint32 x, sint32 y, sint32 elemen if (tile_element_get_track_sequence(tileElement) != trackBlock->index) continue; - if (tileElement->properties.track.type != type) + if (track_element_get_type(tileElement) != type) continue; found = true; @@ -726,7 +726,7 @@ sint32 tile_inspector_track_set_chain(sint32 x, sint32 y, sint32 elementIndex, b return 0; } - uint8 type = trackElement->properties.track.type; + uint8 type = track_element_get_type(trackElement); sint16 originX = x << 5; sint16 originY = y << 5; sint16 originZ = trackElement->base_height * 8; @@ -804,7 +804,7 @@ sint32 tile_inspector_track_set_chain(sint32 x, sint32 y, sint32 elementIndex, b if (tile_element_get_track_sequence(tileElement) != trackBlock->index) continue; - if (tileElement->properties.track.type != type) + if (track_element_get_type(tileElement) != type) continue; found = true; diff --git a/test/testpaint/TestTrack.cpp b/test/testpaint/TestTrack.cpp index 5bca259fc6..a04951c047 100644 --- a/test/testpaint/TestTrack.cpp +++ b/test/testpaint/TestTrack.cpp @@ -266,7 +266,7 @@ static uint8 TestTrackElementPaintCalls(uint8 rideType, uint8 trackType, uint8 t rct_tile_element tileElement = {0}; tileElement.flags |= TILE_ELEMENT_FLAG_LAST_TILE; - tileElement.properties.track.type = trackType; + track_element_set_type(tileElement, trackType); tileElement.base_height = height / 16; g_currently_drawn_item = &tileElement; @@ -412,7 +412,7 @@ static uint8 TestTrackElementSegmentSupportHeight(uint8 rideType, uint8 trackTyp rct_tile_element tileElement = {0}; tileElement.flags |= TILE_ELEMENT_FLAG_LAST_TILE; - tileElement.properties.track.type = trackType; + track_element_set_type(tileElement, trackType); tileElement.base_height = height / 16; g_currently_drawn_item = &tileElement; @@ -491,7 +491,7 @@ static uint8 TestTrackElementGeneralSupportHeight(uint8 rideType, uint8 trackTyp rct_tile_element tileElement = {0}; tileElement.flags |= TILE_ELEMENT_FLAG_LAST_TILE; - tileElement.properties.track.type = trackType; + track_element_set_type(tileElement, trackType); tileElement.base_height = height / 16; g_currently_drawn_item = &tileElement; @@ -587,7 +587,7 @@ static uint8 TestTrackElementSideTunnels(uint8 rideType, uint8 trackType, uint8 rct_tile_element tileElement = {0}; tileElement.flags |= TILE_ELEMENT_FLAG_LAST_TILE; - tileElement.properties.track.type = trackType; + track_element_set_type(tileElement, trackType); tileElement.base_height = height / 16; g_currently_drawn_item = &tileElement; @@ -703,7 +703,7 @@ static uint8 TestTrackElementVerticalTunnels(uint8 rideType, uint8 trackType, ui rct_tile_element tileElement = {0}; tileElement.flags |= TILE_ELEMENT_FLAG_LAST_TILE; - tileElement.properties.track.type = trackType; + track_element_set_type(tileElement, trackType); tileElement.base_height = height / 16; g_currently_drawn_item = &tileElement; diff --git a/test/testpaint/generate.cpp b/test/testpaint/generate.cpp index 9805c81964..0d6f24d91e 100644 --- a/test/testpaint/generate.cpp +++ b/test/testpaint/generate.cpp @@ -407,7 +407,7 @@ private: for (int direction = 0; direction < 4; direction++) { rct_tile_element tileElement = { 0 }; tileElement.flags |= TILE_ELEMENT_FLAG_LAST_TILE; - tileElement.properties.track.type = trackType; + track_element_set_type(tileElement, trackType); tileElement.base_height = 3; if (_invertedTrack) {