… | |
… | |
829 | } |
829 | } |
830 | |
830 | |
831 | static void |
831 | static void |
832 | gen_mixed_ (layout &maze, random_map_params *RP) |
832 | gen_mixed_ (layout &maze, random_map_params *RP) |
833 | { |
833 | { |
834 | int dir; |
834 | if (maze.w > maze.h && maze.w > 16) |
835 | |
|
|
836 | if (maze.w < 20 && maze.h < 20 && !rmg_rndm (3)) |
|
|
837 | dir = 2; // stop recursion randomly |
|
|
838 | else |
|
|
839 | dir = maze.w > maze.h; |
|
|
840 | |
|
|
841 | if (dir == 0 && maze.w > 16) |
|
|
842 | { |
835 | { |
843 | int m = rmg_rndm (8, maze.w - 8); |
836 | int m = rmg_rndm (8, maze.w - 8); |
844 | |
837 | |
845 | layout m1 (maze, 0, 0, m , maze.h); gen_mixed_ (m1, RP); |
838 | layout m1 (maze, 0, 0, m , maze.h); gen_mixed_ (m1, RP); |
846 | layout m2 (maze, m, 0, maze.w, maze.h); gen_mixed_ (m2, RP); |
839 | layout m2 (maze, m, 0, maze.w, maze.h); gen_mixed_ (m2, RP); |
847 | } |
840 | } |
848 | else if (dir == 1 && maze.h > 16) |
841 | else if (maze.h > 16) |
849 | { |
842 | { |
850 | int m = rmg_rndm (8, maze.h - 8); |
843 | int m = rmg_rndm (8, maze.h - 8); |
851 | |
844 | |
852 | layout m1 (maze, 0, 0, maze.w, m ); gen_mixed_ (m1, RP); |
845 | layout m1 (maze, 0, 0, maze.w, m ); gen_mixed_ (m1, RP); |
853 | layout m2 (maze, 0, m, maze.w, maze.h); gen_mixed_ (m2, RP); |
846 | layout m2 (maze, 0, m, maze.w, maze.h); gen_mixed_ (m2, RP); |