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"
24 static gf_switch_result effect_monster_void(effect_monster_type *em_ptr)
26 if (em_ptr->seen) em_ptr->obvious = TRUE;
28 return GF_SWITCH_CONTINUE;
31 static gf_switch_result effect_monster_acid(player_type *caster_ptr, effect_monster_type *em_ptr)
33 if (em_ptr->seen) em_ptr->obvious = TRUE;
34 if ((em_ptr->r_ptr->flagsr & RFR_IM_ACID) == 0) return;
36 em_ptr->note = _("にはかなり耐性がある!", " resists a lot.");
38 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
39 em_ptr->r_ptr->r_flagsr |= (RFR_IM_ACID);
41 return GF_SWITCH_CONTINUE;
45 static gf_switch_result effect_monster_elec(player_type *caster_ptr, effect_monster_type *em_ptr)
47 if (em_ptr->seen) em_ptr->obvious = TRUE;
48 if ((em_ptr->r_ptr->flagsr & RFR_IM_ELEC) == 0) return;
50 em_ptr->note = _("にはかなり耐性がある!", " resists a lot.");
52 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
53 em_ptr->r_ptr->r_flagsr |= (RFR_IM_ELEC);
55 return GF_SWITCH_CONTINUE;
59 static gf_switch_result effect_monster_fire(player_type *caster_ptr, effect_monster_type *em_ptr)
61 if (em_ptr->seen) em_ptr->obvious = TRUE;
62 if (em_ptr->r_ptr->flagsr & RFR_IM_FIRE)
64 em_ptr->note = _("にはかなり耐性がある!", " resists a lot.");
66 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
67 em_ptr->r_ptr->r_flagsr |= (RFR_IM_FIRE);
72 if ((em_ptr->r_ptr->flags3 & (RF3_HURT_FIRE)) == 0) return;
74 em_ptr->note = _("はひどい痛手をうけた。", " is hit hard.");
76 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
77 em_ptr->r_ptr->r_flags3 |= (RF3_HURT_FIRE);
79 return GF_SWITCH_CONTINUE;
83 static gf_switch_result effect_monster_cold(player_type *caster_ptr, effect_monster_type *em_ptr)
85 if (em_ptr->seen) em_ptr->obvious = TRUE;
86 if (em_ptr->r_ptr->flagsr & RFR_IM_COLD)
88 em_ptr->note = _("にはかなり耐性がある!", " resists a lot.");
90 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
91 em_ptr->r_ptr->r_flagsr |= (RFR_IM_COLD);
96 if ((em_ptr->r_ptr->flags3 & (RF3_HURT_COLD)) == 0) return;
98 em_ptr->note = _("はひどい痛手をうけた。", " is hit hard.");
100 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
101 em_ptr->r_ptr->r_flags3 |= (RF3_HURT_COLD);
103 return GF_SWITCH_CONTINUE;
107 static gf_switch_result effect_monster_pois(player_type *caster_ptr, effect_monster_type *em_ptr)
109 if (em_ptr->seen) em_ptr->obvious = TRUE;
110 if ((em_ptr->r_ptr->flagsr & RFR_IM_POIS) == 0) return;
112 em_ptr->note = _("にはかなり耐性がある!", " resists a lot.");
114 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
115 em_ptr->r_ptr->r_flagsr |= (RFR_IM_POIS);
117 return GF_SWITCH_CONTINUE;
121 static gf_switch_result effect_monster_nuke(player_type *caster_ptr, effect_monster_type *em_ptr)
123 if (em_ptr->seen) em_ptr->obvious = TRUE;
124 if (em_ptr->r_ptr->flagsr & RFR_IM_POIS)
126 em_ptr->note = _("には耐性がある。", " resists.");
127 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
128 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
129 em_ptr->r_ptr->r_flagsr |= (RFR_IM_POIS);
134 if (one_in_(3)) em_ptr->do_polymorph = TRUE;
136 return GF_SWITCH_CONTINUE;
140 static gf_switch_result effect_monster_hell_file(player_type *caster_ptr, effect_monster_type *em_ptr)
142 if (em_ptr->seen) em_ptr->obvious = TRUE;
143 if ((em_ptr->r_ptr->flags3 & RF3_GOOD) == 0) return;
145 em_ptr->note = _("はひどい痛手をうけた。", " is hit hard.");
147 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
148 em_ptr->r_ptr->r_flags3 |= RF3_GOOD;
150 return GF_SWITCH_CONTINUE;
154 static gf_switch_result effect_monster_holy_fire(player_type *caster_ptr, effect_monster_type *em_ptr)
156 if (em_ptr->seen) em_ptr->obvious = TRUE;
157 if ((em_ptr->r_ptr->flags3 & RF3_EVIL) == 0)
159 em_ptr->note = _("には耐性がある。", " resists.");
160 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
165 em_ptr->note = _("はひどい痛手をうけた。", " is hit hard.");
166 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
167 em_ptr->r_ptr->r_flags3 |= RF3_EVIL;
169 return GF_SWITCH_CONTINUE;
174 * @brief 魔法の効果によって様々なメッセーを出力したり与えるダメージの増減を行ったりする
175 * @param em_ptr モンスター効果構造体への参照ポインタ
176 * @return ここのスイッチングで終るならTRUEかFALSE、後続処理を実行するならCONTINUE
178 gf_switch_result switch_effects_monster(player_type *caster_ptr, effect_monster_type *em_ptr)
180 floor_type *floor_ptr = caster_ptr->current_floor_ptr;
181 switch (em_ptr->effect_type)
191 return effect_monster_void(em_ptr);
193 return effect_monster_acid(caster_ptr, em_ptr);
195 return effect_monster_elec(caster_ptr, em_ptr);
197 return effect_monster_fire(caster_ptr, em_ptr);
199 return effect_monster_cold(caster_ptr, em_ptr);
201 return effect_monster_pois(caster_ptr, em_ptr);
203 return effect_monster_nuke(caster_ptr, em_ptr);
205 return effect_monster_hell_fire(caster_ptr, em_ptr);
207 return effect_monster_holy_fire(caster_ptr, em_ptr);
210 if (em_ptr->seen) em_ptr->obvious = TRUE;
211 if (em_ptr->r_ptr->flagsr & RFR_RES_PLAS)
213 em_ptr->note = _("には耐性がある。", " resists.");
214 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
215 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_RES_PLAS);
222 if (em_ptr->seen) em_ptr->obvious = TRUE;
223 if (em_ptr->r_ptr->flagsr & RFR_RES_NETH)
225 if (em_ptr->r_ptr->flags3 & RF3_UNDEAD)
227 em_ptr->note = _("には完全な耐性がある!", " is immune.");
229 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
233 em_ptr->note = _("には耐性がある。", " resists.");
234 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
236 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_RES_NETH);
238 else if (em_ptr->r_ptr->flags3 & RF3_EVIL)
240 em_ptr->note = _("はいくらか耐性を示した。", " resists somewhat.");
242 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_EVIL);
249 if (em_ptr->seen) em_ptr->obvious = TRUE;
250 if (em_ptr->r_ptr->flagsr & RFR_RES_WATE)
252 if ((em_ptr->m_ptr->r_idx == MON_WATER_ELEM) || (em_ptr->m_ptr->r_idx == MON_UNMAKER))
254 em_ptr->note = _("には完全な耐性がある!", " is immune.");
259 em_ptr->note = _("には耐性がある。", " resists.");
260 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
262 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_RES_WATE);
269 if (em_ptr->seen) em_ptr->obvious = TRUE;
270 if (em_ptr->r_ptr->flagsr & RFR_RES_CHAO)
272 em_ptr->note = _("には耐性がある。", " resists.");
273 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
274 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_RES_CHAO);
276 else if ((em_ptr->r_ptr->flags3 & RF3_DEMON) && one_in_(3))
278 em_ptr->note = _("はいくらか耐性を示した。", " resists somewhat.");
279 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
280 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_DEMON);
284 em_ptr->do_polymorph = TRUE;
285 em_ptr->do_conf = (5 + randint1(11) + em_ptr->r) / (em_ptr->r + 1);
292 if (em_ptr->seen) em_ptr->obvious = TRUE;
293 if (em_ptr->r_ptr->flagsr & RFR_RES_SHAR)
295 em_ptr->note = _("には耐性がある。", " resists.");
296 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
297 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_RES_SHAR);
304 if (em_ptr->seen) em_ptr->obvious = TRUE;
305 if (em_ptr->r_ptr->flagsr & RFR_RES_SHAR)
307 em_ptr->note = _("はいくらか耐性を示した。", " resists somewhat.");
309 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_RES_SHAR);
316 if (em_ptr->seen) em_ptr->obvious = TRUE;
317 if (em_ptr->r_ptr->flagsr & RFR_RES_SOUN)
319 em_ptr->note = _("には耐性がある。", " resists.");
320 em_ptr->dam *= 2; em_ptr->dam /= randint1(6) + 6;
321 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_RES_SOUN);
324 em_ptr->do_stun = (10 + randint1(15) + em_ptr->r) / (em_ptr->r + 1);
330 if (em_ptr->seen) em_ptr->obvious = TRUE;
331 if (em_ptr->r_ptr->flags3 & RF3_NO_CONF)
333 em_ptr->note = _("には耐性がある。", " resists.");
334 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
335 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
338 em_ptr->do_conf = (10 + randint1(15) + em_ptr->r) / (em_ptr->r + 1);
344 if (em_ptr->seen) em_ptr->obvious = TRUE;
345 if (em_ptr->r_ptr->flagsr & RFR_RES_DISE)
347 em_ptr->note = _("には耐性がある。", " resists.");
348 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
349 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_RES_DISE);
356 if (em_ptr->seen) em_ptr->obvious = TRUE;
357 if (em_ptr->r_ptr->flagsr & RFR_RES_NEXU)
359 em_ptr->note = _("には耐性がある。", " resists.");
360 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
361 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_RES_NEXU);
368 if (em_ptr->seen) em_ptr->obvious = TRUE;
369 if (em_ptr->r_ptr->flagsr & RFR_RES_WALL)
371 em_ptr->note = _("には耐性がある。", " resists.");
372 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
373 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_RES_WALL);
376 em_ptr->do_stun = (randint1(15) + em_ptr->r) / (em_ptr->r + 1);
382 if (em_ptr->seen) em_ptr->obvious = TRUE;
383 if (em_ptr->r_ptr->flagsr & RFR_RES_INER)
385 em_ptr->note = _("には耐性がある。", " resists.");
386 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
387 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_RES_INER);
391 /* Powerful monsters can resist */
392 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
393 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
395 em_ptr->obvious = FALSE;
397 /* Normal monsters slow down */
400 if (set_monster_slow(caster_ptr, em_ptr->g_ptr->m_idx, MON_SLOW(em_ptr->m_ptr) + 50))
402 em_ptr->note = _("の動きが遅くなった。", " starts moving slower.");
411 if (em_ptr->seen) em_ptr->obvious = TRUE;
412 if (em_ptr->r_ptr->flagsr & RFR_RES_TIME)
414 em_ptr->note = _("には耐性がある。", " resists.");
415 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
416 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_RES_TIME);
419 em_ptr->do_time = (em_ptr->dam + 1) / 2;
425 bool resist_tele = FALSE;
427 if (em_ptr->seen) em_ptr->obvious = TRUE;
428 if (em_ptr->r_ptr->flagsr & RFR_RES_TELE)
430 if (em_ptr->r_ptr->flags1 & (RF1_UNIQUE))
432 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
433 em_ptr->note = _("には効果がなかった。", " is unaffected!");
436 else if (em_ptr->r_ptr->level > randint1(100))
438 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
439 em_ptr->note = _("には耐性がある!", " resists!");
444 if (!resist_tele) em_ptr->do_dist = 10;
445 else em_ptr->do_dist = 0;
447 if (caster_ptr->riding && (em_ptr->g_ptr->m_idx == caster_ptr->riding)) em_ptr->do_dist = 0;
449 if (em_ptr->r_ptr->flagsr & RFR_RES_GRAV)
451 em_ptr->note = _("には耐性がある!", " resists!");
452 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
454 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_RES_GRAV);
459 /* Powerful monsters can resist */
460 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
461 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
463 em_ptr->obvious = FALSE;
465 /* Normal monsters slow down */
468 if (set_monster_slow(caster_ptr, em_ptr->g_ptr->m_idx, MON_SLOW(em_ptr->m_ptr) + 50))
470 em_ptr->note = _("の動きが遅くなった。", " starts moving slower.");
475 em_ptr->do_stun = damroll((em_ptr->caster_lev / 20) + 3, (em_ptr->dam)) + 1;
477 /* Attempt a saving throw */
478 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
479 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
483 /* No em_ptr->obvious effect */
484 em_ptr->note = _("には効果がなかった。", " is unaffected!");
485 em_ptr->obvious = FALSE;
491 case GF_DISINTEGRATE:
493 if (em_ptr->seen) em_ptr->obvious = TRUE;
494 if (em_ptr->r_ptr->flags3 & RF3_HURT_ROCK)
496 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_HURT_ROCK);
497 em_ptr->note = _("の皮膚がただれた!", " loses some skin!");
498 em_ptr->note_dies = _("は蒸発した!", " evaporates!");
506 if (em_ptr->seen) em_ptr->obvious = TRUE;
507 if (!(los(caster_ptr, em_ptr->m_ptr->fy, em_ptr->m_ptr->fx, caster_ptr->y, caster_ptr->x)))
509 if (em_ptr->seen_msg)
510 msg_format(_("%sはあなたが見えないので影響されない!", "%^s can't see you, and isn't affected!"), em_ptr->m_name);
511 em_ptr->skipped = TRUE;
515 if (em_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
518 em_ptr->note = _("には完全な耐性がある!", " is immune.");
519 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags2 |= (RF2_EMPTY_MIND);
522 else if ((em_ptr->r_ptr->flags2 & (RF2_STUPID | RF2_WEIRD_MIND)) ||
523 (em_ptr->r_ptr->flags3 & RF3_ANIMAL) ||
524 (em_ptr->r_ptr->level > randint1(3 * em_ptr->dam)))
526 em_ptr->note = _("には耐性がある!", " resists!");
530 * Powerful demons & undead can turn a mindcrafter's
531 * attacks back on them
533 if ((em_ptr->r_ptr->flags3 & (RF3_UNDEAD | RF3_DEMON)) &&
534 (em_ptr->r_ptr->level > caster_ptr->lev / 2) &&
538 msg_format(_("%^sの堕落した精神は攻撃を跳ね返した!",
539 (em_ptr->seen ? "%^s's corrupted mind backlashes your attack!" :
540 "%^ss corrupted mind backlashes your attack!")), em_ptr->m_name);
542 if ((randint0(100 + em_ptr->r_ptr->level / 2) < caster_ptr->skill_sav) && !CHECK_MULTISHADOW(caster_ptr))
544 msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));
548 /* Injure +/- confusion */
549 monster_desc(caster_ptr, em_ptr->killer, em_ptr->m_ptr, MD_WRONGDOER_NAME);
550 take_hit(caster_ptr, DAMAGE_ATTACK, em_ptr->dam, em_ptr->killer, -1); /* has already been /3 */
551 if (one_in_(4) && !CHECK_MULTISHADOW(caster_ptr))
556 set_confused(caster_ptr, caster_ptr->confused + 3 + randint1(em_ptr->dam));
559 set_stun(caster_ptr, caster_ptr->stun + randint1(em_ptr->dam));
563 if (em_ptr->r_ptr->flags3 & RF3_NO_FEAR)
564 em_ptr->note = _("には効果がなかった。", " is unaffected.");
566 set_afraid(caster_ptr, caster_ptr->afraid + 3 + randint1(em_ptr->dam));
570 if (!caster_ptr->free_act)
571 (void)set_paralyzed(caster_ptr, caster_ptr->paralyzed + randint1(em_ptr->dam));
581 if ((em_ptr->dam > 0) && one_in_(4))
586 em_ptr->do_conf = 3 + randint1(em_ptr->dam);
589 em_ptr->do_stun = 3 + randint1(em_ptr->dam);
592 em_ptr->do_fear = 3 + randint1(em_ptr->dam);
595 em_ptr->note = _("は眠り込んでしまった!", " falls asleep!");
596 em_ptr->do_sleep = 3 + randint1(em_ptr->dam);
601 em_ptr->note_dies = _("の精神は崩壊し、肉体は抜け殻となった。", " collapses, a mindless husk.");
606 if (em_ptr->seen) em_ptr->obvious = TRUE;
607 if (em_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
610 em_ptr->note = _("には完全な耐性がある!", " is immune.");
612 else if ((em_ptr->r_ptr->flags2 & (RF2_STUPID | RF2_WEIRD_MIND)) ||
613 (em_ptr->r_ptr->flags3 & RF3_ANIMAL) ||
614 (em_ptr->r_ptr->level > randint1(3 * em_ptr->dam)))
616 em_ptr->note = _("には耐性がある!", " resists!");
620 * Powerful demons & undead can turn a mindcrafter's
621 * attacks back on them
623 if ((em_ptr->r_ptr->flags3 & (RF3_UNDEAD | RF3_DEMON)) &&
624 (em_ptr->r_ptr->level > caster_ptr->lev / 2) &&
628 msg_format(_("%^sの堕落した精神は攻撃を跳ね返した!",
629 (em_ptr->seen ? "%^s's corrupted mind backlashes your attack!" :
630 "%^ss corrupted mind backlashes your attack!")), em_ptr->m_name);
631 if ((randint0(100 + em_ptr->r_ptr->level / 2) < caster_ptr->skill_sav) && !CHECK_MULTISHADOW(caster_ptr))
633 msg_print(_("あなたは効力を跳ね返した!", "You resist the effects!"));
637 monster_desc(caster_ptr, em_ptr->killer, em_ptr->m_ptr, MD_WRONGDOER_NAME);
638 if (!CHECK_MULTISHADOW(caster_ptr))
640 msg_print(_("超能力パワーを吸いとられた!", "Your psychic energy is drained!"));
641 caster_ptr->csp -= damroll(5, em_ptr->dam) / 2;
642 if (caster_ptr->csp < 0) caster_ptr->csp = 0;
643 caster_ptr->redraw |= PR_MANA;
644 caster_ptr->window |= (PW_SPELL);
646 take_hit(caster_ptr, DAMAGE_ATTACK, em_ptr->dam, em_ptr->killer, -1); /* has already been /3 */
652 else if (em_ptr->dam > 0)
654 int b = damroll(5, em_ptr->dam) / 4;
655 concptr str = (caster_ptr->pclass == CLASS_MINDCRAFTER) ? _("超能力パワー", "psychic energy") : _("魔力", "mana");
656 concptr msg = _("あなたは%sの苦痛を%sに変換した!",
657 (em_ptr->seen ? "You convert %s's pain into %s!" :
658 "You convert %ss pain into %s!"));
659 msg_format(msg, em_ptr->m_name, str);
661 b = MIN(caster_ptr->msp, caster_ptr->csp + b);
663 caster_ptr->redraw |= PR_MANA;
664 caster_ptr->window |= (PW_SPELL);
667 em_ptr->note_dies = _("の精神は崩壊し、肉体は抜け殻となった。", " collapses, a mindless husk.");
672 if (em_ptr->seen) em_ptr->obvious = TRUE;
675 if (caster_ptr->riding && (em_ptr->g_ptr->m_idx == caster_ptr->riding)) em_ptr->do_dist = 0;
676 else em_ptr->do_dist = 7;
679 em_ptr->do_stun = damroll((em_ptr->caster_lev / 20) + 3, em_ptr->dam) + 1;
680 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
681 (em_ptr->r_ptr->level > 5 + randint1(em_ptr->dam)))
684 em_ptr->obvious = FALSE;
691 if (!is_hostile(em_ptr->m_ptr)) break;
692 if (em_ptr->seen) em_ptr->obvious = TRUE;
693 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE | RF1_QUESTOR)) ||
694 (em_ptr->r_ptr->flags3 & RF3_NO_CONF) ||
695 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
697 if (em_ptr->r_ptr->flags3 & RF3_NO_CONF)
699 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
705 * Powerful demons & undead can turn a mindcrafter's
706 * attacks back on them
708 if ((em_ptr->r_ptr->flags3 & (RF3_UNDEAD | RF3_DEMON)) &&
709 (em_ptr->r_ptr->level > caster_ptr->lev / 2) &&
713 msg_format(_("%^sの堕落した精神は攻撃を跳ね返した!",
714 (em_ptr->seen ? "%^s's corrupted mind backlashes your attack!" :
715 "%^ss corrupted mind backlashes your attack!")), em_ptr->m_name);
718 if (randint0(100 + em_ptr->r_ptr->level / 2) < caster_ptr->skill_sav)
720 msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));
724 /* Confuse, stun, terrify */
728 set_stun(caster_ptr, caster_ptr->stun + em_ptr->dam / 2);
731 set_confused(caster_ptr, caster_ptr->confused + em_ptr->dam / 2);
735 if (em_ptr->r_ptr->flags3 & RF3_NO_FEAR)
736 em_ptr->note = _("には効果がなかった。", " is unaffected.");
738 set_afraid(caster_ptr, caster_ptr->afraid + em_ptr->dam);
745 em_ptr->note = _("には効果がなかった。", " is unaffected.");
746 em_ptr->obvious = FALSE;
751 if (!common_saving_throw_charm(caster_ptr, em_ptr->dam, em_ptr->m_ptr))
753 em_ptr->note = _("があなたに隷属した。", " is in your thrall!");
754 set_pet(caster_ptr, em_ptr->m_ptr);
761 em_ptr->do_stun = em_ptr->dam / 2;
764 em_ptr->do_conf = em_ptr->dam / 2;
767 em_ptr->do_fear = em_ptr->dam;
777 if (em_ptr->seen) em_ptr->obvious = TRUE;
778 em_ptr->do_stun = (randint1(15) + 1) / (em_ptr->r + 1);
779 if (em_ptr->r_ptr->flagsr & RFR_IM_COLD)
781 em_ptr->note = _("にはかなり耐性がある!", " resists a lot.");
783 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_IM_COLD);
785 else if (em_ptr->r_ptr->flags3 & (RF3_HURT_COLD))
787 em_ptr->note = _("はひどい痛手をうけた。", " is hit hard.");
789 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_HURT_COLD);
796 if (em_ptr->seen) em_ptr->obvious = TRUE;
797 if (!monster_living(em_ptr->m_ptr->r_idx))
799 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
801 if (em_ptr->r_ptr->flags3 & RF3_DEMON) em_ptr->r_ptr->r_flags3 |= (RF3_DEMON);
802 if (em_ptr->r_ptr->flags3 & RF3_UNDEAD) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
803 if (em_ptr->r_ptr->flags3 & RF3_NONLIVING) em_ptr->r_ptr->r_flags3 |= (RF3_NONLIVING);
805 em_ptr->note = _("には効果がなかった。", " is unaffected.");
806 em_ptr->obvious = FALSE;
810 em_ptr->do_time = (em_ptr->dam + 7) / 8;
816 if (em_ptr->seen) em_ptr->obvious = TRUE;
817 if (!monster_living(em_ptr->m_ptr->r_idx))
819 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
821 if (em_ptr->r_ptr->flags3 & RF3_DEMON) em_ptr->r_ptr->r_flags3 |= (RF3_DEMON);
822 if (em_ptr->r_ptr->flags3 & RF3_UNDEAD) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
823 if (em_ptr->r_ptr->flags3 & RF3_NONLIVING) em_ptr->r_ptr->r_flags3 |= (RF3_NONLIVING);
825 em_ptr->note = _("には完全な耐性がある!", " is immune.");
826 em_ptr->obvious = FALSE;
829 else if (((em_ptr->r_ptr->flags1 & RF1_UNIQUE) &&
830 (randint1(888) != 666)) ||
831 (((em_ptr->r_ptr->level + randint1(20)) > randint1((em_ptr->caster_lev / 2) + randint1(10))) &&
832 randint1(100) != 66))
834 em_ptr->note = _("には耐性がある!", " resists!");
835 em_ptr->obvious = FALSE;
843 if (em_ptr->seen) em_ptr->obvious = TRUE;
844 em_ptr->do_polymorph = TRUE;
846 /* Powerful monsters can resist */
847 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
848 (em_ptr->r_ptr->flags1 & RF1_QUESTOR) ||
849 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
851 em_ptr->note = _("には効果がなかった。", " is unaffected.");
852 em_ptr->do_polymorph = FALSE;
853 em_ptr->obvious = FALSE;
861 if (em_ptr->seen) em_ptr->obvious = TRUE;
863 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)))
865 em_ptr->note = _("には効果がなかった。", " is unaffected.");
869 em_ptr->m_ptr->hp = em_ptr->m_ptr->maxhp;
870 if (multiply_monster(caster_ptr, em_ptr->g_ptr->m_idx, TRUE, 0L))
872 em_ptr->note = _("が分裂した!", " spawns!");
881 if (em_ptr->seen) em_ptr->obvious = TRUE;
883 (void)set_monster_csleep(caster_ptr, em_ptr->g_ptr->m_idx, 0);
885 if (em_ptr->m_ptr->maxhp < em_ptr->m_ptr->max_maxhp)
887 if (em_ptr->seen_msg) msg_format(_("%^sの強さが戻った。", "%^s recovers %s vitality."), em_ptr->m_name, em_ptr->m_poss);
888 em_ptr->m_ptr->maxhp = em_ptr->m_ptr->max_maxhp;
893 if (caster_ptr->health_who == em_ptr->g_ptr->m_idx) caster_ptr->redraw |= (PR_HEALTH);
894 if (caster_ptr->riding == em_ptr->g_ptr->m_idx) caster_ptr->redraw |= (PR_UHEALTH);
901 if (em_ptr->seen) em_ptr->obvious = TRUE;
904 (void)set_monster_csleep(caster_ptr, em_ptr->g_ptr->m_idx, 0);
905 if (MON_STUNNED(em_ptr->m_ptr))
907 if (em_ptr->seen_msg) msg_format(_("%^sは朦朧状態から立ち直った。", "%^s is no longer stunned."), em_ptr->m_name);
908 (void)set_monster_stunned(caster_ptr, em_ptr->g_ptr->m_idx, 0);
910 if (MON_CONFUSED(em_ptr->m_ptr))
912 if (em_ptr->seen_msg) msg_format(_("%^sは混乱から立ち直った。", "%^s is no longer confused."), em_ptr->m_name);
913 (void)set_monster_confused(caster_ptr, em_ptr->g_ptr->m_idx, 0);
915 if (MON_MONFEAR(em_ptr->m_ptr))
917 if (em_ptr->seen_msg) msg_format(_("%^sは勇気を取り戻した。", "%^s recovers %s courage."), em_ptr->m_name, em_ptr->m_poss);
918 (void)set_monster_monfear(caster_ptr, em_ptr->g_ptr->m_idx, 0);
921 if (em_ptr->m_ptr->hp < 30000) em_ptr->m_ptr->hp += em_ptr->dam;
922 if (em_ptr->m_ptr->hp > em_ptr->m_ptr->maxhp) em_ptr->m_ptr->hp = em_ptr->m_ptr->maxhp;
926 chg_virtue(caster_ptr, V_VITALITY, 1);
928 if (em_ptr->r_ptr->flags1 & RF1_UNIQUE)
929 chg_virtue(caster_ptr, V_INDIVIDUALISM, 1);
931 if (is_friendly(em_ptr->m_ptr))
932 chg_virtue(caster_ptr, V_HONOUR, 1);
933 else if (!(em_ptr->r_ptr->flags3 & RF3_EVIL))
935 if (em_ptr->r_ptr->flags3 & RF3_GOOD)
936 chg_virtue(caster_ptr, V_COMPASSION, 2);
938 chg_virtue(caster_ptr, V_COMPASSION, 1);
941 if (em_ptr->r_ptr->flags3 & RF3_ANIMAL)
942 chg_virtue(caster_ptr, V_NATURE, 1);
945 if (em_ptr->m_ptr->r_idx == MON_LEPER)
947 em_ptr->heal_leper = TRUE;
948 if (!em_ptr->who) chg_virtue(caster_ptr, V_COMPASSION, 5);
951 if (caster_ptr->health_who == em_ptr->g_ptr->m_idx) caster_ptr->redraw |= (PR_HEALTH);
952 if (caster_ptr->riding == em_ptr->g_ptr->m_idx) caster_ptr->redraw |= (PR_UHEALTH);
954 em_ptr->note = _("は体力を回復したようだ。", " looks healthier.");
961 if (em_ptr->seen) em_ptr->obvious = TRUE;
963 if (set_monster_fast(caster_ptr, em_ptr->g_ptr->m_idx, MON_FAST(em_ptr->m_ptr) + 100))
965 em_ptr->note = _("の動きが速くなった。", " starts moving faster.");
970 if (em_ptr->r_ptr->flags1 & RF1_UNIQUE)
971 chg_virtue(caster_ptr, V_INDIVIDUALISM, 1);
972 if (is_friendly(em_ptr->m_ptr))
973 chg_virtue(caster_ptr, V_HONOUR, 1);
981 if (em_ptr->seen) em_ptr->obvious = TRUE;
983 /* Powerful monsters can resist */
984 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
985 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
987 em_ptr->note = _("には効果がなかった。", " is unaffected.");
988 em_ptr->obvious = FALSE;
992 if (set_monster_slow(caster_ptr, em_ptr->g_ptr->m_idx, MON_SLOW(em_ptr->m_ptr) + 50))
994 em_ptr->note = _("の動きが遅くなった。", " starts moving slower.");
1003 if (em_ptr->seen) em_ptr->obvious = TRUE;
1005 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
1006 (em_ptr->r_ptr->flags3 & RF3_NO_SLEEP) ||
1007 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
1009 if (em_ptr->r_ptr->flags3 & RF3_NO_SLEEP)
1011 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_SLEEP);
1014 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1015 em_ptr->obvious = FALSE;
1019 em_ptr->note = _("は眠り込んでしまった!", " falls asleep!");
1020 em_ptr->do_sleep = 500;
1026 case GF_STASIS_EVIL:
1028 if (em_ptr->seen) em_ptr->obvious = TRUE;
1030 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
1031 !(em_ptr->r_ptr->flags3 & RF3_EVIL) ||
1032 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
1034 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1035 em_ptr->obvious = FALSE;
1039 em_ptr->note = _("は動けなくなった!", " is suspended!");
1040 em_ptr->do_sleep = 500;
1048 if (em_ptr->seen) em_ptr->obvious = TRUE;
1050 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
1051 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
1053 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1054 em_ptr->obvious = FALSE;
1058 em_ptr->note = _("は動けなくなった!", " is suspended!");
1059 em_ptr->do_sleep = 500;
1067 int vir = virtue_number(caster_ptr, V_HARMONY);
1070 em_ptr->dam += caster_ptr->virtues[vir - 1] / 10;
1073 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
1076 em_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
1079 if (em_ptr->seen) em_ptr->obvious = TRUE;
1081 if (common_saving_throw_charm(caster_ptr, em_ptr->dam, em_ptr->m_ptr))
1083 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1084 em_ptr->obvious = FALSE;
1086 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1088 else if (caster_ptr->cursed & TRC_AGGRAVATE)
1090 em_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
1091 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1095 em_ptr->note = _("は突然友好的になったようだ!", " suddenly seems friendly!");
1096 set_pet(caster_ptr, em_ptr->m_ptr);
1098 chg_virtue(caster_ptr, V_INDIVIDUALISM, -1);
1099 if (em_ptr->r_ptr->flags3 & RF3_ANIMAL)
1100 chg_virtue(caster_ptr, V_NATURE, 1);
1106 case GF_CONTROL_UNDEAD:
1108 if (em_ptr->seen) em_ptr->obvious = TRUE;
1110 int vir = virtue_number(caster_ptr, V_UNLIFE);
1113 em_ptr->dam += caster_ptr->virtues[vir - 1] / 10;
1116 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
1119 em_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
1122 if (common_saving_throw_control(caster_ptr, em_ptr->dam, em_ptr->m_ptr) ||
1123 !(em_ptr->r_ptr->flags3 & RF3_UNDEAD))
1125 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1126 em_ptr->obvious = FALSE;
1127 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1129 else if (caster_ptr->cursed & TRC_AGGRAVATE)
1131 em_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
1132 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1136 em_ptr->note = _("は既にあなたの奴隷だ!", " is in your thrall!");
1137 set_pet(caster_ptr, em_ptr->m_ptr);
1143 case GF_CONTROL_DEMON:
1146 if (em_ptr->seen) em_ptr->obvious = TRUE;
1148 vir = virtue_number(caster_ptr, V_UNLIFE);
1151 em_ptr->dam += caster_ptr->virtues[vir - 1] / 10;
1154 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
1157 em_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
1160 if (common_saving_throw_control(caster_ptr, em_ptr->dam, em_ptr->m_ptr) ||
1161 !(em_ptr->r_ptr->flags3 & RF3_DEMON))
1163 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1164 em_ptr->obvious = FALSE;
1165 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1167 else if (caster_ptr->cursed & TRC_AGGRAVATE)
1169 em_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
1170 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1174 em_ptr->note = _("は既にあなたの奴隷だ!", " is in your thrall!");
1175 set_pet(caster_ptr, em_ptr->m_ptr);
1181 case GF_CONTROL_ANIMAL:
1183 if (em_ptr->seen) em_ptr->obvious = TRUE;
1185 int vir = virtue_number(caster_ptr, V_NATURE);
1188 em_ptr->dam += caster_ptr->virtues[vir - 1] / 10;
1191 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
1194 em_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
1197 if (common_saving_throw_control(caster_ptr, em_ptr->dam, em_ptr->m_ptr) ||
1198 !(em_ptr->r_ptr->flags3 & RF3_ANIMAL))
1200 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1201 em_ptr->obvious = FALSE;
1202 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1204 else if (caster_ptr->cursed & TRC_AGGRAVATE)
1206 em_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
1207 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1211 em_ptr->note = _("はなついた。", " is tamed!");
1212 set_pet(caster_ptr, em_ptr->m_ptr);
1213 if (em_ptr->r_ptr->flags3 & RF3_ANIMAL)
1214 chg_virtue(caster_ptr, V_NATURE, 1);
1220 case GF_CHARM_LIVING:
1222 int vir = virtue_number(caster_ptr, V_UNLIFE);
1223 if (em_ptr->seen) em_ptr->obvious = TRUE;
1225 vir = virtue_number(caster_ptr, V_UNLIFE);
1228 em_ptr->dam -= caster_ptr->virtues[vir - 1] / 10;
1231 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
1234 em_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
1237 msg_format(_("%sを見つめた。", "You stare into %s."), em_ptr->m_name);
1239 if (common_saving_throw_charm(caster_ptr, em_ptr->dam, em_ptr->m_ptr) ||
1240 !monster_living(em_ptr->m_ptr->r_idx))
1242 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1243 em_ptr->obvious = FALSE;
1244 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1246 else if (caster_ptr->cursed & TRC_AGGRAVATE)
1248 em_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
1249 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1253 em_ptr->note = _("を支配した。", " is tamed!");
1254 set_pet(caster_ptr, em_ptr->m_ptr);
1255 if (em_ptr->r_ptr->flags3 & RF3_ANIMAL)
1256 chg_virtue(caster_ptr, V_NATURE, 1);
1264 if (em_ptr->seen) em_ptr->obvious = TRUE;
1266 em_ptr->do_conf = damroll(3, (em_ptr->dam / 2)) + 1;
1267 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
1268 (em_ptr->r_ptr->flags3 & (RF3_NO_CONF)) ||
1269 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
1271 if (em_ptr->r_ptr->flags3 & (RF3_NO_CONF))
1273 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
1276 em_ptr->do_conf = 0;
1277 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1278 em_ptr->obvious = FALSE;
1286 if (em_ptr->seen) em_ptr->obvious = TRUE;
1288 em_ptr->do_stun = damroll((em_ptr->caster_lev / 20) + 3, (em_ptr->dam)) + 1;
1289 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
1290 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
1292 em_ptr->do_stun = 0;
1293 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1294 em_ptr->obvious = FALSE;
1304 em_ptr->skipped = TRUE;
1308 if (em_ptr->r_ptr->flags3 & (RF3_HURT_LITE))
1310 if (em_ptr->seen) em_ptr->obvious = TRUE;
1312 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_HURT_LITE);
1314 em_ptr->note = _("は光に身をすくめた!", " cringes from the light!");
1315 em_ptr->note_dies = _("は光を受けてしぼんでしまった!", " shrivels away in the light!");
1326 if (em_ptr->seen) em_ptr->obvious = TRUE;
1328 if (em_ptr->r_ptr->flagsr & RFR_RES_LITE)
1330 em_ptr->note = _("には耐性がある!", " resists!");
1331 em_ptr->dam *= 2; em_ptr->dam /= (randint1(6) + 6);
1332 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_RES_LITE);
1334 else if (em_ptr->r_ptr->flags3 & (RF3_HURT_LITE))
1336 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_HURT_LITE);
1337 em_ptr->note = _("は光に身をすくめた!", " cringes from the light!");
1338 em_ptr->note_dies = _("は光を受けてしぼんでしまった!", " shrivels away in the light!");
1345 if (em_ptr->seen) em_ptr->obvious = TRUE;
1347 if (em_ptr->r_ptr->flagsr & RFR_RES_DARK)
1349 em_ptr->note = _("には耐性がある!", " resists!");
1350 em_ptr->dam *= 2; em_ptr->dam /= (randint1(6) + 6);
1351 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_RES_DARK);
1358 if (em_ptr->r_ptr->flags3 & (RF3_HURT_ROCK))
1360 if (em_ptr->seen) em_ptr->obvious = TRUE;
1362 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_HURT_ROCK);
1364 em_ptr->note = _("の皮膚がただれた!", " loses some skin!");
1365 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1374 case GF_AWAY_UNDEAD:
1376 if (em_ptr->r_ptr->flags3 & (RF3_UNDEAD))
1378 bool resists_tele = FALSE;
1380 if (em_ptr->r_ptr->flagsr & RFR_RES_TELE)
1382 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flagsr & RFR_RES_ALL))
1384 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
1385 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1386 resists_tele = TRUE;
1388 else if (em_ptr->r_ptr->level > randint1(100))
1390 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
1391 em_ptr->note = _("には耐性がある!", " resists!");
1392 resists_tele = TRUE;
1398 if (em_ptr->seen) em_ptr->obvious = TRUE;
1399 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
1400 em_ptr->do_dist = em_ptr->dam;
1405 em_ptr->skipped = TRUE;
1413 if (em_ptr->r_ptr->flags3 & (RF3_EVIL))
1415 bool resists_tele = FALSE;
1417 if (em_ptr->r_ptr->flagsr & RFR_RES_TELE)
1419 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flagsr & RFR_RES_ALL))
1421 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
1422 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1423 resists_tele = TRUE;
1425 else if (em_ptr->r_ptr->level > randint1(100))
1427 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
1428 em_ptr->note = _("には耐性がある!", " resists!");
1429 resists_tele = TRUE;
1435 if (em_ptr->seen) em_ptr->obvious = TRUE;
1436 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_EVIL);
1437 em_ptr->do_dist = em_ptr->dam;
1442 em_ptr->skipped = TRUE;
1450 bool resists_tele = FALSE;
1451 if (em_ptr->r_ptr->flagsr & RFR_RES_TELE)
1453 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flagsr & RFR_RES_ALL))
1455 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
1456 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1457 resists_tele = TRUE;
1459 else if (em_ptr->r_ptr->level > randint1(100))
1461 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
1462 em_ptr->note = _("には耐性がある!", " resists!");
1463 resists_tele = TRUE;
1469 if (em_ptr->seen) em_ptr->obvious = TRUE;
1471 em_ptr->do_dist = em_ptr->dam;
1477 case GF_TURN_UNDEAD:
1479 if (em_ptr->r_ptr->flags3 & (RF3_UNDEAD))
1481 if (em_ptr->seen) em_ptr->obvious = TRUE;
1483 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
1485 em_ptr->do_fear = damroll(3, (em_ptr->dam / 2)) + 1;
1486 if (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10)
1488 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1489 em_ptr->obvious = FALSE;
1490 em_ptr->do_fear = 0;
1495 em_ptr->skipped = TRUE;
1503 if (em_ptr->r_ptr->flags3 & (RF3_EVIL))
1505 if (em_ptr->seen) em_ptr->obvious = TRUE;
1507 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_EVIL);
1509 em_ptr->do_fear = damroll(3, (em_ptr->dam / 2)) + 1;
1510 if (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10)
1512 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1513 em_ptr->obvious = FALSE;
1514 em_ptr->do_fear = 0;
1519 em_ptr->skipped = TRUE;
1527 if (em_ptr->seen) em_ptr->obvious = TRUE;
1529 em_ptr->do_fear = damroll(3, (em_ptr->dam / 2)) + 1;
1530 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
1531 (em_ptr->r_ptr->flags3 & (RF3_NO_FEAR)) ||
1532 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
1534 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1535 em_ptr->obvious = FALSE;
1536 em_ptr->do_fear = 0;
1542 case GF_DISP_UNDEAD:
1544 if (em_ptr->r_ptr->flags3 & (RF3_UNDEAD))
1546 if (em_ptr->seen) em_ptr->obvious = TRUE;
1548 /* Learn about em_ptr->effect_type */
1549 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
1551 em_ptr->note = _("は身震いした。", " shudders.");
1552 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1556 em_ptr->skipped = TRUE;
1564 if (em_ptr->r_ptr->flags3 & (RF3_EVIL))
1566 if (em_ptr->seen) em_ptr->obvious = TRUE;
1568 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_EVIL);
1570 em_ptr->note = _("は身震いした。", " shudders.");
1571 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1575 em_ptr->skipped = TRUE;
1583 if (em_ptr->r_ptr->flags3 & (RF3_GOOD))
1585 if (em_ptr->seen) em_ptr->obvious = TRUE;
1587 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_GOOD);
1589 em_ptr->note = _("は身震いした。", " shudders.");
1590 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1594 em_ptr->skipped = TRUE;
1600 case GF_DISP_LIVING:
1602 if (monster_living(em_ptr->m_ptr->r_idx))
1604 if (em_ptr->seen) em_ptr->obvious = TRUE;
1606 em_ptr->note = _("は身震いした。", " shudders.");
1607 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1611 em_ptr->skipped = TRUE;
1619 if (em_ptr->r_ptr->flags3 & (RF3_DEMON))
1621 if (em_ptr->seen) em_ptr->obvious = TRUE;
1623 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_DEMON);
1625 em_ptr->note = _("は身震いした。", " shudders.");
1626 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1630 em_ptr->skipped = TRUE;
1638 if (em_ptr->seen) em_ptr->obvious = TRUE;
1639 em_ptr->note = _("は身震いした。", " shudders.");
1640 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1645 if (em_ptr->seen) em_ptr->obvious = TRUE;
1646 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)))
1648 if (em_ptr->who > 0)
1650 if (em_ptr->m_caster_ptr->hp < em_ptr->m_caster_ptr->maxhp)
1652 em_ptr->m_caster_ptr->hp += em_ptr->dam;
1653 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;
1654 if (caster_ptr->health_who == em_ptr->who) caster_ptr->redraw |= (PR_HEALTH);
1655 if (caster_ptr->riding == em_ptr->who) caster_ptr->redraw |= (PR_UHEALTH);
1657 if (em_ptr->see_s_msg)
1659 monster_desc(caster_ptr, em_ptr->killer, em_ptr->m_caster_ptr, 0);
1660 msg_format(_("%^sは気分が良さそうだ。", "%^s appears healthier."), em_ptr->killer);
1666 msg_format(_("%sから精神エネルギーを吸いとった。", "You draw psychic energy from %s."), em_ptr->m_name);
1667 (void)hp_player(caster_ptr, em_ptr->dam);
1672 if (em_ptr->see_s_msg) msg_format(_("%sには効果がなかった。", "%s is unaffected."), em_ptr->m_name);
1680 if (em_ptr->seen) em_ptr->obvious = TRUE;
1681 if (!em_ptr->who) msg_format(_("%sをじっと睨んだ。", "You gaze intently at %s."), em_ptr->m_name);
1683 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
1684 (em_ptr->r_ptr->flags3 & RF3_NO_CONF) ||
1685 (em_ptr->r_ptr->level > randint1((em_ptr->caster_lev - 10) < 1 ? 1 : (em_ptr->caster_lev - 10)) + 10))
1687 if (em_ptr->r_ptr->flags3 & (RF3_NO_CONF))
1689 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
1692 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1695 else if (em_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
1697 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags2 |= (RF2_EMPTY_MIND);
1698 em_ptr->note = _("には完全な耐性がある!", " is immune.");
1701 else if (em_ptr->r_ptr->flags2 & RF2_WEIRD_MIND)
1703 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags2 |= (RF2_WEIRD_MIND);
1704 em_ptr->note = _("には耐性がある。", " resists.");
1709 em_ptr->note = _("は精神攻撃を食らった。", " is blasted by psionic energy.");
1710 em_ptr->note_dies = _("の精神は崩壊し、肉体は抜け殻となった。", " collapses, a mindless husk.");
1712 if (em_ptr->who > 0) em_ptr->do_conf = randint0(4) + 4;
1713 else em_ptr->do_conf = randint0(8) + 8;
1718 case GF_BRAIN_SMASH:
1720 if (em_ptr->seen) em_ptr->obvious = TRUE;
1721 if (!em_ptr->who) msg_format(_("%sをじっと睨んだ。", "You gaze intently at %s."), em_ptr->m_name);
1723 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
1724 (em_ptr->r_ptr->flags3 & RF3_NO_CONF) ||
1725 (em_ptr->r_ptr->level > randint1((em_ptr->caster_lev - 10) < 1 ? 1 : (em_ptr->caster_lev - 10)) + 10))
1727 if (em_ptr->r_ptr->flags3 & (RF3_NO_CONF))
1729 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
1732 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1735 else if (em_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
1737 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags2 |= (RF2_EMPTY_MIND);
1738 em_ptr->note = _("には完全な耐性がある!", " is immune.");
1741 else if (em_ptr->r_ptr->flags2 & RF2_WEIRD_MIND)
1743 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags2 |= (RF2_WEIRD_MIND);
1744 em_ptr->note = _("には耐性がある!", " resists!");
1749 em_ptr->note = _("は精神攻撃を食らった。", " is blasted by psionic energy.");
1750 em_ptr->note_dies = _("の精神は崩壊し、肉体は抜け殻となった。", " collapses, a mindless husk.");
1751 if (em_ptr->who > 0)
1753 em_ptr->do_conf = randint0(4) + 4;
1754 em_ptr->do_stun = randint0(4) + 4;
1758 em_ptr->do_conf = randint0(8) + 8;
1759 em_ptr->do_stun = randint0(8) + 8;
1761 (void)set_monster_slow(caster_ptr, em_ptr->g_ptr->m_idx, MON_SLOW(em_ptr->m_ptr) + 10);
1768 if (em_ptr->seen) em_ptr->obvious = TRUE;
1769 if (!em_ptr->who) msg_format(_("%sを指差して呪いをかけた。", "You point at %s and curse."), em_ptr->m_name);
1770 if (randint0(100 + (em_ptr->caster_lev / 2)) < (em_ptr->r_ptr->level + 35))
1772 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1780 if (em_ptr->seen) em_ptr->obvious = TRUE;
1781 if (!em_ptr->who) msg_format(_("%sを指差して恐ろしげに呪いをかけた。", "You point at %s and curse horribly."), em_ptr->m_name);
1783 if (randint0(100 + (em_ptr->caster_lev / 2)) < (em_ptr->r_ptr->level + 35))
1785 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1793 if (em_ptr->seen) em_ptr->obvious = TRUE;
1794 if (!em_ptr->who) msg_format(_("%sを指差し、恐ろしげに呪文を唱えた!", "You point at %s, incanting terribly!"), em_ptr->m_name);
1796 if (randint0(100 + (em_ptr->caster_lev / 2)) < (em_ptr->r_ptr->level + 35))
1798 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1806 if (em_ptr->seen) em_ptr->obvious = TRUE;
1808 msg_format(_("%sの秘孔を突いて、「お前は既に死んでいる」と叫んだ。",
1809 "You point at %s, screaming the word, 'DIE!'."), em_ptr->m_name);
1811 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)))
1813 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1820 if (em_ptr->seen) em_ptr->obvious = TRUE;
1821 if (em_ptr->r_ptr->flags1 & RF1_UNIQUE)
1823 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1828 if ((em_ptr->who > 0) ? ((em_ptr->caster_lev + randint1(em_ptr->dam)) > (em_ptr->r_ptr->level + 10 + randint1(20))) :
1829 (((em_ptr->caster_lev / 2) + randint1(em_ptr->dam)) > (em_ptr->r_ptr->level + randint1(200))))
1831 em_ptr->dam = ((40 + randint1(20)) * em_ptr->m_ptr->hp) / 100;
1833 if (em_ptr->m_ptr->hp < em_ptr->dam) em_ptr->dam = em_ptr->m_ptr->hp - 1;
1837 /* todo 乱数で破滅のを弾いた結果が「耐性を持っている」ことになるのはおかしい */
1838 em_ptr->note = _("は耐性を持っている!", "resists!");
1848 if ((floor_ptr->inside_quest && (quest[floor_ptr->inside_quest].type == QUEST_TYPE_KILL_ALL) && !is_pet(em_ptr->m_ptr)) ||
1849 (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)
1851 msg_format(_("%sには効果がなかった。", "%s is unaffected."), em_ptr->m_name);
1852 em_ptr->skipped = TRUE;
1856 if (is_pet(em_ptr->m_ptr)) nokori_hp = em_ptr->m_ptr->maxhp * 4L;
1857 else if ((caster_ptr->pclass == CLASS_BEASTMASTER) && monster_living(em_ptr->m_ptr->r_idx))
1858 nokori_hp = em_ptr->m_ptr->maxhp * 3 / 10;
1860 nokori_hp = em_ptr->m_ptr->maxhp * 3 / 20;
1862 if (em_ptr->m_ptr->hp >= nokori_hp)
1864 msg_format(_("もっと弱らせないと。", "You need to weaken %s more."), em_ptr->m_name);
1865 em_ptr->skipped = TRUE;
1867 else if (em_ptr->m_ptr->hp < randint0(nokori_hp))
1869 if (em_ptr->m_ptr->mflag2 & MFLAG2_CHAMELEON) choose_new_monster(caster_ptr, em_ptr->g_ptr->m_idx, FALSE, MON_CHAMELEON);
1870 msg_format(_("%sを捕えた!", "You capture %^s!"), em_ptr->m_name);
1871 cap_mon = em_ptr->m_ptr->r_idx;
1872 cap_mspeed = em_ptr->m_ptr->mspeed;
1873 cap_hp = em_ptr->m_ptr->hp;
1874 cap_maxhp = em_ptr->m_ptr->max_maxhp;
1875 cap_nickname = em_ptr->m_ptr->nickname;
1876 if (em_ptr->g_ptr->m_idx == caster_ptr->riding)
1878 if (rakuba(caster_ptr, -1, FALSE))
1880 msg_format(_("地面に落とされた。", "You have fallen from %s."), em_ptr->m_name);
1884 delete_monster_idx(caster_ptr, em_ptr->g_ptr->m_idx);
1886 return GF_SWITCH_TRUE;
1890 msg_format(_("うまく捕まえられなかった。", "You failed to capture %s."), em_ptr->m_name);
1891 em_ptr->skipped = TRUE;
1898 return (gf_switch_result)py_attack(caster_ptr, em_ptr->y, em_ptr->x, em_ptr->dam);
1905 if (em_ptr->seen) em_ptr->obvious = TRUE;
1906 if (em_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
1908 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1910 em_ptr->skipped = TRUE;
1911 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags2 |= (RF2_EMPTY_MIND);
1914 if (MON_CSLEEP(em_ptr->m_ptr))
1916 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1918 em_ptr->skipped = TRUE;
1922 if (one_in_(5)) effect = 1;
1923 else if (one_in_(4)) effect = 2;
1924 else if (one_in_(3)) effect = 3;
1929 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
1930 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
1932 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1933 em_ptr->obvious = FALSE;
1937 if (set_monster_slow(caster_ptr, em_ptr->g_ptr->m_idx, MON_SLOW(em_ptr->m_ptr) + 50))
1939 em_ptr->note = _("の動きが遅くなった。", " starts moving slower.");
1943 else if (effect == 2)
1945 em_ptr->do_stun = damroll((caster_ptr->lev / 10) + 3, (em_ptr->dam)) + 1;
1946 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
1947 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
1949 em_ptr->do_stun = 0;
1950 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1951 em_ptr->obvious = FALSE;
1954 else if (effect == 3)
1956 if ((em_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
1957 (em_ptr->r_ptr->flags3 & RF3_NO_SLEEP) ||
1958 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
1960 if (em_ptr->r_ptr->flags3 & RF3_NO_SLEEP)
1962 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_SLEEP);
1965 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1966 em_ptr->obvious = FALSE;
1970 /* Go to sleep (much) later */
1971 em_ptr->note = _("は眠り込んでしまった!", " falls asleep!");
1972 em_ptr->do_sleep = 500;
1978 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1986 if (em_ptr->seen) em_ptr->obvious = TRUE;
1987 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")))
1989 if (em_ptr->seen_msg) msg_format(_("%sは消滅した!", "%^s disappeared!"), em_ptr->m_name);
1990 chg_virtue(caster_ptr, V_VITALITY, -1);
1991 return GF_SWITCH_TRUE;
1994 em_ptr->skipped = TRUE;
2000 msg_format(_("%sを写真に撮った。", "You take a photograph of %s."), em_ptr->m_name);
2002 if (em_ptr->r_ptr->flags3 & (RF3_HURT_LITE))
2004 if (em_ptr->seen) em_ptr->obvious = TRUE;
2006 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_HURT_LITE);
2008 em_ptr->note = _("は光に身をすくめた!", " cringes from the light!");
2009 em_ptr->note_dies = _("は光を受けてしぼんでしまった!", " shrivels away in the light!");
2016 em_ptr->photo = em_ptr->m_ptr->r_idx;
2021 bool success = FALSE;
2022 if (em_ptr->seen) em_ptr->obvious = TRUE;
2024 if ((em_ptr->r_ptr->flags3 & (RF3_GOOD)) && !floor_ptr->inside_arena)
2026 if (em_ptr->r_ptr->flags3 & (RF3_NO_CONF)) em_ptr->dam -= 50;
2027 if (em_ptr->dam < 1) em_ptr->dam = 1;
2029 if (is_pet(em_ptr->m_ptr))
2031 em_ptr->note = _("の動きが速くなった。", " starts moving faster.");
2032 (void)set_monster_fast(caster_ptr, em_ptr->g_ptr->m_idx, MON_FAST(em_ptr->m_ptr) + 100);
2035 else if ((em_ptr->r_ptr->flags1 & (RF1_QUESTOR)) ||
2036 (em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
2037 (em_ptr->m_ptr->mflag2 & MFLAG2_NOPET) ||
2038 (caster_ptr->cursed & TRC_AGGRAVATE) ||
2039 ((em_ptr->r_ptr->level + 10) > randint1(em_ptr->dam)))
2041 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
2045 em_ptr->note = _("を支配した。", " is tamed!");
2046 set_pet(caster_ptr, em_ptr->m_ptr);
2047 (void)set_monster_fast(caster_ptr, em_ptr->g_ptr->m_idx, MON_FAST(em_ptr->m_ptr) + 100);
2049 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_GOOD);
2056 if (!(em_ptr->r_ptr->flags3 & RF3_NO_FEAR))
2058 em_ptr->do_fear = randint1(90) + 10;
2060 else if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
2061 em_ptr->r_ptr->r_flags3 |= (RF3_NO_FEAR);
2069 if (em_ptr->seen) em_ptr->obvious = TRUE;
2071 if (randint0(100 + em_ptr->dam) < (em_ptr->r_ptr->level + 50))
2073 em_ptr->note = _("には効果がなかった。", " is unaffected.");
2080 em_ptr->skipped = TRUE;
2086 return GF_SWITCH_CONTINUE;