--- deliantra/server/random_maps/layout.C 2010/07/04 00:27:14 1.20 +++ deliantra/server/random_maps/layout.C 2010/07/04 01:01:42 1.21 @@ -829,24 +829,28 @@ } static void -gen_mixed_ (layout &maze, random_map_params *RP, int dir) +gen_mixed_ (layout &maze, random_map_params *RP) { + int dir; + if (maze.w < 20 && maze.h < 20 && !rmg_rndm (3)) dir = 2; // stop recursion randomly + else + dir = maze.w > maze.h; if (dir == 0 && maze.w > 16) { int m = rmg_rndm (8, maze.w - 8); - layout m1 (maze, 0, 0, m , maze.h); gen_mixed_ (m1, RP, !dir); - layout m2 (maze, m, 0, maze.w, maze.h); gen_mixed_ (m2, RP, !dir); + layout m1 (maze, 0, 0, m , maze.h); gen_mixed_ (m1, RP); + layout m2 (maze, m, 0, maze.w, maze.h); gen_mixed_ (m2, RP); } else if (dir == 1 && maze.h > 16) { int m = rmg_rndm (8, maze.h - 8); - layout m1 (maze, 0, 0, maze.w, m ); gen_mixed_ (m1, RP, !dir); - layout m2 (maze, 0, m, maze.w, maze.h); gen_mixed_ (m2, RP, !dir); + layout m1 (maze, 0, 0, maze.w, m ); gen_mixed_ (m1, RP); + layout m2 (maze, 0, m, maze.w, maze.h); gen_mixed_ (m2, RP); } else { @@ -864,7 +868,7 @@ gen_mixed (layout &maze, random_map_params *RP) { random_map_params &rp = *new random_map_params (RP); - gen_mixed_ (maze, &rp, rmg_rndm (2)); + gen_mixed_ (maze, &rp); delete &rp; maze.border ();