1 #include "grid/feature.h"
2 #include "grid/lighting-colors-table.h"
3 #include "util/bit-flags-calculator.h"
5 /*** Terrain feature variables ***/
7 /* The terrain feature arrays */
20 FEAT_IDX feat_explosive_rune;
24 FEAT_IDX feat_up_stair;
25 FEAT_IDX feat_down_stair;
26 FEAT_IDX feat_entrance;
29 FEAT_IDX feat_trap_open;
30 FEAT_IDX feat_trap_armageddon;
31 FEAT_IDX feat_trap_piranha;
37 FEAT_IDX feat_magma_vein;
38 FEAT_IDX feat_quartz_vein;
41 FEAT_IDX feat_granite;
42 FEAT_IDX feat_permanent;
45 FEAT_IDX feat_glass_floor;
48 FEAT_IDX feat_glass_wall;
49 FEAT_IDX feat_permanent_glass_wall;
52 FEAT_IDX feat_pattern_start;
53 FEAT_IDX feat_pattern_1;
54 FEAT_IDX feat_pattern_2;
55 FEAT_IDX feat_pattern_3;
56 FEAT_IDX feat_pattern_4;
57 FEAT_IDX feat_pattern_end;
58 FEAT_IDX feat_pattern_old;
59 FEAT_IDX feat_pattern_exit;
60 FEAT_IDX feat_pattern_corrupted;
63 FEAT_IDX feat_black_market;
67 FEAT_IDX feat_deep_water;
68 FEAT_IDX feat_shallow_water;
69 FEAT_IDX feat_deep_lava;
70 FEAT_IDX feat_shallow_lava;
71 FEAT_IDX feat_heavy_cold_zone;
72 FEAT_IDX feat_cold_zone;
73 FEAT_IDX feat_heavy_electrical_zone;
74 FEAT_IDX feat_electrical_zone;
75 FEAT_IDX feat_deep_acid_puddle;
76 FEAT_IDX feat_shallow_acid_puddle;
77 FEAT_IDX feat_deep_poisonous_puddle;
78 FEAT_IDX feat_shallow_poisonous_puddle;
84 FEAT_IDX feat_mountain;
87 /* Unknown grid (not detected) */
88 FEAT_IDX feat_undetected;
90 FEAT_IDX feat_wall_outer;
91 FEAT_IDX feat_wall_inner;
92 FEAT_IDX feat_wall_solid;
93 FEAT_IDX feat_ground_type[100], feat_wall_type[100];
96 * Maximum number of terrain features in f_info.txt
101 * @brief 地形が罠持ちであるかの判定を行う。 / Return TRUE if the given feature is a trap
102 * @param feat 地形情報のID
103 * @return 罠持ちの地形ならばTRUEを返す。
105 bool is_trap(player_type *player_ptr, FEAT_IDX feat)
109 return have_flag(f_info[feat].flags, FF_TRAP);
113 * @brief 地形が閉じたドアであるかの判定を行う。 / Return TRUE if the given grid is a closed door
114 * @param feat 地形情報のID
115 * @return 閉じたドアのある地形ならばTRUEを返す。
117 bool is_closed_door(player_type *player_ptr, FEAT_IDX feat)
121 feature_type *f_ptr = &f_info[feat];
123 return (have_flag(f_ptr->flags, FF_OPEN) || have_flag(f_ptr->flags, FF_BASH)) &&
124 !have_flag(f_ptr->flags, FF_MOVE);
131 void apply_default_feat_lighting(TERM_COLOR *f_attr, SYMBOL_CODE *f_char)
133 TERM_COLOR s_attr = f_attr[F_LIT_STANDARD];
134 SYMBOL_CODE s_char = f_char[F_LIT_STANDARD];
136 if (is_ascii_graphics(s_attr)) /* For ASCII */
138 f_attr[F_LIT_LITE] = lighting_colours[s_attr & 0x0f][0];
139 f_attr[F_LIT_DARK] = lighting_colours[s_attr & 0x0f][1];
140 for (int i = F_LIT_NS_BEGIN; i < F_LIT_MAX; i++)
142 } else /* For tile graphics */
144 for (int i = F_LIT_NS_BEGIN; i < F_LIT_MAX; i++)
146 f_char[F_LIT_LITE] = s_char + 2;
147 f_char[F_LIT_DARK] = s_char + 1;
152 * Not using graphical tiles for this feature?
154 bool is_ascii_graphics(char x) { return (x & 0x80) == 0; }
157 * Determine if a "feature" is "permanent wall"
159 bool permanent_wall(feature_type *f_ptr) { return have_flag(f_ptr->flags, FF_WALL) && have_flag(f_ptr->flags, FF_PERMANENT); }