OSDN Git Service

[Refactor] #39077 Moved gf_switch_result from effect-monster-util.h to h-type.h and...
[hengband/hengband.git] / src / effect / effect-monster-resist-hurt.c
1 #include "effect/effect-monster-resist-hurt.h"
2 #include "monster-race/monster-race.h"
3 #include "monster-race/race-flags-resistance.h"
4 #include "monster-race/race-flags1.h"
5 #include "monster-race/race-flags3.h"
6 #include "monster-race/race-indice-types.h"
7 #include "monster/monster-status.h"
8 #include "monster/monster-info.h"
9
10 switch_result effect_monster_void(effect_monster_type *em_ptr)
11 {
12         if (em_ptr->seen) em_ptr->obvious = TRUE;
13
14         return SWITCH_CONTINUE;
15 }
16
17 switch_result effect_monster_acid(player_type *caster_ptr, effect_monster_type *em_ptr)
18 {
19         if (em_ptr->seen) em_ptr->obvious = TRUE;
20         if ((em_ptr->r_ptr->flagsr & RFR_IM_ACID) == 0) return SWITCH_CONTINUE;
21
22         em_ptr->note = _("にはかなり耐性がある!", " resists a lot.");
23         em_ptr->dam /= 9;
24         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
25                 em_ptr->r_ptr->r_flagsr |= (RFR_IM_ACID);
26
27         return SWITCH_CONTINUE;
28 }
29
30
31 switch_result effect_monster_elec(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_ELEC) == 0) return SWITCH_CONTINUE;
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_ELEC);
40
41         return SWITCH_CONTINUE;
42 }
43
44
45 switch_result effect_monster_fire(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_FIRE)
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_FIRE);
54
55                 return SWITCH_CONTINUE;
56         }
57
58         if ((em_ptr->r_ptr->flags3 & (RF3_HURT_FIRE)) == 0) return SWITCH_CONTINUE;
59
60         em_ptr->note = _("はひどい痛手をうけた。", " is hit hard.");
61         em_ptr->dam *= 2;
62         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
63                 em_ptr->r_ptr->r_flags3 |= (RF3_HURT_FIRE);
64
65         return SWITCH_CONTINUE;
66 }
67
68
69 switch_result effect_monster_cold(player_type *caster_ptr, effect_monster_type *em_ptr)
70 {
71         if (em_ptr->seen) em_ptr->obvious = TRUE;
72         if (em_ptr->r_ptr->flagsr & RFR_IM_COLD)
73         {
74                 em_ptr->note = _("にはかなり耐性がある!", " resists a lot.");
75                 em_ptr->dam /= 9;
76                 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
77                         em_ptr->r_ptr->r_flagsr |= (RFR_IM_COLD);
78
79                 return SWITCH_CONTINUE;
80         }
81
82         if ((em_ptr->r_ptr->flags3 & (RF3_HURT_COLD)) == 0) return SWITCH_CONTINUE;
83
84         em_ptr->note = _("はひどい痛手をうけた。", " is hit hard.");
85         em_ptr->dam *= 2;
86         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
87                 em_ptr->r_ptr->r_flags3 |= (RF3_HURT_COLD);
88
89         return SWITCH_CONTINUE;
90 }
91
92
93 switch_result effect_monster_pois(player_type *caster_ptr, effect_monster_type *em_ptr)
94 {
95         if (em_ptr->seen) em_ptr->obvious = TRUE;
96         if ((em_ptr->r_ptr->flagsr & RFR_IM_POIS) == 0) return SWITCH_CONTINUE;
97
98         em_ptr->note = _("にはかなり耐性がある!", " resists a lot.");
99         em_ptr->dam /= 9;
100         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
101                 em_ptr->r_ptr->r_flagsr |= (RFR_IM_POIS);
102
103         return SWITCH_CONTINUE;
104 }
105
106
107 switch_result effect_monster_nuke(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)
111         {
112                 em_ptr->note = _("には耐性がある。", " resists.");
113                 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
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 SWITCH_CONTINUE;
118         }
119
120         if (one_in_(3)) em_ptr->do_polymorph = TRUE;
121
122         return SWITCH_CONTINUE;
123 }
124
125
126 switch_result effect_monster_hell_fire(player_type *caster_ptr, effect_monster_type *em_ptr)
127 {
128         if (em_ptr->seen) em_ptr->obvious = TRUE;
129         if ((em_ptr->r_ptr->flags3 & RF3_GOOD) == 0) return SWITCH_CONTINUE;
130
131         em_ptr->note = _("はひどい痛手をうけた。", " is hit hard.");
132         em_ptr->dam *= 2;
133         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
134                 em_ptr->r_ptr->r_flags3 |= RF3_GOOD;
135
136         return SWITCH_CONTINUE;
137 }
138
139
140 switch_result effect_monster_holy_fire(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_EVIL) == 0)
144         {
145                 em_ptr->note = _("には耐性がある。", " resists.");
146                 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
147                 return SWITCH_CONTINUE;
148         }
149
150         em_ptr->dam *= 2;
151         em_ptr->note = _("はひどい痛手をうけた。", " is hit hard.");
152         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
153                 em_ptr->r_ptr->r_flags3 |= RF3_EVIL;
154
155         return SWITCH_CONTINUE;
156 }
157
158
159 switch_result effect_monster_plasma(player_type *caster_ptr, effect_monster_type *em_ptr)
160 {
161         if (em_ptr->seen) em_ptr->obvious = TRUE;
162         if ((em_ptr->r_ptr->flagsr & RFR_RES_PLAS) == 0) return SWITCH_CONTINUE;
163
164         em_ptr->note = _("には耐性がある。", " resists.");
165         em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
166         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
167                 em_ptr->r_ptr->r_flagsr |= (RFR_RES_PLAS);
168
169         return SWITCH_CONTINUE;
170 }
171
172
173 static bool effect_monster_nether_resist(player_type *caster_ptr, effect_monster_type *em_ptr)
174 {
175         if ((em_ptr->r_ptr->flagsr & RFR_RES_NETH) == 0) return FALSE;
176
177         if (em_ptr->r_ptr->flags3 & RF3_UNDEAD)
178         {
179                 em_ptr->note = _("には完全な耐性がある!", " is immune.");
180                 em_ptr->dam = 0;
181                 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
182                         em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
183         }
184         else
185         {
186                 em_ptr->note = _("には耐性がある。", " resists.");
187                 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
188         }
189
190         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
191                 em_ptr->r_ptr->r_flagsr |= (RFR_RES_NETH);
192
193         return TRUE;
194 }
195
196
197 switch_result effect_monster_nether(player_type *caster_ptr, effect_monster_type *em_ptr)
198 {
199         if (em_ptr->seen) em_ptr->obvious = TRUE;
200
201         if (effect_monster_nether_resist(caster_ptr, em_ptr)) return SWITCH_CONTINUE;
202         if ((em_ptr->r_ptr->flags3 & RF3_EVIL) == 0) return SWITCH_CONTINUE;
203
204         em_ptr->note = _("はいくらか耐性を示した。", " resists somewhat.");
205         em_ptr->dam /= 2;
206         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
207                 em_ptr->r_ptr->r_flags3 |= (RF3_EVIL);
208
209         return SWITCH_CONTINUE;
210 }
211
212
213 switch_result effect_monster_water(player_type *caster_ptr, effect_monster_type *em_ptr)
214 {
215         if (em_ptr->seen) em_ptr->obvious = TRUE;
216         if ((em_ptr->r_ptr->flagsr & RFR_RES_WATE) == 0) return SWITCH_CONTINUE;
217
218         if ((em_ptr->m_ptr->r_idx == MON_WATER_ELEM) || (em_ptr->m_ptr->r_idx == MON_UNMAKER))
219         {
220                 em_ptr->note = _("には完全な耐性がある!", " is immune.");
221                 em_ptr->dam = 0;
222         }
223         else
224         {
225                 em_ptr->note = _("には耐性がある。", " resists.");
226                 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
227         }
228
229         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
230                 em_ptr->r_ptr->r_flagsr |= (RFR_RES_WATE);
231
232         return SWITCH_CONTINUE;
233 }
234
235
236 switch_result effect_monster_chaos(player_type *caster_ptr, effect_monster_type *em_ptr)
237 {
238         if (em_ptr->seen) em_ptr->obvious = TRUE;
239         if (em_ptr->r_ptr->flagsr & RFR_RES_CHAO)
240         {
241                 em_ptr->note = _("には耐性がある。", " resists.");
242                 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
243                 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
244                         em_ptr->r_ptr->r_flagsr |= (RFR_RES_CHAO);
245         }
246         else if ((em_ptr->r_ptr->flags3 & RF3_DEMON) && one_in_(3))
247         {
248                 em_ptr->note = _("はいくらか耐性を示した。", " resists somewhat.");
249                 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
250                 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
251                         em_ptr->r_ptr->r_flags3 |= (RF3_DEMON);
252         }
253         else
254         {
255                 em_ptr->do_polymorph = TRUE;
256                 em_ptr->do_conf = (5 + randint1(11) + em_ptr->r) / (em_ptr->r + 1);
257         }
258
259         return SWITCH_CONTINUE;
260 }
261
262
263 switch_result effect_monster_shards(player_type *caster_ptr, effect_monster_type *em_ptr)
264 {
265         if (em_ptr->seen) em_ptr->obvious = TRUE;
266         if ((em_ptr->r_ptr->flagsr & RFR_RES_SHAR) == 0) return SWITCH_CONTINUE;
267
268         em_ptr->note = _("には耐性がある。", " resists.");
269         em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
270         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
271                 em_ptr->r_ptr->r_flagsr |= (RFR_RES_SHAR);
272
273         return SWITCH_CONTINUE;
274 }
275
276
277 switch_result effect_monster_rocket(player_type *caster_ptr, effect_monster_type *em_ptr)
278 {
279         if (em_ptr->seen) em_ptr->obvious = TRUE;
280         if ((em_ptr->r_ptr->flagsr & RFR_RES_SHAR) == 0) return SWITCH_CONTINUE;
281
282         em_ptr->note = _("はいくらか耐性を示した。", " resists somewhat.");
283         em_ptr->dam /= 2;
284         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
285                 em_ptr->r_ptr->r_flagsr |= (RFR_RES_SHAR);
286
287         return SWITCH_CONTINUE;
288 }
289
290
291 switch_result effect_monster_sound(player_type *caster_ptr, effect_monster_type *em_ptr)
292 {
293         if (em_ptr->seen) em_ptr->obvious = TRUE;
294         if ((em_ptr->r_ptr->flagsr & RFR_RES_SOUN) == 0)
295         {
296                 em_ptr->do_stun = (10 + randint1(15) + em_ptr->r) / (em_ptr->r + 1);
297                 return SWITCH_CONTINUE;
298         }
299
300         em_ptr->note = _("には耐性がある。", " resists.");
301         em_ptr->dam *= 2; em_ptr->dam /= randint1(6) + 6;
302         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
303                 em_ptr->r_ptr->r_flagsr |= (RFR_RES_SOUN);
304
305         return SWITCH_CONTINUE;
306 }
307
308
309 switch_result effect_monster_confusion(player_type *caster_ptr, effect_monster_type *em_ptr)
310 {
311         if (em_ptr->seen) em_ptr->obvious = TRUE;
312         if ((em_ptr->r_ptr->flags3 & RF3_NO_CONF) == 0)
313         {
314                 em_ptr->do_conf = (10 + randint1(15) + em_ptr->r) / (em_ptr->r + 1);
315                 return SWITCH_CONTINUE;
316         }
317
318         em_ptr->note = _("には耐性がある。", " resists.");
319         em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
320         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
321                 em_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
322
323         return SWITCH_CONTINUE;
324 }
325
326
327 switch_result effect_monster_disenchant(player_type *caster_ptr, effect_monster_type *em_ptr)
328 {
329         if (em_ptr->seen) em_ptr->obvious = TRUE;
330         if ((em_ptr->r_ptr->flagsr & RFR_RES_DISE) == 0) return SWITCH_CONTINUE;
331
332         em_ptr->note = _("には耐性がある。", " resists.");
333         em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
334         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
335                 em_ptr->r_ptr->r_flagsr |= (RFR_RES_DISE);
336
337         return SWITCH_CONTINUE;
338 }
339
340
341 switch_result effect_monster_nexus(player_type *caster_ptr, effect_monster_type *em_ptr)
342 {
343         if (em_ptr->seen) em_ptr->obvious = TRUE;
344         if ((em_ptr->r_ptr->flagsr & RFR_RES_NEXU) == 0) return SWITCH_CONTINUE;
345
346         em_ptr->note = _("には耐性がある。", " resists.");
347         em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
348         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
349                 em_ptr->r_ptr->r_flagsr |= (RFR_RES_NEXU);
350
351         return SWITCH_CONTINUE;
352 }
353
354
355 switch_result effect_monster_force(player_type *caster_ptr, effect_monster_type *em_ptr)
356 {
357         if (em_ptr->seen) em_ptr->obvious = TRUE;
358         if ((em_ptr->r_ptr->flagsr & RFR_RES_WALL) == 0)
359         {
360                 em_ptr->do_stun = (randint1(15) + em_ptr->r) / (em_ptr->r + 1);
361                 return SWITCH_CONTINUE;
362         }
363
364         em_ptr->note = _("には耐性がある。", " resists.");
365         em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
366         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
367                 em_ptr->r_ptr->r_flagsr |= (RFR_RES_WALL);
368
369         return SWITCH_CONTINUE;
370 }
371
372
373 // Powerful monsters can resists and normal monsters slow down.
374 switch_result effect_monster_inertial(player_type *caster_ptr, effect_monster_type *em_ptr)
375 {
376         if (em_ptr->seen) em_ptr->obvious = TRUE;
377         if (em_ptr->r_ptr->flagsr & RFR_RES_INER)
378         {
379                 em_ptr->note = _("には耐性がある。", " resists.");
380                 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
381                 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
382                         em_ptr->r_ptr->r_flagsr |= (RFR_RES_INER);
383
384                 return SWITCH_CONTINUE;
385         }
386
387         if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
388                 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
389         {
390                 em_ptr->obvious = FALSE;
391                 return SWITCH_CONTINUE;
392         }
393
394         if (set_monster_slow(caster_ptr, em_ptr->g_ptr->m_idx, monster_slow_remaining(em_ptr->m_ptr) + 50))
395                 em_ptr->note = _("の動きが遅くなった。", " starts moving slower.");
396
397         return SWITCH_CONTINUE;
398 }
399
400
401 switch_result effect_monster_time(player_type *caster_ptr, effect_monster_type *em_ptr)
402 {
403         if (em_ptr->seen) em_ptr->obvious = TRUE;
404         if ((em_ptr->r_ptr->flagsr & RFR_RES_TIME) == 0)
405         {
406                 em_ptr->do_time = (em_ptr->dam + 1) / 2;
407                 return SWITCH_CONTINUE;
408         }
409
410         em_ptr->note = _("には耐性がある。", " resists.");
411         em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
412         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
413                 em_ptr->r_ptr->r_flagsr |= (RFR_RES_TIME);
414
415         return SWITCH_CONTINUE;
416 }
417
418
419 static bool effect_monster_gravity_resist_teleport(player_type *caster_ptr, effect_monster_type *em_ptr)
420 {
421
422         if (em_ptr->seen) em_ptr->obvious = TRUE;
423         if ((em_ptr->r_ptr->flagsr & RFR_RES_TELE) == 0) return FALSE;
424
425         if (em_ptr->r_ptr->flags1 & (RF1_UNIQUE))
426         {
427                 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
428                         em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
429
430                 em_ptr->note = _("には効果がなかった。", " is unaffected!");
431                 return TRUE;
432         }
433
434         if (em_ptr->r_ptr->level <= randint1(100)) return FALSE;
435
436         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
437                 em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
438
439         em_ptr->note = _("には耐性がある!", " resists!");
440         return TRUE;
441 }
442
443
444 static void effect_monster_gravity_slow(player_type *caster_ptr, effect_monster_type *em_ptr)
445 {
446         if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
447                 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
448                 em_ptr->obvious = FALSE;
449
450         if (set_monster_slow(caster_ptr, em_ptr->g_ptr->m_idx, monster_slow_remaining(em_ptr->m_ptr) + 50))
451                 em_ptr->note = _("の動きが遅くなった。", " starts moving slower.");
452 }
453
454
455 static void effect_monster_gravity_stun(effect_monster_type *em_ptr)
456 {
457         em_ptr->do_stun = damroll((em_ptr->caster_lev / 20) + 3, (em_ptr->dam)) + 1;
458         if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
459                 (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
460         {
461                 em_ptr->do_stun = 0;
462                 em_ptr->note = _("には効果がなかった。", " is unaffected!");
463                 em_ptr->obvious = FALSE;
464         }
465 }
466
467
468 /*
469  * Powerful monsters can resist and normal monsters slow down
470  * Furthermore, this magic can make non-unique monsters slow/stun.
471  */
472 switch_result effect_monster_gravity(player_type *caster_ptr, effect_monster_type *em_ptr)
473 {
474         em_ptr->do_dist = effect_monster_gravity_resist_teleport(caster_ptr, em_ptr) ? 0 : 10;
475         if (caster_ptr->riding && (em_ptr->g_ptr->m_idx == caster_ptr->riding)) em_ptr->do_dist = 0;
476
477         if (em_ptr->r_ptr->flagsr & RFR_RES_GRAV)
478         {
479                 em_ptr->note = _("には耐性がある!", " resists!");
480                 em_ptr->dam *= 3; em_ptr->dam /= randint1(6) + 6;
481                 em_ptr->do_dist = 0;
482                 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
483                         em_ptr->r_ptr->r_flagsr |= (RFR_RES_GRAV);
484
485                 return SWITCH_CONTINUE;
486         }
487
488         effect_monster_gravity_slow(caster_ptr, em_ptr);
489         effect_monster_gravity_stun(em_ptr);
490         return SWITCH_CONTINUE;
491 }
492
493
494 switch_result effect_monster_disintegration(player_type *caster_ptr, effect_monster_type *em_ptr)
495 {
496         if (em_ptr->seen) em_ptr->obvious = TRUE;
497         if ((em_ptr->r_ptr->flags3 & RF3_HURT_ROCK) == 0) return SWITCH_CONTINUE;
498
499         if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
500                 em_ptr->r_ptr->r_flags3 |= (RF3_HURT_ROCK);
501
502         em_ptr->note = _("の皮膚がただれた!", " loses some skin!");
503         em_ptr->note_dies = _("は蒸発した!", " evaporates!");
504         em_ptr->dam *= 2;
505         return SWITCH_CONTINUE;
506 }
507
508 switch_result effect_monster_icee_bolt(player_type *caster_ptr, effect_monster_type *em_ptr)
509 {
510         if (em_ptr->seen) em_ptr->obvious = TRUE;
511
512         em_ptr->do_stun = (randint1(15) + 1) / (em_ptr->r + 1);
513         if (em_ptr->r_ptr->flagsr & RFR_IM_COLD)
514         {
515                 em_ptr->note = _("にはかなり耐性がある!", " resists a lot.");
516                 em_ptr->dam /= 9;
517                 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
518                         em_ptr->r_ptr->r_flagsr |= (RFR_IM_COLD);
519         }
520         else if (em_ptr->r_ptr->flags3 & (RF3_HURT_COLD))
521         {
522                 em_ptr->note = _("はひどい痛手をうけた。", " is hit hard.");
523                 em_ptr->dam *= 2;
524                 if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr))
525                         em_ptr->r_ptr->r_flags3 |= (RF3_HURT_COLD);
526         }
527
528         return SWITCH_CONTINUE;
529 }