OSDN Git Service

Merge remote-tracking branch 'remotes/origin/For2.2.2-Fix-Hourier' into For2.2.2...
[hengband/hengband.git] / src / floor / floor.h
1 #pragma once
2
3 #include "system/angband.h"
4
5 extern floor_type floor_info;
6
7 /*
8  * Grid based version of "creature_bold()"
9  */
10 #define player_grid(C, G) \
11         ((G) == &(C)->current_floor_ptr->grid_array[(C)->y][(C)->x])
12
13
14 #define cave_have_flag_grid(C,INDEX) \
15         (have_flag(f_info[(C)->feat].flags, (INDEX)))
16
17
18 /*
19  * Determine if a "legal" grid is a "clean" floor grid
20  * Determine if terrain-change spells are allowed in a grid.
21  *
22  * Line 1 -- forbid non-floors
23  * Line 2 -- forbid object terrains
24  * Line 3 -- forbid normal objects
25  */
26 #define cave_clean_bold(F,Y,X) \
27         (cave_have_flag_bold((F), (Y), (X), FF_FLOOR) && \
28          !((F)->grid_array[Y][X].info & CAVE_OBJECT) && \
29           ((F)->grid_array[Y][X].o_idx == 0))
30
31
32 /*
33  * Determine if an object can be dropped on a "legal" grid
34  *
35  * Line 1 -- forbid non-drops
36  * Line 2 -- forbid object terrains
37  */
38 #define cave_drop_bold(F,Y,X) \
39         (cave_have_flag_bold((F), (Y), (X), FF_DROP) && \
40          !((F)->grid_array[Y][X].info & CAVE_OBJECT))
41
42
43 /*
44  * Determine if a "legal" grid is an "naked" floor grid
45  *
46  * Line 1 -- forbid non-clean gird
47  * Line 2 -- forbid monsters
48  * Line 3 -- forbid the player
49  */
50 #define cave_naked_bold(C,F,Y,X) \
51         (cave_clean_bold(F,Y,X) && \
52          !((F)->grid_array[Y][X].m_idx) && \
53          !player_bold(C,Y,X))
54
55
56 /*
57  * Determine if a "legal" grid is "permanent"
58  *
59  * Line 1 -- permanent flag
60  */
61 #define cave_perma_bold(F,Y,X) \
62         (cave_have_flag_bold((F), (Y), (X), FF_PERMANENT))
63
64
65 /*
66  * Grid based version of "cave_perma_bold()"
67  */
68 #define cave_perma_grid(C) \
69         (cave_have_flag_grid((C), FF_PERMANENT))
70
71
72 /*
73  * Determine if a "legal" grid is within "los" of the player
74  *
75  * Note the use of comparison to zero to force a "boolean" result
76  */
77 #define player_has_los_grid(C) \
78     (((C)->info & (CAVE_VIEW)) != 0)
79
80 /*
81  * Determine if a "feature" is "permanent wall"
82  */
83 #define permanent_wall(F) \
84         (have_flag((F)->flags, FF_WALL) && \
85          have_flag((F)->flags, FF_PERMANENT))
86
87 /*
88  * Convert a "location" (Y,X) into a "grid" (G)
89  */
90 #define GRID(Y,X) \
91         (256 * (Y) + (X))
92
93 /*
94  * Convert a "grid" (G) into a "location" (Y)
95  */
96 #define GRID_Y(G) \
97         ((int)((G) / 256U))
98
99 /*
100  * Convert a "grid" (G) into a "location" (X)
101  */
102 #define GRID_X(G) \
103         ((int)((G) % 256U))
104
105 bool pattern_tile(floor_type *floor_ptr, POSITION y, POSITION x);
106 void update_smell(floor_type *floor_ptr, player_type *subject_ptr);
107 void add_door(player_type *player_ptr, POSITION x, POSITION y);
108 void place_secret_door(player_type *player_ptr, POSITION y, POSITION x, int type);
109 void place_locked_door(player_type *player_ptr, POSITION y, POSITION x);
110 void forget_flow(floor_type *floor_ptr);
111 void place_random_stairs(player_type *player_ptr, POSITION y, POSITION x);
112 bool los(player_type *player_ptr, POSITION y1, POSITION x1, POSITION y2, POSITION x2);
113 bool projectable(player_type *player_ptr, POSITION y1, POSITION x1, POSITION y2, POSITION x2);
114 void vault_monsters(player_type *player_ptr, POSITION y1, POSITION x1, int num);
115 bool cave_valid_bold(floor_type *floor_ptr, POSITION y, POSITION x);
116 void cave_set_feat(player_type *player_ptr, POSITION y, POSITION x, FEAT_IDX feat);
117 void place_random_door(player_type *player_ptr, POSITION y, POSITION x, bool room);
118 void place_closed_door(player_type *player_ptr, POSITION y, POSITION x, int type);
119 void wipe_o_list(floor_type *floor_ptr);
120 void vault_trap_aux(player_type *player_ptr, POSITION y, POSITION x, POSITION yd, POSITION xd);
121 bool get_is_floor(floor_type *floor_ptr, POSITION x, POSITION y);
122 void try_door(player_type *player_ptr, POSITION y, POSITION x);
123 FEAT_IDX conv_dungeon_feat(floor_type *floor_ptr, FEAT_IDX newfeat);
124 void vault_objects(player_type *player_ptr, POSITION y, POSITION x, int num);
125 int project_path(player_type *player_ptr, u16b *gp, POSITION range, POSITION y1, POSITION x1, POSITION y2, POSITION x2, BIT_FLAGS flg);
126 void set_floor(player_type *player_ptr, POSITION x, POSITION y);
127 void place_object(player_type *owner_ptr, POSITION y, POSITION x, BIT_FLAGS mode);
128 void place_gold(player_type *player_ptr, POSITION y, POSITION x);
129 void delete_monster(player_type *player_ptr, POSITION y, POSITION x);
130 void compact_objects(player_type *owner_ptr, int size);
131 void vault_traps(player_type *player_ptr, POSITION y, POSITION x, POSITION yd, POSITION xd, int num);
132 void scatter(player_type *player_ptr, POSITION *yp, POSITION *xp, POSITION y, POSITION x, POSITION d, BIT_FLAGS mode);