--- deliantra/server/random_maps/rogue_layout.C 2008/04/11 21:09:53 1.7 +++ deliantra/server/random_maps/rogue_layout.C 2008/04/15 03:00:24 1.9 @@ -31,48 +31,49 @@ if ((i > 0) && (layout[i - 1][j] != 0 && layout[i - 1][j] != '.')) surround_index += 1; + if ((i < Xsize - 1) && (layout[i + 1][j] != 0 && layout[i + 1][j] != '.')) surround_index += 2; + if ((j > 0) && (layout[i][j - 1] != 0 && layout[i][j - 1] != '.')) surround_index += 4; + if ((j < Ysize - 1) && (layout[i][j + 1] != 0 && layout[i][j + 1] != '.')) surround_index += 8; + return surround_index; } /* actually make the layout: we work by a reduction process: * first we make everything a wall, then we remove areas to make rooms */ -Maze -roguelike_layout_gen (int xsize, int ysize, int options) +void +roguelike_layout_gen (Layout maze, int options) { int i, j; Room *walk; int nrooms = 0; int tries = 0; - Maze maze (xsize, ysize); - - for (i = 0; i < xsize; i++) - for (j = 0; j < ysize; j++) - maze[i][j] = '#'; + int xsize = maze->w; + int ysize = maze->h; /* minimum room size is basically 5x5: if xsize/ysize is less than 3x that then hollow things out, stick in a stairsup and stairs down, and exit */ - if (xsize < 11 || ysize < 11) { - for (i = 1; i < xsize - 1; i++) - for (j = 1; j < ysize - 1; j++) - maze[i][j] = 0; + maze->clear (); + maze->border (); maze[(xsize - 1) / 2][(ysize - 1) / 2 ] = '>'; maze[(xsize - 1) / 2][(ysize - 1) / 2 + 1] = '<'; - return maze; + return; } + maze->clear ('#'); + /* decide on the number of rooms */ nrooms = rndm (10) + 6; Room *rooms = salloc0 (nrooms + 1); @@ -88,20 +89,18 @@ i++; } - if (i == 0) - { /* no can do! */ - for (i = 1; i < xsize - 1; i++) - for (j = 1; j < ysize - 1; j++) - maze[i][j] = 0; + if (i == 0) /* no can do! */ + { + maze->clear (); + maze->border (); maze [(xsize - 1) / 2][(ysize - 1) / 2 ] = '>'; maze [(xsize - 1) / 2][(ysize - 1) / 2 + 1] = '<'; sfree (rooms, nrooms + 1); - return maze; + return; } - /* erase the areas occupied by the rooms */ roguelike_make_rooms (rooms, maze, options); @@ -155,7 +154,6 @@ } sfree (rooms, nrooms + 1); - return maze; } static int