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:
@@ -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 },
|
||||
});
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user