1 #include "monster-attack/monster-attack-lose.h"
2 #include "mind/mind-mirror-master.h"
3 #include "monster-attack/monster-attack-status.h"
4 #include "monster-attack/monster-attack-util.h"
5 #include "player/player-damage.h"
6 #include "player/player-status-flags.h"
7 #include "player/player-status-resist.h"
8 #include "status/bad-status-setter.h"
9 #include "status/base-status.h"
10 #include "status/element-resistance.h"
11 #include "view/display-messages.h"
14 * @brief
\95a
\8bC
\83_
\83\81\81[
\83W
\82ð
\8cv
\8eZ
\82·
\82é (
\93Å
\91Ï
\90«
\82ª
\82 \82ê
\82Î
\81A(1d4 + 4) / 9
\82É
\82È
\82é
\81B
\93ñ
\8fd
\91Ï
\90«
\82È
\82ç
\8dX
\82É(1d4 + 4) / 9)
15 * @param target_ptr
\83v
\83\8c\81[
\83\84\81[
\82Ö
\82Ì
\8eQ
\8fÆ
\83|
\83C
\83\93\83^
16 * @param monap_ptr
\83\82\83\93\83X
\83^
\81[
\82©
\82ç
\83v
\83\8c\81[
\83\84\81[
\82Ö
\82Ì
\92¼
\90Ú
\8dU
\8c\82\8d\
\91¢
\91Ì
\82Ö
\82Ì
\8eQ
\8fÆ
\83|
\83C
\83\93\83^
18 * @details 10% (
\93Å
\82Ì
\88ê
\8e\9f\91Ï
\90«
\82ª
\82 \82ê
\82Î4%
\81A
\93ñ
\8fd
\91Ï
\90«
\82È
\82ç
\82Î1.6%)
\82Ì
\8am
\97¦
\82Å
\91Ï
\8bv
\82ª
\92á
\89º
\82µ
\81A
\8dX
\82É1/10
\82Ì
\8am
\97¦
\82Å
\89i
\8bv
\92á
\89º
\82·
\82é
20 void calc_blow_disease(player_type *target_ptr, monap_type *monap_ptr)
22 if (is_resist_pois(target_ptr))
23 monap_ptr->damage = monap_ptr->damage * (randint1(4) + 4) / 9;
25 if (is_oppose_pois(target_ptr))
26 monap_ptr->damage = monap_ptr->damage * (randint1(4) + 4) / 9;
28 monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
29 if (target_ptr->is_dead || check_multishadow(target_ptr))
32 if (!(target_ptr->resist_pois || is_oppose_pois(target_ptr)) && set_poisoned(target_ptr, target_ptr->poisoned + randint1(monap_ptr->rlev) + 5))
33 monap_ptr->obvious = TRUE;
35 bool disease_possibility = randint1(100) > calc_nuke_damage_rate(target_ptr);
36 if (disease_possibility || (randint1(100) > 10) || (target_ptr->prace == RACE_ANDROID))
39 bool perm = one_in_(10);
40 if (dec_stat(target_ptr, A_CON, randint1(10), perm)) {
41 msg_print(_("
\95a
\82ª
\82 \82È
\82½
\82ð
\90I
\82ñ
\82Å
\82¢
\82é
\8bC
\82ª
\82·
\82é
\81B", "You feel sickly."));
42 monap_ptr->obvious = TRUE;
47 * @brief
\98r
\97Í
\92á
\89º
\83_
\83\81\81[
\83W
\82ð
\8cv
\8eZ
\82·
\82é (
\88Û
\8e\9d\82ª
\82 \82ê
\82Î
\81A(1d4 + 4) / 9
\82É
\82È
\82é)
48 * @param target_ptr
\83v
\83\8c\81[
\83\84\81[
\82Ö
\82Ì
\8eQ
\8fÆ
\83|
\83C
\83\93\83^
49 * @param monap_ptr
\83\82\83\93\83X
\83^
\81[
\82©
\82ç
\83v
\83\8c\81[
\83\84\81[
\82Ö
\82Ì
\92¼
\90Ú
\8dU
\8c\82\8d\
\91¢
\91Ì
\82Ö
\82Ì
\8eQ
\8fÆ
\83|
\83C
\83\93\83^
52 void calc_blow_lose_strength(player_type *target_ptr, monap_type *monap_ptr)
54 if (is_sustain_str(target_ptr))
55 monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
57 monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
58 if (target_ptr->is_dead || check_multishadow(target_ptr))
61 if (do_dec_stat(target_ptr, A_STR))
62 monap_ptr->obvious = TRUE;
66 * @brief
\92m
\94\
\92á
\89º
\83_
\83\81\81[
\83W
\82ð
\8cv
\8eZ
\82·
\82é (
\88Û
\8e\9d\82ª
\82 \82ê
\82Î
\81A(1d4 + 4) / 9
\82É
\82È
\82é)
67 * @param target_ptr
\83v
\83\8c\81[
\83\84\81[
\82Ö
\82Ì
\8eQ
\8fÆ
\83|
\83C
\83\93\83^
68 * @param monap_ptr
\83\82\83\93\83X
\83^
\81[
\82©
\82ç
\83v
\83\8c\81[
\83\84\81[
\82Ö
\82Ì
\92¼
\90Ú
\8dU
\8c\82\8d\
\91¢
\91Ì
\82Ö
\82Ì
\8eQ
\8fÆ
\83|
\83C
\83\93\83^
71 void calc_blow_lose_intelligence(player_type *target_ptr, monap_type *monap_ptr)
73 if (is_sustain_int(target_ptr))
74 monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
76 monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
77 if (target_ptr->is_dead || check_multishadow(target_ptr))
80 if (do_dec_stat(target_ptr, A_INT))
81 monap_ptr->obvious = TRUE;
85 * @brief
\8c«
\82³
\92á
\89º
\83_
\83\81\81[
\83W
\82ð
\8cv
\8eZ
\82·
\82é (
\88Û
\8e\9d\82ª
\82 \82ê
\82Î
\81A(1d4 + 4) / 9
\82É
\82È
\82é)
86 * @param target_ptr
\83v
\83\8c\81[
\83\84\81[
\82Ö
\82Ì
\8eQ
\8fÆ
\83|
\83C
\83\93\83^
87 * @param monap_ptr
\83\82\83\93\83X
\83^
\81[
\82©
\82ç
\83v
\83\8c\81[
\83\84\81[
\82Ö
\82Ì
\92¼
\90Ú
\8dU
\8c\82\8d\
\91¢
\91Ì
\82Ö
\82Ì
\8eQ
\8fÆ
\83|
\83C
\83\93\83^
90 void calc_blow_lose_wisdom(player_type *target_ptr, monap_type *monap_ptr)
92 if (is_sustain_wis(target_ptr))
93 monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
95 monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
96 if (target_ptr->is_dead || check_multishadow(target_ptr))
99 if (do_dec_stat(target_ptr, A_WIS))
100 monap_ptr->obvious = TRUE;
104 * @brief
\8aí
\97p
\92á
\89º
\83_
\83\81\81[
\83W
\82ð
\8cv
\8eZ
\82·
\82é (
\88Û
\8e\9d\82ª
\82 \82ê
\82Î
\81A(1d4 + 4) / 9
\82É
\82È
\82é)
105 * @param target_ptr
\83v
\83\8c\81[
\83\84\81[
\82Ö
\82Ì
\8eQ
\8fÆ
\83|
\83C
\83\93\83^
106 * @param monap_ptr
\83\82\83\93\83X
\83^
\81[
\82©
\82ç
\83v
\83\8c\81[
\83\84\81[
\82Ö
\82Ì
\92¼
\90Ú
\8dU
\8c\82\8d\
\91¢
\91Ì
\82Ö
\82Ì
\8eQ
\8fÆ
\83|
\83C
\83\93\83^
109 void calc_blow_lose_dexterity(player_type *target_ptr, monap_type *monap_ptr)
111 if (is_sustain_dex(target_ptr))
112 monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
114 monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
115 if (target_ptr->is_dead || check_multishadow(target_ptr))
118 if (do_dec_stat(target_ptr, A_DEX))
119 monap_ptr->obvious = TRUE;
123 * @brief
\91Ï
\8bv
\92á
\89º
\83_
\83\81\81[
\83W
\82ð
\8cv
\8eZ
\82·
\82é (
\88Û
\8e\9d\82ª
\82 \82ê
\82Î
\81A(1d4 + 4) / 9
\82É
\82È
\82é)
124 * @param target_ptr
\83v
\83\8c\81[
\83\84\81[
\82Ö
\82Ì
\8eQ
\8fÆ
\83|
\83C
\83\93\83^
125 * @param monap_ptr
\83\82\83\93\83X
\83^
\81[
\82©
\82ç
\83v
\83\8c\81[
\83\84\81[
\82Ö
\82Ì
\92¼
\90Ú
\8dU
\8c\82\8d\
\91¢
\91Ì
\82Ö
\82Ì
\8eQ
\8fÆ
\83|
\83C
\83\93\83^
128 void calc_blow_lose_constitution(player_type *target_ptr, monap_type *monap_ptr)
130 if (is_sustain_con(target_ptr))
131 monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
133 monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
134 if (target_ptr->is_dead || check_multishadow(target_ptr))
137 if (do_dec_stat(target_ptr, A_CON))
138 monap_ptr->obvious = TRUE;
142 * @brief
\96£
\97Í
\92á
\89º
\83_
\83\81\81[
\83W
\82ð
\8cv
\8eZ
\82·
\82é (
\88Û
\8e\9d\82ª
\82 \82ê
\82Î
\81A(1d4 + 4) / 9
\82É
\82È
\82é)
143 * @param target_ptr
\83v
\83\8c\81[
\83\84\81[
\82Ö
\82Ì
\8eQ
\8fÆ
\83|
\83C
\83\93\83^
144 * @param monap_ptr
\83\82\83\93\83X
\83^
\81[
\82©
\82ç
\83v
\83\8c\81[
\83\84\81[
\82Ö
\82Ì
\92¼
\90Ú
\8dU
\8c\82\8d\
\91¢
\91Ì
\82Ö
\82Ì
\8eQ
\8fÆ
\83|
\83C
\83\93\83^
147 void calc_blow_lose_charisma(player_type *target_ptr, monap_type *monap_ptr)
149 if (is_sustain_chr(target_ptr))
150 monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
152 monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
153 if (target_ptr->is_dead || check_multishadow(target_ptr))
156 if (do_dec_stat(target_ptr, A_CHR))
157 monap_ptr->obvious = TRUE;
161 * @brief
\91S
\94\
\97Í
\92á
\89º
\83_
\83\81\81[
\83W
\82ð
\8cv
\8eZ
\82·
\82é (
\88Û
\8e\9d\82ª
\82 \82ê
\82Î
\81A1
\82Â
\82É
\95t
\82«-3%
\8cy
\8c¸
\82·
\82é)
162 * @param target_ptr
\83v
\83\8c\81[
\83\84\81[
\82Ö
\82Ì
\8eQ
\8fÆ
\83|
\83C
\83\93\83^
163 * @param monap_ptr
\83\82\83\93\83X
\83^
\81[
\82©
\82ç
\83v
\83\8c\81[
\83\84\81[
\82Ö
\82Ì
\92¼
\90Ú
\8dU
\8c\82\8d\
\91¢
\91Ì
\82Ö
\82Ì
\8eQ
\8fÆ
\83|
\83C
\83\93\83^
166 void calc_blow_lose_all(player_type *target_ptr, monap_type *monap_ptr)
168 int damage_ratio = 100;
169 if (is_sustain_str(target_ptr))
172 if (is_sustain_int(target_ptr))
175 if (is_sustain_wis(target_ptr))
178 if (is_sustain_dex(target_ptr))
181 if (is_sustain_con(target_ptr))
184 if (is_sustain_chr(target_ptr))
187 monap_ptr->damage = monap_ptr->damage * damage_ratio / 100;
188 monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
189 if (target_ptr->is_dead || check_multishadow(target_ptr))
192 process_lose_all_attack(target_ptr, monap_ptr);