1 #include "system/angband.h"
2 #include "effect/effect-player-util.h"
3 #include "effect/effect-player-spirit.h"
4 #include "monster-spell.h"
5 #include "player/player-damage.h"
6 #include "player/player-effects.h"
7 #include "world/world.h"
9 void effect_player_drain_mana(player_type *target_ptr,
10 effect_player_type *ep_ptr) {
11 if (CHECK_MULTISHADOW(target_ptr)) {
12 msg_print(_("攻撃は幻影に命中し、あなたには届かなかった。",
13 "The attack hits Shadow, but you are unharmed!"));
18 if (target_ptr->csp == 0) {
24 msg_format(_("%^sに精神エネルギーを吸い取られてしまった!",
25 "%^s draws psychic energy from you!"),
28 msg_print(_("精神エネルギーを吸い取られてしまった!",
29 "Your psychic energy is drawn!"));
31 if (ep_ptr->dam >= target_ptr->csp) {
32 ep_ptr->dam = target_ptr->csp;
34 target_ptr->csp_frac = 0;
36 target_ptr->csp -= ep_ptr->dam;
39 learn_spell(target_ptr, ep_ptr->monspell);
40 target_ptr->redraw |= (PR_MANA);
41 target_ptr->window |= (PW_PLAYER | PW_SPELL);
43 if ((ep_ptr->who <= 0) || (ep_ptr->m_ptr->hp >= ep_ptr->m_ptr->maxhp)) {
48 ep_ptr->m_ptr->hp += ep_ptr->dam;
49 if (ep_ptr->m_ptr->hp > ep_ptr->m_ptr->maxhp)
50 ep_ptr->m_ptr->hp = ep_ptr->m_ptr->maxhp;
52 if (target_ptr->health_who == ep_ptr->who)
53 target_ptr->redraw |= (PR_HEALTH);
54 if (target_ptr->riding == ep_ptr->who)
55 target_ptr->redraw |= (PR_UHEALTH);
57 if (ep_ptr->m_ptr->ml) {
58 msg_format(_("%^sは気分が良さそうだ。", "%^s appears healthier."),
65 void effect_player_mind_blast(player_type *target_ptr,
66 effect_player_type *ep_ptr) {
67 if ((randint0(100 + ep_ptr->rlev / 2) < MAX(5, target_ptr->skill_sav)) &&
68 !CHECK_MULTISHADOW(target_ptr)) {
69 msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));
70 learn_spell(target_ptr, ep_ptr->monspell);
74 if (CHECK_MULTISHADOW(target_ptr)) {
75 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam,
76 ep_ptr->killer, ep_ptr->monspell);
80 msg_print(_("霊的エネルギーで精神が攻撃された。",
81 "Your mind is blasted by psionic energy."));
82 if (!target_ptr->resist_conf) {
83 (void)set_confused(target_ptr, target_ptr->confused + randint0(4) + 4);
86 if (!target_ptr->resist_chaos && one_in_(3)) {
87 (void)set_image(target_ptr, target_ptr->image + randint0(250) + 150);
90 target_ptr->csp -= 50;
91 if (target_ptr->csp < 0) {
93 target_ptr->csp_frac = 0;
96 target_ptr->redraw |= PR_MANA;
97 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam,
98 ep_ptr->killer, ep_ptr->monspell);
101 void effect_player_brain_smash(player_type *target_ptr,
102 effect_player_type *ep_ptr) {
103 if ((randint0(100 + ep_ptr->rlev / 2) < MAX(5, target_ptr->skill_sav)) &&
104 !CHECK_MULTISHADOW(target_ptr)) {
105 msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));
106 learn_spell(target_ptr, ep_ptr->monspell);
110 if (!CHECK_MULTISHADOW(target_ptr)) {
111 msg_print(_("霊的エネルギーで精神が攻撃された。",
112 "Your mind is blasted by psionic energy."));
114 target_ptr->csp -= 100;
115 if (target_ptr->csp < 0) {
117 target_ptr->csp_frac = 0;
119 target_ptr->redraw |= PR_MANA;
122 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam,
123 ep_ptr->killer, ep_ptr->monspell);
124 if (CHECK_MULTISHADOW(target_ptr))
127 if (!target_ptr->resist_blind) {
128 (void)set_blind(target_ptr, target_ptr->blind + 8 + randint0(8));
131 if (!target_ptr->resist_conf) {
132 (void)set_confused(target_ptr, target_ptr->confused + randint0(4) + 4);
135 if (!target_ptr->free_act) {
136 (void)set_paralyzed(target_ptr, target_ptr->paralyzed + randint0(4) + 4);
139 (void)set_slow(target_ptr, target_ptr->slow + randint0(4) + 4, FALSE);
141 while (randint0(100 + ep_ptr->rlev / 2) > (MAX(5, target_ptr->skill_sav)))
142 (void)do_dec_stat(target_ptr, A_INT);
143 while (randint0(100 + ep_ptr->rlev / 2) > (MAX(5, target_ptr->skill_sav)))
144 (void)do_dec_stat(target_ptr, A_WIS);
146 if (!target_ptr->resist_chaos) {
147 (void)set_image(target_ptr, target_ptr->image + randint0(250) + 150);