OSDN Git Service

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