OSDN Git Service

Merge pull request #911 from habu1010/feature/screen-image-memory-stack
[hengbandforosx/hengbandosx.git] / src / player / player-status-flags.cpp
1 #include "player/player-status-flags.h"
2 #include "artifact/fixed-art-types.h"
3 #include "grid/grid.h"
4 #include "inventory/inventory-slot-types.h"
5 #include "mind/mind-elementalist.h"
6 #include "monster-race/monster-race.h"
7 #include "monster-race/race-flags2.h"
8 #include "monster-race/race-flags7.h"
9 #include "mutation/mutation-flag-types.h"
10 #include "object-enchant/object-ego.h"
11 #include "object-enchant/tr-types.h"
12 #include "object-enchant/trc-types.h"
13 #include "object-hook/hook-checker.h"
14 #include "object-hook/hook-weapon.h"
15 #include "object/object-flags.h"
16 #include "player-status/player-basic-statistics.h"
17 #include "player-status/player-infravision.h"
18 #include "player-status/player-speed.h"
19 #include "player-status/player-stealth.h"
20 #include "player/attack-defense-types.h"
21 #include "player/mimic-info-table.h"
22 #include "player/player-class.h"
23 #include "player/player-race-types.h"
24 #include "player/player-race.h"
25 #include "player/player-skill.h"
26 #include "player/player-status.h"
27 #include "player/race-info-table.h"
28 #include "player/special-defense-types.h"
29 #include "realm/realm-hex-numbers.h"
30 #include "realm/realm-song-numbers.h"
31 #include "realm/realm-types.h"
32 #include "spell-realm/spells-hex.h"
33 #include "sv-definition/sv-weapon-types.h"
34 #include "system/floor-type-definition.h"
35 #include "system/monster-race-definition.h"
36 #include "system/monster-type-definition.h"
37 #include "system/object-type-definition.h"
38 #include "system/player-type-definition.h"
39 #include "util/bit-flags-calculator.h"
40 #include "util/quarks.h"
41 #include "util/string-processor.h"
42
43 BIT_FLAGS convert_inventory_slot_type_to_flag_cause(inventory_slot_type inventory_slot)
44 {
45     switch (inventory_slot) {
46     case INVEN_MAIN_HAND:
47         return FLAG_CAUSE_INVEN_MAIN_HAND;
48     case INVEN_SUB_HAND:
49         return FLAG_CAUSE_INVEN_SUB_HAND;
50     case INVEN_BOW:
51         return FLAG_CAUSE_INVEN_BOW;
52     case INVEN_MAIN_RING:
53         return FLAG_CAUSE_INVEN_MAIN_RING;
54     case INVEN_SUB_RING:
55         return FLAG_CAUSE_INVEN_SUB_RING;
56     case INVEN_NECK:
57         return FLAG_CAUSE_INVEN_NECK;
58     case INVEN_LITE:
59         return FLAG_CAUSE_INVEN_LITE;
60     case INVEN_BODY:
61         return FLAG_CAUSE_INVEN_BODY;
62     case INVEN_OUTER:
63         return FLAG_CAUSE_INVEN_OUTER;
64     case INVEN_HEAD:
65         return FLAG_CAUSE_INVEN_HEAD;
66     case INVEN_ARMS:
67         return FLAG_CAUSE_INVEN_ARMS;
68     case INVEN_FEET:
69         return FLAG_CAUSE_INVEN_FEET;
70
71     default:
72         return 0;
73     }
74 }
75
76 /*!
77  * @brief 装備による所定の特性フラグを得ているかを一括して取得する関数。
78  */
79 BIT_FLAGS check_equipment_flags(player_type *creature_ptr, tr_type tr_flag)
80 {
81     object_type *o_ptr;
82     BIT_FLAGS flgs[TR_FLAG_SIZE];
83     BIT_FLAGS result = 0L;
84     for (int i = INVEN_MAIN_HAND; i < INVEN_TOTAL; i++) {
85         o_ptr = &creature_ptr->inventory_list[i];
86         if (!o_ptr->k_idx)
87             continue;
88
89         object_flags(creature_ptr, o_ptr, flgs);
90
91         if (has_flag(flgs, tr_flag))
92             set_bits(result, convert_inventory_slot_type_to_flag_cause(static_cast<inventory_slot_type>(i)));
93     }
94     return result;
95 }
96
97 BIT_FLAGS player_flags_brand_pois(player_type *creature_ptr)
98 {
99     BIT_FLAGS result = check_equipment_flags(creature_ptr, TR_BRAND_POIS);
100
101     if (creature_ptr->special_attack & ATTACK_POIS)
102         set_bits(result, FLAG_CAUSE_MAGIC_TIME_EFFECT);
103
104     return result;
105 }
106
107 BIT_FLAGS player_flags_brand_acid(player_type *creature_ptr)
108 {
109     BIT_FLAGS result = check_equipment_flags(creature_ptr, TR_BRAND_ACID);
110
111     if (creature_ptr->special_attack & ATTACK_ACID)
112         set_bits(result, FLAG_CAUSE_MAGIC_TIME_EFFECT);
113
114     return result;
115 }
116
117 BIT_FLAGS player_flags_brand_elec(player_type *creature_ptr)
118 {
119     BIT_FLAGS result = check_equipment_flags(creature_ptr, TR_BRAND_ELEC);
120
121     if (creature_ptr->special_attack & ATTACK_ELEC)
122         set_bits(result, FLAG_CAUSE_MAGIC_TIME_EFFECT);
123
124     return result;
125 }
126
127 BIT_FLAGS player_flags_brand_fire(player_type *creature_ptr)
128 {
129     BIT_FLAGS result = check_equipment_flags(creature_ptr, TR_BRAND_FIRE);
130
131     if (creature_ptr->special_attack & ATTACK_FIRE)
132         set_bits(result, FLAG_CAUSE_MAGIC_TIME_EFFECT);
133
134     return result;
135 }
136
137 BIT_FLAGS player_flags_brand_cold(player_type *creature_ptr)
138 {
139     BIT_FLAGS result = check_equipment_flags(creature_ptr, TR_BRAND_COLD);
140
141     if (creature_ptr->special_attack & ATTACK_COLD)
142         set_bits(result, FLAG_CAUSE_MAGIC_TIME_EFFECT);
143
144     return result;
145 }
146
147 /*!
148  * @brief プレイヤーの所持するフラグのうち、tr_flagに対応するものを返す
149  * @param creature_ptr 判定対象のクリーチャー参照ポインタ
150  * @param tr_flag 要求する装備フラグ
151  */
152 BIT_FLAGS get_player_flags(player_type *creature_ptr, tr_type tr_flag)
153 {
154     switch (tr_flag) {
155     case TR_STR:
156         return PlayerStrength(creature_ptr).get_all_flags();
157     case TR_INT:
158         return PlayerIntelligence(creature_ptr).get_all_flags();
159     case TR_WIS:
160         return PlayerWisdom(creature_ptr).get_all_flags();
161     case TR_DEX:
162         return PlayerDextarity(creature_ptr).get_all_flags();
163     case TR_CON:
164         return PlayerConstitution(creature_ptr).get_all_flags();
165     case TR_CHR:
166         return PlayerCharisma(creature_ptr).get_all_flags();
167     case TR_MAGIC_MASTERY:
168         return has_magic_mastery(creature_ptr);
169     case TR_FORCE_WEAPON:
170         return check_equipment_flags(creature_ptr, tr_flag);
171     case TR_STEALTH:
172         return PlayerStealth(creature_ptr).get_all_flags();
173     case TR_SEARCH:
174         return 0;
175     case TR_INFRA:
176         return PlayerInfravision(creature_ptr).get_all_flags();
177     case TR_TUNNEL:
178         return 0;
179     case TR_SPEED:
180         return PlayerSpeed(creature_ptr).get_all_flags();
181     case TR_BLOWS:
182         return 0;
183     case TR_CHAOTIC:
184     case TR_VAMPIRIC:
185     case TR_SLAY_ANIMAL:
186     case TR_SLAY_EVIL:
187     case TR_SLAY_UNDEAD:
188     case TR_SLAY_DEMON:
189     case TR_SLAY_ORC:
190     case TR_SLAY_TROLL:
191     case TR_SLAY_GIANT:
192     case TR_SLAY_DRAGON:
193     case TR_KILL_DRAGON:
194     case TR_VORPAL:
195         return check_equipment_flags(creature_ptr, tr_flag);
196     case TR_EARTHQUAKE:
197         return has_earthquake(creature_ptr);
198     case TR_BRAND_POIS:
199         return player_flags_brand_pois(creature_ptr);
200     case TR_BRAND_ACID:
201         return player_flags_brand_acid(creature_ptr);
202     case TR_BRAND_ELEC:
203         return player_flags_brand_elec(creature_ptr);
204     case TR_BRAND_FIRE:
205         return player_flags_brand_fire(creature_ptr);
206     case TR_BRAND_COLD:
207         return player_flags_brand_cold(creature_ptr);
208
209     case TR_SUST_STR:
210         return has_sustain_str(creature_ptr);
211     case TR_SUST_INT:
212         return has_sustain_int(creature_ptr);
213     case TR_SUST_WIS:
214         return has_sustain_wis(creature_ptr);
215     case TR_SUST_DEX:
216         return has_sustain_dex(creature_ptr);
217     case TR_SUST_CON:
218         return has_sustain_con(creature_ptr);
219     case TR_SUST_CHR:
220         return has_sustain_chr(creature_ptr);
221     case TR_RIDING:
222         return check_equipment_flags(creature_ptr, tr_flag);
223     case TR_EASY_SPELL:
224         return has_easy_spell(creature_ptr);
225     case TR_IM_ACID:
226         return has_immune_acid(creature_ptr);
227     case TR_IM_ELEC:
228         return has_immune_elec(creature_ptr);
229     case TR_IM_FIRE:
230         return has_immune_fire(creature_ptr);
231     case TR_IM_COLD:
232         return has_immune_cold(creature_ptr);
233     case TR_THROW:
234         return check_equipment_flags(creature_ptr, tr_flag);
235     case TR_REFLECT:
236         return has_reflect(creature_ptr);
237     case TR_FREE_ACT:
238         return has_free_act(creature_ptr);
239     case TR_HOLD_EXP:
240         return has_hold_exp(creature_ptr);
241     case TR_RES_ACID:
242         return has_resist_acid(creature_ptr);
243     case TR_RES_ELEC:
244         return has_resist_elec(creature_ptr);
245     case TR_RES_FIRE:
246         return has_resist_fire(creature_ptr);
247     case TR_RES_COLD:
248         return has_resist_cold(creature_ptr);
249     case TR_RES_POIS:
250         return has_resist_pois(creature_ptr);
251     case TR_RES_FEAR:
252         return has_resist_fear(creature_ptr);
253     case TR_RES_LITE:
254         return has_resist_lite(creature_ptr);
255     case TR_RES_DARK:
256         return has_resist_dark(creature_ptr);
257     case TR_RES_BLIND:
258         return has_resist_blind(creature_ptr);
259     case TR_RES_CONF:
260         return has_resist_conf(creature_ptr);
261     case TR_RES_SOUND:
262         return has_resist_sound(creature_ptr);
263     case TR_RES_SHARDS:
264         return has_resist_shard(creature_ptr);
265     case TR_RES_NETHER:
266         return has_resist_neth(creature_ptr);
267     case TR_RES_NEXUS:
268         return has_resist_nexus(creature_ptr);
269     case TR_RES_CHAOS:
270         return has_resist_chaos(creature_ptr);
271     case TR_RES_DISEN:
272         return has_resist_disen(creature_ptr);
273     case TR_RES_TIME:
274         return has_resist_time(creature_ptr);
275     case TR_RES_WATER:
276         return has_resist_water(creature_ptr);
277     case TR_RES_CURSE:
278         return has_resist_curse(creature_ptr);
279
280     case TR_SH_FIRE:
281         return has_sh_fire(creature_ptr);
282     case TR_SH_ELEC:
283         return has_sh_elec(creature_ptr);
284     case TR_SLAY_HUMAN:
285         return check_equipment_flags(creature_ptr, tr_flag);
286     case TR_SH_COLD:
287         return has_sh_cold(creature_ptr);
288     case TR_NO_TELE:
289         return has_anti_tele(creature_ptr);
290     case TR_NO_MAGIC:
291         return has_anti_magic(creature_ptr);
292     case TR_DEC_MANA:
293         return has_dec_mana(creature_ptr);
294     case TR_TY_CURSE:
295         return check_equipment_flags(creature_ptr, tr_flag);
296     case TR_WARNING:
297         return has_warning(creature_ptr);
298     case TR_HIDE_TYPE:
299     case TR_SHOW_MODS:
300     case TR_SLAY_GOOD:
301         return check_equipment_flags(creature_ptr, tr_flag);
302     case TR_LEVITATION:
303         return has_levitation(creature_ptr);
304     case TR_LITE_1:
305         return has_lite(creature_ptr);
306     case TR_SEE_INVIS:
307         return has_see_inv(creature_ptr);
308     case TR_TELEPATHY:
309         return has_esp_telepathy(creature_ptr);
310     case TR_SLOW_DIGEST:
311         return has_slow_digest(creature_ptr);
312     case TR_REGEN:
313         return has_regenerate(creature_ptr);
314     case TR_XTRA_MIGHT:
315         return has_xtra_might(creature_ptr);
316     case TR_XTRA_SHOTS:
317     case TR_IGNORE_ACID:
318     case TR_IGNORE_ELEC:
319     case TR_IGNORE_FIRE:
320     case TR_IGNORE_COLD:
321     case TR_ACTIVATE:
322     case TR_DRAIN_EXP:
323     case TR_TELEPORT:
324         return check_equipment_flags(creature_ptr, tr_flag);
325     case TR_AGGRAVATE:
326         return 0;
327     case TR_BLESSED:
328         return has_bless_blade(creature_ptr);
329     case TR_ES_ATTACK:
330     case TR_ES_AC:
331     case TR_KILL_GOOD:
332     case TR_KILL_ANIMAL:
333     case TR_KILL_EVIL:
334     case TR_KILL_UNDEAD:
335     case TR_KILL_DEMON:
336     case TR_KILL_ORC:
337     case TR_KILL_TROLL:
338     case TR_KILL_GIANT:
339     case TR_KILL_HUMAN:
340         return check_equipment_flags(creature_ptr, tr_flag);
341     case TR_ESP_ANIMAL:
342         return has_esp_animal(creature_ptr);
343     case TR_ESP_UNDEAD:
344         return has_esp_undead(creature_ptr);
345     case TR_ESP_DEMON:
346         return has_esp_demon(creature_ptr);
347     case TR_ESP_ORC:
348         return has_esp_orc(creature_ptr);
349     case TR_ESP_TROLL:
350         return has_esp_troll(creature_ptr);
351     case TR_ESP_GIANT:
352         return has_esp_giant(creature_ptr);
353     case TR_ESP_DRAGON:
354         return has_esp_dragon(creature_ptr);
355     case TR_ESP_HUMAN:
356         return has_esp_human(creature_ptr);
357     case TR_ESP_EVIL:
358         return has_esp_evil(creature_ptr);
359     case TR_ESP_GOOD:
360         return has_esp_good(creature_ptr);
361     case TR_ESP_NONLIVING:
362         return has_esp_nonliving(creature_ptr);
363     case TR_ESP_UNIQUE:
364         return has_esp_unique(creature_ptr);
365     case TR_FULL_NAME:
366     case TR_FIXED_FLAVOR:
367     case TR_ADD_L_CURSE:
368     case TR_ADD_H_CURSE:
369     case TR_DRAIN_HP:
370     case TR_DRAIN_MANA:
371     case TR_LITE_2:
372     case TR_LITE_3:
373     case TR_LITE_M1:
374     case TR_LITE_M2:
375     case TR_LITE_M3:
376     case TR_LITE_FUEL:
377     case TR_CALL_ANIMAL:
378     case TR_CALL_DEMON:
379     case TR_CALL_DRAGON:
380     case TR_CALL_UNDEAD:
381     case TR_COWARDICE:
382     case TR_LOW_MELEE:
383     case TR_LOW_AC:
384     case TR_HARD_SPELL:
385     case TR_FAST_DIGEST:
386     case TR_SLOW_REGEN:
387         return check_equipment_flags(creature_ptr, tr_flag);
388     case TR_MIGHTY_THROW:
389         return has_mighty_throw(creature_ptr);
390     case TR_EASY2_WEAPON:
391         return has_easy2_weapon(creature_ptr);
392     case TR_DOWN_SAVING:
393         return has_down_saving(creature_ptr);
394     case TR_NO_AC:
395         return has_no_ac(creature_ptr);
396     case TR_HEAVY_SPELL:
397         return has_heavy_spell(creature_ptr);
398     case TR_INVULN_ARROW:
399         return has_invuln_arrow(creature_ptr);
400     case TR_DARK_SOURCE:
401     case TR_SUPPORTIVE:
402     case TR_BERS_RAGE:
403     case TR_BRAND_MAGIC:
404         return check_equipment_flags(creature_ptr, tr_flag);
405     case TR_IMPACT:
406         return has_impact(creature_ptr);
407     case TR_VUL_ACID:
408         return has_vuln_acid(creature_ptr);
409     case TR_VUL_COLD:
410         return has_vuln_cold(creature_ptr);
411     case TR_VUL_ELEC:
412         return has_vuln_elec(creature_ptr);
413     case TR_VUL_FIRE:
414         return has_vuln_fire(creature_ptr);
415     case TR_VUL_LITE:
416         return has_vuln_lite(creature_ptr);
417     case TR_IM_DARK:
418         return has_immune_dark(creature_ptr);
419
420     case TR_FLAG_MAX:
421         break;
422     }
423     return 0;
424 }
425
426 /*!
427  * @brief クリーチャーが壁破壊進行を持っているかを返す。
428  */
429 bool has_kill_wall(player_type *creature_ptr)
430 {
431     if (creature_ptr->mimic_form == MIMIC_DEMON_LORD || music_singing(creature_ptr, MUSIC_WALL)) {
432         return TRUE;
433     }
434
435     if (creature_ptr->riding) {
436         monster_type *riding_m_ptr = &creature_ptr->current_floor_ptr->m_list[creature_ptr->riding];
437         monster_race *riding_r_ptr = &r_info[riding_m_ptr->r_idx];
438         if (riding_r_ptr->flags2 & RF2_KILL_WALL)
439             return TRUE;
440     }
441
442     return FALSE;
443 }
444
445 /*!
446  * @brief クリーチャーが壁通過を持っているかを返す。
447  * @param creature_ptr 判定対象のクリーチャー参照ポインタ
448  * @return 持っていたらTRUE
449  * @details
450  * * 時限で幽体化、壁抜けをもつか種族幽霊ならばひとまずTRUE。
451  * * 但し騎乗中は乗騎が壁抜けを持っていなければ不能になる。
452  */
453 bool has_pass_wall(player_type *creature_ptr)
454 {
455     bool pow = FALSE;
456
457     if (creature_ptr->wraith_form || creature_ptr->tim_pass_wall || (!creature_ptr->mimic_form && creature_ptr->prace == RACE_SPECTRE)) {
458         pow = TRUE;
459     }
460
461     if (creature_ptr->riding) {
462         monster_type *riding_m_ptr = &creature_ptr->current_floor_ptr->m_list[creature_ptr->riding];
463         monster_race *riding_r_ptr = &r_info[riding_m_ptr->r_idx];
464         if (!(riding_r_ptr->flags2 & RF2_PASS_WALL))
465             pow = FALSE;
466     }
467
468     return pow;
469 }
470
471 /*!
472  * @brief クリーチャーが強力射を持っているかを返す。
473  * @param creature_ptr 判定対象のクリーチャー参照ポインタ
474  * @return 持っていたら所持前提ビットフラグを返す。
475  */
476 BIT_FLAGS has_xtra_might(player_type *creature_ptr)
477 {
478     BIT_FLAGS result = 0L;
479     result |= check_equipment_flags(creature_ptr, TR_XTRA_MIGHT);
480     return result;
481 }
482
483 /*!
484  * @brief クリーチャーが邪悪感知を持っているかを返す。
485  * @param creature_ptr 判定対象のクリーチャー参照ポインタ
486  * @return 持っていたら所持前提ビットフラグを返す。
487  */
488 BIT_FLAGS has_esp_evil(player_type *creature_ptr)
489 {
490     BIT_FLAGS result = 0L;
491     if (creature_ptr->realm1 == REALM_HEX) {
492         if (hex_spelling(creature_ptr, HEX_DETECT_EVIL))
493             result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
494     }
495     result |= check_equipment_flags(creature_ptr, TR_ESP_EVIL);
496     return result;
497 }
498
499 /*!
500  * @brief クリーチャーが自然界の動物感知を持っているかを返す。
501  * @param creature_ptr 判定対象のクリーチャー参照ポインタ
502  * @return 持っていたら所持前提ビットフラグを返す。
503  */
504 BIT_FLAGS has_esp_animal(player_type *creature_ptr)
505 {
506     return check_equipment_flags(creature_ptr, TR_ESP_ANIMAL);
507 }
508
509 /*!
510  * @brief クリーチャーがアンデッド感知を持っているかを返す。
511  * @param creature_ptr 判定対象のクリーチャー参照ポインタ
512  * @return 持っていたら所持前提ビットフラグを返す。
513  */
514 BIT_FLAGS has_esp_undead(player_type *creature_ptr)
515 {
516     return check_equipment_flags(creature_ptr, TR_ESP_UNDEAD);
517 }
518
519 /*!
520  * @brief クリーチャーが悪魔感知を持っているかを返す。
521  * @param creature_ptr 判定対象のクリーチャー参照ポインタ
522  * @return 持っていたら所持前提ビットフラグを返す。
523  */
524 BIT_FLAGS has_esp_demon(player_type *creature_ptr)
525 {
526     return check_equipment_flags(creature_ptr, TR_ESP_DEMON);
527 }
528
529 /*!
530  * @brief クリーチャーがオーク感知を持っているかを返す。
531  * @param creature_ptr 判定対象のクリーチャー参照ポインタ
532  * @return 持っていたら所持前提ビットフラグを返す。
533  */
534 BIT_FLAGS has_esp_orc(player_type *creature_ptr)
535 {
536     return check_equipment_flags(creature_ptr, TR_ESP_ORC);
537 }
538
539 /*!
540  * @brief クリーチャーがトロル感知を持っているかを返す。
541  * @param creature_ptr 判定対象のクリーチャー参照ポインタ
542  * @return 持っていたら所持前提ビットフラグを返す。
543  */
544 BIT_FLAGS has_esp_troll(player_type *creature_ptr)
545 {
546     return check_equipment_flags(creature_ptr, TR_ESP_TROLL);
547 }
548
549 /*!
550  * @brief クリーチャーが巨人感知を持っているかを返す。
551  * @param creature_ptr 判定対象のクリーチャー参照ポインタ
552  * @return 持っていたら所持前提ビットフラグを返す。
553  */
554 BIT_FLAGS has_esp_giant(player_type *creature_ptr)
555 {
556     return check_equipment_flags(creature_ptr, TR_ESP_GIANT);
557 }
558
559 /*!
560  * @brief クリーチャーがドラゴン感知を持っているかを返す。
561  * @param creature_ptr 判定対象のクリーチャー参照ポインタ
562  * @return 持っていたら所持前提ビットフラグを返す。
563  */
564 BIT_FLAGS has_esp_dragon(player_type *creature_ptr)
565 {
566     return check_equipment_flags(creature_ptr, TR_ESP_DRAGON);
567 }
568
569 /*!
570  * @brief クリーチャーが人間感知を持っているかを返す。
571  * @param creature_ptr 判定対象のクリーチャー参照ポインタ
572  * @return 持っていたら所持前提ビットフラグを返す。
573  */
574 BIT_FLAGS has_esp_human(player_type *creature_ptr)
575 {
576     return check_equipment_flags(creature_ptr, TR_ESP_HUMAN);
577 }
578
579 /*!
580  * @brief クリーチャーが善良感知を持っているかを返す。
581  * @param creature_ptr 判定対象のクリーチャー参照ポインタ
582  * @return 持っていたら所持前提ビットフラグを返す。
583  */
584 BIT_FLAGS has_esp_good(player_type *creature_ptr)
585 {
586     return check_equipment_flags(creature_ptr, TR_ESP_GOOD);
587 }
588
589 /*!
590  * @brief クリーチャーが無生物感知を持っているかを返す。
591  * @param creature_ptr 判定対象のクリーチャー参照ポインタ
592  * @return 持っていたら所持前提ビットフラグを返す。
593  */
594 BIT_FLAGS has_esp_nonliving(player_type *creature_ptr)
595 {
596     return check_equipment_flags(creature_ptr, TR_ESP_NONLIVING);
597 }
598
599 /*!
600  * @brief クリーチャーがユニーク感知を持っているかを返す。
601  * @param creature_ptr 判定対象のクリーチャー参照ポインタ
602  * @return 持っていたら所持前提ビットフラグを返す。
603  */
604 BIT_FLAGS has_esp_unique(player_type *creature_ptr)
605 {
606     return check_equipment_flags(creature_ptr, TR_ESP_UNIQUE);
607 }
608
609 /*!
610  * @brief クリーチャーがテレパシーを持っているかを返す。
611  * @param creature_ptr 判定対象のクリーチャー参照ポインタ
612  * @return 持っていたら所持前提ビットフラグを返す。
613  */
614 BIT_FLAGS has_esp_telepathy(player_type *creature_ptr)
615 {
616     BIT_FLAGS result = 0L;
617
618     if (is_time_limit_esp(creature_ptr) || creature_ptr->ult_res) {
619         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
620     }
621     if (creature_ptr->special_defense & KATA_MUSOU) {
622         result |= FLAG_CAUSE_BATTLE_FORM;
623     }
624
625     if (creature_ptr->muta.has(MUTA::ESP)) {
626         result |= FLAG_CAUSE_MUTATION;
627     }
628
629     if (player_race_has_flag(creature_ptr, TR_TELEPATHY))
630         result |= FLAG_CAUSE_RACE;
631
632     if (creature_ptr->pclass == CLASS_MINDCRAFTER && creature_ptr->lev > 39)
633         result |= FLAG_CAUSE_CLASS;
634
635     result |= check_equipment_flags(creature_ptr, TR_TELEPATHY);
636     return result;
637 }
638
639 BIT_FLAGS has_bless_blade(player_type *creature_ptr)
640 {
641     return check_equipment_flags(creature_ptr, TR_BLESSED);
642 }
643
644 BIT_FLAGS has_easy2_weapon(player_type *creature_ptr)
645 {
646     return check_equipment_flags(creature_ptr, TR_EASY2_WEAPON);
647 }
648
649 BIT_FLAGS has_down_saving(player_type *creature_ptr)
650 {
651     return check_equipment_flags(creature_ptr, TR_DOWN_SAVING);
652 }
653
654 BIT_FLAGS has_no_ac(player_type *creature_ptr)
655 {
656     return check_equipment_flags(creature_ptr, TR_NO_AC);
657 }
658
659 BIT_FLAGS has_invuln_arrow(player_type *creature_ptr)
660 {
661     BIT_FLAGS result = 0L;
662     if (creature_ptr->blind)
663         return result;
664     result |= check_equipment_flags(creature_ptr, TR_INVULN_ARROW);
665     return result;
666 }
667
668 void check_no_flowed(player_type *creature_ptr)
669 {
670     object_type *o_ptr;
671     bool has_sw = FALSE, has_kabe = FALSE;
672     OBJECT_IDX this_o_idx, next_o_idx = 0;
673
674     creature_ptr->no_flowed = FALSE;
675
676     if (has_pass_wall(creature_ptr) && !has_kill_wall(creature_ptr)) {
677         creature_ptr->no_flowed = TRUE;
678         return;
679     }
680
681     if (!creature_ptr->realm1) {
682         creature_ptr->no_flowed = FALSE;
683         return;
684     }
685
686     for (int i = 0; i < INVEN_PACK; i++) {
687         if ((creature_ptr->inventory_list[i].tval == TV_NATURE_BOOK) && (creature_ptr->inventory_list[i].sval == 2))
688             has_sw = TRUE;
689         if ((creature_ptr->inventory_list[i].tval == TV_CRAFT_BOOK) && (creature_ptr->inventory_list[i].sval == 2))
690             has_kabe = TRUE;
691     }
692
693     for (this_o_idx = creature_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x].o_idx; this_o_idx; this_o_idx = next_o_idx) {
694         o_ptr = &creature_ptr->current_floor_ptr->o_list[this_o_idx];
695         next_o_idx = o_ptr->next_o_idx;
696
697         if ((o_ptr->tval == TV_NATURE_BOOK) && (o_ptr->sval == 2))
698             has_sw = TRUE;
699         if ((o_ptr->tval == TV_CRAFT_BOOK) && (o_ptr->sval == 2))
700             has_kabe = TRUE;
701     }
702
703     if (has_sw && ((creature_ptr->realm1 == REALM_NATURE) || (creature_ptr->realm2 == REALM_NATURE) || (creature_ptr->pclass == CLASS_SORCERER))) {
704         const magic_type *s_ptr = &mp_ptr->info[REALM_NATURE - 1][SPELL_SW];
705         if (creature_ptr->lev >= s_ptr->slevel)
706             creature_ptr->no_flowed = TRUE;
707     }
708
709     if (has_kabe && ((creature_ptr->realm1 == REALM_CRAFT) || (creature_ptr->realm2 == REALM_CRAFT) || (creature_ptr->pclass == CLASS_SORCERER))) {
710         const magic_type *s_ptr = &mp_ptr->info[REALM_CRAFT - 1][SPELL_WALL];
711         if (creature_ptr->lev >= s_ptr->slevel)
712             creature_ptr->no_flowed = TRUE;
713     }
714 }
715
716 BIT_FLAGS has_mighty_throw(player_type *creature_ptr)
717 {
718     return check_equipment_flags(creature_ptr, TR_MIGHTY_THROW);
719 }
720
721 BIT_FLAGS has_dec_mana(player_type *creature_ptr)
722 {
723     return check_equipment_flags(creature_ptr, TR_DEC_MANA);
724 }
725
726 BIT_FLAGS has_reflect(player_type *creature_ptr)
727 {
728     BIT_FLAGS result = 0L;
729
730     if (creature_ptr->pclass == CLASS_BERSERKER && creature_ptr->lev > 39)
731         result |= FLAG_CAUSE_CLASS;
732
733     if (creature_ptr->pclass == CLASS_MIRROR_MASTER && creature_ptr->lev > 39)
734         result |= FLAG_CAUSE_CLASS;
735
736     if (creature_ptr->special_defense & KAMAE_GENBU || creature_ptr->special_defense & KATA_MUSOU) {
737         result |= FLAG_CAUSE_BATTLE_FORM;
738     }
739
740     if (creature_ptr->ult_res || creature_ptr->wraith_form || creature_ptr->magicdef || creature_ptr->tim_reflect) {
741         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
742     }
743
744     if (has_element_resist(creature_ptr, ElementRealm::EARTH, 30))
745         result |= FLAG_CAUSE_CLASS;
746
747     result |= check_equipment_flags(creature_ptr, TR_REFLECT);
748     return result;
749 }
750
751 BIT_FLAGS has_see_nocto(player_type *creature_ptr)
752 {
753     return (creature_ptr->pclass == CLASS_NINJA) ? FLAG_CAUSE_CLASS : FLAG_CAUSE_NONE;
754 }
755
756 BIT_FLAGS has_warning(player_type *creature_ptr)
757 {
758     BIT_FLAGS result = 0L;
759     object_type *o_ptr;
760     BIT_FLAGS flgs[TR_FLAG_SIZE];
761
762     for (int i = INVEN_MAIN_HAND; i < INVEN_TOTAL; i++) {
763         o_ptr = &creature_ptr->inventory_list[i];
764         if (!o_ptr->k_idx)
765             continue;
766
767         object_flags(creature_ptr, o_ptr, flgs);
768
769         if (has_flag(flgs, TR_WARNING)) {
770             if (!o_ptr->inscription || !(angband_strchr(quark_str(o_ptr->inscription), '$')))
771                 set_bits(result, convert_inventory_slot_type_to_flag_cause(static_cast<inventory_slot_type>(i)));
772         }
773     }
774     return result;
775 }
776
777 BIT_FLAGS has_anti_magic(player_type *creature_ptr)
778 {
779     return check_equipment_flags(creature_ptr, TR_NO_MAGIC);
780 }
781
782 BIT_FLAGS has_anti_tele(player_type *creature_ptr)
783 {
784     return check_equipment_flags(creature_ptr, TR_NO_TELE);
785 }
786
787 BIT_FLAGS has_sh_fire(player_type *creature_ptr)
788 {
789     BIT_FLAGS result = 0L;
790
791     if (creature_ptr->muta.has(MUTA::FIRE_BODY)) {
792         result |= FLAG_CAUSE_MUTATION;
793     }
794
795     if (player_race_has_flag(creature_ptr, TR_SH_FIRE))
796         result |= FLAG_CAUSE_RACE;
797
798     if (creature_ptr->special_defense & KAMAE_SEIRYU || creature_ptr->special_defense & KATA_MUSOU) {
799         result |= FLAG_CAUSE_BATTLE_FORM;
800     }
801
802     if (hex_spelling(creature_ptr, HEX_DEMON_AURA) || creature_ptr->ult_res || creature_ptr->tim_sh_fire) {
803         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
804     }
805
806     result |= check_equipment_flags(creature_ptr, TR_SH_FIRE);
807     return result;
808 }
809
810 BIT_FLAGS has_sh_elec(player_type *creature_ptr)
811 {
812     BIT_FLAGS result = 0L;
813
814     if (player_race_has_flag(creature_ptr, TR_SH_ELEC))
815         result |= FLAG_CAUSE_RACE;
816
817     if (creature_ptr->muta.has(MUTA::ELEC_TOUC))
818         result |= FLAG_CAUSE_MUTATION;
819
820     if (hex_spelling(creature_ptr, HEX_SHOCK_CLOAK) || creature_ptr->ult_res) {
821         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
822     }
823
824     if (creature_ptr->special_defense & KAMAE_SEIRYU || (creature_ptr->special_defense & KATA_MUSOU)) {
825         result |= FLAG_CAUSE_BATTLE_FORM;
826     }
827
828     result |= check_equipment_flags(creature_ptr, TR_SH_ELEC);
829     return result;
830 }
831
832 BIT_FLAGS has_sh_cold(player_type *creature_ptr)
833 {
834     BIT_FLAGS result = 0L;
835
836     if (player_race_has_flag(creature_ptr, TR_SH_COLD))
837         result |= FLAG_CAUSE_RACE;
838
839     if (creature_ptr->special_defense & KAMAE_SEIRYU || creature_ptr->special_defense & KATA_MUSOU) {
840         result |= FLAG_CAUSE_BATTLE_FORM;
841     }
842
843     if (creature_ptr->ult_res || hex_spelling(creature_ptr, HEX_ICE_ARMOR)) {
844         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
845     }
846
847     result |= check_equipment_flags(creature_ptr, TR_SH_COLD);
848     return result;
849 }
850
851 BIT_FLAGS has_easy_spell(player_type *creature_ptr)
852 {
853     return check_equipment_flags(creature_ptr, TR_EASY_SPELL);
854 }
855
856 BIT_FLAGS has_heavy_spell(player_type *creature_ptr)
857 {
858     return check_equipment_flags(creature_ptr, TR_HEAVY_SPELL);
859 }
860
861 BIT_FLAGS has_hold_exp(player_type *creature_ptr)
862 {
863     BIT_FLAGS result = 0L;
864
865     if (creature_ptr->pseikaku == PERSONALITY_MUNCHKIN) {
866         result |= FLAG_CAUSE_PERSONALITY;
867     }
868
869     if (player_race_has_flag(creature_ptr, TR_HOLD_EXP))
870         result |= FLAG_CAUSE_RACE;
871
872     if (creature_ptr->special_defense & KATA_MUSOU) {
873         result |= FLAG_CAUSE_BATTLE_FORM;
874     }
875
876     if (creature_ptr->ult_res) {
877         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
878     }
879
880     result |= check_equipment_flags(creature_ptr, TR_HOLD_EXP);
881     return result;
882 }
883
884 BIT_FLAGS has_see_inv(player_type *creature_ptr)
885 {
886     BIT_FLAGS result = 0L;
887
888     if (creature_ptr->pclass == CLASS_NINJA && creature_ptr->lev > 29)
889         result |= FLAG_CAUSE_CLASS;
890
891     if (player_race_has_flag(creature_ptr, TR_SEE_INVIS))
892         result |= FLAG_CAUSE_RACE;
893
894     if (creature_ptr->special_defense & KATA_MUSOU) {
895         result |= FLAG_CAUSE_BATTLE_FORM;
896     }
897
898     if (creature_ptr->ult_res || creature_ptr->tim_invis) {
899         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
900     }
901
902     result |= check_equipment_flags(creature_ptr, TR_SEE_INVIS);
903     return result;
904 }
905
906 BIT_FLAGS has_magic_mastery(player_type *creature_ptr)
907 {
908     return check_equipment_flags(creature_ptr, TR_MAGIC_MASTERY);
909 }
910
911 BIT_FLAGS has_free_act(player_type *creature_ptr)
912 {
913     BIT_FLAGS result = 0L;
914
915     if (creature_ptr->muta.has(MUTA::MOTION))
916         result |= FLAG_CAUSE_MUTATION;
917
918     if (player_race_has_flag(creature_ptr, TR_FREE_ACT))
919         result |= FLAG_CAUSE_RACE;
920
921     if (creature_ptr->pclass == CLASS_NINJA && !heavy_armor(creature_ptr)
922         && (!creature_ptr->inventory_list[INVEN_MAIN_HAND].k_idx || can_attack_with_main_hand(creature_ptr))
923         && (!creature_ptr->inventory_list[INVEN_SUB_HAND].k_idx || can_attack_with_sub_hand(creature_ptr))) {
924         if (creature_ptr->lev > 24)
925             result |= FLAG_CAUSE_CLASS;
926     }
927
928     if (creature_ptr->pclass == CLASS_MONK || creature_ptr->pclass == CLASS_FORCETRAINER) {
929         if (!(heavy_armor(creature_ptr))) {
930             if (creature_ptr->lev > 24)
931                 result |= FLAG_CAUSE_CLASS;
932         }
933     }
934
935     if (creature_ptr->pclass == CLASS_BERSERKER) {
936         result |= FLAG_CAUSE_CLASS;
937     }
938
939     if (creature_ptr->ult_res || creature_ptr->magicdef) {
940         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
941     }
942
943     if (creature_ptr->special_defense & KATA_MUSOU) {
944         result |= FLAG_CAUSE_BATTLE_FORM;
945     }
946
947     result |= check_equipment_flags(creature_ptr, TR_FREE_ACT);
948     return result;
949 }
950
951 BIT_FLAGS has_sustain_str(player_type *creature_ptr)
952 {
953     BIT_FLAGS result = 0L;
954
955     if (creature_ptr->pclass == CLASS_BERSERKER) {
956         result |= FLAG_CAUSE_CLASS;
957     }
958
959     if (player_race_has_flag(creature_ptr, TR_SUST_STR))
960         result |= FLAG_CAUSE_RACE;
961
962     if (creature_ptr->ult_res) {
963         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
964     }
965
966     if (creature_ptr->special_defense & KATA_MUSOU) {
967         result |= FLAG_CAUSE_BATTLE_FORM;
968     }
969
970     result |= check_equipment_flags(creature_ptr, TR_SUST_STR);
971     return result;
972 }
973
974 BIT_FLAGS has_sustain_int(player_type *creature_ptr)
975 {
976     BIT_FLAGS result = 0L;
977
978     if (player_race_has_flag(creature_ptr, TR_SUST_INT))
979         result |= FLAG_CAUSE_RACE;
980
981     if (creature_ptr->ult_res) {
982         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
983     }
984
985     if (creature_ptr->special_defense & KATA_MUSOU) {
986         result |= FLAG_CAUSE_BATTLE_FORM;
987     }
988
989     result |= check_equipment_flags(creature_ptr, TR_SUST_INT);
990     return result;
991 }
992
993 BIT_FLAGS has_sustain_wis(player_type *creature_ptr)
994 {
995     BIT_FLAGS result = 0L;
996
997     if (creature_ptr->pclass == CLASS_MINDCRAFTER && creature_ptr->lev > 19)
998         result |= FLAG_CAUSE_CLASS;
999
1000     if (player_race_has_flag(creature_ptr, TR_SUST_WIS))
1001         result |= FLAG_CAUSE_RACE;
1002
1003     if (creature_ptr->ult_res) {
1004         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1005     }
1006
1007     if (creature_ptr->special_defense & KATA_MUSOU) {
1008         result |= FLAG_CAUSE_BATTLE_FORM;
1009     }
1010
1011     result |= check_equipment_flags(creature_ptr, TR_SUST_WIS);
1012     return result;
1013 }
1014
1015 BIT_FLAGS has_sustain_dex(player_type *creature_ptr)
1016 {
1017     BIT_FLAGS result = 0L;
1018     if (creature_ptr->pclass == CLASS_BERSERKER) {
1019         result |= FLAG_CAUSE_CLASS;
1020     }
1021
1022     if (creature_ptr->pclass == CLASS_NINJA && creature_ptr->lev > 24)
1023         result |= FLAG_CAUSE_CLASS;
1024
1025     if (player_race_has_flag(creature_ptr, TR_SUST_DEX))
1026         result |= FLAG_CAUSE_RACE;
1027
1028     if (creature_ptr->ult_res) {
1029         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1030     }
1031
1032     if (creature_ptr->special_defense & KATA_MUSOU) {
1033         result |= FLAG_CAUSE_BATTLE_FORM;
1034     }
1035
1036     result |= check_equipment_flags(creature_ptr, TR_SUST_DEX);
1037     return result;
1038 }
1039
1040 BIT_FLAGS has_sustain_con(player_type *creature_ptr)
1041 {
1042     BIT_FLAGS result = 0L;
1043     if (creature_ptr->pclass == CLASS_BERSERKER) {
1044         result |= FLAG_CAUSE_CLASS;
1045     }
1046
1047     if (player_race_has_flag(creature_ptr, TR_SUST_CON))
1048         result |= FLAG_CAUSE_RACE;
1049
1050     if (creature_ptr->ult_res) {
1051         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1052     }
1053
1054     if (creature_ptr->special_defense & KATA_MUSOU) {
1055         result |= FLAG_CAUSE_BATTLE_FORM;
1056     }
1057
1058     result |= check_equipment_flags(creature_ptr, TR_SUST_CON);
1059     return result;
1060 }
1061
1062 BIT_FLAGS has_sustain_chr(player_type *creature_ptr)
1063 {
1064     BIT_FLAGS result = 0L;
1065
1066     if (player_race_has_flag(creature_ptr, TR_SUST_CHR))
1067         result |= FLAG_CAUSE_RACE;
1068
1069     if (creature_ptr->ult_res) {
1070         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1071     }
1072
1073     if (creature_ptr->special_defense & KATA_MUSOU) {
1074         result |= FLAG_CAUSE_BATTLE_FORM;
1075     }
1076
1077     result |= check_equipment_flags(creature_ptr, TR_SUST_CHR);
1078     return result;
1079 }
1080
1081 BIT_FLAGS has_levitation(player_type *creature_ptr)
1082 {
1083     BIT_FLAGS result = 0L;
1084
1085     if (creature_ptr->muta.has(MUTA::WINGS)) {
1086         result |= FLAG_CAUSE_MUTATION;
1087     }
1088
1089     if (player_race_has_flag(creature_ptr, TR_LEVITATION))
1090         result |= FLAG_CAUSE_RACE;
1091
1092     if (creature_ptr->special_defense & KAMAE_SEIRYU || creature_ptr->special_defense & KAMAE_SUZAKU || (creature_ptr->special_defense & KATA_MUSOU)) {
1093         result |= FLAG_CAUSE_BATTLE_FORM;
1094     }
1095
1096     if (creature_ptr->ult_res || creature_ptr->magicdef) {
1097         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1098     }
1099
1100     if (creature_ptr->tim_levitation) {
1101         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1102     }
1103
1104     result |= check_equipment_flags(creature_ptr, TR_LEVITATION);
1105
1106     if (creature_ptr->riding) {
1107         monster_type *riding_m_ptr = &creature_ptr->current_floor_ptr->m_list[creature_ptr->riding];
1108         monster_race *riding_r_ptr = &r_info[riding_m_ptr->r_idx];
1109         result = (riding_r_ptr->flags7 & RF7_CAN_FLY) ? FLAG_CAUSE_RIDING : FLAG_CAUSE_NONE;
1110     }
1111     return result;
1112 }
1113
1114 bool has_can_swim(player_type *creature_ptr)
1115 {
1116     bool can_swim = FALSE;
1117     if (creature_ptr->riding) {
1118         monster_type *riding_m_ptr = &creature_ptr->current_floor_ptr->m_list[creature_ptr->riding];
1119         monster_race *riding_r_ptr = &r_info[riding_m_ptr->r_idx];
1120         if (riding_r_ptr->flags7 & (RF7_CAN_SWIM | RF7_AQUATIC))
1121             can_swim = TRUE;
1122     }
1123
1124     return can_swim;
1125 }
1126
1127 BIT_FLAGS has_slow_digest(player_type *creature_ptr)
1128 {
1129     BIT_FLAGS result = 0L;
1130
1131     if (creature_ptr->pclass == CLASS_NINJA) {
1132         result |= FLAG_CAUSE_CLASS;
1133     }
1134
1135     if (player_race_has_flag(creature_ptr, TR_SLOW_DIGEST))
1136         result |= FLAG_CAUSE_RACE;
1137
1138     if (creature_ptr->special_defense & KATA_MUSOU) {
1139         result |= FLAG_CAUSE_BATTLE_FORM;
1140     }
1141
1142     if (creature_ptr->ult_res) {
1143         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1144     }
1145
1146     result |= check_equipment_flags(creature_ptr, TR_SLOW_DIGEST);
1147     return result;
1148 }
1149
1150 BIT_FLAGS has_regenerate(player_type *creature_ptr)
1151 {
1152     BIT_FLAGS result = 0L;
1153
1154     if (creature_ptr->pclass == CLASS_WARRIOR && creature_ptr->lev > 44) {
1155         result |= FLAG_CAUSE_CLASS;
1156     }
1157
1158     if (creature_ptr->muta.has(MUTA::REGEN))
1159         result |= FLAG_CAUSE_MUTATION;
1160
1161     if (player_race_has_flag(creature_ptr, TR_REGEN))
1162         result |= FLAG_CAUSE_RACE;
1163
1164     if (creature_ptr->special_defense & KATA_MUSOU) {
1165         result |= FLAG_CAUSE_BATTLE_FORM;
1166     }
1167
1168     if (hex_spelling(creature_ptr, HEX_DEMON_AURA) || creature_ptr->ult_res || creature_ptr->tim_regen) {
1169         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1170     }
1171
1172     result |= check_equipment_flags(creature_ptr, TR_REGEN);
1173
1174     if (creature_ptr->muta.has(MUTA::FLESH_ROT))
1175         result = 0L;
1176
1177     return result;
1178 }
1179
1180 void update_curses(player_type *creature_ptr)
1181 {
1182     object_type *o_ptr;
1183     BIT_FLAGS flgs[TR_FLAG_SIZE];
1184     creature_ptr->cursed = 0L;
1185
1186     if (creature_ptr->pseikaku == PERSONALITY_SEXY)
1187         creature_ptr->cursed |= (TRC_AGGRAVATE);
1188
1189     for (int i = INVEN_MAIN_HAND; i < INVEN_TOTAL; i++) {
1190         o_ptr = &creature_ptr->inventory_list[i];
1191         if (!o_ptr->k_idx)
1192             continue;
1193         object_flags(creature_ptr, o_ptr, flgs);
1194         if (has_flag(flgs, TR_AGGRAVATE))
1195             creature_ptr->cursed |= TRC_AGGRAVATE;
1196         if (has_flag(flgs, TR_DRAIN_EXP))
1197             creature_ptr->cursed |= TRC_DRAIN_EXP;
1198         if (has_flag(flgs, TR_TY_CURSE))
1199             creature_ptr->cursed |= TRC_TY_CURSE;
1200         if (has_flag(flgs, TR_ADD_L_CURSE))
1201             creature_ptr->cursed |= TRC_ADD_L_CURSE;
1202         if (has_flag(flgs, TR_ADD_H_CURSE))
1203             creature_ptr->cursed |= TRC_ADD_H_CURSE;
1204         if (has_flag(flgs, TR_DRAIN_HP))
1205             creature_ptr->cursed |= TRC_DRAIN_HP;
1206         if (has_flag(flgs, TR_DRAIN_MANA))
1207             creature_ptr->cursed |= TRC_DRAIN_MANA;
1208         if (has_flag(flgs, TR_CALL_ANIMAL))
1209             creature_ptr->cursed |= TRC_CALL_ANIMAL;
1210         if (has_flag(flgs, TR_CALL_DEMON))
1211             creature_ptr->cursed |= TRC_CALL_DEMON;
1212         if (has_flag(flgs, TR_CALL_DRAGON))
1213             creature_ptr->cursed |= TRC_CALL_DRAGON;
1214         if (has_flag(flgs, TR_CALL_UNDEAD))
1215             creature_ptr->cursed |= TRC_CALL_UNDEAD;
1216         if (has_flag(flgs, TR_COWARDICE))
1217             creature_ptr->cursed |= TRC_COWARDICE;
1218         if (has_flag(flgs, TR_LOW_MELEE))
1219             creature_ptr->cursed |= TRC_LOW_MELEE;
1220         if (has_flag(flgs, TR_LOW_AC))
1221             creature_ptr->cursed |= TRC_LOW_AC;
1222         if (has_flag(flgs, TR_HARD_SPELL))
1223             creature_ptr->cursed |= TRC_HARD_SPELL;
1224         if (has_flag(flgs, TR_FAST_DIGEST))
1225             creature_ptr->cursed |= TRC_FAST_DIGEST;
1226         if (has_flag(flgs, TR_SLOW_REGEN))
1227             creature_ptr->cursed |= TRC_SLOW_REGEN;
1228         if (has_flag(flgs, TR_BERS_RAGE))
1229             creature_ptr->cursed |= TRC_BERS_RAGE;
1230
1231         creature_ptr->cursed |= (o_ptr->curse_flags & (0xFFFFFFF0L));
1232         if (o_ptr->name1 == ART_CHAINSWORD)
1233             creature_ptr->cursed |= TRC_CHAINSWORD;
1234
1235         if (has_flag(flgs, TR_TELEPORT)) {
1236             if (object_is_cursed(o_ptr))
1237                 creature_ptr->cursed |= TRC_TELEPORT;
1238             else {
1239                 concptr insc = quark_str(o_ptr->inscription);
1240
1241                 /* {.} will stop random teleportation. */
1242                 if (o_ptr->inscription && angband_strchr(insc, '.')) {
1243                 } else {
1244                     creature_ptr->cursed |= TRC_TELEPORT_SELF;
1245                 }
1246             }
1247         }
1248     }
1249
1250     if (creature_ptr->cursed & TRC_TELEPORT)
1251         creature_ptr->cursed &= ~(TRC_TELEPORT_SELF);
1252 }
1253
1254 BIT_FLAGS has_impact(player_type *creature_ptr)
1255 {
1256     return check_equipment_flags(creature_ptr, TR_IMPACT);
1257 }
1258
1259 BIT_FLAGS has_earthquake(player_type *creature_ptr)
1260 {
1261     return check_equipment_flags(creature_ptr, TR_EARTHQUAKE);
1262 }
1263
1264 void update_extra_blows(player_type *creature_ptr)
1265 {
1266     object_type *o_ptr;
1267     BIT_FLAGS flgs[TR_FLAG_SIZE];
1268     creature_ptr->extra_blows[0] = creature_ptr->extra_blows[1] = 0;
1269
1270     for (int i = INVEN_MAIN_HAND; i < INVEN_TOTAL; i++) {
1271         o_ptr = &creature_ptr->inventory_list[i];
1272         if (!o_ptr->k_idx)
1273             continue;
1274
1275         object_flags(creature_ptr, o_ptr, flgs);
1276         if (has_flag(flgs, TR_BLOWS)) {
1277             if ((i == INVEN_MAIN_HAND || i == INVEN_MAIN_RING) && !has_two_handed_weapons(creature_ptr))
1278                 creature_ptr->extra_blows[0] += o_ptr->pval;
1279             else if ((i == INVEN_SUB_HAND || i == INVEN_SUB_RING) && !has_two_handed_weapons(creature_ptr))
1280                 creature_ptr->extra_blows[1] += o_ptr->pval;
1281             else {
1282                 creature_ptr->extra_blows[0] += o_ptr->pval;
1283                 creature_ptr->extra_blows[1] += o_ptr->pval;
1284             }
1285         }
1286     }
1287 }
1288
1289 BIT_FLAGS has_resist_acid(player_type *creature_ptr)
1290 {
1291     BIT_FLAGS result = 0L;
1292
1293     if (player_race_has_flag(creature_ptr, TR_RES_ACID))
1294         result |= FLAG_CAUSE_RACE;
1295
1296     if (creature_ptr->special_defense & KAMAE_SEIRYU || creature_ptr->special_defense & KATA_MUSOU) {
1297         result |= FLAG_CAUSE_BATTLE_FORM;
1298     }
1299
1300     if (creature_ptr->ult_res) {
1301         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1302     }
1303
1304     if (has_element_resist(creature_ptr, ElementRealm::SEA, 1))
1305         result |= FLAG_CAUSE_CLASS;
1306
1307     result |= has_immune_acid(creature_ptr);
1308
1309     result |= check_equipment_flags(creature_ptr, TR_RES_ACID);
1310     return result;
1311 }
1312
1313 BIT_FLAGS has_vuln_acid(player_type *creature_ptr)
1314 {
1315     BIT_FLAGS result = 0L;
1316
1317     if (creature_ptr->muta.has(MUTA::VULN_ELEM)) {
1318         result |= FLAG_CAUSE_MUTATION;
1319     }
1320
1321     if (player_race_has_flag(creature_ptr, TR_VUL_ACID))
1322         result |= FLAG_CAUSE_RACE;
1323
1324     if (creature_ptr->special_defense & KATA_KOUKIJIN) {
1325         result |= FLAG_CAUSE_BATTLE_FORM;
1326     }
1327
1328     result |= check_equipment_flags(creature_ptr, TR_VUL_ACID);
1329     return result;
1330 }
1331
1332 BIT_FLAGS has_resist_elec(player_type *creature_ptr)
1333 {
1334     BIT_FLAGS result = 0L;
1335
1336     if (player_race_has_flag(creature_ptr, TR_RES_ELEC))
1337         result |= FLAG_CAUSE_RACE;
1338
1339     if (creature_ptr->special_defense & KAMAE_SEIRYU || creature_ptr->special_defense & KATA_MUSOU) {
1340         result |= FLAG_CAUSE_BATTLE_FORM;
1341     }
1342
1343     if (creature_ptr->ult_res) {
1344         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1345     }
1346
1347     if (has_element_resist(creature_ptr, ElementRealm::SKY, 1))
1348         result |= FLAG_CAUSE_CLASS;
1349
1350     result |= check_equipment_flags(creature_ptr, TR_RES_ELEC);
1351     result |= has_immune_elec(creature_ptr);
1352     return result;
1353 }
1354
1355 BIT_FLAGS has_vuln_elec(player_type *creature_ptr)
1356 {
1357     BIT_FLAGS result = 0L;
1358     if (creature_ptr->muta.has(MUTA::VULN_ELEM)) {
1359         result |= FLAG_CAUSE_MUTATION;
1360     }
1361
1362     if (player_race_has_flag(creature_ptr, TR_VUL_ELEC))
1363         result |= FLAG_CAUSE_RACE;
1364
1365     if (creature_ptr->special_defense & KATA_KOUKIJIN) {
1366         result |= FLAG_CAUSE_BATTLE_FORM;
1367     }
1368
1369     result |= check_equipment_flags(creature_ptr, TR_VUL_ELEC);
1370     return result;
1371 }
1372
1373 BIT_FLAGS has_resist_fire(player_type *creature_ptr)
1374 {
1375     BIT_FLAGS result = 0L;
1376
1377     if (player_race_has_flag(creature_ptr, TR_RES_FIRE))
1378         result |= FLAG_CAUSE_RACE;
1379
1380     if (creature_ptr->special_defense & KAMAE_SEIRYU || creature_ptr->special_defense & KATA_MUSOU) {
1381         result |= FLAG_CAUSE_BATTLE_FORM;
1382     }
1383
1384     if (creature_ptr->ult_res) {
1385         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1386     }
1387
1388     if (has_element_resist(creature_ptr, ElementRealm::FIRE, 1))
1389         result |= FLAG_CAUSE_CLASS;
1390
1391     result |= check_equipment_flags(creature_ptr, TR_RES_FIRE);
1392     result |= has_immune_fire(creature_ptr);
1393     return result;
1394 }
1395
1396 BIT_FLAGS has_vuln_fire(player_type *creature_ptr)
1397 {
1398     BIT_FLAGS result = 0L;
1399
1400     if (creature_ptr->muta.has(MUTA::VULN_ELEM)) {
1401         result |= FLAG_CAUSE_MUTATION;
1402     }
1403
1404     if (player_race_has_flag(creature_ptr, TR_VUL_FIRE))
1405         result |= FLAG_CAUSE_RACE;
1406
1407     if (creature_ptr->special_defense & KATA_KOUKIJIN) {
1408         result |= FLAG_CAUSE_BATTLE_FORM;
1409     }
1410
1411     result |= check_equipment_flags(creature_ptr, TR_VUL_FIRE);
1412     return result;
1413 }
1414
1415 BIT_FLAGS has_resist_cold(player_type *creature_ptr)
1416 {
1417     BIT_FLAGS result = 0L;
1418
1419     if (player_race_has_flag(creature_ptr, TR_RES_COLD))
1420         result |= FLAG_CAUSE_RACE;
1421
1422     if (creature_ptr->special_defense & KAMAE_SEIRYU || creature_ptr->special_defense & KATA_MUSOU) {
1423         result |= FLAG_CAUSE_BATTLE_FORM;
1424     }
1425
1426     if (creature_ptr->ult_res) {
1427         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1428     }
1429
1430     if (has_element_resist(creature_ptr, ElementRealm::ICE, 1))
1431         result |= FLAG_CAUSE_CLASS;
1432
1433     result |= check_equipment_flags(creature_ptr, TR_RES_COLD);
1434     result |= has_immune_cold(creature_ptr);
1435     return result;
1436 }
1437
1438 BIT_FLAGS has_vuln_cold(player_type *creature_ptr)
1439 {
1440     BIT_FLAGS result = 0L;
1441
1442     if (creature_ptr->muta.has(MUTA::VULN_ELEM)) {
1443         result |= FLAG_CAUSE_MUTATION;
1444     }
1445
1446     if (player_race_has_flag(creature_ptr, TR_VUL_COLD))
1447         result |= FLAG_CAUSE_RACE;
1448
1449     if (creature_ptr->special_defense & KATA_KOUKIJIN) {
1450         result |= FLAG_CAUSE_BATTLE_FORM;
1451     }
1452
1453     result |= check_equipment_flags(creature_ptr, TR_VUL_COLD);
1454     return result;
1455 }
1456
1457 BIT_FLAGS has_resist_pois(player_type *creature_ptr)
1458 {
1459     BIT_FLAGS result = 0L;
1460
1461     if (creature_ptr->pclass == CLASS_NINJA && creature_ptr->lev > 19)
1462         result |= FLAG_CAUSE_CLASS;
1463
1464     if (player_race_has_flag(creature_ptr, TR_RES_POIS))
1465         result |= FLAG_CAUSE_RACE;
1466
1467     if (creature_ptr->special_defense & KAMAE_SEIRYU || creature_ptr->special_defense & KATA_MUSOU) {
1468         result |= FLAG_CAUSE_BATTLE_FORM;
1469     }
1470
1471     if (creature_ptr->ult_res) {
1472         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1473     }
1474
1475     if (has_element_resist(creature_ptr, ElementRealm::DEATH, 1))
1476         result |= FLAG_CAUSE_CLASS;
1477
1478     result |= check_equipment_flags(creature_ptr, TR_RES_POIS);
1479     return result;
1480 }
1481
1482 BIT_FLAGS has_resist_conf(player_type *creature_ptr)
1483 {
1484     BIT_FLAGS result = 0L;
1485
1486     if (creature_ptr->pclass == CLASS_MINDCRAFTER && creature_ptr->lev > 29)
1487         result |= FLAG_CAUSE_CLASS;
1488
1489     if (creature_ptr->pseikaku == PERSONALITY_CHARGEMAN || creature_ptr->pseikaku == PERSONALITY_MUNCHKIN) {
1490         result |= FLAG_CAUSE_PERSONALITY;
1491     }
1492
1493     if (player_race_has_flag(creature_ptr, TR_RES_CONF))
1494         result |= FLAG_CAUSE_RACE;
1495
1496     if (creature_ptr->ult_res || creature_ptr->magicdef) {
1497         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1498     }
1499
1500     if (creature_ptr->special_defense & KATA_MUSOU) {
1501         result |= FLAG_CAUSE_BATTLE_FORM;
1502     }
1503
1504     if (has_element_resist(creature_ptr, ElementRealm::CHAOS, 1))
1505         result |= FLAG_CAUSE_CLASS;
1506
1507     result |= check_equipment_flags(creature_ptr, TR_RES_CONF);
1508     return result;
1509 }
1510
1511 BIT_FLAGS has_resist_sound(player_type *creature_ptr)
1512 {
1513     BIT_FLAGS result = 0L;
1514
1515     if (creature_ptr->pclass == CLASS_BARD) {
1516         result |= FLAG_CAUSE_CLASS;
1517     }
1518     if (player_race_has_flag(creature_ptr, TR_RES_SOUND))
1519         result |= FLAG_CAUSE_RACE;
1520
1521     if (creature_ptr->special_defense & KATA_MUSOU) {
1522         result |= FLAG_CAUSE_BATTLE_FORM;
1523     }
1524
1525     if (creature_ptr->ult_res) {
1526         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1527     }
1528
1529     result |= check_equipment_flags(creature_ptr, TR_RES_SOUND);
1530     return result;
1531 }
1532
1533 BIT_FLAGS has_resist_lite(player_type *creature_ptr)
1534 {
1535     BIT_FLAGS result = 0L;
1536
1537     if (player_race_has_flag(creature_ptr, TR_RES_LITE))
1538         result |= FLAG_CAUSE_RACE;
1539
1540     if (creature_ptr->special_defense & KATA_MUSOU) {
1541         result |= FLAG_CAUSE_BATTLE_FORM;
1542     }
1543
1544     if (creature_ptr->ult_res) {
1545         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1546     }
1547
1548     result |= check_equipment_flags(creature_ptr, TR_RES_LITE);
1549     return result;
1550 }
1551
1552 BIT_FLAGS has_vuln_lite(player_type *creature_ptr)
1553 {
1554     BIT_FLAGS result = 0L;
1555
1556     if (player_race_has_flag(creature_ptr, TR_VUL_LITE))
1557         result |= FLAG_CAUSE_RACE;
1558
1559     if (creature_ptr->wraith_form) {
1560         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1561     }
1562
1563     result |= check_equipment_flags(creature_ptr, TR_VUL_LITE);
1564     return result;
1565 }
1566
1567 BIT_FLAGS has_resist_dark(player_type *creature_ptr)
1568 {
1569     BIT_FLAGS result = 0L;
1570
1571     if (player_race_has_flag(creature_ptr, TR_RES_DARK))
1572         result |= FLAG_CAUSE_RACE;
1573
1574     if (creature_ptr->special_defense & KATA_MUSOU) {
1575         result |= FLAG_CAUSE_BATTLE_FORM;
1576     }
1577
1578     if (creature_ptr->ult_res) {
1579         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1580     }
1581
1582     if (has_element_resist(creature_ptr, ElementRealm::DARKNESS, 1))
1583         result |= FLAG_CAUSE_CLASS;
1584
1585     result |= check_equipment_flags(creature_ptr, TR_RES_DARK);
1586     return result;
1587 }
1588
1589 BIT_FLAGS has_resist_chaos(player_type *creature_ptr)
1590 {
1591     BIT_FLAGS result = 0L;
1592
1593     if (creature_ptr->pclass == CLASS_CHAOS_WARRIOR && creature_ptr->lev > 29)
1594         result |= FLAG_CAUSE_CLASS;
1595
1596     if (player_race_has_flag(creature_ptr, TR_RES_CHAOS))
1597         result |= FLAG_CAUSE_RACE;
1598
1599     if (creature_ptr->special_defense & KATA_MUSOU) {
1600         result |= FLAG_CAUSE_BATTLE_FORM;
1601     }
1602
1603     if (creature_ptr->ult_res) {
1604         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1605     }
1606
1607     if (has_element_resist(creature_ptr, ElementRealm::CHAOS, 30))
1608         result |= FLAG_CAUSE_CLASS;
1609
1610     result |= check_equipment_flags(creature_ptr, TR_RES_CHAOS);
1611     return result;
1612 }
1613
1614 BIT_FLAGS has_resist_disen(player_type *creature_ptr)
1615 {
1616     BIT_FLAGS result = 0L;
1617
1618     if (player_race_has_flag(creature_ptr, TR_RES_DISEN))
1619         result |= FLAG_CAUSE_RACE;
1620
1621     if (creature_ptr->special_defense & KATA_MUSOU) {
1622         result |= FLAG_CAUSE_BATTLE_FORM;
1623     }
1624
1625     if (creature_ptr->ult_res) {
1626         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1627     }
1628
1629     if (has_element_resist(creature_ptr, ElementRealm::DEATH, 30))
1630         result |= FLAG_CAUSE_CLASS;
1631
1632     result |= check_equipment_flags(creature_ptr, TR_RES_DISEN);
1633     return result;
1634 }
1635
1636 BIT_FLAGS has_resist_shard(player_type *creature_ptr)
1637 {
1638     BIT_FLAGS result = 0L;
1639
1640     if (player_race_has_flag(creature_ptr, TR_RES_SHARDS))
1641         result |= FLAG_CAUSE_RACE;
1642
1643     if (creature_ptr->special_defense & KATA_MUSOU) {
1644         result |= FLAG_CAUSE_BATTLE_FORM;
1645     }
1646
1647     if (creature_ptr->ult_res) {
1648         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1649     }
1650
1651     if (has_element_resist(creature_ptr, ElementRealm::EARTH, 1))
1652         result |= FLAG_CAUSE_CLASS;
1653
1654     result |= check_equipment_flags(creature_ptr, TR_RES_SHARDS);
1655     return result;
1656 }
1657
1658 BIT_FLAGS has_resist_nexus(player_type *creature_ptr)
1659 {
1660     BIT_FLAGS result = 0L;
1661
1662     if (player_race_has_flag(creature_ptr, TR_RES_NEXUS))
1663         result |= FLAG_CAUSE_RACE;
1664
1665     if (creature_ptr->special_defense & KATA_MUSOU) {
1666         result |= FLAG_CAUSE_BATTLE_FORM;
1667     }
1668
1669     if (creature_ptr->ult_res) {
1670         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1671     }
1672
1673     result |= check_equipment_flags(creature_ptr, TR_RES_NEXUS);
1674     return result;
1675 }
1676
1677 BIT_FLAGS has_resist_blind(player_type *creature_ptr)
1678 {
1679     BIT_FLAGS result = 0L;
1680
1681     if (creature_ptr->pseikaku == PERSONALITY_MUNCHKIN) {
1682         result |= FLAG_CAUSE_PERSONALITY;
1683     }
1684
1685     if (player_race_has_flag(creature_ptr, TR_RES_BLIND))
1686         result |= FLAG_CAUSE_RACE;
1687
1688     if (creature_ptr->special_defense & KATA_MUSOU) {
1689         result |= FLAG_CAUSE_BATTLE_FORM;
1690     }
1691
1692     if (creature_ptr->ult_res || creature_ptr->magicdef) {
1693         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1694     }
1695
1696     result |= check_equipment_flags(creature_ptr, TR_RES_BLIND);
1697     return result;
1698 }
1699
1700 BIT_FLAGS has_resist_neth(player_type *creature_ptr)
1701 {
1702     BIT_FLAGS result = 0L;
1703
1704     if (player_race_has_flag(creature_ptr, TR_RES_NETHER))
1705         result |= FLAG_CAUSE_RACE;
1706
1707     if (creature_ptr->special_defense & KATA_MUSOU) {
1708         result |= FLAG_CAUSE_BATTLE_FORM;
1709     }
1710
1711     if (creature_ptr->ult_res || creature_ptr->tim_res_nether) {
1712         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1713     }
1714
1715     if (has_element_resist(creature_ptr, ElementRealm::DARKNESS, 30))
1716         result |= FLAG_CAUSE_CLASS;
1717
1718     result |= check_equipment_flags(creature_ptr, TR_RES_NETHER);
1719     return result;
1720 }
1721
1722 BIT_FLAGS has_resist_time(player_type *creature_ptr)
1723 {
1724     BIT_FLAGS result = 0L;
1725
1726     if (player_race_has_flag(creature_ptr, TR_RES_TIME))
1727         result |= FLAG_CAUSE_RACE;
1728
1729     if (creature_ptr->tim_res_time) {
1730         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1731     }
1732
1733     result |= check_equipment_flags(creature_ptr, TR_RES_TIME);
1734     return result;
1735 }
1736
1737 BIT_FLAGS has_resist_water(player_type *creature_ptr)
1738 {
1739     BIT_FLAGS result = 0L;
1740
1741     if (player_race_has_flag(creature_ptr, TR_RES_WATER))
1742         result |= FLAG_CAUSE_RACE;
1743
1744     result |= check_equipment_flags(creature_ptr, TR_RES_WATER);
1745     return result;
1746 }
1747
1748 /*!
1749  * @brief 呪力耐性を所持しているかどうか
1750  * @param プレイヤー情報への参照ポインタ
1751  * @return 呪力耐性を所持していればTRUE、なければFALSE
1752  */
1753 BIT_FLAGS has_resist_curse(player_type *creature_ptr)
1754 {
1755     BIT_FLAGS result = 0L;
1756
1757     if (player_race_has_flag(creature_ptr, TR_RES_CURSE))
1758         result |= FLAG_CAUSE_RACE;
1759
1760     result |= check_equipment_flags(creature_ptr, TR_RES_CURSE);
1761     return result;
1762 }
1763
1764 BIT_FLAGS has_resist_fear(player_type *creature_ptr)
1765 {
1766     BIT_FLAGS result = 0L;
1767
1768     if (creature_ptr->muta.has(MUTA::FEARLESS))
1769         result |= FLAG_CAUSE_MUTATION;
1770
1771     switch (creature_ptr->pclass) {
1772     case CLASS_WARRIOR:
1773     case CLASS_SAMURAI:
1774         if (creature_ptr->lev > 29)
1775             result |= FLAG_CAUSE_CLASS;
1776         break;
1777     case CLASS_PALADIN:
1778     case CLASS_CHAOS_WARRIOR:
1779         if (creature_ptr->lev > 39)
1780             result |= FLAG_CAUSE_CLASS;
1781         break;
1782     case CLASS_MINDCRAFTER:
1783         if (creature_ptr->lev > 9)
1784             result |= FLAG_CAUSE_CLASS;
1785         break;
1786     case CLASS_NINJA:
1787         result |= FLAG_CAUSE_CLASS;
1788         break;
1789
1790     default:
1791         break;
1792     }
1793
1794     if (player_race_has_flag(creature_ptr, TR_RES_FEAR))
1795         result |= FLAG_CAUSE_RACE;
1796
1797     if ((creature_ptr->special_defense & KATA_MUSOU)) {
1798         result |= FLAG_CAUSE_BATTLE_FORM;
1799     }
1800
1801     if (is_hero(creature_ptr) || is_shero(creature_ptr) || creature_ptr->ult_res) {
1802         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1803     }
1804
1805     result |= check_equipment_flags(creature_ptr, TR_RES_FEAR);
1806     return result;
1807 }
1808
1809 BIT_FLAGS has_immune_acid(player_type *creature_ptr)
1810 {
1811     BIT_FLAGS result = 0L;
1812
1813     if (player_race_has_flag(creature_ptr, TR_IM_ACID))
1814         result |= FLAG_CAUSE_RACE;
1815
1816     if (creature_ptr->ele_immune) {
1817         if (creature_ptr->special_defense & DEFENSE_ACID)
1818             result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1819     }
1820
1821     if (has_element_resist(creature_ptr, ElementRealm::SEA, 30))
1822         result |= FLAG_CAUSE_CLASS;
1823
1824     result |= check_equipment_flags(creature_ptr, TR_IM_ACID);
1825     return result;
1826 }
1827
1828 BIT_FLAGS has_immune_elec(player_type *creature_ptr)
1829 {
1830     BIT_FLAGS result = 0L;
1831
1832     if (player_race_has_flag(creature_ptr, TR_IM_ELEC))
1833         result |= FLAG_CAUSE_RACE;
1834
1835     if (creature_ptr->ele_immune) {
1836         if (creature_ptr->special_defense & DEFENSE_ELEC)
1837             result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1838     }
1839
1840     if (has_element_resist(creature_ptr, ElementRealm::SKY, 30))
1841         result |= FLAG_CAUSE_CLASS;
1842
1843     result |= check_equipment_flags(creature_ptr, TR_IM_ELEC);
1844     return result;
1845 }
1846
1847 BIT_FLAGS has_immune_fire(player_type *creature_ptr)
1848 {
1849     BIT_FLAGS result = 0L;
1850
1851     if (player_race_has_flag(creature_ptr, TR_IM_FIRE))
1852         result |= FLAG_CAUSE_RACE;
1853
1854     if (creature_ptr->ele_immune) {
1855         if (creature_ptr->special_defense & DEFENSE_FIRE)
1856             result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1857     }
1858
1859     if (has_element_resist(creature_ptr, ElementRealm::FIRE, 30))
1860         result |= FLAG_CAUSE_CLASS;
1861
1862     result |= check_equipment_flags(creature_ptr, TR_IM_FIRE);
1863     return result;
1864 }
1865
1866 BIT_FLAGS has_immune_cold(player_type *creature_ptr)
1867 {
1868     BIT_FLAGS result = 0L;
1869
1870     if (player_race_has_flag(creature_ptr, TR_IM_COLD))
1871         result |= FLAG_CAUSE_RACE;
1872
1873     if (creature_ptr->ele_immune) {
1874         if (creature_ptr->special_defense & DEFENSE_COLD)
1875             result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1876     }
1877
1878     if (has_element_resist(creature_ptr, ElementRealm::ICE, 30))
1879         result |= FLAG_CAUSE_CLASS;
1880
1881     result |= check_equipment_flags(creature_ptr, TR_IM_COLD);
1882     return result;
1883 }
1884
1885 BIT_FLAGS has_immune_dark(player_type *creature_ptr)
1886 {
1887     BIT_FLAGS result = 0L;
1888
1889     if (player_race_has_flag(creature_ptr, TR_IM_DARK))
1890         result |= FLAG_CAUSE_RACE;
1891
1892     if (creature_ptr->wraith_form) {
1893         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1894     }
1895
1896     result |= check_equipment_flags(creature_ptr, TR_IM_DARK);
1897     return result;
1898 }
1899
1900 melee_type player_melee_type(player_type *creature_ptr)
1901 {
1902     if (has_two_handed_weapons(creature_ptr))
1903         return MELEE_TYPE_WEAPON_TWOHAND;
1904
1905     if (has_melee_weapon(creature_ptr, INVEN_MAIN_HAND)) {
1906         if (has_melee_weapon(creature_ptr, INVEN_SUB_HAND)) {
1907             return MELEE_TYPE_WEAPON_DOUBLE;
1908         }
1909         return MELEE_TYPE_WEAPON_MAIN;
1910     }
1911
1912     if (has_melee_weapon(creature_ptr, INVEN_SUB_HAND))
1913         return MELEE_TYPE_WEAPON_SUB;
1914
1915     if (empty_hands(creature_ptr, FALSE) == (EMPTY_HAND_MAIN | EMPTY_HAND_SUB))
1916         return MELEE_TYPE_BAREHAND_TWO;
1917
1918     if (empty_hands(creature_ptr, FALSE) == EMPTY_HAND_MAIN)
1919         return MELEE_TYPE_BAREHAND_MAIN;
1920
1921     if (empty_hands(creature_ptr, FALSE) == EMPTY_HAND_SUB)
1922         return MELEE_TYPE_BAREHAND_SUB;
1923
1924     return MELEE_TYPE_SHIELD_DOUBLE;
1925 }
1926
1927 /*
1928  * @brief 利き手で攻撃可能かどうかを判定する
1929  *        利き手で攻撃可能とは、利き手に武器を持っているか、
1930  *        利き手が素手かつ左手も素手もしくは盾を装備している事を意味する。
1931  * @details Includes martial arts and hand combats as weapons.
1932  */
1933 bool can_attack_with_main_hand(player_type *creature_ptr)
1934 {
1935     if (has_melee_weapon(creature_ptr, INVEN_MAIN_HAND))
1936         return TRUE;
1937
1938     if ((empty_hands(creature_ptr, TRUE) & EMPTY_HAND_MAIN) && !can_attack_with_sub_hand(creature_ptr))
1939         return TRUE;
1940
1941     return FALSE;
1942 }
1943
1944 /*
1945  * @brief 非利き手で攻撃可能かどうかを判定する
1946  *        非利き手で攻撃可能とは、非利き手に武器を持っている事に等しい
1947  * @details Exclude martial arts and hand combats from weapons.
1948  */
1949 bool can_attack_with_sub_hand(player_type *creature_ptr)
1950 {
1951     return has_melee_weapon(creature_ptr, INVEN_SUB_HAND);
1952 }
1953
1954 /*
1955  * @brief 両手持ち状態かどうかを判定する
1956  */
1957 bool has_two_handed_weapons(player_type *creature_ptr)
1958 {
1959     if (can_two_hands_wielding(creature_ptr)) {
1960         if (can_attack_with_main_hand(creature_ptr) && (empty_hands(creature_ptr, FALSE) == EMPTY_HAND_SUB)
1961             && object_allow_two_hands_wielding(&creature_ptr->inventory_list[INVEN_MAIN_HAND])) {
1962             return TRUE;
1963         } else if (can_attack_with_sub_hand(creature_ptr) && (empty_hands(creature_ptr, FALSE) == EMPTY_HAND_MAIN)
1964             && object_allow_two_hands_wielding(&creature_ptr->inventory_list[INVEN_SUB_HAND])) {
1965             return TRUE;
1966         }
1967     }
1968     return FALSE;
1969 }
1970
1971 BIT_FLAGS has_lite(player_type *creature_ptr)
1972 {
1973     BIT_FLAGS result = 0L;
1974     if (creature_ptr->pclass == CLASS_NINJA)
1975         return 0L;
1976
1977     if (creature_ptr->pseikaku == PERSONALITY_MUNCHKIN) {
1978         result |= FLAG_CAUSE_PERSONALITY;
1979     }
1980
1981     if (player_race_has_flag(creature_ptr, TR_LITE_1))
1982         result |= FLAG_CAUSE_RACE;
1983
1984     if (creature_ptr->ult_res) {
1985         result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1986     }
1987
1988     if (creature_ptr->special_defense & KATA_MUSOU) {
1989         result |= FLAG_CAUSE_BATTLE_FORM;
1990     }
1991
1992     result |= has_sh_fire(creature_ptr);
1993
1994     return result;
1995 }
1996
1997 /*
1998  * @brief 両手持ちボーナスがもらえないかどうかを判定する。 / Does *not * get two hand wielding bonus.
1999  * @details
2000  *  Only can get hit bonuses when wieids an enough light weapon which is lighter than 5 times of weight limit.
2001  *  If its weight is 10 times heavier or more than weight limit, gets hit penalty in calc_to_hit().
2002  */
2003 bool has_disable_two_handed_bonus(player_type *creature_ptr, int i)
2004 {
2005     if (has_melee_weapon(creature_ptr, INVEN_MAIN_HAND + i) && has_two_handed_weapons(creature_ptr)) {
2006         object_type *o_ptr = &creature_ptr->inventory_list[INVEN_MAIN_HAND + i];
2007         int limit = calc_weapon_weight_limit(creature_ptr) * 2;
2008
2009         /* Enable when two hand wields an enough light weapon */
2010         if (limit >= o_ptr->weight / 5)
2011             return FALSE;
2012     }
2013
2014     /* Disable when empty hands, one hand wieldings and heavy weapons */
2015     return TRUE;
2016 }
2017
2018 /*!
2019  * @brief ふさわしくない武器を持っているかどうかを返す。
2020  * @todo 相応しい時にFALSEで相応しくない時にTRUEという負論理は良くない、後で修正する
2021  */
2022 bool has_icky_wield_weapon(player_type *creature_ptr, int i)
2023 {
2024     BIT_FLAGS flgs[TR_FLAG_SIZE];
2025     object_type *o_ptr = &creature_ptr->inventory_list[INVEN_MAIN_HAND + i];
2026     object_flags(creature_ptr, o_ptr, flgs);
2027
2028     bool has_no_weapon = (o_ptr->tval == TV_NONE) || (o_ptr->tval == TV_SHIELD);
2029     if (creature_ptr->pclass == CLASS_PRIEST) {
2030         bool is_suitable_weapon = has_flag(flgs, TR_BLESSED);
2031         is_suitable_weapon |= (o_ptr->tval != TV_SWORD) && (o_ptr->tval != TV_POLEARM);
2032         return !has_no_weapon && !is_suitable_weapon;
2033     }
2034
2035     if (creature_ptr->pclass == CLASS_SORCERER) {
2036         bool is_suitable_weapon = o_ptr->tval == TV_HAFTED;
2037         is_suitable_weapon &= (o_ptr->sval == SV_WIZSTAFF) || (o_ptr->sval == SV_NAMAKE_HAMMER);
2038         return !has_no_weapon && !is_suitable_weapon;
2039     }
2040
2041     if (has_not_monk_weapon(creature_ptr, i) || has_not_ninja_weapon(creature_ptr, i))
2042         return TRUE;
2043
2044     return FALSE;
2045 }
2046
2047 bool has_riding_wield_weapon(player_type *creature_ptr, int i)
2048 {
2049     object_type *o_ptr;
2050     BIT_FLAGS flgs[TR_FLAG_SIZE];
2051     o_ptr = &creature_ptr->inventory_list[INVEN_MAIN_HAND + i];
2052     object_flags(creature_ptr, o_ptr, flgs);
2053     if (creature_ptr->riding != 0 && !(o_ptr->tval == TV_POLEARM) && ((o_ptr->sval == SV_LANCE) || (o_ptr->sval == SV_HEAVY_LANCE))
2054         && !has_flag(flgs, TR_RIDING)) {
2055         return TRUE;
2056     }
2057     return FALSE;
2058 }
2059
2060 bool has_not_ninja_weapon(player_type *creature_ptr, int i)
2061 {
2062     if (!has_melee_weapon(creature_ptr, INVEN_MAIN_HAND + i)) {
2063         return FALSE;
2064     }
2065     int tval = creature_ptr->inventory_list[INVEN_MAIN_HAND + i].tval - TV_WEAPON_BEGIN;
2066     OBJECT_SUBTYPE_VALUE sval = creature_ptr->inventory_list[INVEN_MAIN_HAND + i].sval;
2067     return creature_ptr->pclass == CLASS_NINJA
2068         && !((s_info[CLASS_NINJA].w_max[tval][sval] > WEAPON_EXP_BEGINNER) && (creature_ptr->inventory_list[INVEN_SUB_HAND - i].tval != TV_SHIELD));
2069 }
2070
2071 bool has_not_monk_weapon(player_type *creature_ptr, int i)
2072 {
2073     if (!has_melee_weapon(creature_ptr, INVEN_MAIN_HAND + i)) {
2074         return FALSE;
2075     }
2076     int tval = creature_ptr->inventory_list[INVEN_MAIN_HAND + i].tval - TV_WEAPON_BEGIN;
2077     OBJECT_SUBTYPE_VALUE sval = creature_ptr->inventory_list[INVEN_MAIN_HAND + i].sval;
2078     return ((creature_ptr->pclass == CLASS_MONK) || (creature_ptr->pclass == CLASS_FORCETRAINER)) && !(s_info[creature_ptr->pclass].w_max[tval][sval]);
2079 }
2080
2081 bool has_good_luck(player_type *creature_ptr)
2082 {
2083     return (creature_ptr->pseikaku == PERSONALITY_LUCKY) || (creature_ptr->muta.has(MUTA::GOOD_LUCK));
2084 }
2085
2086 BIT_FLAGS player_aggravate_state(player_type *creature_ptr)
2087 {
2088     if (creature_ptr->cursed & TRC_AGGRAVATE) {
2089         if ((is_specific_player_race(creature_ptr, RACE_S_FAIRY)) && (creature_ptr->pseikaku != PERSONALITY_SEXY)) {
2090             return AGGRAVATE_S_FAIRY;
2091         }
2092         return AGGRAVATE_NORMAL;
2093     }
2094
2095     return AGGRAVATE_NONE;
2096 }
2097
2098 bool has_aggravate(player_type *creature_ptr)
2099 {
2100     return player_aggravate_state(creature_ptr) == AGGRAVATE_NORMAL;
2101 }