OSDN Git Service

fda33d5b9d883b7e0ae995a23a123d0b3f03794f
[hengband/hengband.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 #ifndef INCLUDED_H_TYPE_H
37 #define INCLUDED_H_TYPE_H
38
39 #ifdef HAVE_STDINT_H
40 #include <stdint.h>
41 #endif
42
43 /*** Special 4 letter names for some standard types ***/
44 typedef void *vptr;       /*!< void型ポインタ定義 / A standard pointer (to "void" because ANSI C says so) */
45 typedef const char *concptr; /*!< 文字列定数用ポインタ定義 / A simple pointer (to unmodifiable strings) */
46
47 /*!
48  * @brief エラーコードの定義 / Error codes for function return values
49  * @details
50  * 一般に成功時0、失敗時負数、何らかの問題時正数とする。
51  * Success = 0, Failure = -N, Problem = +N 
52  */
53 typedef int errr;
54
55 #define MAX_UCHAR       255 /*!< Maximum value storable in a "byte" (hard-coded) */
56 #define MAX_SHORT       32767    /*!< Maximum value storable in a "s16b" (hard-coded) */
57
58 #define MAX_NLEN        160 /*!< Maximum length of object's name */
59
60 /* Note that "signed char" is not always "defined" */
61 /* So always use "s16b" to hold small signed values */
62 /* A signed byte of memory */
63 /* typedef signed char syte; */
64 typedef unsigned char byte; /*!< byte型をunsighned charとして定義 / Note that unsigned values can cause math problems / An unsigned byte of memory */
65 typedef char bool; /*!< bool型をcharとして定義 / Note that a bool is smaller than a full "int" / Simple True/False type */
66 typedef unsigned int uint; /* uint型をintとして定義 /  An unsigned, "standard" integer (often pre-defined) */
67
68 /* The largest possible unsigned integer */
69 typedef unsigned long huge;
70
71 /* Signed/Unsigned 16 bit value */
72 #ifdef HAVE_STDINT_H
73 typedef int16_t s16b;
74 typedef uint16_t u16b;
75 #else
76 typedef signed short s16b;
77 typedef unsigned short u16b;
78 #endif
79
80 /* Signed/Unsigned 32 bit value */
81 #ifdef HAVE_STDINT_H
82 typedef int32_t s32b;
83 typedef uint32_t u32b;
84 #else
85 typedef signed long s32b;
86 typedef unsigned long u32b;
87 #endif
88
89 typedef s16b IDX;                               /*!< ゲーム中のID型を定義 */
90
91 typedef s16b TOWN_IDX;                  /*!< ゲーム中の町ID型を定義 */
92 typedef s16b FEAT_IDX;                  /*!< ゲーム中の地形ID型を定義 */
93 typedef s16b FLOOR_IDX;                 /*!< ゲーム中のフロアID型を定義 */
94
95 typedef byte SEX_IDX;                   /*!< ゲーム中のプレイヤー性別ID型を定義 */
96 typedef s16b MIMIC_RACE_IDX;    /*!< ゲーム中のプレイヤー変身種族ID型を定義 */
97 typedef s16b PATRON_IDX;                /*!< ゲーム中のプレイヤーパトロンID型を定義 */
98 typedef s32b ACTION_IDX;                /*!< プレイヤーが現在取っている常時行動のID定義 */
99 typedef s16b BACT_IDX;                  /*!< 町の施設処理のID定義 */
100 typedef s16b BACT_RESTRICT_IDX; /*!< 町の施設処理の規制処理ID定義 */
101
102 typedef s16b MONRACE_IDX;               /*!< todo monster_race_typeに差し替えて消滅させる ゲーム中のモンスター種族ID型を定義 */
103 typedef s16b MONSTER_IDX;               /*!< todo monster_race_typeに差し替えて消滅させる ゲーム中のモンスター個体ID型を定義 */
104 typedef s16b DUNGEON_IDX;               /*!< ゲーム中のダンジョンID型を定義 */
105 typedef s16b REALM_IDX;                 /*!< ゲーム中の魔法領域ID型を定義 */
106 typedef s16b ARTIFACT_IDX;              /*!< ゲーム中のアーティファクトID型を定義 */
107 typedef s16b EGO_IDX;                   /*!< アイテムエゴのID型を定義 */
108 typedef s16b ACTIVATION_IDX;    /*!< アイテムの発動効果ID型を定義 */
109 typedef s16b VIRTUES_IDX;               /*!< ゲーム中の徳ID型を定義 */
110 typedef s16b QUEST_IDX;                 /*!< ゲーム中のクエストID型を定義 */
111 typedef byte ROOM_IDX;                  /*!< 部屋のID型を定義 */
112
113 typedef s16b INVENTORY_IDX;             /*!< ゲーム中の所持品ID型を定義 */
114 typedef s16b OBJECT_IDX;                /*!< ゲーム中のアイテムID型を定義 */
115 typedef s32b ESSENCE_IDX;               /*!< 鍛冶エッセンスのID型 */
116 typedef s16b KIND_OBJECT_IDX;   /*!< ゲーム中のベースアイテムID型を定義 */
117 typedef s16b VAULT_IDX;                 /*!< 固定部屋のID型を定義 */
118 typedef int MUTATION_IDX;               /*!< 突然変異のID型を定義 */
119
120 typedef s32b POSITION;                  /*!< ゲーム中の座標型を定義 */
121 typedef s16b POSITION_IDX;              /*!< ゲーム中の座標リストID型 */
122
123 typedef s32b ALIGNMENT;         /*!< 善悪属性の型定義 */
124 typedef byte FEAT_SUBTYPE;      /*!< 地形情報の副値 (トラップ種別/パターン種別/店舗種別)*/
125
126 typedef char GAME_TEXT;         /*!< ゲーム中のテキスト型定義 */
127
128 /*!
129  * @var typedef s32b HIT_POINT
130  * @brief HPとその増減量の型定義
131  * @details 
132  * HIT_POINTはプレイヤー及びモンスターのHPの各値とその増減量の型である。
133  */
134 typedef s32b HIT_POINT;
135
136 /*!
137  * @var typedef s32b MANA_POINT
138  * @brief MPとその増減量の型定義
139  * @details
140  * MANA_POINTはプレイヤーのMPの各地とその増減量の型である。
141  */
142 typedef s32b MANA_POINT;                /*!< ゲーム中のMP型を定義 */
143
144 typedef int ARTIFACT_BIAS_IDX;  /*!< ランダムアーティファクトのバイアス型 */
145
146 typedef s16b HIT_PROB;                  /*!< ゲーム中の装備命中修正値を定義 */
147 typedef int HIT_RELIABILITY;    /*!< 最終算出命中力を定義 */
148 typedef s16b BASE_STATUS;               /*!< ゲーム中の基礎能力値型を定義 */
149
150 typedef s32b MONSTER_NUMBER;    /*!< ゲーム中のモンスター数型を定義 */
151 typedef s32b ITEM_NUMBER;               /*!< ゲーム中のアイテム数型を定義 */
152
153 typedef s16b ACTION_ENERGY;             /*!< ゲーム中の行動エネルギー型を定義 */
154 typedef s16b ARMOUR_CLASS;              /*!< ゲーム中の行動アーマークラス型を定義 */
155 typedef s16b TIME_EFFECT;               /*!< ゲーム中の時限期間の型を定義 */
156 typedef byte DISCOUNT_RATE;             /*!< ゲーム中の値引き率の型を定義 */
157 typedef s16b SPEED;                             /*!< ゲーム中の加速値の型定義 */
158
159 /*!
160  * @var typedef s16b ENEGRY
161  * @brief 行動エネルギーの型定義
162  * @details
163  * ENERGYはプレイヤーとモンスターの行動順を定める行動エネルギーを示す型定義である。
164  */
165 typedef s16b ENERGY;                    /*!< ゲーム中の行動エネルギーの型定義 */
166
167
168 typedef s16b SLEEP_DEGREE;              /*!< モンスターの睡眠度の型定義 */
169
170 typedef s16b PLAYER_LEVEL;              /*!< ゲーム中のプレイヤーレベルの型を定義 */
171 typedef int DIRECTION;                  /*!< ゲーム中の方角の型定義 */
172 typedef s32b EXP;                               /*!< ゲーム中の主経験値の型定義 */
173 typedef s16b SUB_EXP;                   /*!< ゲーム中の副経験値の型定義 */
174
175 typedef s32b OBJECT_SUBTYPE_VALUE; /*!< ゲーム中のアイテム副分類の型定義 */
176 typedef s16b PARAMETER_VALUE;      /*!< ゲーム中のアイテム能力値の型定義 */
177 typedef s32b WEIGHT;               /*!< ゲーム中の重量の型定義(ポンド) */
178
179 typedef int DICE_NUMBER; /*!< ゲーム中のダイス数の型定義 */
180 typedef int DICE_SID;    /*!< ゲーム中のダイス面の型定義 */
181 typedef s32b PRICE;      /*!< ゲーム中の金額価値の型定義 */
182 typedef s16b FEED;       /*!< ゲーム中の滋養度の型定義 */
183
184 typedef u32b STR_OFFSET;      /*!< テキストオフセットの型定義 */
185
186 typedef int POWER;              /*!< 魔法の効力定義*/
187
188 typedef s32b DEPTH;     /*!< ゲーム中の階層レベルの型定義 */
189 typedef byte RARITY;    /*!< ゲーム中の希少度の型定義 */
190
191 typedef s32b GAME_TURN;     /*!< ゲーム中のターンの型定義 */
192 typedef u32b REAL_TIME;     /*!< 実時刻の型定義 */
193
194 typedef s32b PERCENTAGE;    /*!< ゲーム中のパーセント表記の型定義(/100倍) */
195 typedef s16b MULTIPLY;      /*!< ゲーム中の倍率の型定義(/10倍) */
196
197 typedef u32b BIT_FLAGS;     /*!< 32ビットのフラグ配列の型定義 */
198 typedef u16b BIT_FLAGS16;   /*!< 16ビットのフラグ配列の型定義 */
199 typedef byte BIT_FLAGS8;    /*!< 8ビットのフラグ配列の型定義 */
200
201 typedef s16b XTRA16;     /*!< 汎用変数16ビットの型定義 */
202 typedef byte XTRA8;      /*!< 汎用変数8ビットの型定義 */
203
204 typedef s16b COMMAND_CODE;   /*!< コマンド内容の型定義 */
205 typedef s16b COMMAND_ARG;        /*!< コマンド引数の型定義 */
206 typedef s16b COMMAND_NUM;        /*!< コマンド数の型定義 */
207
208 typedef int TERM_LEN;     /*!< コンソール表示座標の型定義 */
209 typedef byte TERM_COLOR;  /*!< テキスト表示色の型定義 */
210 typedef char SYMBOL_CODE; /*!< キャラの文字の型定義 */
211
212 typedef s32b MAGIC_NUM1;   /*!< プレイヤーの汎用魔法情報配列1の型定義*/
213 typedef byte MAGIC_NUM2;   /*!< プレイヤーの汎用魔法情報配列2の型定義*/
214
215 typedef s32b SPELL_IDX;    /*!< 各魔法領域/職業能力ごとの呪文ID型定義 */
216 typedef s16b PROB;         /*!< 確率の重みの型定義 */
217 typedef byte FEAT_POWER;   /*!< 地形強度の型定義 */
218
219 typedef int QUANTITY; /*!< インターフェース上の指定個数 */
220
221 typedef int EFFECT_ID; /*!< 効果属性ID */
222
223 typedef s16b QUEST_TYPE;   /*!< クエストの種別ID */
224 typedef s16b QUEST_STATUS; /*!< クエストの状態ID */
225
226 typedef s16b ACTION_SKILL_POWER; /*!< 行動技能値 */
227
228 typedef int PET_COMMAND_IDX; /*!< ペットへの指示ID */
229 typedef byte FF_FLAGS_IDX;   /*!< 地形特性ID */
230
231 typedef s16b FEAT_PRIORITY; /*!< 地形の縮小表示優先順位 */
232
233 /*** Pointers to all the basic types defined above ***/
234 typedef char *char_ptr;
235 typedef byte *byte_ptr;
236
237 /*** Pointers to Functions of special types (for various purposes) ***/
238 /* A generic function takes a user data and a special data */
239 typedef errr    (*func_gen)(vptr, vptr);
240
241 /* An equality testing function takes two things to compare (bool) */
242 typedef bool    (*func_eql)(vptr, vptr);
243
244 /* A hasher takes a thing (and a max hash size) to hash (0 to siz - 1) */
245 typedef uint    (*func_hsh)(vptr, uint);
246
247 /* A key extractor takes a thing and returns (a pointer to) some key */
248 typedef vptr    (*func_key)(vptr);
249
250 typedef enum process_result {
251     PROCESS_FALSE = 0,
252     PROCESS_TRUE = 1,
253     PROCESS_CONTINUE = 2,
254 } process_result;
255
256 #endif