OSDN Git Service

Merge remote-tracking branch 'remotes/origin/feature/Fix-Dungeon-Quest-BGM' into...
[hengband/hengband.git] / src / view / display-characteristic.c
1 /*!
2  * @brief キャラクタの特性を表示する
3  * @date 2020/02/25
4  * @author Hourier
5  */
6
7 #include "display-characteristic.h"
8 #include "flavor/flavor-util.h"
9 #include "inventory/inventory-slot-types.h"
10 #include "object-enchant/tr-types.h"
11 #include "object-enchant/trc-types.h"
12 #include "object/object-flags.h"
13 #include "player/permanent-resistances.h"
14 #include "player/race-resistances.h"
15 #include "player/temporary-resistances.h"
16 #include "term/screen-processor.h"
17 #include "term/term-color-types.h"
18 #include "util/bit-flags-calculator.h"
19
20 typedef struct {
21         BIT_FLAGS player_flags[TR_FLAG_SIZE];
22         BIT_FLAGS tim_player_flags[TR_FLAG_SIZE];
23         BIT_FLAGS player_imm[TR_FLAG_SIZE];
24         BIT_FLAGS tim_player_imm[TR_FLAG_SIZE];
25         BIT_FLAGS player_vuln[TR_FLAG_SIZE];
26         BIT_FLAGS known_obj_imm[TR_FLAG_SIZE];
27 } all_player_flags;
28
29
30 /*!
31  * @brief 呪われた装備の表示色を変更する
32  * @param mode 表示オプション
33  * @param row 行数
34  * @param col 列数
35  * @param flags 装備品へのフラグ群
36  * @param header_color 耐性等のパラメータ名 の色
37  * @param o_ptr 装備品への参照ポインタ
38  * @return 与えられた装備が呪われていればTRUE
39  */
40 static bool decide_cursed_equipment_color(u16b mode, TERM_LEN row, TERM_LEN *col, BIT_FLAGS *flags, byte *header_color, object_type *o_ptr)
41 {
42         if ((mode & DP_CURSE) == 0) return FALSE;
43
44         if (has_flag(flags, TR_ADD_L_CURSE) || has_flag(flags, TR_ADD_H_CURSE))
45         {
46                 c_put_str(TERM_L_DARK, "+", row, *col);
47                 *header_color = TERM_WHITE;
48         }
49
50         if (o_ptr->curse_flags & (TRC_CURSED | TRC_HEAVY_CURSE))
51         {
52                 c_put_str(TERM_WHITE, "+", row, *col);
53                 *header_color = TERM_WHITE;
54         }
55
56         if (o_ptr->curse_flags & TRC_PERMA_CURSE)
57         {
58                 c_put_str(TERM_WHITE, "*", row, *col);
59                 *header_color = TERM_WHITE;
60         }
61
62         (*col)++;
63         return TRUE;
64 }
65
66
67 /*!
68  * @brief 装備品の光源範囲増加/減少で表示色を変える
69  * @param row 行数
70  * @param col 列数
71  * @param flag1 参照する特性ID
72  * @param flags 装備品へのフラグ群
73  * @param header_color 耐性等のパラメータ名 の色
74  * @return 装備品が光源範囲に影響を及ぼすならばTRUE、そうでないならFALSE
75  */
76 static bool decide_light_equipment_color(TERM_LEN row, TERM_LEN *col, int flag1, BIT_FLAGS *flags, byte *header_color)
77 {
78         if (flag1 != TR_LITE_1) return FALSE;
79
80         if (has_dark_flag(flags))
81         {
82                 c_put_str(TERM_L_DARK, "+", row, *col);
83                 *header_color = TERM_WHITE;
84         }
85         else if (has_lite_flag(flags))
86         {
87                 c_put_str(TERM_WHITE, "+", row, *col);
88                 *header_color = TERM_WHITE;
89         }
90
91         (*col)++;
92         return TRUE;
93 }
94
95
96 /*!
97  * @brief プレーヤーの弱点に応じて表示色を変える
98  * @param mode 表示オプション
99  * @param row 行数
100  * @param col 列数
101  * @param flag1 参照する特性ID
102  * @param flags 装備品へのフラグ群
103  * @param header_color 耐性等のパラメータ名 の色
104  * @param vuln プレーヤーの弱点
105  * @return なし
106  */
107 static void decide_vulnerability_color(u16b mode, TERM_LEN row, TERM_LEN *col, int flag1, BIT_FLAGS *flags, byte *header_color, bool vuln)
108 {
109         if (has_flag(flags, flag1))
110         {
111                 c_put_str((byte)(vuln ? TERM_L_RED : TERM_WHITE),
112                         (mode & DP_IMM) ? "*" : "+", row, *col);
113                 *header_color = TERM_WHITE;
114         }
115
116         (*col)++;
117 }
118
119
120 /*!
121  * @brief 装備品を走査し、状況に応じて耐性等の表示色を変える
122  * @param creature_ptr プレーヤーへの参照ポインタ
123  * @param mode 表示オプション
124  * @param row 行数
125  * @param col 列数
126  * @param flag1 参照する特性ID
127  * @param header_color 耐性等のパラメータ名 の色
128  * @param vuln プレーヤーの弱点
129  * @return なし
130  * @details
131  * max_i changes only when weapon flags need only two column
132  */
133 static void decide_colors(player_type *creature_ptr, u16b mode, TERM_LEN row, TERM_LEN *col, int flag1, byte *header_color, bool vuln)
134 {
135         int max_i = (mode & DP_WP) ? INVEN_SUB_HAND + 1 : INVEN_TOTAL;
136         for (inventory_slot_type i = INVEN_MAIN_HAND; i < max_i; i++)
137         {
138                 BIT_FLAGS flags[TR_FLAG_SIZE];
139                 object_type *o_ptr;
140                 o_ptr = &creature_ptr->inventory_list[i];
141                 object_flags_known(creature_ptr, o_ptr, flags);
142                 if (!(mode & DP_IMM))
143                         c_put_str((byte)(vuln ? TERM_RED : TERM_SLATE), ".", row, *col);
144
145                 if (decide_cursed_equipment_color(mode, row, col, flags, header_color, o_ptr)) continue;
146                 if (decide_light_equipment_color(row, col, flag1, flags, header_color)) continue;
147
148                 decide_vulnerability_color(mode, row, col, flag1, flags, header_color, vuln);
149         }
150 }
151
152
153 /*!
154  * @brief プレイヤーの特性フラグ一種を表示する
155  * @param row コンソール表示位置の左上行
156  * @param col コンソール表示位置の左上列
157  * @param header コンソール上で表示する特性名
158  * @param header_color 耐性等のパラメータ名 の色
159  * @param header_col 「耐性等のパラメータ名 の色」の元々の位置
160  * @param flag1 参照する特性ID
161  * @param vuln プレーヤーの弱点
162  * @param f プレイヤーの特性情報構造体
163  * @return なし
164  */
165 static void display_one_characteristic(TERM_LEN row, TERM_LEN col, concptr header, byte header_color, int header_col, int flag1, bool vuln, all_player_flags *f)
166 {
167         c_put_str((byte)(vuln ? TERM_RED : TERM_SLATE), ".", row, col);
168         if (has_flag(f->player_flags, flag1))
169         {
170                 c_put_str((byte)(vuln ? TERM_L_RED : TERM_WHITE), "+", row, col);
171                 header_color = TERM_WHITE;
172         }
173
174         if (has_flag(f->tim_player_flags, flag1))
175         {
176                 c_put_str((byte)(vuln ? TERM_ORANGE : TERM_YELLOW), "#", row, col);
177                 header_color = TERM_WHITE;
178         }
179
180         if (has_flag(f->tim_player_imm, flag1))
181         {
182                 c_put_str(TERM_YELLOW, "*", row, col);
183                 header_color = TERM_WHITE;
184         }
185
186         if (has_flag(f->player_imm, flag1))
187         {
188                 c_put_str(TERM_WHITE, "*", row, col);
189                 header_color = TERM_WHITE;
190         }
191
192         if (vuln)
193                 c_put_str(TERM_RED, "v", row, col + 1);
194
195         c_put_str(header_color, header, row, header_col);
196 }
197
198
199 /*!
200  * @brief プレイヤーの特性フラグ一種表示を処理するメインルーチン
201  * @param creature_ptr プレーヤーへの参照ポインタ
202  * @param row コンソール表示位置の左上行
203  * @param col コンソール表示位置の左上列
204  * @param header コンソール上で表示する特性名
205  * @param flag1 参照する特性ID
206  * @param f プレイヤーの特性情報構造体
207  * @param mode 表示オプション
208  * @return なし
209  */
210 static void process_one_characteristic(player_type *creature_ptr, TERM_LEN row, TERM_LEN col, concptr header, int flag1, all_player_flags *f, u16b mode)
211 {
212         byte header_color = TERM_L_DARK;
213         int header_col = col;
214         bool vuln = FALSE;
215         if (has_flag(f->player_vuln, flag1) &&
216                 !(has_flag(f->known_obj_imm, flag1) || has_flag(f->player_imm, flag1) || has_flag(f->tim_player_imm, flag1)))
217                 vuln = TRUE;
218
219         col += strlen(header) + 1;
220         decide_colors(creature_ptr, mode, row, &col, flag1, &header_color, vuln);
221         if (mode & DP_IMM)
222         {
223                 if (header_color != TERM_L_DARK)
224                 {
225                         c_put_str(header_color, header, row, header_col);
226                 }
227
228                 return;
229         }
230
231         display_one_characteristic(row, col, header, header_color, header_col, flag1, vuln, f);
232 }
233
234
235 /*!
236  * @brief プレーヤーの基本耐性を表示する
237  * @param creature_ptr プレーヤーへの参照ポインタ
238  * @param display_player_equippy 表示へのコールバック
239  * @param f 特性フラグへの参照ポインタ
240  * @return なし
241  */
242 static void display_basic_resistance_info(player_type *creature_ptr, void(*display_player_equippy)(player_type*, TERM_LEN, TERM_LEN, BIT_FLAGS16), all_player_flags *f)
243 {
244         TERM_LEN row = 12;
245         TERM_LEN col = 1;
246         (*display_player_equippy)(creature_ptr, row - 2, col + 8, 0);
247         c_put_str(TERM_WHITE, "abcdefghijkl@", row - 1, col + 8);
248
249         process_one_characteristic(creature_ptr, row + 0, col, _("耐酸  :", "Acid  :"), TR_RES_ACID, f, 0);
250         process_one_characteristic(creature_ptr, row + 0, col, _("耐酸  :", "Acid  :"), TR_IM_ACID, f, DP_IMM);
251         process_one_characteristic(creature_ptr, row + 1, col, _("耐電撃:", "Elec  :"), TR_RES_ELEC, f, 0);
252         process_one_characteristic(creature_ptr, row + 1, col, _("耐電撃:", "Elec  :"), TR_IM_ELEC, f, DP_IMM);
253         process_one_characteristic(creature_ptr, row + 2, col, _("耐火炎:", "Fire  :"), TR_RES_FIRE, f, 0);
254         process_one_characteristic(creature_ptr, row + 2, col, _("耐火炎:", "Fire  :"), TR_IM_FIRE, f, DP_IMM);
255         process_one_characteristic(creature_ptr, row + 3, col, _("耐冷気:", "Cold  :"), TR_RES_COLD, f, 0);
256         process_one_characteristic(creature_ptr, row + 3, col, _("耐冷気:", "Cold  :"), TR_IM_COLD, f, DP_IMM);
257         process_one_characteristic(creature_ptr, row + 4, col, _("耐毒  :", "Poison:"), TR_RES_POIS, f, 0);
258         process_one_characteristic(creature_ptr, row + 5, col, _("耐閃光:", "Light :"), TR_RES_LITE, f, 0);
259         process_one_characteristic(creature_ptr, row + 6, col, _("耐暗黒:", "Dark  :"), TR_RES_DARK, f, 0);
260         process_one_characteristic(creature_ptr, row + 7, col, _("耐破片:", "Shard :"), TR_RES_SHARDS, f, 0);
261         process_one_characteristic(creature_ptr, row + 8, col, _("耐盲目:", "Blind :"), TR_RES_BLIND, f, 0);
262         process_one_characteristic(creature_ptr, row + 9, col, _("耐混乱:", "Conf  :"), TR_RES_CONF, f, 0);
263 }
264
265
266 /*!
267  * @brief プレーヤーの上位耐性を表示する
268  * @param creature_ptr プレーヤーへの参照ポインタ
269  * @param display_player_equippy 表示へのコールバック
270  * @param f 特性フラグへの参照ポインタ
271  * @return なし
272  */
273 static void display_advanced_resistance_info(player_type *creature_ptr, void(*display_player_equippy)(player_type*, TERM_LEN, TERM_LEN, BIT_FLAGS16), all_player_flags *f)
274 {
275         TERM_LEN row = 12;
276         TERM_LEN col = 26;
277         (*display_player_equippy)(creature_ptr, row - 2, col + 8, 0);
278         c_put_str(TERM_WHITE, "abcdefghijkl@", row - 1, col + 8);
279
280         process_one_characteristic(creature_ptr, row + 0, col, _("耐轟音:", "Sound :"), TR_RES_SOUND, f, 0);
281         process_one_characteristic(creature_ptr, row + 1, col, _("耐地獄:", "Nether:"), TR_RES_NETHER, f, 0);
282         process_one_characteristic(creature_ptr, row + 2, col, _("耐因混:", "Nexus :"), TR_RES_NEXUS, f, 0);
283         process_one_characteristic(creature_ptr, row + 3, col, _("耐カオ:", "Chaos :"), TR_RES_CHAOS, f, 0);
284         process_one_characteristic(creature_ptr, row + 4, col, _("耐劣化:", "Disnch:"), TR_RES_DISEN, f, 0);
285         process_one_characteristic(creature_ptr, row + 5, col, _("耐恐怖:", "Fear  :"), TR_RES_FEAR, f, 0);
286         process_one_characteristic(creature_ptr, row + 6, col, _("反射  :", "Reflct:"), TR_REFLECT, f, 0);
287         process_one_characteristic(creature_ptr, row + 7, col, _("火炎オ:", "AuFire:"), TR_SH_FIRE, f, 0);
288         process_one_characteristic(creature_ptr, row + 8, col, _("電気オ:", "AuElec:"), TR_SH_ELEC, f, 0);
289         process_one_characteristic(creature_ptr, row + 9, col, _("冷気オ:", "AuCold:"), TR_SH_COLD, f, 0);
290 }
291
292
293 /*!
294  * @brief プレーヤーのその他耐性を表示する
295  * @param creature_ptr プレーヤーへの参照ポインタ
296  * @param display_player_equippy 表示へのコールバック
297  * @param f 特性フラグへの参照ポインタ
298  * @return なし
299  */
300 static void display_other_resistance_info(player_type *creature_ptr, void(*display_player_equippy)(player_type*, TERM_LEN, TERM_LEN, BIT_FLAGS16), all_player_flags *f)
301 {
302         TERM_LEN row = 12;
303         TERM_LEN col = 51;
304         (*display_player_equippy)(creature_ptr, row - 2, col + 12, 0);
305         c_put_str(TERM_WHITE, "abcdefghijkl@", row - 1, col + 12);
306
307         process_one_characteristic(creature_ptr, row + 0, col, _("加速      :", "Speed     :"), TR_SPEED, f, 0);
308         process_one_characteristic(creature_ptr, row + 1, col, _("耐麻痺    :", "FreeAction:"), TR_FREE_ACT, f, 0);
309         process_one_characteristic(creature_ptr, row + 2, col, _("透明体視認:", "SeeInvisi.:"), TR_SEE_INVIS, f, 0);
310         process_one_characteristic(creature_ptr, row + 3, col, _("経験値保持:", "Hold Exp  :"), TR_HOLD_EXP, f, 0);
311         process_one_characteristic(creature_ptr, row + 4, col, _("警告      :", "Warning   :"), TR_WARNING, f, 0);
312         process_one_characteristic(creature_ptr, row + 5, col, _("遅消化    :", "SlowDigest:"), TR_SLOW_DIGEST, f, 0);
313         process_one_characteristic(creature_ptr, row + 6, col, _("急回復    :", "Regene.   :"), TR_REGEN, f, 0);
314         process_one_characteristic(creature_ptr, row + 7, col, _("浮遊      :", "Levitation:"), TR_LEVITATION, f, 0);
315         process_one_characteristic(creature_ptr, row + 8, col, _("永遠光源  :", "Perm Lite :"), TR_LITE_1, f, 0);
316         process_one_characteristic(creature_ptr, row + 9, col, _("呪い      :", "Cursed    :"), 0, f, DP_CURSE);
317 }
318
319
320 /*!
321  * @brief プレイヤーの特性フラグ一覧表示1
322  * @param creature_ptr プレーヤーへの参照ポインタ
323  * @param display_player_equippy 表示へのコールバック
324  * Special display, part 1
325  * @return なし
326  */
327 void display_player_flag_info_1(player_type *creature_ptr, void(*display_player_equippy)(player_type*, TERM_LEN, TERM_LEN, BIT_FLAGS16))
328 {
329         all_player_flags f;
330         player_flags(creature_ptr, f.player_flags);
331         tim_player_flags(creature_ptr, f.tim_player_flags);
332         player_immunity(creature_ptr, f.player_imm);
333         tim_player_immunity(creature_ptr, f.tim_player_imm);
334         known_obj_immunity(creature_ptr, f.known_obj_imm);
335         player_vulnerability_flags(creature_ptr, f.player_vuln);
336
337         display_basic_resistance_info(creature_ptr, display_player_equippy, &f);
338         display_advanced_resistance_info(creature_ptr, display_player_equippy, &f);
339         display_other_resistance_info(creature_ptr, display_player_equippy, &f);
340 }
341
342
343 /*!
344  * @brief スレイ系の特性フラグを表示する
345  * @param creature_ptr プレーヤーへの参照ポインタ
346  * @param display_player_equippy 表示へのコールバック
347  * @param f 特性フラグへの参照ポインタ
348  * @return なし
349  */
350 static void display_slay_info(player_type *creature_ptr, void(*display_player_equippy)(player_type*, TERM_LEN, TERM_LEN, BIT_FLAGS16), all_player_flags *f)
351 {
352         TERM_LEN row = 3;
353         TERM_LEN col = 1;
354         (*display_player_equippy)(creature_ptr, row - 2, col + 12, DP_WP);
355         c_put_str(TERM_WHITE, "ab@", row - 1, col + 12);
356
357         process_one_characteristic(creature_ptr, row + 0, col, _("邪悪 倍打 :", "Slay Evil :"), TR_SLAY_EVIL, f, DP_WP);
358         process_one_characteristic(creature_ptr, row + 0, col, _("邪悪 倍打 :", "Slay Evil :"), TR_KILL_EVIL, f, (DP_WP | DP_IMM));
359         process_one_characteristic(creature_ptr, row + 1, col, _("不死 倍打 :", "Slay Und. :"), TR_SLAY_UNDEAD, f, DP_WP);
360         process_one_characteristic(creature_ptr, row + 1, col, _("不死 倍打 :", "Slay Und. :"), TR_KILL_UNDEAD, f, (DP_WP | DP_IMM));
361         process_one_characteristic(creature_ptr, row + 2, col, _("悪魔 倍打 :", "Slay Demon:"), TR_SLAY_DEMON, f, DP_WP);
362         process_one_characteristic(creature_ptr, row + 2, col, _("悪魔 倍打 :", "Slay Demon:"), TR_KILL_DEMON, f, (DP_WP | DP_IMM));
363         process_one_characteristic(creature_ptr, row + 3, col, _("龍 倍打   :", "Slay Drag.:"), TR_SLAY_DRAGON, f, DP_WP);
364         process_one_characteristic(creature_ptr, row + 3, col, _("龍 倍打   :", "Slay Drag.:"), TR_KILL_DRAGON, f, (DP_WP | DP_IMM));
365         process_one_characteristic(creature_ptr, row + 4, col, _("人間 倍打 :", "Slay Human:"), TR_SLAY_HUMAN, f, DP_WP);
366         process_one_characteristic(creature_ptr, row + 4, col, _("人間 倍打 :", "Slay Human:"), TR_KILL_HUMAN, f, (DP_WP | DP_IMM));
367         process_one_characteristic(creature_ptr, row + 5, col, _("動物 倍打 :", "Slay Anim.:"), TR_SLAY_ANIMAL, f, DP_WP);
368         process_one_characteristic(creature_ptr, row + 5, col, _("動物 倍打 :", "Slay Anim.:"), TR_KILL_ANIMAL, f, (DP_WP | DP_IMM));
369         process_one_characteristic(creature_ptr, row + 6, col, _("オーク倍打:", "Slay Orc  :"), TR_SLAY_ORC, f, DP_WP);
370         process_one_characteristic(creature_ptr, row + 6, col, _("オーク倍打:", "Slay Orc  :"), TR_KILL_ORC, f, (DP_WP | DP_IMM));
371         process_one_characteristic(creature_ptr, row + 7, col, _("トロル倍打:", "Slay Troll:"), TR_SLAY_TROLL, f, DP_WP);
372         process_one_characteristic(creature_ptr, row + 7, col, _("トロル倍打:", "Slay Troll:"), TR_KILL_TROLL, f, (DP_WP | DP_IMM));
373         process_one_characteristic(creature_ptr, row + 8, col, _("巨人 倍打 :", "Slay Giant:"), TR_SLAY_GIANT, f, DP_WP);
374         process_one_characteristic(creature_ptr, row + 8, col, _("巨人 倍打 :", "Slay Giant:"), TR_KILL_GIANT, f, (DP_WP | DP_IMM));
375         process_one_characteristic(creature_ptr, row + 9, col, _("溶解      :", "Acid Brand:"), TR_BRAND_ACID, f, DP_WP);
376         process_one_characteristic(creature_ptr, row + 10, col, _("電撃      :", "Elec Brand:"), TR_BRAND_ELEC, f, DP_WP);
377         process_one_characteristic(creature_ptr, row + 11, col, _("焼棄      :", "Fire Brand:"), TR_BRAND_FIRE, f, DP_WP);
378         process_one_characteristic(creature_ptr, row + 12, col, _("凍結      :", "Cold Brand:"), TR_BRAND_COLD, f, DP_WP);
379         process_one_characteristic(creature_ptr, row + 13, col, _("毒殺      :", "Poison Brd:"), TR_BRAND_POIS, f, DP_WP);
380         process_one_characteristic(creature_ptr, row + 14, col, _("切れ味    :", "Sharpness :"), TR_VORPAL, f, DP_WP);
381         process_one_characteristic(creature_ptr, row + 15, col, _("地震      :", "Quake     :"), TR_IMPACT, f, DP_WP);
382         process_one_characteristic(creature_ptr, row + 16, col, _("吸血      :", "Vampiric  :"), TR_VAMPIRIC, f, DP_WP);
383         process_one_characteristic(creature_ptr, row + 17, col, _("カオス効果:", "Chaotic   :"), TR_CHAOTIC, f, DP_WP);
384         process_one_characteristic(creature_ptr, row + 18, col, _("理力      :", "Force Wep.:"), TR_FORCE_WEAPON, f, DP_WP);
385 }
386
387
388 /*!
389  * @brief ESP/能力維持の特性フラグを表示する
390  * @param creature_ptr プレーヤーへの参照ポインタ
391  * @param display_player_equippy 表示へのコールバック
392  * @param f 特性フラグへの参照ポインタ
393  * @return なし
394  */
395 static void display_esp_sustenance_info(player_type *creature_ptr, void(*display_player_equippy)(player_type*, TERM_LEN, TERM_LEN, BIT_FLAGS16), all_player_flags *f)
396 {
397         TERM_LEN row = 3;
398         TERM_LEN col = 1 + 12 + 7; // 20
399         (*display_player_equippy)(creature_ptr, row - 2, col + 13, 0);
400         c_put_str(TERM_WHITE, "abcdefghijkl@", row - 1, col + 13);
401
402         process_one_characteristic(creature_ptr, row + 0, col, _("テレパシー :", "Telepathy  :"), TR_TELEPATHY, f, 0);
403         process_one_characteristic(creature_ptr, row + 1, col, _("邪悪ESP    :", "ESP Evil   :"), TR_ESP_EVIL, f, 0);
404         process_one_characteristic(creature_ptr, row + 2, col, _("無生物ESP  :", "ESP Noliv. :"), TR_ESP_NONLIVING, f, 0);
405         process_one_characteristic(creature_ptr, row + 3, col, _("善良ESP    :", "ESP Good   :"), TR_ESP_GOOD, f, 0);
406         process_one_characteristic(creature_ptr, row + 4, col, _("不死ESP    :", "ESP Undead :"), TR_ESP_UNDEAD, f, 0);
407         process_one_characteristic(creature_ptr, row + 5, col, _("悪魔ESP    :", "ESP Demon  :"), TR_ESP_DEMON, f, 0);
408         process_one_characteristic(creature_ptr, row + 6, col, _("龍ESP      :", "ESP Dragon :"), TR_ESP_DRAGON, f, 0);
409         process_one_characteristic(creature_ptr, row + 7, col, _("人間ESP    :", "ESP Human  :"), TR_ESP_HUMAN, f, 0);
410         process_one_characteristic(creature_ptr, row + 8, col, _("動物ESP    :", "ESP Animal :"), TR_ESP_ANIMAL, f, 0);
411         process_one_characteristic(creature_ptr, row + 9, col, _("オークESP  :", "ESP Orc    :"), TR_ESP_ORC, f, 0);
412         process_one_characteristic(creature_ptr, row + 10, col, _("トロルESP  :", "ESP Troll  :"), TR_ESP_TROLL, f, 0);
413         process_one_characteristic(creature_ptr, row + 11, col, _("巨人ESP    :", "ESP Giant  :"), TR_ESP_GIANT, f, 0);
414         process_one_characteristic(creature_ptr, row + 12, col, _("ユニークESP:", "ESP Unique :"), TR_ESP_UNIQUE, f, 0);
415         process_one_characteristic(creature_ptr, row + 13, col, _("腕力維持   :", "Sust Str   :"), TR_SUST_STR, f, 0);
416         process_one_characteristic(creature_ptr, row + 14, col, _("知力維持   :", "Sust Int   :"), TR_SUST_INT, f, 0);
417         process_one_characteristic(creature_ptr, row + 15, col, _("賢さ維持   :", "Sust Wis   :"), TR_SUST_WIS, f, 0);
418         process_one_characteristic(creature_ptr, row + 16, col, _("器用維持   :", "Sust Dex   :"), TR_SUST_DEX, f, 0);
419         process_one_characteristic(creature_ptr, row + 17, col, _("耐久維持   :", "Sust Con   :"), TR_SUST_CON, f, 0);
420         process_one_characteristic(creature_ptr, row + 18, col, _("魅力維持   :", "Sust Chr   :"), TR_SUST_CHR, f, 0);
421 }
422
423
424 /*!
425  * @brief その他の特性フラグを表示する
426  * @param creature_ptr プレーヤーへの参照ポインタ
427  * @param display_player_equippy 表示へのコールバック
428  * @param f 特性フラグへの参照ポインタ
429  * @return なし
430  */
431 static void display_other_info(player_type *creature_ptr, void(*display_player_equippy)(player_type*, TERM_LEN, TERM_LEN, BIT_FLAGS16), all_player_flags *f)
432 {
433         TERM_LEN row = 3;
434         TERM_LEN col = 20 + 12 + 17;
435         (*display_player_equippy)(creature_ptr, row - 2, col + 14, 0);
436         c_put_str(TERM_WHITE, "abcdefghijkl@", row - 1, col + 14);
437
438         process_one_characteristic(creature_ptr, row + 0, col, _("追加攻撃    :", "Add Blows   :"), TR_BLOWS, f, 0);
439         process_one_characteristic(creature_ptr, row + 1, col, _("採掘        :", "Add Tunnel  :"), TR_TUNNEL, f, 0);
440         process_one_characteristic(creature_ptr, row + 2, col, _("赤外線視力  :", "Add Infra   :"), TR_INFRA, f, 0);
441         process_one_characteristic(creature_ptr, row + 3, col, _("魔法道具支配:", "Add Device  :"), TR_MAGIC_MASTERY, f, 0);
442         process_one_characteristic(creature_ptr, row + 4, col, _("隠密        :", "Add Stealth :"), TR_STEALTH, f, 0);
443         process_one_characteristic(creature_ptr, row + 5, col, _("探索        :", "Add Search  :"), TR_SEARCH, f, 0);
444
445         process_one_characteristic(creature_ptr, row + 7, col, _("乗馬        :", "Riding      :"), TR_RIDING, f, 0);
446         process_one_characteristic(creature_ptr, row + 8, col, _("投擲        :", "Throw       :"), TR_THROW, f, 0);
447         process_one_characteristic(creature_ptr, row + 9, col, _("祝福        :", "Blessed     :"), TR_BLESSED, f, 0);
448         process_one_characteristic(creature_ptr, row + 10, col, _("反テレポート:", "No Teleport :"), TR_NO_TELE, f, 0);
449         process_one_characteristic(creature_ptr, row + 11, col, _("反魔法      :", "Anti Magic  :"), TR_NO_MAGIC, f, 0);
450         process_one_characteristic(creature_ptr, row + 12, col, _("消費魔力減少:", "Econom. Mana:"), TR_DEC_MANA, f, 0);
451
452         process_one_characteristic(creature_ptr, row + 14, col, _("経験値減少  :", "Drain Exp   :"), TR_DRAIN_EXP, f, 0);
453         process_one_characteristic(creature_ptr, row + 15, col, _("乱テレポート:", "Rnd.Teleport:"), TR_TELEPORT, f, 0);
454         process_one_characteristic(creature_ptr, row + 16, col, _("反感        :", "Aggravate   :"), TR_AGGRAVATE, f, 0);
455         process_one_characteristic(creature_ptr, row + 17, col, _("太古の怨念  :", "TY Curse    :"), TR_TY_CURSE, f, 0);
456 }
457
458
459 /*!
460  * @brief プレイヤーの特性フラグ一覧表示2
461  * @param creature_ptr プレーヤーへの参照ポインタ
462  * Special display, part 2
463  * @return なし
464  */
465 void display_player_flag_info_2(player_type *creature_ptr, void(*display_player_equippy)(player_type*, TERM_LEN, TERM_LEN, BIT_FLAGS16))
466 {
467         /* Extract flags and store */
468         all_player_flags f;
469         player_flags(creature_ptr, f.player_flags);
470         tim_player_flags(creature_ptr, f.tim_player_flags);
471         player_immunity(creature_ptr, f.player_imm);
472         tim_player_immunity(creature_ptr, f.tim_player_imm);
473         known_obj_immunity(creature_ptr, f.known_obj_imm);
474         player_vulnerability_flags(creature_ptr, f.player_vuln);
475
476         display_slay_info(creature_ptr, display_player_equippy, &f);
477         display_esp_sustenance_info(creature_ptr, display_player_equippy, &f);
478         display_other_info(creature_ptr, display_player_equippy, &f);
479 }