2 * @brief 魔法種別による各種処理切り替え
8 #include "effect-monster-util.h"
9 #include "effect/effect-monster-switcher.h"
10 #include "player-damage.h"
12 #include "monster-spell.h"
14 #include "monster-status.h"
15 #include "effect/spells-effect-util.h"
16 #include "player-effects.h"
17 #include "spells-diceroll.h"
18 #include "monsterrace-hook.h"
19 #include "combat/melee.h"
20 #include "cmd/cmd-pet.h" // 暫定、後で消すかも.
21 #include "spell/spells-type.h"
22 #include "effect/effect-monster-resist-hurt.h"
23 #include "effect/effect-monster-psi.h"
25 gf_switch_result effect_monster_telekinesis(player_type *caster_ptr, effect_monster_type *em_ptr)
27 if (em_ptr->seen) em_ptr->obvious = TRUE;
30 if (caster_ptr->riding && (em_ptr->g_ptr->m_idx == caster_ptr->riding)) em_ptr->do_dist = 0;
31 else em_ptr->do_dist = 7;
34 em_ptr->do_stun = damroll((em_ptr->caster_lev / 20) + 3, em_ptr->dam) + 1;
35 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
36 (em_ptr->r_ptr->level > 5 + randint1(em_ptr->dam)))
39 em_ptr->obvious = FALSE;
42 return GF_SWITCH_CONTINUE;
46 // Powerful demons & undead can turn a mindcrafter's attacks back on them.
47 static void effect_monster_domination_corrupted(player_type *caster_ptr, effect_monster_type *em_ptr)
49 bool is_corrupted = ((em_ptr->r_ptr->flags3 & (RF3_UNDEAD | RF3_DEMON)) != 0) &&
50 (em_ptr->r_ptr->level > caster_ptr->lev / 2) &&
54 em_ptr->note = _("には効果がなかった。", " is unaffected.");
55 em_ptr->obvious = FALSE;
60 msg_format(_("%^sの堕落した精神は攻撃を跳ね返した!",
61 (em_ptr->seen ? "%^s's corrupted mind backlashes your attack!" :
62 "%^ss corrupted mind backlashes your attack!")), em_ptr->m_name);
63 if (randint0(100 + em_ptr->r_ptr->level / 2) < caster_ptr->skill_sav)
65 msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));
72 set_stun(caster_ptr, caster_ptr->stun + em_ptr->dam / 2);
75 set_confused(caster_ptr, caster_ptr->confused + em_ptr->dam / 2);
79 if (em_ptr->r_ptr->flags3 & RF3_NO_FEAR)
80 em_ptr->note = _("には効果がなかった。", " is unaffected.");
82 set_afraid(caster_ptr, caster_ptr->afraid + em_ptr->dam);
88 gf_switch_result effect_monster_domination(player_type *caster_ptr, effect_monster_type *em_ptr)
90 if (!is_hostile(em_ptr->m_ptr)) return GF_SWITCH_CONTINUE;
92 if (em_ptr->seen) em_ptr->obvious = TRUE;
94 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE | RF1_QUESTOR)) ||
95 (em_ptr->r_ptr->flags3 & RF3_NO_CONF) ||
96 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
98 if (((em_ptr->r_ptr->flags3 & RF3_NO_CONF) != 0) && is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
99 em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
102 effect_monster_domination_corrupted(caster_ptr, em_ptr);
104 return GF_SWITCH_CONTINUE;
107 if (!common_saving_throw_charm(caster_ptr, em_ptr->dam, em_ptr->m_ptr))
109 em_ptr->note = _("があなたに隷属した。", " is in your thrall!");
110 set_pet(caster_ptr, em_ptr->m_ptr);
112 return GF_SWITCH_CONTINUE;
118 em_ptr->do_stun = em_ptr->dam / 2;
121 em_ptr->do_conf = em_ptr->dam / 2;
124 em_ptr->do_fear = em_ptr->dam;
128 return GF_SWITCH_CONTINUE;
133 * @brief 魔法の効果によって様々なメッセーを出力したり与えるダメージの増減を行ったりする
134 * @param em_ptr モンスター効果構造体への参照ポインタ
135 * @return ここのスイッチングで終るならTRUEかFALSE、後続処理を実行するならCONTINUE
137 gf_switch_result switch_effects_monster(player_type *caster_ptr, effect_monster_type *em_ptr)
139 floor_type *floor_ptr = caster_ptr->current_floor_ptr;
140 switch (em_ptr->effect_type)
150 return effect_monster_void(em_ptr);
152 return effect_monster_acid(caster_ptr, em_ptr);
154 return effect_monster_elec(caster_ptr, em_ptr);
156 return effect_monster_fire(caster_ptr, em_ptr);
158 return effect_monster_cold(caster_ptr, em_ptr);
160 return effect_monster_pois(caster_ptr, em_ptr);
162 return effect_monster_nuke(caster_ptr, em_ptr);
164 return effect_monster_hell_fire(caster_ptr, em_ptr);
166 return effect_monster_holy_fire(caster_ptr, em_ptr);
168 return effect_monster_plasma(caster_ptr, em_ptr);
170 return effect_monster_nether(caster_ptr, em_ptr);
172 return effect_monster_water(caster_ptr, em_ptr);
174 return effect_monster_chaos(caster_ptr, em_ptr);
176 return effect_monster_shards(caster_ptr, em_ptr);
178 return effect_monster_rocket(caster_ptr, em_ptr);
180 return effect_monster_sound(caster_ptr, em_ptr);
182 return effect_monster_confusion(caster_ptr, em_ptr);
184 return effect_monster_disenchant(caster_ptr, em_ptr);
186 return effect_monster_nexus(caster_ptr, em_ptr);
188 return effect_monster_force(caster_ptr, em_ptr);
190 return effect_monster_inertial(caster_ptr, em_ptr);
192 return effect_monster_time(caster_ptr, em_ptr);
194 return effect_monster_gravity(caster_ptr, em_ptr);
195 case GF_DISINTEGRATE:
196 return effect_monster_disintegration(caster_ptr, em_ptr);
198 return effect_monster_psi(caster_ptr, em_ptr);
200 return effect_monster_psi_drain(caster_ptr, em_ptr);
202 return effect_monster_telekinesis(caster_ptr, em_ptr);
204 return effect_monster_domination(caster_ptr, em_ptr);
207 if (em_ptr->seen) em_ptr->obvious = TRUE;
208 em_ptr->do_stun = (randint1(15) + 1) / (em_ptr->r + 1);
209 if (em_ptr->r_ptr->flagsr & RFR_IM_COLD)
211 em_ptr->note = _("にはかなり耐性がある!", " resists a lot.");
213 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_IM_COLD);
215 else if (em_ptr->r_ptr->flags3 & (RF3_HURT_COLD))
217 em_ptr->note = _("はひどい痛手をうけた。", " is hit hard.");
219 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_HURT_COLD);
226 if (em_ptr->seen) em_ptr->obvious = TRUE;
227 if (!monster_living(em_ptr->m_ptr->r_idx))
229 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
231 if (em_ptr->r_ptr->flags3 & RF3_DEMON) em_ptr->r_ptr->r_flags3 |= (RF3_DEMON);
232 if (em_ptr->r_ptr->flags3 & RF3_UNDEAD) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
233 if (em_ptr->r_ptr->flags3 & RF3_NONLIVING) em_ptr->r_ptr->r_flags3 |= (RF3_NONLIVING);
235 em_ptr->note = _("には効果がなかった。", " is unaffected.");
236 em_ptr->obvious = FALSE;
240 em_ptr->do_time = (em_ptr->dam + 7) / 8;
246 if (em_ptr->seen) em_ptr->obvious = TRUE;
247 if (!monster_living(em_ptr->m_ptr->r_idx))
249 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
251 if (em_ptr->r_ptr->flags3 & RF3_DEMON) em_ptr->r_ptr->r_flags3 |= (RF3_DEMON);
252 if (em_ptr->r_ptr->flags3 & RF3_UNDEAD) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
253 if (em_ptr->r_ptr->flags3 & RF3_NONLIVING) em_ptr->r_ptr->r_flags3 |= (RF3_NONLIVING);
255 em_ptr->note = _("には完全な耐性がある!", " is immune.");
256 em_ptr->obvious = FALSE;
259 else if (((em_ptr->r_ptr->flags1 & RF1_UNIQUE) &&
260 (randint1(888) != 666)) ||
261 (((em_ptr->r_ptr->level + randint1(20)) > randint1((em_ptr->caster_lev / 2) + randint1(10))) &&
262 randint1(100) != 66))
264 em_ptr->note = _("には耐性がある!", " resists!");
265 em_ptr->obvious = FALSE;
273 if (em_ptr->seen) em_ptr->obvious = TRUE;
274 em_ptr->do_polymorph = TRUE;
276 /* Powerful monsters can resist */
277 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
278 (em_ptr->r_ptr->flags1 & RF1_QUESTOR) ||
279 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
281 em_ptr->note = _("には効果がなかった。", " is unaffected.");
282 em_ptr->do_polymorph = FALSE;
283 em_ptr->obvious = FALSE;
291 if (em_ptr->seen) em_ptr->obvious = TRUE;
293 if ((floor_ptr->inside_arena) || is_pet(em_ptr->m_ptr) || (em_ptr->r_ptr->flags1 & (RF1_UNIQUE | RF1_QUESTOR)) || (em_ptr->r_ptr->flags7 & (RF7_NAZGUL | RF7_UNIQUE2)))
295 em_ptr->note = _("には効果がなかった。", " is unaffected.");
299 em_ptr->m_ptr->hp = em_ptr->m_ptr->maxhp;
300 if (multiply_monster(caster_ptr, em_ptr->g_ptr->m_idx, TRUE, 0L))
302 em_ptr->note = _("が分裂した!", " spawns!");
311 if (em_ptr->seen) em_ptr->obvious = TRUE;
313 (void)set_monster_csleep(caster_ptr, em_ptr->g_ptr->m_idx, 0);
315 if (em_ptr->m_ptr->maxhp < em_ptr->m_ptr->max_maxhp)
317 if (em_ptr->seen_msg) msg_format(_("%^sの強さが戻った。", "%^s recovers %s vitality."), em_ptr->m_name, em_ptr->m_poss);
318 em_ptr->m_ptr->maxhp = em_ptr->m_ptr->max_maxhp;
323 if (caster_ptr->health_who == em_ptr->g_ptr->m_idx) caster_ptr->redraw |= (PR_HEALTH);
324 if (caster_ptr->riding == em_ptr->g_ptr->m_idx) caster_ptr->redraw |= (PR_UHEALTH);
331 if (em_ptr->seen) em_ptr->obvious = TRUE;
334 (void)set_monster_csleep(caster_ptr, em_ptr->g_ptr->m_idx, 0);
335 if (MON_STUNNED(em_ptr->m_ptr))
337 if (em_ptr->seen_msg) msg_format(_("%^sは朦朧状態から立ち直った。", "%^s is no longer stunned."), em_ptr->m_name);
338 (void)set_monster_stunned(caster_ptr, em_ptr->g_ptr->m_idx, 0);
340 if (MON_CONFUSED(em_ptr->m_ptr))
342 if (em_ptr->seen_msg) msg_format(_("%^sは混乱から立ち直った。", "%^s is no longer confused."), em_ptr->m_name);
343 (void)set_monster_confused(caster_ptr, em_ptr->g_ptr->m_idx, 0);
345 if (MON_MONFEAR(em_ptr->m_ptr))
347 if (em_ptr->seen_msg) msg_format(_("%^sは勇気を取り戻した。", "%^s recovers %s courage."), em_ptr->m_name, em_ptr->m_poss);
348 (void)set_monster_monfear(caster_ptr, em_ptr->g_ptr->m_idx, 0);
351 if (em_ptr->m_ptr->hp < 30000) em_ptr->m_ptr->hp += em_ptr->dam;
352 if (em_ptr->m_ptr->hp > em_ptr->m_ptr->maxhp) em_ptr->m_ptr->hp = em_ptr->m_ptr->maxhp;
356 chg_virtue(caster_ptr, V_VITALITY, 1);
358 if (em_ptr->r_ptr->flags1 & RF1_UNIQUE)
359 chg_virtue(caster_ptr, V_INDIVIDUALISM, 1);
361 if (is_friendly(em_ptr->m_ptr))
362 chg_virtue(caster_ptr, V_HONOUR, 1);
363 else if (!(em_ptr->r_ptr->flags3 & RF3_EVIL))
365 if (em_ptr->r_ptr->flags3 & RF3_GOOD)
366 chg_virtue(caster_ptr, V_COMPASSION, 2);
368 chg_virtue(caster_ptr, V_COMPASSION, 1);
371 if (em_ptr->r_ptr->flags3 & RF3_ANIMAL)
372 chg_virtue(caster_ptr, V_NATURE, 1);
375 if (em_ptr->m_ptr->r_idx == MON_LEPER)
377 em_ptr->heal_leper = TRUE;
378 if (!em_ptr->who) chg_virtue(caster_ptr, V_COMPASSION, 5);
381 if (caster_ptr->health_who == em_ptr->g_ptr->m_idx) caster_ptr->redraw |= (PR_HEALTH);
382 if (caster_ptr->riding == em_ptr->g_ptr->m_idx) caster_ptr->redraw |= (PR_UHEALTH);
384 em_ptr->note = _("は体力を回復したようだ。", " looks healthier.");
391 if (em_ptr->seen) em_ptr->obvious = TRUE;
393 if (set_monster_fast(caster_ptr, em_ptr->g_ptr->m_idx, MON_FAST(em_ptr->m_ptr) + 100))
395 em_ptr->note = _("の動きが速くなった。", " starts moving faster.");
400 if (em_ptr->r_ptr->flags1 & RF1_UNIQUE)
401 chg_virtue(caster_ptr, V_INDIVIDUALISM, 1);
402 if (is_friendly(em_ptr->m_ptr))
403 chg_virtue(caster_ptr, V_HONOUR, 1);
411 if (em_ptr->seen) em_ptr->obvious = TRUE;
413 /* Powerful monsters can resist */
414 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
415 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
417 em_ptr->note = _("には効果がなかった。", " is unaffected.");
418 em_ptr->obvious = FALSE;
422 if (set_monster_slow(caster_ptr, em_ptr->g_ptr->m_idx, MON_SLOW(em_ptr->m_ptr) + 50))
424 em_ptr->note = _("の動きが遅くなった。", " starts moving slower.");
433 if (em_ptr->seen) em_ptr->obvious = TRUE;
435 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
436 (em_ptr->r_ptr->flags3 & RF3_NO_SLEEP) ||
437 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
439 if (em_ptr->r_ptr->flags3 & RF3_NO_SLEEP)
441 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_SLEEP);
444 em_ptr->note = _("には効果がなかった。", " is unaffected.");
445 em_ptr->obvious = FALSE;
449 em_ptr->note = _("は眠り込んでしまった!", " falls asleep!");
450 em_ptr->do_sleep = 500;
458 if (em_ptr->seen) em_ptr->obvious = TRUE;
460 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
461 !(em_ptr->r_ptr->flags3 & RF3_EVIL) ||
462 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
464 em_ptr->note = _("には効果がなかった。", " is unaffected.");
465 em_ptr->obvious = FALSE;
469 em_ptr->note = _("は動けなくなった!", " is suspended!");
470 em_ptr->do_sleep = 500;
478 if (em_ptr->seen) em_ptr->obvious = TRUE;
480 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
481 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
483 em_ptr->note = _("には効果がなかった。", " is unaffected.");
484 em_ptr->obvious = FALSE;
488 em_ptr->note = _("は動けなくなった!", " is suspended!");
489 em_ptr->do_sleep = 500;
497 int vir = virtue_number(caster_ptr, V_HARMONY);
500 em_ptr->dam += caster_ptr->virtues[vir - 1] / 10;
503 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
506 em_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
509 if (em_ptr->seen) em_ptr->obvious = TRUE;
511 if (common_saving_throw_charm(caster_ptr, em_ptr->dam, em_ptr->m_ptr))
513 em_ptr->note = _("には効果がなかった。", " is unaffected.");
514 em_ptr->obvious = FALSE;
516 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
518 else if (caster_ptr->cursed & TRC_AGGRAVATE)
520 em_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
521 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
525 em_ptr->note = _("は突然友好的になったようだ!", " suddenly seems friendly!");
526 set_pet(caster_ptr, em_ptr->m_ptr);
528 chg_virtue(caster_ptr, V_INDIVIDUALISM, -1);
529 if (em_ptr->r_ptr->flags3 & RF3_ANIMAL)
530 chg_virtue(caster_ptr, V_NATURE, 1);
536 case GF_CONTROL_UNDEAD:
538 if (em_ptr->seen) em_ptr->obvious = TRUE;
540 int vir = virtue_number(caster_ptr, V_UNLIFE);
543 em_ptr->dam += caster_ptr->virtues[vir - 1] / 10;
546 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
549 em_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
552 if (common_saving_throw_control(caster_ptr, em_ptr->dam, em_ptr->m_ptr) ||
553 !(em_ptr->r_ptr->flags3 & RF3_UNDEAD))
555 em_ptr->note = _("には効果がなかった。", " is unaffected.");
556 em_ptr->obvious = FALSE;
557 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
559 else if (caster_ptr->cursed & TRC_AGGRAVATE)
561 em_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
562 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
566 em_ptr->note = _("は既にあなたの奴隷だ!", " is in your thrall!");
567 set_pet(caster_ptr, em_ptr->m_ptr);
573 case GF_CONTROL_DEMON:
576 if (em_ptr->seen) em_ptr->obvious = TRUE;
578 vir = virtue_number(caster_ptr, V_UNLIFE);
581 em_ptr->dam += caster_ptr->virtues[vir - 1] / 10;
584 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
587 em_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
590 if (common_saving_throw_control(caster_ptr, em_ptr->dam, em_ptr->m_ptr) ||
591 !(em_ptr->r_ptr->flags3 & RF3_DEMON))
593 em_ptr->note = _("には効果がなかった。", " is unaffected.");
594 em_ptr->obvious = FALSE;
595 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
597 else if (caster_ptr->cursed & TRC_AGGRAVATE)
599 em_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
600 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
604 em_ptr->note = _("は既にあなたの奴隷だ!", " is in your thrall!");
605 set_pet(caster_ptr, em_ptr->m_ptr);
611 case GF_CONTROL_ANIMAL:
613 if (em_ptr->seen) em_ptr->obvious = TRUE;
615 int vir = virtue_number(caster_ptr, V_NATURE);
618 em_ptr->dam += caster_ptr->virtues[vir - 1] / 10;
621 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
624 em_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
627 if (common_saving_throw_control(caster_ptr, em_ptr->dam, em_ptr->m_ptr) ||
628 !(em_ptr->r_ptr->flags3 & RF3_ANIMAL))
630 em_ptr->note = _("には効果がなかった。", " is unaffected.");
631 em_ptr->obvious = FALSE;
632 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
634 else if (caster_ptr->cursed & TRC_AGGRAVATE)
636 em_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
637 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
641 em_ptr->note = _("はなついた。", " is tamed!");
642 set_pet(caster_ptr, em_ptr->m_ptr);
643 if (em_ptr->r_ptr->flags3 & RF3_ANIMAL)
644 chg_virtue(caster_ptr, V_NATURE, 1);
650 case GF_CHARM_LIVING:
652 int vir = virtue_number(caster_ptr, V_UNLIFE);
653 if (em_ptr->seen) em_ptr->obvious = TRUE;
655 vir = virtue_number(caster_ptr, V_UNLIFE);
658 em_ptr->dam -= caster_ptr->virtues[vir - 1] / 10;
661 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
664 em_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
667 msg_format(_("%sを見つめた。", "You stare into %s."), em_ptr->m_name);
669 if (common_saving_throw_charm(caster_ptr, em_ptr->dam, em_ptr->m_ptr) ||
670 !monster_living(em_ptr->m_ptr->r_idx))
672 em_ptr->note = _("には効果がなかった。", " is unaffected.");
673 em_ptr->obvious = FALSE;
674 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
676 else if (caster_ptr->cursed & TRC_AGGRAVATE)
678 em_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
679 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
683 em_ptr->note = _("を支配した。", " is tamed!");
684 set_pet(caster_ptr, em_ptr->m_ptr);
685 if (em_ptr->r_ptr->flags3 & RF3_ANIMAL)
686 chg_virtue(caster_ptr, V_NATURE, 1);
694 if (em_ptr->seen) em_ptr->obvious = TRUE;
696 em_ptr->do_conf = damroll(3, (em_ptr->dam / 2)) + 1;
697 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
698 (em_ptr->r_ptr->flags3 & (RF3_NO_CONF)) ||
699 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
701 if (em_ptr->r_ptr->flags3 & (RF3_NO_CONF))
703 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
707 em_ptr->note = _("には効果がなかった。", " is unaffected.");
708 em_ptr->obvious = FALSE;
716 if (em_ptr->seen) em_ptr->obvious = TRUE;
718 em_ptr->do_stun = damroll((em_ptr->caster_lev / 20) + 3, (em_ptr->dam)) + 1;
719 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
720 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
723 em_ptr->note = _("には効果がなかった。", " is unaffected.");
724 em_ptr->obvious = FALSE;
734 em_ptr->skipped = TRUE;
738 if (em_ptr->r_ptr->flags3 & (RF3_HURT_LITE))
740 if (em_ptr->seen) em_ptr->obvious = TRUE;
742 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_HURT_LITE);
744 em_ptr->note = _("は光に身をすくめた!", " cringes from the light!");
745 em_ptr->note_dies = _("は光を受けてしぼんでしまった!", " shrivels away in the light!");
756 if (em_ptr->seen) em_ptr->obvious = TRUE;
758 if (em_ptr->r_ptr->flagsr & RFR_RES_LITE)
760 em_ptr->note = _("には耐性がある!", " resists!");
761 em_ptr->dam *= 2; em_ptr->dam /= (randint1(6) + 6);
762 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_RES_LITE);
764 else if (em_ptr->r_ptr->flags3 & (RF3_HURT_LITE))
766 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_HURT_LITE);
767 em_ptr->note = _("は光に身をすくめた!", " cringes from the light!");
768 em_ptr->note_dies = _("は光を受けてしぼんでしまった!", " shrivels away in the light!");
775 if (em_ptr->seen) em_ptr->obvious = TRUE;
777 if (em_ptr->r_ptr->flagsr & RFR_RES_DARK)
779 em_ptr->note = _("には耐性がある!", " resists!");
780 em_ptr->dam *= 2; em_ptr->dam /= (randint1(6) + 6);
781 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_RES_DARK);
788 if (em_ptr->r_ptr->flags3 & (RF3_HURT_ROCK))
790 if (em_ptr->seen) em_ptr->obvious = TRUE;
792 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_HURT_ROCK);
794 em_ptr->note = _("の皮膚がただれた!", " loses some skin!");
795 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
806 if (em_ptr->r_ptr->flags3 & (RF3_UNDEAD))
808 bool resists_tele = FALSE;
810 if (em_ptr->r_ptr->flagsr & RFR_RES_TELE)
812 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flagsr & RFR_RES_ALL))
814 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
815 em_ptr->note = _("には効果がなかった。", " is unaffected.");
818 else if (em_ptr->r_ptr->level > randint1(100))
820 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
821 em_ptr->note = _("には耐性がある!", " resists!");
828 if (em_ptr->seen) em_ptr->obvious = TRUE;
829 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
830 em_ptr->do_dist = em_ptr->dam;
835 em_ptr->skipped = TRUE;
843 if (em_ptr->r_ptr->flags3 & (RF3_EVIL))
845 bool resists_tele = FALSE;
847 if (em_ptr->r_ptr->flagsr & RFR_RES_TELE)
849 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flagsr & RFR_RES_ALL))
851 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
852 em_ptr->note = _("には効果がなかった。", " is unaffected.");
855 else if (em_ptr->r_ptr->level > randint1(100))
857 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
858 em_ptr->note = _("には耐性がある!", " resists!");
865 if (em_ptr->seen) em_ptr->obvious = TRUE;
866 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_EVIL);
867 em_ptr->do_dist = em_ptr->dam;
872 em_ptr->skipped = TRUE;
880 bool resists_tele = FALSE;
881 if (em_ptr->r_ptr->flagsr & RFR_RES_TELE)
883 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flagsr & RFR_RES_ALL))
885 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
886 em_ptr->note = _("には効果がなかった。", " is unaffected.");
889 else if (em_ptr->r_ptr->level > randint1(100))
891 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
892 em_ptr->note = _("には耐性がある!", " resists!");
899 if (em_ptr->seen) em_ptr->obvious = TRUE;
901 em_ptr->do_dist = em_ptr->dam;
909 if (em_ptr->r_ptr->flags3 & (RF3_UNDEAD))
911 if (em_ptr->seen) em_ptr->obvious = TRUE;
913 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
915 em_ptr->do_fear = damroll(3, (em_ptr->dam / 2)) + 1;
916 if (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10)
918 em_ptr->note = _("には効果がなかった。", " is unaffected.");
919 em_ptr->obvious = FALSE;
925 em_ptr->skipped = TRUE;
933 if (em_ptr->r_ptr->flags3 & (RF3_EVIL))
935 if (em_ptr->seen) em_ptr->obvious = TRUE;
937 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_EVIL);
939 em_ptr->do_fear = damroll(3, (em_ptr->dam / 2)) + 1;
940 if (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10)
942 em_ptr->note = _("には効果がなかった。", " is unaffected.");
943 em_ptr->obvious = FALSE;
949 em_ptr->skipped = TRUE;
957 if (em_ptr->seen) em_ptr->obvious = TRUE;
959 em_ptr->do_fear = damroll(3, (em_ptr->dam / 2)) + 1;
960 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
961 (em_ptr->r_ptr->flags3 & (RF3_NO_FEAR)) ||
962 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
964 em_ptr->note = _("には効果がなかった。", " is unaffected.");
965 em_ptr->obvious = FALSE;
974 if (em_ptr->r_ptr->flags3 & (RF3_UNDEAD))
976 if (em_ptr->seen) em_ptr->obvious = TRUE;
978 /* Learn about em_ptr->effect_type */
979 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
981 em_ptr->note = _("は身震いした。", " shudders.");
982 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
986 em_ptr->skipped = TRUE;
994 if (em_ptr->r_ptr->flags3 & (RF3_EVIL))
996 if (em_ptr->seen) em_ptr->obvious = TRUE;
998 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_EVIL);
1000 em_ptr->note = _("は身震いした。", " shudders.");
1001 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1005 em_ptr->skipped = TRUE;
1013 if (em_ptr->r_ptr->flags3 & (RF3_GOOD))
1015 if (em_ptr->seen) em_ptr->obvious = TRUE;
1017 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_GOOD);
1019 em_ptr->note = _("は身震いした。", " shudders.");
1020 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1024 em_ptr->skipped = TRUE;
1030 case GF_DISP_LIVING:
1032 if (monster_living(em_ptr->m_ptr->r_idx))
1034 if (em_ptr->seen) em_ptr->obvious = TRUE;
1036 em_ptr->note = _("は身震いした。", " shudders.");
1037 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1041 em_ptr->skipped = TRUE;
1049 if (em_ptr->r_ptr->flags3 & (RF3_DEMON))
1051 if (em_ptr->seen) em_ptr->obvious = TRUE;
1053 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_DEMON);
1055 em_ptr->note = _("は身震いした。", " shudders.");
1056 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1060 em_ptr->skipped = TRUE;
1068 if (em_ptr->seen) em_ptr->obvious = TRUE;
1069 em_ptr->note = _("は身震いした。", " shudders.");
1070 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1075 if (em_ptr->seen) em_ptr->obvious = TRUE;
1076 if ((em_ptr->r_ptr->flags4 & ~(RF4_NOMAGIC_MASK)) || (em_ptr->r_ptr->a_ability_flags1 & ~(RF5_NOMAGIC_MASK)) || (em_ptr->r_ptr->a_ability_flags2 & ~(RF6_NOMAGIC_MASK)))
1078 if (em_ptr->who > 0)
1080 if (em_ptr->m_caster_ptr->hp < em_ptr->m_caster_ptr->maxhp)
1082 em_ptr->m_caster_ptr->hp += em_ptr->dam;
1083 if (em_ptr->m_caster_ptr->hp > em_ptr->m_caster_ptr->maxhp) em_ptr->m_caster_ptr->hp = em_ptr->m_caster_ptr->maxhp;
1084 if (caster_ptr->health_who == em_ptr->who) caster_ptr->redraw |= (PR_HEALTH);
1085 if (caster_ptr->riding == em_ptr->who) caster_ptr->redraw |= (PR_UHEALTH);
1087 if (em_ptr->see_s_msg)
1089 monster_desc(caster_ptr, em_ptr->killer, em_ptr->m_caster_ptr, 0);
1090 msg_format(_("%^sは気分が良さそうだ。", "%^s appears healthier."), em_ptr->killer);
1096 msg_format(_("%sから精神エネルギーを吸いとった。", "You draw psychic energy from %s."), em_ptr->m_name);
1097 (void)hp_player(caster_ptr, em_ptr->dam);
1102 if (em_ptr->see_s_msg) msg_format(_("%sには効果がなかった。", "%s is unaffected."), em_ptr->m_name);
1110 if (em_ptr->seen) em_ptr->obvious = TRUE;
1111 if (!em_ptr->who) msg_format(_("%sをじっと睨んだ。", "You gaze intently at %s."), em_ptr->m_name);
1113 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
1114 (em_ptr->r_ptr->flags3 & RF3_NO_CONF) ||
1115 (em_ptr->r_ptr->level > randint1((em_ptr->caster_lev - 10) < 1 ? 1 : (em_ptr->caster_lev - 10)) + 10))
1117 if (em_ptr->r_ptr->flags3 & (RF3_NO_CONF))
1119 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
1122 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1125 else if (em_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
1127 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags2 |= (RF2_EMPTY_MIND);
1128 em_ptr->note = _("には完全な耐性がある!", " is immune.");
1131 else if (em_ptr->r_ptr->flags2 & RF2_WEIRD_MIND)
1133 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags2 |= (RF2_WEIRD_MIND);
1134 em_ptr->note = _("には耐性がある。", " resists.");
1139 em_ptr->note = _("は精神攻撃を食らった。", " is blasted by psionic energy.");
1140 em_ptr->note_dies = _("の精神は崩壊し、肉体は抜け殻となった。", " collapses, a mindless husk.");
1142 if (em_ptr->who > 0) em_ptr->do_conf = randint0(4) + 4;
1143 else em_ptr->do_conf = randint0(8) + 8;
1148 case GF_BRAIN_SMASH:
1150 if (em_ptr->seen) em_ptr->obvious = TRUE;
1151 if (!em_ptr->who) msg_format(_("%sをじっと睨んだ。", "You gaze intently at %s."), em_ptr->m_name);
1153 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
1154 (em_ptr->r_ptr->flags3 & RF3_NO_CONF) ||
1155 (em_ptr->r_ptr->level > randint1((em_ptr->caster_lev - 10) < 1 ? 1 : (em_ptr->caster_lev - 10)) + 10))
1157 if (em_ptr->r_ptr->flags3 & (RF3_NO_CONF))
1159 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
1162 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1165 else if (em_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
1167 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags2 |= (RF2_EMPTY_MIND);
1168 em_ptr->note = _("には完全な耐性がある!", " is immune.");
1171 else if (em_ptr->r_ptr->flags2 & RF2_WEIRD_MIND)
1173 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags2 |= (RF2_WEIRD_MIND);
1174 em_ptr->note = _("には耐性がある!", " resists!");
1179 em_ptr->note = _("は精神攻撃を食らった。", " is blasted by psionic energy.");
1180 em_ptr->note_dies = _("の精神は崩壊し、肉体は抜け殻となった。", " collapses, a mindless husk.");
1181 if (em_ptr->who > 0)
1183 em_ptr->do_conf = randint0(4) + 4;
1184 em_ptr->do_stun = randint0(4) + 4;
1188 em_ptr->do_conf = randint0(8) + 8;
1189 em_ptr->do_stun = randint0(8) + 8;
1191 (void)set_monster_slow(caster_ptr, em_ptr->g_ptr->m_idx, MON_SLOW(em_ptr->m_ptr) + 10);
1198 if (em_ptr->seen) em_ptr->obvious = TRUE;
1199 if (!em_ptr->who) msg_format(_("%sを指差して呪いをかけた。", "You point at %s and curse."), em_ptr->m_name);
1200 if (randint0(100 + (em_ptr->caster_lev / 2)) < (em_ptr->r_ptr->level + 35))
1202 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1210 if (em_ptr->seen) em_ptr->obvious = TRUE;
1211 if (!em_ptr->who) msg_format(_("%sを指差して恐ろしげに呪いをかけた。", "You point at %s and curse horribly."), em_ptr->m_name);
1213 if (randint0(100 + (em_ptr->caster_lev / 2)) < (em_ptr->r_ptr->level + 35))
1215 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1223 if (em_ptr->seen) em_ptr->obvious = TRUE;
1224 if (!em_ptr->who) msg_format(_("%sを指差し、恐ろしげに呪文を唱えた!", "You point at %s, incanting terribly!"), em_ptr->m_name);
1226 if (randint0(100 + (em_ptr->caster_lev / 2)) < (em_ptr->r_ptr->level + 35))
1228 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1236 if (em_ptr->seen) em_ptr->obvious = TRUE;
1238 msg_format(_("%sの秘孔を突いて、「お前は既に死んでいる」と叫んだ。",
1239 "You point at %s, screaming the word, 'DIE!'."), em_ptr->m_name);
1241 if ((randint0(100 + (em_ptr->caster_lev / 2)) < (em_ptr->r_ptr->level + 35)) && ((em_ptr->who <= 0) || (em_ptr->m_caster_ptr->r_idx != MON_KENSHIROU)))
1243 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1250 if (em_ptr->seen) em_ptr->obvious = TRUE;
1251 if (em_ptr->r_ptr->flags1 & RF1_UNIQUE)
1253 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1258 if ((em_ptr->who > 0) ? ((em_ptr->caster_lev + randint1(em_ptr->dam)) > (em_ptr->r_ptr->level + 10 + randint1(20))) :
1259 (((em_ptr->caster_lev / 2) + randint1(em_ptr->dam)) > (em_ptr->r_ptr->level + randint1(200))))
1261 em_ptr->dam = ((40 + randint1(20)) * em_ptr->m_ptr->hp) / 100;
1263 if (em_ptr->m_ptr->hp < em_ptr->dam) em_ptr->dam = em_ptr->m_ptr->hp - 1;
1267 em_ptr->note = _("は破滅の手に耐え切った!", "resists!");
1277 if ((floor_ptr->inside_quest && (quest[floor_ptr->inside_quest].type == QUEST_TYPE_KILL_ALL) && !is_pet(em_ptr->m_ptr)) ||
1278 (em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flags7 & (RF7_NAZGUL)) || (em_ptr->r_ptr->flags7 & (RF7_UNIQUE2)) || (em_ptr->r_ptr->flags1 & RF1_QUESTOR) || em_ptr->m_ptr->parent_m_idx)
1280 msg_format(_("%sには効果がなかった。", "%s is unaffected."), em_ptr->m_name);
1281 em_ptr->skipped = TRUE;
1285 if (is_pet(em_ptr->m_ptr)) nokori_hp = em_ptr->m_ptr->maxhp * 4L;
1286 else if ((caster_ptr->pclass == CLASS_BEASTMASTER) && monster_living(em_ptr->m_ptr->r_idx))
1287 nokori_hp = em_ptr->m_ptr->maxhp * 3 / 10;
1289 nokori_hp = em_ptr->m_ptr->maxhp * 3 / 20;
1291 if (em_ptr->m_ptr->hp >= nokori_hp)
1293 msg_format(_("もっと弱らせないと。", "You need to weaken %s more."), em_ptr->m_name);
1294 em_ptr->skipped = TRUE;
1296 else if (em_ptr->m_ptr->hp < randint0(nokori_hp))
1298 if (em_ptr->m_ptr->mflag2 & MFLAG2_CHAMELEON) choose_new_monster(caster_ptr, em_ptr->g_ptr->m_idx, FALSE, MON_CHAMELEON);
1299 msg_format(_("%sを捕えた!", "You capture %^s!"), em_ptr->m_name);
1300 cap_mon = em_ptr->m_ptr->r_idx;
1301 cap_mspeed = em_ptr->m_ptr->mspeed;
1302 cap_hp = em_ptr->m_ptr->hp;
1303 cap_maxhp = em_ptr->m_ptr->max_maxhp;
1304 cap_nickname = em_ptr->m_ptr->nickname;
1305 if (em_ptr->g_ptr->m_idx == caster_ptr->riding)
1307 if (rakuba(caster_ptr, -1, FALSE))
1309 msg_format(_("地面に落とされた。", "You have fallen from %s."), em_ptr->m_name);
1313 delete_monster_idx(caster_ptr, em_ptr->g_ptr->m_idx);
1315 return GF_SWITCH_TRUE;
1319 msg_format(_("うまく捕まえられなかった。", "You failed to capture %s."), em_ptr->m_name);
1320 em_ptr->skipped = TRUE;
1327 return (gf_switch_result)py_attack(caster_ptr, em_ptr->y, em_ptr->x, em_ptr->dam);
1334 if (em_ptr->seen) em_ptr->obvious = TRUE;
1335 if (em_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
1337 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1339 em_ptr->skipped = TRUE;
1340 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags2 |= (RF2_EMPTY_MIND);
1343 if (MON_CSLEEP(em_ptr->m_ptr))
1345 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1347 em_ptr->skipped = TRUE;
1351 if (one_in_(5)) effect = 1;
1352 else if (one_in_(4)) effect = 2;
1353 else if (one_in_(3)) effect = 3;
1358 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
1359 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
1361 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1362 em_ptr->obvious = FALSE;
1366 if (set_monster_slow(caster_ptr, em_ptr->g_ptr->m_idx, MON_SLOW(em_ptr->m_ptr) + 50))
1368 em_ptr->note = _("の動きが遅くなった。", " starts moving slower.");
1372 else if (effect == 2)
1374 em_ptr->do_stun = damroll((caster_ptr->lev / 10) + 3, (em_ptr->dam)) + 1;
1375 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
1376 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
1378 em_ptr->do_stun = 0;
1379 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1380 em_ptr->obvious = FALSE;
1383 else if (effect == 3)
1385 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
1386 (em_ptr->r_ptr->flags3 & RF3_NO_SLEEP) ||
1387 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
1389 if (em_ptr->r_ptr->flags3 & RF3_NO_SLEEP)
1391 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_SLEEP);
1394 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1395 em_ptr->obvious = FALSE;
1399 /* Go to sleep (much) later */
1400 em_ptr->note = _("は眠り込んでしまった!", " falls asleep!");
1401 em_ptr->do_sleep = 500;
1407 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1415 if (em_ptr->seen) em_ptr->obvious = TRUE;
1416 if (genocide_aux(caster_ptr, em_ptr->g_ptr->m_idx, em_ptr->dam, !em_ptr->who, (em_ptr->r_ptr->level + 1) / 2, _("モンスター消滅", "Genocide One")))
1418 if (em_ptr->seen_msg) msg_format(_("%sは消滅した!", "%^s disappeared!"), em_ptr->m_name);
1419 chg_virtue(caster_ptr, V_VITALITY, -1);
1420 return GF_SWITCH_TRUE;
1423 em_ptr->skipped = TRUE;
1429 msg_format(_("%sを写真に撮った。", "You take a photograph of %s."), em_ptr->m_name);
1431 if (em_ptr->r_ptr->flags3 & (RF3_HURT_LITE))
1433 if (em_ptr->seen) em_ptr->obvious = TRUE;
1435 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_HURT_LITE);
1437 em_ptr->note = _("は光に身をすくめた!", " cringes from the light!");
1438 em_ptr->note_dies = _("は光を受けてしぼんでしまった!", " shrivels away in the light!");
1445 em_ptr->photo = em_ptr->m_ptr->r_idx;
1450 bool success = FALSE;
1451 if (em_ptr->seen) em_ptr->obvious = TRUE;
1453 if ((em_ptr->r_ptr->flags3 & (RF3_GOOD)) && !floor_ptr->inside_arena)
1455 if (em_ptr->r_ptr->flags3 & (RF3_NO_CONF)) em_ptr->dam -= 50;
1456 if (em_ptr->dam < 1) em_ptr->dam = 1;
1458 if (is_pet(em_ptr->m_ptr))
1460 em_ptr->note = _("の動きが速くなった。", " starts moving faster.");
1461 (void)set_monster_fast(caster_ptr, em_ptr->g_ptr->m_idx, MON_FAST(em_ptr->m_ptr) + 100);
1464 else if ((em_ptr->r_ptr->flags1 & (RF1_QUESTOR)) ||
1465 (em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
1466 (em_ptr->m_ptr->mflag2 & MFLAG2_NOPET) ||
1467 (caster_ptr->cursed & TRC_AGGRAVATE) ||
1468 ((em_ptr->r_ptr->level + 10) > randint1(em_ptr->dam)))
1470 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1474 em_ptr->note = _("を支配した。", " is tamed!");
1475 set_pet(caster_ptr, em_ptr->m_ptr);
1476 (void)set_monster_fast(caster_ptr, em_ptr->g_ptr->m_idx, MON_FAST(em_ptr->m_ptr) + 100);
1478 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_GOOD);
1485 if (!(em_ptr->r_ptr->flags3 & RF3_NO_FEAR))
1487 em_ptr->do_fear = randint1(90) + 10;
1489 else if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
1490 em_ptr->r_ptr->r_flags3 |= (RF3_NO_FEAR);
1498 if (em_ptr->seen) em_ptr->obvious = TRUE;
1500 if (randint0(100 + em_ptr->dam) < (em_ptr->r_ptr->level + 50))
1502 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1509 em_ptr->skipped = TRUE;
1515 return GF_SWITCH_CONTINUE;