I advanced a little on this crazy project. There is more work but I think it looks great!







Moderators: Slitherine Core, BA Moderators
Code: Select all
FUNCTION BuildRoad(x1, y1, x2, y2)
{
int i ;
int j ;
int k ;
int x ;
int y ;
int yfinal ;
int flag ;
flag = 0 ;
x = Min(x1, x2) ;
if (x == x1)
{
y = y1 ;
yfinal = y2 ;
}
else
{
y = y2 ;
yfinal = y1 ;
}
SetTileData(x, y, 2, 1) ;
for (k = 0 ; flag == 0 ; k++)
{
if ((x == Max(x1, x2)) && (y == yfinal))
{
flag = 1 ;
}
if ((x == Max(x1, x2)) && (y != yfinal))
{
if (y < yfinal)
{
y++;
}
else
{
y--;
}
}
if (( x != Max(x1, x2)) && (y == yfinal))
{
x++;
}
if ((x != Max(x1, x2)) && ( y != yfinal))
{
k = Rand(1,100);
if (k < 50 )
{
x++;
}
else
{
if (y < yfinal)
{
y++;
}
else
{
y--;
}
}
}
SetTileData(x, y, 2, 1) ;
}
}
FUNCTION DrawRoads()
{
int i ;
int j ;
int id ;
for (i = GetGlobal("xmin") ; i < GetGlobal("xmax") ; i++)
{
for (j = GetGlobal("ymin") ; j < GetGlobal("ymax") ; j++)
{
if (GetTileData(i, j, 2) == 1)
{
//Draw road tiles
if ((GetTileData(i+1, j, 2) == 1) && (GetTileData(i-1, j, 2) == 1) && (GetTileData(i, j+1, 2) == 1) && (GetTileData(i, j-1, 2) == 1))
{
//crossroads
id = GetTileOnTile(2, 10, 12) ;
PlaceTile(i, j, id, 2);
SetTileData(i, j, 1, 1);
}
if ((GetTileData(i+1, j, 2) == 1) && (GetTileData(i-1, j, 2) == 1) && (GetTileData(i, j+1, 2) == 0) && (GetTileData(i, j-1, 2) == 0))
{
//line x
id = GetTileOnTile(2, 10, 10) ;
PlaceTile(i, j, id, 0);
SetTileData(i, j, 1, 1);
}
if ((GetTileData(i+1, j, 2) == 0) && (GetTileData(i-1, j, 2) == 0) && (GetTileData(i, j+1, 2) == 1) && (GetTileData(i, j-1, 2) == 1))
{
//line y
id = GetTileOnTile(2, 10, 10) ;
PlaceTile(i, j, id, 1);
SetTileData(i, j, 1, 1);
}
if ((GetTileData(i+1, j, 2) == 1) && (GetTileData(i-1, j, 2) == 1) && (GetTileData(i, j+1, 2) == 1) && (GetTileData(i, j-1, 2) == 0))
{
//T roads UP
id = GetTileOnTile(2, 10, 13) ;
PlaceTile(i, j, id, 2);
SetTileData(i, j, 1, 1);
}
if ((GetTileData(i+1, j, 2) == 1) && (GetTileData(i-1, j, 2) == 1) && (GetTileData(i, j+1, 2) == 0) && (GetTileData(i, j-1, 2) == 1))
{
//T roads DOWN
id = GetTileOnTile(2, 10, 13) ;
PlaceTile(i, j, id, 0);
SetTileData(i, j, 1, 1);
}
if ((GetTileData(i+1, j, 2) == 1) && (GetTileData(i-1, j, 2) == 0) && (GetTileData(i, j+1, 2) == 1) && (GetTileData(i, j-1, 2) == 1))
{
//T roads LEFT
id = GetTileOnTile(2, 10, 13) ;
PlaceTile(i, j, id, 1);
SetTileData(i, j, 1, 1);
}
if ((GetTileData(i+1, j, 2) == 0) && (GetTileData(i-1, j, 2) == 1) && (GetTileData(i, j+1, 2) == 1) && (GetTileData(i, j-1, 2) == 1))
{
//T roads RIGHT
id = GetTileOnTile(2, 10, 13) ;
PlaceTile(i, j, id, 3);
SetTileData(i, j, 1, 1);
}
if ((GetTileData(i+1, j, 2) == 0) && (GetTileData(i-1, j, 2) == 1) && (GetTileData(i, j+1, 2) == 0) && (GetTileData(i, j-1, 2) == 1))
{
//Turn Down-right
id = GetTileOnTile(2, 10, 11) ;
PlaceTile(i, j, id, 0);
SetTileData(i, j, 1, 1);
}
if ((GetTileData(i+1, j, 2) == 1) && (GetTileData(i-1, j, 2) == 0) && (GetTileData(i, j+1, 2) == 0) && (GetTileData(i, j-1, 2) == 1))
{
//Turn Down-left
id = GetTileOnTile(2, 10, 11) ;
PlaceTile(i, j, id, 1);
SetTileData(i, j, 1, 1);
}
if ((GetTileData(i+1, j, 2) == 1) && (GetTileData(i-1, j, 2) == 0) && (GetTileData(i, j+1, 2) == 1) && (GetTileData(i, j-1, 2) == 0))
{
//Turn Up-left
id = GetTileOnTile(2, 10, 11) ;
PlaceTile(i, j, id, 2);
SetTileData(i, j, 1, 1);
}
if ((GetTileData(i+1, j, 2) == 0) && (GetTileData(i-1, j, 2) == 1) && (GetTileData(i, j+1, 2) == 1) && (GetTileData(i, j-1, 2) == 0))
{
//Turn Up-right
id = GetTileOnTile(2, 10, 11) ;
PlaceTile(i, j, id, 3);
SetTileData(i, j, 1, 1);
}
}
}
}
}
Very cool indeed! I've been wondering how to do this ... mind if I borrow?Amaris wrote:I found a solution for roads and junctions![]()
![]()
![]()
Well, your work is much appreciated because it saved me time!pipfromslitherine wrote:Yeah - the edging of streams is a pain - as there isn't always a valid way to edge any combination of tiles. But it looks like you guys are well on the way - I'm incredibly impressed!
Cheers
Pip