… | |
… | |
110 | void |
110 | void |
111 | layout::fill_rand (int percent) |
111 | layout::fill_rand (int percent) |
112 | { |
112 | { |
113 | percent = lerp (percent, 0, 100, 0, 256); |
113 | percent = lerp (percent, 0, 100, 0, 256); |
114 | |
114 | |
115 | for (int x = w - 1; --x > 0; ) |
115 | for (int x = 0; x < w; ++x) |
116 | for (int y = h - 1; --y > 0; ) |
116 | for (int y = 0; y < h; ++y) |
117 | data [x][y] = rmg_rndm (256) > percent ? 0 : '#'; |
117 | data [x][y] = rmg_rndm (256) > percent ? 0 : '#'; |
118 | } |
118 | } |
119 | |
119 | |
120 | ///////////////////////////////////////////////////////////////////////////// |
120 | ///////////////////////////////////////////////////////////////////////////// |
121 | |
121 | |
… | |
… | |
701 | |
701 | |
702 | return -1; |
702 | return -1; |
703 | } |
703 | } |
704 | |
704 | |
705 | int |
705 | int |
706 | make_wall (char **maze, int x, int y, int dir) |
706 | make_wall (layout &maze, int x, int y, int dir) |
707 | { |
707 | { |
708 | maze[x][y] = 'D'; /* mark a door */ |
708 | maze[x][y] = 'D'; /* mark a door */ |
709 | |
709 | |
710 | switch (dir) |
710 | switch (dir) |
711 | { |
711 | { |
… | |
… | |
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); |