5 * @brief ゲーム中に用いる変数型定義 / Basic "types".
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 sint takes 4 bytes (2 is legal)
23 * On Sparc's, a uint takes 4 bytes (2 is legal)
24 * On Sparc's, a long takes 4 bytes (8 is legal)
25 * On Sparc's, a huge takes 4 bytes (8 is legal)
26 * On Sparc's, a vptr takes 4 bytes (8 is legal)
27 * On Sparc's, a real takes 8 bytes (4 is legal)
28 * Note that some files have already been included by "h-include.h"
29 * These include <stdio.h> and <sys/types>, which define some types
30 * In particular, uint is defined so we do not have to define it
31 * Also, see <limits.h> for min/max values for sind, uind, long, huge
32 * (SHRT_MIN, SHRT_MAX, USHRT_MAX, LONG_MIN, LONG_MAX, ULONG_MAX)
33 * These limits should be verified and coded into "h-constant.h".
37 #ifndef INCLUDED_H_TYPE_H
38 #define INCLUDED_H_TYPE_H
44 /*** Special 4 letter names for some standard types ***/
45 typedef void *vptr; /*!< void型ポインタ定義 / A standard pointer (to "void" because ANSI C says so) */
46 typedef const char *concptr; /*!< 文字列定数用ポインタ定義 / A simple pointer (to unmodifiable strings) */
47 typedef double real; /*!< doubleをreal型として定義 / Since float's are silly, hard code real numbers as doubles */
50 * @brief エラーコードの定義 / Error codes for function return values
52 * 一般に成功時0、失敗時負数、何らかの問題時正数とする。
53 * Success = 0, Failure = -N, Problem = +N
58 #define bool bool_hack /*!< C++環境で重複を避けるためのbool_hack定義 Hack -- prevent problems with C++ */
60 #define MAX_UCHAR 255 /*!< Maximum value storable in a "byte" (hard-coded) */
61 #define MAX_SHORT 32767 /*!< Maximum value storable in a "s16b" (hard-coded) */
63 #define MAX_NLEN 160 /*!< Maximum length of object's name */
65 /* Note that "signed char" is not always "defined" */
66 /* So always use "s16b" to hold small signed values */
67 /* A signed byte of memory */
68 /* typedef signed char syte; */
69 typedef unsigned char byte; /*!< byte型をunsighned charとして定義 / Note that unsigned values can cause math problems / An unsigned byte of memory */
70 typedef char bool; /*!< bool型をcharとして定義 / Note that a bool is smaller than a full "int" / Simple True/False type */
71 typedef int sint; /*!< sint型をintとして定義 / A signed, standard integer (at least 2 bytes) */
72 typedef unsigned int uint; /* uint型をintとして定義 / An unsigned, "standard" integer (often pre-defined) */
74 /* The largest possible unsigned integer */
75 typedef unsigned long huge;
77 /* Signed/Unsigned 16 bit value */
80 typedef uint16_t u16b;
82 typedef signed short s16b;
83 typedef unsigned short u16b;
86 /* Signed/Unsigned 32 bit value */
89 typedef uint32_t u32b;
91 typedef signed long s32b;
92 typedef unsigned long u32b;
95 typedef s16b IDX; /*!< ゲーム中のID型を定義 */
97 typedef s16b TOWN_IDX; /*!< ゲーム中の町ID型を定義 */
98 typedef s16b FEAT_IDX; /*!< ゲーム中の地形ID型を定義 */
99 typedef s16b FLOOR_IDX; /*!< ゲーム中のフロアID型を定義 */
101 typedef byte SEX_IDX; /*!< ゲーム中のプレイヤー性別ID型を定義 */
102 typedef s16b RACE_IDX; /*!< ゲーム中のプレイヤー種族ID型を定義 */
103 typedef s16b CLASS_IDX; /*!< ゲーム中のプレイヤー職業ID型を定義 */
104 typedef s16b CHARACTER_IDX; /*!< ゲーム中のプレイヤー性格ID型を定義 */
105 typedef s16b MIMIC_RACE_IDX; /*!< ゲーム中のプレイヤー変身種族ID型を定義 */
106 typedef s16b PATRON_IDX; /*!< ゲーム中のプレイヤーパトロンID型を定義 */
107 typedef s32b ACTION_IDX; /*!< プレイヤーが現在取っている常時行動のID定義 */
108 typedef s16b BACT_IDX; /*!< 町の施設処理のID定義 */
109 typedef s16b BACT_RESTRICT_IDX; /*!< 町の施設処理の規制処理ID定義 */
111 typedef s16b MONRACE_IDX; /*!< ゲーム中のモンスター種族ID型を定義 */
112 typedef s16b MONSTER_IDX; /*!< ゲーム中のモンスター個体ID型を定義 */
113 typedef s16b DUNGEON_IDX; /*!< ゲーム中のダンジョンID型を定義 */
114 typedef s16b REALM_IDX; /*!< ゲーム中の魔法領域ID型を定義 */
115 typedef s16b ARTIFACT_IDX; /*!< ゲーム中のアーティファクトID型を定義 */
116 typedef s16b EGO_IDX; /*!< アイテムエゴのID型を定義 */
117 typedef s16b ACTIVATION_IDX; /*!< アイテムの発動効果ID型を定義 */
118 typedef s16b VIRTUES_IDX; /*!< ゲーム中の徳ID型を定義 */
119 typedef s16b QUEST_IDX; /*!< ゲーム中のクエストID型を定義 */
120 typedef byte ROOM_IDX; /*!< 部屋のID型を定義 */
122 typedef s16b INVENTORY_IDX; /*!< ゲーム中の所持品ID型を定義 */
123 typedef s16b OBJECT_IDX; /*!< ゲーム中のアイテムID型を定義 */
124 typedef s32b ESSENCE_IDX; /*!< 鍛冶エッセンスのID型 */
125 typedef s16b KIND_OBJECT_IDX; /*!< ゲーム中のベースアイテムID型を定義 */
126 typedef s16b VAULT_IDX; /*!< 固定部屋のID型を定義 */
127 typedef int MUTATION_IDX; /*!< 突然変異のID型を定義 */
129 typedef s32b POSITION; /*!< ゲーム中の座標型を定義 */
130 typedef s16b POSITION_IDX; /*!< ゲーム中の座標リストID型 */
132 typedef s32b ALIGNMENT; /*!< 善悪属性の型定義 */
133 typedef byte FEAT_SUBTYPE; /*!< 地形情報の副値 (トラップ種別/パターン種別/店舗種別)*/
135 typedef char GAME_TEXT; /*!< ゲーム中のテキスト型定義 */
138 * @var typedef s32b HIT_POINT
139 * @brief HPとその増減量の型定義
141 * HIT_POINTはプレイヤー及びモンスターのHPの各値とその増減量の型である。
143 typedef s32b HIT_POINT;
146 * @var typedef s32b MANA_POINT
147 * @brief MPとその増減量の型定義
149 * MANA_POINTはプレイヤーのMPの各地とその増減量の型である。
151 typedef s32b MANA_POINT; /*!< ゲーム中のMP型を定義 */
153 typedef int ARTIFACT_BIAS_IDX; /*!< ランダムアーティファクトのバイアス型 */
155 typedef s16b HIT_PROB; /*!< ゲーム中の装備命中修正値を定義 */
156 typedef int HIT_RELIABILITY; /*!< 最終算出命中力を定義 */
157 typedef s16b BASE_STATUS; /*!< ゲーム中の基礎能力値型を定義 */
159 typedef s32b MONSTER_NUMBER; /*!< ゲーム中のモンスター数型を定義 */
160 typedef s32b ITEM_NUMBER; /*!< ゲーム中のアイテム数型を定義 */
162 typedef s16b ACTION_ENERGY; /*!< ゲーム中の行動エネルギー型を定義 */
163 typedef s16b ARMOUR_CLASS; /*!< ゲーム中の行動アーマークラス型を定義 */
164 typedef s16b TIME_EFFECT; /*!< ゲーム中の時限期間の型を定義 */
165 typedef byte DISCOUNT_RATE; /*!< ゲーム中の値引き率の型を定義 */
166 typedef s16b SPEED; /*!< ゲーム中の加速値の型定義 */
169 * @var typedef s16b ENEGRY
172 * ENERGYはプレイヤーとモンスターの行動順を定める行動エネルギーを示す型定義である。
174 typedef s16b ENERGY; /*!< ゲーム中の行動エネルギーの型定義 */
177 typedef s16b SLEEP_DEGREE; /*!< モンスターの睡眠度の型定義 */
179 typedef s16b PLAYER_LEVEL; /*!< ゲーム中のプレイヤーレベルの型を定義 */
180 typedef int DIRECTION; /*!< ゲーム中の方角の型定義 */
181 typedef s32b EXP; /*!< ゲーム中の主経験値の型定義 */
182 typedef s16b SUB_EXP; /*!< ゲーム中の副経験値の型定義 */
184 typedef s32b OBJECT_TYPE_VALUE; /*!< ゲーム中のアイテム主分類の型定義 */
185 typedef s32b OBJECT_SUBTYPE_VALUE; /*!< ゲーム中のアイテム副分類の型定義 */
186 typedef s16b PARAMETER_VALUE; /*!< ゲーム中のアイテム能力値の型定義 */
187 typedef s32b WEIGHT; /*!< ゲーム中の重量の型定義(ポンド) */
189 typedef int DICE_NUMBER; /*!< ゲーム中のダイス数の型定義 */
190 typedef int DICE_SID; /*!< ゲーム中のダイス面の型定義 */
191 typedef s32b PRICE; /*!< ゲーム中の金額価値の型定義 */
192 typedef s16b FEED; /*!< ゲーム中の滋養度の型定義 */
194 typedef u32b STR_OFFSET; /*!< テキストオフセットの型定義 */
196 typedef int POWER; /*!< 魔法の効力定義*/
198 typedef s32b DEPTH; /*!< ゲーム中の階層レベルの型定義 */
199 typedef byte RARITY; /*!< ゲーム中の希少度の型定義 */
201 typedef s32b GAME_TURN; /*!< ゲーム中のターンの型定義 */
202 typedef u32b REAL_TIME; /*!< 実時刻の型定義 */
204 typedef s32b PERCENTAGE; /*!< ゲーム中のパーセント表記の型定義(/100倍) */
205 typedef s16b MULTIPLY; /*!< ゲーム中の倍率の型定義(/10倍) */
207 typedef u32b BIT_FLAGS; /*!< 32ビットのフラグ配列の型定義 */
208 typedef u16b BIT_FLAGS16; /*!< 16ビットのフラグ配列の型定義 */
209 typedef byte BIT_FLAGS8; /*!< 8ビットのフラグ配列の型定義 */
211 typedef s16b XTRA16; /*!< 汎用変数16ビットの型定義 */
212 typedef byte XTRA8; /*!< 汎用変数8ビットの型定義 */
214 typedef s16b COMMAND_CODE; /*!< コマンド内容の型定義 */
215 typedef s16b COMMAND_ARG; /*!< コマンド引数の型定義 */
216 typedef s16b COMMAND_NUM; /*!< コマンド数の型定義 */
218 typedef int TERM_LEN; /*!< コンソール表示座標の型定義 */
219 typedef byte TERM_COLOR; /*!< テキスト表示色の型定義 */
220 typedef char SYMBOL_CODE; /*!< キャラの文字の型定義 */
222 typedef s32b MAGIC_NUM1; /*!< プレイヤーの汎用魔法情報配列1の型定義*/
223 typedef byte MAGIC_NUM2; /*!< プレイヤーの汎用魔法情報配列2の型定義*/
225 typedef s32b SPELL_IDX; /*!< 各魔法領域/職業能力ごとの呪文ID型定義 */
226 typedef s16b PROB; /*!< 確率の重みの型定義 */
227 typedef byte FEAT_POWER; /*!< 地形強度の型定義 */
229 typedef int QUANTITY; /*!< インターフェース上の指定個数 */
231 typedef byte BLOW_METHOD; /*!< モンスターの打撃手段ID */
232 typedef byte BLOW_EFFECT; /*!< モンスターの打撃効果ID */
234 typedef int EFFECT_ID; /*!< 効果属性ID */
236 typedef s16b QUEST_TYPE; /*!< クエストの種別ID */
237 typedef s16b QUEST_STATUS; /*!< クエストの状態ID */
239 typedef s16b ACTION_SKILL_POWER; /*!< 行動技能値 */
241 typedef int PET_COMMAND_IDX; /*!< ペットへの指示ID */
242 typedef byte FF_FLAGS_IDX; /*!< 地形特性ID */
244 typedef s16b FEAT_PRIORITY; /*!< 地形の縮小表示優先順位 */
246 typedef BIT_FLAGS SPOP_FLAGS; /*!< スペル用オプション */
248 /*** Pointers to all the basic types defined above ***/
249 typedef real *real_ptr;
250 typedef errr *errr_ptr;
251 typedef char *char_ptr;
252 typedef byte *byte_ptr;
253 typedef bool *bool_ptr;
254 typedef sint *sint_ptr;
255 typedef uint *uint_ptr;
256 typedef long *long_ptr;
257 typedef huge *huge_ptr;
258 typedef s16b *s16b_ptr;
259 typedef u16b *u16b_ptr;
260 typedef s32b *s32b_ptr;
261 typedef u32b *u32b_ptr;
262 typedef vptr *vptr_ptr;
263 typedef concptr *cptr_ptr;
265 /*** Pointers to Functions of special types (for various purposes) ***/
266 /* A generic function takes a user data and a special data */
267 typedef errr (*func_gen)(vptr, vptr);
269 /* An equality testing function takes two things to compare (bool) */
270 typedef bool (*func_eql)(vptr, vptr);
272 /* A comparison function takes two things and to compare (-1,0,+1) */
273 typedef sint (*func_cmp)(vptr, vptr);
275 /* A hasher takes a thing (and a max hash size) to hash (0 to siz - 1) */
276 typedef uint (*func_hsh)(vptr, uint);
278 /* A key extractor takes a thing and returns (a pointer to) some key */
279 typedef vptr (*func_key)(vptr);