OSDN Git Service

branch-mogami-TR をマージ。バージョンを1.3.0に上げた。
[hengband/hengband.git] / src / mspells1.c
1 /* File: mspells1.c */
2
3 /* Purpose: Monster spells (attack player) */
4
5 /*
6  * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke
7  *
8  * This software may be copied and distributed for educational, research, and
9  * not for profit purposes provided that this copyright and statement are
10  * included in all such copies.
11  */
12
13 #include "angband.h"
14
15
16 #ifdef DRS_SMART_OPTIONS
17
18 /*
19  * And now for Intelligent monster attacks (including spells).
20  *
21  * Original idea and code by "DRS" (David Reeves Sward).
22  * Major modifications by "BEN" (Ben Harrison).
23  *
24  * Give monsters more intelligent attack/spell selection based on
25  * observations of previous attacks on the player, and/or by allowing
26  * the monster to "cheat" and know the player status.
27  *
28  * Maintain an idea of the player status, and use that information
29  * to occasionally eliminate "ineffective" spell attacks.  We could
30  * also eliminate ineffective normal attacks, but there is no reason
31  * for the monster to do this, since he gains no benefit.
32  * Note that MINDLESS monsters are not allowed to use this code.
33  * And non-INTELLIGENT monsters only use it partially effectively.
34  *
35  * Actually learn what the player resists, and use that information
36  * to remove attacks or spells before using them.  This will require
37  * much less space, if I am not mistaken.  Thus, each monster gets a
38  * set of 32 bit flags, "smart", build from the various "SM_*" flags.
39  *
40  * This has the added advantage that attacks and spells are related.
41  * The "smart_learn" option means that the monster "learns" the flags
42  * that should be set, and "smart_cheat" means that he "knows" them.
43  * So "smart_cheat" means that the "smart" field is always up to date,
44  * while "smart_learn" means that the "smart" field is slowly learned.
45  * Both of them have the same effect on the "choose spell" routine.
46  */
47
48
49
50 /*
51  * Internal probability routine
52  */
53 static bool int_outof(monster_race *r_ptr, int prob)
54 {
55         /* Non-Smart monsters are half as "smart" */
56         if (!(r_ptr->flags2 & RF2_SMART)) prob = prob / 2;
57
58         /* Roll the dice */
59         return (randint0(100) < prob);
60 }
61
62
63
64 /*
65  * Remove the "bad" spells from a spell list
66  */
67 static void remove_bad_spells(int m_idx, u32b *f4p, u32b *f5p, u32b *f6p)
68 {
69         monster_type *m_ptr = &m_list[m_idx];
70         monster_race *r_ptr = &r_info[m_ptr->r_idx];
71
72         u32b f4 = (*f4p);
73         u32b f5 = (*f5p);
74         u32b f6 = (*f6p);
75
76         u32b smart = 0L;
77
78
79         /* Too stupid to know anything */
80         if (r_ptr->flags2 & RF2_STUPID) return;
81
82
83         /* Must be cheating or learning */
84         if (!smart_cheat && !smart_learn) return;
85
86
87         /* Update acquired knowledge */
88         if (smart_learn)
89         {
90                 /* Hack -- Occasionally forget player status */
91                 if (m_ptr->smart && (randint0(100) < 1)) m_ptr->smart = 0L;
92
93                 /* Use the memorized flags */
94                 smart = m_ptr->smart;
95         }
96
97
98         /* Cheat if requested */
99         if (smart_cheat)
100         {
101                 /* Know basic info */
102                 if (p_ptr->resist_acid) smart |= (SM_RES_ACID);
103                 if (p_ptr->oppose_acid) smart |= (SM_OPP_ACID);
104                 if (p_ptr->immune_acid) smart |= (SM_IMM_ACID);
105                 if (p_ptr->resist_elec) smart |= (SM_RES_ELEC);
106                 if (p_ptr->oppose_elec) smart |= (SM_OPP_ELEC);
107                 if (p_ptr->immune_elec) smart |= (SM_IMM_ELEC);
108                 if (p_ptr->resist_fire) smart |= (SM_RES_FIRE);
109                 if (p_ptr->oppose_fire) smart |= (SM_OPP_FIRE);
110                 if (p_ptr->immune_fire) smart |= (SM_IMM_FIRE);
111                 if (p_ptr->resist_cold) smart |= (SM_RES_COLD);
112                 if (p_ptr->oppose_cold) smart |= (SM_OPP_COLD);
113                 if (p_ptr->immune_cold) smart |= (SM_IMM_COLD);
114
115                 /* Know poison info */
116                 if (p_ptr->resist_pois) smart |= (SM_RES_POIS);
117                 if (p_ptr->oppose_pois) smart |= (SM_OPP_POIS);
118
119                 /* Know special resistances */
120                 if (p_ptr->resist_neth) smart |= (SM_RES_NETH);
121                 if (p_ptr->resist_lite) smart |= (SM_RES_LITE);
122                 if (p_ptr->resist_dark) smart |= (SM_RES_DARK);
123                 if (p_ptr->resist_fear) smart |= (SM_RES_FEAR);
124                 if (p_ptr->resist_conf) smart |= (SM_RES_CONF);
125                 if (p_ptr->resist_chaos) smart |= (SM_RES_CHAOS);
126                 if (p_ptr->resist_disen) smart |= (SM_RES_DISEN);
127                 if (p_ptr->resist_blind) smart |= (SM_RES_BLIND);
128                 if (p_ptr->resist_nexus) smart |= (SM_RES_NEXUS);
129                 if (p_ptr->resist_sound) smart |= (SM_RES_SOUND);
130                 if (p_ptr->resist_shard) smart |= (SM_RES_SHARD);
131                 if (p_ptr->reflect) smart |= (SM_IMM_REFLECT);
132
133                 /* Know bizarre "resistances" */
134                 if (p_ptr->free_act) smart |= (SM_IMM_FREE);
135                 if (!p_ptr->msp) smart |= (SM_IMM_MANA);
136         }
137
138
139         /* Nothing known */
140         if (!smart) return;
141
142
143         if (smart & SM_IMM_ACID)
144         {
145                 f4 &= ~(RF4_BR_ACID);
146                 f5 &= ~(RF5_BA_ACID);
147                 f5 &= ~(RF5_BO_ACID);
148         }
149         else if ((smart & (SM_OPP_ACID)) && (smart & (SM_RES_ACID)))
150         {
151                 if (int_outof(r_ptr, 80)) f4 &= ~(RF4_BR_ACID);
152                 if (int_outof(r_ptr, 80)) f5 &= ~(RF5_BA_ACID);
153                 if (int_outof(r_ptr, 80)) f5 &= ~(RF5_BO_ACID);
154         }
155         else if ((smart & (SM_OPP_ACID)) || (smart & (SM_RES_ACID)))
156         {
157                 if (int_outof(r_ptr, 30)) f4 &= ~(RF4_BR_ACID);
158                 if (int_outof(r_ptr, 30)) f5 &= ~(RF5_BA_ACID);
159                 if (int_outof(r_ptr, 30)) f5 &= ~(RF5_BO_ACID);
160         }
161
162
163         if (smart & (SM_IMM_ELEC))
164         {
165                 f4 &= ~(RF4_BR_ELEC);
166                 f5 &= ~(RF5_BA_ELEC);
167                 f5 &= ~(RF5_BO_ELEC);
168         }
169         else if ((smart & (SM_OPP_ELEC)) && (smart & (SM_RES_ELEC)))
170         {
171                 if (int_outof(r_ptr, 80)) f4 &= ~(RF4_BR_ELEC);
172                 if (int_outof(r_ptr, 80)) f5 &= ~(RF5_BA_ELEC);
173                 if (int_outof(r_ptr, 80)) f5 &= ~(RF5_BO_ELEC);
174         }
175         else if ((smart & (SM_OPP_ELEC)) || (smart & (SM_RES_ELEC)))
176         {
177                 if (int_outof(r_ptr, 30)) f4 &= ~(RF4_BR_ELEC);
178                 if (int_outof(r_ptr, 30)) f5 &= ~(RF5_BA_ELEC);
179                 if (int_outof(r_ptr, 30)) f5 &= ~(RF5_BO_ELEC);
180         }
181
182
183         if (smart & (SM_IMM_FIRE))
184         {
185                 f4 &= ~(RF4_BR_FIRE);
186                 f5 &= ~(RF5_BA_FIRE);
187                 f5 &= ~(RF5_BO_FIRE);
188         }
189         else if ((smart & (SM_OPP_FIRE)) && (smart & (SM_RES_FIRE)))
190         {
191                 if (int_outof(r_ptr, 80)) f4 &= ~(RF4_BR_FIRE);
192                 if (int_outof(r_ptr, 80)) f5 &= ~(RF5_BA_FIRE);
193                 if (int_outof(r_ptr, 80)) f5 &= ~(RF5_BO_FIRE);
194         }
195         else if ((smart & (SM_OPP_FIRE)) || (smart & (SM_RES_FIRE)))
196         {
197                 if (int_outof(r_ptr, 30)) f4 &= ~(RF4_BR_FIRE);
198                 if (int_outof(r_ptr, 30)) f5 &= ~(RF5_BA_FIRE);
199                 if (int_outof(r_ptr, 30)) f5 &= ~(RF5_BO_FIRE);
200         }
201
202
203         if (smart & (SM_IMM_COLD))
204         {
205                 f4 &= ~(RF4_BR_COLD);
206                 f5 &= ~(RF5_BA_COLD);
207                 f5 &= ~(RF5_BO_COLD);
208                 f5 &= ~(RF5_BO_ICEE);
209         }
210         else if ((smart & (SM_OPP_COLD)) && (smart & (SM_RES_COLD)))
211         {
212                 if (int_outof(r_ptr, 80)) f4 &= ~(RF4_BR_COLD);
213                 if (int_outof(r_ptr, 80)) f5 &= ~(RF5_BA_COLD);
214                 if (int_outof(r_ptr, 80)) f5 &= ~(RF5_BO_COLD);
215                 if (int_outof(r_ptr, 80)) f5 &= ~(RF5_BO_ICEE);
216         }
217         else if ((smart & (SM_OPP_COLD)) || (smart & (SM_RES_COLD)))
218         {
219                 if (int_outof(r_ptr, 30)) f4 &= ~(RF4_BR_COLD);
220                 if (int_outof(r_ptr, 30)) f5 &= ~(RF5_BA_COLD);
221                 if (int_outof(r_ptr, 30)) f5 &= ~(RF5_BO_COLD);
222                 if (int_outof(r_ptr, 20)) f5 &= ~(RF5_BO_ICEE);
223         }
224
225
226         if ((smart & (SM_OPP_POIS)) && (smart & (SM_RES_POIS)))
227         {
228                 if (int_outof(r_ptr, 80)) f4 &= ~(RF4_BR_POIS);
229                 if (int_outof(r_ptr, 80)) f5 &= ~(RF5_BA_POIS);
230                 if (int_outof(r_ptr, 60)) f4 &= ~(RF4_BA_NUKE);
231                 if (int_outof(r_ptr, 60)) f4 &= ~(RF4_BR_NUKE);
232         }
233         else if ((smart & (SM_OPP_POIS)) || (smart & (SM_RES_POIS)))
234         {
235                 if (int_outof(r_ptr, 30)) f4 &= ~(RF4_BR_POIS);
236                 if (int_outof(r_ptr, 30)) f5 &= ~(RF5_BA_POIS);
237         }
238
239
240         if (smart & (SM_RES_NETH))
241         {
242                 if (prace_is_(RACE_SPECTRE))
243                 {
244                         f4 &= ~(RF4_BR_NETH);
245                         f5 &= ~(RF5_BA_NETH);
246                         f5 &= ~(RF5_BO_NETH);
247                 }
248                 else
249                 {
250                         if (int_outof(r_ptr, 20)) f4 &= ~(RF4_BR_NETH);
251                         if (int_outof(r_ptr, 50)) f5 &= ~(RF5_BA_NETH);
252                         if (int_outof(r_ptr, 50)) f5 &= ~(RF5_BO_NETH);
253                 }
254         }
255
256         if (smart & (SM_RES_LITE))
257         {
258                 if (int_outof(r_ptr, 50)) f4 &= ~(RF4_BR_LITE);
259                 if (int_outof(r_ptr, 50)) f5 &= ~(RF5_BA_LITE);
260         }
261
262         if (smart & (SM_RES_DARK))
263         {
264                 if (prace_is_(RACE_VAMPIRE))
265                 {
266                         f4 &= ~(RF4_BR_DARK);
267                         f5 &= ~(RF5_BA_DARK);
268                 }
269                 else
270                 {
271                         if (int_outof(r_ptr, 50)) f4 &= ~(RF4_BR_DARK);
272                         if (int_outof(r_ptr, 50)) f5 &= ~(RF5_BA_DARK);
273                 }
274         }
275
276         if (smart & (SM_RES_FEAR))
277         {
278                 f5 &= ~(RF5_SCARE);
279         }
280
281         if (smart & (SM_RES_CONF))
282         {
283                 f5 &= ~(RF5_CONF);
284                 if (int_outof(r_ptr, 50)) f4 &= ~(RF4_BR_CONF);
285         }
286
287         if (smart & (SM_RES_CHAOS))
288         {
289                 if (int_outof(r_ptr, 20)) f4 &= ~(RF4_BR_CHAO);
290                 if (int_outof(r_ptr, 50)) f4 &= ~(RF4_BA_CHAO);
291         }
292
293         if (smart & (SM_RES_DISEN))
294         {
295                 if (int_outof(r_ptr, 40)) f4 &= ~(RF4_BR_DISE);
296         }
297
298         if (smart & (SM_RES_BLIND))
299         {
300                 f5 &= ~(RF5_BLIND);
301         }
302
303         if (smart & (SM_RES_NEXUS))
304         {
305                 if (int_outof(r_ptr, 50)) f4 &= ~(RF4_BR_NEXU);
306                 f6 &= ~(RF6_TELE_LEVEL);
307         }
308
309         if (smart & (SM_RES_SOUND))
310         {
311                 if (int_outof(r_ptr, 50)) f4 &= ~(RF4_BR_SOUN);
312         }
313
314         if (smart & (SM_RES_SHARD))
315         {
316                 if (int_outof(r_ptr, 40)) f4 &= ~(RF4_BR_SHAR);
317         }
318
319         if (smart & (SM_IMM_REFLECT))
320         {
321                 if (int_outof(r_ptr, 150)) f5 &= ~(RF5_BO_COLD);
322                 if (int_outof(r_ptr, 150)) f5 &= ~(RF5_BO_FIRE);
323                 if (int_outof(r_ptr, 150)) f5 &= ~(RF5_BO_ACID);
324                 if (int_outof(r_ptr, 150)) f5 &= ~(RF5_BO_ELEC);
325                 if (int_outof(r_ptr, 150)) f5 &= ~(RF5_BO_NETH);
326                 if (int_outof(r_ptr, 150)) f5 &= ~(RF5_BO_WATE);
327                 if (int_outof(r_ptr, 150)) f5 &= ~(RF5_BO_MANA);
328                 if (int_outof(r_ptr, 150)) f5 &= ~(RF5_BO_PLAS);
329                 if (int_outof(r_ptr, 150)) f5 &= ~(RF5_BO_ICEE);
330                 if (int_outof(r_ptr, 150)) f5 &= ~(RF5_MISSILE);
331                 if (int_outof(r_ptr, 150)) f4 &= ~(RF4_SHOOT);
332         }
333
334         if (smart & (SM_IMM_FREE))
335         {
336                 f5 &= ~(RF5_HOLD);
337                 f5 &= ~(RF5_SLOW);
338         }
339
340         if (smart & (SM_IMM_MANA))
341         {
342                 f5 &= ~(RF5_DRAIN_MANA);
343         }
344
345         /* XXX XXX XXX No spells left? */
346         /* if (!f4 && !f5 && !f6) ... */
347
348         (*f4p) = f4;
349         (*f5p) = f5;
350         (*f6p) = f6;
351 }
352
353 #endif /* DRS_SMART_OPTIONS */
354
355
356 /*
357  * Determine if there is a space near the player in which
358  * a summoned creature can appear
359  */
360 bool summon_possible(int y1, int x1)
361 {
362         int y, x;
363
364         /* Start at the player's location, and check 2 grids in each dir */
365         for (y = y1 - 2; y <= y1 + 2; y++)
366         {
367                 for (x = x1 - 2; x <= x1 + 2; x++)
368                 {
369                         /* Ignore illegal locations */
370                         if (!in_bounds(y, x)) continue;
371
372                         /* Only check a circular area */
373                         if (distance(y1, x1, y, x)>2) continue;
374
375 #if 0
376                         /* Hack: no summon on glyph of warding */
377                         if (cave[y][x].feat == FEAT_GLYPH) continue;
378                         if (cave[y][x].feat == FEAT_MINOR_GLYPH) continue;
379 #endif
380
381                         /* ...nor on the Pattern */
382                         if ((cave[y][x].feat >= FEAT_PATTERN_START)
383                                 && (cave[y][x].feat <= FEAT_PATTERN_XTRA2)) continue;
384
385                         /* Require empty floor grid in line of sight */
386                         if ((cave_empty_bold(y, x) || (cave[y][x].feat == FEAT_TREES)) && los(y1, x1, y, x) && los(y, x, y1, x1)) return (TRUE);
387                 }
388         }
389
390         return FALSE;
391 }
392
393
394 static bool raise_possible(int y, int x)
395 {
396         int xx, yy;
397         s16b this_o_idx, next_o_idx = 0;
398         cave_type *c_ptr;
399
400         for (xx = x - 5; xx <= x + 5; xx++)
401         {
402                 for (yy = y - 5; yy <= y + 5; yy++)
403                 {
404                         if (distance(y, x, yy, xx) > 5) continue;
405                         if (!los(y, x, yy, xx)) continue;
406
407                         c_ptr = &cave[yy][xx];
408                         /* Scan the pile of objects */
409                         for (this_o_idx = c_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx)
410                         {
411                                 /* Acquire object */
412                                 object_type *o_ptr = &o_list[this_o_idx];
413
414                                 /* Acquire next object */
415                                 next_o_idx = o_ptr->next_o_idx;
416
417                                 /* Known to be worthless? */
418                                 if (o_ptr->tval == TV_CORPSE)
419                                         return TRUE;
420                         }
421                 }
422         }
423         return FALSE;
424 }
425
426
427 /*
428  * Originally, it was possible for a friendly to shoot another friendly.
429  * Change it so a "clean shot" means no equally friendly monster is
430  * between the attacker and target.
431  */
432 /*
433  * Determine if a bolt spell will hit the player.
434  *
435  * This is exactly like "projectable", but it will
436  * return FALSE if a monster is in the way.
437  * no equally friendly monster is
438  * between the attacker and target.
439  */
440 bool clean_shot(int y1, int x1, int y2, int x2, bool friend)
441 {
442         /* Must be the same as projectable() */
443
444         int i, y, x;
445
446         int grid_n = 0;
447         u16b grid_g[512];
448
449         /* Check the projection path */
450         grid_n = project_path(grid_g, MAX_RANGE, y1, x1, y2, x2, 0);
451
452         /* No grid is ever projectable from itself */
453         if (!grid_n) return (FALSE);
454
455         /* Final grid */
456         y = GRID_Y(grid_g[grid_n-1]);
457         x = GRID_X(grid_g[grid_n-1]);
458
459         /* May not end in an unrequested grid */
460         if ((y != y2) || (x != x2)) return (FALSE);
461
462         for (i = 0; i < grid_n; i++)
463         {
464                 y = GRID_Y(grid_g[i]);
465                 x = GRID_X(grid_g[i]);
466
467                 if ((cave[y][x].m_idx > 0) && !((y == y2) && (x == x2)))
468                 {
469                         monster_type *m_ptr = &m_list[cave[y][x].m_idx];
470                         if (friend == is_pet(m_ptr))
471                         {
472                                 return (FALSE);
473                         }
474                 }
475                 /* Pets may not shoot through the character - TNB */
476                 if ((y == py) && (x == px))
477                 {
478                         if (friend) return (FALSE);
479                 }
480         }
481
482         return (TRUE);
483 }
484
485 /*
486  * Cast a bolt at the player
487  * Stop if we hit a monster
488  * Affect monsters and the player
489  */
490 static void bolt(int m_idx, int typ, int dam_hp, int monspell, bool learnable)
491 {
492         int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_PLAYER;
493
494         /* Target the player with a bolt attack */
495         (void)project(m_idx, 0, py, px, dam_hp, typ, flg, (learnable ? monspell : -1));
496 }
497
498 static void beam(int m_idx, int typ, int dam_hp, int monspell, bool learnable)
499 {
500         int flg = PROJECT_BEAM | PROJECT_KILL | PROJECT_THRU | PROJECT_PLAYER | PROJECT_NO_REF;
501
502         /* Target the player with a bolt attack */
503         (void)project(m_idx, 0, py, px, dam_hp, typ, flg, (learnable ? monspell : -1));
504 }
505
506
507 /*
508  * Cast a breath (or ball) attack at the player
509  * Pass over any monsters that may be in the way
510  * Affect grids, objects, monsters, and the player
511  */
512 static void breath(int y, int x, int m_idx, int typ, int dam_hp, int rad, bool breath, int monspell, bool learnable)
513 {
514         int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_PLAYER;
515
516         monster_type *m_ptr = &m_list[m_idx];
517         monster_race *r_ptr = &r_info[m_ptr->r_idx];
518
519         /* Determine the radius of the blast */
520         if ((rad < 1) && breath) rad = (r_ptr->flags2 & (RF2_POWERFUL)) ? 3 : 2;
521
522         /* Handle breath attacks */
523         if (breath) rad = 0 - rad;
524
525         if (typ == GF_ROCKET) flg |= PROJECT_STOP;
526
527         /* Target the player with a ball attack */
528         (void)project(m_idx, rad, y, x, dam_hp, typ, flg, (learnable ? monspell : -1));
529 }
530
531
532 u32b get_curse(int power, object_type *o_ptr)
533 {
534         u32b new_curse;
535
536         while(1)
537         {
538                 new_curse = (1 << (randint0(MAX_CURSE)+4));
539                 if (power == 2)
540                 {
541                         if (!(new_curse & TRC_HEAVY_MASK)) continue;
542                 }
543                 else if (power == 1)
544                 {
545                         if (new_curse & TRC_SPECIAL_MASK) continue;
546                 }
547                 else if (power == 0)
548                 {
549                         if (new_curse & TRC_HEAVY_MASK) continue;
550                 }
551                 if (((o_ptr->tval < TV_BOW) || (o_ptr->tval > TV_SWORD)) && (new_curse == TRC_LOW_MELEE)) continue;
552                 if (((o_ptr->tval < TV_BOOTS) || (o_ptr->tval > TV_DRAG_ARMOR)) && (new_curse == TRC_LOW_AC)) continue;
553                 break;
554         }
555         return new_curse;
556 }
557
558 void curse_equipment(int chance, int heavy_chance)
559 {
560         bool        changed = FALSE;
561         int         curse_power = 0;
562         u32b        new_curse;
563         u32b oflgs[TR_FLAG_SIZE];
564         object_type *o_ptr = &inventory[INVEN_RARM + randint0(12)];
565         char o_name[MAX_NLEN];
566
567         if (randint1(100) > chance) return;
568
569         if (!o_ptr->k_idx) return;
570
571         object_flags(o_ptr, oflgs);
572
573         object_desc(o_name, o_ptr, FALSE, 0);
574
575         /* Extra, biased saving throw for blessed items */
576         if (have_flag(oflgs, TR_BLESSED) && (randint1(888) > chance))
577         {
578 #ifdef JP
579 msg_format("%s¤Ï¼ö¤¤¤òÄ·¤ÍÊÖ¤·¤¿¡ª", o_name,
580 #else
581                 msg_format("Your %s resist%s cursing!", o_name,
582 #endif
583
584                         ((o_ptr->number > 1) ? "" : "s"));
585                 /* Hmmm -- can we wear multiple items? If not, this is unnecessary */
586                 return;
587         }
588
589         if ((randint1(100) <= heavy_chance) &&
590                 (o_ptr->name1 || o_ptr->name2 || o_ptr->art_name))
591         {
592                 if (!(o_ptr->curse_flags & TRC_HEAVY_CURSE))
593                         changed = TRUE;
594                 o_ptr->curse_flags |= TRC_HEAVY_CURSE;
595                 o_ptr->curse_flags |= TRC_CURSED;
596                 curse_power++;
597         }
598         else
599         {
600                 if (!cursed_p(o_ptr))
601                         changed = TRUE;
602                 o_ptr->curse_flags |= TRC_CURSED;
603         }
604         if (heavy_chance >= 50) curse_power++;
605
606         new_curse = get_curse(curse_power, o_ptr);
607         if (!(o_ptr->curse_flags & new_curse))
608         {
609                 changed = TRUE;
610                 o_ptr->curse_flags |= new_curse;
611         }
612
613         if (changed)
614         {
615 #ifdef JP
616 msg_format("°­°Õ¤ËËþ¤Á¤¿¹õ¤¤¥ª¡¼¥é¤¬%s¤ò¤È¤ê¤Þ¤¤¤¿...", o_name);
617 #else
618                 msg_format("There is a malignant black aura surrounding %s...", o_name);
619 #endif
620
621                 o_ptr->feeling = FEEL_NONE;
622         }
623         p_ptr->update |= (PU_BONUS);
624 }
625
626
627 /*
628  * Return TRUE if a spell is good for hurting the player (directly).
629  */
630 static bool spell_attack(byte spell)
631 {
632         /* All RF4 spells hurt (except for shriek and dispel) */
633         if (spell < 128 && spell > 98) return (TRUE);
634
635         /* Various "ball" spells */
636         if (spell >= 128 && spell <= 128 + 8) return (TRUE);
637
638         /* "Cause wounds" and "bolt" spells */
639         if (spell >= 128 + 12 && spell < 128 + 27) return (TRUE);
640
641         /* Hand of Doom */
642         if (spell == 160 + 1) return (TRUE);
643
644         /* Psycho-Spear */
645         if (spell == 160 + 11) return (TRUE);
646
647         /* Doesn't hurt */
648         return (FALSE);
649 }
650
651
652 /*
653  * Return TRUE if a spell is good for escaping.
654  */
655 static bool spell_escape(byte spell)
656 {
657         /* Blink or Teleport */
658         if (spell == 160 + 4 || spell == 160 + 5) return (TRUE);
659
660         /* Teleport the player away */
661         if (spell == 160 + 9 || spell == 160 + 10) return (TRUE);
662
663         /* Isn't good for escaping */
664         return (FALSE);
665 }
666
667 /*
668  * Return TRUE if a spell is good for annoying the player.
669  */
670 static bool spell_annoy(byte spell)
671 {
672         /* Shriek */
673         if (spell == 96 + 0) return (TRUE);
674
675         /* Brain smash, et al (added curses) */
676         if (spell >= 128 + 9 && spell <= 128 + 14) return (TRUE);
677
678         /* Scare, confuse, blind, slow, paralyze */
679         if (spell >= 128 + 27 && spell <= 128 + 31) return (TRUE);
680
681         /* Teleport to */
682         if (spell == 160 + 8) return (TRUE);
683
684         /* Teleport level */
685         if (spell == 160 + 10) return (TRUE);
686
687         /* Darkness, make traps, cause amnesia */
688         if (spell >= 160 + 12 && spell <= 160 + 14) return (TRUE);
689
690         /* Doesn't annoy */
691         return (FALSE);
692 }
693
694 /*
695  * Return TRUE if a spell summons help.
696  */
697 static bool spell_summon(byte spell)
698 {
699         /* All summon spells */
700         if (spell >= 160 + 16) return (TRUE);
701
702         /* Doesn't summon */
703         return (FALSE);
704 }
705
706
707 /*
708  * Return TRUE if a spell raise-dead.
709  */
710 static bool spell_raise(byte spell)
711 {
712         /* All raise-dead spells */
713         if (spell == 160 + 15) return (TRUE);
714
715         /* Doesn't summon */
716         return (FALSE);
717 }
718
719
720 /*
721  * Return TRUE if a spell is good in a tactical situation.
722  */
723 static bool spell_tactic(byte spell)
724 {
725         /* Blink */
726         if (spell == 160 + 4) return (TRUE);
727
728         /* Not good */
729         return (FALSE);
730 }
731
732 /*
733  * Return TRUE if a spell makes invulnerable.
734  */
735 static bool spell_invulner(byte spell)
736 {
737         /* Invulnerability */
738         if (spell == 160 + 3) return (TRUE);
739
740         /* No invulnerability */
741         return (FALSE);
742 }
743
744 /*
745  * Return TRUE if a spell hastes.
746  */
747 static bool spell_haste(byte spell)
748 {
749         /* Haste self */
750         if (spell == 160 + 0) return (TRUE);
751
752         /* Not a haste spell */
753         return (FALSE);
754 }
755
756
757 /*
758  * Return TRUE if a spell world.
759  */
760 static bool spell_world(byte spell)
761 {
762         /* world */
763         if (spell == 160 + 6) return (TRUE);
764
765         /* Not a haste spell */
766         return (FALSE);
767 }
768
769
770 /*
771  * Return TRUE if a spell special.
772  */
773 static bool spell_special(byte spell)
774 {
775         if (p_ptr->inside_battle) return FALSE;
776
777         /* world */
778         if (spell == 160 + 7) return (TRUE);
779
780         /* Not a haste spell */
781         return (FALSE);
782 }
783
784
785 /*
786  * Return TRUE if a spell psycho-spear.
787  */
788 static bool spell_psy_spe(byte spell)
789 {
790         /* world */
791         if (spell == 160 + 11) return (TRUE);
792
793         /* Not a haste spell */
794         return (FALSE);
795 }
796
797
798 /*
799  * Return TRUE if a spell is good for healing.
800  */
801 static bool spell_heal(byte spell)
802 {
803         /* Heal */
804         if (spell == 160 + 2) return (TRUE);
805
806         /* No healing */
807         return (FALSE);
808 }
809
810
811 /*
812  * Return TRUE if a spell is good for dispel.
813  */
814 static bool spell_dispel(byte spell)
815 {
816         /* Dispel */
817         if (spell == 96 + 2) return (TRUE);
818
819         /* No dispel */
820         return (FALSE);
821 }
822
823
824 /*
825  * Check should monster cast dispel spell.
826  */
827 static bool dispel_check(int m_idx)
828 {
829         monster_type *m_ptr = &m_list[m_idx];
830         monster_race *r_ptr = &r_info[m_ptr->r_idx];
831
832         /* Invulnabilty */
833         if (p_ptr->invuln) return (TRUE);
834
835         /* Wraith form */
836         if (p_ptr->wraith_form) return (TRUE);
837
838         /* Shield */
839         if (p_ptr->shield) return (TRUE);
840
841         /* Magic defence */
842         if (p_ptr->magicdef) return (TRUE);
843
844         /* Multi Shadow */
845         if (p_ptr->multishadow) return (TRUE);
846
847         /* Robe of dust */
848         if (p_ptr->dustrobe) return (TRUE);
849
850         /* Berserk Strength */
851         if (p_ptr->shero && (p_ptr->pclass != CLASS_BERSERKER)) return (TRUE);
852
853         /* Invulnability song */
854         if (music_singing(MUSIC_INVULN)) return (TRUE);
855
856         /* Demon Lord */
857         if (p_ptr->mimic_form == MIMIC_DEMON_LORD) return (TRUE);
858
859         /* Elemental resistances */
860         if (r_ptr->flags4 & RF4_BR_ACID)
861         {
862                 if (!p_ptr->immune_acid && p_ptr->oppose_acid) return (TRUE);
863
864                 if (p_ptr->special_defense & DEFENSE_ACID) return (TRUE);
865         }
866
867         if (r_ptr->flags4 & RF4_BR_FIRE)
868         {
869                 if (!((p_ptr->prace == RACE_DEMON) && p_ptr->lev > 44))
870                 {
871                         if(!p_ptr->immune_fire && p_ptr->oppose_fire) return (TRUE);
872
873                         if(p_ptr->special_defense & DEFENSE_FIRE) return(TRUE);
874                 }
875         }
876
877         if (r_ptr->flags4 & RF4_BR_ELEC)
878         {
879                 if (!p_ptr->immune_elec && p_ptr->oppose_elec) return (TRUE);
880
881                 if (p_ptr->special_defense & DEFENSE_ELEC) return (TRUE);
882         }
883
884         if (r_ptr->flags4 & RF4_BR_COLD)
885         {
886                 if (!p_ptr->immune_cold && p_ptr->oppose_cold) return (TRUE);
887
888                 if (p_ptr->special_defense & DEFENSE_COLD) return (TRUE);
889         }
890
891         if (r_ptr->flags4 & (RF4_BR_POIS | RF4_BR_NUKE))
892         {
893                 if (!((p_ptr->pclass == CLASS_NINJA) && p_ptr->lev > 44))
894                 {
895                         if (p_ptr->oppose_pois) return (TRUE);
896
897                         if (p_ptr->special_defense & DEFENSE_POIS) return (TRUE);
898                 }
899         }
900
901         /* Elemental resist music */
902         if (music_singing(MUSIC_RESIST))
903         {
904                 if (r_ptr->flags4 & (RF4_BR_ACID | RF4_BR_FIRE | RF4_BR_ELEC | RF4_BR_COLD | RF4_BR_POIS)) return (TRUE);
905         }
906
907         /* Ultimate resistance */
908         if (p_ptr->ult_res) return (TRUE);
909
910         /* Potion of Neo Tsuyosi special */
911         if (p_ptr->tsuyoshi) return (TRUE);
912
913         /* Elemental Brands */
914         if ((p_ptr->special_attack & ATTACK_ACID) && !(r_ptr->flags3 & RF3_IM_ACID)) return (TRUE);
915         if ((p_ptr->special_attack & ATTACK_FIRE) && !(r_ptr->flags3 & RF3_IM_FIRE)) return (TRUE);
916         if ((p_ptr->special_attack & ATTACK_ELEC) && !(r_ptr->flags3 & RF3_IM_ELEC)) return (TRUE);
917         if ((p_ptr->special_attack & ATTACK_COLD) && !(r_ptr->flags3 & RF3_IM_COLD)) return (TRUE);
918         if ((p_ptr->special_attack & ATTACK_POIS) && !(r_ptr->flags3 & RF3_IM_POIS)) return (TRUE);
919
920         /* Speed */
921         if (p_ptr->pspeed < 145)
922         {
923                 if (p_ptr->fast) return (TRUE);
924
925                 if (music_singing(MUSIC_SPEED)) return (TRUE);
926
927                 if (music_singing(MUSIC_SHERO)) return (TRUE);
928         }
929
930         /* Light speed */
931         if (p_ptr->lightspeed && (m_ptr->mspeed < 136)) return (TRUE);
932
933         if (p_ptr->riding && (m_list[p_ptr->riding].mspeed < 135))
934         {
935                 if (m_list[p_ptr->riding].fast) return (TRUE);
936         }
937
938         /* No need to cast dispel spell */
939         return (FALSE);
940 }
941
942
943 /*
944  * Have a monster choose a spell from a list of "useful" spells.
945  *
946  * Note that this list does NOT include spells that will just hit
947  * other monsters, and the list is restricted when the monster is
948  * "desperate".  Should that be the job of this function instead?
949  *
950  * Stupid monsters will just pick a spell randomly.  Smart monsters
951  * will choose more "intelligently".
952  *
953  * Use the helper functions above to put spells into categories.
954  *
955  * This function may well be an efficiency bottleneck.
956  */
957 static int choose_attack_spell(int m_idx, byte spells[], byte num)
958 {
959         monster_type *m_ptr = &m_list[m_idx];
960         monster_race *r_ptr = &r_info[m_ptr->r_idx];
961
962         byte escape[96], escape_num = 0;
963         byte attack[96], attack_num = 0;
964         byte summon[96], summon_num = 0;
965         byte tactic[96], tactic_num = 0;
966         byte annoy[96], annoy_num = 0;
967         byte invul[96], invul_num = 0;
968         byte haste[96], haste_num = 0;
969         byte world[96], world_num = 0;
970         byte special[96], special_num = 0;
971         byte psy_spe[96], psy_spe_num = 0;
972         byte raise[96], raise_num = 0;
973         byte heal[96], heal_num = 0;
974         byte dispel[96], dispel_num = 0;
975
976         int i;
977
978         /* Stupid monsters choose randomly */
979         if (r_ptr->flags2 & (RF2_STUPID))
980         {
981                 /* Pick at random */
982                 return (spells[randint0(num)]);
983         }
984
985         /* Categorize spells */
986         for (i = 0; i < num; i++)
987         {
988                 /* Escape spell? */
989                 if (spell_escape(spells[i])) escape[escape_num++] = spells[i];
990
991                 /* Attack spell? */
992                 if (spell_attack(spells[i])) attack[attack_num++] = spells[i];
993
994                 /* Summon spell? */
995                 if (spell_summon(spells[i])) summon[summon_num++] = spells[i];
996
997                 /* Tactical spell? */
998                 if (spell_tactic(spells[i])) tactic[tactic_num++] = spells[i];
999
1000                 /* Annoyance spell? */
1001                 if (spell_annoy(spells[i])) annoy[annoy_num++] = spells[i];
1002
1003                 /* Invulnerability spell? */
1004                 if (spell_invulner(spells[i])) invul[invul_num++] = spells[i];
1005
1006                 /* Haste spell? */
1007                 if (spell_haste(spells[i])) haste[haste_num++] = spells[i];
1008
1009                 /* World spell? */
1010                 if (spell_world(spells[i])) world[world_num++] = spells[i];
1011
1012                 /* Special spell? */
1013                 if (spell_special(spells[i])) special[special_num++] = spells[i];
1014
1015                 /* Psycho-spear spell? */
1016                 if (spell_psy_spe(spells[i])) psy_spe[psy_spe_num++] = spells[i];
1017
1018                 /* Raise-dead spell? */
1019                 if (spell_raise(spells[i])) raise[raise_num++] = spells[i];
1020
1021                 /* Heal spell? */
1022                 if (spell_heal(spells[i])) heal[heal_num++] = spells[i];
1023
1024                 /* Dispel spell? */
1025                 if (spell_dispel(spells[i])) dispel[dispel_num++] = spells[i];
1026         }
1027
1028         /*** Try to pick an appropriate spell type ***/
1029
1030         /* world */
1031         if (world_num && (randint0(100) < 15) && !world_monster)
1032         {
1033                 /* Choose haste spell */
1034                 return (world[randint0(world_num)]);
1035         }
1036
1037         /* special */
1038         if (special_num)
1039         {
1040                 bool success = FALSE;
1041                 switch(m_ptr->r_idx)
1042                 {
1043                         case MON_BANOR:
1044                         case MON_LUPART:
1045                                 if ((m_ptr->hp < m_ptr->maxhp / 2) && r_info[MON_BANOR].max_num && r_info[MON_LUPART].max_num) success = TRUE;
1046                                 break;
1047                         default: break;
1048                 }
1049                 if (success) return (special[randint0(special_num)]);
1050         }
1051
1052         /* Still hurt badly, couldn't flee, attempt to heal */
1053         if (m_ptr->hp < m_ptr->maxhp / 3 && one_in_(2))
1054         {
1055                 /* Choose heal spell if possible */
1056                 if (heal_num) return (heal[randint0(heal_num)]);
1057         }
1058
1059         /* Hurt badly or afraid, attempt to flee */
1060         if (((m_ptr->hp < m_ptr->maxhp / 3) || m_ptr->monfear) && one_in_(2))
1061         {
1062                 /* Choose escape spell if possible */
1063                 if (escape_num) return (escape[randint0(escape_num)]);
1064         }
1065
1066         /* special */
1067         if (special_num)
1068         {
1069                 bool success = FALSE;
1070                 switch(m_ptr->r_idx)
1071                 {
1072                         case MON_OHMU:
1073                                 if (randint0(100) < 50) success = TRUE;
1074                                 break;
1075                         case MON_BANORLUPART:
1076                                 if (randint0(100) < 70) success = TRUE;
1077                                 break;
1078                         case MON_BANOR:
1079                         case MON_LUPART:
1080                                 break;
1081                         default:
1082                                 if (randint0(100) < 50) success = TRUE;
1083                                 break;
1084                 }
1085                 if (success) return (special[randint0(special_num)]);
1086         }
1087
1088         /* Player is close and we have attack spells, blink away */
1089         if ((distance(py, px, m_ptr->fy, m_ptr->fx) < 4) && (attack_num || (r_ptr->flags6 & RF6_TRAPS)) && (randint0(100) < 75) && !world_monster)
1090         {
1091                 /* Choose tactical spell */
1092                 if (tactic_num) return (tactic[randint0(tactic_num)]);
1093         }
1094
1095         /* Summon if possible (sometimes) */
1096         if (summon_num && (randint0(100) < 40))
1097         {
1098                 /* Choose summon spell */
1099                 return (summon[randint0(summon_num)]);
1100         }
1101
1102         /* dispel */
1103         if (dispel_num && one_in_(2))
1104         {
1105                 /* Choose dispel spell if possible */
1106                 if (dispel_check(m_idx))
1107                 {
1108                         return (dispel[randint0(dispel_num)]);
1109                 }
1110         }
1111
1112         /* Raise-dead if possible (sometimes) */
1113         if (raise_num && (randint0(100) < 40) && raise_possible(m_ptr->fy, m_ptr->fx))
1114         {
1115                 /* Choose raise-dead spell */
1116                 return (raise[randint0(raise_num)]);
1117         }
1118
1119         /* Attack spell (most of the time) */
1120         if (p_ptr->invuln)
1121         {
1122                 if (psy_spe_num && (randint0(100) < 50))
1123                 {
1124                         /* Choose attack spell */
1125                         return (psy_spe[randint0(psy_spe_num)]);
1126                 }
1127                 else if (attack_num && (randint0(100) < 40))
1128                 {
1129                         /* Choose attack spell */
1130                         return (attack[randint0(attack_num)]);
1131                 }
1132         }
1133         else if (attack_num && (randint0(100) < 85))
1134         {
1135                 /* Choose attack spell */
1136                 return (attack[randint0(attack_num)]);
1137         }
1138
1139         /* Try another tactical spell (sometimes) */
1140         if (tactic_num && (randint0(100) < 50) && !world_monster)
1141         {
1142                 /* Choose tactic spell */
1143                 return (tactic[randint0(tactic_num)]);
1144         }
1145
1146         /* Cast globe of invulnerability if not already in effect */
1147         if (invul_num && !(m_ptr->invulner) && (randint0(100) < 50))
1148         {
1149                 /* Choose Globe of Invulnerability */
1150                 return (invul[randint0(invul_num)]);
1151         }
1152
1153         /* We're hurt (not badly), try to heal */
1154         if ((m_ptr->hp < m_ptr->maxhp * 3 / 4) && (randint0(100) < 25))
1155         {
1156                 /* Choose heal spell if possible */
1157                 if (heal_num) return (heal[randint0(heal_num)]);
1158         }
1159
1160         /* Haste self if we aren't already somewhat hasted (rarely) */
1161         if (haste_num && (randint0(100) < 20) && !(m_ptr->fast))
1162         {
1163                 /* Choose haste spell */
1164                 return (haste[randint0(haste_num)]);
1165         }
1166
1167         /* Annoy player (most of the time) */
1168         if (annoy_num && (randint0(100) < 80))
1169         {
1170                 /* Choose annoyance spell */
1171                 return (annoy[randint0(annoy_num)]);
1172         }
1173
1174         /* Choose no spell */
1175         return (0);
1176 }
1177
1178
1179 /*
1180  * Creatures can cast spells, shoot missiles, and breathe.
1181  *
1182  * Returns "TRUE" if a spell (or whatever) was (successfully) cast.
1183  *
1184  * XXX XXX XXX This function could use some work, but remember to
1185  * keep it as optimized as possible, while retaining generic code.
1186  *
1187  * Verify the various "blind-ness" checks in the code.
1188  *
1189  * XXX XXX XXX Note that several effects should really not be "seen"
1190  * if the player is blind.  See also "effects.c" for other "mistakes".
1191  *
1192  * Perhaps monsters should breathe at locations *near* the player,
1193  * since this would allow them to inflict "partial" damage.
1194  *
1195  * Perhaps smart monsters should decline to use "bolt" spells if
1196  * there is a monster in the way, unless they wish to kill it.
1197  *
1198  * Note that, to allow the use of the "track_target" option at some
1199  * later time, certain non-optimal things are done in the code below,
1200  * including explicit checks against the "direct" variable, which is
1201  * currently always true by the time it is checked, but which should
1202  * really be set according to an explicit "projectable()" test, and
1203  * the use of generic "x,y" locations instead of the player location,
1204  * with those values being initialized with the player location.
1205  *
1206  * It will not be possible to "correctly" handle the case in which a
1207  * monster attempts to attack a location which is thought to contain
1208  * the player, but which in fact is nowhere near the player, since this
1209  * might induce all sorts of messages about the attack itself, and about
1210  * the effects of the attack, which the player might or might not be in
1211  * a position to observe.  Thus, for simplicity, it is probably best to
1212  * only allow "faulty" attacks by a monster if one of the important grids
1213  * (probably the initial or final grid) is in fact in view of the player.
1214  * It may be necessary to actually prevent spell attacks except when the
1215  * monster actually has line of sight to the player.  Note that a monster
1216  * could be left in a bizarre situation after the player ducked behind a
1217  * pillar and then teleported away, for example.
1218  *
1219  * Note that certain spell attacks do not use the "project()" function
1220  * but "simulate" it via the "direct" variable, which is always at least
1221  * as restrictive as the "project()" function.  This is necessary to
1222  * prevent "blindness" attacks and such from bending around walls, etc,
1223  * and to allow the use of the "track_target" option in the future.
1224  *
1225  * Note that this function attempts to optimize the use of spells for the
1226  * cases in which the monster has no spells, or has spells but cannot use
1227  * them, or has spells but they will have no "useful" effect.  Note that
1228  * this function has been an efficiency bottleneck in the past.
1229  *
1230  * Note the special "MFLAG_NICE" flag, which prevents a monster from using
1231  * any spell attacks until the player has had a single chance to move.
1232  */
1233 bool make_attack_spell(int m_idx)
1234 {
1235         int             k, chance, thrown_spell = 0, rlev, failrate;
1236         byte            spell[96], num = 0;
1237         u32b            f4, f5, f6;
1238         monster_type    *m_ptr = &m_list[m_idx];
1239         monster_race    *r_ptr = &r_info[m_ptr->r_idx];
1240         char            m_name[80];
1241         char            m_poss[80];
1242         char            ddesc[80];
1243         bool            no_inate = FALSE;
1244         bool            do_disi = FALSE;
1245         int             dam = 0;
1246         u32b mode = 0L;
1247         int s_num_6 = (easy_band ? 2 : 6);
1248         int s_num_4 = (easy_band ? 1 : 4);
1249
1250         /* Target location */
1251         int x = px;
1252         int y = py;
1253
1254         /* Summon count */
1255         int count = 0;
1256
1257         /* Extract the blind-ness */
1258         bool blind = (p_ptr->blind ? TRUE : FALSE);
1259
1260         /* Extract the "see-able-ness" */
1261         bool seen = (!blind && m_ptr->ml);
1262
1263         bool maneable = player_has_los_bold(m_ptr->fy, m_ptr->fx);
1264         bool learnable = (seen && maneable && !world_monster);
1265
1266         /* Assume "normal" target */
1267         bool normal = TRUE;
1268
1269         /* Assume "projectable" */
1270         bool direct = TRUE;
1271
1272         /* Cannot cast spells when confused */
1273         if (m_ptr->confused)
1274         {
1275                 reset_target(m_ptr);
1276                 return (FALSE);
1277         }
1278
1279         /* Cannot cast spells when nice */
1280         if (m_ptr->mflag & MFLAG_NICE) return (FALSE);
1281         if (!is_hostile(m_ptr)) return (FALSE);
1282
1283         /* Hack -- Extract the spell probability */
1284         chance = (r_ptr->freq_inate + r_ptr->freq_spell) / 2;
1285
1286         /* Not allowed to cast spells */
1287         if (!chance) return (FALSE);
1288
1289
1290         if (stupid_monsters)
1291         {
1292                 /* Only do spells occasionally */
1293                 if (randint0(100) >= chance) return (FALSE);
1294         }
1295         else
1296         {
1297                 if (randint0(100) >=  chance) return (FALSE);
1298
1299                 /* Sometimes forbid inate attacks (breaths) */
1300                 if (randint0(100) >= (chance * 2)) no_inate = TRUE;
1301         }
1302
1303         /* XXX XXX XXX Handle "track_target" option (?) */
1304
1305
1306         /* Extract the racial spell flags */
1307         f4 = r_ptr->flags4;
1308         f5 = r_ptr->flags5;
1309         f6 = r_ptr->flags6;
1310
1311         /* Hack -- require projectable player */
1312         if (normal)
1313         {
1314                 /* Check range */
1315                 if ((m_ptr->cdis > MAX_RANGE) && !m_ptr->target_y) return (FALSE);
1316
1317                 /* Check path */
1318                 if (projectable(m_ptr->fy, m_ptr->fx, y, x))
1319                 {
1320                         /* Breath disintegration to the glyph */
1321                         if ((!cave_floor_bold(y,x)) && (r_ptr->flags4 & RF4_BR_DISI) && one_in_(2)) do_disi = TRUE;
1322                 }
1323
1324                 /* Check path to next grid */
1325                 else
1326                 {
1327                         bool success = FALSE;
1328
1329                         if ((r_ptr->flags4 & RF4_BR_DISI) &&
1330                             (m_ptr->cdis < MAX_RANGE/2) &&
1331                             in_disintegration_range(m_ptr->fy, m_ptr->fx, y, x) &&
1332                             (one_in_(10) || (projectable(y, x, m_ptr->fy, m_ptr->fx) && one_in_(2))))
1333                         {
1334                                 do_disi = TRUE;
1335                                 success = TRUE;
1336                         }
1337                         else
1338                         {
1339                                 int i;
1340                                 int tonari;
1341                                 int tonari_y[4][8] = {{-1,-1,-1,0,0,1,1,1},
1342                                                       {-1,-1,-1,0,0,1,1,1},
1343                                                       {1,1,1,0,0,-1,-1,-1},
1344                                                       {1,1,1,0,0,-1,-1,-1}};
1345                                 int tonari_x[4][8] = {{-1,0,1,-1,1,-1,0,1},
1346                                                       {1,0,-1,1,-1,1,0,-1},
1347                                                       {-1,0,1,-1,1,-1,0,1},
1348                                                       {1,0,-1,1,-1,1,0,-1}};
1349
1350                                 if (m_ptr->fy < py && m_ptr->fx < px) tonari = 0;
1351                                 else if (m_ptr->fy < py) tonari = 1;
1352                                 else if (m_ptr->fx < px) tonari = 2;
1353                                 else tonari = 3;
1354
1355                                 for (i = 0; i < 8; i++)
1356                                 {
1357                                         int next_x = x + tonari_x[tonari][i];
1358                                         int next_y = y + tonari_y[tonari][i];
1359                                         cave_type *c_ptr;
1360
1361                                         /* Access the next grid */
1362                                         c_ptr = &cave[next_y][next_x];
1363
1364                                         /* Skip door, rubble, wall */
1365                                         if ((c_ptr->feat >= FEAT_DOOR_HEAD) && (c_ptr->feat <= FEAT_PERM_SOLID)) continue;
1366
1367                                         /* Skip tree */
1368                                         if (c_ptr->feat == FEAT_TREES) continue;
1369
1370                                         /* Skip mountain */
1371                                         if (c_ptr->feat == FEAT_MOUNTAIN) continue;
1372
1373                                         if (projectable(m_ptr->fy, m_ptr->fx, next_y, next_x))
1374                                         {
1375                                                 y = next_y;
1376                                                 x = next_x;
1377                                                 success = TRUE;
1378                                                 break;
1379                                         }
1380                                 }
1381                         }
1382
1383                         if (!success)
1384                         {
1385                                 if (m_ptr->target_y && m_ptr->target_x)
1386                                 {
1387                                         y = m_ptr->target_y;
1388                                         x = m_ptr->target_x;
1389                                         f4 &= (RF4_INDIRECT_MASK);
1390                                         f5 &= (RF5_INDIRECT_MASK);
1391                                         f6 &= (RF6_INDIRECT_MASK);
1392                                         success = TRUE;
1393                                 }
1394                         }
1395
1396                         /* No spells */
1397                         if (!success) return FALSE;
1398                 }
1399         }
1400
1401         reset_target(m_ptr);
1402
1403         /* Extract the monster level */
1404         rlev = ((r_ptr->level >= 1) ? r_ptr->level : 1);
1405
1406         if (!stupid_monsters)
1407         {
1408                 /* Forbid inate attacks sometimes */
1409                 if (no_inate) f4 &= 0x500000FF;
1410         }
1411
1412         if (!p_ptr->csp)
1413         {
1414                 f5 &= ~(RF5_DRAIN_MANA);
1415         }
1416         if ((p_ptr->pclass == CLASS_NINJA) && (r_ptr->flags3 & (RF3_UNDEAD | RF3_HURT_LITE)))
1417         {
1418                 f6 &= ~(RF6_DARKNESS);
1419         }
1420
1421         if (dun_level && (!p_ptr->inside_quest || (p_ptr->inside_quest < MIN_RANDOM_QUEST)) && (d_info[dungeon_type].flags1 & DF1_NO_MAGIC))
1422         {
1423                 f4 &= (RF4_NOMAGIC_MASK);
1424                 f5 &= (RF5_NOMAGIC_MASK);
1425                 f6 &= (RF6_NOMAGIC_MASK);
1426         }
1427
1428         /* Hack -- allow "desperate" spells */
1429         if ((r_ptr->flags2 & (RF2_SMART)) &&
1430                 (m_ptr->hp < m_ptr->maxhp / 10) &&
1431                 (randint0(100) < 50))
1432         {
1433                 /* Require intelligent spells */
1434                 f4 &= (RF4_INT_MASK);
1435                 f5 &= (RF5_INT_MASK);
1436                 f6 &= (RF6_INT_MASK);
1437
1438                 /* No spells left */
1439                 if (!f4 && !f5 && !f6) return (FALSE);
1440         }
1441
1442         /* Remove the "ineffective" spells */
1443         remove_bad_spells(m_idx, &f4, &f5, &f6);
1444
1445         if (p_ptr->inside_arena)
1446         {
1447                 f4 &= ~(RF4_SUMMON_MASK);
1448                 f5 &= ~(RF5_SUMMON_MASK);
1449                 f6 &= ~(RF6_SUMMON_MASK);
1450         }
1451
1452         /* No spells left */
1453         if (!f4 && !f5 && !f6) return (FALSE);
1454
1455         if (!stupid_monsters)
1456         {
1457                 /* Check for a clean bolt shot */
1458                 if (((f4 & RF4_BOLT_MASK) ||
1459                      (f5 & RF5_BOLT_MASK) ||
1460                      (f6 & RF6_BOLT_MASK)) &&
1461                      !(r_ptr->flags2 & RF2_STUPID) &&
1462                      !clean_shot(m_ptr->fy, m_ptr->fx, py, px, FALSE))
1463                 {
1464                         /* Remove spells that will only hurt friends */
1465                         f4 &= ~(RF4_BOLT_MASK);
1466                         f5 &= ~(RF5_BOLT_MASK);
1467                         f6 &= ~(RF6_BOLT_MASK);
1468                 }
1469
1470                 /* Check for a possible summon */
1471                 if (((f4 & RF4_SUMMON_MASK) ||
1472                      (f5 & RF5_SUMMON_MASK) ||
1473                      (f6 & RF6_SUMMON_MASK)) &&
1474                      !(r_ptr->flags2 & RF2_STUPID) &&
1475                      !(summon_possible(y, x)))
1476                 {
1477                         /* Remove summoning spells */
1478                         f4 &= ~(RF4_SUMMON_MASK);
1479                         f5 &= ~(RF5_SUMMON_MASK);
1480                         f6 &= ~(RF6_SUMMON_MASK);
1481                 }
1482
1483                 /* No spells left */
1484                 if (!f4 && !f5 && !f6) return (FALSE);
1485         }
1486
1487         /* Extract the "inate" spells */
1488         for (k = 0; k < 32; k++)
1489         {
1490                 if (f4 & (1L << k)) spell[num++] = k + 32 * 3;
1491         }
1492
1493         /* Extract the "normal" spells */
1494         for (k = 0; k < 32; k++)
1495         {
1496                 if (f5 & (1L << k)) spell[num++] = k + 32 * 4;
1497         }
1498
1499         /* Extract the "bizarre" spells */
1500         for (k = 0; k < 32; k++)
1501         {
1502                 if (f6 & (1L << k)) spell[num++] = k + 32 * 5;
1503         }
1504
1505         /* No spells left */
1506         if (!num) return (FALSE);
1507
1508         /* Stop if player is dead or gone */
1509         if (!p_ptr->playing || p_ptr->is_dead) return (FALSE);
1510
1511         /* Stop if player is leaving */
1512         if (p_ptr->leaving) return (FALSE);
1513
1514         /* Get the monster name (or "it") */
1515         monster_desc(m_name, m_ptr, 0x00);
1516
1517         /* Get the monster possessive ("his"/"her"/"its") */
1518         monster_desc(m_poss, m_ptr, 0x22);
1519
1520         /* Hack -- Get the "died from" name */
1521         monster_desc(ddesc, m_ptr, 0x288);
1522
1523         if (stupid_monsters)
1524         {
1525                 /* Choose a spell to cast */
1526                 thrown_spell = spell[randint0(num)];
1527         }
1528         else
1529         {
1530                 int attempt = 10;
1531                 if (do_disi) thrown_spell = 96+31;
1532                 else
1533                 {
1534                         while(attempt--)
1535                         {
1536                                 thrown_spell = choose_attack_spell(m_idx, spell, num);
1537                                 if (thrown_spell) break;
1538                         }
1539                 }
1540
1541                 /* Abort if no spell was chosen */
1542                 if (!thrown_spell) return (FALSE);
1543
1544                 /* Calculate spell failure rate */
1545                 failrate = 25 - (rlev + 3) / 4;
1546
1547                 /* Hack -- Stupid monsters will never fail (for jellies and such) */
1548                 if (r_ptr->flags2 & RF2_STUPID) failrate = 0;
1549
1550                 /* Check for spell failure (inate attacks never fail) */
1551                 if ((thrown_spell >= 128) && ((m_ptr->stunned && one_in_(2)) || (randint0(100) < failrate)))
1552                 {
1553                         disturb(1, 0);
1554                         /* Message */
1555                         if (thrown_spell != (160+7)) /* Not RF6_SPECIAL */
1556                         {
1557 #ifdef JP
1558 msg_format("%^s¤Ï¼öʸ¤ò¾§¤¨¤è¤¦¤È¤·¤¿¤¬¼ºÇÔ¤·¤¿¡£", m_name);
1559 #else
1560                                 msg_format("%^s tries to cast a spell, but fails.", m_name);
1561 #endif
1562                         }
1563
1564                         return (TRUE);
1565                 }
1566         }
1567
1568
1569         /* Cast the spell. */
1570         switch (thrown_spell)
1571         {
1572                 /* RF4_SHRIEK */
1573                 case 96+0:
1574                 {
1575                         if (!direct) break;
1576                         disturb(1, 0);
1577 #ifdef JP
1578 msg_format("%^s¤¬¤«¤ó¹â¤¤¶âÀÚ¤êÀ¼¤ò¤¢¤²¤¿¡£", m_name);
1579 #else
1580                         msg_format("%^s makes a high pitched shriek.", m_name);
1581 #endif
1582
1583                         aggravate_monsters(m_idx);
1584                         break;
1585                 }
1586
1587                 /* RF4_XXX1 */
1588                 case 96+1:
1589                 {
1590                         /* XXX XXX XXX */
1591                         break;
1592                 }
1593
1594                 /* RF4_DISPEL */
1595                 case 96+2:
1596                 {
1597                         if (x!=px || y!=py) return (FALSE);
1598                         disturb(1, 0);
1599 #ifdef JP
1600                         if (blind) msg_format("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
1601                         else msg_format("%^s¤¬ËâÎϾõî¤Î¼öʸ¤òÇ°¤¸¤¿¡£", m_name);
1602 #else
1603                         if (blind) msg_format("%^s mumbles powerfully.", m_name);
1604                         else msg_format("%^s invokes a dispel magic.", m_name);
1605 #endif
1606                         set_fast(0, TRUE);
1607                         set_lightspeed(0, TRUE);
1608                         set_slow(0, TRUE);
1609                         set_shield(0, TRUE);
1610                         set_blessed(0, TRUE);
1611                         set_tsuyoshi(0, TRUE);
1612                         set_hero(0, TRUE);
1613                         set_shero(0, TRUE);
1614                         set_protevil(0, TRUE);
1615                         set_invuln(0, TRUE);
1616                         set_wraith_form(0, TRUE);
1617                         set_kabenuke(0, TRUE);
1618                         set_tim_res_nether(0, TRUE);
1619                         set_tim_res_time(0, TRUE);
1620                         /* by henkma */
1621                         set_tim_reflect(0,TRUE);
1622                         set_multishadow(0,TRUE);
1623                         set_dustrobe(0,TRUE);
1624
1625                         set_tim_invis(0, TRUE);
1626                         set_tim_infra(0, TRUE);
1627                         set_tim_esp(0, TRUE);
1628                         set_tim_regen(0, TRUE);
1629                         set_tim_stealth(0, TRUE);
1630                         set_tim_ffall(0, TRUE);
1631                         set_tim_sh_touki(0, TRUE);
1632                         set_tim_sh_fire(0, TRUE);
1633                         set_tim_sh_holy(0, TRUE);
1634                         set_tim_eyeeye(0, TRUE);
1635                         set_magicdef(0, TRUE);
1636                         set_resist_magic(0, TRUE);
1637                         set_oppose_acid(0, TRUE);
1638                         set_oppose_elec(0, TRUE);
1639                         set_oppose_fire(0, TRUE);
1640                         set_oppose_cold(0, TRUE);
1641                         set_oppose_pois(0, TRUE);
1642                         set_ultimate_res(0, TRUE);
1643                         set_mimic(0, 0, TRUE);
1644                         set_ele_attack(0, 0);
1645                         set_ele_immune(0, 0);
1646                         /* Cancel glowing hands */
1647                         if (p_ptr->special_attack & ATTACK_CONFUSE)
1648                         {
1649                                 p_ptr->special_attack &= ~(ATTACK_CONFUSE);
1650 #ifdef JP
1651                                 msg_print("¼ê¤Îµ±¤­¤¬¤Ê¤¯¤Ê¤Ã¤¿¡£");
1652 #else
1653                                 msg_print("Your hands stop glowing.");
1654 #endif
1655
1656                         }
1657                         if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0]))
1658                         {
1659                                 p_ptr->magic_num1[1] = p_ptr->magic_num1[0];
1660                                 p_ptr->magic_num1[0] = 0;
1661 #ifdef JP
1662                                 msg_print("²Î¤¬ÅÓÀڤ줿¡£");
1663 #else
1664                                 msg_print("Your singing is interrupted.");
1665 #endif
1666                                 p_ptr->action = ACTION_NONE;
1667
1668                                 /* Recalculate bonuses */
1669                                 p_ptr->update |= (PU_BONUS | PU_HP);
1670
1671                                 /* Redraw map */
1672                                 p_ptr->redraw |= (PR_MAP | PR_STATUS | PR_STATE);
1673
1674                                 /* Update monsters */
1675                                 p_ptr->update |= (PU_MONSTERS);
1676
1677                                 /* Window stuff */
1678                                 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
1679
1680                                 p_ptr->energy_need += ENERGY_NEED();
1681                         }
1682                         if (p_ptr->riding)
1683                         {
1684                                 m_list[p_ptr->riding].invulner = 0;
1685                                 m_list[p_ptr->riding].fast = 0;
1686                                 m_list[p_ptr->riding].slow = 0;
1687                                 p_ptr->update |= PU_BONUS;
1688                                 if (p_ptr->health_who == p_ptr->riding) p_ptr->redraw |= PR_HEALTH;
1689                                 p_ptr->redraw |= (PR_UHEALTH);
1690                         }
1691
1692 #ifdef JP
1693                         if ((p_ptr->pseikaku == SEIKAKU_COMBAT) || (inventory[INVEN_BOW].name1 == ART_CRIMSON))
1694                                 msg_print("¤ä¤ê¤ä¤¬¤Ã¤¿¤Ê¡ª");
1695 #endif
1696                         learn_spell(MS_DISPEL);
1697                         break;
1698                 }
1699
1700                 /* RF4_XXX4X4 */
1701                 case 96+3:
1702                 {
1703                         disturb(1, 0);
1704 #ifdef JP
1705 if (blind) msg_format("%^s¤¬²¿¤«¤ò¼Í¤Ã¤¿¡£", m_name);
1706 #else
1707                         if (blind) msg_format("%^s shoots something.", m_name);
1708 #endif
1709
1710 #ifdef JP
1711 else msg_format("%^s¤¬¥í¥±¥Ã¥È¤òȯ¼Í¤·¤¿¡£", m_name);
1712 #else
1713                         else msg_format("%^s fires a rocket.", m_name);
1714 #endif
1715
1716                         dam = ((m_ptr->hp / 4) > 800 ? 800 : (m_ptr->hp / 4));
1717                         breath(y, x, m_idx, GF_ROCKET,
1718                                 dam, 2, FALSE, MS_ROCKET, learnable);
1719                         update_smart_learn(m_idx, DRS_SHARD);
1720                         break;
1721                 }
1722
1723                 /* RF4_SHOOT */
1724                 case 96+4:
1725                 {
1726                         if (x!=px || y!=py) return (FALSE);
1727                         disturb(1, 0);
1728 #ifdef JP
1729 if (blind) msg_format("%^s¤¬´ñ̯¤Ê²»¤òȯ¤·¤¿¡£", m_name);
1730 #else
1731                         if (blind) msg_format("%^s makes a strange noise.", m_name);
1732 #endif
1733
1734 #ifdef JP
1735 else msg_format("%^s¤¬Ìð¤òÊü¤Ã¤¿¡£", m_name);
1736 #else
1737                         else msg_format("%^s fires an arrow.", m_name);
1738 #endif
1739
1740                         dam = damroll(r_ptr->blow[0].d_dice, r_ptr->blow[0].d_side);
1741                         bolt(m_idx, GF_ARROW, dam, MS_SHOOT, learnable);
1742                         update_smart_learn(m_idx, DRS_REFLECT);
1743                         break;
1744                 }
1745
1746                 /* RF4_XXX2 */
1747                 case 96+5:
1748                 {
1749                         /* XXX XXX XXX */
1750                         break;
1751                 }
1752
1753                 /* RF4_XXX3 */
1754                 case 96+6:
1755                 {
1756                         /* XXX XXX XXX */
1757                         break;
1758                 }
1759
1760                 /* RF4_XXX4 */
1761                 case 96+7:
1762                 {
1763                         /* XXX XXX XXX */
1764                         break;
1765                 }
1766
1767                 /* RF4_BR_ACID */
1768                 case 96+8:
1769                 {
1770                         disturb(1, 0);
1771 #ifdef JP
1772 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1773 #else
1774                         if (blind) msg_format("%^s breathes.", m_name);
1775 #endif
1776
1777 #ifdef JP
1778 else msg_format("%^s¤¬»À¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1779 #else
1780                         else msg_format("%^s breathes acid.", m_name);
1781 #endif
1782
1783                         dam = ((m_ptr->hp / 3) > 1600 ? 1600 : (m_ptr->hp / 3));
1784                         breath(y, x, m_idx, GF_ACID, dam, 0, TRUE, MS_BR_ACID, learnable);
1785                         update_smart_learn(m_idx, DRS_ACID);
1786                         break;
1787                 }
1788
1789                 /* RF4_BR_ELEC */
1790                 case 96+9:
1791                 {
1792                         disturb(1, 0);
1793 #ifdef JP
1794 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1795 #else
1796                         if (blind) msg_format("%^s breathes.", m_name);
1797 #endif
1798
1799 #ifdef JP
1800 else msg_format("%^s¤¬°ðºÊ¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1801 #else
1802                         else msg_format("%^s breathes lightning.", m_name);
1803 #endif
1804
1805                         dam = ((m_ptr->hp / 3) > 1600 ? 1600 : (m_ptr->hp / 3));
1806                         breath(y, x, m_idx, GF_ELEC, dam,0, TRUE, MS_BR_ELEC, learnable);
1807                         update_smart_learn(m_idx, DRS_ELEC);
1808                         break;
1809                 }
1810
1811                 /* RF4_BR_FIRE */
1812                 case 96+10:
1813                 {
1814                         disturb(1, 0);
1815 #ifdef JP
1816 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1817 #else
1818                         if (blind) msg_format("%^s breathes.", m_name);
1819 #endif
1820
1821 #ifdef JP
1822 else msg_format("%^s¤¬²Ð±ê¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1823 #else
1824                         else msg_format("%^s breathes fire.", m_name);
1825 #endif
1826
1827                         dam = ((m_ptr->hp / 3) > 1600 ? 1600 : (m_ptr->hp / 3));
1828                         breath(y, x, m_idx, GF_FIRE, dam,0, TRUE, MS_BR_FIRE, learnable);
1829                         update_smart_learn(m_idx, DRS_FIRE);
1830                         break;
1831                 }
1832
1833                 /* RF4_BR_COLD */
1834                 case 96+11:
1835                 {
1836                         disturb(1, 0);
1837 #ifdef JP
1838 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1839 #else
1840                         if (blind) msg_format("%^s breathes.", m_name);
1841 #endif
1842
1843 #ifdef JP
1844 else msg_format("%^s¤¬Î䵤¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1845 #else
1846                         else msg_format("%^s breathes frost.", m_name);
1847 #endif
1848
1849                         dam = ((m_ptr->hp / 3) > 1600 ? 1600 : (m_ptr->hp / 3));
1850                         breath(y, x, m_idx, GF_COLD, dam,0, TRUE, MS_BR_COLD, learnable);
1851                         update_smart_learn(m_idx, DRS_COLD);
1852                         break;
1853                 }
1854
1855                 /* RF4_BR_POIS */
1856                 case 96+12:
1857                 {
1858                         disturb(1, 0);
1859 #ifdef JP
1860 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1861 #else
1862                         if (blind) msg_format("%^s breathes.", m_name);
1863 #endif
1864
1865 #ifdef JP
1866 else msg_format("%^s¤¬¥¬¥¹¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1867 #else
1868                         else msg_format("%^s breathes gas.", m_name);
1869 #endif
1870
1871                         dam = ((m_ptr->hp / 3) > 800 ? 800 : (m_ptr->hp / 3));
1872                         breath(y, x, m_idx, GF_POIS, dam, 0, TRUE, MS_BR_POIS, learnable);
1873                         update_smart_learn(m_idx, DRS_POIS);
1874                         break;
1875                 }
1876
1877
1878                 /* RF4_BR_NETH */
1879                 case 96+13:
1880                 {
1881                         disturb(1, 0);
1882 #ifdef JP
1883 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1884 #else
1885                         if (blind) msg_format("%^s breathes.", m_name);
1886 #endif
1887
1888 #ifdef JP
1889 else msg_format("%^s¤¬ÃϹö¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1890 #else
1891                         else msg_format("%^s breathes nether.", m_name);
1892 #endif
1893
1894                         dam = ((m_ptr->hp / 6) > 550 ? 550 : (m_ptr->hp / 6));
1895                         breath(y, x, m_idx, GF_NETHER, dam,0, TRUE, MS_BR_NETHER, learnable);
1896                         update_smart_learn(m_idx, DRS_NETH);
1897                         break;
1898                 }
1899
1900                 /* RF4_BR_LITE */
1901                 case 96+14:
1902                 {
1903                         disturb(1, 0);
1904 #ifdef JP
1905 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1906 #else
1907                         if (blind) msg_format("%^s breathes.", m_name);
1908 #endif
1909
1910 #ifdef JP
1911 else msg_format("%^s¤¬Á®¸÷¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1912 #else
1913                         else msg_format("%^s breathes light.", m_name);
1914 #endif
1915
1916                         dam = ((m_ptr->hp / 6) > 400 ? 400 : (m_ptr->hp / 6));
1917                         breath(y, x, m_idx, GF_LITE, dam,0, TRUE, MS_BR_LITE, learnable);
1918                         update_smart_learn(m_idx, DRS_LITE);
1919                         break;
1920                 }
1921
1922                 /* RF4_BR_DARK */
1923                 case 96+15:
1924                 {
1925                         disturb(1, 0);
1926 #ifdef JP
1927 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1928 #else
1929                         if (blind) msg_format("%^s breathes.", m_name);
1930 #endif
1931
1932 #ifdef JP
1933 else msg_format("%^s¤¬°Å¹õ¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1934 #else
1935                         else msg_format("%^s breathes darkness.", m_name);
1936 #endif
1937
1938                         dam = ((m_ptr->hp / 6) > 400 ? 400 : (m_ptr->hp / 6));
1939                         breath(y, x, m_idx, GF_DARK, dam,0, TRUE, MS_BR_DARK, learnable);
1940                         update_smart_learn(m_idx, DRS_DARK);
1941                         break;
1942                 }
1943
1944                 /* RF4_BR_CONF */
1945                 case 96+16:
1946                 {
1947                         disturb(1, 0);
1948 #ifdef JP
1949 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1950 #else
1951                         if (blind) msg_format("%^s breathes.", m_name);
1952 #endif
1953
1954 #ifdef JP
1955 else msg_format("%^s¤¬º®Íð¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1956 #else
1957                         else msg_format("%^s breathes confusion.", m_name);
1958 #endif
1959
1960                         dam = ((m_ptr->hp / 6) > 450 ? 450 : (m_ptr->hp / 6));
1961                         breath(y, x, m_idx, GF_CONFUSION, dam,0, TRUE, MS_BR_CONF, learnable);
1962                         update_smart_learn(m_idx, DRS_CONF);
1963                         break;
1964                 }
1965
1966                 /* RF4_BR_SOUN */
1967                 case 96+17:
1968                 {
1969                         disturb(1, 0);
1970                         if (m_ptr->r_idx == MON_JAIAN)
1971 #ifdef JP
1972                                 msg_format("¡Ö¥Ü¥©¥¨¡Á¡Á¡Á¡Á¡Á¡Á¡×");
1973 #else
1974                                 msg_format("'Booooeeeeee'");
1975 #endif
1976 #ifdef JP
1977 else if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1978 #else
1979                         else if (blind) msg_format("%^s breathes.", m_name);
1980 #endif
1981
1982 #ifdef JP
1983 else msg_format("%^s¤¬¹ì²»¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1984 #else
1985                         else msg_format("%^s breathes sound.", m_name);
1986 #endif
1987
1988                         dam = ((m_ptr->hp / 6) > 450 ? 450 : (m_ptr->hp / 6));
1989                         breath(y, x, m_idx, GF_SOUND, dam,0, TRUE, MS_BR_SOUND, learnable);
1990                         update_smart_learn(m_idx, DRS_SOUND);
1991                         break;
1992                 }
1993
1994                 /* RF4_BR_CHAO */
1995                 case 96+18:
1996                 {
1997                         disturb(1, 0);
1998 #ifdef JP
1999 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2000 #else
2001                         if (blind) msg_format("%^s breathes.", m_name);
2002 #endif
2003
2004 #ifdef JP
2005 else msg_format("%^s¤¬¥«¥ª¥¹¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2006 #else
2007                         else msg_format("%^s breathes chaos.", m_name);
2008 #endif
2009
2010                         dam = ((m_ptr->hp / 6) > 600 ? 600 : (m_ptr->hp / 6));
2011                         breath(y, x, m_idx, GF_CHAOS, dam,0, TRUE, MS_BR_CHAOS, learnable);
2012                         update_smart_learn(m_idx, DRS_CHAOS);
2013                         break;
2014                 }
2015
2016                 /* RF4_BR_DISE */
2017                 case 96+19:
2018                 {
2019                         disturb(1, 0);
2020 #ifdef JP
2021 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2022 #else
2023                         if (blind) msg_format("%^s breathes.", m_name);
2024 #endif
2025
2026 #ifdef JP
2027 else msg_format("%^s¤¬Îô²½¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2028 #else
2029                         else msg_format("%^s breathes disenchantment.", m_name);
2030 #endif
2031
2032                         dam = ((m_ptr->hp / 6) > 500 ? 500 : (m_ptr->hp / 6));
2033                         breath(y, x, m_idx, GF_DISENCHANT, dam,0, TRUE, MS_BR_DISEN, learnable);
2034                         update_smart_learn(m_idx, DRS_DISEN);
2035                         break;
2036                 }
2037
2038                 /* RF4_BR_NEXU */
2039                 case 96+20:
2040                 {
2041                         disturb(1, 0);
2042 #ifdef JP
2043 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2044 #else
2045                         if (blind) msg_format("%^s breathes.", m_name);
2046 #endif
2047
2048 #ifdef JP
2049 else msg_format("%^s¤¬°ø²Ìº®Íð¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2050 #else
2051                         else msg_format("%^s breathes nexus.", m_name);
2052 #endif
2053
2054                         dam = ((m_ptr->hp / 3) > 250 ? 250 : (m_ptr->hp / 3));
2055                         breath(y, x, m_idx, GF_NEXUS, dam,0, TRUE, MS_BR_NEXUS, learnable);
2056                         update_smart_learn(m_idx, DRS_NEXUS);
2057                         break;
2058                 }
2059
2060                 /* RF4_BR_TIME */
2061                 case 96+21:
2062                 {
2063                         disturb(1, 0);
2064 #ifdef JP
2065 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2066 #else
2067                         if (blind) msg_format("%^s breathes.", m_name);
2068 #endif
2069
2070 #ifdef JP
2071 else msg_format("%^s¤¬»þ´ÖµÕž¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2072 #else
2073                         else msg_format("%^s breathes time.", m_name);
2074 #endif
2075
2076                         dam = ((m_ptr->hp / 3) > 150 ? 150 : (m_ptr->hp / 3));
2077                         breath(y, x, m_idx, GF_TIME, dam,0, TRUE, MS_BR_TIME, learnable);
2078                         break;
2079                 }
2080
2081                 /* RF4_BR_INER */
2082                 case 96+22:
2083                 {
2084                         disturb(1, 0);
2085 #ifdef JP
2086 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2087 #else
2088                         if (blind) msg_format("%^s breathes.", m_name);
2089 #endif
2090
2091 #ifdef JP
2092 else msg_format("%^s¤¬ÃÙÆߤΥ֥쥹¤òÅǤ¤¤¿¡£", m_name);
2093 #else
2094                         else msg_format("%^s breathes inertia.", m_name);
2095 #endif
2096
2097                         dam = ((m_ptr->hp / 6) > 200 ? 200 : (m_ptr->hp / 6));
2098                         breath(y, x, m_idx, GF_INERTIA, dam,0, TRUE, MS_BR_INERTIA, learnable);
2099                         break;
2100                 }
2101
2102                 /* RF4_BR_GRAV */
2103                 case 96+23:
2104                 {
2105                         disturb(1, 0);
2106 #ifdef JP
2107 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2108 #else
2109                         if (blind) msg_format("%^s breathes.", m_name);
2110 #endif
2111
2112 #ifdef JP
2113 else msg_format("%^s¤¬½ÅÎϤΥ֥쥹¤òÅǤ¤¤¿¡£", m_name);
2114 #else
2115                         else msg_format("%^s breathes gravity.", m_name);
2116 #endif
2117
2118                         dam = ((m_ptr->hp / 3) > 200 ? 200 : (m_ptr->hp / 3));
2119                         breath(y, x, m_idx, GF_GRAVITY, dam,0, TRUE, MS_BR_GRAVITY, learnable);
2120                         break;
2121                 }
2122
2123                 /* RF4_BR_SHAR */
2124                 case 96+24:
2125                 {
2126                         disturb(1, 0);
2127                         if (m_ptr->r_idx == MON_BOTEI)
2128 #ifdef JP
2129                                 msg_format("¡Ö¥ÜÄë¥Ó¥ë¥«¥Ã¥¿¡¼¡ª¡ª¡ª¡×");
2130 #else
2131                                 msg_format("'Boty-Build cutter!!!'");
2132 #endif
2133 #ifdef JP
2134 else if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2135 #else
2136                         else if (blind) msg_format("%^s breathes.", m_name);
2137 #endif
2138
2139 #ifdef JP
2140 else msg_format("%^s¤¬ÇËÊҤΥ֥쥹¤òÅǤ¤¤¿¡£", m_name);
2141 #else
2142                         else msg_format("%^s breathes shards.", m_name);
2143 #endif
2144
2145                         dam = ((m_ptr->hp / 6) > 500 ? 500 : (m_ptr->hp / 6));
2146                         breath(y, x, m_idx, GF_SHARDS, dam,0, TRUE, MS_BR_SHARDS, learnable);
2147                         update_smart_learn(m_idx, DRS_SHARD);
2148                         break;
2149                 }
2150
2151                 /* RF4_BR_PLAS */
2152                 case 96+25:
2153                 {
2154                         disturb(1, 0);
2155 #ifdef JP
2156 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2157 #else
2158                         if (blind) msg_format("%^s breathes.", m_name);
2159 #endif
2160
2161 #ifdef JP
2162 else msg_format("%^s¤¬¥×¥é¥º¥Þ¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2163 #else
2164                         else msg_format("%^s breathes plasma.", m_name);
2165 #endif
2166
2167                         dam = ((m_ptr->hp / 6) > 150 ? 150 : (m_ptr->hp / 6));
2168                         breath(y, x, m_idx, GF_PLASMA, dam,0, TRUE, MS_BR_PLASMA, learnable);
2169                         break;
2170                 }
2171
2172                 /* RF4_BR_WALL */
2173                 case 96+26:
2174                 {
2175                         disturb(1, 0);
2176 #ifdef JP
2177 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2178 #else
2179                         if (blind) msg_format("%^s breathes.", m_name);
2180 #endif
2181
2182 #ifdef JP
2183 else msg_format("%^s¤¬¥Õ¥©¡¼¥¹¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2184 #else
2185                         else msg_format("%^s breathes force.", m_name);
2186 #endif
2187
2188                         dam = ((m_ptr->hp / 6) > 200 ? 200 : (m_ptr->hp / 6));
2189                         breath(y, x, m_idx, GF_FORCE, dam,0, TRUE, MS_BR_FORCE, learnable);
2190                         break;
2191                 }
2192
2193                 /* RF4_BR_MANA */
2194                 case 96+27:
2195                 {
2196                         disturb(1, 0);
2197 #ifdef JP
2198 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2199 #else
2200                         if (blind) msg_format("%^s breathes.", m_name);
2201 #endif
2202
2203 #ifdef JP
2204 else msg_format("%^s¤¬ËâÎϤΥ֥쥹¤òÅǤ¤¤¿¡£", m_name);
2205 #else
2206                         else msg_format("%^s breathes mana.", m_name);
2207 #endif
2208                         dam = ((m_ptr->hp / 3) > 250 ? 250 : (m_ptr->hp / 3));
2209                         breath(y, x, m_idx, GF_MANA, dam,0, TRUE, MS_BR_MANA, learnable);
2210                         break;
2211                 }
2212
2213                 /* RF4_BA_NUKE */
2214                 case 96+28:
2215                 {
2216                         disturb(1, 0);
2217 #ifdef JP
2218 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2219 #else
2220                         if (blind) msg_format("%^s mumbles.", m_name);
2221 #endif
2222
2223 #ifdef JP
2224 else msg_format("%^s¤¬Êü¼Íǽµå¤òÊü¤Ã¤¿¡£", m_name);
2225 #else
2226                         else msg_format("%^s casts a ball of radiation.", m_name);
2227 #endif
2228
2229                         dam = (rlev + damroll(10, 6)) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2230                         breath(y, x, m_idx, GF_NUKE, dam, 2, FALSE, MS_BALL_NUKE, learnable);
2231                         update_smart_learn(m_idx, DRS_POIS);
2232                         break;
2233                 }
2234
2235                 /* RF4_BR_NUKE */
2236                 case 96+29:
2237                 {
2238                         disturb(1, 0);
2239 #ifdef JP
2240 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2241 #else
2242                         if (blind) msg_format("%^s breathes.", m_name);
2243 #endif
2244
2245 #ifdef JP
2246 else msg_format("%^s¤¬Êü¼ÍÀ­ÇÑ´þʪ¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2247 #else
2248                         else msg_format("%^s breathes toxic waste.", m_name);
2249 #endif
2250
2251                         dam = ((m_ptr->hp / 3) > 800 ? 800 : (m_ptr->hp / 3));
2252                         breath(y, x, m_idx, GF_NUKE, dam,0, TRUE, MS_BR_NUKE, learnable);
2253                         update_smart_learn(m_idx, DRS_POIS);
2254                         break;
2255                 }
2256
2257                 /* RF4_BA_CHAO */
2258                 case 96+30:
2259                 {
2260                         disturb(1, 0);
2261 #ifdef JP
2262 if (blind) msg_format("%^s¤¬¶²¤í¤·¤²¤Ë¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2263 #else
2264                         if (blind) msg_format("%^s mumbles frighteningly.", m_name);
2265 #endif
2266
2267 #ifdef JP
2268 else msg_format("%^s¤¬½ã¥í¥°¥ë¥¹¤òÊü¤Ã¤¿¡£", m_name);/*nuke me*/
2269 #else
2270                         else msg_format("%^s invokes a raw Logrus.", m_name);
2271 #endif
2272
2273                         dam = ((r_ptr->flags2 & RF2_POWERFUL) ? (rlev * 3) : (rlev * 2))+ damroll(10, 10);
2274                         breath(y, x, m_idx, GF_CHAOS, dam, 4, FALSE, MS_BALL_CHAOS, learnable);
2275                         update_smart_learn(m_idx, DRS_CHAOS);
2276                         break;
2277                 }
2278
2279                 /* RF4_BR_DISI */
2280                 case 96+31:
2281                 {
2282                         disturb(1, 0);
2283 #ifdef JP
2284 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2285 #else
2286                         if (blind) msg_format("%^s breathes.", m_name);
2287 #endif
2288
2289 #ifdef JP
2290 else msg_format("%^s¤¬Ê¬²ò¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2291 #else
2292                         else msg_format("%^s breathes disintegration.", m_name);
2293 #endif
2294
2295                         dam = ((m_ptr->hp / 6) > 150 ? 150 : (m_ptr->hp / 6));
2296                         breath(y, x, m_idx, GF_DISINTEGRATE, dam,0, TRUE, MS_BR_DISI, learnable);
2297                         break;
2298                 }
2299
2300
2301
2302                 /* RF5_BA_ACID */
2303                 case 128+0:
2304                 {
2305                         disturb(1, 0);
2306 #ifdef JP
2307 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2308 #else
2309                         if (blind) msg_format("%^s mumbles.", m_name);
2310 #endif
2311
2312 #ifdef JP
2313 else msg_format("%^s¤¬¥¢¥·¥Ã¥É¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
2314 #else
2315                         else msg_format("%^s casts an acid ball.", m_name);
2316 #endif
2317
2318                         dam = (randint1(rlev * 3) + 15) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2319                         breath(y, x, m_idx, GF_ACID, dam, 2, FALSE, MS_BALL_ACID, learnable);
2320                         update_smart_learn(m_idx, DRS_ACID);
2321                         break;
2322                 }
2323
2324                 /* RF5_BA_ELEC */
2325                 case 128+1:
2326                 {
2327                         disturb(1, 0);
2328 #ifdef JP
2329 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2330 #else
2331                         if (blind) msg_format("%^s mumbles.", m_name);
2332 #endif
2333
2334 #ifdef JP
2335 else msg_format("%^s¤¬¥µ¥ó¥À¡¼¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
2336 #else
2337                         else msg_format("%^s casts a lightning ball.", m_name);
2338 #endif
2339
2340                         dam = (randint1(rlev * 3 / 2) + 8) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2341                         breath(y, x, m_idx, GF_ELEC, dam, 2, FALSE, MS_BALL_ELEC, learnable);
2342                         update_smart_learn(m_idx, DRS_ELEC);
2343                         break;
2344                 }
2345
2346                 /* RF5_BA_FIRE */
2347                 case 128+2:
2348                 {
2349                         disturb(1, 0);
2350
2351                         if (m_ptr->r_idx == MON_ROLENTO)
2352                         {
2353 #ifdef JP
2354                                 if (blind)
2355                                         msg_format("%s¤¬²¿¤«¤òÅꤲ¤¿¡£", m_name);
2356                                 else 
2357                                         msg_format("%s¤Ï¼êÜØÃƤòÅꤲ¤¿¡£", m_name);
2358 #else
2359                                 if (blind)
2360                                         msg_format("%^s throws something.", m_name);
2361                                 else
2362                                         msg_format("%^s throws a hand grenade.", m_name);
2363 #endif
2364                         }
2365                         else
2366                         {
2367 #ifdef JP
2368 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2369 #else
2370                                 if (blind) msg_format("%^s mumbles.", m_name);
2371 #endif
2372
2373 #ifdef JP
2374 else msg_format("%^s¤¬¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
2375 #else
2376                                 else msg_format("%^s casts a fire ball.", m_name);
2377 #endif
2378                         }
2379
2380                         dam = (randint1(rlev * 7 / 2) + 10) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2381                         breath(y, x, m_idx, GF_FIRE, dam, 2, FALSE, MS_BALL_FIRE, learnable);
2382                         update_smart_learn(m_idx, DRS_FIRE);
2383                         break;
2384                 }
2385
2386                 /* RF5_BA_COLD */
2387                 case 128+3:
2388                 {
2389                         disturb(1, 0);
2390 #ifdef JP
2391 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2392 #else
2393                         if (blind) msg_format("%^s mumbles.", m_name);
2394 #endif
2395
2396 #ifdef JP
2397 else msg_format("%^s¤¬¥¢¥¤¥¹¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
2398 #else
2399                         else msg_format("%^s casts a frost ball.", m_name);
2400 #endif
2401
2402                         dam = (randint1(rlev * 3 / 2) + 10) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2403                         breath(y, x, m_idx, GF_COLD, dam, 2, FALSE, MS_BALL_COLD, learnable);
2404                         update_smart_learn(m_idx, DRS_COLD);
2405                         break;
2406                 }
2407
2408                 /* RF5_BA_POIS */
2409                 case 128+4:
2410                 {
2411                         disturb(1, 0);
2412 #ifdef JP
2413 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2414 #else
2415                         if (blind) msg_format("%^s mumbles.", m_name);
2416 #endif
2417
2418 #ifdef JP
2419 else msg_format("%^s¤¬°­½­±À¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
2420 #else
2421                         else msg_format("%^s casts a stinking cloud.", m_name);
2422 #endif
2423
2424                         dam = damroll(12, 2) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2425                         breath(y, x, m_idx, GF_POIS, dam, 2, FALSE, MS_BALL_POIS, learnable);
2426                         update_smart_learn(m_idx, DRS_POIS);
2427                         break;
2428                 }
2429
2430                 /* RF5_BA_NETH */
2431                 case 128+5:
2432                 {
2433                         disturb(1, 0);
2434 #ifdef JP
2435 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2436 #else
2437                         if (blind) msg_format("%^s mumbles.", m_name);
2438 #endif
2439
2440 #ifdef JP
2441 else msg_format("%^s¤¬ÃϹöµå¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
2442 #else
2443                         else msg_format("%^s casts a nether ball.", m_name);
2444 #endif
2445
2446                         dam = 50 + damroll(10, 10) + (rlev * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1));
2447                         breath(y, x, m_idx, GF_NETHER, dam, 2, FALSE, MS_BALL_NETHER, learnable);
2448                         update_smart_learn(m_idx, DRS_NETH);
2449                         break;
2450                 }
2451
2452                 /* RF5_BA_WATE */
2453                 case 128+6:
2454                 {
2455                         disturb(1, 0);
2456 #ifdef JP
2457 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2458 #else
2459                         if (blind) msg_format("%^s mumbles.", m_name);
2460 #endif
2461
2462 #ifdef JP
2463 else msg_format("%^s¤¬Î®¤ì¤ë¤è¤¦¤Ê¿È¿¶¤ê¤ò¤·¤¿¡£", m_name);
2464 #else
2465                         else msg_format("%^s gestures fluidly.", m_name);
2466 #endif
2467
2468 #ifdef JP
2469 msg_print("¤¢¤Ê¤¿¤Ï±²´¬¤­¤Ë°û¤ß¹þ¤Þ¤ì¤¿¡£");
2470 #else
2471                         msg_print("You are engulfed in a whirlpool.");
2472 #endif
2473
2474                         dam = ((r_ptr->flags2 & RF2_POWERFUL) ? randint1(rlev * 3) : randint1(rlev * 2)) + 50;
2475                         breath(y, x, m_idx, GF_WATER, dam, 4, FALSE, MS_BALL_WATER, learnable);
2476                         break;
2477                 }
2478
2479                 /* RF5_BA_MANA */
2480                 case 128+7:
2481                 {
2482                         disturb(1, 0);
2483 #ifdef JP
2484 if (blind) msg_format("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2485 #else
2486                         if (blind) msg_format("%^s mumbles powerfully.", m_name);
2487 #endif
2488
2489 #ifdef JP
2490 else msg_format("%^s¤¬ËâÎϤÎÍò¤Î¼öʸ¤òÇ°¤¸¤¿¡£", m_name);
2491 #else
2492                         else msg_format("%^s invokes a mana storm.", m_name);
2493 #endif
2494
2495                         dam = (rlev * 4) + 50 + damroll(10, 10);
2496                         breath(y, x, m_idx, GF_MANA, dam, 4, FALSE, MS_BALL_MANA, learnable);
2497                         break;
2498                 }
2499
2500                 /* RF5_BA_DARK */
2501                 case 128+8:
2502                 {
2503                         disturb(1, 0);
2504 #ifdef JP
2505 if (blind) msg_format("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2506 #else
2507                         if (blind) msg_format("%^s mumbles powerfully.", m_name);
2508 #endif
2509
2510 #ifdef JP
2511 else msg_format("%^s¤¬°Å¹õ¤ÎÍò¤Î¼öʸ¤òÇ°¤¸¤¿¡£", m_name);
2512 #else
2513                         else msg_format("%^s invokes a darkness storm.", m_name);
2514 #endif
2515
2516                         dam = (rlev * 4) + 50 + damroll(10, 10);
2517                         breath(y, x, m_idx, GF_DARK, dam, 4, FALSE, MS_BALL_DARK, learnable);
2518                         update_smart_learn(m_idx, DRS_DARK);
2519                         break;
2520                 }
2521
2522                 /* RF5_DRAIN_MANA */
2523                 case 128+9:
2524                 {
2525                         if (x!=px || y!=py) return (FALSE);
2526                         if (!direct) break;
2527                         disturb(1, 0);
2528                         if (p_ptr->csp)
2529                         {
2530                                 int r1;
2531
2532                                 /* Basic message */
2533 #ifdef JP
2534 msg_format("%^s¤ËÀº¿À¥¨¥Í¥ë¥®¡¼¤òµÛ¤¤¼è¤é¤ì¤Æ¤·¤Þ¤Ã¤¿¡ª", m_name);
2535 #else
2536                                 msg_format("%^s draws psychic energy from you!", m_name);
2537 #endif
2538
2539
2540                                 /* Attack power */
2541                                 r1 = (randint1(rlev) / 2) + 1;
2542
2543                                 /* Full drain */
2544                                 if (r1 >= p_ptr->csp)
2545                                 {
2546                                         r1 = p_ptr->csp;
2547                                         p_ptr->csp = 0;
2548                                         p_ptr->csp_frac = 0;
2549                                 }
2550
2551                                 /* Partial drain */
2552                                 else
2553                                 {
2554                                         p_ptr->csp -= r1;
2555                                 }
2556
2557                                 learn_spell(MS_DRAIN_MANA);
2558
2559                                 /* Redraw mana */
2560                                 p_ptr->redraw |= (PR_MANA);
2561
2562                                 /* Window stuff */
2563                                 p_ptr->window |= (PW_PLAYER);
2564                                 p_ptr->window |= (PW_SPELL);
2565
2566                                 /* Heal the monster */
2567                                 if (m_ptr->hp < m_ptr->maxhp)
2568                                 {
2569                                         /* Heal */
2570                                         m_ptr->hp += (6 * r1);
2571                                         if (m_ptr->hp > m_ptr->maxhp) m_ptr->hp = m_ptr->maxhp;
2572
2573                                         /* Redraw (later) if needed */
2574                                         if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
2575                                         if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
2576
2577                                         /* Special message */
2578                                         if (seen)
2579                                         {
2580 #ifdef JP
2581 msg_format("%^s¤Ïµ¤Ê¬¤¬Îɤµ¤½¤¦¤À¡£", m_name);
2582 #else
2583                                                 msg_format("%^s appears healthier.", m_name);
2584 #endif
2585
2586                                         }
2587                                 }
2588                         }
2589                         update_smart_learn(m_idx, DRS_MANA);
2590                         break;
2591                 }
2592
2593                 /* RF5_MIND_BLAST */
2594                 case 128+10:
2595                 {
2596                         if (x!=px || y!=py) return (FALSE);
2597                         if (!direct) break;
2598                         disturb(1, 0);
2599                         if (!seen)
2600                         {
2601 #ifdef JP
2602 msg_print("²¿¤«¤¬¤¢¤Ê¤¿¤ÎÀº¿À¤ËÇ°¤òÊü¤Ã¤Æ¤¤¤ë¤è¤¦¤À¡£");
2603 #else
2604                                 msg_print("You feel something focusing on your mind.");
2605 #endif
2606
2607                         }
2608                         else
2609                         {
2610 #ifdef JP
2611 msg_format("%^s¤¬¤¢¤Ê¤¿¤ÎÆ·¤ò¤¸¤Ã¤È¤Ë¤é¤ó¤Ç¤¤¤ë¡£", m_name);
2612 #else
2613                                 msg_format("%^s gazes deep into your eyes.", m_name);
2614 #endif
2615
2616                         }
2617
2618                         dam = damroll(7, 7);
2619                         if (randint0(100 + rlev/2) < (MAX(5, p_ptr->skill_sav)))
2620                         {
2621 #ifdef JP
2622 msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
2623 #else
2624                                 msg_print("You resist the effects!");
2625 #endif
2626                                 learn_spell(MS_MIND_BLAST);
2627                         }
2628                         else
2629                         {
2630 #ifdef JP
2631 msg_print("ÎîŪ¥¨¥Í¥ë¥®¡¼¤ÇÀº¿À¤¬¹¶·â¤µ¤ì¤¿¡£");
2632 #else
2633                                 msg_print("Your mind is blasted by psyonic energy.");
2634 #endif
2635
2636                                 if (!p_ptr->resist_conf)
2637                                 {
2638                                         (void)set_confused(p_ptr->confused + randint0(4) + 4);
2639                                 }
2640
2641                                 if (!p_ptr->resist_chaos && one_in_(3))
2642                                 {
2643                                         (void)set_image(p_ptr->image + randint0(250) + 150);
2644                                 }
2645
2646                                 p_ptr->csp -= 50;
2647                                 if (p_ptr->csp < 0)
2648                                 {
2649                                         p_ptr->csp = 0;
2650                                         p_ptr->csp_frac = 0;
2651                                 }
2652                                 p_ptr->redraw |= PR_MANA;
2653
2654                                 take_hit(DAMAGE_ATTACK, dam, ddesc, MS_MIND_BLAST);
2655                         }
2656                         break;
2657                 }
2658
2659                 /* RF5_BRAIN_SMASH */
2660                 case 128+11:
2661                 {
2662                         if (x!=px || y!=py) return (FALSE);
2663                         if (!direct) break;
2664                         disturb(1, 0);
2665                         if (!seen)
2666                         {
2667 #ifdef JP
2668 msg_print("²¿¤«¤¬¤¢¤Ê¤¿¤ÎÀº¿À¤ËÇ°¤òÊü¤Ã¤Æ¤¤¤ë¤è¤¦¤À¡£");
2669 #else
2670                                 msg_print("You feel something focusing on your mind.");
2671 #endif
2672
2673                         }
2674                         else
2675                         {
2676 #ifdef JP
2677 msg_format("%^s¤¬¤¢¤Ê¤¿¤ÎÆ·¤ò¤¸¤Ã¤È¸«¤Æ¤¤¤ë¡£", m_name);
2678 #else
2679                                 msg_format("%^s looks deep into your eyes.", m_name);
2680 #endif
2681
2682                         }
2683
2684                         dam = damroll(12, 12);
2685                         if (randint0(100 + rlev/2) < (MAX(5, p_ptr->skill_sav)))
2686                         {
2687 #ifdef JP
2688 msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
2689 #else
2690                                 msg_print("You resist the effects!");
2691 #endif
2692                                 learn_spell(MS_BRAIN_SMASH);
2693                         }
2694                         else
2695                         {
2696 #ifdef JP
2697 msg_print("ÎîŪ¥¨¥Í¥ë¥®¡¼¤ÇÀº¿À¤¬¹¶·â¤µ¤ì¤¿¡£");
2698 #else
2699                                 msg_print("Your mind is blasted by psionic energy.");
2700 #endif
2701
2702                                 p_ptr->csp -= 100;
2703                                 if (p_ptr->csp < 0)
2704                                 {
2705                                         p_ptr->csp = 0;
2706                                         p_ptr->csp_frac = 0;
2707                                 }
2708                                 p_ptr->redraw |= PR_MANA;
2709
2710                                 take_hit(DAMAGE_ATTACK, dam, ddesc, MS_BRAIN_SMASH);
2711                                 if (!p_ptr->resist_blind)
2712                                 {
2713                                         (void)set_blind(p_ptr->blind + 8 + randint0(8));
2714                                 }
2715                                 if (!p_ptr->resist_conf)
2716                                 {
2717                                         (void)set_confused(p_ptr->confused + randint0(4) + 4);
2718                                 }
2719                                 if (!p_ptr->free_act)
2720                                 {
2721                                         (void)set_paralyzed(p_ptr->paralyzed + randint0(4) + 4);
2722                                 }
2723                                 (void)set_slow(p_ptr->slow + randint0(4) + 4, FALSE);
2724
2725                                 while (randint0(100 + rlev/2) > (MAX(5, p_ptr->skill_sav)))
2726                                         (void)do_dec_stat(A_INT);
2727                                 while (randint0(100 + rlev/2) > (MAX(5, p_ptr->skill_sav)))
2728                                         (void)do_dec_stat(A_WIS);
2729
2730                                 if (!p_ptr->resist_chaos)
2731                                 {
2732                                         (void)set_image(p_ptr->image + randint0(250) + 150);
2733                                 }
2734                         }
2735                         break;
2736                 }
2737
2738                 /* RF5_CAUSE_1 */
2739                 case 128+12:
2740                 {
2741                         if (x!=px || y!=py) return (FALSE);
2742                         if (!direct) break;
2743                         disturb(1, 0);
2744 #ifdef JP
2745 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2746 #else
2747                         if (blind) msg_format("%^s mumbles.", m_name);
2748 #endif
2749
2750 #ifdef JP
2751 else msg_format("%^s¤¬¤¢¤Ê¤¿¤ò»Ø¤µ¤·¤Æ¼ö¤Ã¤¿¡£", m_name);
2752 #else
2753                         else msg_format("%^s points at you and curses.", m_name);
2754 #endif
2755
2756                         dam = damroll(3, 8);
2757                         if (randint0(100 + rlev/2) < p_ptr->skill_sav)
2758                         {
2759 #ifdef JP
2760 msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
2761 #else
2762                                 msg_print("You resist the effects!");
2763 #endif
2764                                 learn_spell(MS_CAUSE_1);
2765                         }
2766                         else
2767                         {
2768                                 curse_equipment(15, 0);
2769                                 take_hit(DAMAGE_ATTACK, dam, ddesc, MS_CAUSE_1);
2770                         }
2771                         break;
2772                 }
2773
2774                 /* RF5_CAUSE_2 */
2775                 case 128+13:
2776                 {
2777                         if (x!=px || y!=py) return (FALSE);
2778                         if (!direct) break;
2779                         disturb(1, 0);
2780 #ifdef JP
2781 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2782 #else
2783                         if (blind) msg_format("%^s mumbles.", m_name);
2784 #endif
2785
2786 #ifdef JP
2787 else msg_format("%^s¤¬¤¢¤Ê¤¿¤ò»Ø¤µ¤·¤Æ¶²¤í¤·¤²¤Ë¼ö¤Ã¤¿¡£", m_name);
2788 #else
2789                         else msg_format("%^s points at you and curses horribly.", m_name);
2790 #endif
2791
2792                         dam = damroll(8, 8);
2793                         if (randint0(100 + rlev/2) < p_ptr->skill_sav)
2794                         {
2795 #ifdef JP
2796 msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
2797 #else
2798                                 msg_print("You resist the effects!");
2799 #endif
2800                                 learn_spell(MS_CAUSE_2);
2801                         }
2802                         else
2803                         {
2804                                 curse_equipment(25, MIN(rlev/2-15, 5));
2805                                 take_hit(DAMAGE_ATTACK, dam, ddesc, MS_CAUSE_2);
2806                         }
2807                         break;
2808                 }
2809
2810                 /* RF5_CAUSE_3 */
2811                 case 128+14:
2812                 {
2813                         if (x!=px || y!=py) return (FALSE);
2814                         if (!direct) break;
2815                         disturb(1, 0);
2816 #ifdef JP
2817 if (blind) msg_format("%^s¤¬²¿¤«¤òÂçÀ¼¤Ç¶«¤ó¤À¡£", m_name);
2818 #else
2819                         if (blind) msg_format("%^s mumbles loudly.", m_name);
2820 #endif
2821
2822 #ifdef JP
2823 else msg_format("%^s¤¬¤¢¤Ê¤¿¤ò»Ø¤µ¤·¤Æ¶²¤í¤·¤²¤Ë¼öʸ¤ò¾§¤¨¤¿¡ª", m_name);
2824 #else
2825                         else msg_format("%^s points at you, incanting terribly!", m_name);
2826 #endif
2827
2828                         dam = damroll(10, 15);
2829                         if (randint0(100 + rlev/2) < p_ptr->skill_sav)
2830                         {
2831 #ifdef JP
2832 msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
2833 #else
2834                                 msg_print("You resist the effects!");
2835 #endif
2836                                 learn_spell(MS_CAUSE_3);
2837                         }
2838                         else
2839                         {
2840                                 curse_equipment(33, MIN(rlev/2-15, 15));
2841                                 take_hit(DAMAGE_ATTACK, dam, ddesc, MS_CAUSE_3);
2842                         }
2843                         break;
2844                 }
2845
2846                 /* RF5_CAUSE_4 */
2847                 case 128+15:
2848                 {
2849                         if (x!=px || y!=py) return (FALSE);
2850                         if (!direct) break;
2851                         disturb(1, 0);
2852 #ifdef JP
2853 if (blind) msg_format("%^s¤¬¡Ö¤ªÁ°¤Ï´û¤Ë»à¤ó¤Ç¤¤¤ë¡×¤È¶«¤ó¤À¡£", m_name);
2854 #else
2855                         if (blind) msg_format("%^s screams the word 'DIE!'", m_name);
2856 #endif
2857
2858 #ifdef JP
2859 else msg_format("%^s¤¬¤¢¤Ê¤¿¤ÎÈ빦¤òÆͤ¤¤Æ¡Ö¤ªÁ°¤Ï´û¤Ë»à¤ó¤Ç¤¤¤ë¡×¤È¶«¤ó¤À¡£", m_name);
2860 #else
2861                         else msg_format("%^s points at you, screaming the word DIE!", m_name);
2862 #endif
2863
2864                         dam = damroll(15, 15);
2865                         if ((randint0(100 + rlev/2) < p_ptr->skill_sav) && !(m_ptr->r_idx == MON_KENSHIROU))
2866                         {
2867 #ifdef JP
2868 msg_print("¤·¤«¤·È빦¤òÄ·¤ÍÊÖ¤·¤¿¡ª");
2869 #else
2870                                 msg_print("You resist the effects!");
2871 #endif
2872                                 learn_spell(MS_CAUSE_4);
2873                         }
2874                         else
2875                         {
2876                                 take_hit(DAMAGE_ATTACK, dam, ddesc, MS_CAUSE_4);
2877                                 (void)set_cut(p_ptr->cut + damroll(10, 10));
2878                         }
2879                         break;
2880                 }
2881
2882                 /* RF5_BO_ACID */
2883                 case 128+16:
2884                 {
2885                         if (x!=px || y!=py) return (FALSE);
2886                         disturb(1, 0);
2887 #ifdef JP
2888 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2889 #else
2890                         if (blind) msg_format("%^s mumbles.", m_name);
2891 #endif
2892
2893 #ifdef JP
2894 else msg_format("%^s¤¬¥¢¥·¥Ã¥É¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
2895 #else
2896                         else msg_format("%^s casts a acid bolt.", m_name);
2897 #endif
2898
2899                         dam = (damroll(7, 8) + (rlev / 3)) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2900                         bolt(m_idx, GF_ACID, dam, MS_BOLT_ACID, learnable);
2901                         update_smart_learn(m_idx, DRS_ACID);
2902                         update_smart_learn(m_idx, DRS_REFLECT);
2903                         break;
2904                 }
2905
2906                 /* RF5_BO_ELEC */
2907                 case 128+17:
2908                 {
2909                         if (x!=px || y!=py) return (FALSE);
2910                         disturb(1, 0);
2911 #ifdef JP
2912 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2913 #else
2914                         if (blind) msg_format("%^s mumbles.", m_name);
2915 #endif
2916
2917 #ifdef JP
2918 else msg_format("%^s¤¬¥µ¥ó¥À¡¼¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
2919 #else
2920                         else msg_format("%^s casts a lightning bolt.", m_name);
2921 #endif
2922
2923                         dam = (damroll(4, 8) + (rlev / 3)) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2924                         bolt(m_idx, GF_ELEC, dam, MS_BOLT_ELEC, learnable);
2925                         update_smart_learn(m_idx, DRS_ELEC);
2926                         update_smart_learn(m_idx, DRS_REFLECT);
2927                         break;
2928                 }
2929
2930                 /* RF5_BO_FIRE */
2931                 case 128+18:
2932                 {
2933                         if (x!=px || y!=py) return (FALSE);
2934                         disturb(1, 0);
2935 #ifdef JP
2936 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2937 #else
2938                         if (blind) msg_format("%^s mumbles.", m_name);
2939 #endif
2940
2941 #ifdef JP
2942 else msg_format("%^s¤¬¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
2943 #else
2944                         else msg_format("%^s casts a fire bolt.", m_name);
2945 #endif
2946
2947                         dam = (damroll(9, 8) + (rlev / 3)) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2948                         bolt(m_idx, GF_FIRE, dam, MS_BOLT_FIRE, learnable);
2949                         update_smart_learn(m_idx, DRS_FIRE);
2950                         update_smart_learn(m_idx, DRS_REFLECT);
2951                         break;
2952                 }
2953
2954                 /* RF5_BO_COLD */
2955                 case 128+19:
2956                 {
2957                         if (x!=px || y!=py) return (FALSE);
2958                         disturb(1, 0);
2959 #ifdef JP
2960 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2961 #else
2962                         if (blind) msg_format("%^s mumbles.", m_name);
2963 #endif
2964
2965 #ifdef JP
2966 else msg_format("%^s¤¬¥¢¥¤¥¹¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
2967 #else
2968                         else msg_format("%^s casts a frost bolt.", m_name);
2969 #endif
2970
2971                         dam = (damroll(6, 8) + (rlev / 3)) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2972                         bolt(m_idx, GF_COLD, dam, MS_BOLT_COLD, learnable);
2973                         update_smart_learn(m_idx, DRS_COLD);
2974                         update_smart_learn(m_idx, DRS_REFLECT);
2975                         break;
2976                 }
2977
2978                 /* RF5_BA_LITE */
2979                 case 128+20:
2980                 {
2981                         disturb(1, 0);
2982 #ifdef JP
2983 if (blind) msg_format("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2984 #else
2985                         if (blind) msg_format("%^s mumbles powerfully.", m_name);
2986 #endif
2987
2988 #ifdef JP
2989 else msg_format("%^s¤¬¥¹¥¿¡¼¥Ð¡¼¥¹¥È¤Î¼öʸ¤òÇ°¤¸¤¿¡£", m_name);
2990 #else
2991                         else msg_format("%^s invokes a starburst.", m_name);
2992 #endif
2993
2994                         dam = (rlev * 4) + 50 + damroll(10, 10);
2995                         breath(y, x, m_idx, GF_LITE, dam, 4, FALSE, MS_STARBURST, learnable);
2996                         update_smart_learn(m_idx, DRS_LITE);
2997                         break;
2998                 }
2999
3000                 /* RF5_BO_NETH */
3001                 case 128+21:
3002                 {
3003                         if (x!=px || y!=py) return (FALSE);
3004                         disturb(1, 0);
3005 #ifdef JP
3006 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3007 #else
3008                         if (blind) msg_format("%^s mumbles.", m_name);
3009 #endif
3010
3011 #ifdef JP
3012 else msg_format("%^s¤¬ÃϹö¤ÎÌð¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
3013 #else
3014                         else msg_format("%^s casts a nether bolt.", m_name);
3015 #endif
3016
3017                         dam = 30 + damroll(5, 5) + (rlev * 4) / ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 3);
3018                         bolt(m_idx, GF_NETHER, dam, MS_BOLT_NETHER, learnable);
3019                         update_smart_learn(m_idx, DRS_NETH);
3020                         update_smart_learn(m_idx, DRS_REFLECT);
3021                         break;
3022                 }
3023
3024                 /* RF5_BO_WATE */
3025                 case 128+22:
3026                 {
3027                         if (x!=px || y!=py) return (FALSE);
3028                         disturb(1, 0);
3029 #ifdef JP
3030 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3031 #else
3032                         if (blind) msg_format("%^s mumbles.", m_name);
3033 #endif
3034
3035 #ifdef JP
3036 else msg_format("%^s¤¬¥¦¥©¡¼¥¿¡¼¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
3037 #else
3038                         else msg_format("%^s casts a water bolt.", m_name);
3039 #endif
3040
3041                         dam = damroll(10, 10) + (rlev * 3 / ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 3));
3042                         bolt(m_idx, GF_WATER, dam, MS_BOLT_WATER, learnable);
3043                         update_smart_learn(m_idx, DRS_REFLECT);
3044                         break;
3045                 }
3046
3047                 /* RF5_BO_MANA */
3048                 case 128+23:
3049                 {
3050                         if (x!=px || y!=py) return (FALSE);
3051                         disturb(1, 0);
3052 #ifdef JP
3053 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3054 #else
3055                         if (blind) msg_format("%^s mumbles.", m_name);
3056 #endif
3057
3058 #ifdef JP
3059 else msg_format("%^s¤¬ËâÎϤÎÌð¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
3060 #else
3061                         else msg_format("%^s casts a mana bolt.", m_name);
3062 #endif
3063
3064                         dam = randint1(rlev * 7 / 2) + 50;
3065                         bolt(m_idx, GF_MANA, dam, MS_BOLT_MANA, learnable);
3066                         update_smart_learn(m_idx, DRS_REFLECT);
3067                         break;
3068                 }
3069
3070                 /* RF5_BO_PLAS */
3071                 case 128+24:
3072                 {
3073                         if (x!=px || y!=py) return (FALSE);
3074                         disturb(1, 0);
3075 #ifdef JP
3076 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3077 #else
3078                         if (blind) msg_format("%^s mumbles.", m_name);
3079 #endif
3080
3081 #ifdef JP
3082 else msg_format("%^s¤¬¥×¥é¥º¥Þ¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
3083 #else
3084                         else msg_format("%^s casts a plasma bolt.", m_name);
3085 #endif
3086
3087                         dam = 10 + damroll(8, 7) + (rlev * 3 / ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 3));
3088                         bolt(m_idx, GF_PLASMA, dam, MS_BOLT_PLASMA, learnable);
3089                         update_smart_learn(m_idx, DRS_REFLECT);
3090                         break;
3091                 }
3092
3093                 /* RF5_BO_ICEE */
3094                 case 128+25:
3095                 {
3096                         if (x!=px || y!=py) return (FALSE);
3097                         disturb(1, 0);
3098 #ifdef JP
3099 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3100 #else
3101                         if (blind) msg_format("%^s mumbles.", m_name);
3102 #endif
3103
3104 #ifdef JP
3105 else msg_format("%^s¤¬¶Ë´¨¤ÎÌð¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
3106 #else
3107                         else msg_format("%^s casts an ice bolt.", m_name);
3108 #endif
3109
3110                         dam = damroll(6, 6) + (rlev * 3 / ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 3));
3111                         bolt(m_idx, GF_ICE, dam, MS_BOLT_ICE, learnable);
3112                         update_smart_learn(m_idx, DRS_COLD);
3113                         update_smart_learn(m_idx, DRS_REFLECT);
3114                         break;
3115                 }
3116
3117                 /* RF5_MISSILE */
3118                 case 128+26:
3119                 {
3120                         if (x!=px || y!=py) return (FALSE);
3121                         disturb(1, 0);
3122 #ifdef JP
3123 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3124 #else
3125                         if (blind) msg_format("%^s mumbles.", m_name);
3126 #endif
3127
3128 #ifdef JP
3129 else msg_format("%^s¤¬¥Þ¥¸¥Ã¥¯¡¦¥ß¥µ¥¤¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
3130 #else
3131                         else msg_format("%^s casts a magic missile.", m_name);
3132 #endif
3133
3134                         dam = damroll(2, 6) + (rlev / 3);
3135                         bolt(m_idx, GF_MISSILE, dam, MS_MAGIC_MISSILE, learnable);
3136                         update_smart_learn(m_idx, DRS_REFLECT);
3137                         break;
3138                 }
3139
3140                 /* RF5_SCARE */
3141                 case 128+27:
3142                 {
3143                         if (x!=px || y!=py) return (FALSE);
3144                         if (!direct) break;
3145                         disturb(1, 0);
3146 #ifdef JP
3147 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¯¤È¡¢¶²¤í¤·¤²¤Ê²»¤¬Ê¹¤³¤¨¤¿¡£", m_name);
3148 #else
3149                         if (blind) msg_format("%^s mumbles, and you hear scary noises.", m_name);
3150 #endif
3151
3152 #ifdef JP
3153 else msg_format("%^s¤¬¶²¤í¤·¤²¤Ê¸¸³Ð¤òºî¤ê½Ð¤·¤¿¡£", m_name);
3154 #else
3155                         else msg_format("%^s casts a fearful illusion.", m_name);
3156 #endif
3157
3158                         if (p_ptr->resist_fear)
3159                         {
3160 #ifdef JP
3161 msg_print("¤·¤«¤·¶²Éݤ˿¯¤µ¤ì¤Ê¤«¤Ã¤¿¡£");
3162 #else
3163                                 msg_print("You refuse to be frightened.");
3164 #endif
3165
3166                         }
3167                         else if (randint0(100 + rlev/2) < p_ptr->skill_sav)
3168                         {
3169 #ifdef JP
3170 msg_print("¤·¤«¤·¶²Éݤ˿¯¤µ¤ì¤Ê¤«¤Ã¤¿¡£");
3171 #else
3172                                 msg_print("You refuse to be frightened.");
3173 #endif
3174
3175                         }
3176                         else
3177                         {
3178                                 (void)set_afraid(p_ptr->afraid + randint0(4) + 4);
3179                         }
3180                         learn_spell(MS_SCARE);
3181                         update_smart_learn(m_idx, DRS_FEAR);
3182                         break;
3183                 }
3184
3185                 /* RF5_BLIND */
3186                 case 128+28:
3187                 {
3188                         if (x!=px || y!=py) return (FALSE);
3189                         if (!direct) break;
3190                         disturb(1, 0);
3191 #ifdef JP
3192 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3193 #else
3194                         if (blind) msg_format("%^s mumbles.", m_name);
3195 #endif
3196
3197 #ifdef JP
3198 else msg_format("%^s¤¬¼öʸ¤ò¾§¤¨¤Æ¤¢¤Ê¤¿¤ÎÌܤò¤¯¤é¤Þ¤·¤¿¡ª", m_name);
3199 #else
3200                         else msg_format("%^s casts a spell, burning your eyes!", m_name);
3201 #endif
3202
3203                         if (p_ptr->resist_blind)
3204                         {
3205 #ifdef JP
3206 msg_print("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª");
3207 #else
3208                                 msg_print("You are unaffected!");
3209 #endif
3210
3211                         }
3212                         else if (randint0(100 + rlev/2) < p_ptr->skill_sav)
3213                         {
3214 #ifdef JP
3215 msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
3216 #else
3217                                 msg_print("You resist the effects!");
3218 #endif
3219
3220                         }
3221                         else
3222                         {
3223                                 (void)set_blind(12 + randint0(4));
3224                         }
3225                         learn_spell(MS_BLIND);
3226                         update_smart_learn(m_idx, DRS_BLIND);
3227                         break;
3228                 }
3229
3230                 /* RF5_CONF */
3231                 case 128+29:
3232                 {
3233                         if (x!=px || y!=py) return (FALSE);
3234                         if (!direct) break;
3235                         disturb(1, 0);
3236 #ifdef JP
3237 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¯¤È¡¢Æ¬¤òǺ¤Þ¤¹²»¤¬¤·¤¿¡£", m_name);
3238 #else
3239                         if (blind) msg_format("%^s mumbles, and you hear puzzling noises.", m_name);
3240 #endif
3241
3242 #ifdef JP
3243 else msg_format("%^s¤¬Í¶ÏÇŪ¤Ê¸¸³Ð¤òºî¤ê½Ð¤·¤¿¡£", m_name);
3244 #else
3245                         else msg_format("%^s creates a mesmerising illusion.", m_name);
3246 #endif
3247
3248                         if (p_ptr->resist_conf)
3249                         {
3250 #ifdef JP
3251 msg_print("¤·¤«¤·¸¸³Ð¤Ë¤Ï¤À¤Þ¤µ¤ì¤Ê¤«¤Ã¤¿¡£");
3252 #else
3253                                 msg_print("You disbelieve the feeble spell.");
3254 #endif
3255
3256                         }
3257                         else if (randint0(100 + rlev/2) < p_ptr->skill_sav)
3258                         {
3259 #ifdef JP
3260 msg_print("¤·¤«¤·¸¸³Ð¤Ë¤Ï¤À¤Þ¤µ¤ì¤Ê¤«¤Ã¤¿¡£");
3261 #else
3262                                 msg_print("You disbelieve the feeble spell.");
3263 #endif
3264
3265                         }
3266                         else
3267                         {
3268                                 (void)set_confused(p_ptr->confused + randint0(4) + 4);
3269                         }
3270                         learn_spell(MS_CONF);
3271                         update_smart_learn(m_idx, DRS_CONF);
3272                         break;
3273                 }
3274
3275                 /* RF5_SLOW */
3276                 case 128+30:
3277                 {
3278                         if (x!=px || y!=py) return (FALSE);
3279                         if (!direct) break;
3280                         disturb(1, 0);
3281 #ifdef JP
3282 msg_format("%^s¤¬¤¢¤Ê¤¿¤Î¶ÚÎϤòµÛ¤¤¼è¤í¤¦¤È¤·¤¿¡ª", m_name);
3283 #else
3284                         msg_format("%^s drains power from your muscles!", m_name);
3285 #endif
3286
3287                         if (p_ptr->free_act)
3288                         {
3289 #ifdef JP
3290 msg_print("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª");
3291 #else
3292                                 msg_print("You are unaffected!");
3293 #endif
3294
3295                         }
3296                         else if (randint0(100 + rlev/2) < p_ptr->skill_sav)
3297                         {
3298 #ifdef JP
3299 msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
3300 #else
3301                                 msg_print("You resist the effects!");
3302 #endif
3303
3304                         }
3305                         else
3306                         {
3307                                 (void)set_slow(p_ptr->slow + randint0(4) + 4, FALSE);
3308                         }
3309                         learn_spell(MS_SLOW);
3310                         update_smart_learn(m_idx, DRS_FREE);
3311                         break;
3312                 }
3313
3314                 /* RF5_HOLD */
3315                 case 128+31:
3316                 {
3317                         if (x!=px || y!=py) return (FALSE);
3318                         if (!direct) break;
3319                         disturb(1, 0);
3320 #ifdef JP
3321 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3322 #else
3323                         if (blind) msg_format("%^s mumbles.", m_name);
3324 #endif
3325
3326 #ifdef JP
3327 else msg_format("%^s¤¬¤¢¤Ê¤¿¤ÎÌܤò¤¸¤Ã¤È¸«¤Ä¤á¤¿¡ª", m_name);
3328 #else
3329                         else msg_format("%^s stares deep into your eyes!", m_name);
3330 #endif
3331
3332                         if (p_ptr->free_act)
3333                         {
3334 #ifdef JP
3335 msg_print("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª");
3336 #else
3337                                 msg_print("You are unaffected!");
3338 #endif
3339
3340                         }
3341                         else if (randint0(100 + rlev/2) < p_ptr->skill_sav)
3342                         {
3343 #ifdef JP
3344 msg_format("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
3345 #else
3346                                 msg_format("You resist the effects!");
3347 #endif
3348
3349                         }
3350                         else
3351                         {
3352                                 (void)set_paralyzed(p_ptr->paralyzed + randint0(4) + 4);
3353                         }
3354                         learn_spell(MS_SLEEP);
3355                         update_smart_learn(m_idx, DRS_FREE);
3356                         break;
3357                 }
3358
3359                 /* RF6_HASTE */
3360                 case 160+0:
3361                 {
3362                         disturb(1, 0);
3363                         if (blind)
3364                         {
3365 #ifdef JP
3366 msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3367 #else
3368                                 msg_format("%^s mumbles.", m_name);
3369 #endif
3370
3371                         }
3372                         else
3373                         {
3374 #ifdef JP
3375 msg_format("%^s¤¬¼«Ê¬¤ÎÂΤËÇ°¤òÁ÷¤Ã¤¿¡£", m_name, m_poss);
3376 #else
3377                                 msg_format("%^s concentrates on %s body.", m_name, m_poss);
3378 #endif
3379
3380                         }
3381
3382                         /* Allow quick speed increases to base+10 */
3383                         if (!m_ptr->fast)
3384                         {
3385 #ifdef JP
3386 msg_format("%^s¤ÎÆ°¤­¤¬Â®¤¯¤Ê¤Ã¤¿¡£", m_name);
3387 #else
3388                                 msg_format("%^s starts moving faster.", m_name);
3389 #endif
3390                         }
3391                         m_ptr->fast = MIN(200, m_ptr->fast + 100);
3392                         if (p_ptr->riding == m_idx) p_ptr->update |= PU_BONUS;
3393                         break;
3394                 }
3395
3396                 /* RF6_HAND_DOOM */
3397                 case 160+1:
3398                 {
3399                         if (x!=px || y!=py) return (FALSE);
3400                         disturb(1, 0);
3401 #ifdef JP
3402 msg_format("%^s¤¬ÇËÌǤμê¤òÊü¤Ã¤¿¡ª", m_name);
3403 #else
3404                         msg_format("%^s invokes the Hand of Doom!", m_name);
3405 #endif
3406
3407                         if (randint0(100 + rlev/2) < p_ptr->skill_sav)
3408                         {
3409 #ifdef JP
3410 msg_format("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
3411 #else
3412                                 msg_format("You resist the effects!");
3413 #endif
3414                                 learn_spell(MS_HAND_DOOM);
3415
3416                         }
3417                         else
3418                         {
3419                                 int dummy = (((s32b) ((40 + randint1(20)) * (p_ptr->chp))) / 100);
3420 #ifdef JP
3421 msg_print("¤¢¤Ê¤¿¤ÏÌ¿¤¬Çö¤Þ¤Ã¤Æ¤¤¤¯¤è¤¦¤Ë´¶¤¸¤¿¡ª");
3422 #else
3423                                 msg_print("Your feel your life fade away!");
3424 #endif
3425
3426                                 take_hit(DAMAGE_ATTACK, dummy, m_name, MS_HAND_DOOM);
3427                                 curse_equipment(40, 20);
3428
3429                                 if (p_ptr->chp < 1) p_ptr->chp = 1;
3430                         }
3431                         break;
3432                 }
3433
3434                 /* RF6_HEAL */
3435                 case 160+2:
3436                 {
3437                         disturb(1, 0);
3438
3439                         /* Message */
3440                         if (blind)
3441                         {
3442 #ifdef JP
3443 msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3444 #else
3445                                 msg_format("%^s mumbles.", m_name);
3446 #endif
3447
3448                         }
3449                         else
3450                         {
3451 #ifdef JP
3452 msg_format("%^s¤¬¼«Ê¬¤Î½ý¤Ë½¸Ã椷¤¿¡£", m_name);
3453 #else
3454                                 msg_format("%^s concentrates on %s wounds.", m_name, m_poss);
3455 #endif
3456
3457                         }
3458
3459                         /* Heal some */
3460                         m_ptr->hp += (rlev * 6);
3461
3462                         /* Fully healed */
3463                         if (m_ptr->hp >= m_ptr->maxhp)
3464                         {
3465                                 /* Fully healed */
3466                                 m_ptr->hp = m_ptr->maxhp;
3467
3468                                 /* Message */
3469                                 if (seen)
3470                                 {
3471 #ifdef JP
3472 msg_format("%^s¤Ï´°Á´¤Ë¼£¤Ã¤¿¡ª", m_name);
3473 #else
3474                                         msg_format("%^s looks completely healed!", m_name);
3475 #endif
3476
3477                                 }
3478                                 else
3479                                 {
3480 #ifdef JP
3481 msg_format("%^s¤Ï´°Á´¤Ë¼£¤Ã¤¿¤è¤¦¤À¡ª", m_name);
3482 #else
3483                                         msg_format("%^s sounds completely healed!", m_name);
3484 #endif
3485
3486                                 }
3487                         }
3488
3489                         /* Partially healed */
3490                         else
3491                         {
3492                                 /* Message */
3493                                 if (seen)
3494                                 {
3495 #ifdef JP
3496 msg_format("%^s¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£", m_name);
3497 #else
3498                                         msg_format("%^s looks healthier.", m_name);
3499 #endif
3500
3501                                 }
3502                                 else
3503                                 {
3504 #ifdef JP
3505 msg_format("%^s¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£", m_name);
3506 #else
3507                                         msg_format("%^s sounds healthier.", m_name);
3508 #endif
3509
3510                                 }
3511                         }
3512
3513                         /* Redraw (later) if needed */
3514                         if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
3515                         if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
3516
3517                         /* Cancel fear */
3518                         if (m_ptr->monfear)
3519                         {
3520                                 /* Cancel fear */
3521                                 m_ptr->monfear = 0;
3522
3523                                 /* Message */
3524 #ifdef JP
3525 msg_format("%^s¤Ïͦµ¤¤ò¼è¤êÌᤷ¤¿¡£", m_name, m_poss);
3526 #else
3527                                 msg_format("%^s recovers %s courage.", m_name, m_poss);
3528 #endif
3529
3530                         }
3531                         break;
3532                 }
3533
3534                 /* RF6_INVULNER */
3535                 case 160+3:
3536                 {
3537                         disturb(1, 0);
3538
3539                         /* Message */
3540                         if (!seen)
3541                         {
3542 #ifdef JP
3543 msg_format("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3544 #else
3545                                 msg_format("%^s mumbles powerfully.", m_name);
3546 #endif
3547
3548                         }
3549                         else
3550                         {
3551 #ifdef JP
3552 msg_format("%s¤Ï̵½ý¤Îµå¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
3553 #else
3554                                 msg_format("%^s casts a Globe of Invulnerability.", m_name);
3555 #endif
3556
3557                         }
3558
3559                         if (!(m_ptr->invulner))
3560                                 m_ptr->invulner = randint1(4) + 4;
3561
3562                         if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
3563                         if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
3564                         break;
3565                 }
3566
3567                 /* RF6_BLINK */
3568                 case 160+4:
3569                 {
3570                         disturb(1, 0);
3571 #ifdef JP
3572 msg_format("%^s¤¬½Ö»þ¤Ë¾Ã¤¨¤¿¡£", m_name);
3573 #else
3574                         msg_format("%^s blinks away.", m_name);
3575 #endif
3576
3577                         teleport_away(m_idx, 10, FALSE);
3578                         p_ptr->update |= (PU_MONSTERS | PU_MON_LITE);
3579                         break;
3580                 }
3581
3582                 /* RF6_TPORT */
3583                 case 160+5:
3584                 {
3585                         int i, oldfy, oldfx;
3586                         u32b flgs[TR_FLAG_SIZE];
3587                         object_type *o_ptr;
3588
3589                         oldfy = m_ptr->fy;
3590                         oldfx = m_ptr->fx;
3591
3592                         disturb(1, 0);
3593 #ifdef JP
3594 msg_format("%^s¤¬¥Æ¥ì¥Ý¡¼¥È¤·¤¿¡£", m_name);
3595 #else
3596                         msg_format("%^s teleports away.", m_name);
3597 #endif
3598
3599                         teleport_away(m_idx, MAX_SIGHT * 2 + 5, FALSE);
3600
3601                         if (los(py, px, oldfy, oldfx) && !world_monster)
3602                         {
3603                                 for (i=INVEN_RARM;i<INVEN_TOTAL;i++)
3604                                 {
3605                                         o_ptr = &inventory[i];
3606                                         if(!cursed_p(o_ptr))
3607                                         {
3608                                                 object_flags(o_ptr, flgs);
3609
3610                                                 if((have_flag(flgs, TR_TELEPORT)) || (p_ptr->muta1 & MUT1_VTELEPORT) || (p_ptr->pclass == CLASS_IMITATOR))
3611                                                 {
3612 #ifdef JP
3613                                                         if(get_check_strict("¤Ä¤¤¤Æ¤¤¤­¤Þ¤¹¤«¡©", CHECK_OKAY_CANCEL))
3614 #else
3615                                                         if(get_check_strict("Do you follow it? ", CHECK_OKAY_CANCEL))
3616 #endif
3617                                                         {
3618                                                                 if (one_in_(3))
3619                                                                 {
3620                                                                         teleport_player(200);
3621 #ifdef JP
3622                                                                         msg_print("¼ºÇÔ¡ª");
3623 #else
3624                                                                         msg_print("Failed!");
3625 #endif
3626                                                                 }
3627                                                                 else teleport_player_to(m_ptr->fy, m_ptr->fx, TRUE);
3628                                                                 p_ptr->energy_need += ENERGY_NEED();
3629                                                         }
3630                                                         break;
3631                                                 }
3632                                         }
3633                                 }
3634                         }
3635                         break;
3636                 }
3637
3638                 /* RF6_WORLD */
3639                 case 160+6:
3640                 {
3641                         int who = 0;
3642                         disturb(1, 0);
3643                         if(m_ptr->r_idx == MON_DIO) who = 1;
3644                         else if(m_ptr->r_idx == MON_WONG) who = 3;
3645                         dam = who;
3646                         if (!process_the_world(randint1(2)+2, who, TRUE)) return (FALSE);
3647                         break;
3648                 }
3649
3650                 /* RF6_SPECIAL */
3651                 case 160+7:
3652                 {
3653                         int k;
3654
3655                         disturb(1, 0);
3656                         switch(m_ptr->r_idx)
3657                         {
3658                         case MON_OHMU:
3659                                 if (p_ptr->inside_arena || p_ptr->inside_battle) return FALSE;
3660                                 for (k = 0; k < 6; k++)
3661                                 {
3662                                         count += summon_specific(m_idx, m_ptr->fy, m_ptr->fx, rlev, SUMMON_BIZARRE1, PM_ALLOW_GROUP);
3663                                 }
3664                                 return FALSE;
3665                                 
3666                         case MON_BANORLUPART:
3667                                 {
3668                                         int dummy_hp = (m_ptr->hp + 1) / 2;
3669                                         int dummy_maxhp = m_ptr->maxhp/2;
3670                                         int dummy_y = m_ptr->fy;
3671                                         int dummy_x = m_ptr->fx;
3672
3673                                         if (p_ptr->inside_arena || p_ptr->inside_battle || !summon_possible(m_ptr->fy, m_ptr->fx)) return FALSE;
3674                                         delete_monster_idx(cave[m_ptr->fy][m_ptr->fx].m_idx);
3675                                         summon_named_creature(0, dummy_y, dummy_x, MON_BANOR, mode);
3676                                         m_list[hack_m_idx_ii].hp = dummy_hp;
3677                                         m_list[hack_m_idx_ii].maxhp = dummy_maxhp;
3678                                         summon_named_creature(0, dummy_y, dummy_x, MON_LUPART, mode);
3679                                         m_list[hack_m_idx_ii].hp = dummy_hp;
3680                                         m_list[hack_m_idx_ii].maxhp = dummy_maxhp;
3681
3682 #ifdef JP
3683                                         msg_print("¡Ø¥Ð¡¼¥Î¡¼¥ë¡¦¥ë¥Ñ¡¼¥È¡Ù¤¬Ê¬Îö¤·¤¿¡ª");
3684 #else
3685                                         msg_print("Banor=Rupart splits in two person!");
3686 #endif
3687
3688                                         break;
3689                                 }
3690                                 case MON_BANOR:
3691                                 case MON_LUPART:
3692                                 {
3693                                         int dummy_hp = 0;
3694                                         int dummy_maxhp = 0;
3695                                         int dummy_y = m_ptr->fy;
3696                                         int dummy_x = m_ptr->fx;
3697
3698                                         if (!r_info[MON_BANOR].cur_num || !r_info[MON_LUPART].cur_num) return (FALSE);
3699                                         for (k = 1; k < m_max; k++)
3700                                         {
3701                                                 if (m_list[k].r_idx == MON_BANOR || m_list[k].r_idx == MON_LUPART)
3702                                                 {
3703                                                         dummy_hp += m_list[k].hp;
3704                                                         dummy_maxhp += m_list[k].maxhp;
3705                                                         if (m_list[k].r_idx != m_ptr->r_idx)
3706                                                         {
3707                                                                 dummy_y = m_list[k].fy;
3708                                                                 dummy_x = m_list[k].fx;
3709                                                         }
3710                                                         delete_monster_idx(k);
3711                                                 }
3712                                         }
3713                                         summon_named_creature(0, dummy_y, dummy_x, MON_BANORLUPART, mode);
3714                                         m_list[hack_m_idx_ii].hp = dummy_hp;
3715                                         m_list[hack_m_idx_ii].maxhp = dummy_maxhp;
3716
3717 #ifdef JP
3718                                         msg_print("¡Ø¥Ð¡¼¥Î¡¼¥ë¡Ù¤È¡Ø¥ë¥Ñ¡¼¥È¡Ù¤¬¹çÂΤ·¤¿¡ª");
3719 #else
3720                                         msg_print("Banor and Rupart combine into one!");
3721 #endif
3722
3723                                         break;
3724                                 }
3725
3726                         default:
3727                                 if (r_ptr->d_char == 'B')
3728                                 {
3729                                         if (!direct) break;
3730                                         disturb(1, 0);
3731                                         if (one_in_(3) || x!=px || y!=py)
3732                                         {
3733 #ifdef JP
3734                                                 msg_format("%^s¤ÏÆÍÁ³»ë³¦¤«¤é¾Ã¤¨¤¿!", m_name);
3735 #else
3736                                                 msg_format("%^s suddenly go out of your sight!", m_name);
3737 #endif
3738                                                 teleport_away(m_idx, 10, FALSE);
3739                                                 p_ptr->update |= (PU_MONSTERS | PU_MON_LITE);
3740                                                 break;
3741                                         }
3742                                         else
3743                                         {
3744                                                 int dam = damroll(4, 8);
3745 #ifdef JP
3746                                                 msg_format("%^s¤¬¤¢¤Ê¤¿¤òÄϤó¤Ç¶õÃ椫¤éÅꤲÍ¤¿¡£", m_name);
3747 #else
3748                                                 msg_format("%^s holds you, and drops from the sky.", m_name);
3749 #endif
3750                                                 teleport_player_to(m_ptr->fy, m_ptr->fx, FALSE);
3751
3752                                                 sound(SOUND_FALL);
3753
3754                                                 if (p_ptr->ffall)
3755                                                 {
3756 #ifdef JP
3757                                                         msg_print("¤¢¤Ê¤¿¤ÏÀŤ«¤ËÃåÃϤ·¤¿¡£");
3758 #else
3759                                                         msg_print("You float gently down to the ground.");
3760 #endif
3761                                                 }
3762                                                 else
3763                                                 {
3764 #ifdef JP
3765                                                         msg_print("¤¢¤Ê¤¿¤ÏÃÏÌ̤Ë᤭¤Ä¤±¤é¤ì¤¿¡£");
3766 #else
3767                                                         msg_print("You crashed into the ground.");
3768 #endif
3769                                                         dam += damroll(6, 8);
3770                                                 }
3771
3772                                                 take_hit(DAMAGE_NOESCAPE, dam, m_name, -1);
3773                                         }
3774                                         break;
3775                                 }
3776
3777                                 /* Something is wrong */
3778                                 else return FALSE;
3779                         }
3780                         break;
3781                 }
3782
3783                 /* RF6_TELE_TO */
3784                 case 160+8:
3785                 {
3786                         if (x!=px || y!=py) return (FALSE);
3787                         if (!direct) break;
3788                         disturb(1, 0);
3789 #ifdef JP
3790 msg_format("%^s¤¬¤¢¤Ê¤¿¤ò°ú¤­Ìᤷ¤¿¡£", m_name);
3791 #else
3792                         msg_format("%^s commands you to return.", m_name);
3793 #endif
3794
3795                         teleport_player_to(m_ptr->fy, m_ptr->fx, TRUE);
3796                         learn_spell(MS_TELE_TO);
3797                         break;
3798                 }
3799
3800                 /* RF6_TELE_AWAY */
3801                 case 160+9:
3802                 {
3803                         if (x!=px || y!=py) return (FALSE);
3804                         if (!direct) break;
3805                         disturb(1, 0);
3806 #ifdef JP
3807 msg_format("%^s¤Ë¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤é¤ì¤¿¡£", m_name);
3808                         if ((p_ptr->pseikaku == SEIKAKU_COMBAT) || (inventory[INVEN_BOW].name1 == ART_CRIMSON))
3809                                 msg_print("¤¯¤Ã¤½¡Á");
3810 #else
3811                         msg_format("%^s teleports you away.", m_name);
3812 #endif
3813
3814                         learn_spell(MS_TELE_AWAY);
3815                         teleport_player(100);
3816                         break;
3817                 }
3818
3819                 /* RF6_TELE_LEVEL */
3820                 case 160+10:
3821                 {
3822                         if (x!=px || y!=py) return (FALSE);
3823                         if (!direct) break;
3824                         disturb(1, 0);
3825 #ifdef JP
3826 if (blind) msg_format("%^s¤¬²¿¤«´ñ̯¤Ê¸ÀÍÕ¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3827 #else
3828                         if (blind) msg_format("%^s mumbles strangely.", m_name);
3829 #endif
3830
3831 #ifdef JP
3832 else msg_format("%^s¤¬¤¢¤Ê¤¿¤Î­¤ò»Ø¤µ¤·¤¿¡£", m_name);
3833 #else
3834                         else msg_format("%^s gestures at your feet.", m_name);
3835 #endif
3836
3837                         if (p_ptr->resist_nexus)
3838                         {
3839 #ifdef JP
3840 msg_print("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª");
3841 #else
3842                                 msg_print("You are unaffected!");
3843 #endif
3844
3845                         }
3846                         else if (randint0(100 + rlev/2) < p_ptr->skill_sav)
3847                         {
3848 #ifdef JP
3849 msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
3850 #else
3851                                 msg_print("You resist the effects!");
3852 #endif
3853
3854                         }
3855                         else
3856                         {
3857                                 teleport_player_level();
3858                         }
3859                         learn_spell(MS_TELE_LEVEL);
3860                         update_smart_learn(m_idx, DRS_NEXUS);
3861                         break;
3862                 }
3863
3864                 /* RF6_PSY_SPEAR */
3865                 case 160+11:
3866                 {
3867                         if (x!=px || y!=py) return (FALSE);
3868                         disturb(1, 0);
3869 #ifdef JP
3870 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3871 #else
3872                         if (blind) msg_format("%^s mumbles.", m_name);
3873 #endif
3874
3875 #ifdef JP
3876 else msg_format("%^s¤¬¸÷¤Î·õ¤òÊü¤Ã¤¿¡£", m_name);
3877 #else
3878                         else msg_format("%^s throw a Psycho-Spear.", m_name);
3879 #endif
3880
3881                         dam = (r_ptr->flags2 & RF2_POWERFUL) ? (randint1(rlev * 2) + 150) : (randint1(rlev * 3 / 2) + 100);
3882                         beam(m_idx, GF_PSY_SPEAR, dam, MS_PSY_SPEAR, learnable);
3883                         break;
3884                 }
3885
3886                 /* RF6_DARKNESS */
3887                 case 160+12:
3888                 {
3889                         if (x!=px || y!=py) return (FALSE);
3890                         if (!direct) break;
3891                         disturb(1, 0);
3892 #ifdef JP
3893 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3894 #else
3895                         if (blind) msg_format("%^s mumbles.", m_name);
3896 #endif
3897
3898 #ifdef JP
3899 else if (p_ptr->pclass == CLASS_NINJA) msg_format("%^s¤¬ÊÕ¤ê¤òÌÀ¤ë¤¯¾È¤é¤·¤¿¡£", m_name);
3900 else msg_format("%^s¤¬°Å°Ç¤ÎÃæ¤Ç¼ê¤ò¿¶¤Ã¤¿¡£", m_name);
3901 #else
3902                         else if (p_ptr->pclass == CLASS_NINJA)
3903                                 msg_format("%^s cast a spell to light up.", m_name);
3904                         else msg_format("%^s gestures in shadow.", m_name);
3905 #endif
3906
3907                         learn_spell(MS_DARKNESS);
3908                         if (p_ptr->pclass == CLASS_NINJA)
3909                                 (void)lite_area(0, 3);
3910                         else
3911                                 (void)unlite_area(0, 3);
3912                         break;
3913                 }
3914
3915                 /* RF6_TRAPS */
3916                 case 160+13:
3917                 {
3918                         if (!direct) break;
3919                         disturb(1, 0);
3920 #ifdef JP
3921 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤Æ¼Ù°­¤ËÈù¾Ð¤ó¤À¡£", m_name);
3922 #else
3923                         if (blind) msg_format("%^s mumbles, and then cackles evilly.", m_name);
3924 #endif
3925
3926 #ifdef JP
3927 else msg_format("%^s¤¬¼öʸ¤ò¾§¤¨¤Æ¼Ù°­¤ËÈù¾Ð¤ó¤À¡£", m_name);
3928 #else
3929                         else msg_format("%^s casts a spell and cackles evilly.", m_name);
3930 #endif
3931
3932                         learn_spell(MS_MAKE_TRAP);
3933                         (void)trap_creation(y, x);
3934                         break;
3935                 }
3936
3937                 /* RF6_FORGET */
3938                 case 160+14:
3939                 {
3940                         if (x!=px || y!=py) return (FALSE);
3941                         if (!direct) break;
3942                         disturb(1, 0);
3943 #ifdef JP
3944 msg_format("%^s¤¬¤¢¤Ê¤¿¤Îµ­²±¤ò¾Ãµî¤·¤è¤¦¤È¤·¤Æ¤¤¤ë¡£", m_name);
3945 #else
3946                         msg_format("%^s tries to blank your mind.", m_name);
3947 #endif
3948
3949
3950                         if (randint0(100 + rlev/2) < p_ptr->skill_sav)
3951                         {
3952 #ifdef JP
3953 msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
3954 #else
3955                                 msg_print("You resist the effects!");
3956 #endif
3957
3958                         }
3959                         else if (lose_all_info())
3960                         {
3961 #ifdef JP
3962 msg_print("µ­²±¤¬Çö¤ì¤Æ¤·¤Þ¤Ã¤¿¡£");
3963 #else
3964                                 msg_print("Your memories fade away.");
3965 #endif
3966
3967                         }
3968                         learn_spell(MS_FORGET);
3969                         break;
3970                 }
3971
3972                 /* RF6_RAISE_DEAD */
3973                 case 160+15:
3974                 {
3975                         disturb(1, 0);
3976 #ifdef JP
3977 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3978 #else
3979                         if (blind) msg_format("%^s mumbles.", m_name);
3980 #endif
3981
3982 #ifdef JP
3983 else msg_format("%^s¤¬»à¼ÔÉü³è¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
3984 #else
3985                         else msg_format("%^s casts a spell to revive corpses.", m_name);
3986 #endif
3987                         animate_dead(m_idx, m_ptr->fy, m_ptr->fx);
3988                         break;
3989                 }
3990
3991                 /* RF6_SUMMON_KIN */
3992                 case 160+16:
3993                 {
3994                         disturb(1, 0);
3995                         if (m_ptr->r_idx == MON_ROLENTO)
3996                         {
3997 #ifdef JP
3998                                 if (blind)
3999                                         msg_format("%^s¤¬²¿¤«ÂçÎ̤ËÅꤲ¤¿¡£", m_name);
4000                                 else 
4001                                         msg_format("%^s¤Ï¼êÜØÃƤò¤Ð¤é¤Þ¤¤¤¿¡£", m_name);
4002 #else
4003                                 if (blind)
4004                                         msg_format("%^s spreads something.", m_name);
4005                                 else
4006                                         msg_format("%^s throws some hand grenades.", m_name);
4007 #endif
4008                         }
4009                         else if (m_ptr->r_idx == MON_SERPENT || m_ptr->r_idx == MON_ZOMBI_SERPENT)
4010                         {
4011 #ifdef JP
4012                                 if (blind)
4013                                         msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4014                                 else
4015                                         msg_format("%^s¤¬¥À¥ó¥¸¥ç¥ó¤Î¼ç¤ò¾¤´­¤·¤¿¡£", m_name);
4016 #else
4017                                 if (blind)
4018                                         msg_format("%^s mumbles.", m_name);
4019                                 else
4020                                         msg_format("%^s magically summons guardians of dungeons.", m_name);
4021 #endif
4022                         }
4023                         else
4024                         {
4025 #ifdef JP
4026                                 if (blind)
4027                                         msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4028                                 else
4029                                         msg_format("%^s¤ÏËâË¡¤Ç%s¤ò¾¤´­¤·¤¿¡£",
4030                                         m_name,
4031                                         ((r_ptr->flags1) & RF1_UNIQUE ?
4032                                         "¼ê²¼" : "Ãç´Ö"));
4033 #else
4034                                 if (blind)
4035                                         msg_format("%^s mumbles.", m_name);
4036                                 else
4037                                         msg_format("%^s magically summons %s %s.",
4038                                         m_name, m_poss,
4039                                         ((r_ptr->flags1) & RF1_UNIQUE ?
4040                                         "minions" : "kin"));
4041 #endif
4042                         }
4043
4044                         if(m_ptr->r_idx == MON_ROLENTO)
4045                         {
4046                                 int num = 1 + randint1(3);
4047
4048                                 for (k = 0; k < num; k++)
4049                                 {
4050                                         count += summon_named_creature(m_idx, y, x, MON_SHURYUUDAN, mode);
4051                                 }
4052                         }
4053                         else if(m_ptr->r_idx == MON_THORONDOR ||
4054                                 m_ptr->r_idx == MON_GWAIHIR ||
4055                                 m_ptr->r_idx == MON_MENELDOR)
4056                         {
4057                                 int num = 4 + randint1(3);
4058                                 for (k = 0; k < num; k++)
4059                                 {
4060                                         count += summon_specific(m_idx, y, x, rlev, SUMMON_EAGLES, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
4061                                 }
4062                         }
4063                         else if(m_ptr->r_idx == MON_LOUSY)
4064                         {
4065                                 int num = 2 + randint1(3);
4066                                 for (k = 0; k < num; k++)
4067                                 {
4068                                         count += summon_specific(m_idx, y, x, rlev, SUMMON_LOUSE, PM_ALLOW_GROUP);
4069                                 }
4070                         }
4071                         else if(m_ptr->r_idx == MON_BULLGATES)
4072                         {
4073                                 int num = 2 + randint1(3);
4074                                 for (k = 0; k < num; k++)
4075                                 {
4076                                         count += summon_named_creature(m_idx, y, x, 921, mode);
4077                                 }
4078                         }
4079                         else if (m_ptr->r_idx == MON_CALDARM)
4080                         {
4081                                 int num = randint1(3);
4082                                 for (k = 0; k < num; k++)
4083                                 {
4084                                         count += summon_named_creature(m_idx, y, x, 930, mode);
4085                                 }
4086                         }
4087                         else if (m_ptr->r_idx == MON_SERPENT || m_ptr->r_idx == MON_ZOMBI_SERPENT)
4088                         {
4089                                 int num = 2 + randint1(3);
4090
4091                                 if (r_info[MON_JORMUNGAND].cur_num < r_info[MON_JORMUNGAND].max_num && one_in_(6))
4092                                 {
4093 #ifdef JP
4094                                         msg_print("ÃÏÌ̤«¤é¿å¤¬¿á¤­½Ð¤·¤¿¡ª");
4095 #else
4096                                         msg_print("Water blew off from the ground!");
4097 #endif
4098                                         fire_ball_hide(GF_WATER_FLOW, 0, 3, 8);
4099                                 }
4100
4101                                 for (k = 0; k < num; k++)
4102                                 {
4103                                         count += summon_specific(m_idx, y, x, rlev, SUMMON_GUARDIANS, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
4104                                 }
4105                         }
4106                         else
4107                         {
4108
4109                                 summon_kin_type = r_ptr->d_char; /* Big hack */
4110
4111                                 for (k = 0; k < 4; k++)
4112                                 {
4113                                         count += summon_specific(m_idx, y, x, rlev, SUMMON_KIN, PM_ALLOW_GROUP);
4114                                 }
4115                         }
4116 #ifdef JP
4117 if (blind && count) msg_print("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
4118 #else
4119                         if (blind && count) msg_print("You hear many things appear nearby.");
4120 #endif
4121
4122
4123                         break;
4124                 }
4125
4126                 /* RF6_S_CYBER */
4127                 case 160+17:
4128                 {
4129                         disturb(1, 0);
4130 #ifdef JP
4131 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4132 #else
4133                         if (blind) msg_format("%^s mumbles.", m_name);
4134 #endif
4135
4136 #ifdef JP
4137 else msg_format("%^s¤¬¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤ò¾¤´­¤·¤¿¡ª", m_name);
4138 #else
4139                         else msg_format("%^s magically summons Cyberdemons!", m_name);
4140 #endif
4141
4142 #ifdef JP
4143 if (blind && count) msg_print("½Å¸ü¤Ê­²»¤¬¶á¤¯¤Çʹ¤³¤¨¤ë¡£");
4144 #else
4145                         if (blind && count) msg_print("You hear heavy steps nearby.");
4146 #endif
4147
4148                         summon_cyber(m_idx, y, x);
4149                         break;
4150                 }
4151
4152                 /* RF6_S_MONSTER */
4153                 case 160+18:
4154                 {
4155                         disturb(1, 0);
4156 #ifdef JP
4157 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4158 #else
4159                         if (blind) msg_format("%^s mumbles.", m_name);
4160 #endif
4161
4162 #ifdef JP
4163 else msg_format("%^s¤¬ËâË¡¤ÇÃç´Ö¤ò¾¤´­¤·¤¿¡ª", m_name);
4164 #else
4165                         else msg_format("%^s magically summons help!", m_name);
4166 #endif
4167
4168                         for (k = 0; k < 1; k++)
4169                         {
4170                                 count += summon_specific(m_idx, y, x, rlev, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
4171                         }
4172 #ifdef JP
4173 if (blind && count) msg_print("²¿¤«¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
4174 #else
4175                         if (blind && count) msg_print("You hear something appear nearby.");
4176 #endif
4177
4178                         break;
4179                 }
4180
4181                 /* RF6_S_MONSTERS */
4182                 case 160+19:
4183                 {
4184                         disturb(1, 0);
4185 #ifdef JP
4186 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4187 #else
4188                         if (blind) msg_format("%^s mumbles.", m_name);
4189 #endif
4190
4191 #ifdef JP
4192 else msg_format("%^s¤¬ËâË¡¤Ç¥â¥ó¥¹¥¿¡¼¤ò¾¤´­¤·¤¿¡ª", m_name);
4193 #else
4194                         else msg_format("%^s magically summons monsters!", m_name);
4195 #endif
4196
4197                         for (k = 0; k < s_num_6; k++)
4198                         {
4199                                 count += summon_specific(m_idx, y, x, rlev, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
4200                         }
4201 #ifdef JP
4202 if (blind && count) msg_print("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
4203 #else
4204                         if (blind && count) msg_print("You hear many things appear nearby.");
4205 #endif
4206
4207                         break;
4208                 }
4209
4210                 /* RF6_S_ANT */
4211                 case 160+20:
4212                 {
4213                         disturb(1, 0);
4214 #ifdef JP
4215 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4216 #else
4217                         if (blind) msg_format("%^s mumbles.", m_name);
4218 #endif
4219
4220 #ifdef JP
4221 else msg_format("%^s¤¬ËâË¡¤Ç¥¢¥ê¤ò¾¤´­¤·¤¿¡£", m_name);
4222 #else
4223                         else msg_format("%^s magically summons ants.", m_name);
4224 #endif
4225
4226                         for (k = 0; k < s_num_6; k++)
4227                         {
4228                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_ANT, PM_ALLOW_GROUP);
4229                         }
4230 #ifdef JP
4231 if (blind && count) msg_print("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
4232 #else
4233                         if (blind && count) msg_print("You hear many things appear nearby.");
4234 #endif
4235
4236                         break;
4237                 }
4238
4239                 /* RF6_S_SPIDER */
4240                 case 160+21:
4241                 {
4242                         disturb(1, 0);
4243 #ifdef JP
4244 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4245 #else
4246                         if (blind) msg_format("%^s mumbles.", m_name);
4247 #endif
4248
4249 #ifdef JP
4250 else msg_format("%^s¤¬ËâË¡¤Ç¥¯¥â¤ò¾¤´­¤·¤¿¡£", m_name);
4251 #else
4252                         else msg_format("%^s magically summons spiders.", m_name);
4253 #endif
4254
4255                         for (k = 0; k < s_num_6; k++)
4256                         {
4257                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_SPIDER, PM_ALLOW_GROUP);
4258                         }
4259 #ifdef JP
4260 if (blind && count) msg_print("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
4261 #else
4262                         if (blind && count) msg_print("You hear many things appear nearby.");
4263 #endif
4264
4265                         break;
4266                 }
4267
4268                 /* RF6_S_HOUND */
4269                 case 160+22:
4270                 {
4271                         disturb(1, 0);
4272 #ifdef JP
4273 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4274 #else
4275                         if (blind) msg_format("%^s mumbles.", m_name);
4276 #endif
4277
4278 #ifdef JP
4279 else msg_format("%^s¤¬ËâË¡¤Ç¥Ï¥¦¥ó¥É¤ò¾¤´­¤·¤¿¡£", m_name);
4280 #else
4281                         else msg_format("%^s magically summons hounds.", m_name);
4282 #endif
4283
4284                         for (k = 0; k < s_num_4; k++)
4285                         {
4286                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_HOUND, PM_ALLOW_GROUP);
4287                         }
4288 #ifdef JP
4289 if (blind && count) msg_print("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
4290 #else
4291                         if (blind && count) msg_print("You hear many things appear nearby.");
4292 #endif
4293
4294                         break;
4295                 }
4296
4297                 /* RF6_S_HYDRA */
4298                 case 160+23:
4299                 {
4300                         disturb(1, 0);
4301 #ifdef JP
4302 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4303 #else
4304                         if (blind) msg_format("%^s mumbles.", m_name);
4305 #endif
4306
4307 #ifdef JP
4308 else msg_format("%^s¤¬ËâË¡¤Ç¥Ò¥É¥é¤ò¾¤´­¤·¤¿¡£", m_name);
4309 #else
4310                         else msg_format("%^s magically summons hydras.", m_name);
4311 #endif
4312
4313                         for (k = 0; k < s_num_4; k++)
4314                         {
4315                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_HYDRA, PM_ALLOW_GROUP);
4316                         }
4317 #ifdef JP
4318 if (blind && count) msg_print("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
4319 #else
4320                         if (blind && count) msg_print("You hear many things appear nearby.");
4321 #endif
4322
4323                         break;
4324                 }
4325
4326                 /* RF6_S_ANGEL */
4327                 case 160+24:
4328                 {
4329                         int num = 1;
4330
4331                         disturb(1, 0);
4332 #ifdef JP
4333 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4334 #else
4335                         if (blind) msg_format("%^s mumbles.", m_name);
4336 #endif
4337
4338 #ifdef JP
4339 else msg_format("%^s¤¬ËâË¡¤ÇÅ·»È¤ò¾¤´­¤·¤¿¡ª", m_name);
4340 #else
4341                         else msg_format("%^s magically summons an angel!", m_name);
4342 #endif
4343
4344                         if ((r_ptr->flags1 & RF1_UNIQUE) && !easy_band)
4345                         {
4346                                 num += r_ptr->level/40;
4347                         }
4348
4349                         for (k = 0; k < num; k++)
4350                         {
4351                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_ANGEL, PM_ALLOW_GROUP);
4352                         }
4353
4354                         if (count < 2)
4355                         {
4356 #ifdef JP
4357 if (blind && count) msg_print("²¿¤«¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
4358 #else
4359                                 if (blind && count) msg_print("You hear something appear nearby.");
4360 #endif
4361                         }
4362                         else
4363                         {
4364 #ifdef JP
4365 if (blind) msg_print("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
4366 #else
4367                                 if (blind) msg_print("You hear many things appear nearby.");
4368 #endif
4369                         }
4370
4371                         break;
4372                 }
4373
4374                 /* RF6_S_DEMON */
4375                 case 160+25:
4376                 {
4377                         disturb(1, 0);
4378 #ifdef JP
4379 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4380 #else
4381                         if (blind) msg_format("%^s mumbles.", m_name);
4382 #endif
4383
4384 #ifdef JP
4385 else msg_format("%^s¤ÏËâË¡¤Çº®Æ٤εÜÄ¤é°­Ëâ¤ò¾¤´­¤·¤¿¡ª", m_name);
4386 #else
4387                         else msg_format("%^s magically summons a demon from the Courts of Chaos!", m_name);
4388 #endif
4389
4390                         for (k = 0; k < 1; k++)
4391                         {
4392                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_DEMON, PM_ALLOW_GROUP);
4393                         }
4394 #ifdef JP
4395 if (blind && count) msg_print("²¿¤«¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
4396 #else
4397                         if (blind && count) msg_print("You hear something appear nearby.");
4398 #endif
4399
4400                         break;
4401                 }
4402
4403                 /* RF6_S_UNDEAD */
4404                 case 160+26:
4405                 {
4406                         disturb(1, 0);
4407 #ifdef JP
4408 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4409 #else
4410                         if (blind) msg_format("%^s mumbles.", m_name);
4411 #endif
4412
4413 #ifdef JP
4414 else msg_format("%^s¤¬ËâË¡¤Ç¥¢¥ó¥Ç¥Ã¥É¤Î¶¯Å¨¤ò¾¤´­¤·¤¿¡ª", m_name);
4415 #else
4416                         else msg_format("%^s magically summons an undead adversary!", m_name);
4417 #endif
4418
4419                         for (k = 0; k < 1; k++)
4420                         {
4421                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_UNDEAD, PM_ALLOW_GROUP);
4422                         }
4423 #ifdef JP
4424 if (blind && count) msg_print("²¿¤«¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
4425 #else
4426                         if (blind && count) msg_print("You hear something appear nearby.");
4427 #endif
4428
4429                         break;
4430                 }
4431
4432                 /* RF6_S_DRAGON */
4433                 case 160+27:
4434                 {
4435                         disturb(1, 0);
4436 #ifdef JP
4437 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4438 #else
4439                         if (blind) msg_format("%^s mumbles.", m_name);
4440 #endif
4441
4442 #ifdef JP
4443 else msg_format("%^s¤¬ËâË¡¤Ç¥É¥é¥´¥ó¤ò¾¤´­¤·¤¿¡ª", m_name);
4444 #else
4445                         else msg_format("%^s magically summons a dragon!", m_name);
4446 #endif
4447
4448                         for (k = 0; k < 1; k++)
4449                         {
4450                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_DRAGON, PM_ALLOW_GROUP);
4451                         }
4452 #ifdef JP
4453 if (blind && count) msg_print("²¿¤«¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
4454 #else
4455                         if (blind && count) msg_print("You hear something appear nearby.");
4456 #endif
4457
4458                         break;
4459                 }
4460
4461                 /* RF6_S_HI_UNDEAD */
4462                 case 160+28:
4463                 {
4464                         disturb(1, 0);
4465
4466                         if (((m_ptr->r_idx == MON_MORGOTH) || (m_ptr->r_idx == MON_SAURON) || (m_ptr->r_idx == MON_ANGMAR)) && ((r_info[MON_NAZGUL].cur_num+2) < r_info[MON_NAZGUL].max_num))
4467                         {
4468                                 int cy = y;
4469                                 int cx = x;
4470
4471 #ifdef JP
4472 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4473 #else
4474                                 if (blind) msg_format("%^s mumbles.", m_name);
4475 #endif
4476
4477 #ifdef JP
4478 else msg_format("%^s¤¬ËâË¡¤ÇÍ©µ´ÀïÂâ¤ò¾¤´­¤·¤¿¡ª", m_name);
4479 #else
4480                                 else msg_format("%^s magically summons rangers of Nazgul!", m_name);
4481 #endif
4482                                 msg_print(NULL);
4483
4484                                 for (k = 0; k < 30; k++)
4485                                 {
4486                                         if (!summon_possible(cy, cx) || !cave_floor_bold(cy, cx))
4487                                         {
4488                                                 int j;
4489                                                 for (j = 100; j > 0; j--)
4490                                                 {
4491                                                         scatter(&cy, &cx, y, x, 2, 0);
4492                                                         if (cave_floor_bold(cy, cx)) break;
4493                                                 }
4494                                                 if (!j) break;
4495                                         }
4496                                         if (!cave_floor_bold(cy, cx)) continue;
4497
4498                                         if (summon_named_creature(m_idx, cy, cx, MON_NAZGUL, mode))
4499                                         {
4500                                                 y = cy;
4501                                                 x = cx;
4502                                                 count++;
4503                                                 if (count == 1)
4504 #ifdef JP
4505 msg_format("¡ÖÍ©µ´ÀïÂâ%d¹æ¡¢¥Ê¥º¥°¥ë¡¦¥Ö¥é¥Ã¥¯¡ª¡×", count);
4506 #else
4507                                                         msg_format("A Nazgul says 'Nazgul-Rangers Number %d, Nazgul-Black!'",count);
4508 #endif
4509                                                 else
4510 #ifdef JP
4511 msg_format("¡ÖƱ¤¸¤¯%d¹æ¡¢¥Ê¥º¥°¥ë¡¦¥Ö¥é¥Ã¥¯¡ª¡×", count);
4512 #else
4513                                                         msg_format("Another one says 'Number %d, Nazgul-Black!'",count);
4514 #endif
4515                                                 msg_print(NULL);
4516                                         }
4517                                 }
4518 #ifdef JP
4519 msg_format("¡Ö%dɤ¤½¤í¤Ã¤Æ¡¢¥ê¥ó¥°¥ì¥ó¥¸¥ã¡¼¡ª¡×", count);
4520 #else
4521 msg_format("They say 'The %d meets! We are the Ring-Ranger!'.", count);
4522 #endif
4523                                 msg_print(NULL);
4524                         }
4525                         else
4526                         {
4527 #ifdef JP
4528 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4529 #else
4530                                 if (blind) msg_format("%^s mumbles.", m_name);
4531 #endif
4532
4533 #ifdef JP
4534 else msg_format("%^s¤¬ËâË¡¤Ç¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤·¤¿¡ª", m_name);
4535 #else
4536                                 else msg_format("%^s magically summons greater undead!", m_name);
4537 #endif
4538
4539                                 for (k = 0; k < s_num_6; k++)
4540                                 {
4541                                         count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
4542                                 }
4543                         }
4544                         if (blind && count)
4545                         {
4546 #ifdef JP
4547 msg_print("´Ö¶á¤Ç²¿¤«Â¿¤¯¤Î¤â¤Î¤¬Ç礤²ó¤ë²»¤¬Ê¹¤³¤¨¤ë¡£");
4548 #else
4549                                 msg_print("You hear many creepy things appear nearby.");
4550 #endif
4551
4552                         }
4553                         break;
4554                 }
4555
4556                 /* RF6_S_HI_DRAGON */
4557                 case 160+29:
4558                 {
4559                         disturb(1, 0);
4560 #ifdef JP
4561 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4562 #else
4563                         if (blind) msg_format("%^s mumbles.", m_name);
4564 #endif
4565
4566 #ifdef JP
4567 else msg_format("%^s¤¬ËâË¡¤Ç¸ÅÂå¥É¥é¥´¥ó¤ò¾¤´­¤·¤¿¡ª", m_name);
4568 #else
4569                         else msg_format("%^s magically summons ancient dragons!", m_name);
4570 #endif
4571
4572                         for (k = 0; k < s_num_4; k++)
4573                         {
4574                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_DRAGON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
4575                         }
4576                         if (blind && count)
4577                         {
4578 #ifdef JP
4579 msg_print("¿¤¯¤ÎÎ϶¯¤¤¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬Ê¹¤³¤¨¤ë¡£");
4580 #else
4581                                 msg_print("You hear many powerful things appear nearby.");
4582 #endif
4583
4584                         }
4585                         break;
4586                 }
4587
4588                 /* RF6_S_AMBERITES */
4589                 case 160+30:
4590                 {
4591                         disturb(1, 0);
4592 #ifdef JP
4593 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4594 #else
4595                         if (blind) msg_format("%^s mumbles.", m_name);
4596 #endif
4597
4598 #ifdef JP
4599 else msg_format("%^s¤¬¥¢¥ó¥Ð¡¼¤Î²¦Â²¤ò¾¤´­¤·¤¿¡ª", m_name);
4600 #else
4601                         else msg_format("%^s magically summons Lords of Amber!", m_name);
4602 #endif
4603
4604
4605
4606                         for (k = 0; k < s_num_4; k++)
4607                         {
4608                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_AMBERITES, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
4609                         }
4610                         if (blind && count)
4611                         {
4612 #ifdef JP
4613 msg_print("ÉÔ»à¤Î¼Ô¤¬¶á¤¯¤Ë¸½¤ì¤ë¤Î¤¬Ê¹¤³¤¨¤¿¡£");
4614 #else
4615                                 msg_print("You hear immortal beings appear nearby.");
4616 #endif
4617
4618                         }
4619                         break;
4620                 }
4621
4622                 /* RF6_S_UNIQUE */
4623                 case 160+31:
4624                 {
4625                         disturb(1, 0);
4626 #ifdef JP
4627 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4628 #else
4629                         if (blind) msg_format("%^s mumbles.", m_name);
4630 #endif
4631
4632 #ifdef JP
4633 else msg_format("%^s¤¬ËâË¡¤ÇÆÃÊ̤ʶ¯Å¨¤ò¾¤´­¤·¤¿¡ª", m_name);
4634 #else
4635                         else msg_format("%^s magically summons special opponents!", m_name);
4636 #endif
4637
4638                         for (k = 0; k < s_num_4; k++)
4639                         {
4640                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_UNIQUE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
4641                         }
4642                         if (r_ptr->flags3 & RF3_GOOD)
4643                         {
4644                                 for (k = count; k < s_num_4; k++)
4645                                 {
4646                                         count += summon_specific(m_idx, y, x, rlev, SUMMON_ANGEL, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
4647                                 }
4648                         }
4649                         else
4650                         {
4651                                 for (k = count; k < s_num_4; k++)
4652                                 {
4653                                         count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
4654                                 }
4655                         }
4656                         if (blind && count)
4657                         {
4658 #ifdef JP
4659 msg_print("¿¤¯¤ÎÎ϶¯¤¤¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬Ê¹¤³¤¨¤ë¡£");
4660 #else
4661                                 msg_print("You hear many powerful things appear nearby.");
4662 #endif
4663
4664                         }
4665                         break;
4666                 }
4667         }
4668
4669         if ((p_ptr->action == ACTION_LEARN) && thrown_spell > 175)
4670         {
4671                 learn_spell(thrown_spell - 96);
4672         }
4673
4674         if (seen && maneable && !world_monster && (p_ptr->pclass == CLASS_IMITATOR))
4675         {
4676                 if (thrown_spell != 167)
4677                 {
4678                         if (p_ptr->mane_num == MAX_MANE)
4679                         {
4680                                 int i;
4681                                 p_ptr->mane_num--;
4682                                 for (i = 0;i < p_ptr->mane_num;i++)
4683                                 {
4684                                         p_ptr->mane_spell[i] = p_ptr->mane_spell[i+1];
4685                                         p_ptr->mane_dam[i] = p_ptr->mane_dam[i+1];
4686                                 }
4687                         }
4688                         p_ptr->mane_spell[p_ptr->mane_num] = thrown_spell - 96;
4689                         p_ptr->mane_dam[p_ptr->mane_num] = dam;
4690                         p_ptr->mane_num++;
4691                         new_mane = TRUE;
4692
4693                         p_ptr->redraw |= (PR_MANE);
4694                 }
4695         }
4696
4697         /* Remember what the monster did to us */
4698         if (seen)
4699         {
4700                 /* Inate spell */
4701                 if (thrown_spell < 32 * 4)
4702                 {
4703                         r_ptr->r_flags4 |= (1L << (thrown_spell - 32 * 3));
4704                         if (r_ptr->r_cast_inate < MAX_UCHAR) r_ptr->r_cast_inate++;
4705                 }
4706
4707                 /* Bolt or Ball */
4708                 else if (thrown_spell < 32 * 5)
4709                 {
4710                         r_ptr->r_flags5 |= (1L << (thrown_spell - 32 * 4));
4711                         if (r_ptr->r_cast_spell < MAX_UCHAR) r_ptr->r_cast_spell++;
4712                 }
4713
4714                 /* Special spell */
4715                 else if (thrown_spell < 32 * 6)
4716                 {
4717                         r_ptr->r_flags6 |= (1L << (thrown_spell - 32 * 5));
4718                         if (r_ptr->r_cast_spell < MAX_UCHAR) r_ptr->r_cast_spell++;
4719                 }
4720         }
4721
4722
4723         /* Always take note of monsters that kill you */
4724         if (p_ptr->is_dead && (r_ptr->r_deaths < MAX_SHORT) && !p_ptr->inside_arena)
4725         {
4726                 r_ptr->r_deaths++;
4727         }
4728
4729         /* A spell was cast */
4730         return (TRUE);
4731 }