OSDN Git Service

[Refactor] #40514 player-status-flags.c/h から player-status-resist.c/h を分離. / Separate...
[hengband/hengband.git] / src / player / player-status-resist.c
1 #include "player/player-status-flags.h"
2 #include "art-definition/art-sword-types.h"
3 #include "grid/grid.h"
4 #include "inventory/inventory-slot-types.h"
5 #include "monster-race/monster-race.h"
6 #include "monster-race/race-flags2.h"
7 #include "monster-race/race-flags7.h"
8 #include "mutation/mutation-flag-types.h"
9 #include "object-enchant/object-ego.h"
10 #include "object-enchant/tr-types.h"
11 #include "object-enchant/trc-types.h"
12 #include "object-hook/hook-checker.h"
13 #include "object-hook/hook-weapon.h"
14 #include "object/object-flags.h"
15 #include "player/player-class.h"
16 #include "player/player-race-types.h"
17 #include "player/player-race.h"
18 #include "player/player-skill.h"
19 #include "player/player-status.h"
20 #include "player/special-defense-types.h"
21 #include "realm/realm-hex-numbers.h"
22 #include "realm/realm-song-numbers.h"
23 #include "realm/realm-types.h"
24 #include "spell-realm/spells-hex.h"
25 #include "sv-definition/sv-weapon-types.h"
26 #include "system/floor-type-definition.h"
27 #include "system/monster-type-definition.h"
28 #include "system/object-type-definition.h"
29 #include "util/bit-flags-calculator.h"
30 #include "util/quarks.h"
31 #include "util/string-processor.h"
32
33 PERCENTAGE calc_vuln_acid_rate(player_type *creature_ptr)
34 {
35     PERCENTAGE per = 100;
36     int i;
37     BIT_FLAGS flgs = is_vuln_acid(creature_ptr);
38     for (i = 0; i < FLAG_CAUSE_MAX; i++) {
39         if (flgs & (0x01 << i)) {
40             if (i == FLAG_CAUSE_MUTATION) {
41                 per *= 2;
42             } else {
43                 per += per / 3;
44             }
45         }
46     }
47     return per;
48 }
49
50 PERCENTAGE calc_vuln_elec_rate(player_type *creature_ptr)
51 {
52     PERCENTAGE per = 100;
53     int i;
54     BIT_FLAGS flgs = is_vuln_elec(creature_ptr);
55     for (i = 0; i < FLAG_CAUSE_MAX; i++) {
56         if (flgs & (0x01 << i)) {
57             if (i == FLAG_CAUSE_MUTATION) {
58                 per *= 2;
59             } else {
60                 per += per / 3;
61             }
62         }
63     }
64     return per;
65 }
66
67 PERCENTAGE calc_vuln_fire_rate(player_type *creature_ptr)
68 {
69     PERCENTAGE per = 100;
70     int i;
71     BIT_FLAGS flgs = is_vuln_fire(creature_ptr);
72     for (i = 0; i < FLAG_CAUSE_MAX; i++) {
73         if (flgs & (0x01 << i)) {
74             if (i == FLAG_CAUSE_MUTATION) {
75                 per *= 2;
76             } else {
77                 per += per / 3;
78             }
79         }
80     }
81     return per;
82 }
83
84 PERCENTAGE calc_vuln_cold_rate(player_type *creature_ptr)
85 {
86     PERCENTAGE per = 100;
87     int i;
88     BIT_FLAGS flgs = is_vuln_cold(creature_ptr);
89     for (i = 0; i < FLAG_CAUSE_MAX; i++) {
90         if (flgs & (0x01 << i)) {
91             if (i == FLAG_CAUSE_MUTATION) {
92                 per *= 2;
93             } else {
94                 per += per / 3;
95             }
96         }
97     }
98     return per;
99 }
100
101 PERCENTAGE calc_vuln_lite_rate(player_type *creature_ptr)
102 {
103     PERCENTAGE per = 100;
104     if (is_specific_player_race(creature_ptr, RACE_VAMPIRE) || (creature_ptr->mimic_form == MIMIC_VAMPIRE)) {
105         per *= 2;
106     } else if (is_specific_player_race(creature_ptr, RACE_S_FAIRY)) {
107         per = per * 4 / 3;
108     }
109
110     if (creature_ptr->wraith_form)
111         per *= 2;
112
113     return per;
114 }