… | |
… | |
346 | data [x][y] = 0; |
346 | data [x][y] = 0; |
347 | } |
347 | } |
348 | |
348 | |
349 | ///////////////////////////////////////////////////////////////////////////// |
349 | ///////////////////////////////////////////////////////////////////////////// |
350 | |
350 | |
351 | // inspired mostly by http://www.jimrandomh.org/misc/caves.txt |
|
|
352 | void |
|
|
353 | layout::gen_cave (int subtype) |
|
|
354 | { |
|
|
355 | switch (subtype) |
|
|
356 | { |
|
|
357 | // a rough cave |
|
|
358 | case 0: |
|
|
359 | fill_rand (rmg_rndm (85, 97)); |
|
|
360 | break; |
|
|
361 | |
|
|
362 | // corridors |
|
|
363 | case 1: |
|
|
364 | fill_rand (rmg_rndm (5, 40)); |
|
|
365 | erode_1_2 (5, 2, 10); |
|
|
366 | erode_1_2 (5, -1, 10); |
|
|
367 | erode_1_2 (5, 2, 1); |
|
|
368 | break; |
|
|
369 | |
|
|
370 | // somewhat open, roundish |
|
|
371 | case 2: |
|
|
372 | fill_rand (45); |
|
|
373 | erode_1_2 (5, 0, 5); |
|
|
374 | erode_1_2 (5, 1, 1); |
|
|
375 | break; |
|
|
376 | |
|
|
377 | // wide open, some room-like structures |
|
|
378 | case 3: |
|
|
379 | fill_rand (45); |
|
|
380 | erode_1_2 (5, 2, 4); |
|
|
381 | erode_1_2 (5, -1, 3); |
|
|
382 | break; |
|
|
383 | } |
|
|
384 | |
|
|
385 | border (); |
|
|
386 | isolation_remover (); |
|
|
387 | } |
|
|
388 | |
|
|
389 | ///////////////////////////////////////////////////////////////////////////// |
|
|
390 | |
|
|
391 | //+GPL |
351 | //+GPL |
392 | |
352 | |
393 | /* puts doors at appropriate locations in a maze. */ |
353 | /* puts doors at appropriate locations in a maze. */ |
394 | void |
354 | void |
395 | layout::doorify () |
355 | layout::doorify () |
… | |
… | |
813 | } |
773 | } |
814 | } |
774 | } |
815 | |
775 | |
816 | ///////////////////////////////////////////////////////////////////////////// |
776 | ///////////////////////////////////////////////////////////////////////////// |
817 | |
777 | |
|
|
778 | // inspired mostly by http://www.jimrandomh.org/misc/caves.txt |
|
|
779 | void |
|
|
780 | layout::gen_cave (int subtype) |
|
|
781 | { |
|
|
782 | switch (subtype) |
|
|
783 | { |
|
|
784 | // a rough cave |
|
|
785 | case 0: |
|
|
786 | fill_rand (rmg_rndm (85, 97)); |
|
|
787 | break; |
|
|
788 | |
|
|
789 | // corridors |
|
|
790 | case 1: |
|
|
791 | fill_rand (rmg_rndm (5, 40)); |
|
|
792 | erode_1_2 (5, 2, 10); |
|
|
793 | erode_1_2 (5, -1, 10); |
|
|
794 | erode_1_2 (5, 2, 1); |
|
|
795 | break; |
|
|
796 | |
|
|
797 | // somewhat open, roundish |
|
|
798 | case 2: |
|
|
799 | fill_rand (45); |
|
|
800 | erode_1_2 (5, 0, 5); |
|
|
801 | erode_1_2 (5, 1, 1); |
|
|
802 | break; |
|
|
803 | |
|
|
804 | // wide open, some room-like structures |
|
|
805 | case 3: |
|
|
806 | fill_rand (45); |
|
|
807 | erode_1_2 (5, 2, 4); |
|
|
808 | erode_1_2 (5, -1, 3); |
|
|
809 | break; |
|
|
810 | } |
|
|
811 | |
|
|
812 | border (); |
|
|
813 | isolation_remover (); |
|
|
814 | } |
|
|
815 | |
818 | static void |
816 | static void |
819 | gen_mixed_ (layout &maze, random_map_params *RP, int dir) |
817 | gen_mixed_ (layout &maze, random_map_params *RP, int dir) |
820 | { |
818 | { |
821 | if (maze.w < 20 && maze.h < 20 && !rmg_rndm (3)) |
819 | if (maze.w < 20 && maze.h < 20 && !rmg_rndm (3)) |
822 | dir = 2; // stop recursion randomly |
820 | dir = 2; // stop recursion randomly |
… | |
… | |
844 | |
842 | |
845 | maze.generate (RP); |
843 | maze.generate (RP); |
846 | } |
844 | } |
847 | } |
845 | } |
848 | |
846 | |
|
|
847 | // recursive subdivision with random sublayouts |
849 | static void |
848 | static void |
850 | gen_mixed (layout &maze, random_map_params *RP) |
849 | gen_mixed (layout &maze, random_map_params *RP) |
851 | { |
850 | { |
852 | random_map_params &rp = *new random_map_params (RP); |
851 | random_map_params &rp = *new random_map_params (RP); |
853 | gen_mixed_ (maze, &rp, rmg_rndm (2)); |
852 | gen_mixed_ (maze, &rp, rmg_rndm (2)); |