OSDN Git Service

#37287 #37353 (2.2.0.89) EFFECT_ID型を定義し、型の置換を継続中。 / Define EFFECT_ID ongoing type...
[hengband/hengband.git] / src / h-type.h
1 /*!
2  * @file h-type.h
3  * @brief ゲーム中に用いる変数型定義 /
4  * Basic "types".
5  * @date 2014/08/17
6  * @author
7  * 不明(変愚蛮怒スタッフ?)
8  * @details
9  * <pre>
10  * Note the attempt to make all basic types have 4 letters.
11  * This improves readibility and standardizes the code.
12  * Likewise, all complex types are at least 4 letters.
13  * Thus, almost every three letter word is a legal variable.
14  * But beware of certain reserved words ('for' and 'if' and 'do').
15  * Note that the type used in structures for bit flags should be uint.
16  * As long as these bit flags are sequential, they will be space smart.
17  * Note that on some machines, apparently "signed char" is illegal.
18  * It must be true that char/byte takes exactly 1 byte
19  * It must be true that sind/uind takes exactly 2 bytes
20  * It must be true that sbig/ubig takes exactly 4 bytes
21  * On Sparc's, a sint takes 4 bytes (2 is legal)
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
45 typedef void *vptr;       /*!< void型ポインタ定義 / A standard pointer (to "void" because ANSI C says so) */
46 typedef const char *cptr; /*!< 文字列定数用ポインタ定義 / A simple pointer (to unmodifiable strings) */
47 typedef double real;      /*!< doubleをreal型として定義 / Since float's are silly, hard code real numbers as doubles */
48
49
50 /*!
51  * @brief エラーコードの定義 / Error codes for function return values
52  * @details
53  * 一般に成功時0、失敗時負数、何らかの問題時整数とする。
54  * Success = 0, Failure = -N, Problem = +N 
55  */
56 typedef int errr;
57
58 #undef uint
59 #define uint uint_hack /*!< 非マッキントッシュ環境で重複を避けるためのuint_hack型定義 / Hack -- prevent problems with non-MACINTOSH */
60
61 #undef huge
62 #define huge huge_hack /*!< WINDOWS環境で重複を避けるためのhuge_hack定義 / Hack -- prevent problems with WINDOWS */
63
64 #undef byte
65 #define byte byte_hack /*!< AMIGA環境で重複を避けるためのbyte_hack定義 / Hack -- prevent problems with AMIGA */
66
67 #undef bool
68 #define bool bool_hack /*!< C++環境で重複を避けるためのbool_hack定義 Hack -- prevent problems with C++ */
69
70
71 /* Note that "signed char" is not always "defined" */
72 /* So always use "s16b" to hold small signed values */
73 /* A signed byte of memory */
74 /* typedef signed char syte; */
75
76 typedef unsigned char byte; /*!< byte型をunsighned charとして定義 / Note that unsigned values can cause math problems / An unsigned byte of memory */
77 typedef char bool; /*!< bool型をcharとして定義 / Note that a bool is smaller than a full "int" / Simple True/False type */
78 typedef int sint; /*!< sint型をintとして定義 / A signed, standard integer (at least 2 bytes) */
79 typedef unsigned int uint; /* uint型をintとして定義 /  An unsigned, "standard" integer (often pre-defined) */
80
81
82 /* The largest possible signed integer (pre-defined) */
83 /* typedef long long; */
84
85 /* The largest possible unsigned integer */
86 typedef unsigned long huge;
87
88 /* Signed/Unsigned 16 bit value */
89 #ifdef HAVE_STDINT_H
90 typedef int16_t s16b;
91 typedef uint16_t u16b;
92 #else
93 typedef signed short s16b;
94 typedef unsigned short u16b;
95 #endif
96
97 /* Signed/Unsigned 32 bit value */
98 #ifdef HAVE_STDINT_H
99 typedef int32_t s32b;
100 typedef uint32_t u32b;
101 #else
102 typedef signed long s32b;
103 typedef unsigned long u32b;
104 #endif
105
106
107 typedef s16b IDX;                               /*!< ゲーム中のID型を定義 */
108
109 typedef s16b FEAT_IDX;                  /*!< ゲーム中の地形ID型を定義 */
110
111 typedef s16b RACE_IDX;                  /*!< ゲーム中のプレイヤー種族ID型を定義 */
112 typedef s16b MIMIC_RACE_IDX;    /*!< ゲーム中のプレイヤー変身種族ID型を定義 */
113 typedef s16b PATRON_IDX;                /*!< ゲーム中のプレイヤーパトロンID型を定義 */
114
115 typedef s16b MONRACE_IDX;               /*!< ゲーム中のモンスター種族ID型を定義 */
116 typedef s16b MONSTER_IDX;               /*!< ゲーム中のモンスター個体ID型を定義 */
117 typedef s16b DUNGEON_IDX;               /*!< ゲーム中のダンジョンID型を定義 */
118 typedef s16b REALM_IDX;                 /*!< ゲーム中の魔法領域ID型を定義 */
119 typedef s16b ARTIFACT_IDX;              /*!< ゲーム中のアーティファクトID型を定義 */
120 typedef s16b VIRTUES_IDX;               /*!< ゲーム中の徳ID型を定義 */
121 typedef s16b QUEST_IDX;                 /*!< ゲーム中のクエストID型を定義 */
122 typedef byte ROOM_IDX;                  /*!< 部屋のID型を定義 */
123
124 typedef s16b INVENTORY_IDX;             /*!< ゲーム中の所持品ID型を定義 */
125 typedef s16b OBJECT_IDX;                /*!< ゲーム中のアイテムID型を定義 */
126
127 typedef s16b KIND_OBJECT_IDX;   /*!< ゲーム中のベースアイテムID型を定義 */
128
129 typedef s32b POSITION;                  /*!< ゲーム中の座標型を定義 */
130 typedef s32b HIT_POINT;                 /*!< ゲーム中のHP/ダメージ型を定義 */
131 typedef s32b MANA_POINT;                /*!< ゲーム中のMP型を定義 */
132 typedef s16b HIT_PROB;                  /*!< ゲーム中の命中修正値を定義 */
133 typedef s16b BASE_STATUS;               /*!< ゲーム中の基礎能力値型を定義 */
134
135 typedef s32b MONSTER_NUMBER;    /*!< ゲーム中のモンスター数型を定義 */
136 typedef s32b ITEM_NUMBER;               /*!< ゲーム中のアイテム数型を定義 */
137
138 typedef s16b ACTION_ENERGY;             /*!< ゲーム中の行動エネルギー型を定義 */
139 typedef s16b ARMOUR_CLASS;              /*!< ゲーム中の行動アーマークラス型を定義 */
140 typedef s16b TIME_EFFECT;               /*!< ゲーム中の時限期間の型を定義 */
141 typedef byte CHARACTER_IDX;             /*!< ゲーム中のキャラクター特性各種IDの型を定義 */
142 typedef byte DISCOUNT_RATE;             /*!< ゲーム中の値引き率の型を定義 */
143 typedef byte SPEED;                             /*!< ゲーム中の加速値の型定義 */
144 typedef s16b ENERGY;                    /*!< ゲーム中の行動エネルギーの型定義 */
145 typedef s16b SLEEP_DEGREE;              /*!< モンスターの睡眠度の型定義 */
146
147 typedef s16b PLAYER_LEVEL;              /*!< ゲーム中のプレイヤーレベルの型を定義 */
148 typedef int DIRECTION;                  /*!< ゲーム中の方角の型定義 */
149 typedef s32b EXP;                               /*!< ゲーム中の主経験値の型定義 */
150 typedef s16b SUB_EXP;                   /*!< ゲーム中の副経験値の型定義 */
151 typedef s16b TERM_COLOR;                /*!< テキスト表示色の型定義 */
152
153
154 typedef s32b OBJECT_TYPE_VALUE;    /*!< ゲーム中のアイテム主分類の型定義 */
155 typedef s32b OBJECT_SUBTYPE_VALUE; /*!< ゲーム中のアイテム副分類の型定義 */
156 typedef s16b PARAMETER_VALUE;      /*!< ゲーム中のアイテム能力値の型定義 */
157 typedef s16b WEIGHT;               /*!< ゲーム中の重量の型定義(ポンド) */
158
159 typedef int DICE_NUMBER; /*!< ゲーム中のダイス数の型定義 */
160 typedef int DICE_SID;    /*!< ゲーム中のダイス面の型定義 */
161 typedef s32b PRICE;      /*!< ゲーム中の金額価値の型定義 */
162 typedef s16b FEED;       /*!< ゲーム中の滋養度の型定義 */
163
164 typedef u32b STR_OFFSET;      /*!< テキストオフセットの型定義 */
165
166 typedef s32b DEPTH;     /*!< ゲーム中の階層レベルの型定義 */
167 typedef byte RARITY;    /*!< ゲーム中の希少度の型定義 */
168
169 typedef s32b GAME_TURN;     /*!< ゲーム中のターンの型定義 */
170 typedef s32b REAL_TIME;     /*!< 実時刻の型定義 */
171
172 typedef s16b PERCENTAGE;    /*!< ゲーム中のパーセント表記の型定義(/100倍) */
173 typedef s16b MULTIPLY;      /*!< ゲーム中の倍率の型定義(/10倍) */
174
175 typedef u32b BIT_FLAGS;     /*!< 32ビットのフラグ配列の型定義 */
176 typedef u16b BIT_FLAGS16;   /*!< 16ビットのフラグ配列の型定義 */
177 typedef byte BIT_FLAGS8;    /*!< 8ビットのフラグ配列の型定義 */
178
179 typedef s16b XTRA16;     /*!< 汎用変数16ビットの型定義 */
180 typedef byte XTRA8;      /*!< 汎用変数8ビットの型定義 */
181
182 typedef s16b COMMAND_CODE;   /*!< コマンド内容の型定義 */
183 typedef s16b COMMAND_ARG;        /*!< コマンド引数の型定義 */
184
185 typedef int TERM_POSITION;   /*!< コンソール表示座標の型定義 */
186 typedef byte SYMBOL_COLOR;    /*!< キャラの色の型定義 */
187 typedef byte SYMBOL_CODE;     /*!< キャラの文字の型定義 */
188
189 typedef s32b MAGIC_NUM1;   /*!< プレイヤーの汎用魔法情報配列1の型定義*/
190 typedef byte MAGIC_NUM2;   /*!< プレイヤーの汎用魔法情報配列2の型定義*/
191
192 typedef s32b SPELL_IDX;    /*!< 各魔法領域/職業能力ごとの呪文ID型定義 */
193 typedef s16b PROB;         /*!< 確率の重みの型定義 */
194 typedef byte FEAT_POWER;   /*!< 地形強度の型定義 */
195
196 typedef int QUANTITY; /*!< インターフェース上の指定個数 */
197
198 typedef byte BLOW_METHOD; /*!< モンスターの打撃手段ID */
199 typedef byte BLOW_EFFECT; /*!< モンスターの打撃効果ID */
200
201 typedef int EFFECT_ID; /*!< 効果属性ID */
202
203
204 /*** Pointers to all the basic types defined above ***/
205
206 typedef real *real_ptr;
207 typedef errr *errr_ptr;
208 typedef char *char_ptr;
209 typedef byte *byte_ptr;
210 typedef bool *bool_ptr;
211 typedef sint *sint_ptr;
212 typedef uint *uint_ptr;
213 typedef long *long_ptr;
214 typedef huge *huge_ptr;
215 typedef s16b *s16b_ptr;
216 typedef u16b *u16b_ptr;
217 typedef s32b *s32b_ptr;
218 typedef u32b *u32b_ptr;
219 typedef vptr *vptr_ptr;
220 typedef cptr *cptr_ptr;
221
222
223
224 /*** Pointers to Functions of special types (for various purposes) ***/
225
226 /* A generic function takes a user data and a special data */
227 typedef errr    (*func_gen)(vptr, vptr);
228
229 /* An equality testing function takes two things to compare (bool) */
230 typedef bool    (*func_eql)(vptr, vptr);
231
232 /* A comparison function takes two things and to compare (-1,0,+1) */
233 typedef sint    (*func_cmp)(vptr, vptr);
234
235 /* A hasher takes a thing (and a max hash size) to hash (0 to siz - 1) */
236 typedef uint    (*func_hsh)(vptr, uint);
237
238 /* A key extractor takes a thing and returns (a pointer to) some key */
239 typedef vptr    (*func_key)(vptr);
240
241
242
243 #endif
244