--- deliantra/server/random_maps/square_spiral.C 2006/08/13 17:16:03 1.1 +++ deliantra/server/random_maps/square_spiral.C 2006/09/10 16:06:37 1.2 @@ -1,6 +1,7 @@ + /* * static char *rcsid_map_c = - * "$Id: square_spiral.C,v 1.1 2006/08/13 17:16:03 elmex Exp $"; + * "$Id: square_spiral.C,v 1.2 2006/09/10 16:06:37 root Exp $"; */ /* @@ -50,7 +51,7 @@ #include -char **map_gen_onion(int xsize, int ysize, int option, int layers); +char **map_gen_onion (int xsize, int ysize, int option, int layers); /* These are some helper functions which help with @@ -62,74 +63,89 @@ finds a vertical wall, i.e., the corner. It sets cx and cy to that. it also starts from cx and cy. */ -void find_top_left_corner(char **maze,int *cx, int *cy) { +void +find_top_left_corner (char **maze, int *cx, int *cy) +{ (*cy)--; /* find the top wall. */ - while(maze[*cx][*cy]==0) (*cy)--; + while (maze[*cx][*cy] == 0) + (*cy)--; /* proceed right until a corner is detected */ - while(maze[*cx][*cy+1]==0) (*cx)++; - + while (maze[*cx][*cy + 1] == 0) + (*cx)++; + /* cx and cy should now be the top-right corner of the onion layer */ } -char **make_square_spiral_layout(int xsize, int ysize,int options) { - int i,j; - int cx,cy; - int tx,ty; +char ** +make_square_spiral_layout (int xsize, int ysize, int options) +{ + int i, j; + int cx, cy; + int tx, ty; /* generate and allocate a doorless, centered onion */ - char **maze = map_gen_onion(xsize,ysize,OPT_CENTERED | OPT_NO_DOORS,0); + char **maze = map_gen_onion (xsize, ysize, OPT_CENTERED | OPT_NO_DOORS, 0); /* find the layout center. */ - cx = 0; cy = 0; - for(i=0;i xsize -2 || ty > ysize-2 ) break; - make_wall(maze,tx,ty-1,1); /* make a vertical wall with a door */ + if (ty < 2 || tx < 2 || tx > xsize - 2 || ty > ysize - 2) + break; + make_wall (maze, tx, ty - 1, 1); /* make a vertical wall with a door */ - maze[tx][ty-1]='#'; /* convert the door that make_wall puts here to a wall */ - maze[tx-1][ty]='D';/* make a doorway out of this layer */ + maze[tx][ty - 1] = '#'; /* convert the door that make_wall puts here to a wall */ + maze[tx - 1][ty] = 'D'; /* make a doorway out of this layer */ - /* walk left until we find the top-left corner */ - while((tx>2) && maze[tx-1][ty]) tx--; + /* walk left until we find the top-left corner */ + while ((tx > 2) && maze[tx - 1][ty]) + tx--; - make_wall(maze,tx-1,ty,0); /* make a horizontal wall with a door */ + make_wall (maze, tx - 1, ty, 0); /* make a horizontal wall with a door */ - /* walk down until we find the bottom-left corner */ - while(((ty+1) < ysize) && maze[tx][ty+1] ) ty++; + /* walk down until we find the bottom-left corner */ + while (((ty + 1) < ysize) && maze[tx][ty + 1]) + ty++; - make_wall(maze,tx,ty+1,1); /* make a vertical wall with a door */ + make_wall (maze, tx, ty + 1, 1); /* make a vertical wall with a door */ - /* walk rightuntil we find the bottom-right corner */ - while(((tx + 1) < xsize) && maze[tx+1][ty]) tx++; - - make_wall(maze,tx+1,ty,0); /* make a horizontal wall with a door */ - tx++; /* set up for next layer. */ - } - - /* place the exits. */ + /* walk rightuntil we find the bottom-right corner */ + while (((tx + 1) < xsize) && maze[tx + 1][ty]) + tx++; - if(RANDOM() %2) { - maze[cx][cy]='>'; - maze[xsize-2][1]='<'; - } - else { - maze[cx][cy]='<'; - maze[xsize-2][1]='>'; - } - - return maze; -} + make_wall (maze, tx + 1, ty, 0); /* make a horizontal wall with a door */ + tx++; /* set up for next layer. */ + } + /* place the exits. */ + if (RANDOM () % 2) + { + maze[cx][cy] = '>'; + maze[xsize - 2][1] = '<'; + } + else + { + maze[cx][cy] = '<'; + maze[xsize - 2][1] = '>'; + } + return maze; +}