OSDN Git Service

Merge pull request #765 from sikabane-works/release/3.0.0Alpha17
[hengbandforosx/hengbandosx.git] / src / grid / feature.h
1 #pragma once
2
3 #include "system/angband.h"
4
5 #include "grid/feature-flag-types.h"
6
7 #include <string>
8 #include <vector>
9
10 /* Number of feats we change to (Excluding default). Used in f_info.txt. */
11 #define MAX_FEAT_STATES  8
12
13 /* Lighting levels of features' attr and char */
14 #define F_LIT_STANDARD 0 /* Standard */
15 #define F_LIT_LITE     1 /* Brightly lit */
16 #define F_LIT_DARK     2 /* Darkened */
17
18 #define F_LIT_NS_BEGIN 1 /* Nonstandard */
19 #define F_LIT_MAX      3
20
21 /*!
22  * @struct feature_state
23  * @brief 地形状態変化指定構造体 / Feature state structure
24  */
25 typedef struct feature_state {
26     FF_FLAGS_IDX action{}; /*!< 変化条件をFF_*のIDで指定 / Action (FF_*) */
27     std::string result_tag{}; /*!< 変化先ID / Result (f_info ID) */
28     FEAT_IDX result{}; /*!< 変化先ID / Result (f_info ID) */
29 } feature_state;
30
31 typedef struct feat_prob {
32     FEAT_IDX feat{}; /* Feature tile */
33     PERCENTAGE percent{}; /* Chance of type */
34 } feat_prob;
35
36 /*!
37  * @struct feature_type
38  * @brief 地形情報の構造体 / Information about terrain "features"
39  */
40 typedef struct feature_type {
41     std::string name; /*!< 地形名参照のためのネームバッファオフセット値 / Name (offset) */
42     std::string text; /*!< 地形説明参照のためのネームバッファオフセット値 /  Text (offset) */
43     std::string tag; /*!< 地形特性タグ参照のためのネームバッファオフセット値 /  Tag (offset) */
44     std::string mimic_tag;
45     std::string destroyed_tag;
46     FEAT_IDX mimic{}; /*!< 未確定時の外形地形ID / Feature to mimic */
47     FEAT_IDX destroyed{}; /*!< *破壊*に巻き込まれた時の地形移行先(未実装?) / Default destroyed state */
48     BIT_FLAGS flags[FF_FLAG_SIZE]{}; /*!< 地形の基本特性ビット配列 / Flags */
49     FEAT_PRIORITY priority{}; /*!< 縮小表示で省略する際の表示優先度 / Map priority */
50     feature_state state[MAX_FEAT_STATES]{}; /*!< feature_state テーブル */
51     FEAT_SUBTYPE subtype{}; /*!< 副特性値 */
52     FEAT_POWER power{}; /*!< 地形強度 */
53     TERM_COLOR d_attr[F_LIT_MAX]{}; /*!< デフォルトの地形シンボルカラー / Default feature attribute */
54     SYMBOL_CODE d_char[F_LIT_MAX]{}; /*!< デフォルトの地形シンボルアルファベット / Default feature character */
55     TERM_COLOR x_attr[F_LIT_MAX]{}; /*!< 設定変更後の地形シンボルカラー / Desired feature attribute */
56     SYMBOL_CODE x_char[F_LIT_MAX]{}; /*!< 設定変更後の地形シンボルアルファベット / Desired feature character */
57 } feature_type;
58
59 extern FEAT_IDX max_f_idx;
60 extern std::vector<feature_type> f_info;
61
62 /*** Terrain feature variables ***/
63 extern FEAT_IDX feat_none;
64 extern FEAT_IDX feat_floor;
65 extern FEAT_IDX feat_rune_protection;
66 extern FEAT_IDX feat_rune_explosion;
67 extern FEAT_IDX feat_mirror;
68 extern FEAT_IDX feat_up_stair;
69 extern FEAT_IDX feat_down_stair;
70 extern FEAT_IDX feat_entrance;
71 extern FEAT_IDX feat_trap_open;
72 extern FEAT_IDX feat_trap_armageddon;
73 extern FEAT_IDX feat_trap_piranha;
74 extern FEAT_IDX feat_rubble;
75 extern FEAT_IDX feat_magma_vein;
76 extern FEAT_IDX feat_quartz_vein;
77 extern FEAT_IDX feat_granite;
78 extern FEAT_IDX feat_permanent;
79 extern FEAT_IDX feat_glass_floor;
80 extern FEAT_IDX feat_glass_wall;
81 extern FEAT_IDX feat_permanent_glass_wall;
82 extern FEAT_IDX feat_pattern_start;
83 extern FEAT_IDX feat_pattern_1;
84 extern FEAT_IDX feat_pattern_2;
85 extern FEAT_IDX feat_pattern_3;
86 extern FEAT_IDX feat_pattern_4;
87 extern FEAT_IDX feat_pattern_end;
88 extern FEAT_IDX feat_pattern_old;
89 extern FEAT_IDX feat_pattern_exit;
90 extern FEAT_IDX feat_pattern_corrupted;
91 extern FEAT_IDX feat_black_market;
92 extern FEAT_IDX feat_town;
93 extern FEAT_IDX feat_deep_water;
94 extern FEAT_IDX feat_shallow_water;
95 extern FEAT_IDX feat_deep_lava;
96 extern FEAT_IDX feat_shallow_lava;
97 extern FEAT_IDX feat_heavy_cold_zone;
98 extern FEAT_IDX feat_cold_zone;
99 extern FEAT_IDX feat_heavy_electrical_zone;
100 extern FEAT_IDX feat_electrical_zone;
101 extern FEAT_IDX feat_deep_acid_puddle;
102 extern FEAT_IDX feat_shallow_acid_puddle;
103 extern FEAT_IDX feat_deep_poisonous_puddle;
104 extern FEAT_IDX feat_shallow_poisonous_puddle;
105 extern FEAT_IDX feat_dirt;
106 extern FEAT_IDX feat_grass;
107 extern FEAT_IDX feat_flower;
108 extern FEAT_IDX feat_brake;
109 extern FEAT_IDX feat_tree;
110 extern FEAT_IDX feat_mountain;
111 extern FEAT_IDX feat_swamp;
112 extern FEAT_IDX feat_undetected;
113
114 extern FEAT_IDX feat_wall_outer;
115 extern FEAT_IDX feat_wall_inner;
116 extern FEAT_IDX feat_wall_solid;
117 extern FEAT_IDX feat_ground_type[100];
118 extern FEAT_IDX feat_wall_type[100];
119
120 bool is_closed_door(player_type *player_ptr, FEAT_IDX feat);
121 bool is_trap(player_type *player_ptr, FEAT_IDX feat);
122 void apply_default_feat_lighting(TERM_COLOR *f_attr, SYMBOL_CODE *f_char);
123 bool is_ascii_graphics(char x);
124 bool permanent_wall(feature_type *f_ptr);
125 FEAT_IDX feat_locked_door_random(int door_type);
126 FEAT_IDX feat_jammed_door_random(int door_type);
127 void cave_set_feat(player_type *player_ptr, POSITION y, POSITION x, FEAT_IDX feat);
128 FEAT_IDX conv_dungeon_feat(floor_type *floor_ptr, FEAT_IDX newfeat);