Hengband  2.1.4
 全て データ構造 ファイル 関数 変数 型定義 マクロ定義 ページ
grid.h
説明を見る。
1 /*!
2  * @file grid.h
3  * @brief ダンジョンの生成処理の基幹部分ヘッダーファイル
4  * @date 2014/08/15
5  * @details
6  * Purpose: header file for grid.c, used only in dungeon generation
7  * files (generate.c, rooms.c)
8  * @author
9  * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke
10  * This software may be copied and distributed for educational, research, and
11  * not for profit purposes provided that this copyright and statement are
12  * included in all such copies.
13  */
14 
15 /* Macros */
16 
17 #define set_cave_feat(Y,X,F) (cave[(Y)][(X)].feat = (F))
18 #define add_cave_info(Y,X,I) (cave[(Y)][(X)].info |= (I))
19 
20 /* This should not be used */
21 /*#define set_cave_info(Y,X,I) (cave[(Y)][(X)].info = (I)) */
22 
23 /*!
24  * @brief 指定座標が瓦礫かどうかを返す
25  * @param Y 指定Y座標
26  * @param X 指定X座標
27  * @return 瓦礫ならばTRUE
28  */
29 #define place_rubble(Y,X) set_cave_feat(Y,X,feat_rubble)
30 
31 /*!
32  * @brief 指定座標が上り階段かどうかを返す
33  * @param Y 指定Y座標
34  * @param X 指定X座標
35  * @return 上り階段ならばTRUE
36  */
37 #define place_up_stairs(Y,X) set_cave_feat(Y,X,feat_up_stair)
38 
39 /*!
40  * @brief 指定座標が下り階段かどうかを返す
41  * @param Y 指定Y座標
42  * @param X 指定X座標
43  * @return 下り階段ならばTRUE
44  */
45 #define place_down_stairs(Y,X) set_cave_feat(Y,X,feat_down_stair)
46 
47 /*!
48  * @brief 指定座標がFLOOR属性を持ったマスかどうかを返す
49  * @param Y 指定Y座標
50  * @param X 指定X座標
51  * @return FLOOR属性を持っているならばTRUE
52  */
53 #define is_floor_bold(Y,X) (cave[Y][X].info & CAVE_FLOOR)
54 #define is_extra_bold(Y,X) (cave[Y][X].info & CAVE_EXTRA)
55 
56 #define is_inner_bold(Y,X) (cave[Y][X].info & CAVE_INNER)
57 #define is_outer_bold(Y,X) (cave[Y][X].info & CAVE_OUTER)
58 #define is_solid_bold(Y,X) (cave[Y][X].info & CAVE_SOLID)
59 
60 #define is_floor_grid(C) ((C)->info & CAVE_FLOOR)
61 #define is_extra_grid(C) ((C)->info & CAVE_EXTRA)
62 #define is_inner_grid(C) ((C)->info & CAVE_INNER)
63 #define is_outer_grid(C) ((C)->info & CAVE_OUTER)
64 #define is_solid_grid(C) ((C)->info & CAVE_SOLID)
65 
66 #define place_floor_bold(Y, X) \
67 { \
68  set_cave_feat(Y,X,floor_type[randint0(100)]); \
69  cave[Y][X].info &= ~(CAVE_MASK); \
70  add_cave_info(Y,X,CAVE_FLOOR); \
71  delete_monster(Y, X); \
72 }
73 
74 #define place_floor_grid(C) \
75 { \
76  (C)->feat = floor_type[randint0(100)]; \
77  (C)->info &= ~(CAVE_MASK); \
78  (C)->info |= CAVE_FLOOR; \
79  if ((C)->m_idx) delete_monster_idx((C)->m_idx); \
80 }
81 
82 #define place_extra_bold(Y, X) \
83 { \
84  set_cave_feat(Y,X,fill_type[randint0(100)]); \
85  cave[Y][X].info &= ~(CAVE_MASK); \
86  add_cave_info(Y,X,CAVE_EXTRA); \
87  delete_monster(Y, X); \
88 }
89 
90 #define place_extra_grid(C) \
91 { \
92  (C)->feat = fill_type[randint0(100)]; \
93  (C)->info &= ~(CAVE_MASK); \
94  (C)->info |= CAVE_EXTRA; \
95  if ((C)->m_idx) delete_monster_idx((C)->m_idx); \
96 }
97 
98 #define place_extra_perm_bold(Y, X) \
99 { \
100  set_cave_feat(Y,X,feat_permanent); \
101  cave[Y][X].info &= ~(CAVE_MASK); \
102  add_cave_info(Y,X,CAVE_EXTRA); \
103  delete_monster(Y, X); \
104 }
105 
106 #define place_extra_perm_grid(C) \
107 { \
108  (C)->feat = feat_permanent; \
109  (C)->info &= ~(CAVE_MASK); \
110  (C)->info |= CAVE_EXTRA; \
111  if ((C)->m_idx) delete_monster_idx((C)->m_idx); \
112 }
113 
114 #define place_extra_noperm_bold(Y, X) \
115 { \
116  feature_type *_f_ptr; \
117  set_cave_feat(Y,X,fill_type[randint0(100)]); \
118  _f_ptr = &f_info[cave[Y][X].feat]; \
119  if (permanent_wall(_f_ptr)) cave[Y][X].feat = feat_state(cave[Y][X].feat, FF_UNPERM); \
120  cave[Y][X].info &= ~(CAVE_MASK); \
121  add_cave_info(Y,X,CAVE_EXTRA); \
122  delete_monster(Y, X); \
123 }
124 
125 #define place_inner_bold(Y, X) \
126 { \
127  set_cave_feat(Y,X,feat_wall_inner); \
128  cave[Y][X].info &= ~(CAVE_MASK); \
129  add_cave_info(Y,X,CAVE_INNER); \
130  delete_monster(Y, X); \
131 }
132 
133 #define place_inner_grid(C) \
134 { \
135  (C)->feat = feat_wall_inner; \
136  (C)->info &= ~(CAVE_MASK); \
137  (C)->info |= CAVE_INNER; \
138  if ((C)->m_idx) delete_monster_idx((C)->m_idx); \
139 }
140 
141 #define place_inner_perm_bold(Y, X) \
142 { \
143  set_cave_feat(Y,X,feat_permanent); \
144  cave[Y][X].info &= ~(CAVE_MASK); \
145  add_cave_info(Y,X,CAVE_INNER); \
146  delete_monster(Y, X); \
147 }
148 
149 #define place_inner_perm_grid(C) \
150 { \
151  (C)->feat = feat_permanent; \
152  (C)->info &= ~(CAVE_MASK); \
153  (C)->info |= CAVE_INNER; \
154  if ((C)->m_idx) delete_monster_idx((C)->m_idx); \
155 }
156 
157 #define place_outer_bold(Y, X) \
158 { \
159  set_cave_feat(Y,X,feat_wall_outer); \
160  cave[Y][X].info &= ~(CAVE_MASK); \
161  add_cave_info(Y,X,CAVE_OUTER); \
162  delete_monster(Y, X); \
163 }
164 
165 #define place_outer_grid(C) \
166 { \
167  (C)->feat = feat_wall_outer; \
168  (C)->info &= ~(CAVE_MASK); \
169  (C)->info |= CAVE_OUTER; \
170  if ((C)->m_idx) delete_monster_idx((C)->m_idx); \
171 }
172 
173 #define place_outer_perm_bold(Y, X) \
174 { \
175  set_cave_feat(Y,X,feat_permanent); \
176  cave[Y][X].info &= ~(CAVE_MASK); \
177  add_cave_info(Y,X,CAVE_OUTER); \
178  delete_monster(Y, X); \
179 }
180 
181 #define place_outer_perm_grid(C) \
182 { \
183  (C)->feat = feat_permanent; \
184  (C)->info &= ~(CAVE_MASK); \
185  (C)->info |= CAVE_OUTER; \
186  if ((C)->m_idx) delete_monster_idx((C)->m_idx); \
187 }
188 
189 #define place_outer_noperm_bold(Y, X) \
190 { \
191  feature_type *_f_ptr = &f_info[feat_wall_outer]; \
192  if (permanent_wall(_f_ptr)) set_cave_feat(Y, X, feat_state(feat_wall_outer, FF_UNPERM)); \
193  else set_cave_feat(Y,X,feat_wall_outer); \
194  cave[Y][X].info &= ~(CAVE_MASK); \
195  add_cave_info(Y,X,(CAVE_OUTER | CAVE_VAULT)); \
196  delete_monster(Y, X); \
197 }
198 
199 #define place_outer_noperm_grid(C) \
200 { \
201  feature_type *_f_ptr = &f_info[feat_wall_outer]; \
202  if (permanent_wall(_f_ptr)) (C)->feat = feat_state(feat_wall_outer, FF_UNPERM); \
203  else (C)->feat = feat_wall_outer; \
204  (C)->info &= ~(CAVE_MASK); \
205  (C)->info |= (CAVE_OUTER | CAVE_VAULT); \
206  if ((C)->m_idx) delete_monster_idx((C)->m_idx); \
207 }
208 
209 #define place_solid_bold(Y, X) \
210 { \
211  set_cave_feat(Y,X,feat_wall_solid); \
212  cave[Y][X].info &= ~(CAVE_MASK); \
213  add_cave_info(Y,X,CAVE_SOLID); \
214  delete_monster(Y, X); \
215 }
216 
217 #define place_solid_grid(C) \
218 { \
219  (C)->feat = feat_wall_solid; \
220  (C)->info &= ~(CAVE_MASK); \
221  (C)->info |= CAVE_SOLID; \
222  if ((C)->m_idx) delete_monster_idx((C)->m_idx); \
223 }
224 
225 #define place_solid_perm_bold(Y, X) \
226 { \
227  set_cave_feat(Y,X,feat_permanent); \
228  cave[Y][X].info &= ~(CAVE_MASK); \
229  add_cave_info(Y,X,CAVE_SOLID); \
230  delete_monster(Y, X); \
231 }
232 
233 #define place_solid_perm_grid(C) \
234 { \
235  (C)->feat = feat_permanent; \
236  (C)->info &= ~(CAVE_MASK); \
237  (C)->info |= CAVE_SOLID; \
238  if ((C)->m_idx) delete_monster_idx((C)->m_idx); \
239 }
240 
241 #define place_solid_noperm_bold(Y, X) \
242 { \
243  feature_type *_f_ptr = &f_info[feat_wall_solid]; \
244  if ((cave[Y][X].info & CAVE_VAULT) && permanent_wall(_f_ptr)) \
245  set_cave_feat(Y, X, feat_state(feat_wall_solid, FF_UNPERM)); \
246  else set_cave_feat(Y,X,feat_wall_solid); \
247  cave[Y][X].info &= ~(CAVE_MASK); \
248  add_cave_info(Y,X,CAVE_SOLID); \
249  delete_monster(Y, X); \
250 }
251 
252 #define place_solid_noperm_grid(C) \
253 { \
254  feature_type *_f_ptr = &f_info[feat_wall_solid]; \
255  if (((C)->info & CAVE_VAULT) && permanent_wall(_f_ptr)) \
256  (C)->feat = feat_state(feat_wall_solid, FF_UNPERM); \
257  else (C)->feat = feat_wall_solid; \
258  (C)->info &= ~(CAVE_MASK); \
259  (C)->info |= CAVE_SOLID; \
260  if ((C)->m_idx) delete_monster_idx((C)->m_idx); \
261 }
262 
263 
264 /* Externs */
265 
266 extern bool new_player_spot(void);
267 
268 extern void place_random_stairs(int y, int x);
269 extern void place_random_door(int y, int x, bool room);
270 extern void place_closed_door(int y, int x, int type);
271 extern void place_floor(int x1, int x2, int y1, int y2, bool light);
272 extern void place_room(int x1, int x2, int y1, int y2, bool light);
273 extern void vault_monsters(int y1, int x1, int num);
274 extern void vault_objects(int y, int x, int num);
275 extern void vault_trap_aux(int y, int x, int yd, int xd);
276 extern void vault_traps(int y, int x, int yd, int xd, int num);
277 
278 extern void correct_dir(int *rdir, int *cdir, int y1, int x1, int y2, int x2);
279 
280 extern void rand_dir(int *rdir, int *cdir);
281 
282 extern bool get_is_floor(int x, int y);
283 extern void set_floor(int x, int y);
284 
285 extern bool build_tunnel(int row1, int col1, int row2, int col2);
286 extern bool build_tunnel2(int x1, int y1, int x2, int y2, int type, int cutoff);
void vault_objects(int y, int x, int num)
特殊な部屋向けに各種アイテムを配置する / Create up to "num" objects near the given coordinates
Definition: grid.c:334
void place_floor(int x1, int x2, int y1, int y2, bool light)
長方形の空洞を生成する / Make an empty square floor, for the middle of rooms
Definition: grid.c:279
void set_floor(int x, int y)
指定のマスを床地形に変える / Set a square to be floor.
Definition: grid.c:577
void correct_dir(int *rdir, int *cdir, int y1, int x1, int y2, int x2)
build_tunnel用に通路を掘るための方向を位置関係通りに決める / Always picks a correct direction
Definition: grid.c:519
void place_room(int x1, int x2, int y1, int y2, bool light)
長方形の部屋を生成する / Make an empty square room, only floor and wall grids
Definition: grid.c:305
void rand_dir(int *rdir, int *cdir)
build_tunnel用に通路を掘るための方向をランダムに決める / Pick a random direction
Definition: grid.c:541
void place_random_stairs(int y, int x)
所定の位置に上り階段か下り階段を配置する / Place an up/down staircase at given location
Definition: grid.c:88
void vault_trap_aux(int y, int x, int yd, int xd)
特殊な部屋向けに各種アイテムを配置する(vault_trapのサブセット) / Place a trap with a given displacement of point ...
Definition: grid.c:405
bool new_player_spot(void)
新規フロアに入りたてのプレイヤーをランダムな場所に配置する / Returns random co-ordinates for player/monster/object ...
Definition: grid.c:24
void place_closed_door(int y, int x, int type)
所定の位置に各種の閉じたドアを配置する / Place a random type of normal door at the given location.
Definition: grid.c:222
void vault_traps(int y, int x, int yd, int xd, int num)
特殊な部屋向けに各種アイテムを配置する(メインルーチン) / Place some traps with a given displacement of given location ...
Definition: grid.c:461
bool get_is_floor(int x, int y)
指定のマスが床系地形であるかを返す / Function that sees if a square is a floor.
Definition: grid.c:557
void place_random_door(int y, int x, bool room)
所定の位置にさまざまな状態や種類のドアを配置する / Place a random type of door at the given location
Definition: grid.c:138
bool build_tunnel2(int x1, int y1, int x2, int y2, int type, int cutoff)
特定の壁(永久壁など)を避けながら部屋間の通路を作成する / This routine maps a path from (x1, y1) to (x2, y2) avoiding SOLID wall...
Definition: grid.c:1118
bool build_tunnel(int row1, int col1, int row2, int col2)
部屋間のトンネルを生成する / Constructs a tunnel between two points
Definition: grid.c:632
void vault_monsters(int y1, int x1, int num)
特殊な部屋地形向けにモンスターを配置する / Hack – Place some sleeping monsters near the given location ...
Definition: grid.c:480