1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-25 15:54:31 +01:00

Merge pull request #8615 from Gymnasiast/cleanup/path-drawing

More path drawing cleanup
This commit is contained in:
Michael Steenbeek
2019-01-20 20:21:43 +01:00
committed by GitHub
7 changed files with 88 additions and 63 deletions

View File

@@ -76,8 +76,8 @@ void FootpathObject::ReadJson(IReadObjectContext* context, const json_t* root)
_legacyType.flags = ObjectJsonHelpers::GetFlags<uint8_t>(
properties,
{
{ "hasSupportImages", FOOTPATH_ENTRY_FLAG_HAS_SUPPORT_BASE_SPRITE },
{ "hasElevatedPathImages", FOOTPATH_ENTRY_FLAG_HAS_PATH_BASE_SPRITE },
{ "hasSupportImages", RAILING_ENTRY_FLAG_HAS_SUPPORT_BASE_SPRITE },
{ "hasElevatedPathImages", RAILING_ENTRY_FLAG_DRAW_PATH_OVER_SUPPORTS },
{ "editorOnly", FOOTPATH_ENTRY_FLAG_SHOW_ONLY_IN_SCENARIO_EDITOR },
});

View File

@@ -1076,14 +1076,14 @@ bool metal_b_supports_paint_setup(
* @param special (ax)
* @param height (dx)
* @param imageColourFlags (ebp)
* @param pathEntry (0x00F3EF6C)
* @param railingEntry (0x00F3EF6C)
* @param[out] underground (Carry Flag)
*
* @return Whether supports were drawn
*/
bool path_a_supports_paint_setup(
paint_session* session, int32_t supportType, int32_t special, int32_t height, uint32_t imageColourFlags,
rct_footpath_entry* pathEntry, bool* underground)
rct_footpath_entry* railingEntry, bool* underground)
{
if (underground != nullptr)
{
@@ -1116,7 +1116,7 @@ bool path_a_supports_paint_setup(
if (session->Support.slope & 0x20)
{
// save dx2
sub_98196C(session, (pathEntry->bridge_image + 48) | imageColourFlags, 0, 0, 32, 32, 0, baseHeight - 2);
sub_98196C(session, (railingEntry->bridge_image + 48) | imageColourFlags, 0, 0, 32, 32, 0, baseHeight - 2);
hasSupports = true;
}
else if (session->Support.slope & 0x10)
@@ -1130,7 +1130,7 @@ bool path_a_supports_paint_setup(
}
uint32_t imageId = (supportType * 24) + word_97B3C4[session->Support.slope & TILE_ELEMENT_SURFACE_SLOPE_MASK]
+ pathEntry->bridge_image;
+ railingEntry->bridge_image;
sub_98197C(session, imageId | imageColourFlags, 0, 0, 32, 32, 11, baseHeight, 0, 0, baseHeight + 2);
baseHeight += 16;
@@ -1151,7 +1151,7 @@ bool path_a_supports_paint_setup(
}
uint32_t ebx = (supportType * 24) + word_97B3C4[session->Support.slope & TILE_ELEMENT_SURFACE_SLOPE_MASK]
+ pathEntry->bridge_image;
+ railingEntry->bridge_image;
sub_98197C(session, ebx | imageColourFlags, 0, 0, 32, 32, 11, baseHeight, 0, 0, baseHeight + 2);
@@ -1163,7 +1163,7 @@ bool path_a_supports_paint_setup(
{
if (baseHeight & 0x10 || heightSteps == 1 || baseHeight + 16 == session->WaterHeight)
{
uint32_t imageId = (supportType * 24) + pathEntry->bridge_image + 23;
uint32_t imageId = (supportType * 24) + railingEntry->bridge_image + 23;
sub_98196C(session, imageId | imageColourFlags, 0, 0, 32, 32, ((heightSteps == 1) ? 7 : 12), baseHeight);
heightSteps -= 1;
@@ -1172,7 +1172,7 @@ bool path_a_supports_paint_setup(
}
else
{
uint32_t imageId = (supportType * 24) + pathEntry->bridge_image + 22;
uint32_t imageId = (supportType * 24) + railingEntry->bridge_image + 22;
sub_98196C(session, imageId | imageColourFlags, 0, 0, 32, 32, ((heightSteps == 2) ? 23 : 28), baseHeight);
heightSteps -= 2;
@@ -1185,7 +1185,7 @@ bool path_a_supports_paint_setup(
{
uint16_t specialIndex = (special - 1) & 0xFFFF;
uint32_t imageId = pathEntry->bridge_image + 55 + specialIndex;
uint32_t imageId = railingEntry->bridge_image + 55 + specialIndex;
unk_supports_desc supportsDesc = byte_98D8D4[specialIndex];
unk_supports_desc_bound_box boundBox = supportsDesc.bounding_box;
@@ -1224,13 +1224,13 @@ bool path_a_supports_paint_setup(
* @param special (ax)
* @param height (dx)
* @param imageColourFlags (ebp)
* @param pathEntry (0x00F3EF6C)
* @param railingEntry (0x00F3EF6C)
*
* @return Whether supports were drawn
*/
bool path_b_supports_paint_setup(
paint_session* session, int32_t segment, int32_t special, int32_t height, uint32_t imageColourFlags,
rct_footpath_entry* pathEntry)
rct_footpath_entry* railingEntry)
{
support_height* supportSegments = session->SupportSegments;
@@ -1252,7 +1252,7 @@ bool path_b_supports_paint_setup(
uint16_t baseHeight;
if ((supportSegments[segment].slope & 0x20) || (height - supportSegments[segment].height < 6)
|| !(pathEntry->flags & FOOTPATH_ENTRY_FLAG_HAS_SUPPORT_BASE_SPRITE))
|| !(railingEntry->flags & RAILING_ENTRY_FLAG_HAS_SUPPORT_BASE_SPRITE))
{
baseHeight = supportSegments[segment].height;
}
@@ -1262,7 +1262,7 @@ bool path_b_supports_paint_setup(
baseHeight = supportSegments[segment].height;
sub_98196C(
session, (pathEntry->bridge_image + 37 + imageOffset) | imageColourFlags, loc_97AF20[segment].x,
session, (railingEntry->bridge_image + 37 + imageOffset) | imageColourFlags, loc_97AF20[segment].x,
loc_97AF20[segment].y, 0, 0, 5, baseHeight);
baseHeight += 6;
}
@@ -1281,7 +1281,7 @@ bool path_b_supports_paint_setup(
if (heightDiff > 0)
{
sub_98196C(
session, (pathEntry->bridge_image + 20 + (heightDiff - 1)) | imageColourFlags, loc_97AF20[segment].x,
session, (railingEntry->bridge_image + 20 + (heightDiff - 1)) | imageColourFlags, loc_97AF20[segment].x,
loc_97AF20[segment].y, 0, 0, heightDiff - 1, baseHeight);
}
@@ -1314,7 +1314,7 @@ bool path_b_supports_paint_setup(
}
sub_98196C(
session, (pathEntry->bridge_image + 20 + (z - 1)) | imageColourFlags, loc_97AF20[segment].x,
session, (railingEntry->bridge_image + 20 + (z - 1)) | imageColourFlags, loc_97AF20[segment].x,
loc_97AF20[segment].y, 0, 0, (z - 1), baseHeight);
baseHeight += z;
@@ -1325,7 +1325,7 @@ bool path_b_supports_paint_setup(
break;
}
uint32_t imageId = pathEntry->bridge_image + 20 + (z - 1);
uint32_t imageId = railingEntry->bridge_image + 20 + (z - 1);
if (z == 16)
{
imageId += 1;
@@ -1359,7 +1359,7 @@ bool path_b_supports_paint_setup(
break;
}
uint32_t imageId = pathEntry->bridge_image + 20 + (z - 1);
uint32_t imageId = railingEntry->bridge_image + 20 + (z - 1);
sub_98197C(
session, imageId | imageColourFlags, loc_97AF20[segment].x, loc_97AF20[segment].y, 0, 0, 0, baseHeight,
loc_97AF20[segment].x, loc_97AF20[segment].y, baseHeight);

View File

@@ -23,10 +23,10 @@ bool metal_b_supports_paint_setup(
paint_session* session, uint8_t supportType, uint8_t segment, int32_t special, int32_t height, uint32_t imageColourFlags);
bool path_a_supports_paint_setup(
paint_session* session, int32_t supportType, int32_t special, int32_t height, uint32_t imageColourFlags,
rct_footpath_entry* pathEntry, bool* underground);
rct_footpath_entry* railingEntry, bool* underground);
bool path_b_supports_paint_setup(
paint_session* session, int32_t supportType, int32_t special, int32_t height, uint32_t imageColourFlags,
rct_footpath_entry* pathEntry);
rct_footpath_entry* railingEntry);
// There are 13 types of metal supports. A graphic showing all of them is available here:
// https://cloud.githubusercontent.com/assets/737603/19420485/7eaba28e-93ec-11e6-83cb-03190accc094.png

View File

@@ -83,10 +83,10 @@ static constexpr const uint8_t byte_98D8A4[] = {
void path_paint_box_support(
paint_session* session, const TileElement* tileElement, int32_t height, rct_footpath_entry* footpathEntry,
rct_footpath_entry* railingEntry, bool hasFences, uint32_t imageFlags, uint32_t sceneryImageFlags);
rct_footpath_entry* railingEntry, bool hasSupports, uint32_t imageFlags, uint32_t sceneryImageFlags);
void path_paint_pole_support(
paint_session* session, const TileElement* tileElement, int16_t height, rct_footpath_entry* footpathEntry,
rct_footpath_entry* railingEntry, bool hasFences, uint32_t imageFlags, uint32_t sceneryImageFlags);
rct_footpath_entry* railingEntry, bool hasSupports, uint32_t imageFlags, uint32_t sceneryImageFlags);
/* rct2: 0x006A5AE5 */
static void path_bit_lights_paint(
@@ -321,12 +321,12 @@ static void path_bit_jumping_fountains_paint(
* @param tile_element (esi)
*/
static void sub_6A4101(
paint_session* session, const TileElement* tile_element, uint16_t height, uint32_t ebp, bool word_F3F038,
rct_footpath_entry* footpathEntry, uint32_t base_image_id, uint32_t imageFlags)
paint_session* session, const TileElement* tile_element, uint16_t height, uint32_t connectedEdges, bool word_F3F038,
rct_footpath_entry* railingEntry, uint32_t base_image_id, uint32_t imageFlags)
{
if (tile_element->AsPath()->IsQueue())
{
uint8_t local_ebp = ebp & 0x0F;
uint8_t local_ebp = connectedEdges & 0x0F;
if (tile_element->AsPath()->IsSloped())
{
switch ((tile_element->AsPath()->GetSlopeDirection() + session->CurrentRotation)
@@ -442,7 +442,7 @@ static void sub_6A4101(
// If text shown
if (direction < 2 && tile_element->AsPath()->GetRideIndex() != RIDE_ID_NULL && imageFlags == 0)
{
uint16_t scrollingMode = footpathEntry->scrolling_mode;
uint16_t scrollingMode = railingEntry->scrolling_mode;
scrollingMode += direction;
set_format_arg(0, uint32_t, 0);
@@ -484,11 +484,12 @@ static void sub_6A4101(
return;
}
// save ecx, ebp, esi
uint32_t dword_F3EF80 = ebp;
if (!(footpathEntry->flags & FOOTPATH_ENTRY_FLAG_HAS_PATH_BASE_SPRITE))
uint32_t drawnCorners = 0;
// If the path is not drawn over the supports, then no corner sprites will be drawn (making double-width paths
// look like connected series of intersections).
if (tile_element->AsPath()->ShouldDrawPathOverSupports())
{
dword_F3EF80 &= 0x0F;
drawnCorners = (connectedEdges & FOOTPATH_PROPERTIES_EDGES_CORNERS_MASK) >> 4;
}
if (tile_element->AsPath()->IsSloped())
@@ -521,8 +522,7 @@ static void sub_6A4101(
return;
}
uint8_t local_ebp = ebp & 0x0F;
switch (local_ebp)
switch (connectedEdges & FOOTPATH_PROPERTIES_EDGES_EDGES_MASK)
{
case 0:
// purposely left empty
@@ -557,7 +557,7 @@ static void sub_6A4101(
sub_98197C(
session, 77 + base_image_id, 28, 0, 1, 28, 7, height, 28, 4,
height + 2); // bound_box_offset_y seems to be a bug
if (!(dword_F3EF80 & 0x10))
if (!(drawnCorners & FOOTPATH_CORNER_0))
{
sub_98197C(session, 84 + base_image_id, 0, 0, 4, 4, 7, height, 0, 28, height + 2);
}
@@ -565,7 +565,7 @@ static void sub_6A4101(
case 6:
sub_98197C(session, 77 + base_image_id, 4, 0, 1, 28, 7, height, 4, 0, height + 2);
sub_98197C(session, 78 + base_image_id, 0, 4, 28, 1, 7, height, 0, 4, height + 2);
if (!(dword_F3EF80 & 0x20))
if (!(drawnCorners & FOOTPATH_CORNER_1))
{
sub_98197C(session, 85 + base_image_id, 0, 0, 4, 4, 7, height, 28, 28, height + 2);
}
@@ -573,7 +573,7 @@ static void sub_6A4101(
case 9:
sub_98197C(session, 75 + base_image_id, 28, 0, 1, 28, 7, height, 28, 0, height + 2);
sub_98197C(session, 76 + base_image_id, 0, 28, 28, 1, 7, height, 0, 28, height + 2);
if (!(dword_F3EF80 & 0x80))
if (!(drawnCorners & FOOTPATH_CORNER_3))
{
sub_98197C(session, 83 + base_image_id, 0, 0, 4, 4, 7, height, 0, 0, height + 2);
}
@@ -583,7 +583,7 @@ static void sub_6A4101(
sub_98197C(
session, 78 + base_image_id, 0, 28, 28, 1, 7, height, 4, 28,
height + 2); // bound_box_offset_x seems to be a bug
if (!(dword_F3EF80 & 0x40))
if (!(drawnCorners & FOOTPATH_CORNER_2))
{
sub_98197C(session, 86 + base_image_id, 0, 0, 4, 4, 7, height, 28, 0, height + 2);
}
@@ -591,63 +591,63 @@ static void sub_6A4101(
case 7:
sub_98197C(session, 74 + base_image_id, 0, 4, 32, 1, 7, height, 0, 4, height + 2);
if (!(dword_F3EF80 & 0x10))
if (!(drawnCorners & FOOTPATH_CORNER_0))
{
sub_98197C(session, 84 + base_image_id, 0, 0, 4, 4, 7, height, 0, 28, height + 2);
}
if (!(dword_F3EF80 & 0x20))
if (!(drawnCorners & FOOTPATH_CORNER_1))
{
sub_98197C(session, 85 + base_image_id, 0, 0, 4, 4, 7, height, 28, 28, height + 2);
}
break;
case 13:
sub_98197C(session, 74 + base_image_id, 0, 28, 32, 1, 7, height, 0, 28, height + 2);
if (!(dword_F3EF80 & 0x40))
if (!(drawnCorners & FOOTPATH_CORNER_2))
{
sub_98197C(session, 86 + base_image_id, 0, 0, 4, 4, 7, height, 28, 0, height + 2);
}
if (!(dword_F3EF80 & 0x80))
if (!(drawnCorners & FOOTPATH_CORNER_3))
{
sub_98197C(session, 83 + base_image_id, 0, 0, 4, 4, 7, height, 0, 0, height + 2);
}
break;
case 14:
sub_98197C(session, 73 + base_image_id, 4, 0, 1, 32, 7, height, 4, 0, height + 2);
if (!(dword_F3EF80 & 0x20))
if (!(drawnCorners & FOOTPATH_CORNER_1))
{
sub_98197C(session, 85 + base_image_id, 0, 0, 4, 4, 7, height, 28, 28, height + 2);
}
if (!(dword_F3EF80 & 0x40))
if (!(drawnCorners & FOOTPATH_CORNER_2))
{
sub_98197C(session, 86 + base_image_id, 0, 0, 4, 4, 7, height, 28, 0, height + 2);
}
break;
case 11:
sub_98197C(session, 73 + base_image_id, 28, 0, 1, 32, 7, height, 28, 0, height + 2);
if (!(dword_F3EF80 & 0x10))
if (!(drawnCorners & FOOTPATH_CORNER_0))
{
sub_98197C(session, 84 + base_image_id, 0, 0, 4, 4, 7, height, 0, 28, height + 2);
}
if (!(dword_F3EF80 & 0x80))
if (!(drawnCorners & FOOTPATH_CORNER_3))
{
sub_98197C(session, 83 + base_image_id, 0, 0, 4, 4, 7, height, 0, 0, height + 2);
}
break;
case 15:
if (!(dword_F3EF80 & 0x10))
if (!(drawnCorners & FOOTPATH_CORNER_0))
{
sub_98197C(session, 84 + base_image_id, 0, 0, 4, 4, 7, height, 0, 28, height + 2);
}
if (!(dword_F3EF80 & 0x20))
if (!(drawnCorners & FOOTPATH_CORNER_1))
{
sub_98197C(session, 85 + base_image_id, 0, 0, 4, 4, 7, height, 28, 28, height + 2);
}
if (!(dword_F3EF80 & 0x40))
if (!(drawnCorners & FOOTPATH_CORNER_2))
{
sub_98197C(session, 86 + base_image_id, 0, 0, 4, 4, 7, height, 28, 0, height + 2);
}
if (!(dword_F3EF80 & 0x80))
if (!(drawnCorners & FOOTPATH_CORNER_3))
{
sub_98197C(session, 83 + base_image_id, 0, 0, 4, 4, 7, height, 0, 0, height + 2);
}
@@ -661,13 +661,13 @@ static void sub_6A4101(
* @param tile_element (esp[0])
* @param connectedEdges (bp) (relative to the camera's rotation)
* @param height (dx)
* @param footpathEntry (0x00F3EF6C)
* @param railingEntry (0x00F3EF6C)
* @param imageFlags (0x00F3EF70)
* @param sceneryImageFlags (0x00F3EF74)
*/
static void sub_6A3F61(
paint_session* session, const TileElement* tile_element, uint16_t connectedEdges, uint16_t height,
rct_footpath_entry* footpathEntry, uint32_t imageFlags, uint32_t sceneryImageFlags, bool word_F3F038)
rct_footpath_entry* railingEntry, uint32_t imageFlags, uint32_t sceneryImageFlags, bool word_F3F038)
{
// eax --
// ebx --
@@ -739,7 +739,7 @@ static void sub_6A3F61(
// Redundant zoom-level check removed
sub_6A4101(
session, tile_element, height, connectedEdges, word_F3F038, footpathEntry, footpathEntry->image | imageFlags,
session, tile_element, height, connectedEdges, word_F3F038, railingEntry, railingEntry->image | imageFlags,
imageFlags);
}
@@ -981,7 +981,7 @@ void path_paint(paint_session* session, uint16_t height, const TileElement* tile
void path_paint_box_support(
paint_session* session, const TileElement* tileElement, int32_t height, rct_footpath_entry* footpathEntry,
rct_footpath_entry* railingEntry, bool hasFences, uint32_t imageFlags, uint32_t sceneryImageFlags)
rct_footpath_entry* railingEntry, bool hasSupports, uint32_t imageFlags, uint32_t sceneryImageFlags)
{
PathElement* pathElement = tileElement->AsPath();
@@ -1036,7 +1036,7 @@ void path_paint_box_support(
}
}
if (!hasFences || !session->DidPassSurface)
if (!hasSupports || !session->DidPassSurface)
{
sub_98197C(
session, imageId | imageFlags, 0, 0, boundBoxSize.x, boundBoxSize.y, 0, height, boundBoxOffset.x, boundBoxOffset.y,
@@ -1061,7 +1061,7 @@ void path_paint_box_support(
height + boundingBoxZOffset);
// TODO: Revert this when path import works correctly.
if (!pathElement->IsQueue() && !(railingEntry->flags & FOOTPATH_ENTRY_FLAG_HAS_PATH_BASE_SPRITE))
if (!pathElement->IsQueue() && !pathElement->ShouldDrawPathOverSupports())
{
// don't draw
}
@@ -1073,7 +1073,7 @@ void path_paint_box_support(
}
}
sub_6A3F61(session, tileElement, edi, height, railingEntry, imageFlags, sceneryImageFlags, hasFences);
sub_6A3F61(session, tileElement, edi, height, railingEntry, imageFlags, sceneryImageFlags, hasSupports);
uint16_t ax = 0;
if (tileElement->AsPath()->IsSloped())
@@ -1098,7 +1098,7 @@ void path_paint_box_support(
paint_util_set_general_support_height(session, height, 0x20);
if (pathElement->IsQueue() || (tileElement->AsPath()->GetEdgesAndCorners() != 0xFF && hasFences))
if (pathElement->IsQueue() || (tileElement->AsPath()->GetEdgesAndCorners() != 0xFF && hasSupports))
{
paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
return;
@@ -1135,7 +1135,7 @@ void path_paint_box_support(
void path_paint_pole_support(
paint_session* session, const TileElement* tileElement, int16_t height, rct_footpath_entry* footpathEntry,
rct_footpath_entry* railingEntry, bool hasFences, uint32_t imageFlags, uint32_t sceneryImageFlags)
rct_footpath_entry* railingEntry, bool hasSupports, uint32_t imageFlags, uint32_t sceneryImageFlags)
{
PathElement* pathElement = tileElement->AsPath();
@@ -1190,7 +1190,7 @@ void path_paint_pole_support(
}
}
if (!hasFences || !session->DidPassSurface)
if (!hasSupports || !session->DidPassSurface)
{
sub_98197C(
session, imageId | imageFlags, 0, 0, boundBoxSize.x, boundBoxSize.y, 0, height, boundBoxOffset.x, boundBoxOffset.y,
@@ -1216,7 +1216,7 @@ void path_paint_pole_support(
boundBoxOffset.y, height + boundingBoxZOffset);
// TODO: Revert this when path import works correctly.
if (pathElement->IsQueue() || (railingEntry->flags & FOOTPATH_ENTRY_FLAG_HAS_PATH_BASE_SPRITE))
if (pathElement->IsQueue() || pathElement->ShouldDrawPathOverSupports())
{
sub_98199C(
session, imageId | imageFlags, 0, 0, boundBoxSize.x, boundBoxSize.y, 0, height, boundBoxOffset.x,
@@ -1224,7 +1224,7 @@ void path_paint_pole_support(
}
}
sub_6A3F61(session, tileElement, edi, height, railingEntry, imageFlags, sceneryImageFlags, hasFences); // TODO: arguments
sub_6A3F61(session, tileElement, edi, height, railingEntry, imageFlags, sceneryImageFlags, hasSupports); // TODO: arguments
uint16_t ax = 0;
if (tileElement->AsPath()->IsSloped())
@@ -1255,7 +1255,7 @@ void path_paint_pole_support(
paint_util_set_general_support_height(session, height, 0x20);
if (pathElement->IsQueue() || (tileElement->AsPath()->GetEdgesAndCorners() != 0xFF && hasFences))
if (pathElement->IsQueue() || (tileElement->AsPath()->GetEdgesAndCorners() != 0xFF && hasSupports))
{
paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0);
return;

View File

@@ -2135,6 +2135,16 @@ void PathElement::SetQueueBannerDirection(uint8_t direction)
type |= (direction << 6);
}
bool PathElement::ShouldDrawPathOverSupports()
{
return (GetRailingEntry()->flags & RAILING_ENTRY_FLAG_DRAW_PATH_OVER_SUPPORTS);
}
void PathElement::SetShouldDrawPathOverSupports(bool on)
{
log_verbose("Setting 'draw path over supports' to %d", (size_t)on);
}
/**
*
* rct2: 0x006A8B12

View File

@@ -78,11 +78,15 @@ enum
enum
{
FOOTPATH_ENTRY_FLAG_HAS_SUPPORT_BASE_SPRITE = (1 << 0),
FOOTPATH_ENTRY_FLAG_HAS_PATH_BASE_SPRITE = (1 << 1), // When elevated
FOOTPATH_ENTRY_FLAG_SHOW_ONLY_IN_SCENARIO_EDITOR = (1 << 2),
};
enum
{
RAILING_ENTRY_FLAG_HAS_SUPPORT_BASE_SPRITE = (1 << 0),
RAILING_ENTRY_FLAG_DRAW_PATH_OVER_SUPPORTS = (1 << 1), // When elevated
};
enum
{
FOOTPATH_SEARCH_SUCCESS,
@@ -107,6 +111,14 @@ enum
RAISE_FOOTPATH_FLAG = (1 << 4)
};
enum
{
FOOTPATH_CORNER_0 = (1 << 0),
FOOTPATH_CORNER_1 = (1 << 1),
FOOTPATH_CORNER_2 = (1 << 2),
FOOTPATH_CORNER_3 = (1 << 3),
};
extern uint8_t gFootpathProvisionalFlags;
extern LocationXYZ16 gFootpathProvisionalPosition;
extern uint8_t gFootpathProvisionalType;

View File

@@ -228,6 +228,9 @@ public:
void SetAdditionStatus(uint8_t newStatus);
uint8_t GetRCT1PathType() const;
bool ShouldDrawPathOverSupports();
void SetShouldDrawPathOverSupports(bool on);
};
assert_struct_size(PathElement, 8);