OSDN Git Service

[Refactor] #1366 Added todo comment to type alias 'concptr'
[hengbandforosx/hengbandosx.git] / src / system / h-type.h
1 #pragma once
2
3 /*!
4  * @file h-type.h
5  * @brief ゲーム中に用いる変数型定義 / Basic "types".
6  * @date 2017/12/03
7  * @author
8  * 不明(変愚蛮怒スタッフ?)
9  * @details
10  * <pre>
11  * Note the attempt to make all basic types have 4 letters.
12  * This improves readibility and standardizes the code.
13  * Likewise, all complex types are at least 4 letters.
14  * Thus, almost every three letter word is a legal variable.
15  * But beware of certain reserved words ('for' and 'if' and 'do').
16  * Note that the type used in structures for bit flags should be uint.
17  * As long as these bit flags are sequential, they will be space smart.
18  * Note that on some machines, apparently "signed char" is illegal.
19  * It must be true that char/byte takes exactly 1 byte
20  * It must be true that sind/uind takes exactly 2 bytes
21  * It must be true that sbig/ubig takes exactly 4 bytes
22  * On Sparc's, a uint takes 4 bytes (2 is legal)
23  * On Sparc's, a long takes 4 bytes (8 is legal)
24  * On Sparc's, a huge takes 4 bytes (8 is legal)
25  * On Sparc's, a vptr takes 4 bytes (8 is legal)
26  * On Sparc's, a real takes 8 bytes (4 is legal)
27  * Note that some files have already been included by "h-include.h"
28  * These include <stdio.h> and <sys/types>, which define some types
29  * In particular, uint is defined so we do not have to define it
30  * Also, see <limits.h> for min/max values for sind, uind, long, huge
31  * (SHRT_MIN, SHRT_MAX, USHRT_MAX, LONG_MIN, LONG_MAX, ULONG_MAX)
32  * These limits should be verified and coded into "h-constant.h".
33  * </pre>
34  */
35
36 #include <cassert>
37 #include <stdint.h>
38
39 /*** Special 4 letter names for some standard types ***/
40 typedef void *vptr; /*!< void型ポインタ定義 / A standard pointer (to "void" because ANSI C says so) */
41
42 /*!
43  * @brief 文字列定数用ポインタ定義 / Unmodifiable strings
44  * @todo std::stringに置換したい.
45  */
46 typedef const char *concptr;
47
48 /*!
49  * @brief エラーコードの定義 / Error codes for function return values
50  * @details
51  * 一般に成功時0、失敗時負数、何らかの問題時正数とする。
52  * Success = 0, Failure = -N, Problem = +N
53  */
54 typedef int errr;
55
56 #define MAX_UCHAR 255 /*!< Maximum value storable in a "byte" (hard-coded) */
57 #define MAX_SHORT 32767 /*!< Maximum value storable in a "int16_t" (hard-coded) */
58
59 #define MAX_NLEN 160 /*!< Maximum length of object's name */
60 #define MAX_MONSTER_NAME 160 /*!< モンスター名称の最大バイト数 / Max characters of monster's name */
61
62 /*!
63  * @brief 符号なし整数の簡潔な定義
64  */
65 typedef unsigned char byte;
66 typedef unsigned short ushort;
67 typedef unsigned int uint;
68 typedef unsigned long ulong;
69
70 // 整数型のバイト数が2021年現在の通常環境と異なるならばコンパイルを通さない.
71 static_assert(sizeof(char) == 1);
72 static_assert(sizeof(short) == 2);
73 static_assert(sizeof(int) == 4);
74 // static_assert(sizeof(long) == 8); // 将来のための予約.
75
76 typedef int16_t IDX; /*!< ゲーム中のID型を定義 */
77
78 typedef int16_t FEAT_IDX; /*!< ゲーム中の地形ID型を定義 */
79 typedef int16_t FLOOR_IDX; /*!< ゲーム中のフロアID型を定義 */
80
81 typedef int16_t MIMIC_RACE_IDX; /*!< ゲーム中のプレイヤー変身種族ID型を定義 */
82 typedef int16_t PATRON_IDX; /*!< ゲーム中のプレイヤーパトロンID型を定義 */
83 typedef int32_t ACTION_IDX; /*!< プレイヤーが現在取っている常時行動のID定義 */
84 typedef int16_t BACT_IDX; /*!< 町の施設処理のID定義 */
85 typedef int16_t BACT_RESTRICT_IDX; /*!< 町の施設処理の規制処理ID定義 */
86
87 typedef int16_t MONRACE_IDX; /*!< @todo monster_race_typeに差し替えて消滅させる ゲーム中のモンスター種族ID型を定義 */
88 typedef int16_t MONSTER_IDX; /*!< @todo monster_race_typeに差し替えて消滅させる ゲーム中のモンスター個体ID型を定義 */
89 typedef int16_t DUNGEON_IDX; /*!< ゲーム中のダンジョンID型を定義 */
90 typedef int16_t REALM_IDX; /*!< ゲーム中の魔法領域ID型を定義 */
91 typedef int16_t ARTIFACT_IDX; /*!< ゲーム中のアーティファクトID型を定義 */
92 typedef int16_t EGO_IDX; /*!< アイテムエゴのID型を定義 */
93 typedef int16_t ACTIVATION_IDX; /*!< アイテムの発動効果ID型を定義 */
94 typedef int16_t QUEST_IDX; /*!< ゲーム中のクエストID型を定義 */
95 typedef byte ROOM_IDX; /*!< 部屋のID型を定義 */
96
97 typedef int16_t INVENTORY_IDX; /*!< ゲーム中の所持品ID型を定義 */
98 typedef int16_t OBJECT_IDX; /*!< ゲーム中のアイテムID型を定義 */
99 typedef int32_t ESSENCE_IDX; /*!< 鍛冶エッセンスのID型 */
100 typedef int16_t KIND_OBJECT_IDX; /*!< ゲーム中のベースアイテムID型を定義 */
101 typedef int16_t VAULT_IDX; /*!< 固定部屋のID型を定義 */
102 typedef int MUTATION_IDX; /*!< 突然変異のID型を定義 */
103
104 typedef int32_t POSITION; /*!< ゲーム中の座標型を定義 */
105 typedef int16_t POSITION_IDX; /*!< ゲーム中の座標リストID型 */
106
107 typedef byte FEAT_SUBTYPE; /*!< 地形情報の副値 (トラップ種別/パターン種別/店舗種別)*/
108
109 typedef char GAME_TEXT; /*!< ゲーム中のテキスト型定義 */
110
111 /*!
112  * @var typedef int32_t HIT_POINT
113  * @brief HPとその増減量の型定義
114  * @details
115  * HIT_POINTはプレイヤー及びモンスターのHPの各値とその増減量の型である。
116  */
117 typedef int32_t HIT_POINT;
118
119 /*!
120  * @var typedef int32_t MANA_POINT
121  * @brief MPとその増減量の型定義
122  * @details
123  * MANA_POINTはプレイヤーのMPの各地とその増減量の型である。
124  */
125 typedef int32_t MANA_POINT; /*!< ゲーム中のMP型を定義 */
126
127 typedef int16_t HIT_PROB; /*!< ゲーム中の装備命中修正値を定義 */
128 typedef int16_t BASE_STATUS; /*!< ゲーム中の基礎能力値型を定義 */
129
130 typedef int32_t MONSTER_NUMBER; /*!< ゲーム中のモンスター数型を定義 */
131 typedef int32_t ITEM_NUMBER; /*!< ゲーム中のアイテム数型を定義 */
132
133 typedef int16_t ACTION_ENERGY; /*!< ゲーム中の行動エネルギー型を定義 */
134 typedef int16_t ARMOUR_CLASS; /*!< ゲーム中の行動アーマークラス型を定義 */
135 typedef int16_t TIME_EFFECT; /*!< ゲーム中の時限期間の型を定義 */
136 typedef byte DISCOUNT_RATE; /*!< ゲーム中の値引き率の型を定義 */
137 typedef int16_t SPEED; /*!< ゲーム中の加速値の型定義 */
138
139 /*!
140  * @var typedef int16_t ENEGRY
141  * @brief 行動エネルギーの型定義
142  * @details
143  * ENERGYはプレイヤーとモンスターの行動順を定める行動エネルギーを示す型定義である。
144  */
145 typedef int16_t ENERGY; /*!< ゲーム中の行動エネルギーの型定義 */
146
147 typedef int16_t SLEEP_DEGREE; /*!< モンスターの睡眠度の型定義 */
148
149 typedef int16_t PLAYER_LEVEL; /*!< ゲーム中のプレイヤーレベルの型を定義 */
150 typedef int DIRECTION; /*!< ゲーム中の方角の型定義 */
151 typedef int32_t EXP; /*!< ゲーム中の主経験値の型定義 */
152 typedef int16_t SUB_EXP; /*!< ゲーム中の副経験値の型定義 */
153
154 typedef int32_t OBJECT_SUBTYPE_VALUE; /*!< ゲーム中のアイテム副分類の型定義 */
155 typedef int16_t PARAMETER_VALUE; /*!< ゲーム中のアイテム能力値の型定義 */
156 typedef int32_t WEIGHT; /*!< ゲーム中の重量の型定義(ポンド) */
157
158 typedef int DICE_NUMBER; /*!< ゲーム中のダイス数の型定義 */
159 typedef int DICE_SID; /*!< ゲーム中のダイス面の型定義 */
160 typedef int32_t PRICE; /*!< ゲーム中の金額価値の型定義 */
161 typedef int16_t FEED; /*!< ゲーム中の滋養度の型定義 */
162
163 typedef uint32_t STR_OFFSET; /*!< テキストオフセットの型定義 */
164
165 typedef int POWER; /*!< 魔法の効力定義*/
166
167 typedef int32_t DEPTH; /*!< ゲーム中の階層レベルの型定義 */
168 typedef byte RARITY; /*!< ゲーム中の希少度の型定義 */
169
170 typedef int32_t GAME_TURN; /*!< ゲーム中のターンの型定義 */
171 typedef uint32_t REAL_TIME; /*!< 実時刻の型定義 */
172
173 typedef int32_t PERCENTAGE; /*!< ゲーム中のパーセント表記の型定義(/100倍) */
174 typedef int16_t MULTIPLY; /*!< ゲーム中の倍率の型定義(/10倍) */
175
176 typedef uint32_t BIT_FLAGS; /*!< 32ビットのフラグ配列の型定義 */
177 typedef uint16_t BIT_FLAGS16; /*!< 16ビットのフラグ配列の型定義 */
178 typedef byte BIT_FLAGS8; /*!< 8ビットのフラグ配列の型定義 */
179
180 typedef int16_t XTRA16; /*!< 汎用変数16ビットの型定義 */
181 typedef byte XTRA8; /*!< 汎用変数8ビットの型定義 */
182
183 typedef int16_t COMMAND_CODE; /*!< コマンド内容の型定義 */
184 typedef int16_t COMMAND_ARG; /*!< コマンド引数の型定義 */
185 typedef int16_t COMMAND_NUM; /*!< コマンド数の型定義 */
186
187 typedef int TERM_LEN; /*!< コンソール表示座標の型定義 */
188 typedef byte TERM_COLOR; /*!< テキスト表示色の型定義 */
189 typedef char SYMBOL_CODE; /*!< キャラの文字の型定義 */
190
191 typedef int32_t SPELL_IDX; /*!< 各魔法領域/職業能力ごとの呪文ID型定義 */
192 typedef int16_t PROB; /*!< 確率の重みの型定義 */
193 typedef byte FEAT_POWER; /*!< 地形強度の型定義 */
194
195 typedef int QUANTITY; /*!< インターフェース上の指定個数 */
196
197 typedef int EFFECT_ID; /*!< 効果属性ID */
198
199 typedef int16_t QUEST_TYPE; /*!< クエストの種別ID */
200 typedef int16_t QUEST_STATUS; /*!< クエストの状態ID */
201
202 typedef int16_t ACTION_SKILL_POWER; /*!< 行動技能値 */
203
204 typedef int PET_COMMAND_IDX; /*!< ペットへの指示ID */
205 typedef byte FF_FLAGS_IDX; /*!< 地形特性ID */
206
207 typedef int16_t FEAT_PRIORITY; /*!< 地形の縮小表示優先順位 */
208
209 enum process_result {
210     PROCESS_FALSE = 0,
211     PROCESS_TRUE = 1,
212     PROCESS_CONTINUE = 2,
213 };