OSDN Git Service

[Refactor] Changed return type from void to gf_switch_result in effect_monster_*()
[hengbandforosx/hengbandosx.git] / src / effect / effect-monster-switcher.c
1 /*!
2  * @brief 魔法種別による各種処理切り替え
3  * @date 2020/04/29
4  * @author Hourier
5  */
6
7 #include "angband.h"
8 #include "effect-monster-util.h"
9 #include "effect/effect-monster-switcher.h"
10 #include "player-damage.h"
11 #include "world.h"
12 #include "avatar.h"
13 #include "monster-spell.h"
14 #include "quest.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
24 static gf_switch_result effect_monster_void(effect_monster_type *em_ptr)
25 {
26         if (em_ptr->seen) em_ptr->obvious = TRUE;
27
28         return GF_SWITCH_CONTINUE;
29 }
30
31 static gf_switch_result effect_monster_acid(player_type *caster_ptr, effect_monster_type *em_ptr)
32 {
33         if (em_ptr->seen) em_ptr->obvious = TRUE;
34         if ((em_ptr->r_ptr->flagsr & RFR_IM_ACID) == 0) return;
35
36         em_ptr->note = _("にはかなり耐性がある!", " resists a lot.");
37         em_ptr->dam /= 9;
38         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
39                 em_ptr->r_ptr->r_flagsr |= (RFR_IM_ACID);
40
41         return GF_SWITCH_CONTINUE;
42 }
43
44
45 static gf_switch_result effect_monster_elec(player_type *caster_ptr, effect_monster_type *em_ptr)
46 {
47         if (em_ptr->seen) em_ptr->obvious = TRUE;
48         if ((em_ptr->r_ptr->flagsr & RFR_IM_ELEC) == 0) return;
49
50         em_ptr->note = _("にはかなり耐性がある!", " resists a lot.");
51         em_ptr->dam /= 9;
52         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
53                 em_ptr->r_ptr->r_flagsr |= (RFR_IM_ELEC);
54
55         return GF_SWITCH_CONTINUE;
56 }
57
58
59 static gf_switch_result effect_monster_fire(player_type *caster_ptr, effect_monster_type *em_ptr)
60 {
61         if (em_ptr->seen) em_ptr->obvious = TRUE;
62         if (em_ptr->r_ptr->flagsr & RFR_IM_FIRE)
63         {
64                 em_ptr->note = _("にはかなり耐性がある!", " resists a lot.");
65                 em_ptr->dam /= 9;
66                 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
67                         em_ptr->r_ptr->r_flagsr |= (RFR_IM_FIRE);
68
69                 return;
70         }
71         
72         if ((em_ptr->r_ptr->flags3 & (RF3_HURT_FIRE)) == 0) return;
73
74         em_ptr->note = _("はひどい痛手をうけた。", " is hit hard.");
75         em_ptr->dam *= 2;
76         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
77                 em_ptr->r_ptr->r_flags3 |= (RF3_HURT_FIRE);
78
79         return GF_SWITCH_CONTINUE;
80 }
81
82
83 static gf_switch_result effect_monster_cold(player_type *caster_ptr, effect_monster_type *em_ptr)
84 {
85         if (em_ptr->seen) em_ptr->obvious = TRUE;
86         if (em_ptr->r_ptr->flagsr & RFR_IM_COLD)
87         {
88                 em_ptr->note = _("にはかなり耐性がある!", " resists a lot.");
89                 em_ptr->dam /= 9;
90                 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
91                         em_ptr->r_ptr->r_flagsr |= (RFR_IM_COLD);
92
93                 return;
94         }
95         
96         if ((em_ptr->r_ptr->flags3 & (RF3_HURT_COLD)) == 0) return;
97
98         em_ptr->note = _("はひどい痛手をうけた。", " is hit hard.");
99         em_ptr->dam *= 2;
100         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
101                 em_ptr->r_ptr->r_flags3 |= (RF3_HURT_COLD);
102
103         return GF_SWITCH_CONTINUE;
104 }
105
106
107 static gf_switch_result effect_monster_pois(player_type *caster_ptr, effect_monster_type *em_ptr)
108 {
109         if (em_ptr->seen) em_ptr->obvious = TRUE;
110         if ((em_ptr->r_ptr->flagsr & RFR_IM_POIS) == 0) return;
111
112         em_ptr->note = _("にはかなり耐性がある!", " resists a lot.");
113         em_ptr->dam /= 9;
114         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
115                 em_ptr->r_ptr->r_flagsr |= (RFR_IM_POIS);
116
117         return GF_SWITCH_CONTINUE;
118 }
119
120
121 static gf_switch_result effect_monster_nuke(player_type *caster_ptr, effect_monster_type *em_ptr)
122 {
123         if (em_ptr->seen) em_ptr->obvious = TRUE;
124         if (em_ptr->r_ptr->flagsr & RFR_IM_POIS)
125         {
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);
130
131                 return;
132         }
133         
134         if (one_in_(3)) em_ptr->do_polymorph = TRUE;
135
136         return GF_SWITCH_CONTINUE;
137 }
138
139
140 static gf_switch_result effect_monster_hell_file(player_type *caster_ptr, effect_monster_type *em_ptr)
141 {
142         if (em_ptr->seen) em_ptr->obvious = TRUE;
143         if ((em_ptr->r_ptr->flags3 & RF3_GOOD) == 0) return;
144
145         em_ptr->note = _("はひどい痛手をうけた。", " is hit hard.");
146         em_ptr->dam *= 2;
147         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
148                 em_ptr->r_ptr->r_flags3 |= RF3_GOOD;
149
150         return GF_SWITCH_CONTINUE;
151 }
152
153
154 static gf_switch_result effect_monster_holy_fire(player_type *caster_ptr, effect_monster_type *em_ptr)
155 {
156         if (em_ptr->seen) em_ptr->obvious = TRUE;
157         if ((em_ptr->r_ptr->flags3 & RF3_EVIL) == 0)
158         {
159                 em_ptr->note = _("には耐性がある。", " resists.");
160                 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
161                 return;
162         }
163
164         em_ptr->dam *= 2;
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;
168
169         return GF_SWITCH_CONTINUE;
170 }
171
172
173 /*!
174  * @brief 魔法の効果によって様々なメッセーを出力したり与えるダメージの増減を行ったりする
175  * @param em_ptr モンスター効果構造体への参照ポインタ
176  * @return ここのスイッチングで終るならTRUEかFALSE、後続処理を実行するならCONTINUE
177  */
178 gf_switch_result switch_effects_monster(player_type *caster_ptr, effect_monster_type *em_ptr)
179 {
180         floor_type *floor_ptr = caster_ptr->current_floor_ptr;
181         switch (em_ptr->effect_type)
182         {
183         case GF_PSY_SPEAR:
184         case GF_MISSILE:
185         case GF_ARROW:
186         case GF_MANA:
187         case GF_METEOR:
188         case GF_BLOOD_CURSE:
189         case GF_SEEKER:
190         case GF_SUPER_RAY:
191                 return effect_monster_void(em_ptr);
192         case GF_ACID:
193                 return effect_monster_acid(caster_ptr, em_ptr);
194         case GF_ELEC:
195                 return effect_monster_elec(caster_ptr, em_ptr);
196         case GF_FIRE:
197                 return effect_monster_fire(caster_ptr, em_ptr);
198         case GF_COLD:
199                 return effect_monster_cold(caster_ptr, em_ptr);
200         case GF_POIS:
201                 return effect_monster_pois(caster_ptr, em_ptr);
202         case GF_NUKE:
203                 return effect_monster_nuke(caster_ptr, em_ptr);
204         case GF_HELL_FIRE:
205                 return effect_monster_hell_fire(caster_ptr, em_ptr);
206         case GF_HOLY_FIRE:
207                 return effect_monster_holy_fire(caster_ptr, em_ptr);
208         case GF_PLASMA:
209         {
210                 if (em_ptr->seen) em_ptr->obvious = TRUE;
211                 if (em_ptr->r_ptr->flagsr & RFR_RES_PLAS)
212                 {
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);
216                 }
217
218                 break;
219         }
220         case GF_NETHER:
221         {
222                 if (em_ptr->seen) em_ptr->obvious = TRUE;
223                 if (em_ptr->r_ptr->flagsr & RFR_RES_NETH)
224                 {
225                         if (em_ptr->r_ptr->flags3 & RF3_UNDEAD)
226                         {
227                                 em_ptr->note = _("には完全な耐性がある!", " is immune.");
228                                 em_ptr->dam = 0;
229                                 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
230                         }
231                         else
232                         {
233                                 em_ptr->note = _("には耐性がある。", " resists.");
234                                 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
235                         }
236                         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_RES_NETH);
237                 }
238                 else if (em_ptr->r_ptr->flags3 & RF3_EVIL)
239                 {
240                         em_ptr->note = _("はいくらか耐性を示した。", " resists somewhat.");
241                         em_ptr->dam /= 2;
242                         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_EVIL);
243                 }
244
245                 break;
246         }
247         case GF_WATER:
248         {
249                 if (em_ptr->seen) em_ptr->obvious = TRUE;
250                 if (em_ptr->r_ptr->flagsr & RFR_RES_WATE)
251                 {
252                         if ((em_ptr->m_ptr->r_idx == MON_WATER_ELEM) || (em_ptr->m_ptr->r_idx == MON_UNMAKER))
253                         {
254                                 em_ptr->note = _("には完全な耐性がある!", " is immune.");
255                                 em_ptr->dam = 0;
256                         }
257                         else
258                         {
259                                 em_ptr->note = _("には耐性がある。", " resists.");
260                                 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
261                         }
262                         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_RES_WATE);
263                 }
264
265                 break;
266         }
267         case GF_CHAOS:
268         {
269                 if (em_ptr->seen) em_ptr->obvious = TRUE;
270                 if (em_ptr->r_ptr->flagsr & RFR_RES_CHAO)
271                 {
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);
275                 }
276                 else if ((em_ptr->r_ptr->flags3 & RF3_DEMON) && one_in_(3))
277                 {
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);
281                 }
282                 else
283                 {
284                         em_ptr->do_polymorph = TRUE;
285                         em_ptr->do_conf = (5 + randint1(11) + em_ptr->r) / (em_ptr->r + 1);
286                 }
287
288                 break;
289         }
290         case GF_SHARDS:
291         {
292                 if (em_ptr->seen) em_ptr->obvious = TRUE;
293                 if (em_ptr->r_ptr->flagsr & RFR_RES_SHAR)
294                 {
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);
298                 }
299
300                 break;
301         }
302         case GF_ROCKET:
303         {
304                 if (em_ptr->seen) em_ptr->obvious = TRUE;
305                 if (em_ptr->r_ptr->flagsr & RFR_RES_SHAR)
306                 {
307                         em_ptr->note = _("はいくらか耐性を示した。", " resists somewhat.");
308                         em_ptr->dam /= 2;
309                         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_RES_SHAR);
310                 }
311
312                 break;
313         }
314         case GF_SOUND:
315         {
316                 if (em_ptr->seen) em_ptr->obvious = TRUE;
317                 if (em_ptr->r_ptr->flagsr & RFR_RES_SOUN)
318                 {
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);
322                 }
323                 else
324                         em_ptr->do_stun = (10 + randint1(15) + em_ptr->r) / (em_ptr->r + 1);
325
326                 break;
327         }
328         case GF_CONFUSION:
329         {
330                 if (em_ptr->seen) em_ptr->obvious = TRUE;
331                 if (em_ptr->r_ptr->flags3 & RF3_NO_CONF)
332                 {
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);
336                 }
337                 else
338                         em_ptr->do_conf = (10 + randint1(15) + em_ptr->r) / (em_ptr->r + 1);
339
340                 break;
341         }
342         case GF_DISENCHANT:
343         {
344                 if (em_ptr->seen) em_ptr->obvious = TRUE;
345                 if (em_ptr->r_ptr->flagsr & RFR_RES_DISE)
346                 {
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);
350                 }
351
352                 break;
353         }
354         case GF_NEXUS:
355         {
356                 if (em_ptr->seen) em_ptr->obvious = TRUE;
357                 if (em_ptr->r_ptr->flagsr & RFR_RES_NEXU)
358                 {
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);
362                 }
363
364                 break;
365         }
366         case GF_FORCE:
367         {
368                 if (em_ptr->seen) em_ptr->obvious = TRUE;
369                 if (em_ptr->r_ptr->flagsr & RFR_RES_WALL)
370                 {
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);
374                 }
375                 else
376                         em_ptr->do_stun = (randint1(15) + em_ptr->r) / (em_ptr->r + 1);
377
378                 break;
379         }
380         case GF_INERTIAL:
381         {
382                 if (em_ptr->seen) em_ptr->obvious = TRUE;
383                 if (em_ptr->r_ptr->flagsr & RFR_RES_INER)
384                 {
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);
388                 }
389                 else
390                 {
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))
394                         {
395                                 em_ptr->obvious = FALSE;
396                         }
397                         /* Normal monsters slow down */
398                         else
399                         {
400                                 if (set_monster_slow(caster_ptr, em_ptr->g_ptr->m_idx, MON_SLOW(em_ptr->m_ptr) + 50))
401                                 {
402                                         em_ptr->note = _("の動きが遅くなった。", " starts moving slower.");
403                                 }
404                         }
405                 }
406
407                 break;
408         }
409         case GF_TIME:
410         {
411                 if (em_ptr->seen) em_ptr->obvious = TRUE;
412                 if (em_ptr->r_ptr->flagsr & RFR_RES_TIME)
413                 {
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);
417                 }
418                 else
419                         em_ptr->do_time = (em_ptr->dam + 1) / 2;
420
421                 break;
422         }
423         case GF_GRAVITY:
424         {
425                 bool resist_tele = FALSE;
426
427                 if (em_ptr->seen) em_ptr->obvious = TRUE;
428                 if (em_ptr->r_ptr->flagsr & RFR_RES_TELE)
429                 {
430                         if (em_ptr->r_ptr->flags1 & (RF1_UNIQUE))
431                         {
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!");
434                                 resist_tele = TRUE;
435                         }
436                         else if (em_ptr->r_ptr->level > randint1(100))
437                         {
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!");
440                                 resist_tele = TRUE;
441                         }
442                 }
443
444                 if (!resist_tele) em_ptr->do_dist = 10;
445                 else em_ptr->do_dist = 0;
446
447                 if (caster_ptr->riding && (em_ptr->g_ptr->m_idx == caster_ptr->riding)) em_ptr->do_dist = 0;
448
449                 if (em_ptr->r_ptr->flagsr & RFR_RES_GRAV)
450                 {
451                         em_ptr->note = _("には耐性がある!", " resists!");
452                         em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
453                         em_ptr->do_dist = 0;
454                         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_RES_GRAV);
455                 }
456                 else
457                 {
458                         /* 1. slowness */
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))
462                         {
463                                 em_ptr->obvious = FALSE;
464                         }
465                         /* Normal monsters slow down */
466                         else
467                         {
468                                 if (set_monster_slow(caster_ptr, em_ptr->g_ptr->m_idx, MON_SLOW(em_ptr->m_ptr) + 50))
469                                 {
470                                         em_ptr->note = _("の動きが遅くなった。", " starts moving slower.");
471                                 }
472                         }
473
474                         /* 2. stun */
475                         em_ptr->do_stun = damroll((em_ptr->caster_lev / 20) + 3, (em_ptr->dam)) + 1;
476
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))
480                         {
481                                 /* Resist */
482                                 em_ptr->do_stun = 0;
483                                 /* No em_ptr->obvious effect */
484                                 em_ptr->note = _("には効果がなかった。", " is unaffected!");
485                                 em_ptr->obvious = FALSE;
486                         }
487                 }
488
489                 break;
490         }
491         case GF_DISINTEGRATE:
492         {
493                 if (em_ptr->seen) em_ptr->obvious = TRUE;
494                 if (em_ptr->r_ptr->flags3 & RF3_HURT_ROCK)
495                 {
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!");
499                         em_ptr->dam *= 2;
500                 }
501
502                 break;
503         }
504         case GF_PSI:
505         {
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)))
508                 {
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;
512                         break;
513                 }
514
515                 if (em_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
516                 {
517                         em_ptr->dam = 0;
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);
520
521                 }
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)))
525                 {
526                         em_ptr->note = _("には耐性がある!", " resists!");
527                         em_ptr->dam /= 3;
528
529                         /*
530                          * Powerful demons & undead can turn a mindcrafter's
531                          * attacks back on them
532                          */
533                         if ((em_ptr->r_ptr->flags3 & (RF3_UNDEAD | RF3_DEMON)) &&
534                                 (em_ptr->r_ptr->level > caster_ptr->lev / 2) &&
535                                 one_in_(2))
536                         {
537                                 em_ptr->note = NULL;
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);
541
542                                 if ((randint0(100 + em_ptr->r_ptr->level / 2) < caster_ptr->skill_sav) && !CHECK_MULTISHADOW(caster_ptr))
543                                 {
544                                         msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));
545                                 }
546                                 else
547                                 {
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))
552                                         {
553                                                 switch (randint1(4))
554                                                 {
555                                                 case 1:
556                                                         set_confused(caster_ptr, caster_ptr->confused + 3 + randint1(em_ptr->dam));
557                                                         break;
558                                                 case 2:
559                                                         set_stun(caster_ptr, caster_ptr->stun + randint1(em_ptr->dam));
560                                                         break;
561                                                 case 3:
562                                                 {
563                                                         if (em_ptr->r_ptr->flags3 & RF3_NO_FEAR)
564                                                                 em_ptr->note = _("には効果がなかった。", " is unaffected.");
565                                                         else
566                                                                 set_afraid(caster_ptr, caster_ptr->afraid + 3 + randint1(em_ptr->dam));
567                                                         break;
568                                                 }
569                                                 default:
570                                                         if (!caster_ptr->free_act)
571                                                                 (void)set_paralyzed(caster_ptr, caster_ptr->paralyzed + randint1(em_ptr->dam));
572                                                         break;
573                                                 }
574                                         }
575                                 }
576
577                                 em_ptr->dam = 0;
578                         }
579                 }
580
581                 if ((em_ptr->dam > 0) && one_in_(4))
582                 {
583                         switch (randint1(4))
584                         {
585                         case 1:
586                                 em_ptr->do_conf = 3 + randint1(em_ptr->dam);
587                                 break;
588                         case 2:
589                                 em_ptr->do_stun = 3 + randint1(em_ptr->dam);
590                                 break;
591                         case 3:
592                                 em_ptr->do_fear = 3 + randint1(em_ptr->dam);
593                                 break;
594                         default:
595                                 em_ptr->note = _("は眠り込んでしまった!", " falls asleep!");
596                                 em_ptr->do_sleep = 3 + randint1(em_ptr->dam);
597                                 break;
598                         }
599                 }
600
601                 em_ptr->note_dies = _("の精神は崩壊し、肉体は抜け殻となった。", " collapses, a mindless husk.");
602                 break;
603         }
604         case GF_PSI_DRAIN:
605         {
606                 if (em_ptr->seen) em_ptr->obvious = TRUE;
607                 if (em_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
608                 {
609                         em_ptr->dam = 0;
610                         em_ptr->note = _("には完全な耐性がある!", " is immune.");
611                 }
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)))
615                 {
616                         em_ptr->note = _("には耐性がある!", " resists!");
617                         em_ptr->dam /= 3;
618
619                         /*
620                          * Powerful demons & undead can turn a mindcrafter's
621                          * attacks back on them
622                          */
623                         if ((em_ptr->r_ptr->flags3 & (RF3_UNDEAD | RF3_DEMON)) &&
624                                 (em_ptr->r_ptr->level > caster_ptr->lev / 2) &&
625                                 (one_in_(2)))
626                         {
627                                 em_ptr->note = NULL;
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))
632                                 {
633                                         msg_print(_("あなたは効力を跳ね返した!", "You resist the effects!"));
634                                 }
635                                 else
636                                 {
637                                         monster_desc(caster_ptr, em_ptr->killer, em_ptr->m_ptr, MD_WRONGDOER_NAME);
638                                         if (!CHECK_MULTISHADOW(caster_ptr))
639                                         {
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);
645                                         }
646                                         take_hit(caster_ptr, DAMAGE_ATTACK, em_ptr->dam, em_ptr->killer, -1);  /* has already been /3 */
647                                 }
648
649                                 em_ptr->dam = 0;
650                         }
651                 }
652                 else if (em_ptr->dam > 0)
653                 {
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);
660
661                         b = MIN(caster_ptr->msp, caster_ptr->csp + b);
662                         caster_ptr->csp = b;
663                         caster_ptr->redraw |= PR_MANA;
664                         caster_ptr->window |= (PW_SPELL);
665                 }
666
667                 em_ptr->note_dies = _("の精神は崩壊し、肉体は抜け殻となった。", " collapses, a mindless husk.");
668                 break;
669         }
670         case GF_TELEKINESIS:
671         {
672                 if (em_ptr->seen) em_ptr->obvious = TRUE;
673                 if (one_in_(4))
674                 {
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;
677                 }
678
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)))
682                 {
683                         em_ptr->do_stun = 0;
684                         em_ptr->obvious = FALSE;
685                 }
686
687                 break;
688         }
689         case GF_DOMINATION:
690         {
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))
696                 {
697                         if (em_ptr->r_ptr->flags3 & RF3_NO_CONF)
698                         {
699                                 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
700                         }
701
702                         em_ptr->do_conf = 0;
703
704                         /*
705                          * Powerful demons & undead can turn a mindcrafter's
706                          * attacks back on them
707                          */
708                         if ((em_ptr->r_ptr->flags3 & (RF3_UNDEAD | RF3_DEMON)) &&
709                                 (em_ptr->r_ptr->level > caster_ptr->lev / 2) &&
710                                 (one_in_(2)))
711                         {
712                                 em_ptr->note = NULL;
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);
716
717                                 /* Saving throw */
718                                 if (randint0(100 + em_ptr->r_ptr->level / 2) < caster_ptr->skill_sav)
719                                 {
720                                         msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));
721                                 }
722                                 else
723                                 {
724                                         /* Confuse, stun, terrify */
725                                         switch (randint1(4))
726                                         {
727                                         case 1:
728                                                 set_stun(caster_ptr, caster_ptr->stun + em_ptr->dam / 2);
729                                                 break;
730                                         case 2:
731                                                 set_confused(caster_ptr, caster_ptr->confused + em_ptr->dam / 2);
732                                                 break;
733                                         default:
734                                         {
735                                                 if (em_ptr->r_ptr->flags3 & RF3_NO_FEAR)
736                                                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
737                                                 else
738                                                         set_afraid(caster_ptr, caster_ptr->afraid + em_ptr->dam);
739                                         }
740                                         }
741                                 }
742                         }
743                         else
744                         {
745                                 em_ptr->note = _("には効果がなかった。", " is unaffected.");
746                                 em_ptr->obvious = FALSE;
747                         }
748                 }
749                 else
750                 {
751                         if (!common_saving_throw_charm(caster_ptr, em_ptr->dam, em_ptr->m_ptr))
752                         {
753                                 em_ptr->note = _("があなたに隷属した。", " is in your thrall!");
754                                 set_pet(caster_ptr, em_ptr->m_ptr);
755                         }
756                         else
757                         {
758                                 switch (randint1(4))
759                                 {
760                                 case 1:
761                                         em_ptr->do_stun = em_ptr->dam / 2;
762                                         break;
763                                 case 2:
764                                         em_ptr->do_conf = em_ptr->dam / 2;
765                                         break;
766                                 default:
767                                         em_ptr->do_fear = em_ptr->dam;
768                                 }
769                         }
770                 }
771
772                 em_ptr->dam = 0;
773                 break;
774         }
775         case GF_ICE:
776         {
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)
780                 {
781                         em_ptr->note = _("にはかなり耐性がある!", " resists a lot.");
782                         em_ptr->dam /= 9;
783                         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= (RFR_IM_COLD);
784                 }
785                 else if (em_ptr->r_ptr->flags3 & (RF3_HURT_COLD))
786                 {
787                         em_ptr->note = _("はひどい痛手をうけた。", " is hit hard.");
788                         em_ptr->dam *= 2;
789                         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_HURT_COLD);
790                 }
791
792                 break;
793         }
794         case GF_HYPODYNAMIA:
795         {
796                 if (em_ptr->seen) em_ptr->obvious = TRUE;
797                 if (!monster_living(em_ptr->m_ptr->r_idx))
798                 {
799                         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
800                         {
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);
804                         }
805                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
806                         em_ptr->obvious = FALSE;
807                         em_ptr->dam = 0;
808                 }
809                 else
810                         em_ptr->do_time = (em_ptr->dam + 7) / 8;
811
812                 break;
813         }
814         case GF_DEATH_RAY:
815         {
816                 if (em_ptr->seen) em_ptr->obvious = TRUE;
817                 if (!monster_living(em_ptr->m_ptr->r_idx))
818                 {
819                         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
820                         {
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);
824                         }
825                         em_ptr->note = _("には完全な耐性がある!", " is immune.");
826                         em_ptr->obvious = FALSE;
827                         em_ptr->dam = 0;
828                 }
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))
833                 {
834                         em_ptr->note = _("には耐性がある!", " resists!");
835                         em_ptr->obvious = FALSE;
836                         em_ptr->dam = 0;
837                 }
838
839                 break;
840         }
841         case GF_OLD_POLY:
842         {
843                 if (em_ptr->seen) em_ptr->obvious = TRUE;
844                 em_ptr->do_polymorph = TRUE;
845
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))
850                 {
851                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
852                         em_ptr->do_polymorph = FALSE;
853                         em_ptr->obvious = FALSE;
854                 }
855
856                 em_ptr->dam = 0;
857                 break;
858         }
859         case GF_OLD_CLONE:
860         {
861                 if (em_ptr->seen) em_ptr->obvious = TRUE;
862
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)))
864                 {
865                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
866                 }
867                 else
868                 {
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))
871                         {
872                                 em_ptr->note = _("が分裂した!", " spawns!");
873                         }
874                 }
875
876                 em_ptr->dam = 0;
877                 break;
878         }
879         case GF_STAR_HEAL:
880         {
881                 if (em_ptr->seen) em_ptr->obvious = TRUE;
882
883                 (void)set_monster_csleep(caster_ptr, em_ptr->g_ptr->m_idx, 0);
884
885                 if (em_ptr->m_ptr->maxhp < em_ptr->m_ptr->max_maxhp)
886                 {
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;
889                 }
890
891                 if (!em_ptr->dam)
892                 {
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);
895                         break;
896                 }
897         }
898         /* Fall through */
899         case GF_OLD_HEAL:
900         {
901                 if (em_ptr->seen) em_ptr->obvious = TRUE;
902
903                 /* Wake up */
904                 (void)set_monster_csleep(caster_ptr, em_ptr->g_ptr->m_idx, 0);
905                 if (MON_STUNNED(em_ptr->m_ptr))
906                 {
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);
909                 }
910                 if (MON_CONFUSED(em_ptr->m_ptr))
911                 {
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);
914                 }
915                 if (MON_MONFEAR(em_ptr->m_ptr))
916                 {
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);
919                 }
920
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;
923
924                 if (!em_ptr->who)
925                 {
926                         chg_virtue(caster_ptr, V_VITALITY, 1);
927
928                         if (em_ptr->r_ptr->flags1 & RF1_UNIQUE)
929                                 chg_virtue(caster_ptr, V_INDIVIDUALISM, 1);
930
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))
934                         {
935                                 if (em_ptr->r_ptr->flags3 & RF3_GOOD)
936                                         chg_virtue(caster_ptr, V_COMPASSION, 2);
937                                 else
938                                         chg_virtue(caster_ptr, V_COMPASSION, 1);
939                         }
940
941                         if (em_ptr->r_ptr->flags3 & RF3_ANIMAL)
942                                 chg_virtue(caster_ptr, V_NATURE, 1);
943                 }
944
945                 if (em_ptr->m_ptr->r_idx == MON_LEPER)
946                 {
947                         em_ptr->heal_leper = TRUE;
948                         if (!em_ptr->who) chg_virtue(caster_ptr, V_COMPASSION, 5);
949                 }
950
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);
953
954                 em_ptr->note = _("は体力を回復したようだ。", " looks healthier.");
955
956                 em_ptr->dam = 0;
957                 break;
958         }
959         case GF_OLD_SPEED:
960         {
961                 if (em_ptr->seen) em_ptr->obvious = TRUE;
962
963                 if (set_monster_fast(caster_ptr, em_ptr->g_ptr->m_idx, MON_FAST(em_ptr->m_ptr) + 100))
964                 {
965                         em_ptr->note = _("の動きが速くなった。", " starts moving faster.");
966                 }
967
968                 if (!em_ptr->who)
969                 {
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);
974                 }
975
976                 em_ptr->dam = 0;
977                 break;
978         }
979         case GF_OLD_SLOW:
980         {
981                 if (em_ptr->seen) em_ptr->obvious = TRUE;
982
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))
986                 {
987                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
988                         em_ptr->obvious = FALSE;
989                 }
990                 else
991                 {
992                         if (set_monster_slow(caster_ptr, em_ptr->g_ptr->m_idx, MON_SLOW(em_ptr->m_ptr) + 50))
993                         {
994                                 em_ptr->note = _("の動きが遅くなった。", " starts moving slower.");
995                         }
996                 }
997
998                 em_ptr->dam = 0;
999                 break;
1000         }
1001         case GF_OLD_SLEEP:
1002         {
1003                 if (em_ptr->seen) em_ptr->obvious = TRUE;
1004
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))
1008                 {
1009                         if (em_ptr->r_ptr->flags3 & RF3_NO_SLEEP)
1010                         {
1011                                 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_SLEEP);
1012                         }
1013
1014                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
1015                         em_ptr->obvious = FALSE;
1016                 }
1017                 else
1018                 {
1019                         em_ptr->note = _("は眠り込んでしまった!", " falls asleep!");
1020                         em_ptr->do_sleep = 500;
1021                 }
1022
1023                 em_ptr->dam = 0;
1024                 break;
1025         }
1026         case GF_STASIS_EVIL:
1027         {
1028                 if (em_ptr->seen) em_ptr->obvious = TRUE;
1029
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))
1033                 {
1034                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
1035                         em_ptr->obvious = FALSE;
1036                 }
1037                 else
1038                 {
1039                         em_ptr->note = _("は動けなくなった!", " is suspended!");
1040                         em_ptr->do_sleep = 500;
1041                 }
1042
1043                 em_ptr->dam = 0;
1044                 break;
1045         }
1046         case GF_STASIS:
1047         {
1048                 if (em_ptr->seen) em_ptr->obvious = TRUE;
1049
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))
1052                 {
1053                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
1054                         em_ptr->obvious = FALSE;
1055                 }
1056                 else
1057                 {
1058                         em_ptr->note = _("は動けなくなった!", " is suspended!");
1059                         em_ptr->do_sleep = 500;
1060                 }
1061
1062                 em_ptr->dam = 0;
1063                 break;
1064         }
1065         case GF_CHARM:
1066         {
1067                 int vir = virtue_number(caster_ptr, V_HARMONY);
1068                 if (vir)
1069                 {
1070                         em_ptr->dam += caster_ptr->virtues[vir - 1] / 10;
1071                 }
1072
1073                 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
1074                 if (vir)
1075                 {
1076                         em_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
1077                 }
1078
1079                 if (em_ptr->seen) em_ptr->obvious = TRUE;
1080
1081                 if (common_saving_throw_charm(caster_ptr, em_ptr->dam, em_ptr->m_ptr))
1082                 {
1083                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
1084                         em_ptr->obvious = FALSE;
1085
1086                         if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1087                 }
1088                 else if (caster_ptr->cursed & TRC_AGGRAVATE)
1089                 {
1090                         em_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
1091                         if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1092                 }
1093                 else
1094                 {
1095                         em_ptr->note = _("は突然友好的になったようだ!", " suddenly seems friendly!");
1096                         set_pet(caster_ptr, em_ptr->m_ptr);
1097
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);
1101                 }
1102
1103                 em_ptr->dam = 0;
1104                 break;
1105         }
1106         case GF_CONTROL_UNDEAD:
1107         {
1108                 if (em_ptr->seen) em_ptr->obvious = TRUE;
1109
1110                 int vir = virtue_number(caster_ptr, V_UNLIFE);
1111                 if (vir)
1112                 {
1113                         em_ptr->dam += caster_ptr->virtues[vir - 1] / 10;
1114                 }
1115
1116                 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
1117                 if (vir)
1118                 {
1119                         em_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
1120                 }
1121
1122                 if (common_saving_throw_control(caster_ptr, em_ptr->dam, em_ptr->m_ptr) ||
1123                         !(em_ptr->r_ptr->flags3 & RF3_UNDEAD))
1124                 {
1125                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
1126                         em_ptr->obvious = FALSE;
1127                         if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1128                 }
1129                 else if (caster_ptr->cursed & TRC_AGGRAVATE)
1130                 {
1131                         em_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
1132                         if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1133                 }
1134                 else
1135                 {
1136                         em_ptr->note = _("は既にあなたの奴隷だ!", " is in your thrall!");
1137                         set_pet(caster_ptr, em_ptr->m_ptr);
1138                 }
1139
1140                 em_ptr->dam = 0;
1141                 break;
1142         }
1143         case GF_CONTROL_DEMON:
1144         {
1145                 int vir;
1146                 if (em_ptr->seen) em_ptr->obvious = TRUE;
1147
1148                 vir = virtue_number(caster_ptr, V_UNLIFE);
1149                 if (vir)
1150                 {
1151                         em_ptr->dam += caster_ptr->virtues[vir - 1] / 10;
1152                 }
1153
1154                 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
1155                 if (vir)
1156                 {
1157                         em_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
1158                 }
1159
1160                 if (common_saving_throw_control(caster_ptr, em_ptr->dam, em_ptr->m_ptr) ||
1161                         !(em_ptr->r_ptr->flags3 & RF3_DEMON))
1162                 {
1163                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
1164                         em_ptr->obvious = FALSE;
1165                         if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1166                 }
1167                 else if (caster_ptr->cursed & TRC_AGGRAVATE)
1168                 {
1169                         em_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
1170                         if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1171                 }
1172                 else
1173                 {
1174                         em_ptr->note = _("は既にあなたの奴隷だ!", " is in your thrall!");
1175                         set_pet(caster_ptr, em_ptr->m_ptr);
1176                 }
1177
1178                 em_ptr->dam = 0;
1179                 break;
1180         }
1181         case GF_CONTROL_ANIMAL:
1182         {
1183                 if (em_ptr->seen) em_ptr->obvious = TRUE;
1184
1185                 int vir = virtue_number(caster_ptr, V_NATURE);
1186                 if (vir)
1187                 {
1188                         em_ptr->dam += caster_ptr->virtues[vir - 1] / 10;
1189                 }
1190
1191                 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
1192                 if (vir)
1193                 {
1194                         em_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
1195                 }
1196
1197                 if (common_saving_throw_control(caster_ptr, em_ptr->dam, em_ptr->m_ptr) ||
1198                         !(em_ptr->r_ptr->flags3 & RF3_ANIMAL))
1199                 {
1200                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
1201                         em_ptr->obvious = FALSE;
1202                         if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1203                 }
1204                 else if (caster_ptr->cursed & TRC_AGGRAVATE)
1205                 {
1206                         em_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
1207                         if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1208                 }
1209                 else
1210                 {
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);
1215                 }
1216
1217                 em_ptr->dam = 0;
1218                 break;
1219         }
1220         case GF_CHARM_LIVING:
1221         {
1222                 int vir = virtue_number(caster_ptr, V_UNLIFE);
1223                 if (em_ptr->seen) em_ptr->obvious = TRUE;
1224
1225                 vir = virtue_number(caster_ptr, V_UNLIFE);
1226                 if (vir)
1227                 {
1228                         em_ptr->dam -= caster_ptr->virtues[vir - 1] / 10;
1229                 }
1230
1231                 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
1232                 if (vir)
1233                 {
1234                         em_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
1235                 }
1236
1237                 msg_format(_("%sを見つめた。", "You stare into %s."), em_ptr->m_name);
1238
1239                 if (common_saving_throw_charm(caster_ptr, em_ptr->dam, em_ptr->m_ptr) ||
1240                         !monster_living(em_ptr->m_ptr->r_idx))
1241                 {
1242                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
1243                         em_ptr->obvious = FALSE;
1244                         if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1245                 }
1246                 else if (caster_ptr->cursed & TRC_AGGRAVATE)
1247                 {
1248                         em_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
1249                         if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1250                 }
1251                 else
1252                 {
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);
1257                 }
1258
1259                 em_ptr->dam = 0;
1260                 break;
1261         }
1262         case GF_OLD_CONF:
1263         {
1264                 if (em_ptr->seen) em_ptr->obvious = TRUE;
1265
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))
1270                 {
1271                         if (em_ptr->r_ptr->flags3 & (RF3_NO_CONF))
1272                         {
1273                                 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
1274                         }
1275
1276                         em_ptr->do_conf = 0;
1277                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
1278                         em_ptr->obvious = FALSE;
1279                 }
1280
1281                 em_ptr->dam = 0;
1282                 break;
1283         }
1284         case GF_STUN:
1285         {
1286                 if (em_ptr->seen) em_ptr->obvious = TRUE;
1287
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))
1291                 {
1292                         em_ptr->do_stun = 0;
1293                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
1294                         em_ptr->obvious = FALSE;
1295                 }
1296
1297                 em_ptr->dam = 0;
1298                 break;
1299         }
1300         case GF_LITE_WEAK:
1301         {
1302                 if (!em_ptr->dam)
1303                 {
1304                         em_ptr->skipped = TRUE;
1305                         break;
1306                 }
1307
1308                 if (em_ptr->r_ptr->flags3 & (RF3_HURT_LITE))
1309                 {
1310                         if (em_ptr->seen) em_ptr->obvious = TRUE;
1311
1312                         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_HURT_LITE);
1313
1314                         em_ptr->note = _("は光に身をすくめた!", " cringes from the light!");
1315                         em_ptr->note_dies = _("は光を受けてしぼんでしまった!", " shrivels away in the light!");
1316                 }
1317                 else
1318                 {
1319                         em_ptr->dam = 0;
1320                 }
1321
1322                 break;
1323         }
1324         case GF_LITE:
1325         {
1326                 if (em_ptr->seen) em_ptr->obvious = TRUE;
1327
1328                 if (em_ptr->r_ptr->flagsr & RFR_RES_LITE)
1329                 {
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);
1333                 }
1334                 else if (em_ptr->r_ptr->flags3 & (RF3_HURT_LITE))
1335                 {
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!");
1339                         em_ptr->dam *= 2;
1340                 }
1341                 break;
1342         }
1343         case GF_DARK:
1344         {
1345                 if (em_ptr->seen) em_ptr->obvious = TRUE;
1346
1347                 if (em_ptr->r_ptr->flagsr & RFR_RES_DARK)
1348                 {
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);
1352                 }
1353
1354                 break;
1355         }
1356         case GF_KILL_WALL:
1357         {
1358                 if (em_ptr->r_ptr->flags3 & (RF3_HURT_ROCK))
1359                 {
1360                         if (em_ptr->seen) em_ptr->obvious = TRUE;
1361
1362                         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_HURT_ROCK);
1363
1364                         em_ptr->note = _("の皮膚がただれた!", " loses some skin!");
1365                         em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1366                 }
1367                 else
1368                 {
1369                         em_ptr->dam = 0;
1370                 }
1371
1372                 break;
1373         }
1374         case GF_AWAY_UNDEAD:
1375         {
1376                 if (em_ptr->r_ptr->flags3 & (RF3_UNDEAD))
1377                 {
1378                         bool resists_tele = FALSE;
1379
1380                         if (em_ptr->r_ptr->flagsr & RFR_RES_TELE)
1381                         {
1382                                 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flagsr & RFR_RES_ALL))
1383                                 {
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;
1387                                 }
1388                                 else if (em_ptr->r_ptr->level > randint1(100))
1389                                 {
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;
1393                                 }
1394                         }
1395
1396                         if (!resists_tele)
1397                         {
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;
1401                         }
1402                 }
1403                 else
1404                 {
1405                         em_ptr->skipped = TRUE;
1406                 }
1407
1408                 em_ptr->dam = 0;
1409                 break;
1410         }
1411         case GF_AWAY_EVIL:
1412         {
1413                 if (em_ptr->r_ptr->flags3 & (RF3_EVIL))
1414                 {
1415                         bool resists_tele = FALSE;
1416
1417                         if (em_ptr->r_ptr->flagsr & RFR_RES_TELE)
1418                         {
1419                                 if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flagsr & RFR_RES_ALL))
1420                                 {
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;
1424                                 }
1425                                 else if (em_ptr->r_ptr->level > randint1(100))
1426                                 {
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;
1430                                 }
1431                         }
1432
1433                         if (!resists_tele)
1434                         {
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;
1438                         }
1439                 }
1440                 else
1441                 {
1442                         em_ptr->skipped = TRUE;
1443                 }
1444
1445                 em_ptr->dam = 0;
1446                 break;
1447         }
1448         case GF_AWAY_ALL:
1449         {
1450                 bool resists_tele = FALSE;
1451                 if (em_ptr->r_ptr->flagsr & RFR_RES_TELE)
1452                 {
1453                         if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flagsr & RFR_RES_ALL))
1454                         {
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;
1458                         }
1459                         else if (em_ptr->r_ptr->level > randint1(100))
1460                         {
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;
1464                         }
1465                 }
1466
1467                 if (!resists_tele)
1468                 {
1469                         if (em_ptr->seen) em_ptr->obvious = TRUE;
1470
1471                         em_ptr->do_dist = em_ptr->dam;
1472                 }
1473
1474                 em_ptr->dam = 0;
1475                 break;
1476         }
1477         case GF_TURN_UNDEAD:
1478         {
1479                 if (em_ptr->r_ptr->flags3 & (RF3_UNDEAD))
1480                 {
1481                         if (em_ptr->seen) em_ptr->obvious = TRUE;
1482
1483                         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
1484
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)
1487                         {
1488                                 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1489                                 em_ptr->obvious = FALSE;
1490                                 em_ptr->do_fear = 0;
1491                         }
1492                 }
1493                 else
1494                 {
1495                         em_ptr->skipped = TRUE;
1496                 }
1497
1498                 em_ptr->dam = 0;
1499                 break;
1500         }
1501         case GF_TURN_EVIL:
1502         {
1503                 if (em_ptr->r_ptr->flags3 & (RF3_EVIL))
1504                 {
1505                         if (em_ptr->seen) em_ptr->obvious = TRUE;
1506
1507                         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_EVIL);
1508
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)
1511                         {
1512                                 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1513                                 em_ptr->obvious = FALSE;
1514                                 em_ptr->do_fear = 0;
1515                         }
1516                 }
1517                 else
1518                 {
1519                         em_ptr->skipped = TRUE;
1520                 }
1521
1522                 em_ptr->dam = 0;
1523                 break;
1524         }
1525         case GF_TURN_ALL:
1526         {
1527                 if (em_ptr->seen) em_ptr->obvious = TRUE;
1528
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))
1533                 {
1534                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
1535                         em_ptr->obvious = FALSE;
1536                         em_ptr->do_fear = 0;
1537                 }
1538
1539                 em_ptr->dam = 0;
1540                 break;
1541         }
1542         case GF_DISP_UNDEAD:
1543         {
1544                 if (em_ptr->r_ptr->flags3 & (RF3_UNDEAD))
1545                 {
1546                         if (em_ptr->seen) em_ptr->obvious = TRUE;
1547
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);
1550
1551                         em_ptr->note = _("は身震いした。", " shudders.");
1552                         em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1553                 }
1554                 else
1555                 {
1556                         em_ptr->skipped = TRUE;
1557                         em_ptr->dam = 0;
1558                 }
1559
1560                 break;
1561         }
1562         case GF_DISP_EVIL:
1563         {
1564                 if (em_ptr->r_ptr->flags3 & (RF3_EVIL))
1565                 {
1566                         if (em_ptr->seen) em_ptr->obvious = TRUE;
1567
1568                         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_EVIL);
1569
1570                         em_ptr->note = _("は身震いした。", " shudders.");
1571                         em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1572                 }
1573                 else
1574                 {
1575                         em_ptr->skipped = TRUE;
1576                         em_ptr->dam = 0;
1577                 }
1578
1579                 break;
1580         }
1581         case GF_DISP_GOOD:
1582         {
1583                 if (em_ptr->r_ptr->flags3 & (RF3_GOOD))
1584                 {
1585                         if (em_ptr->seen) em_ptr->obvious = TRUE;
1586
1587                         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_GOOD);
1588
1589                         em_ptr->note = _("は身震いした。", " shudders.");
1590                         em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1591                 }
1592                 else
1593                 {
1594                         em_ptr->skipped = TRUE;
1595                         em_ptr->dam = 0;
1596                 }
1597
1598                 break;
1599         }
1600         case GF_DISP_LIVING:
1601         {
1602                 if (monster_living(em_ptr->m_ptr->r_idx))
1603                 {
1604                         if (em_ptr->seen) em_ptr->obvious = TRUE;
1605
1606                         em_ptr->note = _("は身震いした。", " shudders.");
1607                         em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1608                 }
1609                 else
1610                 {
1611                         em_ptr->skipped = TRUE;
1612                         em_ptr->dam = 0;
1613                 }
1614
1615                 break;
1616         }
1617         case GF_DISP_DEMON:
1618         {
1619                 if (em_ptr->r_ptr->flags3 & (RF3_DEMON))
1620                 {
1621                         if (em_ptr->seen) em_ptr->obvious = TRUE;
1622
1623                         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_DEMON);
1624
1625                         em_ptr->note = _("は身震いした。", " shudders.");
1626                         em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1627                 }
1628                 else
1629                 {
1630                         em_ptr->skipped = TRUE;
1631                         em_ptr->dam = 0;
1632                 }
1633
1634                 break;
1635         }
1636         case GF_DISP_ALL:
1637         {
1638                 if (em_ptr->seen) em_ptr->obvious = TRUE;
1639                 em_ptr->note = _("は身震いした。", " shudders.");
1640                 em_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1641                 break;
1642         }
1643         case GF_DRAIN_MANA:
1644         {
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)))
1647                 {
1648                         if (em_ptr->who > 0)
1649                         {
1650                                 if (em_ptr->m_caster_ptr->hp < em_ptr->m_caster_ptr->maxhp)
1651                                 {
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);
1656
1657                                         if (em_ptr->see_s_msg)
1658                                         {
1659                                                 monster_desc(caster_ptr, em_ptr->killer, em_ptr->m_caster_ptr, 0);
1660                                                 msg_format(_("%^sは気分が良さそうだ。", "%^s appears healthier."), em_ptr->killer);
1661                                         }
1662                                 }
1663                         }
1664                         else
1665                         {
1666                                 msg_format(_("%sから精神エネルギーを吸いとった。", "You draw psychic energy from %s."), em_ptr->m_name);
1667                                 (void)hp_player(caster_ptr, em_ptr->dam);
1668                         }
1669                 }
1670                 else
1671                 {
1672                         if (em_ptr->see_s_msg) msg_format(_("%sには効果がなかった。", "%s is unaffected."), em_ptr->m_name);
1673                 }
1674
1675                 em_ptr->dam = 0;
1676                 break;
1677         }
1678         case GF_MIND_BLAST:
1679         {
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);
1682
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))
1686                 {
1687                         if (em_ptr->r_ptr->flags3 & (RF3_NO_CONF))
1688                         {
1689                                 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
1690                         }
1691
1692                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
1693                         em_ptr->dam = 0;
1694                 }
1695                 else if (em_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
1696                 {
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.");
1699                         em_ptr->dam = 0;
1700                 }
1701                 else if (em_ptr->r_ptr->flags2 & RF2_WEIRD_MIND)
1702                 {
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.");
1705                         em_ptr->dam /= 3;
1706                 }
1707                 else
1708                 {
1709                         em_ptr->note = _("は精神攻撃を食らった。", " is blasted by psionic energy.");
1710                         em_ptr->note_dies = _("の精神は崩壊し、肉体は抜け殻となった。", " collapses, a mindless husk.");
1711
1712                         if (em_ptr->who > 0) em_ptr->do_conf = randint0(4) + 4;
1713                         else em_ptr->do_conf = randint0(8) + 8;
1714                 }
1715
1716                 break;
1717         }
1718         case GF_BRAIN_SMASH:
1719         {
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);
1722
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))
1726                 {
1727                         if (em_ptr->r_ptr->flags3 & (RF3_NO_CONF))
1728                         {
1729                                 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
1730                         }
1731
1732                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
1733                         em_ptr->dam = 0;
1734                 }
1735                 else if (em_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
1736                 {
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.");
1739                         em_ptr->dam = 0;
1740                 }
1741                 else if (em_ptr->r_ptr->flags2 & RF2_WEIRD_MIND)
1742                 {
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!");
1745                         em_ptr->dam /= 3;
1746                 }
1747                 else
1748                 {
1749                         em_ptr->note = _("は精神攻撃を食らった。", " is blasted by psionic energy.");
1750                         em_ptr->note_dies = _("の精神は崩壊し、肉体は抜け殻となった。", " collapses, a mindless husk.");
1751                         if (em_ptr->who > 0)
1752                         {
1753                                 em_ptr->do_conf = randint0(4) + 4;
1754                                 em_ptr->do_stun = randint0(4) + 4;
1755                         }
1756                         else
1757                         {
1758                                 em_ptr->do_conf = randint0(8) + 8;
1759                                 em_ptr->do_stun = randint0(8) + 8;
1760                         }
1761                         (void)set_monster_slow(caster_ptr, em_ptr->g_ptr->m_idx, MON_SLOW(em_ptr->m_ptr) + 10);
1762                 }
1763
1764                 break;
1765         }
1766         case GF_CAUSE_1:
1767         {
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))
1771                 {
1772                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
1773                         em_ptr->dam = 0;
1774                 }
1775
1776                 break;
1777         }
1778         case GF_CAUSE_2:
1779         {
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);
1782
1783                 if (randint0(100 + (em_ptr->caster_lev / 2)) < (em_ptr->r_ptr->level + 35))
1784                 {
1785                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
1786                         em_ptr->dam = 0;
1787                 }
1788
1789                 break;
1790         }
1791         case GF_CAUSE_3:
1792         {
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);
1795
1796                 if (randint0(100 + (em_ptr->caster_lev / 2)) < (em_ptr->r_ptr->level + 35))
1797                 {
1798                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
1799                         em_ptr->dam = 0;
1800                 }
1801
1802                 break;
1803         }
1804         case GF_CAUSE_4:
1805         {
1806                 if (em_ptr->seen) em_ptr->obvious = TRUE;
1807                 if (!em_ptr->who)
1808                         msg_format(_("%sの秘孔を突いて、「お前は既に死んでいる」と叫んだ。",
1809                                 "You point at %s, screaming the word, 'DIE!'."), em_ptr->m_name);
1810
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)))
1812                 {
1813                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
1814                         em_ptr->dam = 0;
1815                 }
1816                 break;
1817         }
1818         case GF_HAND_DOOM:
1819         {
1820                 if (em_ptr->seen) em_ptr->obvious = TRUE;
1821                 if (em_ptr->r_ptr->flags1 & RF1_UNIQUE)
1822                 {
1823                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
1824                         em_ptr->dam = 0;
1825                 }
1826                 else
1827                 {
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))))
1830                         {
1831                                 em_ptr->dam = ((40 + randint1(20)) * em_ptr->m_ptr->hp) / 100;
1832
1833                                 if (em_ptr->m_ptr->hp < em_ptr->dam) em_ptr->dam = em_ptr->m_ptr->hp - 1;
1834                         }
1835                         else
1836                         {
1837                                 /* todo 乱数で破滅のを弾いた結果が「耐性を持っている」ことになるのはおかしい */
1838                                 em_ptr->note = _("は耐性を持っている!", "resists!");
1839                                 em_ptr->dam = 0;
1840                         }
1841                 }
1842
1843                 break;
1844         }
1845         case GF_CAPTURE:
1846         {
1847                 int nokori_hp;
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)
1850                 {
1851                         msg_format(_("%sには効果がなかった。", "%s is unaffected."), em_ptr->m_name);
1852                         em_ptr->skipped = TRUE;
1853                         break;
1854                 }
1855
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;
1859                 else
1860                         nokori_hp = em_ptr->m_ptr->maxhp * 3 / 20;
1861
1862                 if (em_ptr->m_ptr->hp >= nokori_hp)
1863                 {
1864                         msg_format(_("もっと弱らせないと。", "You need to weaken %s more."), em_ptr->m_name);
1865                         em_ptr->skipped = TRUE;
1866                 }
1867                 else if (em_ptr->m_ptr->hp < randint0(nokori_hp))
1868                 {
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)
1877                         {
1878                                 if (rakuba(caster_ptr, -1, FALSE))
1879                                 {
1880                                         msg_format(_("地面に落とされた。", "You have fallen from %s."), em_ptr->m_name);
1881                                 }
1882                         }
1883
1884                         delete_monster_idx(caster_ptr, em_ptr->g_ptr->m_idx);
1885
1886                         return GF_SWITCH_TRUE;
1887                 }
1888                 else
1889                 {
1890                         msg_format(_("うまく捕まえられなかった。", "You failed to capture %s."), em_ptr->m_name);
1891                         em_ptr->skipped = TRUE;
1892                 }
1893
1894                 break;
1895         }
1896         case GF_ATTACK:
1897         {
1898                 return (gf_switch_result)py_attack(caster_ptr, em_ptr->y, em_ptr->x, em_ptr->dam);
1899         }
1900         case GF_ENGETSU:
1901         {
1902                 int effect = 0;
1903                 bool done = TRUE;
1904
1905                 if (em_ptr->seen) em_ptr->obvious = TRUE;
1906                 if (em_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
1907                 {
1908                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
1909                         em_ptr->dam = 0;
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);
1912                         break;
1913                 }
1914                 if (MON_CSLEEP(em_ptr->m_ptr))
1915                 {
1916                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
1917                         em_ptr->dam = 0;
1918                         em_ptr->skipped = TRUE;
1919                         break;
1920                 }
1921
1922                 if (one_in_(5)) effect = 1;
1923                 else if (one_in_(4)) effect = 2;
1924                 else if (one_in_(3)) effect = 3;
1925                 else done = FALSE;
1926
1927                 if (effect == 1)
1928                 {
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))
1931                         {
1932                                 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1933                                 em_ptr->obvious = FALSE;
1934                         }
1935                         else
1936                         {
1937                                 if (set_monster_slow(caster_ptr, em_ptr->g_ptr->m_idx, MON_SLOW(em_ptr->m_ptr) + 50))
1938                                 {
1939                                         em_ptr->note = _("の動きが遅くなった。", " starts moving slower.");
1940                                 }
1941                         }
1942                 }
1943                 else if (effect == 2)
1944                 {
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))
1948                         {
1949                                 em_ptr->do_stun = 0;
1950                                 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1951                                 em_ptr->obvious = FALSE;
1952                         }
1953                 }
1954                 else if (effect == 3)
1955                 {
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))
1959                         {
1960                                 if (em_ptr->r_ptr->flags3 & RF3_NO_SLEEP)
1961                                 {
1962                                         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_NO_SLEEP);
1963                                 }
1964
1965                                 em_ptr->note = _("には効果がなかった。", " is unaffected.");
1966                                 em_ptr->obvious = FALSE;
1967                         }
1968                         else
1969                         {
1970                                 /* Go to sleep (much) later */
1971                                 em_ptr->note = _("は眠り込んでしまった!", " falls asleep!");
1972                                 em_ptr->do_sleep = 500;
1973                         }
1974                 }
1975
1976                 if (!done)
1977                 {
1978                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
1979                 }
1980
1981                 em_ptr->dam = 0;
1982                 break;
1983         }
1984         case GF_GENOCIDE:
1985         {
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")))
1988                 {
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;
1992                 }
1993
1994                 em_ptr->skipped = TRUE;
1995                 break;
1996         }
1997         case GF_PHOTO:
1998         {
1999                 if (!em_ptr->who)
2000                         msg_format(_("%sを写真に撮った。", "You take a photograph of %s."), em_ptr->m_name);
2001
2002                 if (em_ptr->r_ptr->flags3 & (RF3_HURT_LITE))
2003                 {
2004                         if (em_ptr->seen) em_ptr->obvious = TRUE;
2005
2006                         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_HURT_LITE);
2007
2008                         em_ptr->note = _("は光に身をすくめた!", " cringes from the light!");
2009                         em_ptr->note_dies = _("は光を受けてしぼんでしまった!", " shrivels away in the light!");
2010                 }
2011                 else
2012                 {
2013                         em_ptr->dam = 0;
2014                 }
2015
2016                 em_ptr->photo = em_ptr->m_ptr->r_idx;
2017                 break;
2018         }
2019         case GF_CRUSADE:
2020         {
2021                 bool success = FALSE;
2022                 if (em_ptr->seen) em_ptr->obvious = TRUE;
2023
2024                 if ((em_ptr->r_ptr->flags3 & (RF3_GOOD)) && !floor_ptr->inside_arena)
2025                 {
2026                         if (em_ptr->r_ptr->flags3 & (RF3_NO_CONF)) em_ptr->dam -= 50;
2027                         if (em_ptr->dam < 1) em_ptr->dam = 1;
2028
2029                         if (is_pet(em_ptr->m_ptr))
2030                         {
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);
2033                                 success = TRUE;
2034                         }
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)))
2040                         {
2041                                 if (one_in_(4)) em_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
2042                         }
2043                         else
2044                         {
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);
2048
2049                                 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_GOOD);
2050                                 success = TRUE;
2051                         }
2052                 }
2053
2054                 if (!success)
2055                 {
2056                         if (!(em_ptr->r_ptr->flags3 & RF3_NO_FEAR))
2057                         {
2058                                 em_ptr->do_fear = randint1(90) + 10;
2059                         }
2060                         else if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
2061                                 em_ptr->r_ptr->r_flags3 |= (RF3_NO_FEAR);
2062                 }
2063
2064                 em_ptr->dam = 0;
2065                 break;
2066         }
2067         case GF_WOUNDS:
2068         {
2069                 if (em_ptr->seen) em_ptr->obvious = TRUE;
2070
2071                 if (randint0(100 + em_ptr->dam) < (em_ptr->r_ptr->level + 50))
2072                 {
2073                         em_ptr->note = _("には効果がなかった。", " is unaffected.");
2074                         em_ptr->dam = 0;
2075                 }
2076                 break;
2077         }
2078         default:
2079         {
2080                 em_ptr->skipped = TRUE;
2081                 em_ptr->dam = 0;
2082                 break;
2083         }
2084         }
2085
2086         return GF_SWITCH_CONTINUE;
2087 }