diff --git a/src/openrct2-ui/windows/RideConstruction.cpp b/src/openrct2-ui/windows/RideConstruction.cpp index 5fee0ed89e..28bcf4d809 100644 --- a/src/openrct2-ui/windows/RideConstruction.cpp +++ b/src/openrct2-ui/windows/RideConstruction.cpp @@ -2324,13 +2324,15 @@ static void sub_6CBCE2( map_set_tile_elements(tileX + 0, tileY - 1, &_tempSideTrackTileElement); // Set the temporary track element - _tempTrackTileElement.type = trackDirection | TILE_ELEMENT_TYPE_TRACK | ((edx & 0x10000) ? 0x80 : 0); + _tempTrackTileElement.type = trackDirection | TILE_ELEMENT_TYPE_TRACK; + track_element_set_lift_hill(&_tempTrackTileElement, (edx & 0x10000) ? true : false); _tempTrackTileElement.flags = (bl & 0x0F) | TILE_ELEMENT_FLAG_LAST_TILE; _tempTrackTileElement.base_height = baseZ; _tempTrackTileElement.clearance_height = clearanceZ; track_element_set_type(&_tempTrackTileElement, trackType); tile_element_set_track_sequence(&_tempTrackTileElement, trackBlock->index); - track_element_set_colour_scheme(&_tempTrackTileElement, 0); + // TODO: Find out why this is set to 0. + _tempTrackTileElement.properties.track.colour = 0; track_element_set_ride_index(&_tempTrackTileElement, rideIndex); if (edx & 0x20000) { diff --git a/src/openrct2/ride/Track.cpp b/src/openrct2/ride/Track.cpp index 2c28588e11..6cf8acfe0d 100644 --- a/src/openrct2/ride/Track.cpp +++ b/src/openrct2/ride/Track.cpp @@ -1493,7 +1493,8 @@ static money32 track_place(sint32 rideIndex, tile_element_set_track_sequence(tileElement, trackBlock->index); track_element_set_ride_index(tileElement, rideIndex); track_element_set_type(tileElement, type); - tileElement->properties.track.colour = 0; + // TODO: Find out why this is set to 0. + tileElement->properties.track.colour = 0; if (flags & GAME_COMMAND_FLAG_GHOST) { tileElement->flags |= TILE_ELEMENT_FLAG_GHOST; @@ -2447,6 +2448,18 @@ bool track_element_is_lift_hill(rct_tile_element * trackElement) return trackElement->type & TRACK_ELEMENT_FLAG_CHAIN_LIFT; } +void track_element_set_lift_hill(rct_tile_element * trackElement, bool on) +{ + if (on) + { + trackElement->type |= TRACK_ELEMENT_FLAG_CHAIN_LIFT; + } + else + { + trackElement->type &= ~TRACK_ELEMENT_FLAG_CHAIN_LIFT; + } +} + /** * Checks if a track element is recognised as the beginning of a block. * A beginning of a block can be the end of a station, the end of a lift hill, diff --git a/src/openrct2/ride/Track.h b/src/openrct2/ride/Track.h index 09d4cb59d9..dc663e9012 100644 --- a/src/openrct2/ride/Track.h +++ b/src/openrct2/ride/Track.h @@ -545,6 +545,7 @@ bool track_element_is_block_start(rct_tile_element * trackElement); bool track_element_is_covered(sint32 trackElementType); bool track_element_is_station(rct_tile_element * trackElement); bool track_element_is_lift_hill(rct_tile_element * trackElement); +void track_element_set_lift_hill(rct_tile_element * trackElement, bool on); bool track_element_is_cable_lift(rct_tile_element * trackElement); void track_element_set_cable_lift(rct_tile_element * trackElement); void track_element_clear_cable_lift(rct_tile_element * trackElement); diff --git a/src/openrct2/ride/coaster/VirginiaReel.cpp b/src/openrct2/ride/coaster/VirginiaReel.cpp index d2cf8efef5..bd99bc4398 100644 --- a/src/openrct2/ride/coaster/VirginiaReel.cpp +++ b/src/openrct2/ride/coaster/VirginiaReel.cpp @@ -234,7 +234,7 @@ static void paint_virginia_reel_track_flat(paint_session * session, uint8 rideIn sint32 height, rct_tile_element * tileElement) { const uint32 * sprites = virginia_reel_track_pieces_flat; - if (tileElement->type & 0x80) + if (track_element_is_lift_hill(tileElement)) { sprites = virginia_reel_track_pieces_flat_lift_hill; } @@ -262,7 +262,7 @@ static void paint_virginia_reel_track_25_deg_up(paint_session * session, uint8 r sint32 height, rct_tile_element * tileElement) { const uint32 * sprites = virginia_reel_track_pieces_25_deg_up; - if (tileElement->type & 0x80) + if (track_element_is_lift_hill(tileElement)) { sprites = virginia_reel_track_pieces_25_deg_up_lift_hill; } @@ -313,7 +313,7 @@ static void paint_virginia_reel_track_flat_to_25_deg_up(paint_session * session, uint8 direction, sint32 height, rct_tile_element * tileElement) { const uint32 * sprites = virginia_reel_track_pieces_flat_to_25_deg_up; - if (tileElement->type & 0x80) + if (track_element_is_lift_hill(tileElement)) { sprites = virginia_reel_track_pieces_flat_to_25_deg_up_lift_hill; } @@ -359,7 +359,7 @@ static void paint_virginia_reel_track_25_deg_up_to_flat(paint_session * session, uint8 direction, sint32 height, rct_tile_element * tileElement) { const uint32 * sprites = virginia_reel_track_pieces_25_deg_up_to_flat; - if (tileElement->type & 0x80) + if (track_element_is_lift_hill(tileElement)) { sprites = virginia_reel_track_pieces_25_deg_up_to_flat_lift_hill; } diff --git a/test/testpaint/TestTrack.cpp b/test/testpaint/TestTrack.cpp index a04951c047..9a4c227149 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; - track_element_set_type(tileElement, 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; - track_element_set_type(tileElement, 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; - track_element_set_type(tileElement, 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; - track_element_set_type(tileElement, 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; - track_element_set_type(tileElement, 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 0d6f24d91e..20557d6704 100644 --- a/test/testpaint/generate.cpp +++ b/test/testpaint/generate.cpp @@ -407,11 +407,11 @@ private: for (int direction = 0; direction < 4; direction++) { rct_tile_element tileElement = { 0 }; tileElement.flags |= TILE_ELEMENT_FLAG_LAST_TILE; - track_element_set_type(tileElement, trackType); + track_element_set_type(&tileElement, trackType); tileElement.base_height = 3; if (_invertedTrack) { - track_element_set_inverted(tileElement, true); + track_element_set_inverted(&tileElement, true); } g_currently_drawn_item = &tileElement; @@ -450,7 +450,7 @@ private: if (_rideType == RIDE_TYPE_GIGA_COASTER) { tileElement.type = 0; - track_element_set_cable_lift(tileElement); + track_element_set_cable_lift(&tileElement); PaintIntercept::ClearCalls(); CallOriginal(trackType, direction, trackSequence, height, &tileElement); numCalls = PaintIntercept::GetCalls(callBuffer); @@ -463,7 +463,7 @@ private: RCT2_GLOBAL(0x009DE56A, sint16) = 64 + 32; RCT2_GLOBAL(0x009DE56E, sint16) = 64; tileElement.type = 0; - track_element_clear_cable_lift(tileElement); + track_element_clear_cable_lift(&tileElement); PaintIntercept::ClearCalls(); CallOriginal(trackType, direction, trackSequence, height, &tileElement); numCalls = PaintIntercept::GetCalls(callBuffer);