6 * Arranged by iks 2021/04/23
9 #include "display-characteristic.h"
10 #include "flavor/flavor-util.h"
11 #include "inventory/inventory-slot-types.h"
12 #include "object-enchant/special-object-flags.h"
13 #include "object-enchant/tr-types.h"
14 #include "object-enchant/trc-types.h"
15 #include "object/object-flags.h"
16 #include "perception/object-perception.h"
17 #include "player/permanent-resistances.h"
18 #include "player/race-resistances.h"
19 #include "player/temporary-resistances.h"
20 #include "system/object-type-definition.h"
21 #include "system/player-type-definition.h"
22 #include "term/screen-processor.h"
23 #include "term/term-color-types.h"
24 #include "util/bit-flags-calculator.h"
27 #include <unordered_map>
29 struct all_player_flags {
30 TrFlags player_flags{};
31 TrFlags tim_player_flags{};
33 TrFlags tim_player_imm{};
34 TrFlags player_vuln{};
35 TrFlags known_obj_imm{};
36 TrFlags riding_flags{};
37 TrFlags riding_negative_flags{};
44 bool has_imm{}; //!< 免疫を持つ
45 bool has_res{}; //!< 耐性を持つ
46 bool has_tim{}; //!< 一時付加されている
47 bool has_vul{}; //!< 弱点を持つ
48 bool has_rid{}; //!< 乗馬に関係する
49 std::vector<std::string> syms; //!< 表示するシンボル
53 * @brief 上位の属性フラグへの変換辞書
55 static std::unordered_map<tr_type, tr_type> flag_to_greater_flag = {
56 { TR_RES_ACID, TR_IM_ACID },
57 { TR_RES_COLD, TR_IM_COLD },
58 { TR_RES_ELEC, TR_IM_ELEC },
59 { TR_RES_FIRE, TR_IM_FIRE },
60 { TR_RES_DARK, TR_IM_DARK },
61 { TR_SLAY_EVIL, TR_KILL_EVIL },
62 { TR_SLAY_GOOD, TR_KILL_GOOD },
63 { TR_SLAY_HUMAN, TR_KILL_HUMAN },
64 { TR_SLAY_ANIMAL, TR_KILL_ANIMAL },
65 { TR_SLAY_DRAGON, TR_KILL_DRAGON },
66 { TR_SLAY_ORC, TR_KILL_ORC },
67 { TR_SLAY_TROLL, TR_KILL_TROLL },
68 { TR_SLAY_GIANT, TR_KILL_GIANT },
69 { TR_SLAY_DEMON, TR_KILL_DEMON },
70 { TR_SLAY_UNDEAD, TR_KILL_UNDEAD },
74 * @brief 下位の属性フラグへの変換辞書
76 static std::unordered_map<tr_type, tr_type> flag_to_lesser_flag = {
77 { TR_RES_ACID, TR_VUL_ACID },
78 { TR_RES_COLD, TR_VUL_COLD },
79 { TR_RES_ELEC, TR_VUL_ELEC },
80 { TR_RES_FIRE, TR_VUL_FIRE },
81 { TR_RES_LITE, TR_VUL_LITE },
87 static std::array<tr_type, 6> lite_flags = {
97 * @brief 装備品の呪い状況文字列を作成する
98 * @param player_ptr プレイヤー情報への参照ポインタ
99 * @param flag 判定する特性フラグ
100 * @param f プレイヤーの特性情報への参照ポインタ
101 * @param mode 参照モード(DP_WP)
102 * @param char_stat その行の特性の状況(参照渡し)
105 static void process_cursed_equipment_characteristics(player_type *player_ptr, uint16_t mode, char_stat &char_stat)
107 int max_i = (mode & DP_WP) ? INVEN_BOW + 1 : INVEN_TOTAL;
108 for (int i = INVEN_MAIN_HAND; i < max_i; i++) {
109 auto *o_ptr = &player_ptr->inventory_list[i];
110 auto is_known = o_ptr->is_known();
111 auto is_sensed = is_known || o_ptr->ident & IDENT_SENSE;
112 auto flags = object_flags_known(o_ptr);
114 if (flags.has(TR_ADD_L_CURSE) || flags.has(TR_ADD_H_CURSE)) {
116 char_stat.syms.emplace_back("+");
117 char_stat.has_res = true;
122 if (o_ptr->curse_flags.has(TRC::PERMA_CURSE)) {
124 char_stat.syms.emplace_back("*");
125 char_stat.has_imm = true;
130 if (o_ptr->curse_flags.has_any_of({ TRC::CURSED, TRC::HEAVY_CURSE, TRC::PERMA_CURSE })) {
132 char_stat.syms.emplace_back("+");
133 char_stat.has_res = true;
138 char_stat.syms.emplace_back(".");
141 char_stat.syms.emplace_back(".");
145 * @brief 装備品の光源状況文字列を作成する
146 * @param player_ptr プレイヤー情報への参照ポインタ
147 * @param flag 判定する特性フラグ
148 * @param f プレイヤーの特性情報への参照ポインタ
149 * @param mode 参照モード(DP_WP)
150 * @param char_stat その行の特性の状況(参照渡し)
154 static void process_light_equipment_characteristics(player_type *player_ptr, all_player_flags *f, uint16_t mode, char_stat &char_stat)
156 int max_i = (mode & DP_WP) ? INVEN_BOW + 1 : INVEN_TOTAL;
157 for (int i = INVEN_MAIN_HAND; i < max_i; i++) {
158 auto *o_ptr = &player_ptr->inventory_list[i];
159 auto flags = object_flags_known(o_ptr);
162 for (auto flg : lite_flags) {
163 if (flags.has(flg)) {
169 char_stat.syms.emplace_back("+");
170 char_stat.has_res = true;
174 char_stat.syms.emplace_back(".");
177 for (auto flg : lite_flags) {
178 if (f->tim_player_flags.has(flg)) {
179 char_stat.syms.emplace_back("#");
180 char_stat.has_tim = true;
183 if (f->player_flags.has(flg)) {
184 char_stat.syms.emplace_back("+");
185 char_stat.has_res = true;
190 char_stat.syms.emplace_back(".");
194 * @brief 装備品の状況文字列を作成する
195 * @param player_ptr プレイヤー情報への参照ポインタ
196 * @param flag 判定する特性フラグ
197 * @param f プレイヤーの特性情報への参照ポインタ
198 * @param mode 参照モード(DP_WP)
199 * @param char_stat その行の特性の状況(参照渡し)
203 static void process_inventory_characteristic(player_type *player_ptr, tr_type flag, all_player_flags *f, uint16_t mode, char_stat &char_stat)
205 int max_i = (mode & DP_WP) ? INVEN_BOW + 1 : INVEN_TOTAL;
206 for (int i = INVEN_MAIN_HAND; i < max_i; i++) {
207 auto *o_ptr = &player_ptr->inventory_list[i];
208 auto flags = object_flags_known(o_ptr);
210 auto f_imm = flag_to_greater_flag.find(flag);
211 if (f_imm != flag_to_greater_flag.end()) {
212 if (flags.has(f_imm->second)) {
213 char_stat.syms.emplace_back("*");
214 char_stat.has_imm = true;
220 auto f_vul = flag_to_lesser_flag.find(flag);
221 if (f_vul != flag_to_lesser_flag.end()) {
222 if (flags.has(f_vul->second)) {
223 char_stat.has_vul = true;
228 if (flags.has(flag)) {
229 char_stat.syms.emplace_back(b_vul ? "-" : "+");
230 char_stat.has_res = true;
234 char_stat.syms.emplace_back(b_vul ? "v" : ".");
237 if (f->player_imm.has(flag) || f->tim_player_imm.has(flag)) {
238 char_stat.syms.emplace_back("*");
239 char_stat.has_imm = true;
240 } else if (f->tim_player_flags.has(flag)) {
241 char_stat.syms.emplace_back("#");
242 char_stat.has_tim = true;
244 auto b_vul = f->player_vuln.has(flag);
245 if (f->player_flags.has(flag)) {
246 char_stat.syms.emplace_back(b_vul ? "-" : "+");
247 char_stat.has_res = true;
249 char_stat.syms.emplace_back(".");
251 char_stat.has_vul = true;
257 * @brief プレイヤーの特性フラグ一種表示を処理するメインルーチン
258 * @param player_ptr プレイヤーへの参照ポインタ
259 * @param row コンソール表示位置の左上行
260 * @param col コンソール表示位置の左上列
261 * @param header コンソール上で表示する特性名
262 * @param flag1 参照する特性ID
263 * @param f プレイヤーの特性情報構造体
264 * @param mode 表示オプション
266 static void process_one_characteristic(player_type *player_ptr, TERM_LEN row, TERM_LEN col, std::string_view header, tr_type flag, all_player_flags *f, uint16_t mode)
270 if (f->riding_flags.has(flag))
271 char_stat.has_rid = true;
272 if (f->riding_negative_flags.has(flag)) {
273 char_stat.has_rid = true;
274 char_stat.has_vul = true;
278 process_light_equipment_characteristics(player_ptr, f, mode, char_stat);
279 else if (mode & DP_CURSE)
280 process_cursed_equipment_characteristics(player_ptr, mode, char_stat);
282 process_inventory_characteristic(player_ptr, flag, f, mode, char_stat);
284 if (char_stat.has_vul && !char_stat.has_imm && !char_stat.has_res && !char_stat.has_tim)
285 char_stat.syms.emplace_back("v");
287 auto row_clr = char_stat.has_rid ? TERM_L_GREEN : TERM_WHITE;
288 if (!char_stat.has_imm) {
289 if (char_stat.has_res && char_stat.has_tim)
290 row_clr = char_stat.has_vul ? TERM_YELLOW : row_clr;
291 else if (char_stat.has_res || char_stat.has_tim)
292 row_clr = char_stat.has_vul ? TERM_ORANGE : row_clr;
293 else if (char_stat.has_vul)
296 row_clr = TERM_L_DARK;
299 c_put_str(row_clr, header.data(), row, col);
300 col += header.length() + 1;
302 for (auto s : char_stat.syms) {
305 clr = char_stat.has_vul && !char_stat.has_imm ? TERM_ORANGE : TERM_YELLOW;
306 if (s == "-" && !char_stat.has_imm)
308 if (s == "." && (!char_stat.has_imm && !char_stat.has_vul))
310 c_put_str(clr, s.c_str(), row, col++);
315 * @brief プレイヤーの基本耐性を表示する
316 * @param player_ptr プレイヤーへの参照ポインタ
317 * @param display_player_equippy 表示へのコールバック
318 * @param f 特性フラグへの参照ポインタ
320 static void display_basic_resistance_info(
321 player_type *player_ptr, void (*display_player_equippy)(player_type *, TERM_LEN, TERM_LEN, BIT_FLAGS16), all_player_flags *f)
325 (*display_player_equippy)(player_ptr, row - 2, col + 8, 0);
326 c_put_str(TERM_WHITE, "abcdefghijkl@", row - 1, col + 8);
328 process_one_characteristic(player_ptr, row++, col, _("耐酸 :", "Acid :"), TR_RES_ACID, f, 0);
329 process_one_characteristic(player_ptr, row++, col, _("耐電撃:", "Elec :"), TR_RES_ELEC, f, 0);
330 process_one_characteristic(player_ptr, row++, col, _("耐火炎:", "Fire :"), TR_RES_FIRE, f, 0);
331 process_one_characteristic(player_ptr, row++, col, _("耐冷気:", "Cold :"), TR_RES_COLD, f, 0);
332 process_one_characteristic(player_ptr, row++, col, _("耐毒 :", "Poison:"), TR_RES_POIS, f, 0);
333 process_one_characteristic(player_ptr, row++, col, _("耐閃光:", "Light :"), TR_RES_LITE, f, 0);
334 process_one_characteristic(player_ptr, row++, col, _("耐暗黒:", "Dark :"), TR_RES_DARK, f, 0);
335 process_one_characteristic(player_ptr, row++, col, _("耐破片:", "Shard :"), TR_RES_SHARDS, f, 0);
336 process_one_characteristic(player_ptr, row++, col, _("耐盲目:", "Blind :"), TR_RES_BLIND, f, 0);
337 process_one_characteristic(player_ptr, row++, col, _("耐混乱:", "Conf :"), TR_RES_CONF, f, 0);
341 * @brief プレイヤーの上位耐性を表示する
342 * @param player_ptr プレイヤーへの参照ポインタ
343 * @param display_player_equippy 表示へのコールバック
344 * @param f 特性フラグへの参照ポインタ
346 static void display_advanced_resistance_info(
347 player_type *player_ptr, void (*display_player_equippy)(player_type *, TERM_LEN, TERM_LEN, BIT_FLAGS16), all_player_flags *f)
351 (*display_player_equippy)(player_ptr, row - 2, col + 8, 0);
352 c_put_str(TERM_WHITE, "abcdefghijkl@", row - 1, col + 8);
354 process_one_characteristic(player_ptr, row++, col, _("耐轟音:", "Sound :"), TR_RES_SOUND, f, 0);
355 process_one_characteristic(player_ptr, row++, col, _("耐地獄:", "Nether:"), TR_RES_NETHER, f, 0);
356 process_one_characteristic(player_ptr, row++, col, _("耐因混:", "Nexus :"), TR_RES_NEXUS, f, 0);
357 process_one_characteristic(player_ptr, row++, col, _("耐カオ:", "Chaos :"), TR_RES_CHAOS, f, 0);
358 process_one_characteristic(player_ptr, row++, col, _("耐劣化:", "Disnch:"), TR_RES_DISEN, f, 0);
359 process_one_characteristic(player_ptr, row++, col, _("耐時間:", "Time :"), TR_RES_TIME, f, 0);
360 process_one_characteristic(player_ptr, row++, col, _("耐水 :", "Water :"), TR_RES_WATER, f, 0);
361 process_one_characteristic(player_ptr, row++, col, _("耐恐怖:", "Fear :"), TR_RES_FEAR, f, 0);
362 process_one_characteristic(player_ptr, row++, col, _("耐呪力:", "ResCur:"), TR_RES_CURSE, f, 0);
366 * @brief プレイヤーのその他耐性を表示する
367 * @param player_ptr プレイヤーへの参照ポインタ
368 * @param display_player_equippy 表示へのコールバック
369 * @param f 特性フラグへの参照ポインタ
371 static void display_other_resistance_info(
372 player_type *player_ptr, void (*display_player_equippy)(player_type *, TERM_LEN, TERM_LEN, BIT_FLAGS16), all_player_flags *f)
376 (*display_player_equippy)(player_ptr, row - 2, col + 12, 0);
377 c_put_str(TERM_WHITE, "abcdefghijkl@", row - 1, col + 12);
379 process_one_characteristic(player_ptr, row++, col, _("加速 :", "Speed :"), TR_SPEED, f, 0);
380 process_one_characteristic(player_ptr, row++, col, _("耐麻痺 :", "FreeAction:"), TR_FREE_ACT, f, 0);
381 process_one_characteristic(player_ptr, row++, col, _("透明体視認:", "SeeInvisi.:"), TR_SEE_INVIS, f, 0);
382 process_one_characteristic(player_ptr, row++, col, _("経験値保持:", "Hold Exp :"), TR_HOLD_EXP, f, 0);
383 process_one_characteristic(player_ptr, row++, col, _("警告 :", "Warning :"), TR_WARNING, f, 0);
384 process_one_characteristic(player_ptr, row++, col, _("遅消化 :", "SlowDigest:"), TR_SLOW_DIGEST, f, 0);
385 process_one_characteristic(player_ptr, row++, col, _("急回復 :", "Regene. :"), TR_REGEN, f, 0);
386 process_one_characteristic(player_ptr, row++, col, _("浮遊 :", "Levitation:"), TR_LEVITATION, f, 0);
387 process_one_characteristic(player_ptr, row++, col, _("反射 :", "Reflct :"), TR_REFLECT, f, 0);
388 process_one_characteristic(player_ptr, row++, col, _("呪い :", "Cursed :"), TR_FLAG_MAX, f, DP_CURSE);
392 * @brief プレイヤーの特性フラグを集計する
393 * @param player_ptr プレイヤーへの参照ポインタ
394 * @todo 将来的には装備系とまとめたいが、乗馬による特性変化や一時能力変化等の扱いがあるので据え置き。
396 all_player_flags get_player_state_flags(player_type *player_ptr)
399 player_flags(player_ptr, f.player_flags);
400 tim_player_flags(player_ptr, f.tim_player_flags);
401 player_immunity(player_ptr, f.player_imm);
402 tim_player_immunity(player_ptr, f.tim_player_imm);
403 known_obj_immunity(player_ptr, f.known_obj_imm);
404 player_vulnerability_flags(player_ptr, f.player_vuln);
405 riding_flags(player_ptr, f.riding_flags, f.riding_negative_flags);
410 * @brief プレイヤーの特性フラグ一覧表示1
411 * @param player_ptr プレイヤーへの参照ポインタ
412 * @param display_player_equippy 表示へのコールバック
413 * Special display, part 1
415 void display_player_flag_info_1(player_type *player_ptr, void (*display_player_equippy)(player_type *, TERM_LEN, TERM_LEN, BIT_FLAGS16))
417 all_player_flags f = get_player_state_flags(player_ptr);
419 display_basic_resistance_info(player_ptr, display_player_equippy, &f);
420 display_advanced_resistance_info(player_ptr, display_player_equippy, &f);
421 display_other_resistance_info(player_ptr, display_player_equippy, &f);
425 * @brief スレイ系の特性フラグを表示する
426 * @param player_ptr プレイヤーへの参照ポインタ
427 * @param display_player_equippy 表示へのコールバック
428 * @param f 特性フラグへの参照ポインタ
430 static void display_slay_info(player_type *player_ptr, void (*display_player_equippy)(player_type *, TERM_LEN, TERM_LEN, BIT_FLAGS16), all_player_flags *f)
434 (*display_player_equippy)(player_ptr, row - 2, col + 14, DP_WP);
435 c_put_str(TERM_WHITE, "abc@", row - 1, col + 14);
437 process_one_characteristic(player_ptr, row++, col, _("邪悪 倍打:", "Slay Evil :"), TR_SLAY_EVIL, f, DP_WP);
438 process_one_characteristic(player_ptr, row++, col, _("善良 倍打:", "Slay Good :"), TR_SLAY_GOOD, f, DP_WP);
439 process_one_characteristic(player_ptr, row++, col, _("不死 倍打:", "Slay Undead :"), TR_SLAY_UNDEAD, f, DP_WP);
440 process_one_characteristic(player_ptr, row++, col, _("デーモン倍打:", "Slay Demon :"), TR_SLAY_DEMON, f, DP_WP);
441 process_one_characteristic(player_ptr, row++, col, _("ドラゴン倍打:", "Slay Dragon :"), TR_SLAY_DRAGON, f, DP_WP);
442 process_one_characteristic(player_ptr, row++, col, _("人間 倍打:", "Slay Human :"), TR_SLAY_HUMAN, f, DP_WP);
443 process_one_characteristic(player_ptr, row++, col, _("動物 倍打:", "Slay Animal :"), TR_SLAY_ANIMAL, f, DP_WP);
444 process_one_characteristic(player_ptr, row++, col, _("オーク 倍打:", "Slay Orc :"), TR_SLAY_ORC, f, DP_WP);
445 process_one_characteristic(player_ptr, row++, col, _("トロル 倍打:", "Slay Troll :"), TR_SLAY_TROLL, f, DP_WP);
446 process_one_characteristic(player_ptr, row++, col, _("巨人 倍打:", "Slay Giant :"), TR_SLAY_GIANT, f, DP_WP);
450 * @brief ブランド系の特性フラグを表示する
451 * @param player_ptr プレイヤーへの参照ポインタ
452 * @param display_player_equippy 表示へのコールバック
453 * @param f 特性フラグへの参照ポインタ
455 static void display_brand_info(player_type *player_ptr, void (*display_player_equippy)(player_type *, TERM_LEN, TERM_LEN, BIT_FLAGS16), all_player_flags *f)
459 (*display_player_equippy)(player_ptr, row - 2, col + 14, DP_WP);
460 c_put_str(TERM_WHITE, "abc@", row - 1, col + 14);
461 process_one_characteristic(player_ptr, row++, col, _("溶解 :", "Acid Brand :"), TR_BRAND_ACID, f, DP_WP);
462 process_one_characteristic(player_ptr, row++, col, _("電撃 :", "Elec Brand :"), TR_BRAND_ELEC, f, DP_WP);
463 process_one_characteristic(player_ptr, row++, col, _("焼棄 :", "Fire Brand :"), TR_BRAND_FIRE, f, DP_WP);
464 process_one_characteristic(player_ptr, row++, col, _("凍結 :", "Cold Brand :"), TR_BRAND_COLD, f, DP_WP);
465 process_one_characteristic(player_ptr, row++, col, _("毒殺 :", "Poison Brand:"), TR_BRAND_POIS, f, DP_WP);
466 process_one_characteristic(player_ptr, row++, col, _("切れ味 :", "Sharpness :"), TR_VORPAL, f, DP_WP);
467 process_one_characteristic(player_ptr, row++, col, _("強撃 :", "Impactive :"), TR_IMPACT, f, DP_WP);
468 process_one_characteristic(player_ptr, row++, col, _("地震 :", "Quake :"), TR_EARTHQUAKE, f, DP_WP);
469 process_one_characteristic(player_ptr, row++, col, _("吸血 :", "Vampiric :"), TR_VAMPIRIC, f, DP_WP);
470 process_one_characteristic(player_ptr, row++, col, _("カオス効果 :", "Chaotic :"), TR_CHAOTIC, f, DP_WP);
471 process_one_characteristic(player_ptr, row++, col, _("魔術効果 :", "Magic Brand :"), TR_BRAND_MAGIC, f, DP_WP);
472 process_one_characteristic(player_ptr, row++, col, _("理力 :", "Force Weapon:"), TR_FORCE_WEAPON, f, DP_WP);
473 process_one_characteristic(player_ptr, row++, col, _("乗馬 :", "For Riding :"), TR_RIDING, f, DP_WP);
474 process_one_characteristic(player_ptr, row++, col, _("補助 :", "Supportive :"), TR_SUPPORTIVE, f, DP_WP);
478 * @brief その他の特性フラグを表示する
479 * @param player_ptr プレイヤーへの参照ポインタ
480 * @param display_player_equippy 表示へのコールバック
481 * @param f 特性フラグへの参照ポインタ
483 static void display_tval_misc_info(
484 player_type *player_ptr, void (*display_player_equippy)(player_type *, TERM_LEN, TERM_LEN, BIT_FLAGS16), all_player_flags *f)
488 (*display_player_equippy)(player_ptr, row - 2, col + 14, 0);
489 c_put_str(TERM_WHITE, "abcdefghijkl@", row - 1, col + 14);
491 process_one_characteristic(player_ptr, row++, col, _("追加攻撃 :", "Add Blows :"), TR_BLOWS, f, 0);
492 process_one_characteristic(player_ptr, row++, col, _("採掘 :", "Add Tunnel :"), TR_TUNNEL, f, 0);
493 process_one_characteristic(player_ptr, row++, col, _("赤外線視力 :", "Add Infra :"), TR_INFRA, f, 0);
494 process_one_characteristic(player_ptr, row++, col, _("魔法道具支配:", "Add Device :"), TR_MAGIC_MASTERY, f, 0);
495 process_one_characteristic(player_ptr, row++, col, _("隠密 :", "Add Stealth :"), TR_STEALTH, f, 0);
496 process_one_characteristic(player_ptr, row++, col, _("探索 :", "Add Search :"), TR_SEARCH, f, 0);
498 process_one_characteristic(player_ptr, row++, col, _("追加射撃 :", "Extra Shots :"), TR_XTRA_SHOTS, f, 0);
499 process_one_characteristic(player_ptr, row++, col, _("投擲 :", "Throw :"), TR_THROW, f, 0);
500 process_one_characteristic(player_ptr, row++, col, _("祝福 :", "Blessed :"), TR_BLESSED, f, 0);
501 process_one_characteristic(player_ptr, row++, col, _("永遠光源 :", "Perm Lite :"), TR_LITE_1, f, DP_LITE);
502 process_one_characteristic(player_ptr, row++, col, _("消費魔力減少:", "Econom. Mana:"), TR_DEC_MANA, f, 0);
503 process_one_characteristic(player_ptr, row++, col, _("魔法難度減少:", "Easy Spell :"), TR_EASY_SPELL, f, 0);
504 process_one_characteristic(player_ptr, row++, col, _("発動 :", "Activate :"), TR_ACTIVATE, f, 0);
505 process_one_characteristic(player_ptr, row++, col, _("反魔法 :", "Anti Magic :"), TR_NO_MAGIC, f, 0);
509 * @brief ESPの特性フラグを表示する
510 * @param player_ptr プレイヤーへの参照ポインタ
511 * @param display_player_equippy 表示へのコールバック
512 * @param f 特性フラグへの参照ポインタ
514 static void display_esc_info(player_type *player_ptr, void (*display_player_equippy)(player_type *, TERM_LEN, TERM_LEN, BIT_FLAGS16), all_player_flags *f)
518 (*display_player_equippy)(player_ptr, row - 2, col + 13, 0);
519 c_put_str(TERM_WHITE, "abcdefghijkl@", row - 1, col + 13);
520 process_one_characteristic(player_ptr, row++, col, _("テレパシー :", "Telepathy :"), TR_TELEPATHY, f, 0);
521 process_one_characteristic(player_ptr, row++, col, _("邪悪 ESP:", "ESP Evil :"), TR_ESP_EVIL, f, 0);
522 process_one_characteristic(player_ptr, row++, col, _("無生物 ESP:", "ESP Noliv. :"), TR_ESP_NONLIVING, f, 0);
523 process_one_characteristic(player_ptr, row++, col, _("善良 ESP:", "ESP Good :"), TR_ESP_GOOD, f, 0);
524 process_one_characteristic(player_ptr, row++, col, _("不死 ESP:", "ESP Undead :"), TR_ESP_UNDEAD, f, 0);
525 process_one_characteristic(player_ptr, row++, col, _("デーモンESP:", "ESP Demon :"), TR_ESP_DEMON, f, 0);
526 process_one_characteristic(player_ptr, row++, col, _("ドラゴンESP:", "ESP Dragon :"), TR_ESP_DRAGON, f, 0);
527 process_one_characteristic(player_ptr, row++, col, _("人間 ESP:", "ESP Human :"), TR_ESP_HUMAN, f, 0);
528 process_one_characteristic(player_ptr, row++, col, _("動物 ESP:", "ESP Animal :"), TR_ESP_ANIMAL, f, 0);
529 process_one_characteristic(player_ptr, row++, col, _("オーク ESP:", "ESP Orc :"), TR_ESP_ORC, f, 0);
530 process_one_characteristic(player_ptr, row++, col, _("トロル ESP:", "ESP Troll :"), TR_ESP_TROLL, f, 0);
531 process_one_characteristic(player_ptr, row++, col, _("巨人 ESP:", "ESP Giant :"), TR_ESP_GIANT, f, 0);
532 process_one_characteristic(player_ptr, row++, col, _("ユニークESP:", "ESP Unique :"), TR_ESP_UNIQUE, f, 0);
537 * @brief ESP/能力維持の特性フラグを表示する
538 * @param player_ptr プレイヤーへの参照ポインタ
539 * @param display_player_equippy 表示へのコールバック
540 * @param f 特性フラグへの参照ポインタ
542 static void display_stustain_aura_info(
543 player_type *player_ptr, void (*display_player_equippy)(player_type *, TERM_LEN, TERM_LEN, BIT_FLAGS16), all_player_flags *f)
547 (*display_player_equippy)(player_ptr, row - 2, col + 12, 0);
548 c_put_str(TERM_WHITE, "abcdefghijkl@", row - 1, col + 12);
550 process_one_characteristic(player_ptr, row++, col, _("腕力 維持:", "Sust Str :"), TR_SUST_STR, f, 0);
551 process_one_characteristic(player_ptr, row++, col, _("知力 維持:", "Sust Int :"), TR_SUST_INT, f, 0);
552 process_one_characteristic(player_ptr, row++, col, _("賢さ 維持:", "Sust Wis :"), TR_SUST_WIS, f, 0);
553 process_one_characteristic(player_ptr, row++, col, _("器用 維持:", "Sust Dex :"), TR_SUST_DEX, f, 0);
554 process_one_characteristic(player_ptr, row++, col, _("耐久力維持:", "Sust Con :"), TR_SUST_CON, f, 0);
555 process_one_characteristic(player_ptr, row++, col, _("魅力 維持:", "Sust Chr :"), TR_SUST_CHR, f, 0);
557 process_one_characteristic(player_ptr, row++, col, _("火炎オーラ:", "Aura Fire :"), TR_SH_FIRE, f, 0);
558 process_one_characteristic(player_ptr, row++, col, _("電気オーラ:", "Aura Elec :"), TR_SH_ELEC, f, 0);
559 process_one_characteristic(player_ptr, row++, col, _("冷気オーラ:", "Aura Cold :"), TR_SH_COLD, f, 0);
560 process_one_characteristic(player_ptr, row++, col, _("射撃無効 :", "Invl Arrow:"), TR_INVULN_ARROW, f, 0);
564 * @brief その他の特性フラグを表示する
565 * @param player_ptr プレイヤーへの参照ポインタ
566 * @param display_player_equippy 表示へのコールバック
567 * @param f 特性フラグへの参照ポインタ
569 static void display_curse_info(player_type *player_ptr, void (*display_player_equippy)(player_type *, TERM_LEN, TERM_LEN, BIT_FLAGS16), all_player_flags *f)
573 (*display_player_equippy)(player_ptr, row - 2, col + 14, 0);
574 c_put_str(TERM_WHITE, "abcdefghijkl@", row - 1, col + 14);
576 process_one_characteristic(player_ptr, row++, col, _("太古の怨念 :", "TY Curse :"), TR_TY_CURSE, f, 0);
577 process_one_characteristic(player_ptr, row++, col, _("反感 :", "Aggravate :"), TR_AGGRAVATE, f, 0);
578 process_one_characteristic(player_ptr, row++, col, _("弱い呪い増殖:", "Add Curse :"), TR_ADD_L_CURSE, f, 0);
579 process_one_characteristic(player_ptr, row++, col, _("強い呪い増殖:", "AddHeavyCur.:"), TR_ADD_H_CURSE, f, 0);
580 process_one_characteristic(player_ptr, row++, col, _("経験値減少 :", "Drain Exp :"), TR_DRAIN_EXP, f, 0);
581 process_one_characteristic(player_ptr, row++, col, _("体力吸収 :", "Drain HP :"), TR_DRAIN_HP, f, 0);
582 process_one_characteristic(player_ptr, row++, col, _("魔力吸収 :", "Drain Mana :"), TR_DRAIN_MANA, f, 0);
583 process_one_characteristic(player_ptr, row++, col, _("反テレポート:", "No Teleport :"), TR_NO_TELE, f, 0);
584 process_one_characteristic(player_ptr, row++, col, _("魔法防御半減:", "Vuln. Magic :"), TR_DOWN_SAVING, f, 0);
585 process_one_characteristic(player_ptr, row++, col, _("速消化 :", "Fast Digest :"), TR_FAST_DIGEST, f, 0);
586 process_one_characteristic(player_ptr, row++, col, _("回復力低下 :", "Slow Regen :"), TR_SLOW_REGEN, f, 0);
587 process_one_characteristic(player_ptr, row++, col, _("恐怖発生 :", "Cowardice :"), TR_COWARDICE, f, 0);
588 process_one_characteristic(player_ptr, row++, col, _("魔法難度増加:", "Dfclt. Spell:"), TR_HARD_SPELL, f, 0);
589 process_one_characteristic(player_ptr, row++, col, _("打撃力低下 :", "Low Melee :"), TR_LOW_MELEE, f, 0);
590 process_one_characteristic(player_ptr, row++, col, _("AC低下 :", "Low AC :"), TR_LOW_AC, f, 0);
591 process_one_characteristic(player_ptr, row++, col, _("狂戦士化 :", "Berserk Rage:"), TR_BERS_RAGE, f, 0);
595 * @brief プレイヤーの特性フラグ一覧表示2
596 * @param player_ptr プレイヤーへの参照ポインタ
597 * Special display, part 2
599 void display_player_flag_info_2(player_type *player_ptr, void (*display_player_equippy)(player_type *, TERM_LEN, TERM_LEN, BIT_FLAGS16))
601 /* Extract flags and store */
602 all_player_flags f = get_player_state_flags(player_ptr);
604 display_slay_info(player_ptr, display_player_equippy, &f);
605 display_esc_info(player_ptr, display_player_equippy, &f);
606 display_tval_misc_info(player_ptr, display_player_equippy, &f);
610 * @brief プレイヤーの特性フラグ一覧表示3
611 * @param player_ptr プレイヤーへの参照ポインタ
612 * Special display, part 3
614 void display_player_flag_info_3(player_type *player_ptr, void (*display_player_equippy)(player_type *, TERM_LEN, TERM_LEN, BIT_FLAGS16))
616 /* Extract flags and store */
617 all_player_flags f = get_player_state_flags(player_ptr);
619 display_brand_info(player_ptr, display_player_equippy, &f);
620 display_stustain_aura_info(player_ptr, display_player_equippy, &f);
621 display_curse_info(player_ptr, display_player_equippy, &f);