… | |
… | |
812 | for (int n = w * h / 30 + 1; n--; ) |
812 | for (int n = w * h / 30 + 1; n--; ) |
813 | { |
813 | { |
814 | int rw = rmg_rndm (6, 10); |
814 | int rw = rmg_rndm (6, 10); |
815 | int rh = rmg_rndm (6, 10); |
815 | int rh = rmg_rndm (6, 10); |
816 | |
816 | |
|
|
817 | if (rw > w || rh > h) |
|
|
818 | continue; |
|
|
819 | |
817 | int rx = rmg_rndm (0, w - rw); |
820 | int rx = rmg_rndm (0, w - rw); |
818 | int ry = rmg_rndm (0, h - rh); |
821 | int ry = rmg_rndm (0, h - rh); |
819 | |
822 | |
820 | rect (rx, ry, rx + rw, ry + rh, '#'); |
823 | rect (rx, ry, rx + rw, ry + rh, '#'); |
821 | fill_rect (rx + 1, ry + 1, rx + rw - 1, ry + rh - 1, 0); |
824 | fill_rect (rx + 1, ry + 1, rx + rw - 1, ry + rh - 1, 0); |
… | |
… | |
824 | border (); |
827 | border (); |
825 | isolation_remover (0); |
828 | isolation_remover (0); |
826 | } |
829 | } |
827 | |
830 | |
828 | static void |
831 | static void |
829 | gen_mixed_ (layout &maze, random_map_params *RP, int dir) |
832 | gen_mixed_ (layout &maze, random_map_params *RP) |
830 | { |
833 | { |
|
|
834 | int dir; |
|
|
835 | |
831 | if (maze.w < 20 && maze.h < 20 && !rmg_rndm (3)) |
836 | if (maze.w < 20 && maze.h < 20 && !rmg_rndm (3)) |
832 | dir = 2; // stop recursion randomly |
837 | dir = 2; // stop recursion randomly |
|
|
838 | else |
|
|
839 | dir = maze.w > maze.h; |
833 | |
840 | |
834 | if (dir == 0 && maze.w > 16) |
841 | if (dir == 0 && maze.w > 16) |
835 | { |
842 | { |
836 | int m = rmg_rndm (8, maze.w - 8); |
843 | int m = rmg_rndm (8, maze.w - 8); |
837 | |
844 | |
838 | layout m1 (maze, 0, 0, m , maze.h); gen_mixed_ (m1, RP, !dir); |
845 | layout m1 (maze, 0, 0, m , maze.h); gen_mixed_ (m1, RP); |
839 | layout m2 (maze, m, 0, maze.w, maze.h); gen_mixed_ (m2, RP, !dir); |
846 | layout m2 (maze, m, 0, maze.w, maze.h); gen_mixed_ (m2, RP); |
840 | } |
847 | } |
841 | else if (dir == 1 && maze.h > 16) |
848 | else if (dir == 1 && maze.h > 16) |
842 | { |
849 | { |
843 | int m = rmg_rndm (8, maze.h - 8); |
850 | int m = rmg_rndm (8, maze.h - 8); |
844 | |
851 | |
845 | layout m1 (maze, 0, 0, maze.w, m ); gen_mixed_ (m1, RP, !dir); |
852 | layout m1 (maze, 0, 0, maze.w, m ); gen_mixed_ (m1, RP); |
846 | layout m2 (maze, 0, m, maze.w, maze.h); gen_mixed_ (m2, RP, !dir); |
853 | layout m2 (maze, 0, m, maze.w, maze.h); gen_mixed_ (m2, RP); |
847 | } |
854 | } |
848 | else |
855 | else |
849 | { |
856 | { |
850 | RP->map_layout_style = rmg_rndm (NROFLAYOUTS - 2) + 1; |
857 | RP->map_layout_style = rmg_rndm (NROFLAYOUTS - 2) + 1; |
851 | |
858 | |
… | |
… | |
859 | // recursive subdivision with random sublayouts |
866 | // recursive subdivision with random sublayouts |
860 | static void |
867 | static void |
861 | gen_mixed (layout &maze, random_map_params *RP) |
868 | gen_mixed (layout &maze, random_map_params *RP) |
862 | { |
869 | { |
863 | random_map_params &rp = *new random_map_params (RP); |
870 | random_map_params &rp = *new random_map_params (RP); |
864 | gen_mixed_ (maze, &rp, rmg_rndm (2)); |
871 | gen_mixed_ (maze, &rp); |
865 | delete &rp; |
872 | delete &rp; |
866 | |
873 | |
867 | maze.border (); |
874 | maze.border (); |
868 | maze.isolation_remover (0); |
875 | maze.isolation_remover (0); |
869 | } |
876 | } |