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"
25 static bool effect_monster_psi_empty_mind(player_type *caster_ptr, effect_monster_type *em_ptr)
27 if ((em_ptr->r_ptr->flags2 & RF2_EMPTY_MIND) == 0) return FALSE;
30 em_ptr->note = _("には完全な耐性がある!", " is immune.");
31 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
32 em_ptr->r_ptr->r_flags2 |= (RF2_EMPTY_MIND);
38 static bool effect_monster_psi_weird_mind(effect_monster_type *em_ptr)
40 bool has_resistance = ((em_ptr->r_ptr->flags2 & (RF2_STUPID | RF2_WEIRD_MIND)) != 0) ||
41 ((em_ptr->r_ptr->flags3 & RF3_ANIMAL) != 0) ||
42 (em_ptr->r_ptr->level > randint1(3 * em_ptr->dam));
43 if (!has_resistance) return FALSE;
45 em_ptr->note = _("には耐性がある!", " resists!");
51 static bool effect_monster_psi_corrupted(player_type *caster_ptr, effect_monster_type *em_ptr)
53 bool is_powerful = ((em_ptr->r_ptr->flags3 & (RF3_UNDEAD | RF3_DEMON)) != 0) &&
54 (em_ptr->r_ptr->level > caster_ptr->lev / 2) &&
56 if (!is_powerful) return FALSE;
59 msg_format(_("%^sの堕落した精神は攻撃を跳ね返した!",
60 (em_ptr->seen ? "%^s's corrupted mind backlashes your attack!" :
61 "%^ss corrupted mind backlashes your attack!")), em_ptr->m_name);
66 static void effect_monster_psi_resist_addition(player_type *caster_ptr, effect_monster_type *em_ptr)
71 set_confused(caster_ptr, caster_ptr->confused + 3 + randint1(em_ptr->dam));
74 set_stun(caster_ptr, caster_ptr->stun + randint1(em_ptr->dam));
78 if (em_ptr->r_ptr->flags3 & RF3_NO_FEAR)
79 em_ptr->note = _("には効果がなかった。", " is unaffected.");
81 set_afraid(caster_ptr, caster_ptr->afraid + 3 + randint1(em_ptr->dam));
86 if (!caster_ptr->free_act)
87 (void)set_paralyzed(caster_ptr, caster_ptr->paralyzed + randint1(em_ptr->dam));
94 // Powerful demons & undead can turn a mindcrafter's attacks back on them.
95 static void effect_monster_psi_resist(player_type *caster_ptr, effect_monster_type *em_ptr)
97 if (effect_monster_psi_empty_mind(caster_ptr, em_ptr)) return;
98 if (effect_monster_psi_weird_mind(em_ptr)) return;
99 if (!effect_monster_psi_corrupted(caster_ptr, em_ptr)) return;
101 if ((randint0(100 + em_ptr->r_ptr->level / 2) < caster_ptr->skill_sav) && !CHECK_MULTISHADOW(caster_ptr))
103 msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));
108 /* Injure +/- confusion */
109 monster_desc(caster_ptr, em_ptr->killer, em_ptr->m_ptr, MD_WRONGDOER_NAME);
110 take_hit(caster_ptr, DAMAGE_ATTACK, em_ptr->dam, em_ptr->killer, -1);
111 if (!one_in_(4) || CHECK_MULTISHADOW(caster_ptr))
117 effect_monster_psi_resist_addition(caster_ptr, em_ptr);
122 static void effect_monster_psi_addition(effect_monster_type *em_ptr)
124 if ((em_ptr->dam <= 0) || !one_in_(4)) return;
129 em_ptr->do_conf = 3 + randint1(em_ptr->dam);
132 em_ptr->do_stun = 3 + randint1(em_ptr->dam);
135 em_ptr->do_fear = 3 + randint1(em_ptr->dam);
138 em_ptr->note = _("は眠り込んでしまった!", " falls asleep!");
139 em_ptr->do_sleep = 3 + randint1(em_ptr->dam);
145 gf_switch_result effect_monster_psi(player_type *caster_ptr, effect_monster_type *em_ptr)
147 if (em_ptr->seen) em_ptr->obvious = TRUE;
148 if (!(los(caster_ptr, em_ptr->m_ptr->fy, em_ptr->m_ptr->fx, caster_ptr->y, caster_ptr->x)))
150 if (em_ptr->seen_msg)
151 msg_format(_("%sはあなたが見えないので影響されない!", "%^s can't see you, and isn't affected!"), em_ptr->m_name);
153 em_ptr->skipped = TRUE;
154 return GF_SWITCH_CONTINUE;
157 effect_monster_psi_resist(caster_ptr, em_ptr);
158 effect_monster_psi_addition(em_ptr);
159 em_ptr->note_dies = _("の精神は崩壊し、肉体は抜け殻となった。", " collapses, a mindless husk.");
160 return GF_SWITCH_CONTINUE;
164 static bool effect_monster_psi_drain_corrupted(player_type *caster_ptr, effect_monster_type *em_ptr)
166 bool is_corrupted = ((em_ptr->r_ptr->flags3 & (RF3_UNDEAD | RF3_DEMON)) != 0) &&
167 (em_ptr->r_ptr->level > caster_ptr->lev / 2) &&
169 if (!is_corrupted) return FALSE;
172 msg_format(_("%^sの堕落した精神は攻撃を跳ね返した!",
173 (em_ptr->seen ? "%^s's corrupted mind backlashes your attack!" :
174 "%^ss corrupted mind backlashes your attack!")), em_ptr->m_name);
179 // Powerful demons & undead can turn a mindcrafter's attacks back on them.
180 static void effect_monster_psi_drain_resist(player_type *caster_ptr, effect_monster_type *em_ptr)
182 em_ptr->note = _("には耐性がある!", " resists!");
184 if (effect_monster_psi_drain_corrupted(caster_ptr, em_ptr)) return;
186 if ((randint0(100 + em_ptr->r_ptr->level / 2) < caster_ptr->skill_sav) && !CHECK_MULTISHADOW(caster_ptr))
188 msg_print(_("あなたは効力を跳ね返した!", "You resist the effects!"));
193 monster_desc(caster_ptr, em_ptr->killer, em_ptr->m_ptr, MD_WRONGDOER_NAME);
194 if (CHECK_MULTISHADOW(caster_ptr))
196 take_hit(caster_ptr, DAMAGE_ATTACK, em_ptr->dam, em_ptr->killer, -1);
201 msg_print(_("超能力パワーを吸いとられた!", "Your psychic energy is drained!"));
202 caster_ptr->csp -= damroll(5, em_ptr->dam) / 2;
203 if (caster_ptr->csp < 0) caster_ptr->csp = 0;
205 caster_ptr->redraw |= PR_MANA;
206 caster_ptr->window |= (PW_SPELL);
207 take_hit(caster_ptr, DAMAGE_ATTACK, em_ptr->dam, em_ptr->killer, -1);
212 static void effect_monster_psi_drain_change_power(player_type *caster_ptr, effect_monster_type *em_ptr)
214 int b = damroll(5, em_ptr->dam) / 4;
215 concptr str = (caster_ptr->pclass == CLASS_MINDCRAFTER) ? _("超能力パワー", "psychic energy") : _("魔力", "mana");
216 concptr msg = _("あなたは%sの苦痛を%sに変換した!",
217 (em_ptr->seen ? "You convert %s's pain into %s!" : "You convert %ss pain into %s!"));
218 msg_format(msg, em_ptr->m_name, str);
220 b = MIN(caster_ptr->msp, caster_ptr->csp + b);
222 caster_ptr->redraw |= PR_MANA;
223 caster_ptr->window |= (PW_SPELL);
227 gf_switch_result effect_monster_psi_drain(player_type *caster_ptr, effect_monster_type *em_ptr)
229 if (em_ptr->seen) em_ptr->obvious = TRUE;
231 if (em_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
234 em_ptr->note = _("には完全な耐性がある!", " is immune.");
236 else if ((em_ptr->r_ptr->flags2 & (RF2_STUPID | RF2_WEIRD_MIND)) ||
237 (em_ptr->r_ptr->flags3 & RF3_ANIMAL) ||
238 (em_ptr->r_ptr->level > randint1(3 * em_ptr->dam)))
240 effect_monster_psi_drain_resist(caster_ptr, em_ptr);
242 else if (em_ptr->dam > 0)
244 effect_monster_psi_drain_change_power(caster_ptr, em_ptr);
247 em_ptr->note_dies = _("の精神は崩壊し、肉体は抜け殻となった。", " collapses, a mindless husk.");
248 return GF_SWITCH_CONTINUE;
253 * @brief 魔法の効果によって様々なメッセーを出力したり与えるダメージの増減を行ったりする
254 * @param em_ptr モンスター効果構造体への参照ポインタ
255 * @return ここのスイッチングで終るならTRUEかFALSE、後続処理を実行するならCONTINUE
257 gf_switch_result switch_effects_monster(player_type *caster_ptr, effect_monster_type *em_ptr)
259 floor_type *floor_ptr = caster_ptr->current_floor_ptr;
260 switch (em_ptr->effect_type)
270 return effect_monster_void(em_ptr);
272 return effect_monster_acid(caster_ptr, em_ptr);
274 return effect_monster_elec(caster_ptr, em_ptr);
276 return effect_monster_fire(caster_ptr, em_ptr);
278 return effect_monster_cold(caster_ptr, em_ptr);
280 return effect_monster_pois(caster_ptr, em_ptr);
282 return effect_monster_nuke(caster_ptr, em_ptr);
284 return effect_monster_hell_fire(caster_ptr, em_ptr);
286 return effect_monster_holy_fire(caster_ptr, em_ptr);
288 return effect_monster_plasma(caster_ptr, em_ptr);
290 return effect_monster_nether(caster_ptr, em_ptr);
292 return effect_monster_water(caster_ptr, em_ptr);
294 return effect_monster_chaos(caster_ptr, em_ptr);
296 return effect_monster_shards(caster_ptr, em_ptr);
298 return effect_monster_rocket(caster_ptr, em_ptr);
300 return effect_monster_sound(caster_ptr, em_ptr);
302 return effect_monster_confusion(caster_ptr, em_ptr);
304 return effect_monster_disenchant(caster_ptr, em_ptr);
306 return effect_monster_nexus(caster_ptr, em_ptr);
308 return effect_monster_force(caster_ptr, em_ptr);
310 return effect_monster_inertial(caster_ptr, em_ptr);
312 return effect_monster_time(caster_ptr, em_ptr);
314 return effect_monster_gravity(caster_ptr, em_ptr);
315 case GF_DISINTEGRATE:
316 return effect_monster_disintegration(caster_ptr, em_ptr);
318 return effect_monster_psi(caster_ptr, em_ptr);
320 return effect_monster_psi_drain(caster_ptr, em_ptr);
323 if (em_ptr->seen) em_ptr->obvious = TRUE;
326 if (caster_ptr->riding && (em_ptr->g_ptr->m_idx == caster_ptr->riding)) em_ptr->do_dist = 0;
327 else em_ptr->do_dist = 7;
330 em_ptr->do_stun = damroll((em_ptr->caster_lev / 20) + 3, em_ptr->dam) + 1;
331 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
332 (em_ptr->r_ptr->level > 5 + randint1(em_ptr->dam)))
335 em_ptr->obvious = FALSE;
342 if (!is_hostile(em_ptr->m_ptr)) break;
343 if (em_ptr->seen) em_ptr->obvious = TRUE;
344 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE | RF1_QUESTOR)) ||
345 (em_ptr->r_ptr->flags3 & RF3_NO_CONF) ||
346 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
348 if (em_ptr->r_ptr->flags3 & RF3_NO_CONF)
350 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
356 * Powerful demons & undead can turn a mindcrafter's
357 * attacks back on them
359 if ((em_ptr->r_ptr->flags3 & (RF3_UNDEAD | RF3_DEMON)) &&
360 (em_ptr->r_ptr->level > caster_ptr->lev / 2) &&
364 msg_format(_("%^sの堕落した精神は攻撃を跳ね返した!",
365 (em_ptr->seen ? "%^s's corrupted mind backlashes your attack!" :
366 "%^ss corrupted mind backlashes your attack!")), em_ptr->m_name);
369 if (randint0(100 + em_ptr->r_ptr->level / 2) < caster_ptr->skill_sav)
371 msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));
375 /* Confuse, stun, terrify */
379 set_stun(caster_ptr, caster_ptr->stun + em_ptr->dam / 2);
382 set_confused(caster_ptr, caster_ptr->confused + em_ptr->dam / 2);
386 if (em_ptr->r_ptr->flags3 & RF3_NO_FEAR)
387 em_ptr->note = _("には効果がなかった。", " is unaffected.");
389 set_afraid(caster_ptr, caster_ptr->afraid + em_ptr->dam);
396 em_ptr->note = _("には効果がなかった。", " is unaffected.");
397 em_ptr->obvious = FALSE;
402 if (!common_saving_throw_charm(caster_ptr, em_ptr->dam, em_ptr->m_ptr))
404 em_ptr->note = _("があなたに隷属した。", " is in your thrall!");
405 set_pet(caster_ptr, em_ptr->m_ptr);
412 em_ptr->do_stun = em_ptr->dam / 2;
415 em_ptr->do_conf = em_ptr->dam / 2;
418 em_ptr->do_fear = em_ptr->dam;
428 if (em_ptr->seen) em_ptr->obvious = TRUE;
429 em_ptr->do_stun = (randint1(15) + 1) / (em_ptr->r + 1);
430 if (em_ptr->r_ptr->flagsr & RFR_IM_COLD)
432 em_ptr->note = _("にはかなり耐性がある!", " resists a lot.");
434 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_IM_COLD);
436 else if (em_ptr->r_ptr->flags3 & (RF3_HURT_COLD))
438 em_ptr->note = _("はひどい痛手をうけた。", " is hit hard.");
440 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_HURT_COLD);
447 if (em_ptr->seen) em_ptr->obvious = TRUE;
448 if (!monster_living(em_ptr->m_ptr->r_idx))
450 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
452 if (em_ptr->r_ptr->flags3 & RF3_DEMON) em_ptr->r_ptr->r_flags3 |= (RF3_DEMON);
453 if (em_ptr->r_ptr->flags3 & RF3_UNDEAD) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
454 if (em_ptr->r_ptr->flags3 & RF3_NONLIVING) em_ptr->r_ptr->r_flags3 |= (RF3_NONLIVING);
456 em_ptr->note = _("には効果がなかった。", " is unaffected.");
457 em_ptr->obvious = FALSE;
461 em_ptr->do_time = (em_ptr->dam + 7) / 8;
467 if (em_ptr->seen) em_ptr->obvious = TRUE;
468 if (!monster_living(em_ptr->m_ptr->r_idx))
470 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
472 if (em_ptr->r_ptr->flags3 & RF3_DEMON) em_ptr->r_ptr->r_flags3 |= (RF3_DEMON);
473 if (em_ptr->r_ptr->flags3 & RF3_UNDEAD) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
474 if (em_ptr->r_ptr->flags3 & RF3_NONLIVING) em_ptr->r_ptr->r_flags3 |= (RF3_NONLIVING);
476 em_ptr->note = _("には完全な耐性がある!", " is immune.");
477 em_ptr->obvious = FALSE;
480 else if (((em_ptr->r_ptr->flags1 & RF1_UNIQUE) &&
481 (randint1(888) != 666)) ||
482 (((em_ptr->r_ptr->level + randint1(20)) > randint1((em_ptr->caster_lev / 2) + randint1(10))) &&
483 randint1(100) != 66))
485 em_ptr->note = _("には耐性がある!", " resists!");
486 em_ptr->obvious = FALSE;
494 if (em_ptr->seen) em_ptr->obvious = TRUE;
495 em_ptr->do_polymorph = TRUE;
497 /* Powerful monsters can resist */
498 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
499 (em_ptr->r_ptr->flags1 & RF1_QUESTOR) ||
500 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
502 em_ptr->note = _("には効果がなかった。", " is unaffected.");
503 em_ptr->do_polymorph = FALSE;
504 em_ptr->obvious = FALSE;
512 if (em_ptr->seen) em_ptr->obvious = TRUE;
514 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)))
516 em_ptr->note = _("には効果がなかった。", " is unaffected.");
520 em_ptr->m_ptr->hp = em_ptr->m_ptr->maxhp;
521 if (multiply_monster(caster_ptr, em_ptr->g_ptr->m_idx, TRUE, 0L))
523 em_ptr->note = _("が分裂した!", " spawns!");
532 if (em_ptr->seen) em_ptr->obvious = TRUE;
534 (void)set_monster_csleep(caster_ptr, em_ptr->g_ptr->m_idx, 0);
536 if (em_ptr->m_ptr->maxhp < em_ptr->m_ptr->max_maxhp)
538 if (em_ptr->seen_msg) msg_format(_("%^sの強さが戻った。", "%^s recovers %s vitality."), em_ptr->m_name, em_ptr->m_poss);
539 em_ptr->m_ptr->maxhp = em_ptr->m_ptr->max_maxhp;
544 if (caster_ptr->health_who == em_ptr->g_ptr->m_idx) caster_ptr->redraw |= (PR_HEALTH);
545 if (caster_ptr->riding == em_ptr->g_ptr->m_idx) caster_ptr->redraw |= (PR_UHEALTH);
552 if (em_ptr->seen) em_ptr->obvious = TRUE;
555 (void)set_monster_csleep(caster_ptr, em_ptr->g_ptr->m_idx, 0);
556 if (MON_STUNNED(em_ptr->m_ptr))
558 if (em_ptr->seen_msg) msg_format(_("%^sは朦朧状態から立ち直った。", "%^s is no longer stunned."), em_ptr->m_name);
559 (void)set_monster_stunned(caster_ptr, em_ptr->g_ptr->m_idx, 0);
561 if (MON_CONFUSED(em_ptr->m_ptr))
563 if (em_ptr->seen_msg) msg_format(_("%^sは混乱から立ち直った。", "%^s is no longer confused."), em_ptr->m_name);
564 (void)set_monster_confused(caster_ptr, em_ptr->g_ptr->m_idx, 0);
566 if (MON_MONFEAR(em_ptr->m_ptr))
568 if (em_ptr->seen_msg) msg_format(_("%^sは勇気を取り戻した。", "%^s recovers %s courage."), em_ptr->m_name, em_ptr->m_poss);
569 (void)set_monster_monfear(caster_ptr, em_ptr->g_ptr->m_idx, 0);
572 if (em_ptr->m_ptr->hp < 30000) em_ptr->m_ptr->hp += em_ptr->dam;
573 if (em_ptr->m_ptr->hp > em_ptr->m_ptr->maxhp) em_ptr->m_ptr->hp = em_ptr->m_ptr->maxhp;
577 chg_virtue(caster_ptr, V_VITALITY, 1);
579 if (em_ptr->r_ptr->flags1 & RF1_UNIQUE)
580 chg_virtue(caster_ptr, V_INDIVIDUALISM, 1);
582 if (is_friendly(em_ptr->m_ptr))
583 chg_virtue(caster_ptr, V_HONOUR, 1);
584 else if (!(em_ptr->r_ptr->flags3 & RF3_EVIL))
586 if (em_ptr->r_ptr->flags3 & RF3_GOOD)
587 chg_virtue(caster_ptr, V_COMPASSION, 2);
589 chg_virtue(caster_ptr, V_COMPASSION, 1);
592 if (em_ptr->r_ptr->flags3 & RF3_ANIMAL)
593 chg_virtue(caster_ptr, V_NATURE, 1);
596 if (em_ptr->m_ptr->r_idx == MON_LEPER)
598 em_ptr->heal_leper = TRUE;
599 if (!em_ptr->who) chg_virtue(caster_ptr, V_COMPASSION, 5);
602 if (caster_ptr->health_who == em_ptr->g_ptr->m_idx) caster_ptr->redraw |= (PR_HEALTH);
603 if (caster_ptr->riding == em_ptr->g_ptr->m_idx) caster_ptr->redraw |= (PR_UHEALTH);
605 em_ptr->note = _("は体力を回復したようだ。", " looks healthier.");
612 if (em_ptr->seen) em_ptr->obvious = TRUE;
614 if (set_monster_fast(caster_ptr, em_ptr->g_ptr->m_idx, MON_FAST(em_ptr->m_ptr) + 100))
616 em_ptr->note = _("の動きが速くなった。", " starts moving faster.");
621 if (em_ptr->r_ptr->flags1 & RF1_UNIQUE)
622 chg_virtue(caster_ptr, V_INDIVIDUALISM, 1);
623 if (is_friendly(em_ptr->m_ptr))
624 chg_virtue(caster_ptr, V_HONOUR, 1);
632 if (em_ptr->seen) em_ptr->obvious = TRUE;
634 /* Powerful monsters can resist */
635 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
636 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
638 em_ptr->note = _("には効果がなかった。", " is unaffected.");
639 em_ptr->obvious = FALSE;
643 if (set_monster_slow(caster_ptr, em_ptr->g_ptr->m_idx, MON_SLOW(em_ptr->m_ptr) + 50))
645 em_ptr->note = _("の動きが遅くなった。", " starts moving slower.");
654 if (em_ptr->seen) em_ptr->obvious = TRUE;
656 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
657 (em_ptr->r_ptr->flags3 & RF3_NO_SLEEP) ||
658 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
660 if (em_ptr->r_ptr->flags3 & RF3_NO_SLEEP)
662 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_SLEEP);
665 em_ptr->note = _("には効果がなかった。", " is unaffected.");
666 em_ptr->obvious = FALSE;
670 em_ptr->note = _("は眠り込んでしまった!", " falls asleep!");
671 em_ptr->do_sleep = 500;
679 if (em_ptr->seen) em_ptr->obvious = TRUE;
681 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
682 !(em_ptr->r_ptr->flags3 & RF3_EVIL) ||
683 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
685 em_ptr->note = _("には効果がなかった。", " is unaffected.");
686 em_ptr->obvious = FALSE;
690 em_ptr->note = _("は動けなくなった!", " is suspended!");
691 em_ptr->do_sleep = 500;
699 if (em_ptr->seen) em_ptr->obvious = TRUE;
701 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
702 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
704 em_ptr->note = _("には効果がなかった。", " is unaffected.");
705 em_ptr->obvious = FALSE;
709 em_ptr->note = _("は動けなくなった!", " is suspended!");
710 em_ptr->do_sleep = 500;
718 int vir = virtue_number(caster_ptr, V_HARMONY);
721 em_ptr->dam += caster_ptr->virtues[vir - 1] / 10;
724 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
727 em_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
730 if (em_ptr->seen) em_ptr->obvious = TRUE;
732 if (common_saving_throw_charm(caster_ptr, em_ptr->dam, em_ptr->m_ptr))
734 em_ptr->note = _("には効果がなかった。", " is unaffected.");
735 em_ptr->obvious = FALSE;
737 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
739 else if (caster_ptr->cursed & TRC_AGGRAVATE)
741 em_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
742 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
746 em_ptr->note = _("は突然友好的になったようだ!", " suddenly seems friendly!");
747 set_pet(caster_ptr, em_ptr->m_ptr);
749 chg_virtue(caster_ptr, V_INDIVIDUALISM, -1);
750 if (em_ptr->r_ptr->flags3 & RF3_ANIMAL)
751 chg_virtue(caster_ptr, V_NATURE, 1);
757 case GF_CONTROL_UNDEAD:
759 if (em_ptr->seen) em_ptr->obvious = TRUE;
761 int vir = virtue_number(caster_ptr, V_UNLIFE);
764 em_ptr->dam += caster_ptr->virtues[vir - 1] / 10;
767 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
770 em_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
773 if (common_saving_throw_control(caster_ptr, em_ptr->dam, em_ptr->m_ptr) ||
774 !(em_ptr->r_ptr->flags3 & RF3_UNDEAD))
776 em_ptr->note = _("には効果がなかった。", " is unaffected.");
777 em_ptr->obvious = FALSE;
778 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
780 else if (caster_ptr->cursed & TRC_AGGRAVATE)
782 em_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
783 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
787 em_ptr->note = _("は既にあなたの奴隷だ!", " is in your thrall!");
788 set_pet(caster_ptr, em_ptr->m_ptr);
794 case GF_CONTROL_DEMON:
797 if (em_ptr->seen) em_ptr->obvious = TRUE;
799 vir = virtue_number(caster_ptr, V_UNLIFE);
802 em_ptr->dam += caster_ptr->virtues[vir - 1] / 10;
805 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
808 em_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
811 if (common_saving_throw_control(caster_ptr, em_ptr->dam, em_ptr->m_ptr) ||
812 !(em_ptr->r_ptr->flags3 & RF3_DEMON))
814 em_ptr->note = _("には効果がなかった。", " is unaffected.");
815 em_ptr->obvious = FALSE;
816 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
818 else if (caster_ptr->cursed & TRC_AGGRAVATE)
820 em_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
821 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
825 em_ptr->note = _("は既にあなたの奴隷だ!", " is in your thrall!");
826 set_pet(caster_ptr, em_ptr->m_ptr);
832 case GF_CONTROL_ANIMAL:
834 if (em_ptr->seen) em_ptr->obvious = TRUE;
836 int vir = virtue_number(caster_ptr, V_NATURE);
839 em_ptr->dam += caster_ptr->virtues[vir - 1] / 10;
842 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
845 em_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
848 if (common_saving_throw_control(caster_ptr, em_ptr->dam, em_ptr->m_ptr) ||
849 !(em_ptr->r_ptr->flags3 & RF3_ANIMAL))
851 em_ptr->note = _("には効果がなかった。", " is unaffected.");
852 em_ptr->obvious = FALSE;
853 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
855 else if (caster_ptr->cursed & TRC_AGGRAVATE)
857 em_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
858 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
862 em_ptr->note = _("はなついた。", " is tamed!");
863 set_pet(caster_ptr, em_ptr->m_ptr);
864 if (em_ptr->r_ptr->flags3 & RF3_ANIMAL)
865 chg_virtue(caster_ptr, V_NATURE, 1);
871 case GF_CHARM_LIVING:
873 int vir = virtue_number(caster_ptr, V_UNLIFE);
874 if (em_ptr->seen) em_ptr->obvious = TRUE;
876 vir = virtue_number(caster_ptr, V_UNLIFE);
879 em_ptr->dam -= caster_ptr->virtues[vir - 1] / 10;
882 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
885 em_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
888 msg_format(_("%sを見つめた。", "You stare into %s."), em_ptr->m_name);
890 if (common_saving_throw_charm(caster_ptr, em_ptr->dam, em_ptr->m_ptr) ||
891 !monster_living(em_ptr->m_ptr->r_idx))
893 em_ptr->note = _("には効果がなかった。", " is unaffected.");
894 em_ptr->obvious = FALSE;
895 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
897 else if (caster_ptr->cursed & TRC_AGGRAVATE)
899 em_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
900 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
904 em_ptr->note = _("を支配した。", " is tamed!");
905 set_pet(caster_ptr, em_ptr->m_ptr);
906 if (em_ptr->r_ptr->flags3 & RF3_ANIMAL)
907 chg_virtue(caster_ptr, V_NATURE, 1);
915 if (em_ptr->seen) em_ptr->obvious = TRUE;
917 em_ptr->do_conf = damroll(3, (em_ptr->dam / 2)) + 1;
918 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
919 (em_ptr->r_ptr->flags3 & (RF3_NO_CONF)) ||
920 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
922 if (em_ptr->r_ptr->flags3 & (RF3_NO_CONF))
924 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
928 em_ptr->note = _("には効果がなかった。", " is unaffected.");
929 em_ptr->obvious = FALSE;
937 if (em_ptr->seen) em_ptr->obvious = TRUE;
939 em_ptr->do_stun = damroll((em_ptr->caster_lev / 20) + 3, (em_ptr->dam)) + 1;
940 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
941 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
944 em_ptr->note = _("には効果がなかった。", " is unaffected.");
945 em_ptr->obvious = FALSE;
955 em_ptr->skipped = TRUE;
959 if (em_ptr->r_ptr->flags3 & (RF3_HURT_LITE))
961 if (em_ptr->seen) em_ptr->obvious = TRUE;
963 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_HURT_LITE);
965 em_ptr->note = _("は光に身をすくめた!", " cringes from the light!");
966 em_ptr->note_dies = _("は光を受けてしぼんでしまった!", " shrivels away in the light!");
977 if (em_ptr->seen) em_ptr->obvious = TRUE;
979 if (em_ptr->r_ptr->flagsr & RFR_RES_LITE)
981 em_ptr->note = _("には耐性がある!", " resists!");
982 em_ptr->dam *= 2; em_ptr->dam /= (randint1(6) + 6);
983 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_RES_LITE);
985 else if (em_ptr->r_ptr->flags3 & (RF3_HURT_LITE))
987 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_HURT_LITE);
988 em_ptr->note = _("は光に身をすくめた!", " cringes from the light!");
989 em_ptr->note_dies = _("は光を受けてしぼんでしまった!", " shrivels away in the light!");
996 if (em_ptr->seen) em_ptr->obvious = TRUE;
998 if (em_ptr->r_ptr->flagsr & RFR_RES_DARK)
1000 em_ptr->note = _("には耐性がある!", " resists!");
1001 em_ptr->dam *= 2; em_ptr->dam /= (randint1(6) + 6);
1002 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_RES_DARK);
1009 if (em_ptr->r_ptr->flags3 & (RF3_HURT_ROCK))
1011 if (em_ptr->seen) em_ptr->obvious = TRUE;
1013 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_HURT_ROCK);
1015 em_ptr->note = _("の皮膚がただれた!", " loses some skin!");
1016 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1025 case GF_AWAY_UNDEAD:
1027 if (em_ptr->r_ptr->flags3 & (RF3_UNDEAD))
1029 bool resists_tele = FALSE;
1031 if (em_ptr->r_ptr->flagsr & RFR_RES_TELE)
1033 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flagsr & RFR_RES_ALL))
1035 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
1036 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1037 resists_tele = TRUE;
1039 else if (em_ptr->r_ptr->level > randint1(100))
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 = _("には耐性がある!", " resists!");
1043 resists_tele = TRUE;
1049 if (em_ptr->seen) em_ptr->obvious = TRUE;
1050 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
1051 em_ptr->do_dist = em_ptr->dam;
1056 em_ptr->skipped = TRUE;
1064 if (em_ptr->r_ptr->flags3 & (RF3_EVIL))
1066 bool resists_tele = FALSE;
1068 if (em_ptr->r_ptr->flagsr & RFR_RES_TELE)
1070 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flagsr & RFR_RES_ALL))
1072 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
1073 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1074 resists_tele = TRUE;
1076 else if (em_ptr->r_ptr->level > randint1(100))
1078 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
1079 em_ptr->note = _("には耐性がある!", " resists!");
1080 resists_tele = TRUE;
1086 if (em_ptr->seen) em_ptr->obvious = TRUE;
1087 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_EVIL);
1088 em_ptr->do_dist = em_ptr->dam;
1093 em_ptr->skipped = TRUE;
1101 bool resists_tele = FALSE;
1102 if (em_ptr->r_ptr->flagsr & RFR_RES_TELE)
1104 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flagsr & RFR_RES_ALL))
1106 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
1107 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1108 resists_tele = TRUE;
1110 else if (em_ptr->r_ptr->level > randint1(100))
1112 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
1113 em_ptr->note = _("には耐性がある!", " resists!");
1114 resists_tele = TRUE;
1120 if (em_ptr->seen) em_ptr->obvious = TRUE;
1122 em_ptr->do_dist = em_ptr->dam;
1128 case GF_TURN_UNDEAD:
1130 if (em_ptr->r_ptr->flags3 & (RF3_UNDEAD))
1132 if (em_ptr->seen) em_ptr->obvious = TRUE;
1134 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
1136 em_ptr->do_fear = damroll(3, (em_ptr->dam / 2)) + 1;
1137 if (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10)
1139 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1140 em_ptr->obvious = FALSE;
1141 em_ptr->do_fear = 0;
1146 em_ptr->skipped = TRUE;
1154 if (em_ptr->r_ptr->flags3 & (RF3_EVIL))
1156 if (em_ptr->seen) em_ptr->obvious = TRUE;
1158 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_EVIL);
1160 em_ptr->do_fear = damroll(3, (em_ptr->dam / 2)) + 1;
1161 if (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10)
1163 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1164 em_ptr->obvious = FALSE;
1165 em_ptr->do_fear = 0;
1170 em_ptr->skipped = TRUE;
1178 if (em_ptr->seen) em_ptr->obvious = TRUE;
1180 em_ptr->do_fear = damroll(3, (em_ptr->dam / 2)) + 1;
1181 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
1182 (em_ptr->r_ptr->flags3 & (RF3_NO_FEAR)) ||
1183 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
1185 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1186 em_ptr->obvious = FALSE;
1187 em_ptr->do_fear = 0;
1193 case GF_DISP_UNDEAD:
1195 if (em_ptr->r_ptr->flags3 & (RF3_UNDEAD))
1197 if (em_ptr->seen) em_ptr->obvious = TRUE;
1199 /* Learn about em_ptr->effect_type */
1200 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
1202 em_ptr->note = _("は身震いした。", " shudders.");
1203 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1207 em_ptr->skipped = TRUE;
1215 if (em_ptr->r_ptr->flags3 & (RF3_EVIL))
1217 if (em_ptr->seen) em_ptr->obvious = TRUE;
1219 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_EVIL);
1221 em_ptr->note = _("は身震いした。", " shudders.");
1222 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1226 em_ptr->skipped = TRUE;
1234 if (em_ptr->r_ptr->flags3 & (RF3_GOOD))
1236 if (em_ptr->seen) em_ptr->obvious = TRUE;
1238 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_GOOD);
1240 em_ptr->note = _("は身震いした。", " shudders.");
1241 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1245 em_ptr->skipped = TRUE;
1251 case GF_DISP_LIVING:
1253 if (monster_living(em_ptr->m_ptr->r_idx))
1255 if (em_ptr->seen) em_ptr->obvious = TRUE;
1257 em_ptr->note = _("は身震いした。", " shudders.");
1258 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1262 em_ptr->skipped = TRUE;
1270 if (em_ptr->r_ptr->flags3 & (RF3_DEMON))
1272 if (em_ptr->seen) em_ptr->obvious = TRUE;
1274 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_DEMON);
1276 em_ptr->note = _("は身震いした。", " shudders.");
1277 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1281 em_ptr->skipped = TRUE;
1289 if (em_ptr->seen) em_ptr->obvious = TRUE;
1290 em_ptr->note = _("は身震いした。", " shudders.");
1291 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1296 if (em_ptr->seen) em_ptr->obvious = TRUE;
1297 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)))
1299 if (em_ptr->who > 0)
1301 if (em_ptr->m_caster_ptr->hp < em_ptr->m_caster_ptr->maxhp)
1303 em_ptr->m_caster_ptr->hp += em_ptr->dam;
1304 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;
1305 if (caster_ptr->health_who == em_ptr->who) caster_ptr->redraw |= (PR_HEALTH);
1306 if (caster_ptr->riding == em_ptr->who) caster_ptr->redraw |= (PR_UHEALTH);
1308 if (em_ptr->see_s_msg)
1310 monster_desc(caster_ptr, em_ptr->killer, em_ptr->m_caster_ptr, 0);
1311 msg_format(_("%^sは気分が良さそうだ。", "%^s appears healthier."), em_ptr->killer);
1317 msg_format(_("%sから精神エネルギーを吸いとった。", "You draw psychic energy from %s."), em_ptr->m_name);
1318 (void)hp_player(caster_ptr, em_ptr->dam);
1323 if (em_ptr->see_s_msg) msg_format(_("%sには効果がなかった。", "%s is unaffected."), em_ptr->m_name);
1331 if (em_ptr->seen) em_ptr->obvious = TRUE;
1332 if (!em_ptr->who) msg_format(_("%sをじっと睨んだ。", "You gaze intently at %s."), em_ptr->m_name);
1334 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
1335 (em_ptr->r_ptr->flags3 & RF3_NO_CONF) ||
1336 (em_ptr->r_ptr->level > randint1((em_ptr->caster_lev - 10) < 1 ? 1 : (em_ptr->caster_lev - 10)) + 10))
1338 if (em_ptr->r_ptr->flags3 & (RF3_NO_CONF))
1340 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
1343 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1346 else if (em_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
1348 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags2 |= (RF2_EMPTY_MIND);
1349 em_ptr->note = _("には完全な耐性がある!", " is immune.");
1352 else if (em_ptr->r_ptr->flags2 & RF2_WEIRD_MIND)
1354 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags2 |= (RF2_WEIRD_MIND);
1355 em_ptr->note = _("には耐性がある。", " resists.");
1360 em_ptr->note = _("は精神攻撃を食らった。", " is blasted by psionic energy.");
1361 em_ptr->note_dies = _("の精神は崩壊し、肉体は抜け殻となった。", " collapses, a mindless husk.");
1363 if (em_ptr->who > 0) em_ptr->do_conf = randint0(4) + 4;
1364 else em_ptr->do_conf = randint0(8) + 8;
1369 case GF_BRAIN_SMASH:
1371 if (em_ptr->seen) em_ptr->obvious = TRUE;
1372 if (!em_ptr->who) msg_format(_("%sをじっと睨んだ。", "You gaze intently at %s."), em_ptr->m_name);
1374 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
1375 (em_ptr->r_ptr->flags3 & RF3_NO_CONF) ||
1376 (em_ptr->r_ptr->level > randint1((em_ptr->caster_lev - 10) < 1 ? 1 : (em_ptr->caster_lev - 10)) + 10))
1378 if (em_ptr->r_ptr->flags3 & (RF3_NO_CONF))
1380 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
1383 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1386 else if (em_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
1388 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags2 |= (RF2_EMPTY_MIND);
1389 em_ptr->note = _("には完全な耐性がある!", " is immune.");
1392 else if (em_ptr->r_ptr->flags2 & RF2_WEIRD_MIND)
1394 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags2 |= (RF2_WEIRD_MIND);
1395 em_ptr->note = _("には耐性がある!", " resists!");
1400 em_ptr->note = _("は精神攻撃を食らった。", " is blasted by psionic energy.");
1401 em_ptr->note_dies = _("の精神は崩壊し、肉体は抜け殻となった。", " collapses, a mindless husk.");
1402 if (em_ptr->who > 0)
1404 em_ptr->do_conf = randint0(4) + 4;
1405 em_ptr->do_stun = randint0(4) + 4;
1409 em_ptr->do_conf = randint0(8) + 8;
1410 em_ptr->do_stun = randint0(8) + 8;
1412 (void)set_monster_slow(caster_ptr, em_ptr->g_ptr->m_idx, MON_SLOW(em_ptr->m_ptr) + 10);
1419 if (em_ptr->seen) em_ptr->obvious = TRUE;
1420 if (!em_ptr->who) msg_format(_("%sを指差して呪いをかけた。", "You point at %s and curse."), em_ptr->m_name);
1421 if (randint0(100 + (em_ptr->caster_lev / 2)) < (em_ptr->r_ptr->level + 35))
1423 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1431 if (em_ptr->seen) em_ptr->obvious = TRUE;
1432 if (!em_ptr->who) msg_format(_("%sを指差して恐ろしげに呪いをかけた。", "You point at %s and curse horribly."), em_ptr->m_name);
1434 if (randint0(100 + (em_ptr->caster_lev / 2)) < (em_ptr->r_ptr->level + 35))
1436 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1444 if (em_ptr->seen) em_ptr->obvious = TRUE;
1445 if (!em_ptr->who) msg_format(_("%sを指差し、恐ろしげに呪文を唱えた!", "You point at %s, incanting terribly!"), em_ptr->m_name);
1447 if (randint0(100 + (em_ptr->caster_lev / 2)) < (em_ptr->r_ptr->level + 35))
1449 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1457 if (em_ptr->seen) em_ptr->obvious = TRUE;
1459 msg_format(_("%sの秘孔を突いて、「お前は既に死んでいる」と叫んだ。",
1460 "You point at %s, screaming the word, 'DIE!'."), em_ptr->m_name);
1462 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)))
1464 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1471 if (em_ptr->seen) em_ptr->obvious = TRUE;
1472 if (em_ptr->r_ptr->flags1 & RF1_UNIQUE)
1474 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1479 if ((em_ptr->who > 0) ? ((em_ptr->caster_lev + randint1(em_ptr->dam)) > (em_ptr->r_ptr->level + 10 + randint1(20))) :
1480 (((em_ptr->caster_lev / 2) + randint1(em_ptr->dam)) > (em_ptr->r_ptr->level + randint1(200))))
1482 em_ptr->dam = ((40 + randint1(20)) * em_ptr->m_ptr->hp) / 100;
1484 if (em_ptr->m_ptr->hp < em_ptr->dam) em_ptr->dam = em_ptr->m_ptr->hp - 1;
1488 em_ptr->note = _("は破滅の手に耐え切った!", "resists!");
1498 if ((floor_ptr->inside_quest && (quest[floor_ptr->inside_quest].type == QUEST_TYPE_KILL_ALL) && !is_pet(em_ptr->m_ptr)) ||
1499 (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)
1501 msg_format(_("%sには効果がなかった。", "%s is unaffected."), em_ptr->m_name);
1502 em_ptr->skipped = TRUE;
1506 if (is_pet(em_ptr->m_ptr)) nokori_hp = em_ptr->m_ptr->maxhp * 4L;
1507 else if ((caster_ptr->pclass == CLASS_BEASTMASTER) && monster_living(em_ptr->m_ptr->r_idx))
1508 nokori_hp = em_ptr->m_ptr->maxhp * 3 / 10;
1510 nokori_hp = em_ptr->m_ptr->maxhp * 3 / 20;
1512 if (em_ptr->m_ptr->hp >= nokori_hp)
1514 msg_format(_("もっと弱らせないと。", "You need to weaken %s more."), em_ptr->m_name);
1515 em_ptr->skipped = TRUE;
1517 else if (em_ptr->m_ptr->hp < randint0(nokori_hp))
1519 if (em_ptr->m_ptr->mflag2 & MFLAG2_CHAMELEON) choose_new_monster(caster_ptr, em_ptr->g_ptr->m_idx, FALSE, MON_CHAMELEON);
1520 msg_format(_("%sを捕えた!", "You capture %^s!"), em_ptr->m_name);
1521 cap_mon = em_ptr->m_ptr->r_idx;
1522 cap_mspeed = em_ptr->m_ptr->mspeed;
1523 cap_hp = em_ptr->m_ptr->hp;
1524 cap_maxhp = em_ptr->m_ptr->max_maxhp;
1525 cap_nickname = em_ptr->m_ptr->nickname;
1526 if (em_ptr->g_ptr->m_idx == caster_ptr->riding)
1528 if (rakuba(caster_ptr, -1, FALSE))
1530 msg_format(_("地面に落とされた。", "You have fallen from %s."), em_ptr->m_name);
1534 delete_monster_idx(caster_ptr, em_ptr->g_ptr->m_idx);
1536 return GF_SWITCH_TRUE;
1540 msg_format(_("うまく捕まえられなかった。", "You failed to capture %s."), em_ptr->m_name);
1541 em_ptr->skipped = TRUE;
1548 return (gf_switch_result)py_attack(caster_ptr, em_ptr->y, em_ptr->x, em_ptr->dam);
1555 if (em_ptr->seen) em_ptr->obvious = TRUE;
1556 if (em_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
1558 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1560 em_ptr->skipped = TRUE;
1561 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags2 |= (RF2_EMPTY_MIND);
1564 if (MON_CSLEEP(em_ptr->m_ptr))
1566 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1568 em_ptr->skipped = TRUE;
1572 if (one_in_(5)) effect = 1;
1573 else if (one_in_(4)) effect = 2;
1574 else if (one_in_(3)) effect = 3;
1579 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
1580 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
1582 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1583 em_ptr->obvious = FALSE;
1587 if (set_monster_slow(caster_ptr, em_ptr->g_ptr->m_idx, MON_SLOW(em_ptr->m_ptr) + 50))
1589 em_ptr->note = _("の動きが遅くなった。", " starts moving slower.");
1593 else if (effect == 2)
1595 em_ptr->do_stun = damroll((caster_ptr->lev / 10) + 3, (em_ptr->dam)) + 1;
1596 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
1597 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
1599 em_ptr->do_stun = 0;
1600 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1601 em_ptr->obvious = FALSE;
1604 else if (effect == 3)
1606 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
1607 (em_ptr->r_ptr->flags3 & RF3_NO_SLEEP) ||
1608 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
1610 if (em_ptr->r_ptr->flags3 & RF3_NO_SLEEP)
1612 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_SLEEP);
1615 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1616 em_ptr->obvious = FALSE;
1620 /* Go to sleep (much) later */
1621 em_ptr->note = _("は眠り込んでしまった!", " falls asleep!");
1622 em_ptr->do_sleep = 500;
1628 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1636 if (em_ptr->seen) em_ptr->obvious = TRUE;
1637 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")))
1639 if (em_ptr->seen_msg) msg_format(_("%sは消滅した!", "%^s disappeared!"), em_ptr->m_name);
1640 chg_virtue(caster_ptr, V_VITALITY, -1);
1641 return GF_SWITCH_TRUE;
1644 em_ptr->skipped = TRUE;
1650 msg_format(_("%sを写真に撮った。", "You take a photograph of %s."), em_ptr->m_name);
1652 if (em_ptr->r_ptr->flags3 & (RF3_HURT_LITE))
1654 if (em_ptr->seen) em_ptr->obvious = TRUE;
1656 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_HURT_LITE);
1658 em_ptr->note = _("は光に身をすくめた!", " cringes from the light!");
1659 em_ptr->note_dies = _("は光を受けてしぼんでしまった!", " shrivels away in the light!");
1666 em_ptr->photo = em_ptr->m_ptr->r_idx;
1671 bool success = FALSE;
1672 if (em_ptr->seen) em_ptr->obvious = TRUE;
1674 if ((em_ptr->r_ptr->flags3 & (RF3_GOOD)) && !floor_ptr->inside_arena)
1676 if (em_ptr->r_ptr->flags3 & (RF3_NO_CONF)) em_ptr->dam -= 50;
1677 if (em_ptr->dam < 1) em_ptr->dam = 1;
1679 if (is_pet(em_ptr->m_ptr))
1681 em_ptr->note = _("の動きが速くなった。", " starts moving faster.");
1682 (void)set_monster_fast(caster_ptr, em_ptr->g_ptr->m_idx, MON_FAST(em_ptr->m_ptr) + 100);
1685 else if ((em_ptr->r_ptr->flags1 & (RF1_QUESTOR)) ||
1686 (em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
1687 (em_ptr->m_ptr->mflag2 & MFLAG2_NOPET) ||
1688 (caster_ptr->cursed & TRC_AGGRAVATE) ||
1689 ((em_ptr->r_ptr->level + 10) > randint1(em_ptr->dam)))
1691 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1695 em_ptr->note = _("を支配した。", " is tamed!");
1696 set_pet(caster_ptr, em_ptr->m_ptr);
1697 (void)set_monster_fast(caster_ptr, em_ptr->g_ptr->m_idx, MON_FAST(em_ptr->m_ptr) + 100);
1699 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_GOOD);
1706 if (!(em_ptr->r_ptr->flags3 & RF3_NO_FEAR))
1708 em_ptr->do_fear = randint1(90) + 10;
1710 else if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
1711 em_ptr->r_ptr->r_flags3 |= (RF3_NO_FEAR);
1719 if (em_ptr->seen) em_ptr->obvious = TRUE;
1721 if (randint0(100 + em_ptr->dam) < (em_ptr->r_ptr->level + 50))
1723 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1730 em_ptr->skipped = TRUE;
1736 return GF_SWITCH_CONTINUE;