2 * @brief 魔法種別による各種処理切り替え
8 #include "effect-monster-util.h"
9 #include "effect/effect-monster-switcher.h"
10 #include "player-damage.h"
13 #include "monster-spell.h"
15 #include "monster-status.h"
16 #include "effect/spells-effect-util.h"
17 #include "player-effects.h"
18 #include "spells-diceroll.h"
19 #include "monsterrace-hook.h"
20 #include "combat/melee.h"
21 #include "cmd/cmd-pet.h" // 暫定、後で消すかも.
22 #include "spell/spells-type.h"
23 #include "effect/effect-monster-resist-hurt.h"
26 * @brief 魔法の効果によって様々なメッセーを出力したり与えるダメージの増減を行ったりする
27 * @param em_ptr モンスター効果構造体への参照ポインタ
28 * @return ここのスイッチングで終るならTRUEかFALSE、後続処理を実行するならCONTINUE
30 gf_switch_result switch_effects_monster(player_type *caster_ptr, effect_monster_type *em_ptr)
32 floor_type *floor_ptr = caster_ptr->current_floor_ptr;
33 switch (em_ptr->effect_type)
43 return effect_monster_void(em_ptr);
45 return effect_monster_acid(caster_ptr, em_ptr);
47 return effect_monster_elec(caster_ptr, em_ptr);
49 return effect_monster_fire(caster_ptr, em_ptr);
51 return effect_monster_cold(caster_ptr, em_ptr);
53 return effect_monster_pois(caster_ptr, em_ptr);
55 return effect_monster_nuke(caster_ptr, em_ptr);
57 return effect_monster_hell_fire(caster_ptr, em_ptr);
59 return effect_monster_holy_fire(caster_ptr, em_ptr);
61 return effect_monster_plasma(caster_ptr, em_ptr);
63 return effect_monster_nether(caster_ptr, em_ptr);
65 return effect_monster_water(caster_ptr, em_ptr);
67 return effect_monster_chaos(caster_ptr, em_ptr);
69 return effect_monster_shards(caster_ptr, em_ptr);
71 return effect_monster_rocket(caster_ptr, em_ptr);
73 return effect_monster_sound(caster_ptr, em_ptr);
75 return effect_monster_confusion(caster_ptr, em_ptr);
77 return effect_monster_disenchant(caster_ptr, em_ptr);
79 return effect_monster_nexus(caster_ptr, em_ptr);
81 return effect_monster_force(caster_ptr, em_ptr);
83 return effect_monster_inertial(caster_ptr, em_ptr);
85 return effect_monster_time(caster_ptr, em_ptr);
87 return effect_monster_gravity(caster_ptr, em_ptr);
89 return effect_monster_disintegration(caster_ptr, em_ptr);
92 if (em_ptr->seen) em_ptr->obvious = TRUE;
93 if (!(los(caster_ptr, em_ptr->m_ptr->fy, em_ptr->m_ptr->fx, caster_ptr->y, caster_ptr->x)))
96 msg_format(_("%sはあなたが見えないので影響されない!", "%^s can't see you, and isn't affected!"), em_ptr->m_name);
97 em_ptr->skipped = TRUE;
101 if (em_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
104 em_ptr->note = _("には完全な耐性がある!", " is immune.");
105 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags2 |= (RF2_EMPTY_MIND);
108 else if ((em_ptr->r_ptr->flags2 & (RF2_STUPID | RF2_WEIRD_MIND)) ||
109 (em_ptr->r_ptr->flags3 & RF3_ANIMAL) ||
110 (em_ptr->r_ptr->level > randint1(3 * em_ptr->dam)))
112 em_ptr->note = _("には耐性がある!", " resists!");
116 * Powerful demons & undead can turn a mindcrafter's
117 * attacks back on them
119 if ((em_ptr->r_ptr->flags3 & (RF3_UNDEAD | RF3_DEMON)) &&
120 (em_ptr->r_ptr->level > caster_ptr->lev / 2) &&
124 msg_format(_("%^sの堕落した精神は攻撃を跳ね返した!",
125 (em_ptr->seen ? "%^s's corrupted mind backlashes your attack!" :
126 "%^ss corrupted mind backlashes your attack!")), em_ptr->m_name);
128 if ((randint0(100 + em_ptr->r_ptr->level / 2) < caster_ptr->skill_sav) && !CHECK_MULTISHADOW(caster_ptr))
130 msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));
134 /* Injure +/- confusion */
135 monster_desc(caster_ptr, em_ptr->killer, em_ptr->m_ptr, MD_WRONGDOER_NAME);
136 take_hit(caster_ptr, DAMAGE_ATTACK, em_ptr->dam, em_ptr->killer, -1); /* has already been /3 */
137 if (one_in_(4) && !CHECK_MULTISHADOW(caster_ptr))
142 set_confused(caster_ptr, caster_ptr->confused + 3 + randint1(em_ptr->dam));
145 set_stun(caster_ptr, caster_ptr->stun + randint1(em_ptr->dam));
149 if (em_ptr->r_ptr->flags3 & RF3_NO_FEAR)
150 em_ptr->note = _("には効果がなかった。", " is unaffected.");
152 set_afraid(caster_ptr, caster_ptr->afraid + 3 + randint1(em_ptr->dam));
156 if (!caster_ptr->free_act)
157 (void)set_paralyzed(caster_ptr, caster_ptr->paralyzed + randint1(em_ptr->dam));
167 if ((em_ptr->dam > 0) && one_in_(4))
172 em_ptr->do_conf = 3 + randint1(em_ptr->dam);
175 em_ptr->do_stun = 3 + randint1(em_ptr->dam);
178 em_ptr->do_fear = 3 + randint1(em_ptr->dam);
181 em_ptr->note = _("は眠り込んでしまった!", " falls asleep!");
182 em_ptr->do_sleep = 3 + randint1(em_ptr->dam);
187 em_ptr->note_dies = _("の精神は崩壊し、肉体は抜け殻となった。", " collapses, a mindless husk.");
192 if (em_ptr->seen) em_ptr->obvious = TRUE;
193 if (em_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
196 em_ptr->note = _("には完全な耐性がある!", " is immune.");
198 else if ((em_ptr->r_ptr->flags2 & (RF2_STUPID | RF2_WEIRD_MIND)) ||
199 (em_ptr->r_ptr->flags3 & RF3_ANIMAL) ||
200 (em_ptr->r_ptr->level > randint1(3 * em_ptr->dam)))
202 em_ptr->note = _("には耐性がある!", " resists!");
206 * Powerful demons & undead can turn a mindcrafter's
207 * attacks back on them
209 if ((em_ptr->r_ptr->flags3 & (RF3_UNDEAD | RF3_DEMON)) &&
210 (em_ptr->r_ptr->level > caster_ptr->lev / 2) &&
214 msg_format(_("%^sの堕落した精神は攻撃を跳ね返した!",
215 (em_ptr->seen ? "%^s's corrupted mind backlashes your attack!" :
216 "%^ss corrupted mind backlashes your attack!")), em_ptr->m_name);
217 if ((randint0(100 + em_ptr->r_ptr->level / 2) < caster_ptr->skill_sav) && !CHECK_MULTISHADOW(caster_ptr))
219 msg_print(_("あなたは効力を跳ね返した!", "You resist the effects!"));
223 monster_desc(caster_ptr, em_ptr->killer, em_ptr->m_ptr, MD_WRONGDOER_NAME);
224 if (!CHECK_MULTISHADOW(caster_ptr))
226 msg_print(_("超能力パワーを吸いとられた!", "Your psychic energy is drained!"));
227 caster_ptr->csp -= damroll(5, em_ptr->dam) / 2;
228 if (caster_ptr->csp < 0) caster_ptr->csp = 0;
229 caster_ptr->redraw |= PR_MANA;
230 caster_ptr->window |= (PW_SPELL);
232 take_hit(caster_ptr, DAMAGE_ATTACK, em_ptr->dam, em_ptr->killer, -1); /* has already been /3 */
238 else if (em_ptr->dam > 0)
240 int b = damroll(5, em_ptr->dam) / 4;
241 concptr str = (caster_ptr->pclass == CLASS_MINDCRAFTER) ? _("超能力パワー", "psychic energy") : _("魔力", "mana");
242 concptr msg = _("あなたは%sの苦痛を%sに変換した!",
243 (em_ptr->seen ? "You convert %s's pain into %s!" :
244 "You convert %ss pain into %s!"));
245 msg_format(msg, em_ptr->m_name, str);
247 b = MIN(caster_ptr->msp, caster_ptr->csp + b);
249 caster_ptr->redraw |= PR_MANA;
250 caster_ptr->window |= (PW_SPELL);
253 em_ptr->note_dies = _("の精神は崩壊し、肉体は抜け殻となった。", " collapses, a mindless husk.");
258 if (em_ptr->seen) em_ptr->obvious = TRUE;
261 if (caster_ptr->riding && (em_ptr->g_ptr->m_idx == caster_ptr->riding)) em_ptr->do_dist = 0;
262 else em_ptr->do_dist = 7;
265 em_ptr->do_stun = damroll((em_ptr->caster_lev / 20) + 3, em_ptr->dam) + 1;
266 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
267 (em_ptr->r_ptr->level > 5 + randint1(em_ptr->dam)))
270 em_ptr->obvious = FALSE;
277 if (!is_hostile(em_ptr->m_ptr)) break;
278 if (em_ptr->seen) em_ptr->obvious = TRUE;
279 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE | RF1_QUESTOR)) ||
280 (em_ptr->r_ptr->flags3 & RF3_NO_CONF) ||
281 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
283 if (em_ptr->r_ptr->flags3 & RF3_NO_CONF)
285 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
291 * Powerful demons & undead can turn a mindcrafter's
292 * attacks back on them
294 if ((em_ptr->r_ptr->flags3 & (RF3_UNDEAD | RF3_DEMON)) &&
295 (em_ptr->r_ptr->level > caster_ptr->lev / 2) &&
299 msg_format(_("%^sの堕落した精神は攻撃を跳ね返した!",
300 (em_ptr->seen ? "%^s's corrupted mind backlashes your attack!" :
301 "%^ss corrupted mind backlashes your attack!")), em_ptr->m_name);
304 if (randint0(100 + em_ptr->r_ptr->level / 2) < caster_ptr->skill_sav)
306 msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));
310 /* Confuse, stun, terrify */
314 set_stun(caster_ptr, caster_ptr->stun + em_ptr->dam / 2);
317 set_confused(caster_ptr, caster_ptr->confused + em_ptr->dam / 2);
321 if (em_ptr->r_ptr->flags3 & RF3_NO_FEAR)
322 em_ptr->note = _("には効果がなかった。", " is unaffected.");
324 set_afraid(caster_ptr, caster_ptr->afraid + em_ptr->dam);
331 em_ptr->note = _("には効果がなかった。", " is unaffected.");
332 em_ptr->obvious = FALSE;
337 if (!common_saving_throw_charm(caster_ptr, em_ptr->dam, em_ptr->m_ptr))
339 em_ptr->note = _("があなたに隷属した。", " is in your thrall!");
340 set_pet(caster_ptr, em_ptr->m_ptr);
347 em_ptr->do_stun = em_ptr->dam / 2;
350 em_ptr->do_conf = em_ptr->dam / 2;
353 em_ptr->do_fear = em_ptr->dam;
363 if (em_ptr->seen) em_ptr->obvious = TRUE;
364 em_ptr->do_stun = (randint1(15) + 1) / (em_ptr->r + 1);
365 if (em_ptr->r_ptr->flagsr & RFR_IM_COLD)
367 em_ptr->note = _("にはかなり耐性がある!", " resists a lot.");
369 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_IM_COLD);
371 else if (em_ptr->r_ptr->flags3 & (RF3_HURT_COLD))
373 em_ptr->note = _("はひどい痛手をうけた。", " is hit hard.");
375 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_HURT_COLD);
382 if (em_ptr->seen) em_ptr->obvious = TRUE;
383 if (!monster_living(em_ptr->m_ptr->r_idx))
385 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
387 if (em_ptr->r_ptr->flags3 & RF3_DEMON) em_ptr->r_ptr->r_flags3 |= (RF3_DEMON);
388 if (em_ptr->r_ptr->flags3 & RF3_UNDEAD) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
389 if (em_ptr->r_ptr->flags3 & RF3_NONLIVING) em_ptr->r_ptr->r_flags3 |= (RF3_NONLIVING);
391 em_ptr->note = _("には効果がなかった。", " is unaffected.");
392 em_ptr->obvious = FALSE;
396 em_ptr->do_time = (em_ptr->dam + 7) / 8;
402 if (em_ptr->seen) em_ptr->obvious = TRUE;
403 if (!monster_living(em_ptr->m_ptr->r_idx))
405 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
407 if (em_ptr->r_ptr->flags3 & RF3_DEMON) em_ptr->r_ptr->r_flags3 |= (RF3_DEMON);
408 if (em_ptr->r_ptr->flags3 & RF3_UNDEAD) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
409 if (em_ptr->r_ptr->flags3 & RF3_NONLIVING) em_ptr->r_ptr->r_flags3 |= (RF3_NONLIVING);
411 em_ptr->note = _("には完全な耐性がある!", " is immune.");
412 em_ptr->obvious = FALSE;
415 else if (((em_ptr->r_ptr->flags1 & RF1_UNIQUE) &&
416 (randint1(888) != 666)) ||
417 (((em_ptr->r_ptr->level + randint1(20)) > randint1((em_ptr->caster_lev / 2) + randint1(10))) &&
418 randint1(100) != 66))
420 em_ptr->note = _("には耐性がある!", " resists!");
421 em_ptr->obvious = FALSE;
429 if (em_ptr->seen) em_ptr->obvious = TRUE;
430 em_ptr->do_polymorph = TRUE;
432 /* Powerful monsters can resist */
433 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
434 (em_ptr->r_ptr->flags1 & RF1_QUESTOR) ||
435 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
437 em_ptr->note = _("には効果がなかった。", " is unaffected.");
438 em_ptr->do_polymorph = FALSE;
439 em_ptr->obvious = FALSE;
447 if (em_ptr->seen) em_ptr->obvious = TRUE;
449 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)))
451 em_ptr->note = _("には効果がなかった。", " is unaffected.");
455 em_ptr->m_ptr->hp = em_ptr->m_ptr->maxhp;
456 if (multiply_monster(caster_ptr, em_ptr->g_ptr->m_idx, TRUE, 0L))
458 em_ptr->note = _("が分裂した!", " spawns!");
467 if (em_ptr->seen) em_ptr->obvious = TRUE;
469 (void)set_monster_csleep(caster_ptr, em_ptr->g_ptr->m_idx, 0);
471 if (em_ptr->m_ptr->maxhp < em_ptr->m_ptr->max_maxhp)
473 if (em_ptr->seen_msg) msg_format(_("%^sの強さが戻った。", "%^s recovers %s vitality."), em_ptr->m_name, em_ptr->m_poss);
474 em_ptr->m_ptr->maxhp = em_ptr->m_ptr->max_maxhp;
479 if (caster_ptr->health_who == em_ptr->g_ptr->m_idx) caster_ptr->redraw |= (PR_HEALTH);
480 if (caster_ptr->riding == em_ptr->g_ptr->m_idx) caster_ptr->redraw |= (PR_UHEALTH);
487 if (em_ptr->seen) em_ptr->obvious = TRUE;
490 (void)set_monster_csleep(caster_ptr, em_ptr->g_ptr->m_idx, 0);
491 if (MON_STUNNED(em_ptr->m_ptr))
493 if (em_ptr->seen_msg) msg_format(_("%^sは朦朧状態から立ち直った。", "%^s is no longer stunned."), em_ptr->m_name);
494 (void)set_monster_stunned(caster_ptr, em_ptr->g_ptr->m_idx, 0);
496 if (MON_CONFUSED(em_ptr->m_ptr))
498 if (em_ptr->seen_msg) msg_format(_("%^sは混乱から立ち直った。", "%^s is no longer confused."), em_ptr->m_name);
499 (void)set_monster_confused(caster_ptr, em_ptr->g_ptr->m_idx, 0);
501 if (MON_MONFEAR(em_ptr->m_ptr))
503 if (em_ptr->seen_msg) msg_format(_("%^sは勇気を取り戻した。", "%^s recovers %s courage."), em_ptr->m_name, em_ptr->m_poss);
504 (void)set_monster_monfear(caster_ptr, em_ptr->g_ptr->m_idx, 0);
507 if (em_ptr->m_ptr->hp < 30000) em_ptr->m_ptr->hp += em_ptr->dam;
508 if (em_ptr->m_ptr->hp > em_ptr->m_ptr->maxhp) em_ptr->m_ptr->hp = em_ptr->m_ptr->maxhp;
512 chg_virtue(caster_ptr, V_VITALITY, 1);
514 if (em_ptr->r_ptr->flags1 & RF1_UNIQUE)
515 chg_virtue(caster_ptr, V_INDIVIDUALISM, 1);
517 if (is_friendly(em_ptr->m_ptr))
518 chg_virtue(caster_ptr, V_HONOUR, 1);
519 else if (!(em_ptr->r_ptr->flags3 & RF3_EVIL))
521 if (em_ptr->r_ptr->flags3 & RF3_GOOD)
522 chg_virtue(caster_ptr, V_COMPASSION, 2);
524 chg_virtue(caster_ptr, V_COMPASSION, 1);
527 if (em_ptr->r_ptr->flags3 & RF3_ANIMAL)
528 chg_virtue(caster_ptr, V_NATURE, 1);
531 if (em_ptr->m_ptr->r_idx == MON_LEPER)
533 em_ptr->heal_leper = TRUE;
534 if (!em_ptr->who) chg_virtue(caster_ptr, V_COMPASSION, 5);
537 if (caster_ptr->health_who == em_ptr->g_ptr->m_idx) caster_ptr->redraw |= (PR_HEALTH);
538 if (caster_ptr->riding == em_ptr->g_ptr->m_idx) caster_ptr->redraw |= (PR_UHEALTH);
540 em_ptr->note = _("は体力を回復したようだ。", " looks healthier.");
547 if (em_ptr->seen) em_ptr->obvious = TRUE;
549 if (set_monster_fast(caster_ptr, em_ptr->g_ptr->m_idx, MON_FAST(em_ptr->m_ptr) + 100))
551 em_ptr->note = _("の動きが速くなった。", " starts moving faster.");
556 if (em_ptr->r_ptr->flags1 & RF1_UNIQUE)
557 chg_virtue(caster_ptr, V_INDIVIDUALISM, 1);
558 if (is_friendly(em_ptr->m_ptr))
559 chg_virtue(caster_ptr, V_HONOUR, 1);
567 if (em_ptr->seen) em_ptr->obvious = TRUE;
569 /* Powerful monsters can resist */
570 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
571 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
573 em_ptr->note = _("には効果がなかった。", " is unaffected.");
574 em_ptr->obvious = FALSE;
578 if (set_monster_slow(caster_ptr, em_ptr->g_ptr->m_idx, MON_SLOW(em_ptr->m_ptr) + 50))
580 em_ptr->note = _("の動きが遅くなった。", " starts moving slower.");
589 if (em_ptr->seen) em_ptr->obvious = TRUE;
591 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
592 (em_ptr->r_ptr->flags3 & RF3_NO_SLEEP) ||
593 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
595 if (em_ptr->r_ptr->flags3 & RF3_NO_SLEEP)
597 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_SLEEP);
600 em_ptr->note = _("には効果がなかった。", " is unaffected.");
601 em_ptr->obvious = FALSE;
605 em_ptr->note = _("は眠り込んでしまった!", " falls asleep!");
606 em_ptr->do_sleep = 500;
614 if (em_ptr->seen) em_ptr->obvious = TRUE;
616 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
617 !(em_ptr->r_ptr->flags3 & RF3_EVIL) ||
618 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
620 em_ptr->note = _("には効果がなかった。", " is unaffected.");
621 em_ptr->obvious = FALSE;
625 em_ptr->note = _("は動けなくなった!", " is suspended!");
626 em_ptr->do_sleep = 500;
634 if (em_ptr->seen) em_ptr->obvious = TRUE;
636 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
637 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
639 em_ptr->note = _("には効果がなかった。", " is unaffected.");
640 em_ptr->obvious = FALSE;
644 em_ptr->note = _("は動けなくなった!", " is suspended!");
645 em_ptr->do_sleep = 500;
653 int vir = virtue_number(caster_ptr, V_HARMONY);
656 em_ptr->dam += caster_ptr->virtues[vir - 1] / 10;
659 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
662 em_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
665 if (em_ptr->seen) em_ptr->obvious = TRUE;
667 if (common_saving_throw_charm(caster_ptr, em_ptr->dam, em_ptr->m_ptr))
669 em_ptr->note = _("には効果がなかった。", " is unaffected.");
670 em_ptr->obvious = FALSE;
672 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
674 else if (caster_ptr->cursed & TRC_AGGRAVATE)
676 em_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
677 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
681 em_ptr->note = _("は突然友好的になったようだ!", " suddenly seems friendly!");
682 set_pet(caster_ptr, em_ptr->m_ptr);
684 chg_virtue(caster_ptr, V_INDIVIDUALISM, -1);
685 if (em_ptr->r_ptr->flags3 & RF3_ANIMAL)
686 chg_virtue(caster_ptr, V_NATURE, 1);
692 case GF_CONTROL_UNDEAD:
694 if (em_ptr->seen) em_ptr->obvious = TRUE;
696 int vir = virtue_number(caster_ptr, V_UNLIFE);
699 em_ptr->dam += caster_ptr->virtues[vir - 1] / 10;
702 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
705 em_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
708 if (common_saving_throw_control(caster_ptr, em_ptr->dam, em_ptr->m_ptr) ||
709 !(em_ptr->r_ptr->flags3 & RF3_UNDEAD))
711 em_ptr->note = _("には効果がなかった。", " is unaffected.");
712 em_ptr->obvious = FALSE;
713 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
715 else if (caster_ptr->cursed & TRC_AGGRAVATE)
717 em_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
718 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
722 em_ptr->note = _("は既にあなたの奴隷だ!", " is in your thrall!");
723 set_pet(caster_ptr, em_ptr->m_ptr);
729 case GF_CONTROL_DEMON:
732 if (em_ptr->seen) em_ptr->obvious = TRUE;
734 vir = virtue_number(caster_ptr, V_UNLIFE);
737 em_ptr->dam += caster_ptr->virtues[vir - 1] / 10;
740 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
743 em_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
746 if (common_saving_throw_control(caster_ptr, em_ptr->dam, em_ptr->m_ptr) ||
747 !(em_ptr->r_ptr->flags3 & RF3_DEMON))
749 em_ptr->note = _("には効果がなかった。", " is unaffected.");
750 em_ptr->obvious = FALSE;
751 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
753 else if (caster_ptr->cursed & TRC_AGGRAVATE)
755 em_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
756 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
760 em_ptr->note = _("は既にあなたの奴隷だ!", " is in your thrall!");
761 set_pet(caster_ptr, em_ptr->m_ptr);
767 case GF_CONTROL_ANIMAL:
769 if (em_ptr->seen) em_ptr->obvious = TRUE;
771 int vir = virtue_number(caster_ptr, V_NATURE);
774 em_ptr->dam += caster_ptr->virtues[vir - 1] / 10;
777 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
780 em_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
783 if (common_saving_throw_control(caster_ptr, em_ptr->dam, em_ptr->m_ptr) ||
784 !(em_ptr->r_ptr->flags3 & RF3_ANIMAL))
786 em_ptr->note = _("には効果がなかった。", " is unaffected.");
787 em_ptr->obvious = FALSE;
788 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
790 else if (caster_ptr->cursed & TRC_AGGRAVATE)
792 em_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
793 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
797 em_ptr->note = _("はなついた。", " is tamed!");
798 set_pet(caster_ptr, em_ptr->m_ptr);
799 if (em_ptr->r_ptr->flags3 & RF3_ANIMAL)
800 chg_virtue(caster_ptr, V_NATURE, 1);
806 case GF_CHARM_LIVING:
808 int vir = virtue_number(caster_ptr, V_UNLIFE);
809 if (em_ptr->seen) em_ptr->obvious = TRUE;
811 vir = virtue_number(caster_ptr, V_UNLIFE);
814 em_ptr->dam -= caster_ptr->virtues[vir - 1] / 10;
817 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
820 em_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
823 msg_format(_("%sを見つめた。", "You stare into %s."), em_ptr->m_name);
825 if (common_saving_throw_charm(caster_ptr, em_ptr->dam, em_ptr->m_ptr) ||
826 !monster_living(em_ptr->m_ptr->r_idx))
828 em_ptr->note = _("には効果がなかった。", " is unaffected.");
829 em_ptr->obvious = FALSE;
830 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
832 else if (caster_ptr->cursed & TRC_AGGRAVATE)
834 em_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
835 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
839 em_ptr->note = _("を支配した。", " is tamed!");
840 set_pet(caster_ptr, em_ptr->m_ptr);
841 if (em_ptr->r_ptr->flags3 & RF3_ANIMAL)
842 chg_virtue(caster_ptr, V_NATURE, 1);
850 if (em_ptr->seen) em_ptr->obvious = TRUE;
852 em_ptr->do_conf = damroll(3, (em_ptr->dam / 2)) + 1;
853 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
854 (em_ptr->r_ptr->flags3 & (RF3_NO_CONF)) ||
855 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
857 if (em_ptr->r_ptr->flags3 & (RF3_NO_CONF))
859 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
863 em_ptr->note = _("には効果がなかった。", " is unaffected.");
864 em_ptr->obvious = FALSE;
872 if (em_ptr->seen) em_ptr->obvious = TRUE;
874 em_ptr->do_stun = damroll((em_ptr->caster_lev / 20) + 3, (em_ptr->dam)) + 1;
875 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
876 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
879 em_ptr->note = _("には効果がなかった。", " is unaffected.");
880 em_ptr->obvious = FALSE;
890 em_ptr->skipped = TRUE;
894 if (em_ptr->r_ptr->flags3 & (RF3_HURT_LITE))
896 if (em_ptr->seen) em_ptr->obvious = TRUE;
898 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_HURT_LITE);
900 em_ptr->note = _("は光に身をすくめた!", " cringes from the light!");
901 em_ptr->note_dies = _("は光を受けてしぼんでしまった!", " shrivels away in the light!");
912 if (em_ptr->seen) em_ptr->obvious = TRUE;
914 if (em_ptr->r_ptr->flagsr & RFR_RES_LITE)
916 em_ptr->note = _("には耐性がある!", " resists!");
917 em_ptr->dam *= 2; em_ptr->dam /= (randint1(6) + 6);
918 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_RES_LITE);
920 else if (em_ptr->r_ptr->flags3 & (RF3_HURT_LITE))
922 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_HURT_LITE);
923 em_ptr->note = _("は光に身をすくめた!", " cringes from the light!");
924 em_ptr->note_dies = _("は光を受けてしぼんでしまった!", " shrivels away in the light!");
931 if (em_ptr->seen) em_ptr->obvious = TRUE;
933 if (em_ptr->r_ptr->flagsr & RFR_RES_DARK)
935 em_ptr->note = _("には耐性がある!", " resists!");
936 em_ptr->dam *= 2; em_ptr->dam /= (randint1(6) + 6);
937 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_RES_DARK);
944 if (em_ptr->r_ptr->flags3 & (RF3_HURT_ROCK))
946 if (em_ptr->seen) em_ptr->obvious = TRUE;
948 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_HURT_ROCK);
950 em_ptr->note = _("の皮膚がただれた!", " loses some skin!");
951 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
962 if (em_ptr->r_ptr->flags3 & (RF3_UNDEAD))
964 bool resists_tele = FALSE;
966 if (em_ptr->r_ptr->flagsr & RFR_RES_TELE)
968 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flagsr & RFR_RES_ALL))
970 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
971 em_ptr->note = _("には効果がなかった。", " is unaffected.");
974 else if (em_ptr->r_ptr->level > randint1(100))
976 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
977 em_ptr->note = _("には耐性がある!", " resists!");
984 if (em_ptr->seen) em_ptr->obvious = TRUE;
985 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
986 em_ptr->do_dist = em_ptr->dam;
991 em_ptr->skipped = TRUE;
999 if (em_ptr->r_ptr->flags3 & (RF3_EVIL))
1001 bool resists_tele = FALSE;
1003 if (em_ptr->r_ptr->flagsr & RFR_RES_TELE)
1005 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flagsr & RFR_RES_ALL))
1007 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
1008 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1009 resists_tele = TRUE;
1011 else if (em_ptr->r_ptr->level > randint1(100))
1013 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
1014 em_ptr->note = _("には耐性がある!", " resists!");
1015 resists_tele = TRUE;
1021 if (em_ptr->seen) em_ptr->obvious = TRUE;
1022 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_EVIL);
1023 em_ptr->do_dist = em_ptr->dam;
1028 em_ptr->skipped = TRUE;
1036 bool resists_tele = FALSE;
1037 if (em_ptr->r_ptr->flagsr & RFR_RES_TELE)
1039 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flagsr & RFR_RES_ALL))
1041 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
1042 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1043 resists_tele = TRUE;
1045 else if (em_ptr->r_ptr->level > randint1(100))
1047 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
1048 em_ptr->note = _("には耐性がある!", " resists!");
1049 resists_tele = TRUE;
1055 if (em_ptr->seen) em_ptr->obvious = TRUE;
1057 em_ptr->do_dist = em_ptr->dam;
1063 case GF_TURN_UNDEAD:
1065 if (em_ptr->r_ptr->flags3 & (RF3_UNDEAD))
1067 if (em_ptr->seen) em_ptr->obvious = TRUE;
1069 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
1071 em_ptr->do_fear = damroll(3, (em_ptr->dam / 2)) + 1;
1072 if (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10)
1074 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1075 em_ptr->obvious = FALSE;
1076 em_ptr->do_fear = 0;
1081 em_ptr->skipped = TRUE;
1089 if (em_ptr->r_ptr->flags3 & (RF3_EVIL))
1091 if (em_ptr->seen) em_ptr->obvious = TRUE;
1093 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_EVIL);
1095 em_ptr->do_fear = damroll(3, (em_ptr->dam / 2)) + 1;
1096 if (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10)
1098 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1099 em_ptr->obvious = FALSE;
1100 em_ptr->do_fear = 0;
1105 em_ptr->skipped = TRUE;
1113 if (em_ptr->seen) em_ptr->obvious = TRUE;
1115 em_ptr->do_fear = damroll(3, (em_ptr->dam / 2)) + 1;
1116 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
1117 (em_ptr->r_ptr->flags3 & (RF3_NO_FEAR)) ||
1118 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
1120 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1121 em_ptr->obvious = FALSE;
1122 em_ptr->do_fear = 0;
1128 case GF_DISP_UNDEAD:
1130 if (em_ptr->r_ptr->flags3 & (RF3_UNDEAD))
1132 if (em_ptr->seen) em_ptr->obvious = TRUE;
1134 /* Learn about em_ptr->effect_type */
1135 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
1137 em_ptr->note = _("は身震いした。", " shudders.");
1138 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1142 em_ptr->skipped = TRUE;
1150 if (em_ptr->r_ptr->flags3 & (RF3_EVIL))
1152 if (em_ptr->seen) em_ptr->obvious = TRUE;
1154 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_EVIL);
1156 em_ptr->note = _("は身震いした。", " shudders.");
1157 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1161 em_ptr->skipped = TRUE;
1169 if (em_ptr->r_ptr->flags3 & (RF3_GOOD))
1171 if (em_ptr->seen) em_ptr->obvious = TRUE;
1173 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_GOOD);
1175 em_ptr->note = _("は身震いした。", " shudders.");
1176 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1180 em_ptr->skipped = TRUE;
1186 case GF_DISP_LIVING:
1188 if (monster_living(em_ptr->m_ptr->r_idx))
1190 if (em_ptr->seen) em_ptr->obvious = TRUE;
1192 em_ptr->note = _("は身震いした。", " shudders.");
1193 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1197 em_ptr->skipped = TRUE;
1205 if (em_ptr->r_ptr->flags3 & (RF3_DEMON))
1207 if (em_ptr->seen) em_ptr->obvious = TRUE;
1209 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_DEMON);
1211 em_ptr->note = _("は身震いした。", " shudders.");
1212 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1216 em_ptr->skipped = TRUE;
1224 if (em_ptr->seen) em_ptr->obvious = TRUE;
1225 em_ptr->note = _("は身震いした。", " shudders.");
1226 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1231 if (em_ptr->seen) em_ptr->obvious = TRUE;
1232 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)))
1234 if (em_ptr->who > 0)
1236 if (em_ptr->m_caster_ptr->hp < em_ptr->m_caster_ptr->maxhp)
1238 em_ptr->m_caster_ptr->hp += em_ptr->dam;
1239 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;
1240 if (caster_ptr->health_who == em_ptr->who) caster_ptr->redraw |= (PR_HEALTH);
1241 if (caster_ptr->riding == em_ptr->who) caster_ptr->redraw |= (PR_UHEALTH);
1243 if (em_ptr->see_s_msg)
1245 monster_desc(caster_ptr, em_ptr->killer, em_ptr->m_caster_ptr, 0);
1246 msg_format(_("%^sは気分が良さそうだ。", "%^s appears healthier."), em_ptr->killer);
1252 msg_format(_("%sから精神エネルギーを吸いとった。", "You draw psychic energy from %s."), em_ptr->m_name);
1253 (void)hp_player(caster_ptr, em_ptr->dam);
1258 if (em_ptr->see_s_msg) msg_format(_("%sには効果がなかった。", "%s is unaffected."), em_ptr->m_name);
1266 if (em_ptr->seen) em_ptr->obvious = TRUE;
1267 if (!em_ptr->who) msg_format(_("%sをじっと睨んだ。", "You gaze intently at %s."), em_ptr->m_name);
1269 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
1270 (em_ptr->r_ptr->flags3 & RF3_NO_CONF) ||
1271 (em_ptr->r_ptr->level > randint1((em_ptr->caster_lev - 10) < 1 ? 1 : (em_ptr->caster_lev - 10)) + 10))
1273 if (em_ptr->r_ptr->flags3 & (RF3_NO_CONF))
1275 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
1278 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1281 else if (em_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
1283 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags2 |= (RF2_EMPTY_MIND);
1284 em_ptr->note = _("には完全な耐性がある!", " is immune.");
1287 else if (em_ptr->r_ptr->flags2 & RF2_WEIRD_MIND)
1289 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags2 |= (RF2_WEIRD_MIND);
1290 em_ptr->note = _("には耐性がある。", " resists.");
1295 em_ptr->note = _("は精神攻撃を食らった。", " is blasted by psionic energy.");
1296 em_ptr->note_dies = _("の精神は崩壊し、肉体は抜け殻となった。", " collapses, a mindless husk.");
1298 if (em_ptr->who > 0) em_ptr->do_conf = randint0(4) + 4;
1299 else em_ptr->do_conf = randint0(8) + 8;
1304 case GF_BRAIN_SMASH:
1306 if (em_ptr->seen) em_ptr->obvious = TRUE;
1307 if (!em_ptr->who) msg_format(_("%sをじっと睨んだ。", "You gaze intently at %s."), em_ptr->m_name);
1309 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
1310 (em_ptr->r_ptr->flags3 & RF3_NO_CONF) ||
1311 (em_ptr->r_ptr->level > randint1((em_ptr->caster_lev - 10) < 1 ? 1 : (em_ptr->caster_lev - 10)) + 10))
1313 if (em_ptr->r_ptr->flags3 & (RF3_NO_CONF))
1315 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
1318 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1321 else if (em_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
1323 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags2 |= (RF2_EMPTY_MIND);
1324 em_ptr->note = _("には完全な耐性がある!", " is immune.");
1327 else if (em_ptr->r_ptr->flags2 & RF2_WEIRD_MIND)
1329 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags2 |= (RF2_WEIRD_MIND);
1330 em_ptr->note = _("には耐性がある!", " resists!");
1335 em_ptr->note = _("は精神攻撃を食らった。", " is blasted by psionic energy.");
1336 em_ptr->note_dies = _("の精神は崩壊し、肉体は抜け殻となった。", " collapses, a mindless husk.");
1337 if (em_ptr->who > 0)
1339 em_ptr->do_conf = randint0(4) + 4;
1340 em_ptr->do_stun = randint0(4) + 4;
1344 em_ptr->do_conf = randint0(8) + 8;
1345 em_ptr->do_stun = randint0(8) + 8;
1347 (void)set_monster_slow(caster_ptr, em_ptr->g_ptr->m_idx, MON_SLOW(em_ptr->m_ptr) + 10);
1354 if (em_ptr->seen) em_ptr->obvious = TRUE;
1355 if (!em_ptr->who) msg_format(_("%sを指差して呪いをかけた。", "You point at %s and curse."), em_ptr->m_name);
1356 if (randint0(100 + (em_ptr->caster_lev / 2)) < (em_ptr->r_ptr->level + 35))
1358 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1366 if (em_ptr->seen) em_ptr->obvious = TRUE;
1367 if (!em_ptr->who) msg_format(_("%sを指差して恐ろしげに呪いをかけた。", "You point at %s and curse horribly."), em_ptr->m_name);
1369 if (randint0(100 + (em_ptr->caster_lev / 2)) < (em_ptr->r_ptr->level + 35))
1371 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1379 if (em_ptr->seen) em_ptr->obvious = TRUE;
1380 if (!em_ptr->who) msg_format(_("%sを指差し、恐ろしげに呪文を唱えた!", "You point at %s, incanting terribly!"), em_ptr->m_name);
1382 if (randint0(100 + (em_ptr->caster_lev / 2)) < (em_ptr->r_ptr->level + 35))
1384 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1392 if (em_ptr->seen) em_ptr->obvious = TRUE;
1394 msg_format(_("%sの秘孔を突いて、「お前は既に死んでいる」と叫んだ。",
1395 "You point at %s, screaming the word, 'DIE!'."), em_ptr->m_name);
1397 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)))
1399 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1406 if (em_ptr->seen) em_ptr->obvious = TRUE;
1407 if (em_ptr->r_ptr->flags1 & RF1_UNIQUE)
1409 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1414 if ((em_ptr->who > 0) ? ((em_ptr->caster_lev + randint1(em_ptr->dam)) > (em_ptr->r_ptr->level + 10 + randint1(20))) :
1415 (((em_ptr->caster_lev / 2) + randint1(em_ptr->dam)) > (em_ptr->r_ptr->level + randint1(200))))
1417 em_ptr->dam = ((40 + randint1(20)) * em_ptr->m_ptr->hp) / 100;
1419 if (em_ptr->m_ptr->hp < em_ptr->dam) em_ptr->dam = em_ptr->m_ptr->hp - 1;
1423 /* todo 乱数で破滅のを弾いた結果が「耐性を持っている」ことになるのはおかしい */
1424 em_ptr->note = _("は耐性を持っている!", "resists!");
1434 if ((floor_ptr->inside_quest && (quest[floor_ptr->inside_quest].type == QUEST_TYPE_KILL_ALL) && !is_pet(em_ptr->m_ptr)) ||
1435 (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)
1437 msg_format(_("%sには効果がなかった。", "%s is unaffected."), em_ptr->m_name);
1438 em_ptr->skipped = TRUE;
1442 if (is_pet(em_ptr->m_ptr)) nokori_hp = em_ptr->m_ptr->maxhp * 4L;
1443 else if ((caster_ptr->pclass == CLASS_BEASTMASTER) && monster_living(em_ptr->m_ptr->r_idx))
1444 nokori_hp = em_ptr->m_ptr->maxhp * 3 / 10;
1446 nokori_hp = em_ptr->m_ptr->maxhp * 3 / 20;
1448 if (em_ptr->m_ptr->hp >= nokori_hp)
1450 msg_format(_("もっと弱らせないと。", "You need to weaken %s more."), em_ptr->m_name);
1451 em_ptr->skipped = TRUE;
1453 else if (em_ptr->m_ptr->hp < randint0(nokori_hp))
1455 if (em_ptr->m_ptr->mflag2 & MFLAG2_CHAMELEON) choose_new_monster(caster_ptr, em_ptr->g_ptr->m_idx, FALSE, MON_CHAMELEON);
1456 msg_format(_("%sを捕えた!", "You capture %^s!"), em_ptr->m_name);
1457 cap_mon = em_ptr->m_ptr->r_idx;
1458 cap_mspeed = em_ptr->m_ptr->mspeed;
1459 cap_hp = em_ptr->m_ptr->hp;
1460 cap_maxhp = em_ptr->m_ptr->max_maxhp;
1461 cap_nickname = em_ptr->m_ptr->nickname;
1462 if (em_ptr->g_ptr->m_idx == caster_ptr->riding)
1464 if (rakuba(caster_ptr, -1, FALSE))
1466 msg_format(_("地面に落とされた。", "You have fallen from %s."), em_ptr->m_name);
1470 delete_monster_idx(caster_ptr, em_ptr->g_ptr->m_idx);
1472 return GF_SWITCH_TRUE;
1476 msg_format(_("うまく捕まえられなかった。", "You failed to capture %s."), em_ptr->m_name);
1477 em_ptr->skipped = TRUE;
1484 return (gf_switch_result)py_attack(caster_ptr, em_ptr->y, em_ptr->x, em_ptr->dam);
1491 if (em_ptr->seen) em_ptr->obvious = TRUE;
1492 if (em_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
1494 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1496 em_ptr->skipped = TRUE;
1497 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags2 |= (RF2_EMPTY_MIND);
1500 if (MON_CSLEEP(em_ptr->m_ptr))
1502 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1504 em_ptr->skipped = TRUE;
1508 if (one_in_(5)) effect = 1;
1509 else if (one_in_(4)) effect = 2;
1510 else if (one_in_(3)) effect = 3;
1515 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
1516 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
1518 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1519 em_ptr->obvious = FALSE;
1523 if (set_monster_slow(caster_ptr, em_ptr->g_ptr->m_idx, MON_SLOW(em_ptr->m_ptr) + 50))
1525 em_ptr->note = _("の動きが遅くなった。", " starts moving slower.");
1529 else if (effect == 2)
1531 em_ptr->do_stun = damroll((caster_ptr->lev / 10) + 3, (em_ptr->dam)) + 1;
1532 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
1533 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
1535 em_ptr->do_stun = 0;
1536 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1537 em_ptr->obvious = FALSE;
1540 else if (effect == 3)
1542 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
1543 (em_ptr->r_ptr->flags3 & RF3_NO_SLEEP) ||
1544 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
1546 if (em_ptr->r_ptr->flags3 & RF3_NO_SLEEP)
1548 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_SLEEP);
1551 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1552 em_ptr->obvious = FALSE;
1556 /* Go to sleep (much) later */
1557 em_ptr->note = _("は眠り込んでしまった!", " falls asleep!");
1558 em_ptr->do_sleep = 500;
1564 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1572 if (em_ptr->seen) em_ptr->obvious = TRUE;
1573 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")))
1575 if (em_ptr->seen_msg) msg_format(_("%sは消滅した!", "%^s disappeared!"), em_ptr->m_name);
1576 chg_virtue(caster_ptr, V_VITALITY, -1);
1577 return GF_SWITCH_TRUE;
1580 em_ptr->skipped = TRUE;
1586 msg_format(_("%sを写真に撮った。", "You take a photograph of %s."), em_ptr->m_name);
1588 if (em_ptr->r_ptr->flags3 & (RF3_HURT_LITE))
1590 if (em_ptr->seen) em_ptr->obvious = TRUE;
1592 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_HURT_LITE);
1594 em_ptr->note = _("は光に身をすくめた!", " cringes from the light!");
1595 em_ptr->note_dies = _("は光を受けてしぼんでしまった!", " shrivels away in the light!");
1602 em_ptr->photo = em_ptr->m_ptr->r_idx;
1607 bool success = FALSE;
1608 if (em_ptr->seen) em_ptr->obvious = TRUE;
1610 if ((em_ptr->r_ptr->flags3 & (RF3_GOOD)) && !floor_ptr->inside_arena)
1612 if (em_ptr->r_ptr->flags3 & (RF3_NO_CONF)) em_ptr->dam -= 50;
1613 if (em_ptr->dam < 1) em_ptr->dam = 1;
1615 if (is_pet(em_ptr->m_ptr))
1617 em_ptr->note = _("の動きが速くなった。", " starts moving faster.");
1618 (void)set_monster_fast(caster_ptr, em_ptr->g_ptr->m_idx, MON_FAST(em_ptr->m_ptr) + 100);
1621 else if ((em_ptr->r_ptr->flags1 & (RF1_QUESTOR)) ||
1622 (em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
1623 (em_ptr->m_ptr->mflag2 & MFLAG2_NOPET) ||
1624 (caster_ptr->cursed & TRC_AGGRAVATE) ||
1625 ((em_ptr->r_ptr->level + 10) > randint1(em_ptr->dam)))
1627 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1631 em_ptr->note = _("を支配した。", " is tamed!");
1632 set_pet(caster_ptr, em_ptr->m_ptr);
1633 (void)set_monster_fast(caster_ptr, em_ptr->g_ptr->m_idx, MON_FAST(em_ptr->m_ptr) + 100);
1635 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_GOOD);
1642 if (!(em_ptr->r_ptr->flags3 & RF3_NO_FEAR))
1644 em_ptr->do_fear = randint1(90) + 10;
1646 else if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
1647 em_ptr->r_ptr->r_flags3 |= (RF3_NO_FEAR);
1655 if (em_ptr->seen) em_ptr->obvious = TRUE;
1657 if (randint0(100 + em_ptr->dam) < (em_ptr->r_ptr->level + 50))
1659 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1666 em_ptr->skipped = TRUE;
1672 return GF_SWITCH_CONTINUE;