1 #include "player/player-status-flags.h"
2 #include "artifact/fixed-art-types.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-speed.h"
18 #include "player-status/player-stealth.h"
19 #include "player/attack-defense-types.h"
20 #include "player/mimic-info-table.h"
21 #include "player/player-class.h"
22 #include "player/player-race-types.h"
23 #include "player/player-race.h"
24 #include "player/player-skill.h"
25 #include "player/player-status.h"
26 #include "player/race-info-table.h"
27 #include "player/special-defense-types.h"
28 #include "realm/realm-hex-numbers.h"
29 #include "realm/realm-song-numbers.h"
30 #include "realm/realm-types.h"
31 #include "spell-realm/spells-hex.h"
32 #include "sv-definition/sv-weapon-types.h"
33 #include "system/floor-type-definition.h"
34 #include "system/monster-type-definition.h"
35 #include "system/object-type-definition.h"
36 #include "util/bit-flags-calculator.h"
37 #include "util/quarks.h"
38 #include "util/string-processor.h"
40 BIT_FLAGS convert_inventory_slot_type_to_flag_cause(inventory_slot_type inventory_slot)
42 switch (inventory_slot) {
44 return FLAG_CAUSE_INVEN_MAIN_HAND;
46 return FLAG_CAUSE_INVEN_SUB_HAND;
48 return FLAG_CAUSE_INVEN_BOW;
50 return FLAG_CAUSE_INVEN_MAIN_RING;
52 return FLAG_CAUSE_INVEN_SUB_RING;
54 return FLAG_CAUSE_INVEN_NECK;
56 return FLAG_CAUSE_INVEN_LITE;
58 return FLAG_CAUSE_INVEN_BODY;
60 return FLAG_CAUSE_INVEN_OUTER;
62 return FLAG_CAUSE_INVEN_HEAD;
64 return FLAG_CAUSE_INVEN_ARMS;
66 return FLAG_CAUSE_INVEN_FEET;
74 * @brief 装備による所定の特性フラグを得ているかを一括して取得する関数。
76 BIT_FLAGS check_equipment_flags(player_type *creature_ptr, tr_type tr_flag)
79 BIT_FLAGS flgs[TR_FLAG_SIZE];
80 BIT_FLAGS result = 0L;
81 for (int i = INVEN_MAIN_HAND; i < INVEN_TOTAL; i++) {
82 o_ptr = &creature_ptr->inventory_list[i];
86 object_flags(creature_ptr, o_ptr, flgs);
88 if (has_flag(flgs, tr_flag))
89 set_bits(result, convert_inventory_slot_type_to_flag_cause(static_cast<inventory_slot_type>(i)));
94 BIT_FLAGS player_flags_brand_pois(player_type *creature_ptr)
96 BIT_FLAGS result = check_equipment_flags(creature_ptr, TR_BRAND_POIS);
98 if (creature_ptr->special_attack & ATTACK_POIS)
99 set_bits(result, FLAG_CAUSE_MAGIC_TIME_EFFECT);
104 BIT_FLAGS player_flags_brand_acid(player_type *creature_ptr)
106 BIT_FLAGS result = check_equipment_flags(creature_ptr, TR_BRAND_ACID);
108 if (creature_ptr->special_attack & ATTACK_ACID)
109 set_bits(result, FLAG_CAUSE_MAGIC_TIME_EFFECT);
114 BIT_FLAGS player_flags_brand_elec(player_type *creature_ptr)
116 BIT_FLAGS result = check_equipment_flags(creature_ptr, TR_BRAND_ELEC);
118 if (creature_ptr->special_attack & ATTACK_ELEC)
119 set_bits(result, FLAG_CAUSE_MAGIC_TIME_EFFECT);
124 BIT_FLAGS player_flags_brand_fire(player_type *creature_ptr)
126 BIT_FLAGS result = check_equipment_flags(creature_ptr, TR_BRAND_FIRE);
128 if (creature_ptr->special_attack & ATTACK_FIRE)
129 set_bits(result, FLAG_CAUSE_MAGIC_TIME_EFFECT);
134 BIT_FLAGS player_flags_brand_cold(player_type *creature_ptr)
136 BIT_FLAGS result = check_equipment_flags(creature_ptr, TR_BRAND_COLD);
138 if (creature_ptr->special_attack & ATTACK_COLD)
139 set_bits(result, FLAG_CAUSE_MAGIC_TIME_EFFECT);
145 * @brief プレイヤーの所持するフラグのうち、tr_flagに対応するものを返す
146 * @param creature_ptr 判定対象のクリーチャー参照ポインタ
147 * @param tr_flag 要求する装備フラグ
149 BIT_FLAGS get_player_flags(player_type *creature_ptr, tr_type tr_flag)
153 return PlayerStrength(creature_ptr).get_all_flags();
155 return PlayerIntelligence(creature_ptr).get_all_flags();
157 return PlayerWisdom(creature_ptr).get_all_flags();
159 return PlayerDextarity(creature_ptr).get_all_flags();
161 return PlayerConstitution(creature_ptr).get_all_flags();
163 return PlayerCharisma(creature_ptr).get_all_flags();
164 case TR_MAGIC_MASTERY:
165 return has_magic_mastery(creature_ptr);
166 case TR_FORCE_WEAPON:
167 return check_equipment_flags(creature_ptr, tr_flag);
169 return PlayerStealth(creature_ptr).get_all_flags();
173 return has_infra_vision(creature_ptr);
177 return PlayerSpeed(creature_ptr).get_all_flags();
192 return check_equipment_flags(creature_ptr, tr_flag);
194 return has_impact(creature_ptr);
196 return player_flags_brand_pois(creature_ptr);
198 return player_flags_brand_acid(creature_ptr);
200 return player_flags_brand_elec(creature_ptr);
202 return player_flags_brand_fire(creature_ptr);
204 return player_flags_brand_cold(creature_ptr);
207 return has_sustain_str(creature_ptr);
209 return has_sustain_int(creature_ptr);
211 return has_sustain_wis(creature_ptr);
213 return has_sustain_dex(creature_ptr);
215 return has_sustain_con(creature_ptr);
217 return has_sustain_chr(creature_ptr);
219 return check_equipment_flags(creature_ptr, tr_flag);
221 return has_easy_spell(creature_ptr);
223 return has_immune_acid(creature_ptr);
225 return has_immune_elec(creature_ptr);
227 return has_immune_fire(creature_ptr);
229 return has_immune_cold(creature_ptr);
231 return check_equipment_flags(creature_ptr, tr_flag);
233 return has_reflect(creature_ptr);
235 return has_free_act(creature_ptr);
237 return has_hold_exp(creature_ptr);
239 return has_resist_acid(creature_ptr);
241 return has_resist_elec(creature_ptr);
243 return has_resist_fire(creature_ptr);
245 return has_resist_cold(creature_ptr);
247 return has_resist_pois(creature_ptr);
249 return has_resist_fear(creature_ptr);
251 return has_resist_lite(creature_ptr);
253 return has_resist_dark(creature_ptr);
255 return has_resist_blind(creature_ptr);
257 return has_resist_conf(creature_ptr);
259 return has_resist_sound(creature_ptr);
261 return has_resist_shard(creature_ptr);
263 return has_resist_neth(creature_ptr);
265 return has_resist_nexus(creature_ptr);
267 return has_resist_chaos(creature_ptr);
269 return has_resist_disen(creature_ptr);
271 return has_resist_time(creature_ptr);
273 return has_resist_water(creature_ptr);
276 return has_sh_fire(creature_ptr);
278 return has_sh_elec(creature_ptr);
280 return check_equipment_flags(creature_ptr, tr_flag);
282 return has_sh_cold(creature_ptr);
284 return has_anti_tele(creature_ptr);
286 return has_anti_magic(creature_ptr);
288 return has_dec_mana(creature_ptr);
290 return check_equipment_flags(creature_ptr, tr_flag);
292 return has_warning(creature_ptr);
295 return check_equipment_flags(creature_ptr, tr_flag);
299 return has_levitation(creature_ptr);
301 return has_lite(creature_ptr);
303 return has_see_inv(creature_ptr);
305 return has_esp_telepathy(creature_ptr);
307 return has_slow_digest(creature_ptr);
309 return has_regenerate(creature_ptr);
311 return has_xtra_might(creature_ptr);
320 return check_equipment_flags(creature_ptr, tr_flag);
324 return has_bless_blade(creature_ptr);
336 return check_equipment_flags(creature_ptr, tr_flag);
338 return has_esp_animal(creature_ptr);
340 return has_esp_undead(creature_ptr);
342 return has_esp_demon(creature_ptr);
344 return has_esp_orc(creature_ptr);
346 return has_esp_troll(creature_ptr);
348 return has_esp_giant(creature_ptr);
350 return has_esp_dragon(creature_ptr);
352 return has_esp_human(creature_ptr);
354 return has_esp_evil(creature_ptr);
356 return has_esp_good(creature_ptr);
357 case TR_ESP_NONLIVING:
358 return has_esp_nonliving(creature_ptr);
360 return has_esp_unique(creature_ptr);
362 case TR_FIXED_FLAVOR:
383 return check_equipment_flags(creature_ptr, tr_flag);
384 case TR_MIGHTY_THROW:
385 return has_mighty_throw(creature_ptr);
386 case TR_EASY2_WEAPON:
387 return has_easy2_weapon(creature_ptr);
389 return has_down_saving(creature_ptr);
391 return has_no_ac(creature_ptr);
393 return has_heavy_spell(creature_ptr);
394 case TR_INVULN_ARROW:
395 return has_invuln_arrow(creature_ptr);
398 return check_equipment_flags(creature_ptr, tr_flag);
407 * @brief クリーチャーが壁破壊進行を持っているかを返す。
409 bool has_kill_wall(player_type *creature_ptr)
411 if (creature_ptr->mimic_form == MIMIC_DEMON_LORD || music_singing(creature_ptr, MUSIC_WALL)) {
415 if (creature_ptr->riding) {
416 monster_type *riding_m_ptr = &creature_ptr->current_floor_ptr->m_list[creature_ptr->riding];
417 monster_race *riding_r_ptr = &r_info[riding_m_ptr->r_idx];
418 if (riding_r_ptr->flags2 & RF2_KILL_WALL)
426 * @brief クリーチャーが壁通過を持っているかを返す。
427 * @param creature_ptr 判定対象のクリーチャー参照ポインタ
430 * * 時限で幽体化、壁抜けをもつか種族幽霊ならばひとまずTRUE。
431 * * 但し騎乗中は乗騎が壁抜けを持っていなければ不能になる。
433 bool has_pass_wall(player_type *creature_ptr)
437 if (creature_ptr->wraith_form || creature_ptr->tim_pass_wall || (!creature_ptr->mimic_form && creature_ptr->prace == RACE_SPECTRE)) {
441 if (creature_ptr->riding) {
442 monster_type *riding_m_ptr = &creature_ptr->current_floor_ptr->m_list[creature_ptr->riding];
443 monster_race *riding_r_ptr = &r_info[riding_m_ptr->r_idx];
444 if (!(riding_r_ptr->flags2 & RF2_PASS_WALL))
452 * @brief クリーチャーが強力射を持っているかを返す。
453 * @param creature_ptr 判定対象のクリーチャー参照ポインタ
454 * @return 持っていたら所持前提ビットフラグを返す。
456 BIT_FLAGS has_xtra_might(player_type *creature_ptr)
458 BIT_FLAGS result = 0L;
459 result |= check_equipment_flags(creature_ptr, TR_XTRA_MIGHT);
464 * @brief クリーチャーが赤外線視力修正を持っているかを返す。
465 * @param creature_ptr 判定対象のクリーチャー参照ポインタ
466 * @return 持っていたら所持前提ビットフラグを返す。
467 * @details 種族修正は0より大きければTRUEとする。
469 BIT_FLAGS has_infra_vision(player_type *creature_ptr)
471 BIT_FLAGS result = 0L;
472 const player_race *tmp_rp_ptr;
474 if (creature_ptr->mimic_form)
475 tmp_rp_ptr = &mimic_info[creature_ptr->mimic_form];
477 tmp_rp_ptr = &race_info[creature_ptr->prace];
479 if (tmp_rp_ptr->infra > 0)
480 result |= FLAG_CAUSE_RACE;
482 if (creature_ptr->muta.has(MUTA::INFRAVIS))
483 result |= FLAG_CAUSE_MUTATION;
485 if (creature_ptr->tim_infra)
486 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
488 result |= check_equipment_flags(creature_ptr, TR_INFRA);
493 * @brief クリーチャーが邪悪感知を持っているかを返す。
494 * @param creature_ptr 判定対象のクリーチャー参照ポインタ
495 * @return 持っていたら所持前提ビットフラグを返す。
497 BIT_FLAGS has_esp_evil(player_type *creature_ptr)
499 BIT_FLAGS result = 0L;
500 if (creature_ptr->realm1 == REALM_HEX) {
501 if (hex_spelling(creature_ptr, HEX_DETECT_EVIL))
502 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
504 result |= check_equipment_flags(creature_ptr, TR_ESP_EVIL);
509 * @brief クリーチャーが自然界の動物感知を持っているかを返す。
510 * @param creature_ptr 判定対象のクリーチャー参照ポインタ
511 * @return 持っていたら所持前提ビットフラグを返す。
513 BIT_FLAGS has_esp_animal(player_type *creature_ptr)
515 return check_equipment_flags(creature_ptr, TR_ESP_ANIMAL);
519 * @brief クリーチャーがアンデッド感知を持っているかを返す。
520 * @param creature_ptr 判定対象のクリーチャー参照ポインタ
521 * @return 持っていたら所持前提ビットフラグを返す。
523 BIT_FLAGS has_esp_undead(player_type *creature_ptr)
525 return check_equipment_flags(creature_ptr, TR_ESP_UNDEAD);
529 * @brief クリーチャーが悪魔感知を持っているかを返す。
530 * @param creature_ptr 判定対象のクリーチャー参照ポインタ
531 * @return 持っていたら所持前提ビットフラグを返す。
533 BIT_FLAGS has_esp_demon(player_type *creature_ptr)
535 return check_equipment_flags(creature_ptr, TR_ESP_DEMON);
539 * @brief クリーチャーがオーク感知を持っているかを返す。
540 * @param creature_ptr 判定対象のクリーチャー参照ポインタ
541 * @return 持っていたら所持前提ビットフラグを返す。
543 BIT_FLAGS has_esp_orc(player_type *creature_ptr)
545 return check_equipment_flags(creature_ptr, TR_ESP_ORC);
549 * @brief クリーチャーがトロル感知を持っているかを返す。
550 * @param creature_ptr 判定対象のクリーチャー参照ポインタ
551 * @return 持っていたら所持前提ビットフラグを返す。
553 BIT_FLAGS has_esp_troll(player_type *creature_ptr)
555 return check_equipment_flags(creature_ptr, TR_ESP_TROLL);
559 * @brief クリーチャーが巨人感知を持っているかを返す。
560 * @param creature_ptr 判定対象のクリーチャー参照ポインタ
561 * @return 持っていたら所持前提ビットフラグを返す。
563 BIT_FLAGS has_esp_giant(player_type *creature_ptr)
565 return check_equipment_flags(creature_ptr, TR_ESP_GIANT);
569 * @brief クリーチャーがドラゴン感知を持っているかを返す。
570 * @param creature_ptr 判定対象のクリーチャー参照ポインタ
571 * @return 持っていたら所持前提ビットフラグを返す。
573 BIT_FLAGS has_esp_dragon(player_type *creature_ptr)
575 return check_equipment_flags(creature_ptr, TR_ESP_DRAGON);
579 * @brief クリーチャーが人間感知を持っているかを返す。
580 * @param creature_ptr 判定対象のクリーチャー参照ポインタ
581 * @return 持っていたら所持前提ビットフラグを返す。
583 BIT_FLAGS has_esp_human(player_type *creature_ptr)
585 return check_equipment_flags(creature_ptr, TR_ESP_HUMAN);
589 * @brief クリーチャーが善良感知を持っているかを返す。
590 * @param creature_ptr 判定対象のクリーチャー参照ポインタ
591 * @return 持っていたら所持前提ビットフラグを返す。
593 BIT_FLAGS has_esp_good(player_type *creature_ptr)
595 return check_equipment_flags(creature_ptr, TR_ESP_GOOD);
599 * @brief クリーチャーが無生物感知を持っているかを返す。
600 * @param creature_ptr 判定対象のクリーチャー参照ポインタ
601 * @return 持っていたら所持前提ビットフラグを返す。
603 BIT_FLAGS has_esp_nonliving(player_type *creature_ptr)
605 return check_equipment_flags(creature_ptr, TR_ESP_NONLIVING);
609 * @brief クリーチャーがユニーク感知を持っているかを返す。
610 * @param creature_ptr 判定対象のクリーチャー参照ポインタ
611 * @return 持っていたら所持前提ビットフラグを返す。
613 BIT_FLAGS has_esp_unique(player_type *creature_ptr)
615 return check_equipment_flags(creature_ptr, TR_ESP_UNIQUE);
619 * @brief クリーチャーがテレパシーを持っているかを返す。
620 * @param creature_ptr 判定対象のクリーチャー参照ポインタ
621 * @return 持っていたら所持前提ビットフラグを返す。
623 BIT_FLAGS has_esp_telepathy(player_type *creature_ptr)
625 BIT_FLAGS result = 0L;
627 if (is_time_limit_esp(creature_ptr) || creature_ptr->ult_res) {
628 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
630 if (creature_ptr->special_defense & KATA_MUSOU) {
631 result |= FLAG_CAUSE_BATTLE_FORM;
634 if (creature_ptr->muta.has(MUTA::ESP)) {
635 result |= FLAG_CAUSE_MUTATION;
638 if (is_specific_player_race(creature_ptr, RACE_MIND_FLAYER) && creature_ptr->lev > 29)
639 result |= FLAG_CAUSE_RACE;
641 if (is_specific_player_race(creature_ptr, RACE_SPECTRE) && creature_ptr->lev > 34)
642 result |= FLAG_CAUSE_RACE;
644 if (creature_ptr->pclass == CLASS_MINDCRAFTER && creature_ptr->lev > 39)
645 result |= FLAG_CAUSE_CLASS;
647 if (creature_ptr->mimic_form == MIMIC_DEMON_LORD) {
648 result |= FLAG_CAUSE_RACE;
651 result |= check_equipment_flags(creature_ptr, TR_TELEPATHY);
655 BIT_FLAGS has_bless_blade(player_type *creature_ptr)
657 return check_equipment_flags(creature_ptr, TR_BLESSED);
660 BIT_FLAGS has_easy2_weapon(player_type *creature_ptr)
662 return check_equipment_flags(creature_ptr, TR_EASY2_WEAPON);
665 BIT_FLAGS has_down_saving(player_type *creature_ptr)
667 return check_equipment_flags(creature_ptr, TR_DOWN_SAVING);
670 BIT_FLAGS has_no_ac(player_type *creature_ptr)
672 return check_equipment_flags(creature_ptr, TR_NO_AC);
675 BIT_FLAGS has_invuln_arrow(player_type *creature_ptr)
677 BIT_FLAGS result = 0L;
678 if (creature_ptr->blind)
680 result |= check_equipment_flags(creature_ptr, TR_INVULN_ARROW);
684 void check_no_flowed(player_type *creature_ptr)
687 bool has_sw = FALSE, has_kabe = FALSE;
688 OBJECT_IDX this_o_idx, next_o_idx = 0;
690 creature_ptr->no_flowed = FALSE;
692 if (has_pass_wall(creature_ptr) && !has_kill_wall(creature_ptr)) {
693 creature_ptr->no_flowed = TRUE;
697 if (!creature_ptr->realm1 || creature_ptr->pclass == CLASS_ELEMENTALIST) {
698 creature_ptr->no_flowed = FALSE;
702 for (int i = 0; i < INVEN_PACK; i++) {
703 if ((creature_ptr->inventory_list[i].tval == TV_NATURE_BOOK) && (creature_ptr->inventory_list[i].sval == 2))
705 if ((creature_ptr->inventory_list[i].tval == TV_CRAFT_BOOK) && (creature_ptr->inventory_list[i].sval == 2))
709 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) {
710 o_ptr = &creature_ptr->current_floor_ptr->o_list[this_o_idx];
711 next_o_idx = o_ptr->next_o_idx;
713 if ((o_ptr->tval == TV_NATURE_BOOK) && (o_ptr->sval == 2))
715 if ((o_ptr->tval == TV_CRAFT_BOOK) && (o_ptr->sval == 2))
719 if (has_sw && ((creature_ptr->realm1 == REALM_NATURE) || (creature_ptr->realm2 == REALM_NATURE) || (creature_ptr->pclass == CLASS_SORCERER))) {
720 const magic_type *s_ptr = &mp_ptr->info[REALM_NATURE - 1][SPELL_SW];
721 if (creature_ptr->lev >= s_ptr->slevel)
722 creature_ptr->no_flowed = TRUE;
725 if (has_kabe && ((creature_ptr->realm1 == REALM_CRAFT) || (creature_ptr->realm2 == REALM_CRAFT) || (creature_ptr->pclass == CLASS_SORCERER))) {
726 const magic_type *s_ptr = &mp_ptr->info[REALM_CRAFT - 1][SPELL_WALL];
727 if (creature_ptr->lev >= s_ptr->slevel)
728 creature_ptr->no_flowed = TRUE;
732 BIT_FLAGS has_mighty_throw(player_type *creature_ptr)
734 return check_equipment_flags(creature_ptr, TR_MIGHTY_THROW);
737 BIT_FLAGS has_dec_mana(player_type *creature_ptr)
739 return check_equipment_flags(creature_ptr, TR_DEC_MANA);
742 BIT_FLAGS has_reflect(player_type *creature_ptr)
744 BIT_FLAGS result = 0L;
746 if (creature_ptr->pclass == CLASS_BERSERKER && creature_ptr->lev > 39)
747 result |= FLAG_CAUSE_CLASS;
749 if (creature_ptr->pclass == CLASS_MIRROR_MASTER && creature_ptr->lev > 39)
750 result |= FLAG_CAUSE_CLASS;
752 if (creature_ptr->special_defense & KAMAE_GENBU || creature_ptr->special_defense & KATA_MUSOU) {
753 result |= FLAG_CAUSE_BATTLE_FORM;
756 if (creature_ptr->ult_res || creature_ptr->wraith_form || creature_ptr->magicdef || creature_ptr->tim_reflect) {
757 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
760 if (has_element_resist(creature_ptr, ElementRealm::EARTH, 30))
761 result |= FLAG_CAUSE_CLASS;
763 result |= check_equipment_flags(creature_ptr, TR_REFLECT);
767 BIT_FLAGS has_see_nocto(player_type *creature_ptr)
769 return (creature_ptr->pclass == CLASS_NINJA) ? FLAG_CAUSE_CLASS : FLAG_CAUSE_NONE;
772 BIT_FLAGS has_warning(player_type *creature_ptr)
774 BIT_FLAGS result = 0L;
776 BIT_FLAGS flgs[TR_FLAG_SIZE];
778 for (int i = INVEN_MAIN_HAND; i < INVEN_TOTAL; i++) {
779 o_ptr = &creature_ptr->inventory_list[i];
783 object_flags(creature_ptr, o_ptr, flgs);
785 if (has_flag(flgs, TR_WARNING)) {
786 if (!o_ptr->inscription || !(angband_strchr(quark_str(o_ptr->inscription), '$')))
787 set_bits(result, convert_inventory_slot_type_to_flag_cause(static_cast<inventory_slot_type>(i)));
793 BIT_FLAGS has_anti_magic(player_type *creature_ptr)
795 return check_equipment_flags(creature_ptr, TR_NO_MAGIC);
798 BIT_FLAGS has_anti_tele(player_type *creature_ptr)
800 return check_equipment_flags(creature_ptr, TR_NO_TELE);
803 BIT_FLAGS has_sh_fire(player_type *creature_ptr)
805 BIT_FLAGS result = 0L;
807 if (creature_ptr->muta.has(MUTA::FIRE_BODY)) {
808 result |= FLAG_CAUSE_MUTATION;
811 if (creature_ptr->mimic_form == MIMIC_DEMON_LORD) {
812 result |= FLAG_CAUSE_RACE;
815 if (creature_ptr->special_defense & KAMAE_SEIRYU || creature_ptr->special_defense & KATA_MUSOU) {
816 result |= FLAG_CAUSE_BATTLE_FORM;
819 if (hex_spelling(creature_ptr, HEX_DEMON_AURA) || creature_ptr->ult_res || creature_ptr->tim_sh_fire) {
820 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
823 result |= check_equipment_flags(creature_ptr, TR_SH_FIRE);
827 BIT_FLAGS has_sh_elec(player_type *creature_ptr)
829 BIT_FLAGS result = 0L;
831 if (creature_ptr->muta.has(MUTA::ELEC_TOUC))
832 result |= FLAG_CAUSE_MUTATION;
834 if (hex_spelling(creature_ptr, HEX_SHOCK_CLOAK) || creature_ptr->ult_res) {
835 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
838 if (creature_ptr->special_defense & KAMAE_SEIRYU || (creature_ptr->special_defense & KATA_MUSOU)) {
839 result |= FLAG_CAUSE_BATTLE_FORM;
842 result |= check_equipment_flags(creature_ptr, TR_SH_ELEC);
846 BIT_FLAGS has_sh_cold(player_type *creature_ptr)
848 BIT_FLAGS result = 0L;
850 if (creature_ptr->special_defense & KAMAE_SEIRYU || creature_ptr->special_defense & KATA_MUSOU) {
851 result |= FLAG_CAUSE_BATTLE_FORM;
854 if (creature_ptr->ult_res || hex_spelling(creature_ptr, HEX_ICE_ARMOR)) {
855 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
858 result |= check_equipment_flags(creature_ptr, TR_SH_COLD);
862 BIT_FLAGS has_easy_spell(player_type *creature_ptr)
864 return check_equipment_flags(creature_ptr, TR_EASY_SPELL);
867 BIT_FLAGS has_heavy_spell(player_type *creature_ptr)
869 return check_equipment_flags(creature_ptr, TR_HEAVY_SPELL);
872 BIT_FLAGS has_hold_exp(player_type *creature_ptr)
874 BIT_FLAGS result = 0L;
876 if (creature_ptr->pseikaku == PERSONALITY_MUNCHKIN) {
877 result |= FLAG_CAUSE_PERSONALITY;
880 if (creature_ptr->mimic_form == MIMIC_DEMON || creature_ptr->mimic_form == MIMIC_DEMON_LORD || creature_ptr->mimic_form == MIMIC_VAMPIRE) {
881 result |= FLAG_CAUSE_RACE;
884 if (is_specific_player_race(creature_ptr, RACE_HOBBIT) || is_specific_player_race(creature_ptr, RACE_SKELETON)
885 || is_specific_player_race(creature_ptr, RACE_ZOMBIE) || is_specific_player_race(creature_ptr, RACE_VAMPIRE)
886 || is_specific_player_race(creature_ptr, RACE_SPECTRE) || is_specific_player_race(creature_ptr, RACE_BALROG)
887 || is_specific_player_race(creature_ptr, RACE_ANDROID)) {
888 result |= FLAG_CAUSE_RACE;
891 if (is_specific_player_race(creature_ptr, RACE_GOLEM)) {
892 if (creature_ptr->lev > 34)
893 result |= FLAG_CAUSE_RACE;
896 if (creature_ptr->special_defense & KATA_MUSOU) {
897 result |= FLAG_CAUSE_BATTLE_FORM;
900 if (creature_ptr->ult_res) {
901 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
904 result |= check_equipment_flags(creature_ptr, TR_HOLD_EXP);
908 BIT_FLAGS has_see_inv(player_type *creature_ptr)
910 BIT_FLAGS result = 0L;
912 if (creature_ptr->pclass == CLASS_NINJA && creature_ptr->lev > 29)
913 result |= FLAG_CAUSE_CLASS;
915 if (creature_ptr->mimic_form == MIMIC_DEMON || creature_ptr->mimic_form == MIMIC_DEMON_LORD || creature_ptr->mimic_form == MIMIC_VAMPIRE) {
916 result |= FLAG_CAUSE_RACE;
917 } else if (is_specific_player_race(creature_ptr, RACE_HIGH_ELF) || is_specific_player_race(creature_ptr, RACE_GOLEM)
918 || is_specific_player_race(creature_ptr, RACE_SKELETON) || is_specific_player_race(creature_ptr, RACE_ZOMBIE)
919 || is_specific_player_race(creature_ptr, RACE_SPECTRE) || is_specific_player_race(creature_ptr, RACE_ARCHON)) {
920 result |= FLAG_CAUSE_RACE;
921 } else if (is_specific_player_race(creature_ptr, RACE_DARK_ELF) && creature_ptr->lev > 19) {
922 result |= FLAG_CAUSE_RACE;
923 } else if (is_specific_player_race(creature_ptr, RACE_MIND_FLAYER) && creature_ptr->lev > 14) {
924 result |= FLAG_CAUSE_RACE;
925 } else if ((is_specific_player_race(creature_ptr, RACE_IMP) || is_specific_player_race(creature_ptr, RACE_BALROG)) && creature_ptr->lev > 9) {
926 result |= FLAG_CAUSE_RACE;
929 if (creature_ptr->special_defense & KATA_MUSOU) {
930 result |= FLAG_CAUSE_BATTLE_FORM;
933 if (creature_ptr->ult_res || creature_ptr->tim_invis) {
934 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
937 result |= check_equipment_flags(creature_ptr, TR_SEE_INVIS);
941 BIT_FLAGS has_magic_mastery(player_type *creature_ptr)
943 return check_equipment_flags(creature_ptr, TR_MAGIC_MASTERY);
946 BIT_FLAGS has_free_act(player_type *creature_ptr)
948 BIT_FLAGS result = 0L;
950 if (creature_ptr->muta.has(MUTA::MOTION))
951 result |= FLAG_CAUSE_MUTATION;
953 if (is_specific_player_race(creature_ptr, RACE_GNOME) || is_specific_player_race(creature_ptr, RACE_GOLEM)
954 || is_specific_player_race(creature_ptr, RACE_SPECTRE) || is_specific_player_race(creature_ptr, RACE_ANDROID)) {
955 result |= FLAG_CAUSE_RACE;
958 if (creature_ptr->pclass == CLASS_NINJA && !heavy_armor(creature_ptr)
959 && (!creature_ptr->inventory_list[INVEN_MAIN_HAND].k_idx || can_attack_with_main_hand(creature_ptr))
960 && (!creature_ptr->inventory_list[INVEN_SUB_HAND].k_idx || can_attack_with_sub_hand(creature_ptr))) {
961 if (creature_ptr->lev > 24)
962 result |= FLAG_CAUSE_CLASS;
965 if (creature_ptr->pclass == CLASS_MONK || creature_ptr->pclass == CLASS_FORCETRAINER) {
966 if (!(heavy_armor(creature_ptr))) {
967 if (creature_ptr->lev > 24)
968 result |= FLAG_CAUSE_CLASS;
972 if (creature_ptr->pclass == CLASS_BERSERKER) {
973 result |= FLAG_CAUSE_CLASS;
976 if (creature_ptr->ult_res || creature_ptr->magicdef) {
977 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
980 if (creature_ptr->special_defense & KATA_MUSOU) {
981 result |= FLAG_CAUSE_BATTLE_FORM;
984 result |= check_equipment_flags(creature_ptr, TR_FREE_ACT);
988 BIT_FLAGS has_sustain_str(player_type *creature_ptr)
990 BIT_FLAGS result = 0L;
992 if (creature_ptr->pclass == CLASS_BERSERKER) {
993 result |= FLAG_CAUSE_CLASS;
995 if (is_specific_player_race(creature_ptr, RACE_HALF_TROLL) || is_specific_player_race(creature_ptr, RACE_HALF_OGRE)
996 || is_specific_player_race(creature_ptr, RACE_HALF_GIANT)) {
997 result |= FLAG_CAUSE_RACE;
1000 if (creature_ptr->ult_res) {
1001 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1004 if (creature_ptr->special_defense & KATA_MUSOU) {
1005 result |= FLAG_CAUSE_BATTLE_FORM;
1008 result |= check_equipment_flags(creature_ptr, TR_SUST_STR);
1012 BIT_FLAGS has_sustain_int(player_type *creature_ptr)
1014 BIT_FLAGS result = 0L;
1016 if (is_specific_player_race(creature_ptr, RACE_MIND_FLAYER)) {
1017 result |= FLAG_CAUSE_RACE;
1020 if (creature_ptr->ult_res) {
1021 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1024 if (creature_ptr->special_defense & KATA_MUSOU) {
1025 result |= FLAG_CAUSE_BATTLE_FORM;
1028 result |= check_equipment_flags(creature_ptr, TR_SUST_INT);
1032 BIT_FLAGS has_sustain_wis(player_type *creature_ptr)
1034 BIT_FLAGS result = 0L;
1036 if (creature_ptr->pclass == CLASS_MINDCRAFTER && creature_ptr->lev > 19)
1037 result |= FLAG_CAUSE_CLASS;
1039 if (!creature_ptr->mimic_form && (creature_ptr->prace == RACE_MIND_FLAYER)) {
1040 result |= FLAG_CAUSE_RACE;
1043 if (creature_ptr->ult_res) {
1044 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1047 if (creature_ptr->special_defense & KATA_MUSOU) {
1048 result |= FLAG_CAUSE_BATTLE_FORM;
1051 result |= check_equipment_flags(creature_ptr, TR_SUST_WIS);
1055 BIT_FLAGS has_sustain_dex(player_type *creature_ptr)
1057 BIT_FLAGS result = 0L;
1058 if (creature_ptr->pclass == CLASS_BERSERKER) {
1059 result |= FLAG_CAUSE_CLASS;
1062 if (creature_ptr->pclass == CLASS_NINJA && creature_ptr->lev > 24)
1063 result |= FLAG_CAUSE_CLASS;
1065 if (creature_ptr->ult_res) {
1066 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1069 if (creature_ptr->special_defense & KATA_MUSOU) {
1070 result |= FLAG_CAUSE_BATTLE_FORM;
1073 result |= check_equipment_flags(creature_ptr, TR_SUST_DEX);
1077 BIT_FLAGS has_sustain_con(player_type *creature_ptr)
1079 BIT_FLAGS result = 0L;
1080 if (creature_ptr->pclass == CLASS_BERSERKER) {
1081 result |= FLAG_CAUSE_CLASS;
1084 if (!creature_ptr->mimic_form && (creature_ptr->prace == RACE_AMBERITE || creature_ptr->prace == RACE_DUNADAN)) {
1085 result |= FLAG_CAUSE_RACE;
1088 if (creature_ptr->ult_res) {
1089 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1092 if (creature_ptr->special_defense & KATA_MUSOU) {
1093 result |= FLAG_CAUSE_BATTLE_FORM;
1096 result |= check_equipment_flags(creature_ptr, TR_SUST_CON);
1100 BIT_FLAGS has_sustain_chr(player_type *creature_ptr)
1102 BIT_FLAGS result = 0L;
1104 if (creature_ptr->ult_res) {
1105 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1108 if (creature_ptr->special_defense & KATA_MUSOU) {
1109 result |= FLAG_CAUSE_BATTLE_FORM;
1112 result |= check_equipment_flags(creature_ptr, TR_SUST_CHR);
1116 BIT_FLAGS has_levitation(player_type *creature_ptr)
1118 BIT_FLAGS result = 0L;
1120 if (creature_ptr->muta.has(MUTA::WINGS)) {
1121 result |= FLAG_CAUSE_MUTATION;
1124 if (creature_ptr->mimic_form == MIMIC_DEMON_LORD) {
1125 result |= FLAG_CAUSE_RACE;
1128 if (is_specific_player_race(creature_ptr, RACE_DRACONIAN) || is_specific_player_race(creature_ptr, RACE_SPECTRE)
1129 || is_specific_player_race(creature_ptr, RACE_SPRITE) || is_specific_player_race(creature_ptr, RACE_ARCHON)
1130 || is_specific_player_race(creature_ptr, RACE_S_FAIRY)) {
1131 result |= FLAG_CAUSE_RACE;
1134 if (creature_ptr->special_defense & KAMAE_SEIRYU || creature_ptr->special_defense & KAMAE_SUZAKU || (creature_ptr->special_defense & KATA_MUSOU)) {
1135 result |= FLAG_CAUSE_BATTLE_FORM;
1138 if (creature_ptr->ult_res || creature_ptr->magicdef) {
1139 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1142 if (creature_ptr->tim_levitation) {
1143 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1146 result |= check_equipment_flags(creature_ptr, TR_LEVITATION);
1148 if (creature_ptr->riding) {
1149 monster_type *riding_m_ptr = &creature_ptr->current_floor_ptr->m_list[creature_ptr->riding];
1150 monster_race *riding_r_ptr = &r_info[riding_m_ptr->r_idx];
1151 result = (riding_r_ptr->flags7 & RF7_CAN_FLY) ? FLAG_CAUSE_RIDING : FLAG_CAUSE_NONE;
1156 bool has_can_swim(player_type *creature_ptr)
1158 bool can_swim = FALSE;
1159 if (creature_ptr->riding) {
1160 monster_type *riding_m_ptr = &creature_ptr->current_floor_ptr->m_list[creature_ptr->riding];
1161 monster_race *riding_r_ptr = &r_info[riding_m_ptr->r_idx];
1162 if (riding_r_ptr->flags7 & (RF7_CAN_SWIM | RF7_AQUATIC))
1169 BIT_FLAGS has_slow_digest(player_type *creature_ptr)
1171 BIT_FLAGS result = 0L;
1173 if (creature_ptr->pclass == CLASS_NINJA) {
1174 result |= FLAG_CAUSE_CLASS;
1177 if (creature_ptr->lev > 14 && !creature_ptr->mimic_form && creature_ptr->prace == RACE_HALF_TROLL) {
1178 if (creature_ptr->pclass == CLASS_WARRIOR || creature_ptr->pclass == CLASS_BERSERKER) {
1179 result |= FLAG_CAUSE_CLASS;
1180 /* Let's not make Regeneration
1181 * a disadvantage for the poor warriors who can
1182 * never learn a spell that satisfies hunger (actually
1183 * neither can rogues, but half-trolls are not
1184 * supposed to play rogues) */
1188 if (creature_ptr->special_defense & KATA_MUSOU) {
1189 result |= FLAG_CAUSE_BATTLE_FORM;
1192 if (creature_ptr->ult_res) {
1193 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1196 if (!creature_ptr->mimic_form
1197 && (creature_ptr->prace == RACE_GOLEM || creature_ptr->prace == RACE_ZOMBIE || creature_ptr->prace == RACE_SPECTRE
1198 || creature_ptr->prace == RACE_ANDROID)) {
1199 result |= FLAG_CAUSE_RACE;
1202 result |= check_equipment_flags(creature_ptr, TR_SLOW_DIGEST);
1206 BIT_FLAGS has_regenerate(player_type *creature_ptr)
1208 BIT_FLAGS result = 0L;
1210 if (is_specific_player_race(creature_ptr, RACE_HALF_TROLL) && creature_ptr->lev > 14) {
1211 result |= FLAG_CAUSE_RACE;
1214 if (is_specific_player_race(creature_ptr, RACE_AMBERITE)) {
1215 result |= FLAG_CAUSE_RACE;
1218 if (creature_ptr->pclass == CLASS_WARRIOR && creature_ptr->lev > 44) {
1219 result |= FLAG_CAUSE_RACE;
1222 if (creature_ptr->pclass == CLASS_BERSERKER) {
1223 result |= FLAG_CAUSE_RACE;
1226 if (creature_ptr->muta.has(MUTA::REGEN))
1227 result |= FLAG_CAUSE_MUTATION;
1229 if (creature_ptr->special_defense & KATA_MUSOU) {
1230 result |= FLAG_CAUSE_BATTLE_FORM;
1233 if (hex_spelling(creature_ptr, HEX_DEMON_AURA) || creature_ptr->ult_res || creature_ptr->tim_regen) {
1234 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1237 result |= check_equipment_flags(creature_ptr, TR_REGEN);
1239 if (creature_ptr->muta.has(MUTA::FLESH_ROT))
1245 void update_curses(player_type *creature_ptr)
1248 BIT_FLAGS flgs[TR_FLAG_SIZE];
1249 creature_ptr->cursed = 0L;
1251 if (creature_ptr->pseikaku == PERSONALITY_SEXY)
1252 creature_ptr->cursed |= (TRC_AGGRAVATE);
1254 for (int i = INVEN_MAIN_HAND; i < INVEN_TOTAL; i++) {
1255 o_ptr = &creature_ptr->inventory_list[i];
1258 object_flags(creature_ptr, o_ptr, flgs);
1259 if (has_flag(flgs, TR_AGGRAVATE))
1260 creature_ptr->cursed |= TRC_AGGRAVATE;
1261 if (has_flag(flgs, TR_DRAIN_EXP))
1262 creature_ptr->cursed |= TRC_DRAIN_EXP;
1263 if (has_flag(flgs, TR_TY_CURSE))
1264 creature_ptr->cursed |= TRC_TY_CURSE;
1265 if (has_flag(flgs, TR_ADD_L_CURSE))
1266 creature_ptr->cursed |= TRC_ADD_L_CURSE;
1267 if (has_flag(flgs, TR_ADD_H_CURSE))
1268 creature_ptr->cursed |= TRC_ADD_H_CURSE;
1269 if (has_flag(flgs, TR_DRAIN_HP))
1270 creature_ptr->cursed |= TRC_DRAIN_HP;
1271 if (has_flag(flgs, TR_DRAIN_MANA))
1272 creature_ptr->cursed |= TRC_DRAIN_MANA;
1273 if (has_flag(flgs, TR_CALL_ANIMAL))
1274 creature_ptr->cursed |= TRC_CALL_ANIMAL;
1275 if (has_flag(flgs, TR_CALL_DEMON))
1276 creature_ptr->cursed |= TRC_CALL_DEMON;
1277 if (has_flag(flgs, TR_CALL_DRAGON))
1278 creature_ptr->cursed |= TRC_CALL_DRAGON;
1279 if (has_flag(flgs, TR_CALL_UNDEAD))
1280 creature_ptr->cursed |= TRC_CALL_UNDEAD;
1281 if (has_flag(flgs, TR_COWARDICE))
1282 creature_ptr->cursed |= TRC_COWARDICE;
1283 if (has_flag(flgs, TR_LOW_MELEE))
1284 creature_ptr->cursed |= TRC_LOW_MELEE;
1285 if (has_flag(flgs, TR_LOW_AC))
1286 creature_ptr->cursed |= TRC_LOW_AC;
1287 if (has_flag(flgs, TR_HARD_SPELL))
1288 creature_ptr->cursed |= TRC_HARD_SPELL;
1289 if (has_flag(flgs, TR_FAST_DIGEST))
1290 creature_ptr->cursed |= TRC_FAST_DIGEST;
1291 if (has_flag(flgs, TR_SLOW_REGEN))
1292 creature_ptr->cursed |= TRC_SLOW_REGEN;
1294 creature_ptr->cursed |= (o_ptr->curse_flags & (0xFFFFFFF0L));
1295 if (o_ptr->name1 == ART_CHAINSWORD)
1296 creature_ptr->cursed |= TRC_CHAINSWORD;
1298 if (has_flag(flgs, TR_TELEPORT)) {
1299 if (object_is_cursed(o_ptr))
1300 creature_ptr->cursed |= TRC_TELEPORT;
1302 concptr insc = quark_str(o_ptr->inscription);
1304 /* {.} will stop random teleportation. */
1305 if (o_ptr->inscription && angband_strchr(insc, '.')) {
1307 creature_ptr->cursed |= TRC_TELEPORT_SELF;
1313 if (creature_ptr->cursed & TRC_TELEPORT)
1314 creature_ptr->cursed &= ~(TRC_TELEPORT_SELF);
1317 BIT_FLAGS has_impact(player_type *creature_ptr)
1319 return check_equipment_flags(creature_ptr, TR_IMPACT);
1322 void update_extra_blows(player_type *creature_ptr)
1325 BIT_FLAGS flgs[TR_FLAG_SIZE];
1326 creature_ptr->extra_blows[0] = creature_ptr->extra_blows[1] = 0;
1328 for (int i = INVEN_MAIN_HAND; i < INVEN_TOTAL; i++) {
1329 o_ptr = &creature_ptr->inventory_list[i];
1333 object_flags(creature_ptr, o_ptr, flgs);
1334 if (has_flag(flgs, TR_BLOWS)) {
1335 if ((i == INVEN_MAIN_HAND || i == INVEN_MAIN_RING) && !has_two_handed_weapons(creature_ptr))
1336 creature_ptr->extra_blows[0] += o_ptr->pval;
1337 else if ((i == INVEN_SUB_HAND || i == INVEN_SUB_RING) && !has_two_handed_weapons(creature_ptr))
1338 creature_ptr->extra_blows[1] += o_ptr->pval;
1340 creature_ptr->extra_blows[0] += o_ptr->pval;
1341 creature_ptr->extra_blows[1] += o_ptr->pval;
1347 BIT_FLAGS has_resist_acid(player_type *creature_ptr)
1349 BIT_FLAGS result = 0L;
1351 if (creature_ptr->mimic_form == MIMIC_DEMON_LORD) {
1352 result |= FLAG_CAUSE_RACE;
1353 } else if (is_specific_player_race(creature_ptr, RACE_YEEK) || is_specific_player_race(creature_ptr, RACE_KLACKON)) {
1354 result |= FLAG_CAUSE_RACE;
1355 } else if (is_specific_player_race(creature_ptr, RACE_DRACONIAN) && creature_ptr->lev > 14) {
1356 result |= FLAG_CAUSE_RACE;
1359 if (creature_ptr->special_defense & KAMAE_SEIRYU || creature_ptr->special_defense & KATA_MUSOU) {
1360 result |= FLAG_CAUSE_BATTLE_FORM;
1363 if (creature_ptr->ult_res) {
1364 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1367 if (has_element_resist(creature_ptr, ElementRealm::SEA, 1))
1368 result |= FLAG_CAUSE_CLASS;
1370 result |= has_immune_acid(creature_ptr);
1372 result |= check_equipment_flags(creature_ptr, TR_RES_ACID);
1376 BIT_FLAGS has_vuln_acid(player_type *creature_ptr)
1378 BIT_FLAGS result = 0L;
1379 if (creature_ptr->muta.has(MUTA::VULN_ELEM)) {
1380 result |= FLAG_CAUSE_MUTATION;
1383 if (creature_ptr->special_defense & KATA_KOUKIJIN) {
1384 result |= FLAG_CAUSE_BATTLE_FORM;
1389 BIT_FLAGS has_resist_elec(player_type *creature_ptr)
1391 BIT_FLAGS result = 0L;
1393 if (creature_ptr->mimic_form == MIMIC_DEMON_LORD) {
1394 result |= FLAG_CAUSE_RACE;
1395 } else if (is_specific_player_race(creature_ptr, RACE_DRACONIAN) && creature_ptr->lev > 19) {
1396 result |= FLAG_CAUSE_RACE;
1399 if (creature_ptr->special_defense & KAMAE_SEIRYU || creature_ptr->special_defense & KATA_MUSOU) {
1400 result |= FLAG_CAUSE_BATTLE_FORM;
1403 if (creature_ptr->ult_res) {
1404 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1407 if (has_element_resist(creature_ptr, ElementRealm::SKY, 1))
1408 result |= FLAG_CAUSE_CLASS;
1410 result |= check_equipment_flags(creature_ptr, TR_RES_ELEC);
1411 result |= has_immune_elec(creature_ptr);
1415 BIT_FLAGS has_vuln_elec(player_type *creature_ptr)
1417 BIT_FLAGS result = 0L;
1418 if (creature_ptr->muta.has(MUTA::VULN_ELEM)) {
1419 result |= FLAG_CAUSE_MUTATION;
1422 if (is_specific_player_race(creature_ptr, RACE_ANDROID)) {
1423 result |= FLAG_CAUSE_RACE;
1426 if (creature_ptr->special_defense & KATA_KOUKIJIN) {
1427 result |= FLAG_CAUSE_BATTLE_FORM;
1432 BIT_FLAGS has_resist_fire(player_type *creature_ptr)
1434 BIT_FLAGS result = 0L;
1436 if (creature_ptr->mimic_form == MIMIC_DEMON || creature_ptr->mimic_form == MIMIC_DEMON_LORD) {
1437 result |= FLAG_CAUSE_RACE;
1440 if (is_specific_player_race(creature_ptr, RACE_DRACONIAN) && creature_ptr->lev > 4) {
1441 result |= FLAG_CAUSE_RACE;
1444 if (!creature_ptr->mimic_form && (creature_ptr->prace == RACE_IMP || creature_ptr->prace == RACE_BALROG)) {
1445 result |= FLAG_CAUSE_RACE;
1448 if (creature_ptr->special_defense & KAMAE_SEIRYU || creature_ptr->special_defense & KATA_MUSOU) {
1449 result |= FLAG_CAUSE_BATTLE_FORM;
1452 if (creature_ptr->ult_res) {
1453 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1456 if (has_element_resist(creature_ptr, ElementRealm::FIRE, 1))
1457 result |= FLAG_CAUSE_CLASS;
1459 result |= check_equipment_flags(creature_ptr, TR_RES_FIRE);
1460 result |= has_immune_fire(creature_ptr);
1464 BIT_FLAGS has_vuln_fire(player_type *creature_ptr)
1466 BIT_FLAGS result = 0L;
1467 if (creature_ptr->muta.has(MUTA::VULN_ELEM)) {
1468 result |= FLAG_CAUSE_MUTATION;
1471 if (is_specific_player_race(creature_ptr, RACE_ENT)) {
1472 result |= FLAG_CAUSE_RACE;
1475 if (creature_ptr->special_defense & KATA_KOUKIJIN) {
1476 result |= FLAG_CAUSE_BATTLE_FORM;
1481 BIT_FLAGS has_resist_cold(player_type *creature_ptr)
1483 BIT_FLAGS result = 0L;
1485 if (creature_ptr->mimic_form == MIMIC_DEMON_LORD || creature_ptr->mimic_form == MIMIC_VAMPIRE) {
1486 result |= FLAG_CAUSE_RACE;
1489 if (!creature_ptr->mimic_form && (creature_ptr->prace == RACE_ZOMBIE) && creature_ptr->lev > 4) {
1490 result |= FLAG_CAUSE_RACE;
1493 if ((is_specific_player_race(creature_ptr, RACE_DRACONIAN) || is_specific_player_race(creature_ptr, RACE_SKELETON)) && creature_ptr->lev > 9) {
1494 result |= FLAG_CAUSE_RACE;
1497 if (!creature_ptr->mimic_form && (creature_ptr->prace == RACE_VAMPIRE || creature_ptr->prace == RACE_SPECTRE)) {
1498 result |= FLAG_CAUSE_RACE;
1501 if (creature_ptr->special_defense & KAMAE_SEIRYU || creature_ptr->special_defense & KATA_MUSOU) {
1502 result |= FLAG_CAUSE_BATTLE_FORM;
1505 if (creature_ptr->ult_res) {
1506 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1509 if (has_element_resist(creature_ptr, ElementRealm::ICE, 1))
1510 result |= FLAG_CAUSE_CLASS;
1512 result |= check_equipment_flags(creature_ptr, TR_RES_COLD);
1513 result |= has_immune_cold(creature_ptr);
1517 BIT_FLAGS has_vuln_cold(player_type *creature_ptr)
1519 BIT_FLAGS result = 0L;
1520 if (creature_ptr->muta.has(MUTA::VULN_ELEM)) {
1521 result |= FLAG_CAUSE_MUTATION;
1524 if (creature_ptr->special_defense & KATA_KOUKIJIN) {
1525 result |= FLAG_CAUSE_BATTLE_FORM;
1530 BIT_FLAGS has_resist_pois(player_type *creature_ptr)
1532 BIT_FLAGS result = 0L;
1534 if (creature_ptr->pclass == CLASS_NINJA && creature_ptr->lev > 19)
1535 result |= FLAG_CAUSE_CLASS;
1537 if (creature_ptr->mimic_form == MIMIC_VAMPIRE || creature_ptr->mimic_form == MIMIC_DEMON_LORD) {
1538 result |= FLAG_CAUSE_RACE;
1541 if (is_specific_player_race(creature_ptr, RACE_DRACONIAN) && creature_ptr->lev > 34) {
1542 result |= FLAG_CAUSE_RACE;
1545 if (!creature_ptr->mimic_form
1546 && (creature_ptr->prace == RACE_KOBOLD || creature_ptr->prace == RACE_GOLEM || creature_ptr->prace == RACE_SKELETON
1547 || creature_ptr->prace == RACE_VAMPIRE || creature_ptr->prace == RACE_SPECTRE || creature_ptr->prace == RACE_ANDROID)) {
1548 result |= FLAG_CAUSE_RACE;
1551 if (creature_ptr->special_defense & KAMAE_SEIRYU || creature_ptr->special_defense & KATA_MUSOU) {
1552 result |= FLAG_CAUSE_BATTLE_FORM;
1555 if (creature_ptr->ult_res) {
1556 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1559 if (has_element_resist(creature_ptr, ElementRealm::DEATH, 1))
1560 result |= FLAG_CAUSE_CLASS;
1562 result |= check_equipment_flags(creature_ptr, TR_RES_POIS);
1566 BIT_FLAGS has_resist_conf(player_type *creature_ptr)
1568 BIT_FLAGS result = 0L;
1570 if (creature_ptr->pclass == CLASS_MINDCRAFTER && creature_ptr->lev > 29)
1571 result |= FLAG_CAUSE_CLASS;
1573 if (creature_ptr->pseikaku == PERSONALITY_CHARGEMAN || creature_ptr->pseikaku == PERSONALITY_MUNCHKIN) {
1574 result |= FLAG_CAUSE_PERSONALITY;
1577 if (!creature_ptr->mimic_form && (creature_ptr->prace == RACE_KLACKON || creature_ptr->prace == RACE_BEASTMAN || creature_ptr->prace == RACE_KUTAR)) {
1578 result |= FLAG_CAUSE_RACE;
1581 if (creature_ptr->mimic_form == MIMIC_DEMON_LORD) {
1582 result |= FLAG_CAUSE_RACE;
1585 if (creature_ptr->ult_res || creature_ptr->magicdef) {
1586 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1589 if (creature_ptr->special_defense & KATA_MUSOU) {
1590 result |= FLAG_CAUSE_BATTLE_FORM;
1593 if (has_element_resist(creature_ptr, ElementRealm::CHAOS, 1))
1594 result |= FLAG_CAUSE_CLASS;
1596 result |= check_equipment_flags(creature_ptr, TR_RES_CONF);
1600 BIT_FLAGS has_resist_sound(player_type *creature_ptr)
1602 BIT_FLAGS result = 0L;
1604 if (creature_ptr->pclass == CLASS_BARD) {
1605 result |= FLAG_CAUSE_CLASS;
1608 if (!creature_ptr->mimic_form && (creature_ptr->prace == RACE_CYCLOPS || creature_ptr->prace == RACE_BEASTMAN)) {
1609 result |= FLAG_CAUSE_RACE;
1612 if (creature_ptr->special_defense & KATA_MUSOU) {
1613 result |= FLAG_CAUSE_BATTLE_FORM;
1616 if (creature_ptr->ult_res) {
1617 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1620 result |= check_equipment_flags(creature_ptr, TR_RES_SOUND);
1624 BIT_FLAGS has_resist_lite(player_type *creature_ptr)
1626 BIT_FLAGS result = 0L;
1628 if (!creature_ptr->mimic_form && (creature_ptr->prace == RACE_ELF || creature_ptr->prace == RACE_HIGH_ELF || creature_ptr->prace == RACE_SPRITE)) {
1629 result |= FLAG_CAUSE_RACE;
1632 if (creature_ptr->special_defense & KATA_MUSOU) {
1633 result |= FLAG_CAUSE_BATTLE_FORM;
1636 if (creature_ptr->ult_res) {
1637 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1640 result |= check_equipment_flags(creature_ptr, TR_RES_LITE);
1644 BIT_FLAGS has_vuln_lite(player_type *creature_ptr)
1646 BIT_FLAGS result = 0L;
1647 if (is_specific_player_race(creature_ptr, RACE_S_FAIRY) || is_specific_player_race(creature_ptr, RACE_VAMPIRE)
1648 || (creature_ptr->mimic_form == MIMIC_VAMPIRE)) {
1649 result |= FLAG_CAUSE_RACE;
1652 if (creature_ptr->wraith_form) {
1653 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1659 BIT_FLAGS has_resist_dark(player_type *creature_ptr)
1661 BIT_FLAGS result = 0L;
1663 if (creature_ptr->mimic_form == MIMIC_VAMPIRE) {
1664 result |= FLAG_CAUSE_RACE;
1667 if (!creature_ptr->mimic_form
1668 && (creature_ptr->prace == RACE_HALF_ORC || creature_ptr->prace == RACE_HALF_OGRE || creature_ptr->prace == RACE_NIBELUNG
1669 || creature_ptr->prace == RACE_DARK_ELF || creature_ptr->prace == RACE_VAMPIRE)) {
1670 result |= FLAG_CAUSE_RACE;
1673 if (creature_ptr->special_defense & KATA_MUSOU) {
1674 result |= FLAG_CAUSE_BATTLE_FORM;
1677 if (creature_ptr->ult_res) {
1678 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1681 if (has_element_resist(creature_ptr, ElementRealm::DARKNESS, 1))
1682 result |= FLAG_CAUSE_CLASS;
1684 result |= check_equipment_flags(creature_ptr, TR_RES_DARK);
1688 BIT_FLAGS has_resist_chaos(player_type *creature_ptr)
1690 BIT_FLAGS result = 0L;
1692 if (creature_ptr->pclass == CLASS_CHAOS_WARRIOR && creature_ptr->lev > 29)
1693 result |= FLAG_CAUSE_CLASS;
1695 if (creature_ptr->mimic_form == MIMIC_DEMON || creature_ptr->mimic_form == MIMIC_DEMON_LORD) {
1696 result |= FLAG_CAUSE_RACE;
1699 if (!creature_ptr->mimic_form && creature_ptr->prace == RACE_HALF_TITAN)
1700 result |= FLAG_CAUSE_RACE;
1702 if (creature_ptr->special_defense & KATA_MUSOU) {
1703 result |= FLAG_CAUSE_BATTLE_FORM;
1706 if (creature_ptr->ult_res) {
1707 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1710 if (has_element_resist(creature_ptr, ElementRealm::CHAOS, 30))
1711 result |= FLAG_CAUSE_CLASS;
1713 result |= check_equipment_flags(creature_ptr, TR_RES_CHAOS);
1717 BIT_FLAGS has_resist_disen(player_type *creature_ptr)
1719 BIT_FLAGS result = 0L;
1721 if (creature_ptr->mimic_form == MIMIC_DEMON_LORD) {
1722 result |= FLAG_CAUSE_RACE;
1725 if (!creature_ptr->mimic_form && creature_ptr->prace == RACE_NIBELUNG)
1726 result |= FLAG_CAUSE_RACE;
1728 if (creature_ptr->special_defense & KATA_MUSOU) {
1729 result |= FLAG_CAUSE_BATTLE_FORM;
1732 if (creature_ptr->ult_res) {
1733 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1736 if (has_element_resist(creature_ptr, ElementRealm::DEATH, 30))
1737 result |= FLAG_CAUSE_CLASS;
1739 result |= check_equipment_flags(creature_ptr, TR_RES_DISEN);
1743 BIT_FLAGS has_resist_shard(player_type *creature_ptr)
1745 BIT_FLAGS result = 0L;
1747 if (!creature_ptr->mimic_form && (creature_ptr->prace == RACE_HALF_GIANT || creature_ptr->prace == RACE_SKELETON))
1748 result |= FLAG_CAUSE_RACE;
1750 if (creature_ptr->special_defense & KATA_MUSOU) {
1751 result |= FLAG_CAUSE_BATTLE_FORM;
1754 if (creature_ptr->ult_res) {
1755 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1758 if (has_element_resist(creature_ptr, ElementRealm::EARTH, 1))
1759 result |= FLAG_CAUSE_CLASS;
1761 result |= check_equipment_flags(creature_ptr, TR_RES_SHARDS);
1765 BIT_FLAGS has_resist_nexus(player_type *creature_ptr)
1767 BIT_FLAGS result = 0L;
1769 if (creature_ptr->mimic_form == MIMIC_DEMON_LORD) {
1770 result |= FLAG_CAUSE_RACE;
1773 if (creature_ptr->special_defense & KATA_MUSOU) {
1774 result |= FLAG_CAUSE_BATTLE_FORM;
1777 if (creature_ptr->ult_res) {
1778 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1781 result |= check_equipment_flags(creature_ptr, TR_RES_NEXUS);
1785 BIT_FLAGS has_resist_blind(player_type *creature_ptr)
1787 BIT_FLAGS result = 0L;
1789 if (creature_ptr->pseikaku == PERSONALITY_MUNCHKIN) {
1790 result |= FLAG_CAUSE_PERSONALITY;
1793 if (!creature_ptr->mimic_form && creature_ptr->prace == RACE_DWARF)
1794 result |= FLAG_CAUSE_RACE;
1796 if (creature_ptr->special_defense & KATA_MUSOU) {
1797 result |= FLAG_CAUSE_BATTLE_FORM;
1800 if (creature_ptr->ult_res || creature_ptr->magicdef) {
1801 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1804 result |= check_equipment_flags(creature_ptr, TR_RES_BLIND);
1808 BIT_FLAGS has_resist_neth(player_type *creature_ptr)
1810 BIT_FLAGS result = 0L;
1812 if (creature_ptr->mimic_form == MIMIC_DEMON_LORD || creature_ptr->mimic_form == MIMIC_DEMON || creature_ptr->mimic_form == MIMIC_VAMPIRE) {
1813 result |= FLAG_CAUSE_RACE;
1816 if (!creature_ptr->mimic_form
1817 && (creature_ptr->prace == RACE_ZOMBIE || creature_ptr->prace == RACE_VAMPIRE || creature_ptr->prace == RACE_SPECTRE
1818 || creature_ptr->prace == RACE_BALROG))
1819 result |= FLAG_CAUSE_RACE;
1821 if (creature_ptr->special_defense & KATA_MUSOU) {
1822 result |= FLAG_CAUSE_BATTLE_FORM;
1825 if (creature_ptr->ult_res || creature_ptr->tim_res_nether) {
1826 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1829 if (has_element_resist(creature_ptr, ElementRealm::DARKNESS, 30))
1830 result |= FLAG_CAUSE_CLASS;
1832 result |= check_equipment_flags(creature_ptr, TR_RES_NETHER);
1836 BIT_FLAGS has_resist_time(player_type *creature_ptr)
1838 BIT_FLAGS result = 0L;
1840 if (creature_ptr->tim_res_time) {
1841 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1844 result |= check_equipment_flags(creature_ptr, TR_RES_TIME);
1848 BIT_FLAGS has_resist_water(player_type *creature_ptr)
1850 BIT_FLAGS result = 0L;
1852 if (!creature_ptr->mimic_form && creature_ptr->prace == RACE_MERFOLK)
1853 result |= FLAG_CAUSE_RACE;
1855 result |= check_equipment_flags(creature_ptr, TR_RES_WATER);
1859 BIT_FLAGS has_resist_fear(player_type *creature_ptr)
1861 BIT_FLAGS result = 0L;
1863 if (creature_ptr->muta.has(MUTA::FEARLESS))
1864 result |= FLAG_CAUSE_MUTATION;
1866 switch (creature_ptr->pclass) {
1869 if (creature_ptr->lev > 29)
1870 result |= FLAG_CAUSE_CLASS;
1873 case CLASS_CHAOS_WARRIOR:
1874 if (creature_ptr->lev > 39)
1875 result |= FLAG_CAUSE_CLASS;
1877 case CLASS_MINDCRAFTER:
1878 if (creature_ptr->lev > 9)
1879 result |= FLAG_CAUSE_CLASS;
1882 result |= FLAG_CAUSE_CLASS;
1889 if (creature_ptr->mimic_form == MIMIC_DEMON_LORD) {
1890 result |= FLAG_CAUSE_RACE;
1893 if (!creature_ptr->mimic_form && creature_ptr->prace == RACE_BARBARIAN)
1894 result |= FLAG_CAUSE_RACE;
1896 if ((creature_ptr->special_defense & KATA_MUSOU)) {
1897 result |= FLAG_CAUSE_BATTLE_FORM;
1900 if (is_hero(creature_ptr) || is_shero(creature_ptr) || creature_ptr->ult_res) {
1901 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1904 result |= check_equipment_flags(creature_ptr, TR_RES_FEAR);
1908 BIT_FLAGS has_immune_acid(player_type *creature_ptr)
1910 BIT_FLAGS result = 0L;
1911 if (!creature_ptr->mimic_form && creature_ptr->prace == RACE_YEEK && creature_ptr->lev > 19)
1912 result |= FLAG_CAUSE_RACE;
1914 if (creature_ptr->ele_immune) {
1915 if (creature_ptr->special_defense & DEFENSE_ACID)
1916 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1919 if (has_element_resist(creature_ptr, ElementRealm::SEA, 30))
1920 result |= FLAG_CAUSE_CLASS;
1922 result |= check_equipment_flags(creature_ptr, TR_IM_ACID);
1926 BIT_FLAGS has_immune_elec(player_type *creature_ptr)
1928 BIT_FLAGS result = 0L;
1930 if (creature_ptr->ele_immune) {
1931 if (creature_ptr->special_defense & DEFENSE_ELEC)
1932 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1935 if (has_element_resist(creature_ptr, ElementRealm::SKY, 30))
1936 result |= FLAG_CAUSE_CLASS;
1938 result |= check_equipment_flags(creature_ptr, TR_IM_ELEC);
1942 BIT_FLAGS has_immune_fire(player_type *creature_ptr)
1944 BIT_FLAGS result = 0L;
1946 if (creature_ptr->ele_immune) {
1947 if (creature_ptr->special_defense & DEFENSE_FIRE)
1948 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1951 if (has_element_resist(creature_ptr, ElementRealm::FIRE, 30))
1952 result |= FLAG_CAUSE_CLASS;
1954 result |= check_equipment_flags(creature_ptr, TR_IM_FIRE);
1958 BIT_FLAGS has_immune_cold(player_type *creature_ptr)
1960 BIT_FLAGS result = 0L;
1962 if (creature_ptr->ele_immune) {
1963 if (creature_ptr->special_defense & DEFENSE_COLD)
1964 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1967 if (has_element_resist(creature_ptr, ElementRealm::ICE, 30))
1968 result |= FLAG_CAUSE_CLASS;
1970 result |= check_equipment_flags(creature_ptr, TR_IM_COLD);
1974 BIT_FLAGS has_immune_dark(player_type *creature_ptr)
1976 BIT_FLAGS result = 0L;
1978 if (is_specific_player_race(creature_ptr, RACE_VAMPIRE) || (creature_ptr->mimic_form == MIMIC_VAMPIRE)) {
1979 result |= FLAG_CAUSE_RACE;
1982 if (creature_ptr->wraith_form) {
1983 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
1989 melee_type player_melee_type(player_type *creature_ptr)
1991 if (has_two_handed_weapons(creature_ptr))
1992 return MELEE_TYPE_WEAPON_TWOHAND;
1994 if (has_melee_weapon(creature_ptr, INVEN_MAIN_HAND)) {
1995 if (has_melee_weapon(creature_ptr, INVEN_SUB_HAND)) {
1996 return MELEE_TYPE_WEAPON_DOUBLE;
1998 return MELEE_TYPE_WEAPON_MAIN;
2001 if (has_melee_weapon(creature_ptr, INVEN_SUB_HAND))
2002 return MELEE_TYPE_WEAPON_SUB;
2004 if (empty_hands(creature_ptr, FALSE) == (EMPTY_HAND_MAIN | EMPTY_HAND_SUB))
2005 return MELEE_TYPE_BAREHAND_TWO;
2007 if (empty_hands(creature_ptr, FALSE) == EMPTY_HAND_MAIN)
2008 return MELEE_TYPE_BAREHAND_MAIN;
2010 if (empty_hands(creature_ptr, FALSE) == EMPTY_HAND_SUB)
2011 return MELEE_TYPE_BAREHAND_SUB;
2013 return MELEE_TYPE_SHIELD_DOUBLE;
2017 * @brief 利き手で攻撃可能かどうかを判定する
2018 * 利き手で攻撃可能とは、利き手に武器を持っているか、
2019 * 利き手が素手かつ左手も素手もしくは盾を装備している事を意味する。
2020 * @detail Includes martial arts and hand combats as weapons.
2022 bool can_attack_with_main_hand(player_type *creature_ptr)
2024 if (has_melee_weapon(creature_ptr, INVEN_MAIN_HAND))
2027 if ((empty_hands(creature_ptr, TRUE) & EMPTY_HAND_MAIN) && !can_attack_with_sub_hand(creature_ptr))
2034 * @brief 非利き手で攻撃可能かどうかを判定する
2035 * 非利き手で攻撃可能とは、非利き手に武器を持っている事に等しい
2036 * @detail Exclude martial arts and hand combats from weapons.
2038 bool can_attack_with_sub_hand(player_type *creature_ptr)
2040 return has_melee_weapon(creature_ptr, INVEN_SUB_HAND);
2044 * @brief 両手持ち状態かどうかを判定する
2046 bool has_two_handed_weapons(player_type *creature_ptr)
2048 if (can_two_hands_wielding(creature_ptr)) {
2049 if (can_attack_with_main_hand(creature_ptr) && (empty_hands(creature_ptr, FALSE) == EMPTY_HAND_SUB)
2050 && object_allow_two_hands_wielding(&creature_ptr->inventory_list[INVEN_MAIN_HAND])) {
2052 } else if (can_attack_with_sub_hand(creature_ptr) && (empty_hands(creature_ptr, FALSE) == EMPTY_HAND_MAIN)
2053 && object_allow_two_hands_wielding(&creature_ptr->inventory_list[INVEN_SUB_HAND])) {
2060 BIT_FLAGS has_lite(player_type *creature_ptr)
2062 BIT_FLAGS result = 0L;
2063 if (creature_ptr->pclass == CLASS_NINJA)
2066 if (creature_ptr->pseikaku == PERSONALITY_MUNCHKIN) {
2067 result |= FLAG_CAUSE_PERSONALITY;
2070 if (creature_ptr->mimic_form == MIMIC_VAMPIRE) {
2071 result |= FLAG_CAUSE_RACE;
2074 if (!creature_ptr->mimic_form && creature_ptr->prace == RACE_VAMPIRE)
2075 result |= FLAG_CAUSE_RACE;
2077 if (creature_ptr->ult_res) {
2078 result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
2081 if (creature_ptr->special_defense & KATA_MUSOU) {
2082 result |= FLAG_CAUSE_BATTLE_FORM;
2085 result |= has_sh_fire(creature_ptr);
2091 * @brief 両手持ちボーナスがもらえないかどうかを判定する。 / Does *not * get two hand wielding bonus.
2093 * Only can get hit bonuses when wieids an enough light weapon which is lighter than 5 times of weight limit.
2094 * If its weight is 10 times heavier or more than weight limit, gets hit penalty in calc_to_hit().
2096 bool has_disable_two_handed_bonus(player_type *creature_ptr, int i)
2098 if (has_melee_weapon(creature_ptr, INVEN_MAIN_HAND + i) && has_two_handed_weapons(creature_ptr)) {
2099 object_type *o_ptr = &creature_ptr->inventory_list[INVEN_MAIN_HAND + i];
2100 int limit = calc_weapon_weight_limit(creature_ptr) * 2;
2102 /* Enable when two hand wields an enough light weapon */
2103 if (limit >= o_ptr->weight / 5)
2107 /* Disable when empty hands, one hand wieldings and heavy weapons */
2112 * @brief ふさわしくない武器を持っているかどうかを返す。
2113 * @todo 相応しい時にFALSEで相応しくない時にTRUEという負論理は良くない、後で修正する
2115 bool has_icky_wield_weapon(player_type *creature_ptr, int i)
2117 BIT_FLAGS flgs[TR_FLAG_SIZE];
2118 object_type *o_ptr = &creature_ptr->inventory_list[INVEN_MAIN_HAND + i];
2119 object_flags(creature_ptr, o_ptr, flgs);
2121 bool has_no_weapon = (o_ptr->tval == TV_NONE) || (o_ptr->tval == TV_SHIELD);
2122 if (creature_ptr->pclass == CLASS_PRIEST) {
2123 bool is_suitable_weapon = has_flag(flgs, TR_BLESSED);
2124 is_suitable_weapon |= (o_ptr->tval != TV_SWORD) && (o_ptr->tval != TV_POLEARM);
2125 return !has_no_weapon && !is_suitable_weapon;
2128 if (creature_ptr->pclass == CLASS_SORCERER) {
2129 bool is_suitable_weapon = o_ptr->tval == TV_HAFTED;
2130 is_suitable_weapon &= (o_ptr->sval == SV_WIZSTAFF) || (o_ptr->sval == SV_NAMAKE_HAMMER);
2131 return !has_no_weapon && !is_suitable_weapon;
2134 if (has_not_monk_weapon(creature_ptr, i) || has_not_ninja_weapon(creature_ptr, i))
2140 bool has_riding_wield_weapon(player_type *creature_ptr, int i)
2143 BIT_FLAGS flgs[TR_FLAG_SIZE];
2144 o_ptr = &creature_ptr->inventory_list[INVEN_MAIN_HAND + i];
2145 object_flags(creature_ptr, o_ptr, flgs);
2146 if (creature_ptr->riding != 0 && !(o_ptr->tval == TV_POLEARM) && ((o_ptr->sval == SV_LANCE) || (o_ptr->sval == SV_HEAVY_LANCE))
2147 && !has_flag(flgs, TR_RIDING)) {
2153 bool has_not_ninja_weapon(player_type *creature_ptr, int i)
2155 if (!has_melee_weapon(creature_ptr, INVEN_MAIN_HAND + i)) {
2158 int tval = creature_ptr->inventory_list[INVEN_MAIN_HAND + i].tval - TV_WEAPON_BEGIN;
2159 OBJECT_SUBTYPE_VALUE sval = creature_ptr->inventory_list[INVEN_MAIN_HAND + i].sval;
2160 return creature_ptr->pclass == CLASS_NINJA
2161 && !((s_info[CLASS_NINJA].w_max[tval][sval] > WEAPON_EXP_BEGINNER) && (creature_ptr->inventory_list[INVEN_SUB_HAND - i].tval != TV_SHIELD));
2164 bool has_not_monk_weapon(player_type *creature_ptr, int i)
2166 if (!has_melee_weapon(creature_ptr, INVEN_MAIN_HAND + i)) {
2169 int tval = creature_ptr->inventory_list[INVEN_MAIN_HAND + i].tval - TV_WEAPON_BEGIN;
2170 OBJECT_SUBTYPE_VALUE sval = creature_ptr->inventory_list[INVEN_MAIN_HAND + i].sval;
2171 return ((creature_ptr->pclass == CLASS_MONK) || (creature_ptr->pclass == CLASS_FORCETRAINER)) && !(s_info[creature_ptr->pclass].w_max[tval][sval]);
2174 bool has_good_luck(player_type *creature_ptr)
2176 return (creature_ptr->pseikaku == PERSONALITY_LUCKY) || (creature_ptr->muta.has(MUTA::GOOD_LUCK));
2179 BIT_FLAGS player_aggravate_state(player_type *creature_ptr)
2181 if (creature_ptr->cursed & TRC_AGGRAVATE) {
2182 if ((is_specific_player_race(creature_ptr, RACE_S_FAIRY)) && (creature_ptr->pseikaku != PERSONALITY_SEXY)) {
2183 return AGGRAVATE_S_FAIRY;
2185 return AGGRAVATE_NORMAL;
2188 return AGGRAVATE_NONE;
2191 bool has_aggravate(player_type *creature_ptr)
2193 return player_aggravate_state(creature_ptr) == AGGRAVATE_NORMAL;