1 #include "effect/effect-player-resist-hurt.h"
2 #include "art-definition/art-sword-types.h"
3 #include "blue-magic/blue-magic-checker.h"
4 #include "core/hp-mp-processor.h"
5 #include "core/player-redraw-types.h"
6 #include "core/player-update-types.h"
7 #include "core/window-redrawer.h"
8 #include "inventory/inventory-damage.h"
9 #include "inventory/inventory-slot-types.h"
10 #include "mind/mind-mirror-master.h"
11 #include "monster-race/race-indice-types.h"
12 #include "mutation/mutation-investor-remover.h"
13 #include "object/object-broken.h"
14 #include "object-enchant/object-curse.h"
15 #include "player/player-damage.h"
16 #include "player/player-race-types.h"
17 #include "player/player-race.h"
18 #include "player/player-status-flags.h"
19 #include "player/player-status-resist.h"
20 #include "spell-kind/spells-equipment.h"
21 #include "spell-kind/spells-teleport.h"
22 #include "spell/spells-status.h"
23 #include "status/bad-status-setter.h"
24 #include "status/base-status.h"
25 #include "status/element-resistance.h"
26 #include "status/experience.h"
27 #include "status/shape-changer.h"
28 #include "system/object-type-definition.h"
29 #include "view/display-messages.h"
30 #include "world/world.h"
33 void effect_player_elements(
34 player_type *target_ptr, effect_player_type *ep_ptr, concptr attack_message, HIT_POINT (*damage_func)(player_type *, HIT_POINT, concptr, int, bool))
36 if (target_ptr->blind)
37 msg_print(attack_message);
39 ep_ptr->get_damage = (*damage_func)(target_ptr, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell, FALSE);
42 void effect_player_poison(player_type *target_ptr, effect_player_type *ep_ptr)
44 bool double_resist = is_oppose_pois(target_ptr);
45 if (target_ptr->blind)
46 msg_print(_("毒で攻撃された!", "You are hit by poison!"));
48 ep_ptr->dam = ep_ptr->dam * calc_pois_damage_rate(target_ptr) / 100;
50 if ((!(double_resist || target_ptr->resist_pois)) && one_in_(HURT_CHANCE) && !check_multishadow(target_ptr)) {
51 do_dec_stat(target_ptr, A_CON);
54 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
56 if (!(double_resist || target_ptr->resist_pois) && !check_multishadow(target_ptr))
57 set_poisoned(target_ptr, target_ptr->poisoned + randint0(ep_ptr->dam) + 10);
60 void effect_player_nuke(player_type *target_ptr, effect_player_type *ep_ptr)
62 bool double_resist = is_oppose_pois(target_ptr);
63 if (target_ptr->blind)
64 msg_print(_("放射能で攻撃された!", "You are hit by radiation!"));
66 ep_ptr->dam = ep_ptr->dam * calc_pois_damage_rate(target_ptr) / 100;
68 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
69 if ((double_resist || target_ptr->resist_pois) || check_multishadow(target_ptr))
72 set_poisoned(target_ptr, target_ptr->poisoned + randint0(ep_ptr->dam) + 10);
73 if (one_in_(5)) /* 6 */
75 msg_print(_("奇形的な変身を遂げた!", "You undergo a freakish metamorphosis!"));
76 if (one_in_(4)) /* 4 */
77 do_poly_self(target_ptr);
79 status_shuffle(target_ptr);
83 inventory_damage(target_ptr, set_acid_destroy, 2);
86 void effect_player_missile(player_type *target_ptr, effect_player_type *ep_ptr)
88 if (target_ptr->blind)
89 msg_print(_("何かで攻撃された!", "You are hit by something!"));
91 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
94 void effect_player_holy_fire(player_type *target_ptr, effect_player_type *ep_ptr)
96 if (target_ptr->blind)
97 msg_print(_("何かで攻撃された!", "You are hit by something!"));
99 ep_ptr->dam = ep_ptr->dam * calc_holy_fire_damage_rate(target_ptr, CALC_RAND) / 100;
101 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
104 void effect_player_hell_fire(player_type *target_ptr, effect_player_type *ep_ptr)
106 if (target_ptr->blind)
107 msg_print(_("何かで攻撃された!", "You are hit by something!"));
109 ep_ptr->dam = ep_ptr->dam * calc_hell_fire_damage_rate(target_ptr, CALC_RAND) / 100;
111 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
114 void effect_player_arrow(player_type *target_ptr, effect_player_type *ep_ptr)
116 if (target_ptr->blind) {
117 msg_print(_("何か鋭いもので攻撃された!", "You are hit by something sharp!"));
118 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
122 if (has_invuln_arrow(target_ptr)) {
123 msg_print(_("矢を斬り捨てた!", "You cut down the arrow!"));
127 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
130 void effect_player_plasma(player_type *target_ptr, effect_player_type *ep_ptr)
132 if (target_ptr->blind)
133 msg_print(_("何かとても熱いもので攻撃された!", "You are hit by something *HOT*!"));
135 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
137 if (!target_ptr->resist_sound && !check_multishadow(target_ptr)) {
138 int plus_stun = (randint1((ep_ptr->dam > 40) ? 35 : (ep_ptr->dam * 3 / 4 + 5)));
139 (void)set_stun(target_ptr, target_ptr->stun + plus_stun);
142 if (!(target_ptr->resist_fire || is_oppose_fire(target_ptr) || has_immune_fire(target_ptr)))
143 inventory_damage(target_ptr, set_acid_destroy, 3);
146 void effect_player_nether(player_type *target_ptr, effect_player_type *ep_ptr)
148 if (target_ptr->blind)
149 msg_print(_("地獄の力で攻撃された!", "You are hit by nether forces!"));
151 ep_ptr->dam = ep_ptr->dam * calc_nether_damage_rate(target_ptr, CALC_RAND) / 100;
153 if (!target_ptr->resist_neth && !check_multishadow(target_ptr))
154 drain_exp(target_ptr, 200 + (target_ptr->exp / 100), 200 + (target_ptr->exp / 1000), 75);
156 if (!is_specific_player_race(target_ptr, RACE_SPECTRE) || check_multishadow(target_ptr)) {
157 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
161 msg_print(_("気分がよくなった。", "You feel invigorated!"));
162 hp_player(target_ptr, ep_ptr->dam / 4);
163 learn_spell(target_ptr, ep_ptr->monspell);
166 void effect_player_water(player_type *target_ptr, effect_player_type *ep_ptr)
168 if (target_ptr->blind)
169 msg_print(_("何か湿ったもので攻撃された!", "You are hit by something wet!"));
170 if (check_multishadow(target_ptr)) {
171 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
175 if (!target_ptr->resist_sound && !target_ptr->resist_water) {
176 set_stun(target_ptr, target_ptr->stun + randint1(40));
178 if (!target_ptr->resist_conf && !target_ptr->resist_water) {
179 set_confused(target_ptr, target_ptr->confused + randint1(5) + 5);
182 if (one_in_(5) && !target_ptr->resist_water) {
183 inventory_damage(target_ptr, set_cold_destroy, 3);
186 if (target_ptr->resist_water)
187 ep_ptr->get_damage /= 4;
189 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
192 void effect_player_chaos(player_type *target_ptr, effect_player_type *ep_ptr)
194 if (target_ptr->blind)
195 msg_print(_("無秩序の波動で攻撃された!", "You are hit by a wave of anarchy!"));
197 ep_ptr->dam = ep_ptr->dam * calc_chaos_damage_rate(target_ptr, CALC_RAND) / 100;
199 if (check_multishadow(target_ptr)) {
200 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
204 if (!target_ptr->resist_conf) {
205 (void)set_confused(target_ptr, target_ptr->confused + randint0(20) + 10);
207 if (!target_ptr->resist_chaos) {
208 (void)set_image(target_ptr, target_ptr->image + randint1(10));
210 msg_print(_("あなたの身体はカオスの力で捻じ曲げられた!", "Your body is twisted by chaos!"));
211 (void)gain_mutation(target_ptr, 0);
214 if (!target_ptr->resist_neth && !target_ptr->resist_chaos) {
215 drain_exp(target_ptr, 5000 + (target_ptr->exp / 100), 500 + (target_ptr->exp / 1000), 75);
218 if (!target_ptr->resist_chaos || one_in_(9)) {
219 inventory_damage(target_ptr, set_elec_destroy, 2);
220 inventory_damage(target_ptr, set_fire_destroy, 2);
223 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
226 void effect_player_shards(player_type *target_ptr, effect_player_type *ep_ptr)
228 if (target_ptr->blind)
229 msg_print(_("何か鋭いもので攻撃された!", "You are hit by something sharp!"));
231 ep_ptr->dam = ep_ptr->dam * calc_shards_damage_rate(target_ptr, CALC_RAND) / 100;
233 if (!target_ptr->resist_shard && !check_multishadow(target_ptr)) {
234 (void)set_cut(target_ptr, target_ptr->cut + ep_ptr->dam);
237 if (!target_ptr->resist_shard || one_in_(13))
238 inventory_damage(target_ptr, set_cold_destroy, 2);
240 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
243 void effect_player_sound(player_type *target_ptr, effect_player_type *ep_ptr)
245 if (target_ptr->blind)
246 msg_print(_("轟音で攻撃された!", "You are hit by a loud noise!"));
248 ep_ptr->dam = ep_ptr->dam * calc_sound_damage_rate(target_ptr, CALC_RAND) / 100;
250 if (!target_ptr->resist_sound && !check_multishadow(target_ptr)) {
251 int plus_stun = (randint1((ep_ptr->dam > 90) ? 35 : (ep_ptr->dam / 3 + 5)));
252 (void)set_stun(target_ptr, target_ptr->stun + plus_stun);
255 if (!target_ptr->resist_sound || one_in_(13))
256 inventory_damage(target_ptr, set_cold_destroy, 2);
258 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
261 void effect_player_confusion(player_type *target_ptr, effect_player_type *ep_ptr)
263 if (target_ptr->blind)
264 msg_print(_("何か混乱するもので攻撃された!", "You are hit by something puzzling!"));
266 ep_ptr->dam = ep_ptr->dam * calc_conf_damage_rate(target_ptr, CALC_RAND) / 100;
268 if (!target_ptr->resist_conf && !check_multishadow(target_ptr)) {
269 (void)set_confused(target_ptr, target_ptr->confused + randint1(20) + 10);
272 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
275 void effect_player_disenchant(player_type *target_ptr, effect_player_type *ep_ptr)
277 if (target_ptr->blind)
278 msg_print(_("何かさえないもので攻撃された!", "You are hit by something static!"));
280 ep_ptr->dam = ep_ptr->dam * calc_disenchant_damage_rate(target_ptr, CALC_RAND) / 100;
282 if (!target_ptr->resist_disen && !check_multishadow(target_ptr)) {
283 (void)apply_disenchant(target_ptr, 0);
286 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
289 void effect_player_nexus(player_type *target_ptr, effect_player_type *ep_ptr)
291 if (target_ptr->blind)
292 msg_print(_("何か奇妙なもので攻撃された!", "You are hit by something strange!"));
294 ep_ptr->dam = ep_ptr->dam * calc_nexus_damage_rate(target_ptr, CALC_RAND) / 100;
296 if (!target_ptr->resist_nexus && !check_multishadow(target_ptr)) {
297 apply_nexus(ep_ptr->m_ptr, target_ptr);
300 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
303 void effect_player_force(player_type *target_ptr, effect_player_type *ep_ptr)
305 if (target_ptr->blind)
306 msg_print(_("運動エネルギーで攻撃された!", "You are hit by kinetic force!"));
307 if (!target_ptr->resist_sound && !check_multishadow(target_ptr)) {
308 (void)set_stun(target_ptr, target_ptr->stun + randint1(20));
311 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
314 void effect_player_rocket(player_type *target_ptr, effect_player_type *ep_ptr)
316 if (target_ptr->blind)
317 msg_print(_("爆発があった!", "There is an explosion!"));
318 if (!target_ptr->resist_sound && !check_multishadow(target_ptr)) {
319 (void)set_stun(target_ptr, target_ptr->stun + randint1(20));
322 ep_ptr->dam = ep_ptr->dam * calc_rocket_damage_rate(target_ptr, CALC_RAND) / 100;
324 if (!target_ptr->resist_shard && !check_multishadow(target_ptr)) {
325 (void)set_cut(target_ptr, target_ptr->cut + (ep_ptr->dam / 2));
328 if (!target_ptr->resist_shard || one_in_(12)) {
329 inventory_damage(target_ptr, set_cold_destroy, 3);
332 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
335 void effect_player_inertial(player_type *target_ptr, effect_player_type *ep_ptr)
337 if (target_ptr->blind)
338 msg_print(_("何か遅いもので攻撃された!", "You are hit by something slow!"));
339 if (!check_multishadow(target_ptr))
340 (void)set_slow(target_ptr, target_ptr->slow + randint0(4) + 4, FALSE);
342 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
345 void effect_player_lite(player_type *target_ptr, effect_player_type *ep_ptr)
347 if (target_ptr->blind)
348 msg_print(_("何かで攻撃された!", "You are hit by something!"));
349 if (!target_ptr->blind && !target_ptr->resist_lite && !target_ptr->resist_blind && !check_multishadow(target_ptr)) {
350 (void)set_blind(target_ptr, target_ptr->blind + randint1(5) + 2);
353 ep_ptr->dam = ep_ptr->dam * calc_lite_damage_rate(target_ptr, CALC_RAND) / 100;
355 if (is_specific_player_race(target_ptr, RACE_VAMPIRE) || (target_ptr->mimic_form == MIMIC_VAMPIRE)) {
356 if (!check_multishadow(target_ptr))
357 msg_print(_("光で肉体が焦がされた!", "The light scorches your flesh!"));
360 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
362 if (!target_ptr->wraith_form || check_multishadow(target_ptr))
365 target_ptr->wraith_form = 0;
366 msg_print(_("閃光のため非物質的な影の存在でいられなくなった。", "The light forces you out of your incorporeal shadow form."));
368 target_ptr->redraw |= (PR_MAP | PR_STATUS);
369 target_ptr->update |= (PU_MONSTERS);
370 target_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
373 void effect_player_dark(player_type *target_ptr, effect_player_type *ep_ptr)
375 if (target_ptr->blind)
376 msg_print(_("何かで攻撃された!", "You are hit by something!"));
378 ep_ptr->dam = ep_ptr->dam * calc_dark_damage_rate(target_ptr, CALC_RAND) / 100;
380 if (!target_ptr->blind && !target_ptr->resist_dark && !target_ptr->resist_blind && !check_multishadow(target_ptr)) {
381 (void)set_blind(target_ptr, target_ptr->blind + randint1(5) + 2);
384 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
387 static void effect_player_time_one_disability(player_type *target_ptr)
391 switch (randint1(6)) {
394 act = _("強く", "strong");
398 act = _("聡明で", "bright");
402 act = _("賢明で", "wise");
406 act = _("器用で", "agile");
410 act = _("健康で", "hale");
414 act = _("美しく", "beautiful");
418 msg_format(_("あなたは以前ほど%sなくなってしまった...。", "You're not as %s as you used to be..."), act);
419 target_ptr->stat_cur[k] = (target_ptr->stat_cur[k] * 3) / 4;
420 if (target_ptr->stat_cur[k] < 3)
421 target_ptr->stat_cur[k] = 3;
423 target_ptr->update |= (PU_BONUS);
426 static void effect_player_time_all_disabilities(player_type *target_ptr)
428 msg_print(_("あなたは以前ほど力強くなくなってしまった...。", "You're not as powerful as you used to be..."));
429 for (int k = 0; k < A_MAX; k++) {
430 target_ptr->stat_cur[k] = (target_ptr->stat_cur[k] * 7) / 8;
431 if (target_ptr->stat_cur[k] < 3)
432 target_ptr->stat_cur[k] = 3;
435 target_ptr->update |= (PU_BONUS);
438 static void effect_player_time_addition(player_type *target_ptr)
440 switch (randint1(10)) {
446 if (target_ptr->prace == RACE_ANDROID)
449 msg_print(_("人生が逆戻りした気がする。", "You feel like a chunk of the past has been ripped away."));
450 lose_exp(target_ptr, 100 + (target_ptr->exp / 100) * MON_DRAIN_LIFE);
457 effect_player_time_one_disability(target_ptr);
460 effect_player_time_all_disabilities(target_ptr);
465 void effect_player_time(player_type *target_ptr, effect_player_type *ep_ptr)
467 if (target_ptr->blind)
468 msg_print(_("過去からの衝撃に攻撃された!", "You are hit by a blast from the past!"));
470 ep_ptr->dam = ep_ptr->dam * calc_time_damage_rate(target_ptr, CALC_RAND) / 100;
471 if (!check_multishadow(target_ptr)) {
472 if (target_ptr->resist_time) {
473 msg_print(_("時間が通り過ぎていく気がする。", "You feel as if time is passing you by."));
475 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
476 if (!target_ptr->resist_time) {
477 effect_player_time_addition(target_ptr);
482 void effect_player_gravity(player_type *target_ptr, effect_player_type *ep_ptr)
484 if (target_ptr->blind)
485 msg_print(_("何か重いもので攻撃された!", "You are hit by something heavy!"));
486 msg_print(_("周辺の重力がゆがんだ。", "Gravity warps around you."));
488 if (!check_multishadow(target_ptr)) {
489 teleport_player(target_ptr, 5, TELEPORT_PASSIVE);
490 if (!target_ptr->levitation)
491 (void)set_slow(target_ptr, target_ptr->slow + randint0(4) + 4, FALSE);
492 if (!(target_ptr->resist_sound || target_ptr->levitation)) {
493 int plus_stun = (randint1((ep_ptr->dam > 90) ? 35 : (ep_ptr->dam / 3 + 5)));
494 (void)set_stun(target_ptr, target_ptr->stun + plus_stun);
498 ep_ptr->dam = ep_ptr->dam * calc_gravity_damage_rate(target_ptr, CALC_RAND) / 100;
500 if (!target_ptr->levitation || one_in_(13)) {
501 inventory_damage(target_ptr, set_cold_destroy, 2);
504 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
507 void effect_player_disintegration(player_type *target_ptr, effect_player_type *ep_ptr)
509 if (target_ptr->blind)
510 msg_print(_("純粋なエネルギーで攻撃された!", "You are hit by pure energy!"));
512 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
515 void effect_player_death_ray(player_type *target_ptr, effect_player_type *ep_ptr)
517 if (target_ptr->blind)
518 msg_print(_("何か非常に冷たいもので攻撃された!", "You are hit by something extremely cold!"));
520 ep_ptr->dam = ep_ptr->dam * calc_deathray_damage_rate(target_ptr, CALC_RAND) / 100;
521 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
524 void effect_player_mana(player_type *target_ptr, effect_player_type *ep_ptr)
526 if (target_ptr->blind)
527 msg_print(_("魔法のオーラで攻撃された!", "You are hit by an aura of magic!"));
529 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
532 void effect_player_psy_spear(player_type *target_ptr, effect_player_type *ep_ptr)
534 if (target_ptr->blind)
535 msg_print(_("エネルギーの塊で攻撃された!", "You are hit by an energy!"));
537 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_FORCE, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
540 void effect_player_meteor(player_type *target_ptr, effect_player_type *ep_ptr)
542 if (target_ptr->blind)
543 msg_print(_("何かが空からあなたの頭上に落ちてきた!", "Something falls from the sky on you!"));
545 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
546 if (!target_ptr->resist_shard || one_in_(13)) {
547 if (!has_immune_fire(target_ptr))
548 inventory_damage(target_ptr, set_fire_destroy, 2);
549 inventory_damage(target_ptr, set_cold_destroy, 2);
553 void effect_player_icee(player_type *target_ptr, effect_player_type *ep_ptr)
555 if (target_ptr->blind)
556 msg_print(_("何か鋭く冷たいもので攻撃された!", "You are hit by something sharp and cold!"));
558 ep_ptr->get_damage = cold_dam(target_ptr, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell, FALSE);
559 if (check_multishadow(target_ptr))
562 if (!target_ptr->resist_shard) {
563 (void)set_cut(target_ptr, target_ptr->cut + damroll(5, 8));
566 if (!target_ptr->resist_sound) {
567 (void)set_stun(target_ptr, target_ptr->stun + randint1(15));
570 if ((!(target_ptr->resist_cold || is_oppose_cold(target_ptr))) || one_in_(12)) {
571 if (!has_immune_cold(target_ptr))
572 inventory_damage(target_ptr, set_cold_destroy, 3);
576 void effect_player_hand_doom(player_type *target_ptr, effect_player_type *ep_ptr)
578 if ((randint0(100 + ep_ptr->rlev / 2) < target_ptr->skill_sav) && !check_multishadow(target_ptr)) {
579 msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));
580 learn_spell(target_ptr, ep_ptr->monspell);
582 if (!check_multishadow(target_ptr)) {
583 msg_print(_("あなたは命が薄まっていくように感じた!", "You feel your life fade away!"));
584 curse_equipment(target_ptr, 40, 20);
587 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->m_name, ep_ptr->monspell);
589 if (target_ptr->chp < 1)