It looks like a road, which possibly ran where I drew the red line, is erased by coast leaving multiple single track tiles (magenta).

So script wise, as this seems to occur only with coasts I thought a check like:
Code: Select all
FUNCTION BM_RemoveVestigialTracks()
{
int x;
int y;
int width;
int height;
int data;
int j;
int attempts;
int any_found;
width = GetMapWidth();
height = GetMapHeight();
attempts = 100;
any_found = 1;
for (j = 0; (j < attempts) && (any_found == 1); j++)
{
any_found = 0;
for (x = 16; x <= width - 17; x++)
{
for (y = 16; y <= height - 17; y++)
{
data = BM_GetTileDataX(x, y, 1);
if (data == 6)
{
if ((BM_GetTileDataX(x, y+1, 1) != 6) && (BM_GetTileDataX(x-1, y, 1) != 6) && (BM_GetTileDataX(x, y-1, 1) != 6) && (BM_GetTileDataX(x+1, y, 1) != 6))
{
any_found = 1;
SetValidTileData(x,y,1,0);
}
}
}
}
}
}
I've tried using it in the main script after FinaliseCoast function and it seems to work, but again its very hard to test.
if (coast == 1)
{
BM_FinaliseCoast();
BM_RemoveVestigialTracks();
}
If I remove the repeated attempts, and the width height limits, it looks like this:
Code: Select all
FUNCTION BM_RemoveVestigialTracks()
{
int x;
int y;
int width;
int height;
int data;
width = GetMapWidth();
height = GetMapHeight();
for (x = 0; x < width; x++)
{
for (y = 0; y < height; y++)
{
data = BM_GetTileDataX(x, y, 1);
if (data == 6)
{
if ((BM_GetTileDataX(x, y+1, 1) != 6) && (BM_GetTileDataX(x-1, y, 1) != 6) && (BM_GetTileDataX(x, y-1, 1) != 6) && (BM_GetTileDataX(x+1, y, 1) != 6))
{
SetValidTileData(x,y,1,0);
}
}
}
}
}