OSDN Git Service

90330c14df97ef9da06c1bbfe3a20b0681471c7d
[hengband/hengband.git] / src / rooms-fractal.c
1 #include "angband.h"\r
2 #include "grid.h"\r
3 #include "generate.h"\r
4 #include "rooms.h"\r
5 #include "rooms-normal.h"\r
6 \r
7 /*!\r
8 * @brief タイプ9の部屋…フラクタルカーブによる洞窟生成 / Type 9 -- Driver routine to create fractal cave system\r
9 * @return なし\r
10 */\r
11 bool build_type9(void)\r
12 {\r
13         int grd, roug, cutoff;\r
14         POSITION xsize, ysize, y0, x0;\r
15 \r
16         bool done, light, room;\r
17 \r
18         /* get size: note 'Evenness'*/\r
19         xsize = randint1(22) * 2 + 6;\r
20         ysize = randint1(15) * 2 + 6;\r
21 \r
22         /* Find and reserve some space in the dungeon.  Get center of room. */\r
23         if (!find_space(&y0, &x0, ysize + 1, xsize + 1))\r
24         {\r
25                 /* Limit to the minimum room size, and retry */\r
26                 xsize = 8;\r
27                 ysize = 8;\r
28 \r
29                 /* Find and reserve some space in the dungeon.  Get center of room. */\r
30                 if (!find_space(&y0, &x0, ysize + 1, xsize + 1))\r
31                 {\r
32                         /*\r
33                         * Still no space?!\r
34                         * Try normal room\r
35                         */\r
36                         return build_type1();\r
37                 }\r
38         }\r
39 \r
40         light = done = FALSE;\r
41         room = TRUE;\r
42 \r
43         if ((dun_level <= randint1(25)) && !(d_info[dungeon_idx].flags1 & DF1_DARKNESS)) light = TRUE;\r
44 \r
45         while (!done)\r
46         {\r
47                 /* Note: size must be even or there are rounding problems\r
48                 * This causes the tunnels not to connect properly to the room */\r
49 \r
50                 /* testing values for these parameters feel free to adjust */\r
51                 grd = 1 << (randint0(4));\r
52 \r
53                 /* want average of about 16 */\r
54                 roug = randint1(8) * randint1(4);\r
55 \r
56                 /* about size/2 */\r
57                 cutoff = randint1(xsize / 4) + randint1(ysize / 4) +\r
58                         randint1(xsize / 4) + randint1(ysize / 4);\r
59 \r
60                 /* make it */\r
61                 generate_hmap(y0, x0, xsize, ysize, grd, roug, cutoff);\r
62 \r
63                 /* Convert to normal format + clean up */\r
64                 done = generate_fracave(y0, x0, xsize, ysize, cutoff, light, room);\r
65         }\r
66 \r
67         return TRUE;\r
68 }\r