OSDN Git Service

randint() == 1, rand_int() == 0, rand_int() == 1 を全て one_in_()に、
[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                 reset_target(m_ptr);
1220                 return (FALSE);
1221         }
1222
1223         /* Cannot cast spells when nice */
1224         if (m_ptr->mflag & MFLAG_NICE) return (FALSE);
1225         if (!is_hostile(m_ptr)) return (FALSE);
1226
1227         /* Hack -- Extract the spell probability */
1228         chance = (r_ptr->freq_inate + r_ptr->freq_spell) / 2;
1229
1230         /* Not allowed to cast spells */
1231         if (!chance) return (FALSE);
1232
1233
1234         if (stupid_monsters)
1235         {
1236                 /* Only do spells occasionally */
1237                 if (rand_int(100) >= chance) return (FALSE);
1238         }
1239         else
1240         {
1241                 if (rand_int(100) >=  chance) return (FALSE);
1242
1243                 /* Sometimes forbid inate attacks (breaths) */
1244                 if (rand_int(100) >= (chance * 2)) no_inate = TRUE;
1245         }
1246
1247         /* XXX XXX XXX Handle "track_target" option (?) */
1248
1249
1250         /* Extract the racial spell flags */
1251         f4 = r_ptr->flags4;
1252         f5 = r_ptr->flags5;
1253         f6 = r_ptr->flags6;
1254
1255         /* Hack -- require projectable player */
1256         if (normal)
1257         {
1258                 /* Check range */
1259                 if ((m_ptr->cdis > MAX_RANGE) && !m_ptr->target_y) return (FALSE);
1260
1261                 /* Check path */
1262                 if (projectable(m_ptr->fy, m_ptr->fx, y, x))
1263                 {
1264                         /* Breath disintegration to the glyph */
1265                         if ((!cave_floor_bold(y,x)) && (r_ptr->flags4 & RF4_BR_DISI) && one_in_(2)) do_disi = TRUE;
1266                 }
1267
1268                 /* Check path to next grid */
1269                 else
1270                 {
1271                         bool success = FALSE;
1272
1273                         if ((r_ptr->flags4 & RF4_BR_DISI) &&
1274                             (m_ptr->cdis < MAX_RANGE/2) &&
1275                             in_disintegration_range(m_ptr->fy, m_ptr->fx, y, x) &&
1276                             (one_in_(10) || (projectable(y, x, m_ptr->fy, m_ptr->fx) && one_in_(2))))
1277                         {
1278                                 do_disi = TRUE;
1279                                 success = TRUE;
1280                         }
1281                         else
1282                         {
1283                                 int i;
1284                                 int tonari;
1285                                 int tonari_y[4][8] = {{-1,-1,-1,0,0,1,1,1},
1286                                                       {-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                                 int tonari_x[4][8] = {{-1,0,1,-1,1,-1,0,1},
1290                                                       {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
1294                                 if (m_ptr->fy < py && m_ptr->fx < px) tonari = 0;
1295                                 else if (m_ptr->fy < py) tonari = 1;
1296                                 else if (m_ptr->fx < px) tonari = 2;
1297                                 else tonari = 3;
1298
1299                                 for (i = 0; i < 8; i++)
1300                                 {
1301                                         int next_x = x + tonari_x[tonari][i];
1302                                         int next_y = y + tonari_y[tonari][i];
1303                                         cave_type *c_ptr;
1304
1305                                         /* Access the next grid */
1306                                         c_ptr = &cave[next_y][next_x];
1307
1308                                         /* Skip door, rubble, wall */
1309                                         if ((c_ptr->feat >= FEAT_DOOR_HEAD) && (c_ptr->feat <= FEAT_PERM_SOLID)) continue;
1310
1311                                         /* Skip tree */
1312                                         if (c_ptr->feat == FEAT_TREES) continue;
1313
1314                                         /* Skip mountain */
1315                                         if (c_ptr->feat == FEAT_MOUNTAIN) continue;
1316
1317                                         if (projectable(m_ptr->fy, m_ptr->fx, next_y, next_x))
1318                                         {
1319                                                 y = next_y;
1320                                                 x = next_x;
1321                                                 success = TRUE;
1322                                                 break;
1323                                         }
1324                                 }
1325                         }
1326
1327                         if (!success)
1328                         {
1329                                 if (m_ptr->target_y && m_ptr->target_x)
1330                                 {
1331                                         y = m_ptr->target_y;
1332                                         x = m_ptr->target_x;
1333                                         f4 &= (RF4_INDIRECT_MASK);
1334                                         f5 &= (RF5_INDIRECT_MASK);
1335                                         f6 &= (RF6_INDIRECT_MASK);
1336                                         success = TRUE;
1337                                 }
1338                         }
1339
1340                         /* No spells */
1341                         if (!success) return FALSE;
1342                 }
1343         }
1344
1345         reset_target(m_ptr);
1346
1347         /* Extract the monster level */
1348         rlev = ((r_ptr->level >= 1) ? r_ptr->level : 1);
1349
1350         if (!stupid_monsters)
1351         {
1352                 /* Forbid inate attacks sometimes */
1353                 if (no_inate) f4 &= 0x500000FF;
1354         }
1355
1356         if (!p_ptr->csp)
1357         {
1358                 f5 &= ~(RF5_DRAIN_MANA);
1359         }
1360         if ((p_ptr->pclass == CLASS_NINJA) && (r_ptr->flags3 & (RF3_UNDEAD | RF3_HURT_LITE)))
1361         {
1362                 f6 &= ~(RF6_DARKNESS);
1363         }
1364
1365         if (dun_level && (!p_ptr->inside_quest || (p_ptr->inside_quest < MIN_RANDOM_QUEST)) && (d_info[dungeon_type].flags1 & DF1_NO_MAGIC))
1366         {
1367                 f4 &= (RF4_NOMAGIC_MASK);
1368                 f5 &= (RF5_NOMAGIC_MASK);
1369                 f6 &= (RF6_NOMAGIC_MASK);
1370         }
1371
1372         /* Hack -- allow "desperate" spells */
1373         if ((r_ptr->flags2 & (RF2_SMART)) &&
1374                 (m_ptr->hp < m_ptr->maxhp / 10) &&
1375                 (rand_int(100) < 50))
1376         {
1377                 /* Require intelligent spells */
1378                 f4 &= (RF4_INT_MASK);
1379                 f5 &= (RF5_INT_MASK);
1380                 f6 &= (RF6_INT_MASK);
1381
1382                 /* No spells left */
1383                 if (!f4 && !f5 && !f6) return (FALSE);
1384         }
1385
1386         /* Remove the "ineffective" spells */
1387         remove_bad_spells(m_idx, &f4, &f5, &f6);
1388
1389         if (p_ptr->inside_arena)
1390         {
1391                 f4 &= ~(RF4_SUMMON_MASK);
1392                 f5 &= ~(RF5_SUMMON_MASK);
1393                 f6 &= ~(RF6_SUMMON_MASK);
1394         }
1395
1396         /* No spells left */
1397         if (!f4 && !f5 && !f6) return (FALSE);
1398
1399         if (!stupid_monsters)
1400         {
1401                 /* Check for a clean bolt shot */
1402                 if (((f4 & RF4_BOLT_MASK) ||
1403                      (f5 & RF5_BOLT_MASK) ||
1404                      (f6 & RF6_BOLT_MASK)) &&
1405                      !(r_ptr->flags2 & RF2_STUPID) &&
1406                      !clean_shot(m_ptr->fy, m_ptr->fx, py, px, FALSE))
1407                 {
1408                         /* Remove spells that will only hurt friends */
1409                         f4 &= ~(RF4_BOLT_MASK);
1410                         f5 &= ~(RF5_BOLT_MASK);
1411                         f6 &= ~(RF6_BOLT_MASK);
1412                 }
1413
1414                 /* Check for a possible summon */
1415                 if (((f4 & RF4_SUMMON_MASK) ||
1416                      (f5 & RF5_SUMMON_MASK) ||
1417                      (f6 & RF6_SUMMON_MASK)) &&
1418                      !(r_ptr->flags2 & RF2_STUPID) &&
1419                      !(summon_possible(y, x)))
1420                 {
1421                         /* Remove summoning spells */
1422                         f4 &= ~(RF4_SUMMON_MASK);
1423                         f5 &= ~(RF5_SUMMON_MASK);
1424                         f6 &= ~(RF6_SUMMON_MASK);
1425                 }
1426
1427                 /* No spells left */
1428                 if (!f4 && !f5 && !f6) return (FALSE);
1429         }
1430
1431         /* Extract the "inate" spells */
1432         for (k = 0; k < 32; k++)
1433         {
1434                 if (f4 & (1L << k)) spell[num++] = k + 32 * 3;
1435         }
1436
1437         /* Extract the "normal" spells */
1438         for (k = 0; k < 32; k++)
1439         {
1440                 if (f5 & (1L << k)) spell[num++] = k + 32 * 4;
1441         }
1442
1443         /* Extract the "bizarre" spells */
1444         for (k = 0; k < 32; k++)
1445         {
1446                 if (f6 & (1L << k)) spell[num++] = k + 32 * 5;
1447         }
1448
1449         /* No spells left */
1450         if (!num) return (FALSE);
1451
1452         /* Stop if player is dead or gone */
1453         if (!alive || death) return (FALSE);
1454
1455         /* Stop if player is leaving */
1456         if (p_ptr->leaving) return (FALSE);
1457
1458         /* Get the monster name (or "it") */
1459         monster_desc(m_name, m_ptr, 0x00);
1460
1461         /* Get the monster possessive ("his"/"her"/"its") */
1462         monster_desc(m_poss, m_ptr, 0x22);
1463
1464         /* Hack -- Get the "died from" name */
1465         monster_desc(ddesc, m_ptr, 0x88);
1466
1467         if (stupid_monsters)
1468         {
1469                 /* Choose a spell to cast */
1470                 thrown_spell = spell[rand_int(num)];
1471         }
1472         else
1473         {
1474                 int attempt = 10;
1475                 if (do_disi) thrown_spell = 96+31;
1476                 else
1477                 {
1478                         while(attempt--)
1479                         {
1480                                 thrown_spell = choose_attack_spell(m_idx, spell, num);
1481                                 if (thrown_spell) break;
1482                         }
1483                 }
1484
1485                 /* Abort if no spell was chosen */
1486                 if (!thrown_spell) return (FALSE);
1487
1488                 /* Calculate spell failure rate */
1489                 failrate = 25 - (rlev + 3) / 4;
1490
1491                 /* Hack -- Stupid monsters will never fail (for jellies and such) */
1492                 if (r_ptr->flags2 & RF2_STUPID) failrate = 0;
1493
1494                 /* Check for spell failure (inate attacks never fail) */
1495                 if ((thrown_spell >= 128) && ((m_ptr->stunned && one_in_(2)) || (rand_int(100) < failrate)))
1496                 {
1497                         disturb(1, 0);
1498                         /* Message */
1499                         if (thrown_spell != (160+7)) /* Not RF6_SPECIAL */
1500                         {
1501 #ifdef JP
1502 msg_format("%^s¤Ï¼öʸ¤ò¾§¤¨¤è¤¦¤È¤·¤¿¤¬¼ºÇÔ¤·¤¿¡£", m_name);
1503 #else
1504                                 msg_format("%^s tries to cast a spell, but fails.", m_name);
1505 #endif
1506                         }
1507
1508                         return (TRUE);
1509                 }
1510         }
1511
1512         /* Cast the spell. */
1513         switch (thrown_spell)
1514         {
1515                 /* RF4_SHRIEK */
1516                 case 96+0:
1517                 {
1518                         if (!direct) break;
1519                         disturb(1, 0);
1520 #ifdef JP
1521 msg_format("%^s¤¬¤«¤ó¹â¤¤¶âÀÚ¤êÀ¼¤ò¤¢¤²¤¿¡£", m_name);
1522 #else
1523                         msg_format("%^s makes a high pitched shriek.", m_name);
1524 #endif
1525
1526                         aggravate_monsters(m_idx);
1527                         break;
1528                 }
1529
1530                 /* RF4_XXX1 */
1531                 case 96+1:
1532                 {
1533                         /* XXX XXX XXX */
1534                         break;
1535                 }
1536
1537                 /* RF4_DISPEL */
1538                 case 96+2:
1539                 {
1540                         if (x!=px || y!=py) return (FALSE);
1541                         disturb(1, 0);
1542 #ifdef JP
1543                         if (blind) msg_format("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
1544                         else msg_format("%^s¤¬ËâÎϾõî¤Î¼öʸ¤òÇ°¤¸¤¿¡£", m_name);
1545 #else
1546                         if (blind) msg_format("%^s mumbles powerfully.", m_name);
1547                         else msg_format("%^s invokes a dispel magic.", m_name);
1548 #endif
1549                         set_fast(0, TRUE);
1550                         set_lightspeed(0, TRUE);
1551                         set_slow(0, TRUE);
1552                         set_shield(0, TRUE);
1553                         set_blessed(0, TRUE);
1554                         set_tsuyoshi(0, TRUE);
1555                         set_hero(0, TRUE);
1556                         set_shero(0, TRUE);
1557                         set_protevil(0, TRUE);
1558                         set_invuln(0, TRUE);
1559                         set_wraith_form(0, TRUE);
1560                         set_kabenuke(0, TRUE);
1561                         set_tim_res_nether(0, TRUE);
1562                         set_tim_res_time(0, TRUE);
1563                         /* by henkma */
1564                         set_tim_reflect(0,TRUE);
1565                         set_multishadow(0,TRUE);
1566                         set_dustrobe(0,TRUE);
1567
1568                         set_tim_invis(0, TRUE);
1569                         set_tim_infra(0, TRUE);
1570                         set_tim_esp(0, TRUE);
1571                         set_tim_regen(0, TRUE);
1572                         set_tim_stealth(0, TRUE);
1573                         set_tim_ffall(0, TRUE);
1574                         set_tim_sh_touki(0, TRUE);
1575                         set_tim_sh_fire(0, TRUE);
1576                         set_magicdef(0, TRUE);
1577                         set_resist_magic(0, TRUE);
1578                         set_oppose_acid(0, TRUE);
1579                         set_oppose_elec(0, TRUE);
1580                         set_oppose_fire(0, TRUE);
1581                         set_oppose_cold(0, TRUE);
1582                         set_oppose_pois(0, TRUE);
1583                         set_ultimate_res(0, TRUE);
1584                         set_mimic(0, 0, TRUE);
1585                         set_ele_attack(0, 0);
1586                         set_ele_immune(0, 0);
1587                         /* Cancel glowing hands */
1588                         if (p_ptr->special_attack & ATTACK_CONFUSE)
1589                         {
1590                                 p_ptr->special_attack &= ~(ATTACK_CONFUSE);
1591 #ifdef JP
1592                                 msg_print("¼ê¤Îµ±¤­¤¬¤Ê¤¯¤Ê¤Ã¤¿¡£");
1593 #else
1594                                 msg_print("Your hands stop glowing.");
1595 #endif
1596
1597                         }
1598                         if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0]))
1599                         {
1600                                 p_ptr->magic_num1[1] = p_ptr->magic_num1[0];
1601                                 p_ptr->magic_num1[0] = 0;
1602 #ifdef JP
1603                                 msg_print("²Î¤¬ÅÓÀڤ줿¡£");
1604 #else
1605                                 msg_print("Your singing is interrupted.");
1606 #endif
1607                                 p_ptr->action = ACTION_NONE;
1608
1609                                 /* Recalculate bonuses */
1610                                 p_ptr->update |= (PU_BONUS | PU_HP);
1611
1612                                 /* Redraw map */
1613                                 p_ptr->redraw |= (PR_MAP | PR_STATUS | PR_STATE);
1614
1615                                 /* Update monsters */
1616                                 p_ptr->update |= (PU_MONSTERS);
1617
1618                                 /* Window stuff */
1619                                 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
1620
1621                                 p_ptr->energy -= 100;
1622                         }
1623                         if (p_ptr->riding)
1624                         {
1625                                 m_list[p_ptr->riding].invulner = 0;
1626                                 m_list[p_ptr->riding].fast = 0;
1627                                 m_list[p_ptr->riding].slow = 0;
1628                                 p_ptr->update |= PU_BONUS;
1629                                 if (p_ptr->health_who == p_ptr->riding) p_ptr->redraw |= PR_HEALTH;
1630                                 p_ptr->redraw |= (PR_UHEALTH);
1631                         }
1632
1633 #ifdef JP
1634                         if ((p_ptr->pseikaku == SEIKAKU_COMBAT) || (inventory[INVEN_BOW].name1 == ART_CRIMSON))
1635                                 msg_print("¤ä¤ê¤ä¤¬¤Ã¤¿¤Ê¡ª");
1636 #endif
1637                         learn_spell(MS_DISPEL);
1638                         break;
1639                 }
1640
1641                 /* RF4_XXX4X4 */
1642                 case 96+3:
1643                 {
1644                         disturb(1, 0);
1645 #ifdef JP
1646 if (blind) msg_format("%^s¤¬²¿¤«¤ò¼Í¤Ã¤¿¡£", m_name);
1647 #else
1648                         if (blind) msg_format("%^s shoots something.", m_name);
1649 #endif
1650
1651 #ifdef JP
1652 else msg_format("%^s¤¬¥í¥±¥Ã¥È¤òȯ¼Í¤·¤¿¡£", m_name);
1653 #else
1654                         else msg_format("%^s fires a rocket.", m_name);
1655 #endif
1656
1657                         dam = ((m_ptr->hp / 4) > 800 ? 800 : (m_ptr->hp / 4));
1658                         breath(y, x, m_idx, GF_ROCKET,
1659                                 dam, 2, FALSE, MS_ROCKET, learnable);
1660                         update_smart_learn(m_idx, DRS_SHARD);
1661                         break;
1662                 }
1663
1664                 /* RF4_ARROW_1 */
1665                 case 96+4:
1666                 {
1667                         if (x!=px || y!=py) return (FALSE);
1668                         disturb(1, 0);
1669 #ifdef JP
1670 if (blind) msg_format("%^s¤¬´ñ̯¤Ê²»¤òȯ¤·¤¿¡£", m_name);
1671 #else
1672                         if (blind) msg_format("%^s makes a strange noise.", m_name);
1673 #endif
1674
1675 #ifdef JP
1676 else msg_format("%^s¤¬Ìð¤òÊü¤Ã¤¿¡£", m_name);
1677 #else
1678                         else msg_format("%^s fires an arrow.", m_name);
1679 #endif
1680
1681                         dam = damroll(2, 5);
1682                         bolt(m_idx, GF_ARROW, dam, MS_ARROW_1, learnable);
1683                         update_smart_learn(m_idx, DRS_REFLECT);
1684                         break;
1685                 }
1686
1687                 /* RF4_ARROW_2 */
1688                 case 96+5:
1689                 {
1690                         if (x!=px || y!=py) return (FALSE);
1691                         disturb(1, 0);
1692 #ifdef JP
1693 if (blind) msg_format("%^s¤¬´ñ̯¤Ê²»¤òȯ¤·¤¿¡£", m_name);
1694 #else
1695                         if (blind) msg_format("%^s makes a strange noise.", m_name);
1696 #endif
1697
1698 #ifdef JP
1699 else msg_format("%^s¤¬Ìð¤òÊü¤Ã¤¿¡£", m_name);
1700 #else
1701                         else msg_format("%^s fires an arrow!", m_name);
1702 #endif
1703
1704                         dam = damroll(3, 6);
1705                         bolt(m_idx, GF_ARROW, dam, MS_ARROW_2, learnable);
1706                         update_smart_learn(m_idx, DRS_REFLECT);
1707                         break;
1708                 }
1709
1710                 /* RF4_ARROW_3 */
1711                 case 96+6:
1712                 {
1713                         if (x!=px || y!=py) return (FALSE);
1714                         disturb(1, 0);
1715 #ifdef JP
1716 if (blind) msg_format("%^s¤¬´ñ̯¤Ê²»¤òȯ¤·¤¿¡£", m_name);
1717 #else
1718                         if (blind) msg_format("%^s makes a strange noise.", m_name);
1719 #endif
1720
1721 #ifdef JP
1722                         else msg_format("%s¤¬¥Ü¥ë¥È¤ò·â¤Ã¤¿¡£", m_name);
1723 #else
1724                         else msg_format("%^s fires a bolt.", m_name);
1725 #endif
1726                         dam = damroll(5, 6);
1727                         bolt(m_idx, GF_ARROW, dam, MS_ARROW_3, learnable);
1728                         update_smart_learn(m_idx, DRS_REFLECT);
1729                         break;
1730                 }
1731
1732                 /* RF4_ARROW_4 */
1733                 case 96+7:
1734                 {
1735                         if (x!=px || y!=py) return (FALSE);
1736                         disturb(1, 0);
1737 #ifdef JP
1738 if (blind) msg_format("%^s¤¬´ñ̯¤Ê²»¤òȯ¤·¤¿¡£", m_name);
1739 #else
1740                         if (blind) msg_format("%^s makes a strange noise.", m_name);
1741 #endif
1742
1743 #ifdef JP
1744                         else msg_format("%s¤¬¥Ü¥ë¥È¤ò·â¤Ã¤¿¡£", m_name);
1745 #else
1746                         else msg_format("%^s fires a bolt.", m_name);
1747 #endif
1748                         dam = damroll(7, 6);
1749                         bolt(m_idx, GF_ARROW, dam, MS_ARROW_4, learnable);
1750                         update_smart_learn(m_idx, DRS_REFLECT);
1751                         break;
1752                 }
1753
1754                 /* RF4_BR_ACID */
1755                 case 96+8:
1756                 {
1757                         disturb(1, 0);
1758 #ifdef JP
1759 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1760 #else
1761                         if (blind) msg_format("%^s breathes.", m_name);
1762 #endif
1763
1764 #ifdef JP
1765 else msg_format("%^s¤¬»À¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1766 #else
1767                         else msg_format("%^s breathes acid.", m_name);
1768 #endif
1769
1770                         dam = ((m_ptr->hp / 3) > 1600 ? 1600 : (m_ptr->hp / 3));
1771                         breath(y, x, m_idx, GF_ACID, dam, 0, TRUE, MS_BR_ACID, learnable);
1772                         update_smart_learn(m_idx, DRS_ACID);
1773                         break;
1774                 }
1775
1776                 /* RF4_BR_ELEC */
1777                 case 96+9:
1778                 {
1779                         disturb(1, 0);
1780 #ifdef JP
1781 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1782 #else
1783                         if (blind) msg_format("%^s breathes.", m_name);
1784 #endif
1785
1786 #ifdef JP
1787 else msg_format("%^s¤¬°ðºÊ¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1788 #else
1789                         else msg_format("%^s breathes lightning.", m_name);
1790 #endif
1791
1792                         dam = ((m_ptr->hp / 3) > 1600 ? 1600 : (m_ptr->hp / 3));
1793                         breath(y, x, m_idx, GF_ELEC, dam,0, TRUE, MS_BR_ELEC, learnable);
1794                         update_smart_learn(m_idx, DRS_ELEC);
1795                         break;
1796                 }
1797
1798                 /* RF4_BR_FIRE */
1799                 case 96+10:
1800                 {
1801                         disturb(1, 0);
1802 #ifdef JP
1803 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1804 #else
1805                         if (blind) msg_format("%^s breathes.", m_name);
1806 #endif
1807
1808 #ifdef JP
1809 else msg_format("%^s¤¬²Ð±ê¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1810 #else
1811                         else msg_format("%^s breathes fire.", m_name);
1812 #endif
1813
1814                         dam = ((m_ptr->hp / 3) > 1600 ? 1600 : (m_ptr->hp / 3));
1815                         breath(y, x, m_idx, GF_FIRE, dam,0, TRUE, MS_BR_FIRE, learnable);
1816                         update_smart_learn(m_idx, DRS_FIRE);
1817                         break;
1818                 }
1819
1820                 /* RF4_BR_COLD */
1821                 case 96+11:
1822                 {
1823                         disturb(1, 0);
1824 #ifdef JP
1825 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1826 #else
1827                         if (blind) msg_format("%^s breathes.", m_name);
1828 #endif
1829
1830 #ifdef JP
1831 else msg_format("%^s¤¬Î䵤¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1832 #else
1833                         else msg_format("%^s breathes frost.", m_name);
1834 #endif
1835
1836                         dam = ((m_ptr->hp / 3) > 1600 ? 1600 : (m_ptr->hp / 3));
1837                         breath(y, x, m_idx, GF_COLD, dam,0, TRUE, MS_BR_COLD, learnable);
1838                         update_smart_learn(m_idx, DRS_COLD);
1839                         break;
1840                 }
1841
1842                 /* RF4_BR_POIS */
1843                 case 96+12:
1844                 {
1845                         disturb(1, 0);
1846 #ifdef JP
1847 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1848 #else
1849                         if (blind) msg_format("%^s breathes.", m_name);
1850 #endif
1851
1852 #ifdef JP
1853 else msg_format("%^s¤¬¥¬¥¹¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1854 #else
1855                         else msg_format("%^s breathes gas.", m_name);
1856 #endif
1857
1858                         dam = ((m_ptr->hp / 3) > 800 ? 800 : (m_ptr->hp / 3));
1859                         breath(y, x, m_idx, GF_POIS, dam, 0, TRUE, MS_BR_POIS, learnable);
1860                         update_smart_learn(m_idx, DRS_POIS);
1861                         break;
1862                 }
1863
1864
1865                 /* RF4_BR_NETH */
1866                 case 96+13:
1867                 {
1868                         disturb(1, 0);
1869 #ifdef JP
1870 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1871 #else
1872                         if (blind) msg_format("%^s breathes.", m_name);
1873 #endif
1874
1875 #ifdef JP
1876 else msg_format("%^s¤¬ÃϹö¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1877 #else
1878                         else msg_format("%^s breathes nether.", m_name);
1879 #endif
1880
1881                         dam = ((m_ptr->hp / 6) > 550 ? 550 : (m_ptr->hp / 6));
1882                         breath(y, x, m_idx, GF_NETHER, dam,0, TRUE, MS_BR_NETHER, learnable);
1883                         update_smart_learn(m_idx, DRS_NETH);
1884                         break;
1885                 }
1886
1887                 /* RF4_BR_LITE */
1888                 case 96+14:
1889                 {
1890                         disturb(1, 0);
1891 #ifdef JP
1892 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1893 #else
1894                         if (blind) msg_format("%^s breathes.", m_name);
1895 #endif
1896
1897 #ifdef JP
1898 else msg_format("%^s¤¬Á®¸÷¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1899 #else
1900                         else msg_format("%^s breathes light.", m_name);
1901 #endif
1902
1903                         dam = ((m_ptr->hp / 6) > 400 ? 400 : (m_ptr->hp / 6));
1904                         breath(y, x, m_idx, GF_LITE, dam,0, TRUE, MS_BR_LITE, learnable);
1905                         update_smart_learn(m_idx, DRS_LITE);
1906                         break;
1907                 }
1908
1909                 /* RF4_BR_DARK */
1910                 case 96+15:
1911                 {
1912                         disturb(1, 0);
1913 #ifdef JP
1914 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1915 #else
1916                         if (blind) msg_format("%^s breathes.", m_name);
1917 #endif
1918
1919 #ifdef JP
1920 else msg_format("%^s¤¬°Å¹õ¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1921 #else
1922                         else msg_format("%^s breathes darkness.", m_name);
1923 #endif
1924
1925                         dam = ((m_ptr->hp / 6) > 400 ? 400 : (m_ptr->hp / 6));
1926                         breath(y, x, m_idx, GF_DARK, dam,0, TRUE, MS_BR_DARK, learnable);
1927                         update_smart_learn(m_idx, DRS_DARK);
1928                         break;
1929                 }
1930
1931                 /* RF4_BR_CONF */
1932                 case 96+16:
1933                 {
1934                         disturb(1, 0);
1935 #ifdef JP
1936 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1937 #else
1938                         if (blind) msg_format("%^s breathes.", m_name);
1939 #endif
1940
1941 #ifdef JP
1942 else msg_format("%^s¤¬º®Íð¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1943 #else
1944                         else msg_format("%^s breathes confusion.", m_name);
1945 #endif
1946
1947                         dam = ((m_ptr->hp / 6) > 450 ? 450 : (m_ptr->hp / 6));
1948                         breath(y, x, m_idx, GF_CONFUSION, dam,0, TRUE, MS_BR_CONF, learnable);
1949                         update_smart_learn(m_idx, DRS_CONF);
1950                         break;
1951                 }
1952
1953                 /* RF4_BR_SOUN */
1954                 case 96+17:
1955                 {
1956                         disturb(1, 0);
1957                         if (m_ptr->r_idx == MON_JAIAN)
1958 #ifdef JP
1959                                 msg_format("¡Ö¥Ü¥©¥¨¡Á¡Á¡Á¡Á¡Á¡Á¡×");
1960 #else
1961                                 msg_format("'Booooeeeeee'");
1962 #endif
1963 #ifdef JP
1964 else if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1965 #else
1966                         else if (blind) msg_format("%^s breathes.", m_name);
1967 #endif
1968
1969 #ifdef JP
1970 else msg_format("%^s¤¬¹ì²»¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1971 #else
1972                         else msg_format("%^s breathes sound.", m_name);
1973 #endif
1974
1975                         dam = ((m_ptr->hp / 6) > 450 ? 450 : (m_ptr->hp / 6));
1976                         breath(y, x, m_idx, GF_SOUND, dam,0, TRUE, MS_BR_SOUND, learnable);
1977                         update_smart_learn(m_idx, DRS_SOUND);
1978                         break;
1979                 }
1980
1981                 /* RF4_BR_CHAO */
1982                 case 96+18:
1983                 {
1984                         disturb(1, 0);
1985 #ifdef JP
1986 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1987 #else
1988                         if (blind) msg_format("%^s breathes.", m_name);
1989 #endif
1990
1991 #ifdef JP
1992 else msg_format("%^s¤¬¥«¥ª¥¹¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
1993 #else
1994                         else msg_format("%^s breathes chaos.", m_name);
1995 #endif
1996
1997                         dam = ((m_ptr->hp / 6) > 600 ? 600 : (m_ptr->hp / 6));
1998                         breath(y, x, m_idx, GF_CHAOS, dam,0, TRUE, MS_BR_CHAOS, learnable);
1999                         update_smart_learn(m_idx, DRS_CHAOS);
2000                         break;
2001                 }
2002
2003                 /* RF4_BR_DISE */
2004                 case 96+19:
2005                 {
2006                         disturb(1, 0);
2007 #ifdef JP
2008 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2009 #else
2010                         if (blind) msg_format("%^s breathes.", m_name);
2011 #endif
2012
2013 #ifdef JP
2014 else msg_format("%^s¤¬Îô²½¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2015 #else
2016                         else msg_format("%^s breathes disenchantment.", m_name);
2017 #endif
2018
2019                         dam = ((m_ptr->hp / 6) > 500 ? 500 : (m_ptr->hp / 6));
2020                         breath(y, x, m_idx, GF_DISENCHANT, dam,0, TRUE, MS_BR_DISEN, learnable);
2021                         update_smart_learn(m_idx, DRS_DISEN);
2022                         break;
2023                 }
2024
2025                 /* RF4_BR_NEXU */
2026                 case 96+20:
2027                 {
2028                         disturb(1, 0);
2029 #ifdef JP
2030 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2031 #else
2032                         if (blind) msg_format("%^s breathes.", m_name);
2033 #endif
2034
2035 #ifdef JP
2036 else msg_format("%^s¤¬°ø²Ìº®Íð¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2037 #else
2038                         else msg_format("%^s breathes nexus.", m_name);
2039 #endif
2040
2041                         dam = ((m_ptr->hp / 3) > 250 ? 250 : (m_ptr->hp / 3));
2042                         breath(y, x, m_idx, GF_NEXUS, dam,0, TRUE, MS_BR_NEXUS, learnable);
2043                         update_smart_learn(m_idx, DRS_NEXUS);
2044                         break;
2045                 }
2046
2047                 /* RF4_BR_TIME */
2048                 case 96+21:
2049                 {
2050                         disturb(1, 0);
2051 #ifdef JP
2052 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2053 #else
2054                         if (blind) msg_format("%^s breathes.", m_name);
2055 #endif
2056
2057 #ifdef JP
2058 else msg_format("%^s¤¬»þ´ÖµÕž¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2059 #else
2060                         else msg_format("%^s breathes time.", m_name);
2061 #endif
2062
2063                         dam = ((m_ptr->hp / 3) > 150 ? 150 : (m_ptr->hp / 3));
2064                         breath(y, x, m_idx, GF_TIME, dam,0, TRUE, MS_BR_TIME, learnable);
2065                         break;
2066                 }
2067
2068                 /* RF4_BR_INER */
2069                 case 96+22:
2070                 {
2071                         disturb(1, 0);
2072 #ifdef JP
2073 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2074 #else
2075                         if (blind) msg_format("%^s breathes.", m_name);
2076 #endif
2077
2078 #ifdef JP
2079 else msg_format("%^s¤¬ÃÙÆߤΥ֥쥹¤òÅǤ¤¤¿¡£", m_name);
2080 #else
2081                         else msg_format("%^s breathes inertia.", m_name);
2082 #endif
2083
2084                         dam = ((m_ptr->hp / 6) > 200 ? 200 : (m_ptr->hp / 6));
2085                         breath(y, x, m_idx, GF_INERTIA, dam,0, TRUE, MS_BR_INERTIA, learnable);
2086                         break;
2087                 }
2088
2089                 /* RF4_BR_GRAV */
2090                 case 96+23:
2091                 {
2092                         disturb(1, 0);
2093 #ifdef JP
2094 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2095 #else
2096                         if (blind) msg_format("%^s breathes.", m_name);
2097 #endif
2098
2099 #ifdef JP
2100 else msg_format("%^s¤¬½ÅÎϤΥ֥쥹¤òÅǤ¤¤¿¡£", m_name);
2101 #else
2102                         else msg_format("%^s breathes gravity.", m_name);
2103 #endif
2104
2105                         dam = ((m_ptr->hp / 3) > 200 ? 200 : (m_ptr->hp / 3));
2106                         breath(y, x, m_idx, GF_GRAVITY, dam,0, TRUE, MS_BR_GRAVITY, learnable);
2107                         break;
2108                 }
2109
2110                 /* RF4_BR_SHAR */
2111                 case 96+24:
2112                 {
2113                         disturb(1, 0);
2114                         if (m_ptr->r_idx == MON_BOTEI)
2115 #ifdef JP
2116                                 msg_format("¡Ö¥ÜÄë¥Ó¥ë¥«¥Ã¥¿¡¼¡ª¡ª¡ª¡×");
2117 #else
2118                                 msg_format("'Boty-Build cutter!!!'");
2119 #endif
2120 #ifdef JP
2121 else if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2122 #else
2123                         else if (blind) msg_format("%^s breathes.", m_name);
2124 #endif
2125
2126 #ifdef JP
2127 else msg_format("%^s¤¬ÇËÊҤΥ֥쥹¤òÅǤ¤¤¿¡£", m_name);
2128 #else
2129                         else msg_format("%^s breathes shards.", m_name);
2130 #endif
2131
2132                         dam = ((m_ptr->hp / 6) > 500 ? 500 : (m_ptr->hp / 6));
2133                         breath(y, x, m_idx, GF_SHARDS, dam,0, TRUE, MS_BR_SHARDS, learnable);
2134                         update_smart_learn(m_idx, DRS_SHARD);
2135                         break;
2136                 }
2137
2138                 /* RF4_BR_PLAS */
2139                 case 96+25:
2140                 {
2141                         disturb(1, 0);
2142 #ifdef JP
2143 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2144 #else
2145                         if (blind) msg_format("%^s breathes.", m_name);
2146 #endif
2147
2148 #ifdef JP
2149 else msg_format("%^s¤¬¥×¥é¥º¥Þ¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2150 #else
2151                         else msg_format("%^s breathes plasma.", m_name);
2152 #endif
2153
2154                         dam = ((m_ptr->hp / 6) > 150 ? 150 : (m_ptr->hp / 6));
2155                         breath(y, x, m_idx, GF_PLASMA, dam,0, TRUE, MS_BR_PLASMA, learnable);
2156                         break;
2157                 }
2158
2159                 /* RF4_BR_WALL */
2160                 case 96+26:
2161                 {
2162                         disturb(1, 0);
2163 #ifdef JP
2164 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2165 #else
2166                         if (blind) msg_format("%^s breathes.", m_name);
2167 #endif
2168
2169 #ifdef JP
2170 else msg_format("%^s¤¬¥Õ¥©¡¼¥¹¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2171 #else
2172                         else msg_format("%^s breathes force.", m_name);
2173 #endif
2174
2175                         dam = ((m_ptr->hp / 6) > 200 ? 200 : (m_ptr->hp / 6));
2176                         breath(y, x, m_idx, GF_FORCE, dam,0, TRUE, MS_BR_FORCE, learnable);
2177                         break;
2178                 }
2179
2180                 /* RF4_BR_MANA */
2181                 case 96+27:
2182                 {
2183                         disturb(1, 0);
2184 #ifdef JP
2185 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2186 #else
2187                         if (blind) msg_format("%^s breathes.", m_name);
2188 #endif
2189
2190 #ifdef JP
2191 else msg_format("%^s¤¬ËâÎϤΥ֥쥹¤òÅǤ¤¤¿¡£", m_name);
2192 #else
2193                         else msg_format("%^s breathes mana.", m_name);
2194 #endif
2195                         dam = ((m_ptr->hp / 3) > 250 ? 250 : (m_ptr->hp / 3));
2196                         breath(y, x, m_idx, GF_MANA, dam,0, TRUE, MS_BR_MANA, learnable);
2197                         break;
2198                 }
2199
2200                 /* RF4_BA_NUKE */
2201                 case 96+28:
2202                 {
2203                         disturb(1, 0);
2204 #ifdef JP
2205 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2206 #else
2207                         if (blind) msg_format("%^s mumbles.", m_name);
2208 #endif
2209
2210 #ifdef JP
2211 else msg_format("%^s¤¬Êü¼Íǽµå¤òÊü¤Ã¤¿¡£", m_name);
2212 #else
2213                         else msg_format("%^s casts a ball of radiation.", m_name);
2214 #endif
2215
2216                         dam = (rlev + damroll(10, 6)) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2217                         breath(y, x, m_idx, GF_NUKE, dam, 2, FALSE, MS_BALL_NUKE, learnable);
2218                         update_smart_learn(m_idx, DRS_POIS);
2219                         break;
2220                 }
2221
2222                 /* RF4_BR_NUKE */
2223                 case 96+29:
2224                 {
2225                         disturb(1, 0);
2226 #ifdef JP
2227 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2228 #else
2229                         if (blind) msg_format("%^s breathes.", m_name);
2230 #endif
2231
2232 #ifdef JP
2233 else msg_format("%^s¤¬Êü¼ÍÀ­ÇÑ´þʪ¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2234 #else
2235                         else msg_format("%^s breathes toxic waste.", m_name);
2236 #endif
2237
2238                         dam = ((m_ptr->hp / 3) > 800 ? 800 : (m_ptr->hp / 3));
2239                         breath(y, x, m_idx, GF_NUKE, dam,0, TRUE, MS_BR_NUKE, learnable);
2240                         update_smart_learn(m_idx, DRS_POIS);
2241                         break;
2242                 }
2243
2244                 /* RF4_BA_CHAO */
2245                 case 96+30:
2246                 {
2247                         disturb(1, 0);
2248 #ifdef JP
2249 if (blind) msg_format("%^s¤¬¶²¤í¤·¤²¤Ë¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2250 #else
2251                         if (blind) msg_format("%^s mumbles frighteningly.", m_name);
2252 #endif
2253
2254 #ifdef JP
2255 else msg_format("%^s¤¬½ã¥í¥°¥ë¥¹¤òÊü¤Ã¤¿¡£", m_name);/*nuke me*/
2256 #else
2257                         else msg_format("%^s invokes a raw Logrus.", m_name);
2258 #endif
2259
2260                         dam = ((r_ptr->flags2 & RF2_POWERFUL) ? (rlev * 3) : (rlev * 2))+ damroll(10, 10);
2261                         breath(y, x, m_idx, GF_CHAOS, dam, 4, FALSE, MS_BALL_CHAOS, learnable);
2262                         update_smart_learn(m_idx, DRS_CHAOS);
2263                         break;
2264                 }
2265
2266                 /* RF4_BR_DISI */
2267                 case 96+31:
2268                 {
2269                         disturb(1, 0);
2270 #ifdef JP
2271 if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2272 #else
2273                         if (blind) msg_format("%^s breathes.", m_name);
2274 #endif
2275
2276 #ifdef JP
2277 else msg_format("%^s¤¬Ê¬²ò¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name);
2278 #else
2279                         else msg_format("%^s breathes disintegration.", m_name);
2280 #endif
2281
2282                         dam = ((m_ptr->hp / 6) > 150 ? 150 : (m_ptr->hp / 6));
2283                         breath(y, x, m_idx, GF_DISINTEGRATE, dam,0, TRUE, MS_BR_DISI, learnable);
2284                         break;
2285                 }
2286
2287
2288
2289                 /* RF5_BA_ACID */
2290                 case 128+0:
2291                 {
2292                         disturb(1, 0);
2293 #ifdef JP
2294 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2295 #else
2296                         if (blind) msg_format("%^s mumbles.", m_name);
2297 #endif
2298
2299 #ifdef JP
2300 else msg_format("%^s¤¬¥¢¥·¥Ã¥É¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
2301 #else
2302                         else msg_format("%^s casts an acid ball.", m_name);
2303 #endif
2304
2305                         dam = (randint(rlev * 3) + 15) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2306                         breath(y, x, m_idx, GF_ACID, dam, 2, FALSE, MS_BALL_ACID, learnable);
2307                         update_smart_learn(m_idx, DRS_ACID);
2308                         break;
2309                 }
2310
2311                 /* RF5_BA_ELEC */
2312                 case 128+1:
2313                 {
2314                         disturb(1, 0);
2315 #ifdef JP
2316 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2317 #else
2318                         if (blind) msg_format("%^s mumbles.", m_name);
2319 #endif
2320
2321 #ifdef JP
2322 else msg_format("%^s¤¬¥µ¥ó¥À¡¼¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
2323 #else
2324                         else msg_format("%^s casts a lightning ball.", m_name);
2325 #endif
2326
2327                         dam = (randint(rlev * 3 / 2) + 8) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2328                         breath(y, x, m_idx, GF_ELEC, dam, 2, FALSE, MS_BALL_ELEC, learnable);
2329                         update_smart_learn(m_idx, DRS_ELEC);
2330                         break;
2331                 }
2332
2333                 /* RF5_BA_FIRE */
2334                 case 128+2:
2335                 {
2336                         disturb(1, 0);
2337
2338                         if (m_ptr->r_idx == MON_ROLENTO)
2339                         {
2340 #ifdef JP
2341                                 if (blind)
2342                                         msg_format("%s¤¬²¿¤«¤òÅꤲ¤¿¡£", m_name);
2343                                 else 
2344                                         msg_format("%s¤Ï¼êÜØÃƤòÅꤲ¤¿¡£", m_name);
2345 #else
2346                                 if (blind)
2347                                         msg_format("%^s throws something.", m_name);
2348                                 else
2349                                         msg_format("%^s throws a hand grenade.", m_name);
2350 #endif
2351                         }
2352                         else
2353                         {
2354 #ifdef JP
2355 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2356 #else
2357                                 if (blind) msg_format("%^s mumbles.", m_name);
2358 #endif
2359
2360 #ifdef JP
2361 else msg_format("%^s¤¬¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
2362 #else
2363                                 else msg_format("%^s casts a fire ball.", m_name);
2364 #endif
2365                         }
2366
2367                         dam = (randint(rlev * 7 / 2) + 10) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2368                         breath(y, x, m_idx, GF_FIRE, dam, 2, FALSE, MS_BALL_FIRE, learnable);
2369                         update_smart_learn(m_idx, DRS_FIRE);
2370                         break;
2371                 }
2372
2373                 /* RF5_BA_COLD */
2374                 case 128+3:
2375                 {
2376                         disturb(1, 0);
2377 #ifdef JP
2378 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2379 #else
2380                         if (blind) msg_format("%^s mumbles.", m_name);
2381 #endif
2382
2383 #ifdef JP
2384 else msg_format("%^s¤¬¥¢¥¤¥¹¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
2385 #else
2386                         else msg_format("%^s casts a frost ball.", m_name);
2387 #endif
2388
2389                         dam = (randint(rlev * 3 / 2) + 10) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2390                         breath(y, x, m_idx, GF_COLD, dam, 2, FALSE, MS_BALL_COLD, learnable);
2391                         update_smart_learn(m_idx, DRS_COLD);
2392                         break;
2393                 }
2394
2395                 /* RF5_BA_POIS */
2396                 case 128+4:
2397                 {
2398                         disturb(1, 0);
2399 #ifdef JP
2400 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2401 #else
2402                         if (blind) msg_format("%^s mumbles.", m_name);
2403 #endif
2404
2405 #ifdef JP
2406 else msg_format("%^s¤¬°­½­±À¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
2407 #else
2408                         else msg_format("%^s casts a stinking cloud.", m_name);
2409 #endif
2410
2411                         dam = damroll(12, 2) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2412                         breath(y, x, m_idx, GF_POIS, dam, 2, FALSE, MS_BALL_POIS, learnable);
2413                         update_smart_learn(m_idx, DRS_POIS);
2414                         break;
2415                 }
2416
2417                 /* RF5_BA_NETH */
2418                 case 128+5:
2419                 {
2420                         disturb(1, 0);
2421 #ifdef JP
2422 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2423 #else
2424                         if (blind) msg_format("%^s mumbles.", m_name);
2425 #endif
2426
2427 #ifdef JP
2428 else msg_format("%^s¤¬ÃϹöµå¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
2429 #else
2430                         else msg_format("%^s casts a nether ball.", m_name);
2431 #endif
2432
2433                         dam = 50 + damroll(10, 10) + (rlev * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1));
2434                         breath(y, x, m_idx, GF_NETHER, dam, 2, FALSE, MS_BALL_NETHER, learnable);
2435                         update_smart_learn(m_idx, DRS_NETH);
2436                         break;
2437                 }
2438
2439                 /* RF5_BA_WATE */
2440                 case 128+6:
2441                 {
2442                         disturb(1, 0);
2443 #ifdef JP
2444 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2445 #else
2446                         if (blind) msg_format("%^s mumbles.", m_name);
2447 #endif
2448
2449 #ifdef JP
2450 else msg_format("%^s¤¬Î®¤ì¤ë¤è¤¦¤Ê¿È¿¶¤ê¤ò¤·¤¿¡£", m_name);
2451 #else
2452                         else msg_format("%^s gestures fluidly.", m_name);
2453 #endif
2454
2455 #ifdef JP
2456 msg_print("¤¢¤Ê¤¿¤Ï±²´¬¤­¤Ë°û¤ß¹þ¤Þ¤ì¤¿¡£");
2457 #else
2458                         msg_print("You are engulfed in a whirlpool.");
2459 #endif
2460
2461                         dam = ((r_ptr->flags2 & RF2_POWERFUL) ? randint(rlev * 3) : randint(rlev * 2)) + 50;
2462                         breath(y, x, m_idx, GF_WATER, dam, 4, FALSE, MS_BALL_WATER, learnable);
2463                         break;
2464                 }
2465
2466                 /* RF5_BA_MANA */
2467                 case 128+7:
2468                 {
2469                         disturb(1, 0);
2470 #ifdef JP
2471 if (blind) msg_format("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2472 #else
2473                         if (blind) msg_format("%^s mumbles powerfully.", m_name);
2474 #endif
2475
2476 #ifdef JP
2477 else msg_format("%^s¤¬ËâÎϤÎÍò¤Î¼öʸ¤òÇ°¤¸¤¿¡£", m_name);
2478 #else
2479                         else msg_format("%^s invokes a mana storm.", m_name);
2480 #endif
2481
2482                         dam = (rlev * 4) + 50 + damroll(10, 10);
2483                         breath(y, x, m_idx, GF_MANA, dam, 4, FALSE, MS_BALL_MANA, learnable);
2484                         break;
2485                 }
2486
2487                 /* RF5_BA_DARK */
2488                 case 128+8:
2489                 {
2490                         disturb(1, 0);
2491 #ifdef JP
2492 if (blind) msg_format("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2493 #else
2494                         if (blind) msg_format("%^s mumbles powerfully.", m_name);
2495 #endif
2496
2497 #ifdef JP
2498 else msg_format("%^s¤¬°Å¹õ¤ÎÍò¤Î¼öʸ¤òÇ°¤¸¤¿¡£", m_name);
2499 #else
2500                         else msg_format("%^s invokes a darkness storm.", m_name);
2501 #endif
2502
2503                         dam = (rlev * 4) + 50 + damroll(10, 10);
2504                         breath(y, x, m_idx, GF_DARK, dam, 4, FALSE, MS_BALL_DARK, learnable);
2505                         update_smart_learn(m_idx, DRS_DARK);
2506                         break;
2507                 }
2508
2509                 /* RF5_DRAIN_MANA */
2510                 case 128+9:
2511                 {
2512                         if (x!=px || y!=py) return (FALSE);
2513                         if (!direct) break;
2514                         disturb(1, 0);
2515                         if (p_ptr->csp)
2516                         {
2517                                 int r1;
2518
2519                                 /* Basic message */
2520 #ifdef JP
2521 msg_format("%^s¤ËÀº¿À¥¨¥Í¥ë¥®¡¼¤òµÛ¤¤¼è¤é¤ì¤Æ¤·¤Þ¤Ã¤¿¡ª", m_name);
2522 #else
2523                                 msg_format("%^s draws psychic energy from you!", m_name);
2524 #endif
2525
2526
2527                                 /* Attack power */
2528                                 r1 = (randint(rlev) / 2) + 1;
2529
2530                                 /* Full drain */
2531                                 if (r1 >= p_ptr->csp)
2532                                 {
2533                                         r1 = p_ptr->csp;
2534                                         p_ptr->csp = 0;
2535                                         p_ptr->csp_frac = 0;
2536                                 }
2537
2538                                 /* Partial drain */
2539                                 else
2540                                 {
2541                                         p_ptr->csp -= r1;
2542                                 }
2543
2544                                 learn_spell(MS_DRAIN_MANA);
2545
2546                                 /* Redraw mana */
2547                                 p_ptr->redraw |= (PR_MANA);
2548
2549                                 /* Window stuff */
2550                                 p_ptr->window |= (PW_PLAYER);
2551                                 p_ptr->window |= (PW_SPELL);
2552
2553                                 /* Heal the monster */
2554                                 if (m_ptr->hp < m_ptr->maxhp)
2555                                 {
2556                                         /* Heal */
2557                                         m_ptr->hp += (6 * r1);
2558                                         if (m_ptr->hp > m_ptr->maxhp) m_ptr->hp = m_ptr->maxhp;
2559
2560                                         /* Redraw (later) if needed */
2561                                         if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
2562                                         if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
2563
2564                                         /* Special message */
2565                                         if (seen)
2566                                         {
2567 #ifdef JP
2568 msg_format("%^s¤Ïµ¤Ê¬¤¬Îɤµ¤½¤¦¤À¡£", m_name);
2569 #else
2570                                                 msg_format("%^s appears healthier.", m_name);
2571 #endif
2572
2573                                         }
2574                                 }
2575                         }
2576                         update_smart_learn(m_idx, DRS_MANA);
2577                         break;
2578                 }
2579
2580                 /* RF5_MIND_BLAST */
2581                 case 128+10:
2582                 {
2583                         if (x!=px || y!=py) return (FALSE);
2584                         if (!direct) break;
2585                         disturb(1, 0);
2586                         if (!seen)
2587                         {
2588 #ifdef JP
2589 msg_print("²¿¤«¤¬¤¢¤Ê¤¿¤ÎÀº¿À¤ËÇ°¤òÊü¤Ã¤Æ¤¤¤ë¤è¤¦¤À¡£");
2590 #else
2591                                 msg_print("You feel something focusing on your mind.");
2592 #endif
2593
2594                         }
2595                         else
2596                         {
2597 #ifdef JP
2598 msg_format("%^s¤¬¤¢¤Ê¤¿¤ÎÆ·¤ò¤¸¤Ã¤È¤Ë¤é¤ó¤Ç¤¤¤ë¡£", m_name);
2599 #else
2600                                 msg_format("%^s gazes deep into your eyes.", m_name);
2601 #endif
2602
2603                         }
2604
2605                         dam = damroll(7, 7);
2606                         if (rand_int(100 + rlev/2) < (MAX(5, p_ptr->skill_sav)))
2607                         {
2608 #ifdef JP
2609 msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
2610 #else
2611                                 msg_print("You resist the effects!");
2612 #endif
2613                                 learn_spell(MS_MIND_BLAST);
2614                         }
2615                         else
2616                         {
2617 #ifdef JP
2618 msg_print("ÎîŪ¥¨¥Í¥ë¥®¡¼¤ÇÀº¿À¤¬¹¶·â¤µ¤ì¤¿¡£");
2619 #else
2620                                 msg_print("Your mind is blasted by psyonic energy.");
2621 #endif
2622
2623                                 if (!p_ptr->resist_conf)
2624                                 {
2625                                         (void)set_confused(p_ptr->confused + rand_int(4) + 4);
2626                                 }
2627
2628                                 if (!p_ptr->resist_chaos && one_in_(3))
2629                                 {
2630                                         (void)set_image(p_ptr->image + rand_int(250) + 150);
2631                                 }
2632
2633                                 p_ptr->csp -= 50;
2634                                 if (p_ptr->csp < 0)
2635                                 {
2636                                         p_ptr->csp = 0;
2637                                         p_ptr->csp_frac = 0;
2638                                 }
2639                                 p_ptr->redraw |= PR_MANA;
2640
2641                                 take_hit(DAMAGE_ATTACK, dam, ddesc, MS_MIND_BLAST);
2642                         }
2643                         break;
2644                 }
2645
2646                 /* RF5_BRAIN_SMASH */
2647                 case 128+11:
2648                 {
2649                         if (x!=px || y!=py) return (FALSE);
2650                         if (!direct) break;
2651                         disturb(1, 0);
2652                         if (!seen)
2653                         {
2654 #ifdef JP
2655 msg_print("²¿¤«¤¬¤¢¤Ê¤¿¤ÎÀº¿À¤ËÇ°¤òÊü¤Ã¤Æ¤¤¤ë¤è¤¦¤À¡£");
2656 #else
2657                                 msg_print("You feel something focusing on your mind.");
2658 #endif
2659
2660                         }
2661                         else
2662                         {
2663 #ifdef JP
2664 msg_format("%^s¤¬¤¢¤Ê¤¿¤ÎÆ·¤ò¤¸¤Ã¤È¸«¤Æ¤¤¤ë¡£", m_name);
2665 #else
2666                                 msg_format("%^s looks deep into your eyes.", m_name);
2667 #endif
2668
2669                         }
2670
2671                         dam = damroll(12, 12);
2672                         if (rand_int(100 + rlev/2) < (MAX(5, p_ptr->skill_sav)))
2673                         {
2674 #ifdef JP
2675 msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
2676 #else
2677                                 msg_print("You resist the effects!");
2678 #endif
2679                                 learn_spell(MS_BRAIN_SMASH);
2680                         }
2681                         else
2682                         {
2683 #ifdef JP
2684 msg_print("ÎîŪ¥¨¥Í¥ë¥®¡¼¤ÇÀº¿À¤¬¹¶·â¤µ¤ì¤¿¡£");
2685 #else
2686                                 msg_print("Your mind is blasted by psionic energy.");
2687 #endif
2688
2689                                 p_ptr->csp -= 100;
2690                                 if (p_ptr->csp < 0)
2691                                 {
2692                                         p_ptr->csp = 0;
2693                                         p_ptr->csp_frac = 0;
2694                                 }
2695                                 p_ptr->redraw |= PR_MANA;
2696
2697                                 take_hit(DAMAGE_ATTACK, dam, ddesc, MS_BRAIN_SMASH);
2698                                 if (!p_ptr->resist_blind)
2699                                 {
2700                                         (void)set_blind(p_ptr->blind + 8 + rand_int(8));
2701                                 }
2702                                 if (!p_ptr->resist_conf)
2703                                 {
2704                                         (void)set_confused(p_ptr->confused + rand_int(4) + 4);
2705                                 }
2706                                 if (!p_ptr->free_act)
2707                                 {
2708                                         (void)set_paralyzed(p_ptr->paralyzed + rand_int(4) + 4);
2709                                 }
2710                                 (void)set_slow(p_ptr->slow + rand_int(4) + 4, FALSE);
2711
2712                                 while (rand_int(100 + rlev/2) > (MAX(5, p_ptr->skill_sav)))
2713                                         (void)do_dec_stat(A_INT);
2714                                 while (rand_int(100 + rlev/2) > (MAX(5, p_ptr->skill_sav)))
2715                                         (void)do_dec_stat(A_WIS);
2716
2717                                 if (!p_ptr->resist_chaos)
2718                                 {
2719                                         (void)set_image(p_ptr->image + rand_int(250) + 150);
2720                                 }
2721                         }
2722                         break;
2723                 }
2724
2725                 /* RF5_CAUSE_1 */
2726                 case 128+12:
2727                 {
2728                         if (x!=px || y!=py) return (FALSE);
2729                         if (!direct) break;
2730                         disturb(1, 0);
2731 #ifdef JP
2732 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2733 #else
2734                         if (blind) msg_format("%^s mumbles.", m_name);
2735 #endif
2736
2737 #ifdef JP
2738 else msg_format("%^s¤¬¤¢¤Ê¤¿¤ò»Ø¤µ¤·¤Æ¼ö¤Ã¤¿¡£", m_name);
2739 #else
2740                         else msg_format("%^s points at you and curses.", m_name);
2741 #endif
2742
2743                         dam = damroll(3, 8);
2744                         if (rand_int(100 + rlev/2) < p_ptr->skill_sav)
2745                         {
2746 #ifdef JP
2747 msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
2748 #else
2749                                 msg_print("You resist the effects!");
2750 #endif
2751                                 learn_spell(MS_CAUSE_1);
2752                         }
2753                         else
2754                         {
2755                                 curse_equipment(33, 0);
2756                                 take_hit(DAMAGE_ATTACK, dam, ddesc, MS_CAUSE_1);
2757                         }
2758                         break;
2759                 }
2760
2761                 /* RF5_CAUSE_2 */
2762                 case 128+13:
2763                 {
2764                         if (x!=px || y!=py) return (FALSE);
2765                         if (!direct) break;
2766                         disturb(1, 0);
2767 #ifdef JP
2768 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2769 #else
2770                         if (blind) msg_format("%^s mumbles.", m_name);
2771 #endif
2772
2773 #ifdef JP
2774 else msg_format("%^s¤¬¤¢¤Ê¤¿¤ò»Ø¤µ¤·¤Æ¶²¤í¤·¤²¤Ë¼ö¤Ã¤¿¡£", m_name);
2775 #else
2776                         else msg_format("%^s points at you and curses horribly.", m_name);
2777 #endif
2778
2779                         dam = damroll(8, 8);
2780                         if (rand_int(100 + rlev/2) < p_ptr->skill_sav)
2781                         {
2782 #ifdef JP
2783 msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
2784 #else
2785                                 msg_print("You resist the effects!");
2786 #endif
2787                                 learn_spell(MS_CAUSE_2);
2788                         }
2789                         else
2790                         {
2791                                 curse_equipment(50, 5);
2792                                 take_hit(DAMAGE_ATTACK, dam, ddesc, MS_CAUSE_2);
2793                         }
2794                         break;
2795                 }
2796
2797                 /* RF5_CAUSE_3 */
2798                 case 128+14:
2799                 {
2800                         if (x!=px || y!=py) return (FALSE);
2801                         if (!direct) break;
2802                         disturb(1, 0);
2803 #ifdef JP
2804 if (blind) msg_format("%^s¤¬²¿¤«¤òÂçÀ¼¤Ç¶«¤ó¤À¡£", m_name);
2805 #else
2806                         if (blind) msg_format("%^s mumbles loudly.", m_name);
2807 #endif
2808
2809 #ifdef JP
2810 else msg_format("%^s¤¬¤¢¤Ê¤¿¤ò»Ø¤µ¤·¤Æ¶²¤í¤·¤²¤Ë¼öʸ¤ò¾§¤¨¤¿¡ª", m_name);
2811 #else
2812                         else msg_format("%^s points at you, incanting terribly!", m_name);
2813 #endif
2814
2815                         dam = damroll(10, 15);
2816                         if (rand_int(100 + rlev/2) < p_ptr->skill_sav)
2817                         {
2818 #ifdef JP
2819 msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
2820 #else
2821                                 msg_print("You resist the effects!");
2822 #endif
2823                                 learn_spell(MS_CAUSE_3);
2824                         }
2825                         else
2826                         {
2827                                 curse_equipment(80, 15);
2828                                 take_hit(DAMAGE_ATTACK, dam, ddesc, MS_CAUSE_3);
2829                         }
2830                         break;
2831                 }
2832
2833                 /* RF5_CAUSE_4 */
2834                 case 128+15:
2835                 {
2836                         if (x!=px || y!=py) return (FALSE);
2837                         if (!direct) break;
2838                         disturb(1, 0);
2839 #ifdef JP
2840 if (blind) msg_format("%^s¤¬¡Ö¤ªÁ°¤Ï´û¤Ë»à¤ó¤Ç¤¤¤ë¡×¤È¶«¤ó¤À¡£", m_name);
2841 #else
2842                         if (blind) msg_format("%^s screams the word 'DIE!'", m_name);
2843 #endif
2844
2845 #ifdef JP
2846 else msg_format("%^s¤¬¤¢¤Ê¤¿¤ÎÈ빦¤òÆͤ¤¤Æ¡Ö¤ªÁ°¤Ï´û¤Ë»à¤ó¤Ç¤¤¤ë¡×¤È¶«¤ó¤À¡£", m_name);
2847 #else
2848                         else msg_format("%^s points at you, screaming the word DIE!", m_name);
2849 #endif
2850
2851                         dam = damroll(15, 15);
2852                         if ((rand_int(100 + rlev/2) < p_ptr->skill_sav) && !(m_ptr->r_idx == MON_KENSHIROU))
2853                         {
2854 #ifdef JP
2855 msg_print("¤·¤«¤·È빦¤òÄ·¤ÍÊÖ¤·¤¿¡ª");
2856 #else
2857                                 msg_print("You resist the effects!");
2858 #endif
2859                                 learn_spell(MS_CAUSE_4);
2860                         }
2861                         else
2862                         {
2863                                 take_hit(DAMAGE_ATTACK, dam, ddesc, MS_CAUSE_4);
2864                                 (void)set_cut(p_ptr->cut + damroll(10, 10));
2865                         }
2866                         break;
2867                 }
2868
2869                 /* RF5_BO_ACID */
2870                 case 128+16:
2871                 {
2872                         if (x!=px || y!=py) return (FALSE);
2873                         disturb(1, 0);
2874 #ifdef JP
2875 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2876 #else
2877                         if (blind) msg_format("%^s mumbles.", m_name);
2878 #endif
2879
2880 #ifdef JP
2881 else msg_format("%^s¤¬¥¢¥·¥Ã¥É¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
2882 #else
2883                         else msg_format("%^s casts a acid bolt.", m_name);
2884 #endif
2885
2886                         dam = (damroll(7, 8) + (rlev / 3)) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2887                         bolt(m_idx, GF_ACID, dam, MS_BOLT_ACID, learnable);
2888                         update_smart_learn(m_idx, DRS_ACID);
2889                         update_smart_learn(m_idx, DRS_REFLECT);
2890                         break;
2891                 }
2892
2893                 /* RF5_BO_ELEC */
2894                 case 128+17:
2895                 {
2896                         if (x!=px || y!=py) return (FALSE);
2897                         disturb(1, 0);
2898 #ifdef JP
2899 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2900 #else
2901                         if (blind) msg_format("%^s mumbles.", m_name);
2902 #endif
2903
2904 #ifdef JP
2905 else msg_format("%^s¤¬¥µ¥ó¥À¡¼¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
2906 #else
2907                         else msg_format("%^s casts a lightning bolt.", m_name);
2908 #endif
2909
2910                         dam = (damroll(4, 8) + (rlev / 3)) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2911                         bolt(m_idx, GF_ELEC, dam, MS_BOLT_ELEC, learnable);
2912                         update_smart_learn(m_idx, DRS_ELEC);
2913                         update_smart_learn(m_idx, DRS_REFLECT);
2914                         break;
2915                 }
2916
2917                 /* RF5_BO_FIRE */
2918                 case 128+18:
2919                 {
2920                         if (x!=px || y!=py) return (FALSE);
2921                         disturb(1, 0);
2922 #ifdef JP
2923 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2924 #else
2925                         if (blind) msg_format("%^s mumbles.", m_name);
2926 #endif
2927
2928 #ifdef JP
2929 else msg_format("%^s¤¬¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
2930 #else
2931                         else msg_format("%^s casts a fire bolt.", m_name);
2932 #endif
2933
2934                         dam = (damroll(9, 8) + (rlev / 3)) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2935                         bolt(m_idx, GF_FIRE, dam, MS_BOLT_FIRE, learnable);
2936                         update_smart_learn(m_idx, DRS_FIRE);
2937                         update_smart_learn(m_idx, DRS_REFLECT);
2938                         break;
2939                 }
2940
2941                 /* RF5_BO_COLD */
2942                 case 128+19:
2943                 {
2944                         if (x!=px || y!=py) return (FALSE);
2945                         disturb(1, 0);
2946 #ifdef JP
2947 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2948 #else
2949                         if (blind) msg_format("%^s mumbles.", m_name);
2950 #endif
2951
2952 #ifdef JP
2953 else msg_format("%^s¤¬¥¢¥¤¥¹¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
2954 #else
2955                         else msg_format("%^s casts a frost bolt.", m_name);
2956 #endif
2957
2958                         dam = (damroll(6, 8) + (rlev / 3)) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2959                         bolt(m_idx, GF_COLD, dam, MS_BOLT_COLD, learnable);
2960                         update_smart_learn(m_idx, DRS_COLD);
2961                         update_smart_learn(m_idx, DRS_REFLECT);
2962                         break;
2963                 }
2964
2965                 /* RF5_BA_LITE */
2966                 case 128+20:
2967                 {
2968                         disturb(1, 0);
2969 #ifdef JP
2970 if (blind) msg_format("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2971 #else
2972                         if (blind) msg_format("%^s mumbles powerfully.", m_name);
2973 #endif
2974
2975 #ifdef JP
2976 else msg_format("%^s¤¬¥¹¥¿¡¼¥Ð¡¼¥¹¥È¤Î¼öʸ¤òÇ°¤¸¤¿¡£", m_name);
2977 #else
2978                         else msg_format("%^s invokes a starburst.", m_name);
2979 #endif
2980
2981                         dam = (rlev * 4) + 50 + damroll(10, 10);
2982                         breath(y, x, m_idx, GF_LITE, dam, 4, FALSE, MS_STARBURST, learnable);
2983                         update_smart_learn(m_idx, DRS_LITE);
2984                         break;
2985                 }
2986
2987                 /* RF5_BO_NETH */
2988                 case 128+21:
2989                 {
2990                         if (x!=px || y!=py) return (FALSE);
2991                         disturb(1, 0);
2992 #ifdef JP
2993 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
2994 #else
2995                         if (blind) msg_format("%^s mumbles.", m_name);
2996 #endif
2997
2998 #ifdef JP
2999 else msg_format("%^s¤¬ÃϹö¤ÎÌð¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
3000 #else
3001                         else msg_format("%^s casts a nether bolt.", m_name);
3002 #endif
3003
3004                         dam = 30 + damroll(5, 5) + (rlev * 4) / ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 3);
3005                         bolt(m_idx, GF_NETHER, dam, MS_BOLT_NETHER, learnable);
3006                         update_smart_learn(m_idx, DRS_NETH);
3007                         update_smart_learn(m_idx, DRS_REFLECT);
3008                         break;
3009                 }
3010
3011                 /* RF5_BO_WATE */
3012                 case 128+22:
3013                 {
3014                         if (x!=px || y!=py) return (FALSE);
3015                         disturb(1, 0);
3016 #ifdef JP
3017 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3018 #else
3019                         if (blind) msg_format("%^s mumbles.", m_name);
3020 #endif
3021
3022 #ifdef JP
3023 else msg_format("%^s¤¬¥¦¥©¡¼¥¿¡¼¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
3024 #else
3025                         else msg_format("%^s casts a water bolt.", m_name);
3026 #endif
3027
3028                         dam = damroll(10, 10) + (rlev * 3 / ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 3));
3029                         bolt(m_idx, GF_WATER, dam, MS_BOLT_WATER, learnable);
3030                         update_smart_learn(m_idx, DRS_REFLECT);
3031                         break;
3032                 }
3033
3034                 /* RF5_BO_MANA */
3035                 case 128+23:
3036                 {
3037                         if (x!=px || y!=py) return (FALSE);
3038                         disturb(1, 0);
3039 #ifdef JP
3040 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3041 #else
3042                         if (blind) msg_format("%^s mumbles.", m_name);
3043 #endif
3044
3045 #ifdef JP
3046 else msg_format("%^s¤¬ËâÎϤÎÌð¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
3047 #else
3048                         else msg_format("%^s casts a mana bolt.", m_name);
3049 #endif
3050
3051                         dam = randint(rlev * 7 / 2) + 50;
3052                         bolt(m_idx, GF_MANA, dam, MS_BOLT_MANA, learnable);
3053                         update_smart_learn(m_idx, DRS_REFLECT);
3054                         break;
3055                 }
3056
3057                 /* RF5_BO_PLAS */
3058                 case 128+24:
3059                 {
3060                         if (x!=px || y!=py) return (FALSE);
3061                         disturb(1, 0);
3062 #ifdef JP
3063 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3064 #else
3065                         if (blind) msg_format("%^s mumbles.", m_name);
3066 #endif
3067
3068 #ifdef JP
3069 else msg_format("%^s¤¬¥×¥é¥º¥Þ¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
3070 #else
3071                         else msg_format("%^s casts a plasma bolt.", m_name);
3072 #endif
3073
3074                         dam = 10 + damroll(8, 7) + (rlev * 3 / ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 3));
3075                         bolt(m_idx, GF_PLASMA, dam, MS_BOLT_PLASMA, learnable);
3076                         update_smart_learn(m_idx, DRS_REFLECT);
3077                         break;
3078                 }
3079
3080                 /* RF5_BO_ICEE */
3081                 case 128+25:
3082                 {
3083                         if (x!=px || y!=py) return (FALSE);
3084                         disturb(1, 0);
3085 #ifdef JP
3086 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3087 #else
3088                         if (blind) msg_format("%^s mumbles.", m_name);
3089 #endif
3090
3091 #ifdef JP
3092 else msg_format("%^s¤¬¶Ë´¨¤ÎÌð¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
3093 #else
3094                         else msg_format("%^s casts an ice bolt.", m_name);
3095 #endif
3096
3097                         dam = damroll(6, 6) + (rlev * 3 / ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 3));
3098                         bolt(m_idx, GF_ICE, dam, MS_BOLT_ICE, learnable);
3099                         update_smart_learn(m_idx, DRS_COLD);
3100                         update_smart_learn(m_idx, DRS_REFLECT);
3101                         break;
3102                 }
3103
3104                 /* RF5_MISSILE */
3105                 case 128+26:
3106                 {
3107                         if (x!=px || y!=py) return (FALSE);
3108                         disturb(1, 0);
3109 #ifdef JP
3110 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3111 #else
3112                         if (blind) msg_format("%^s mumbles.", m_name);
3113 #endif
3114
3115 #ifdef JP
3116 else msg_format("%^s¤¬¥Þ¥¸¥Ã¥¯¡¦¥ß¥µ¥¤¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
3117 #else
3118                         else msg_format("%^s casts a magic missile.", m_name);
3119 #endif
3120
3121                         dam = damroll(2, 6) + (rlev / 3);
3122                         bolt(m_idx, GF_MISSILE, dam, MS_MAGIC_MISSILE, learnable);
3123                         update_smart_learn(m_idx, DRS_REFLECT);
3124                         break;
3125                 }
3126
3127                 /* RF5_SCARE */
3128                 case 128+27:
3129                 {
3130                         if (x!=px || y!=py) return (FALSE);
3131                         if (!direct) break;
3132                         disturb(1, 0);
3133 #ifdef JP
3134 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¯¤È¡¢¶²¤í¤·¤²¤Ê²»¤¬Ê¹¤³¤¨¤¿¡£", m_name);
3135 #else
3136                         if (blind) msg_format("%^s mumbles, and you hear scary noises.", m_name);
3137 #endif
3138
3139 #ifdef JP
3140 else msg_format("%^s¤¬¶²¤í¤·¤²¤Ê¸¸³Ð¤òºî¤ê½Ð¤·¤¿¡£", m_name);
3141 #else
3142                         else msg_format("%^s casts a fearful illusion.", m_name);
3143 #endif
3144
3145                         if (p_ptr->resist_fear)
3146                         {
3147 #ifdef JP
3148 msg_print("¤·¤«¤·¶²Éݤ˿¯¤µ¤ì¤Ê¤«¤Ã¤¿¡£");
3149 #else
3150                                 msg_print("You refuse to be frightened.");
3151 #endif
3152
3153                         }
3154                         else if (rand_int(100 + rlev/2) < p_ptr->skill_sav)
3155                         {
3156 #ifdef JP
3157 msg_print("¤·¤«¤·¶²Éݤ˿¯¤µ¤ì¤Ê¤«¤Ã¤¿¡£");
3158 #else
3159                                 msg_print("You refuse to be frightened.");
3160 #endif
3161
3162                         }
3163                         else
3164                         {
3165                                 (void)set_afraid(p_ptr->afraid + rand_int(4) + 4);
3166                         }
3167                         learn_spell(MS_SCARE);
3168                         update_smart_learn(m_idx, DRS_FEAR);
3169                         break;
3170                 }
3171
3172                 /* RF5_BLIND */
3173                 case 128+28:
3174                 {
3175                         if (x!=px || y!=py) return (FALSE);
3176                         if (!direct) break;
3177                         disturb(1, 0);
3178 #ifdef JP
3179 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3180 #else
3181                         if (blind) msg_format("%^s mumbles.", m_name);
3182 #endif
3183
3184 #ifdef JP
3185 else msg_format("%^s¤¬¼öʸ¤ò¾§¤¨¤Æ¤¢¤Ê¤¿¤ÎÌܤò¤¯¤é¤Þ¤·¤¿¡ª", m_name);
3186 #else
3187                         else msg_format("%^s casts a spell, burning your eyes!", m_name);
3188 #endif
3189
3190                         if (p_ptr->resist_blind)
3191                         {
3192 #ifdef JP
3193 msg_print("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª");
3194 #else
3195                                 msg_print("You are unaffected!");
3196 #endif
3197
3198                         }
3199                         else if (rand_int(100 + rlev/2) < p_ptr->skill_sav)
3200                         {
3201 #ifdef JP
3202 msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
3203 #else
3204                                 msg_print("You resist the effects!");
3205 #endif
3206
3207                         }
3208                         else
3209                         {
3210                                 (void)set_blind(12 + rand_int(4));
3211                         }
3212                         learn_spell(MS_BLIND);
3213                         update_smart_learn(m_idx, DRS_BLIND);
3214                         break;
3215                 }
3216
3217                 /* RF5_CONF */
3218                 case 128+29:
3219                 {
3220                         if (x!=px || y!=py) return (FALSE);
3221                         if (!direct) break;
3222                         disturb(1, 0);
3223 #ifdef JP
3224 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¯¤È¡¢Æ¬¤òǺ¤Þ¤¹²»¤¬¤·¤¿¡£", m_name);
3225 #else
3226                         if (blind) msg_format("%^s mumbles, and you hear puzzling noises.", m_name);
3227 #endif
3228
3229 #ifdef JP
3230 else msg_format("%^s¤¬Í¶ÏÇŪ¤Ê¸¸³Ð¤òºî¤ê½Ð¤·¤¿¡£", m_name);
3231 #else
3232                         else msg_format("%^s creates a mesmerising illusion.", m_name);
3233 #endif
3234
3235                         if (p_ptr->resist_conf)
3236                         {
3237 #ifdef JP
3238 msg_print("¤·¤«¤·¸¸³Ð¤Ë¤Ï¤À¤Þ¤µ¤ì¤Ê¤«¤Ã¤¿¡£");
3239 #else
3240                                 msg_print("You disbelieve the feeble spell.");
3241 #endif
3242
3243                         }
3244                         else if (rand_int(100 + rlev/2) < p_ptr->skill_sav)
3245                         {
3246 #ifdef JP
3247 msg_print("¤·¤«¤·¸¸³Ð¤Ë¤Ï¤À¤Þ¤µ¤ì¤Ê¤«¤Ã¤¿¡£");
3248 #else
3249                                 msg_print("You disbelieve the feeble spell.");
3250 #endif
3251
3252                         }
3253                         else
3254                         {
3255                                 (void)set_confused(p_ptr->confused + rand_int(4) + 4);
3256                         }
3257                         learn_spell(MS_CONF);
3258                         update_smart_learn(m_idx, DRS_CONF);
3259                         break;
3260                 }
3261
3262                 /* RF5_SLOW */
3263                 case 128+30:
3264                 {
3265                         if (x!=px || y!=py) return (FALSE);
3266                         if (!direct) break;
3267                         disturb(1, 0);
3268 #ifdef JP
3269 msg_format("%^s¤¬¤¢¤Ê¤¿¤Î¶ÚÎϤòµÛ¤¤¼è¤í¤¦¤È¤·¤¿¡ª", m_name);
3270 #else
3271                         msg_format("%^s drains power from your muscles!", m_name);
3272 #endif
3273
3274                         if (p_ptr->free_act)
3275                         {
3276 #ifdef JP
3277 msg_print("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª");
3278 #else
3279                                 msg_print("You are unaffected!");
3280 #endif
3281
3282                         }
3283                         else if (rand_int(100 + rlev/2) < p_ptr->skill_sav)
3284                         {
3285 #ifdef JP
3286 msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
3287 #else
3288                                 msg_print("You resist the effects!");
3289 #endif
3290
3291                         }
3292                         else
3293                         {
3294                                 (void)set_slow(p_ptr->slow + rand_int(4) + 4, FALSE);
3295                         }
3296                         learn_spell(MS_SLOW);
3297                         update_smart_learn(m_idx, DRS_FREE);
3298                         break;
3299                 }
3300
3301                 /* RF5_HOLD */
3302                 case 128+31:
3303                 {
3304                         if (x!=px || y!=py) return (FALSE);
3305                         if (!direct) break;
3306                         disturb(1, 0);
3307 #ifdef JP
3308 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3309 #else
3310                         if (blind) msg_format("%^s mumbles.", m_name);
3311 #endif
3312
3313 #ifdef JP
3314 else msg_format("%^s¤¬¤¢¤Ê¤¿¤ÎÌܤò¤¸¤Ã¤È¸«¤Ä¤á¤¿¡ª", m_name);
3315 #else
3316                         else msg_format("%^s stares deep into your eyes!", m_name);
3317 #endif
3318
3319                         if (p_ptr->free_act)
3320                         {
3321 #ifdef JP
3322 msg_print("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª");
3323 #else
3324                                 msg_print("You are unaffected!");
3325 #endif
3326
3327                         }
3328                         else if (rand_int(100 + rlev/2) < p_ptr->skill_sav)
3329                         {
3330 #ifdef JP
3331 msg_format("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
3332 #else
3333                                 msg_format("You resist the effects!");
3334 #endif
3335
3336                         }
3337                         else
3338                         {
3339                                 (void)set_paralyzed(p_ptr->paralyzed + rand_int(4) + 4);
3340                         }
3341                         learn_spell(MS_SLEEP);
3342                         update_smart_learn(m_idx, DRS_FREE);
3343                         break;
3344                 }
3345
3346                 /* RF6_HASTE */
3347                 case 160+0:
3348                 {
3349                         disturb(1, 0);
3350                         if (blind)
3351                         {
3352 #ifdef JP
3353 msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3354 #else
3355                                 msg_format("%^s mumbles.", m_name);
3356 #endif
3357
3358                         }
3359                         else
3360                         {
3361 #ifdef JP
3362 msg_format("%^s¤¬¼«Ê¬¤ÎÂΤËÇ°¤òÁ÷¤Ã¤¿¡£", m_name, m_poss);
3363 #else
3364                                 msg_format("%^s concentrates on %s body.", m_name, m_poss);
3365 #endif
3366
3367                         }
3368
3369                         /* Allow quick speed increases to base+10 */
3370                         if (!m_ptr->fast)
3371                         {
3372 #ifdef JP
3373 msg_format("%^s¤ÎÆ°¤­¤¬Â®¤¯¤Ê¤Ã¤¿¡£", m_name);
3374 #else
3375                                 msg_format("%^s starts moving faster.", m_name);
3376 #endif
3377                         }
3378                         m_ptr->fast = MIN(200, m_ptr->fast + 100);
3379                         if (p_ptr->riding == m_idx) p_ptr->update |= PU_BONUS;
3380                         break;
3381                 }
3382
3383                 /* RF6_HAND_DOOM */
3384                 case 160+1:
3385                 {
3386                         if (x!=px || y!=py) return (FALSE);
3387                         disturb(1, 0);
3388 #ifdef JP
3389 msg_format("%^s¤¬ÇËÌǤμê¤òÊü¤Ã¤¿¡ª", m_name);
3390 #else
3391                         msg_format("%^s invokes the Hand of Doom!", m_name);
3392 #endif
3393
3394                         if (rand_int(100 + rlev/2) < p_ptr->skill_sav)
3395                         {
3396 #ifdef JP
3397 msg_format("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
3398 #else
3399                                 msg_format("You resist the effects!");
3400 #endif
3401                                 learn_spell(MS_HAND_DOOM);
3402
3403                         }
3404                         else
3405                         {
3406                                 int dummy = (((s32b) ((40 + randint(20)) * (p_ptr->chp))) / 100);
3407 #ifdef JP
3408 msg_print("¤¢¤Ê¤¿¤ÏÌ¿¤¬Çö¤Þ¤Ã¤Æ¤¤¤¯¤è¤¦¤Ë´¶¤¸¤¿¡ª");
3409 #else
3410                                 msg_print("Your feel your life fade away!");
3411 #endif
3412
3413                                 take_hit(DAMAGE_ATTACK, dummy, m_name, MS_HAND_DOOM);
3414                                 curse_equipment(100, 20);
3415
3416                                 if (p_ptr->chp < 1) p_ptr->chp = 1;
3417                         }
3418                         break;
3419                 }
3420
3421                 /* RF6_HEAL */
3422                 case 160+2:
3423                 {
3424                         disturb(1, 0);
3425
3426                         /* Message */
3427                         if (blind)
3428                         {
3429 #ifdef JP
3430 msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3431 #else
3432                                 msg_format("%^s mumbles.", m_name);
3433 #endif
3434
3435                         }
3436                         else
3437                         {
3438 #ifdef JP
3439 msg_format("%^s¤¬¼«Ê¬¤Î½ý¤Ë½¸Ã椷¤¿¡£", m_name);
3440 #else
3441                                 msg_format("%^s concentrates on %s wounds.", m_name, m_poss);
3442 #endif
3443
3444                         }
3445
3446                         /* Heal some */
3447                         m_ptr->hp += (rlev * 6);
3448
3449                         /* Fully healed */
3450                         if (m_ptr->hp >= m_ptr->maxhp)
3451                         {
3452                                 /* Fully healed */
3453                                 m_ptr->hp = m_ptr->maxhp;
3454
3455                                 /* Message */
3456                                 if (seen)
3457                                 {
3458 #ifdef JP
3459 msg_format("%^s¤Ï´°Á´¤Ë¼£¤Ã¤¿¡ª", m_name);
3460 #else
3461                                         msg_format("%^s looks completely healed!", m_name);
3462 #endif
3463
3464                                 }
3465                                 else
3466                                 {
3467 #ifdef JP
3468 msg_format("%^s¤Ï´°Á´¤Ë¼£¤Ã¤¿¤è¤¦¤À¡ª", m_name);
3469 #else
3470                                         msg_format("%^s sounds completely healed!", m_name);
3471 #endif
3472
3473                                 }
3474                         }
3475
3476                         /* Partially healed */
3477                         else
3478                         {
3479                                 /* Message */
3480                                 if (seen)
3481                                 {
3482 #ifdef JP
3483 msg_format("%^s¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£", m_name);
3484 #else
3485                                         msg_format("%^s looks healthier.", m_name);
3486 #endif
3487
3488                                 }
3489                                 else
3490                                 {
3491 #ifdef JP
3492 msg_format("%^s¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£", m_name);
3493 #else
3494                                         msg_format("%^s sounds healthier.", m_name);
3495 #endif
3496
3497                                 }
3498                         }
3499
3500                         /* Redraw (later) if needed */
3501                         if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
3502                         if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
3503
3504                         /* Cancel fear */
3505                         if (m_ptr->monfear)
3506                         {
3507                                 /* Cancel fear */
3508                                 m_ptr->monfear = 0;
3509
3510                                 /* Message */
3511 #ifdef JP
3512 msg_format("%^s¤Ïͦµ¤¤ò¼è¤êÌᤷ¤¿¡£", m_name, m_poss);
3513 #else
3514                                 msg_format("%^s recovers %s courage.", m_name, m_poss);
3515 #endif
3516
3517                         }
3518                         break;
3519                 }
3520
3521                 /* RF6_INVULNER */
3522                 case 160+3:
3523                 {
3524                         disturb(1, 0);
3525
3526                         /* Message */
3527                         if (!seen)
3528                         {
3529 #ifdef JP
3530 msg_format("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3531 #else
3532                                 msg_format("%^s mumbles powerfully.", m_name);
3533 #endif
3534
3535                         }
3536                         else
3537                         {
3538 #ifdef JP
3539 msg_format("%s¤Ï̵½ý¤Îµå¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
3540 #else
3541                                 msg_format("%^s casts a Globe of Invulnerability.", m_name);
3542 #endif
3543
3544                         }
3545
3546                         if (!(m_ptr->invulner))
3547                                 m_ptr->invulner = randint(4) + 4;
3548
3549                         if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
3550                         if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
3551                         break;
3552                 }
3553
3554                 /* RF6_BLINK */
3555                 case 160+4:
3556                 {
3557                         disturb(1, 0);
3558 #ifdef JP
3559 msg_format("%^s¤¬½Ö»þ¤Ë¾Ã¤¨¤¿¡£", m_name);
3560 #else
3561                         msg_format("%^s blinks away.", m_name);
3562 #endif
3563
3564                         teleport_away(m_idx, 10, FALSE);
3565                         p_ptr->update |= (PU_MONSTERS | PU_MON_LITE);
3566                         break;
3567                 }
3568
3569                 /* RF6_TPORT */
3570                 case 160+5:
3571                 {
3572                         int i, oldfy, oldfx;
3573                         u32b f1 = 0 , f2 = 0 , f3 = 0;
3574                         object_type *o_ptr;
3575
3576                         oldfy = m_ptr->fy;
3577                         oldfx = m_ptr->fx;
3578
3579                         disturb(1, 0);
3580 #ifdef JP
3581 msg_format("%^s¤¬¥Æ¥ì¥Ý¡¼¥È¤·¤¿¡£", m_name);
3582 #else
3583                         msg_format("%^s teleports away.", m_name);
3584 #endif
3585
3586                         teleport_away(m_idx, MAX_SIGHT * 2 + 5, FALSE);
3587
3588                         if (los(py, px, oldfy, oldfx) && !world_monster)
3589                         {
3590                                 for (i=INVEN_RARM;i<INVEN_TOTAL;i++)
3591                                 {
3592                                         o_ptr = &inventory[i];
3593                                         if(!(o_ptr->ident & IDENT_CURSED))
3594                                         {
3595                                                 object_flags(o_ptr, &f1, &f2, &f3);
3596
3597                                                 if((f3 & TR3_TELEPORT) || (p_ptr->muta1 & MUT1_VTELEPORT) || (p_ptr->pclass == CLASS_IMITATOR))
3598                                                 {
3599 #ifdef JP
3600                                                         if(get_check_strict("¤Ä¤¤¤Æ¤¤¤­¤Þ¤¹¤«¡©", 1))
3601 #else
3602                                                         if(get_check_strict("Do you follow it? ", 1))
3603 #endif
3604                                                         {
3605                                                                 if (one_in_(3))
3606                                                                 {
3607                                                                         teleport_player(200);
3608 #ifdef JP
3609                                                                         msg_print("¼ºÇÔ¡ª");
3610 #else
3611                                                                         msg_print("Failed!");
3612 #endif
3613                                                                 }
3614                                                                 else teleport_player_to(m_ptr->fy, m_ptr->fx, TRUE);
3615                                                                 p_ptr->energy -= 100;
3616                                                         }
3617                                                         break;
3618                                                 }
3619                                         }
3620                                 }
3621                         }
3622                         break;
3623                 }
3624
3625                 /* RF6_WORLD */
3626                 case 160+6:
3627                 {
3628                         int who = 0;
3629                         disturb(1, 0);
3630                         if(m_ptr->r_idx == MON_DIO) who = 1;
3631                         else if(m_ptr->r_idx == MON_WONG) who = 3;
3632                         dam = who;
3633                         if (!process_the_world(randint(2)+2, who, TRUE)) return (FALSE);
3634                         break;
3635                 }
3636
3637                 /* RF6_SPECIAL */
3638                 case 160+7:
3639                 {
3640                         int k;
3641
3642                         disturb(1, 0);
3643                         switch(m_ptr->r_idx)
3644                         {
3645                         case MON_OHMU:
3646                                 if (p_ptr->inside_arena || p_ptr->inside_battle) return FALSE;
3647                                 for (k = 0; k < 6; k++)
3648                                 {
3649                                         count += summon_specific(m_idx, m_ptr->fy, m_ptr->fx, rlev, SUMMON_BIZARRE1, TRUE, FALSE, FALSE, FALSE, FALSE);
3650                                 }
3651                                 return FALSE;
3652                                 
3653                         case MON_BANORLUPART:
3654                                 {
3655                                         int dummy_hp = (m_ptr->hp + 1) / 2;
3656                                         int dummy_maxhp = m_ptr->maxhp/2;
3657                                         int dummy_y = m_ptr->fy;
3658                                         int dummy_x = m_ptr->fx;
3659
3660                                         if (p_ptr->inside_arena || p_ptr->inside_battle || !summon_possible(m_ptr->fy, m_ptr->fx)) return FALSE;
3661                                         delete_monster_idx(cave[m_ptr->fy][m_ptr->fx].m_idx);
3662                                         summon_named_creature(dummy_y, dummy_x, MON_BANOR, FALSE, FALSE, is_friendly(m_ptr), FALSE);
3663                                         m_list[hack_m_idx_ii].hp = dummy_hp;
3664                                         m_list[hack_m_idx_ii].maxhp = dummy_maxhp;
3665                                         summon_named_creature(dummy_y, dummy_x, MON_LUPART, FALSE, FALSE, is_friendly(m_ptr), FALSE);
3666                                         m_list[hack_m_idx_ii].hp = dummy_hp;
3667                                         m_list[hack_m_idx_ii].maxhp = dummy_maxhp;
3668
3669 #ifdef JP
3670                                         msg_print("¡Ø¥Ð¡¼¥Î¡¼¥ë¡¦¥ë¥Ñ¡¼¥È¡Ù¤¬Ê¬Îö¤·¤¿¡ª");
3671 #else
3672                                         msg_print("Banor=Rupart splits in two person!");
3673 #endif
3674
3675                                         break;
3676                                 }
3677                                 case MON_BANOR:
3678                                 case MON_LUPART:
3679                                 {
3680                                         int dummy_hp = 0;
3681                                         int dummy_maxhp = 0;
3682                                         int dummy_y = m_ptr->fy;
3683                                         int dummy_x = m_ptr->fx;
3684
3685                                         if (!r_info[MON_BANOR].cur_num || !r_info[MON_LUPART].cur_num) return (FALSE);
3686                                         for (k = 1; k < m_max; k++)
3687                                         {
3688                                                 if (m_list[k].r_idx == MON_BANOR || m_list[k].r_idx == MON_LUPART)
3689                                                 {
3690                                                         dummy_hp += m_list[k].hp;
3691                                                         dummy_maxhp += m_list[k].maxhp;
3692                                                         if (m_list[k].r_idx != m_ptr->r_idx)
3693                                                         {
3694                                                                 dummy_y = m_list[k].fy;
3695                                                                 dummy_x = m_list[k].fx;
3696                                                         }
3697                                                         delete_monster_idx(k);
3698                                                 }
3699                                         }
3700                                         summon_named_creature(dummy_y, dummy_x, MON_BANORLUPART, FALSE, FALSE, is_friendly(m_ptr), FALSE);
3701                                         m_list[hack_m_idx_ii].hp = dummy_hp;
3702                                         m_list[hack_m_idx_ii].maxhp = dummy_maxhp;
3703
3704 #ifdef JP
3705                                         msg_print("¡Ø¥Ð¡¼¥Î¡¼¥ë¡Ù¤È¡Ø¥ë¥Ñ¡¼¥È¡Ù¤¬¹çÂΤ·¤¿¡ª");
3706 #else
3707                                         msg_print("Banor and Rupart combine into one!");
3708 #endif
3709
3710                                         break;
3711                                 }
3712                                 default: return FALSE;
3713                         }
3714                         break;
3715                 }
3716
3717                 /* RF6_TELE_TO */
3718                 case 160+8:
3719                 {
3720                         if (x!=px || y!=py) return (FALSE);
3721                         if (!direct) break;
3722                         disturb(1, 0);
3723 #ifdef JP
3724 msg_format("%^s¤¬¤¢¤Ê¤¿¤ò°ú¤­Ìᤷ¤¿¡£", m_name);
3725 #else
3726                         msg_format("%^s commands you to return.", m_name);
3727 #endif
3728
3729                         teleport_player_to(m_ptr->fy, m_ptr->fx, TRUE);
3730                         learn_spell(MS_TELE_TO);
3731                         break;
3732                 }
3733
3734                 /* RF6_TELE_AWAY */
3735                 case 160+9:
3736                 {
3737                         if (x!=px || y!=py) return (FALSE);
3738                         if (!direct) break;
3739                         disturb(1, 0);
3740 #ifdef JP
3741 msg_format("%^s¤Ë¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤é¤ì¤¿¡£", m_name);
3742                         if ((p_ptr->pseikaku == SEIKAKU_COMBAT) || (inventory[INVEN_BOW].name1 == ART_CRIMSON))
3743                                 msg_print("¤¯¤Ã¤½¡Á");
3744 #else
3745                         msg_format("%^s teleports you away.", m_name);
3746 #endif
3747
3748                         learn_spell(MS_TELE_AWAY);
3749                         teleport_player(100);
3750                         break;
3751                 }
3752
3753                 /* RF6_TELE_LEVEL */
3754                 case 160+10:
3755                 {
3756                         if (x!=px || y!=py) return (FALSE);
3757                         if (!direct) break;
3758                         disturb(1, 0);
3759 #ifdef JP
3760 if (blind) msg_format("%^s¤¬²¿¤«´ñ̯¤Ê¸ÀÍÕ¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3761 #else
3762                         if (blind) msg_format("%^s mumbles strangely.", m_name);
3763 #endif
3764
3765 #ifdef JP
3766 else msg_format("%^s¤¬¤¢¤Ê¤¿¤Î­¤ò»Ø¤µ¤·¤¿¡£", m_name);
3767 #else
3768                         else msg_format("%^s gestures at your feet.", m_name);
3769 #endif
3770
3771                         if (p_ptr->resist_nexus)
3772                         {
3773 #ifdef JP
3774 msg_print("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª");
3775 #else
3776                                 msg_print("You are unaffected!");
3777 #endif
3778
3779                         }
3780                         else if (rand_int(100 + rlev/2) < p_ptr->skill_sav)
3781                         {
3782 #ifdef JP
3783 msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
3784 #else
3785                                 msg_print("You resist the effects!");
3786 #endif
3787
3788                         }
3789                         else
3790                         {
3791                                 teleport_player_level();
3792                         }
3793                         learn_spell(MS_TELE_LEVEL);
3794                         update_smart_learn(m_idx, DRS_NEXUS);
3795                         break;
3796                 }
3797
3798                 /* RF6_PSY_SPEAR */
3799                 case 160+11:
3800                 {
3801                         if (x!=px || y!=py) return (FALSE);
3802                         disturb(1, 0);
3803 #ifdef JP
3804 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3805 #else
3806                         if (blind) msg_format("%^s mumbles.", m_name);
3807 #endif
3808
3809 #ifdef JP
3810 else msg_format("%^s¤¬¸÷¤Î·õ¤òÊü¤Ã¤¿¡£", m_name);
3811 #else
3812                         else msg_format("%^s throw a Psycho-Spear.", m_name);
3813 #endif
3814
3815                         dam = (r_ptr->flags2 & RF2_POWERFUL) ? (randint(rlev * 2) + 150) : (randint(rlev * 3 / 2) + 100);
3816                         beam(m_idx, GF_PSY_SPEAR, dam, MS_PSY_SPEAR, learnable);
3817                         break;
3818                 }
3819
3820                 /* RF6_DARKNESS */
3821                 case 160+12:
3822                 {
3823                         if (x!=px || y!=py) return (FALSE);
3824                         if (!direct) break;
3825                         disturb(1, 0);
3826 #ifdef JP
3827 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3828 #else
3829                         if (blind) msg_format("%^s mumbles.", m_name);
3830 #endif
3831
3832 #ifdef JP
3833 else if (p_ptr->pclass == CLASS_NINJA) msg_format("%^s¤¬ÊÕ¤ê¤òÌÀ¤ë¤¯¾È¤é¤·¤¿¡£", m_name);
3834 else msg_format("%^s¤¬°Å°Ç¤ÎÃæ¤Ç¼ê¤ò¿¶¤Ã¤¿¡£", m_name);
3835 #else
3836                         else if (p_ptr->pclass == CLASS_NINJA)
3837                                 msg_format("%^s cast a spell to light up.", m_name);
3838                         else msg_format("%^s gestures in shadow.", m_name);
3839 #endif
3840
3841                         learn_spell(MS_DARKNESS);
3842                         if (p_ptr->pclass == CLASS_NINJA)
3843                                 (void)lite_area(0, 3);
3844                         else
3845                                 (void)unlite_area(0, 3);
3846                         break;
3847                 }
3848
3849                 /* RF6_TRAPS */
3850                 case 160+13:
3851                 {
3852                         if (!direct) break;
3853                         disturb(1, 0);
3854 #ifdef JP
3855 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤Æ¼Ù°­¤ËÈù¾Ð¤ó¤À¡£", m_name);
3856 #else
3857                         if (blind) msg_format("%^s mumbles, and then cackles evilly.", m_name);
3858 #endif
3859
3860 #ifdef JP
3861 else msg_format("%^s¤¬¼öʸ¤ò¾§¤¨¤Æ¼Ù°­¤ËÈù¾Ð¤ó¤À¡£", m_name);
3862 #else
3863                         else msg_format("%^s casts a spell and cackles evilly.", m_name);
3864 #endif
3865
3866                         learn_spell(MS_MAKE_TRAP);
3867                         (void)trap_creation(y, x);
3868                         break;
3869                 }
3870
3871                 /* RF6_FORGET */
3872                 case 160+14:
3873                 {
3874                         if (x!=px || y!=py) return (FALSE);
3875                         if (!direct) break;
3876                         disturb(1, 0);
3877 #ifdef JP
3878 msg_format("%^s¤¬¤¢¤Ê¤¿¤Îµ­²±¤ò¾Ãµî¤·¤è¤¦¤È¤·¤Æ¤¤¤ë¡£", m_name);
3879 #else
3880                         msg_format("%^s tries to blank your mind.", m_name);
3881 #endif
3882
3883
3884                         if (rand_int(100 + rlev/2) < p_ptr->skill_sav)
3885                         {
3886 #ifdef JP
3887 msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
3888 #else
3889                                 msg_print("You resist the effects!");
3890 #endif
3891
3892                         }
3893                         else if (lose_all_info())
3894                         {
3895 #ifdef JP
3896 msg_print("µ­²±¤¬Çö¤ì¤Æ¤·¤Þ¤Ã¤¿¡£");
3897 #else
3898                                 msg_print("Your memories fade away.");
3899 #endif
3900
3901                         }
3902                         learn_spell(MS_FORGET);
3903                         break;
3904                 }
3905
3906                 /* RF6_RAISE_DEAD */
3907                 case 160+15:
3908                 {
3909                         disturb(1, 0);
3910 #ifdef JP
3911 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3912 #else
3913                         if (blind) msg_format("%^s mumbles.", m_name);
3914 #endif
3915
3916 #ifdef JP
3917 else msg_format("%^s¤¬»à¼ÔÉü³è¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name);
3918 #else
3919                         else msg_format("%^s casts a spell to revive corpses.", m_name);
3920 #endif
3921                         animate_dead(m_idx, m_ptr->fy, m_ptr->fx);
3922                         break;
3923                 }
3924
3925                 /* RF6_SUMMON_KIN */
3926                 case 160+16:
3927                 {
3928                         disturb(1, 0);
3929                         if (m_ptr->r_idx == MON_ROLENTO)
3930                         {
3931 #ifdef JP
3932                                 if (blind)
3933                                         msg_format("%^s¤¬²¿¤«ÂçÎ̤ËÅꤲ¤¿¡£", m_name);
3934                                 else 
3935                                         msg_format("%^s¤Ï¼êÜØÃƤò¤Ð¤é¤Þ¤¤¤¿¡£", m_name);
3936 #else
3937                                 if (blind)
3938                                         msg_format("%^s spreads something.", m_name);
3939                                 else
3940                                         msg_format("%^s throws some hand grenades.", m_name);
3941 #endif
3942                         }
3943                         else if (m_ptr->r_idx == MON_SERPENT)
3944                         {
3945 #ifdef JP
3946                                 if (blind)
3947                                         msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3948                                 else
3949                                         msg_format("%^s¤¬¥À¥ó¥¸¥ç¥ó¤Î¼ç¤ò¾¤´­¤·¤¿¡£", m_name);
3950 #else
3951                                 if (blind)
3952                                         msg_format("%^s mumbles.", m_name);
3953                                 else
3954                                         msg_format("%^s magically summons guardians of dungeons.", m_name);
3955 #endif
3956                         }
3957                         else
3958                         {
3959 #ifdef JP
3960                                 if (blind)
3961                                         msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
3962                                 else
3963                                         msg_format("%^s¤ÏËâË¡¤Ç%s¤ò¾¤´­¤·¤¿¡£",
3964                                         m_name,
3965                                         ((r_ptr->flags1) & RF1_UNIQUE ?
3966                                         "¼ê²¼" : "Ãç´Ö"));
3967 #else
3968                                 if (blind)
3969                                         msg_format("%^s mumbles.", m_name);
3970                                 else
3971                                         msg_format("%^s magically summons %s %s.",
3972                                         m_name, m_poss,
3973                                         ((r_ptr->flags1) & RF1_UNIQUE ?
3974                                         "minions" : "kin"));
3975 #endif
3976                         }
3977
3978                         if(m_ptr->r_idx == MON_ROLENTO)
3979                         {
3980                                 int num = 1 + randint(3);
3981                                 for (k = 0; k < num; k++)
3982                                 {
3983                                         count += summon_named_creature(y, x, MON_SHURYUUDAN, FALSE, FALSE, is_friendly(m_ptr), is_pet(m_ptr));
3984                                 }
3985                         }
3986                         else if(m_ptr->r_idx == MON_LOUSY)
3987                         {
3988                                 int num = 2 + randint(3);
3989                                 for (k = 0; k < num; k++)
3990                                 {
3991                                         count += summon_specific(m_idx, y, x, rlev, SUMMON_LOUSE, TRUE, FALSE, FALSE, FALSE, FALSE);
3992                                 }
3993                         }
3994                         else if(m_ptr->r_idx == MON_BULLGATES)
3995                         {
3996                                 int num = 2 + randint(3);
3997                                 for (k = 0; k < num; k++)
3998                                 {
3999                                         count += summon_named_creature(y, x, 921, FALSE, FALSE, is_friendly(m_ptr), is_pet(m_ptr));
4000                                 }
4001                         }
4002                         else if (m_ptr->r_idx == MON_CALDARM)
4003                         {
4004                                 int num = randint(3);
4005                                 for (k = 0; k < num; k++)
4006                                 {
4007                                         count += summon_named_creature(y, x, 930, FALSE, FALSE, is_friendly(m_ptr), is_pet(m_ptr));
4008                                 }
4009                         }
4010                         else if (m_ptr->r_idx == MON_SERPENT)
4011                         {
4012                                 int num = 2 + randint(3);
4013
4014                                 if (r_info[MON_JORMUNGAND].cur_num < r_info[MON_JORMUNGAND].max_num && one_in_(6))
4015                                 {
4016 #ifdef JP
4017                                         msg_print("ÃÏÌ̤«¤é¿å¤¬¿á¤­½Ð¤·¤¿¡ª");
4018 #else
4019                                         msg_print("Water blew off from the ground!");
4020 #endif
4021                                         fire_ball_hide(GF_WATER_FLOW, 0, 3, 8);
4022                                 }
4023
4024                                 for (k = 0; k < num; k++)
4025                                 {
4026                                         count += summon_specific(m_idx, y, x, rlev, SUMMON_GUARDIANS, TRUE, FALSE, FALSE, TRUE, FALSE);
4027                                 }
4028                         }
4029                         else
4030                         {
4031
4032                                 summon_kin_type = r_ptr->d_char; /* Big hack */
4033
4034                                 for (k = 0; k < 4; k++)
4035                                 {
4036                                         count += summon_specific(m_idx, y, x, rlev, SUMMON_KIN, TRUE, FALSE, FALSE, FALSE, FALSE);
4037                                 }
4038                         }
4039 #ifdef JP
4040 if (blind && count) msg_print("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
4041 #else
4042                         if (blind && count) msg_print("You hear many things appear nearby.");
4043 #endif
4044
4045
4046                         break;
4047                 }
4048
4049                 /* RF6_S_CYBER */
4050                 case 160+17:
4051                 {
4052                         disturb(1, 0);
4053 #ifdef JP
4054 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4055 #else
4056                         if (blind) msg_format("%^s mumbles.", m_name);
4057 #endif
4058
4059 #ifdef JP
4060 else msg_format("%^s¤¬¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤ò¾¤´­¤·¤¿¡ª", m_name);
4061 #else
4062                         else msg_format("%^s magically summons Cyberdemons!", m_name);
4063 #endif
4064
4065 #ifdef JP
4066 if (blind && count) msg_print("½Å¸ü¤Ê­²»¤¬¶á¤¯¤Çʹ¤³¤¨¤ë¡£");
4067 #else
4068                         if (blind && count) msg_print("You hear heavy steps nearby.");
4069 #endif
4070
4071                         summon_cyber(m_idx, y, x);
4072                         break;
4073                 }
4074
4075                 /* RF6_S_MONSTER */
4076                 case 160+18:
4077                 {
4078                         disturb(1, 0);
4079 #ifdef JP
4080 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4081 #else
4082                         if (blind) msg_format("%^s mumbles.", m_name);
4083 #endif
4084
4085 #ifdef JP
4086 else msg_format("%^s¤¬ËâË¡¤ÇÃç´Ö¤ò¾¤´­¤·¤¿¡ª", m_name);
4087 #else
4088                         else msg_format("%^s magically summons help!", m_name);
4089 #endif
4090
4091                         for (k = 0; k < 1; k++)
4092                         {
4093                                 count += summon_specific(m_idx, y, x, rlev, 0, TRUE, FALSE, FALSE, TRUE, FALSE);
4094                         }
4095 #ifdef JP
4096 if (blind && count) msg_print("²¿¤«¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
4097 #else
4098                         if (blind && count) msg_print("You hear something appear nearby.");
4099 #endif
4100
4101                         break;
4102                 }
4103
4104                 /* RF6_S_MONSTERS */
4105                 case 160+19:
4106                 {
4107                         disturb(1, 0);
4108 #ifdef JP
4109 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4110 #else
4111                         if (blind) msg_format("%^s mumbles.", m_name);
4112 #endif
4113
4114 #ifdef JP
4115 else msg_format("%^s¤¬ËâË¡¤Ç¥â¥ó¥¹¥¿¡¼¤ò¾¤´­¤·¤¿¡ª", m_name);
4116 #else
4117                         else msg_format("%^s magically summons monsters!", m_name);
4118 #endif
4119
4120                         for (k = 0; k < s_num_6; k++)
4121                         {
4122                                 count += summon_specific(m_idx, y, x, rlev, 0, TRUE, FALSE, FALSE, TRUE, FALSE);
4123                         }
4124 #ifdef JP
4125 if (blind && count) msg_print("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
4126 #else
4127                         if (blind && count) msg_print("You hear many things appear nearby.");
4128 #endif
4129
4130                         break;
4131                 }
4132
4133                 /* RF6_S_ANT */
4134                 case 160+20:
4135                 {
4136                         disturb(1, 0);
4137 #ifdef JP
4138 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4139 #else
4140                         if (blind) msg_format("%^s mumbles.", m_name);
4141 #endif
4142
4143 #ifdef JP
4144 else msg_format("%^s¤¬ËâË¡¤Ç¥¢¥ê¤ò¾¤´­¤·¤¿¡£", m_name);
4145 #else
4146                         else msg_format("%^s magically summons ants.", m_name);
4147 #endif
4148
4149                         for (k = 0; k < s_num_6; k++)
4150                         {
4151                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_ANT, TRUE, FALSE, FALSE, FALSE, FALSE);
4152                         }
4153 #ifdef JP
4154 if (blind && count) msg_print("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
4155 #else
4156                         if (blind && count) msg_print("You hear many things appear nearby.");
4157 #endif
4158
4159                         break;
4160                 }
4161
4162                 /* RF6_S_SPIDER */
4163                 case 160+21:
4164                 {
4165                         disturb(1, 0);
4166 #ifdef JP
4167 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4168 #else
4169                         if (blind) msg_format("%^s mumbles.", m_name);
4170 #endif
4171
4172 #ifdef JP
4173 else msg_format("%^s¤¬ËâË¡¤Ç¥¯¥â¤ò¾¤´­¤·¤¿¡£", m_name);
4174 #else
4175                         else msg_format("%^s magically summons spiders.", m_name);
4176 #endif
4177
4178                         for (k = 0; k < s_num_6; k++)
4179                         {
4180                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_SPIDER, TRUE, FALSE, FALSE, FALSE, FALSE);
4181                         }
4182 #ifdef JP
4183 if (blind && count) msg_print("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
4184 #else
4185                         if (blind && count) msg_print("You hear many things appear nearby.");
4186 #endif
4187
4188                         break;
4189                 }
4190
4191                 /* RF6_S_HOUND */
4192                 case 160+22:
4193                 {
4194                         disturb(1, 0);
4195 #ifdef JP
4196 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4197 #else
4198                         if (blind) msg_format("%^s mumbles.", m_name);
4199 #endif
4200
4201 #ifdef JP
4202 else msg_format("%^s¤¬ËâË¡¤Ç¥Ï¥¦¥ó¥É¤ò¾¤´­¤·¤¿¡£", m_name);
4203 #else
4204                         else msg_format("%^s magically summons hounds.", m_name);
4205 #endif
4206
4207                         for (k = 0; k < s_num_4; k++)
4208                         {
4209                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_HOUND, TRUE, FALSE, FALSE, FALSE, FALSE);
4210                         }
4211 #ifdef JP
4212 if (blind && count) msg_print("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
4213 #else
4214                         if (blind && count) msg_print("You hear many things appear nearby.");
4215 #endif
4216
4217                         break;
4218                 }
4219
4220                 /* RF6_S_HYDRA */
4221                 case 160+23:
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 hydras.", m_name);
4234 #endif
4235
4236                         for (k = 0; k < s_num_4; k++)
4237                         {
4238                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_HYDRA, TRUE, FALSE, FALSE, FALSE, FALSE);
4239                         }
4240 #ifdef JP
4241 if (blind && count) msg_print("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
4242 #else
4243                         if (blind && count) msg_print("You hear many things appear nearby.");
4244 #endif
4245
4246                         break;
4247                 }
4248
4249                 /* RF6_S_ANGEL */
4250                 case 160+24:
4251                 {
4252                         int num = 1;
4253
4254                         disturb(1, 0);
4255 #ifdef JP
4256 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4257 #else
4258                         if (blind) msg_format("%^s mumbles.", m_name);
4259 #endif
4260
4261 #ifdef JP
4262 else msg_format("%^s¤¬ËâË¡¤ÇÅ·»È¤ò¾¤´­¤·¤¿¡ª", m_name);
4263 #else
4264                         else msg_format("%^s magically summons an angel!", m_name);
4265 #endif
4266
4267                         if ((r_ptr->flags1 & RF1_UNIQUE) && !easy_band)
4268                         {
4269                                 num += r_ptr->level/40;
4270                         }
4271
4272                         for (k = 0; k < num; k++)
4273                         {
4274                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_ANGEL, TRUE, FALSE, FALSE, FALSE, FALSE);
4275                         }
4276
4277                         if (count < 2)
4278                         {
4279 #ifdef JP
4280 if (blind && count) msg_print("²¿¤«¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
4281 #else
4282                                 if (blind && count) msg_print("You hear something appear nearby.");
4283 #endif
4284                         }
4285                         else
4286                         {
4287 #ifdef JP
4288 if (blind) msg_print("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
4289 #else
4290                                 if (blind) msg_print("You hear many things appear nearby.");
4291 #endif
4292                         }
4293
4294                         break;
4295                 }
4296
4297                 /* RF6_S_DEMON */
4298                 case 160+25:
4299                 {
4300                         disturb(1, 0);
4301 #ifdef JP
4302 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4303 #else
4304                         if (blind) msg_format("%^s mumbles.", m_name);
4305 #endif
4306
4307 #ifdef JP
4308 else msg_format("%^s¤ÏËâË¡¤Çº®Æ٤εÜÄ¤é°­Ëâ¤ò¾¤´­¤·¤¿¡ª", m_name);
4309 #else
4310                         else msg_format("%^s magically summons a demon from the Courts of Chaos!", m_name);
4311 #endif
4312
4313                         for (k = 0; k < 1; k++)
4314                         {
4315                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_DEMON, TRUE, FALSE, FALSE, FALSE, FALSE);
4316                         }
4317 #ifdef JP
4318 if (blind && count) msg_print("²¿¤«¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
4319 #else
4320                         if (blind && count) msg_print("You hear something appear nearby.");
4321 #endif
4322
4323                         break;
4324                 }
4325
4326                 /* RF6_S_UNDEAD */
4327                 case 160+26:
4328                 {
4329                         disturb(1, 0);
4330 #ifdef JP
4331 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4332 #else
4333                         if (blind) msg_format("%^s mumbles.", m_name);
4334 #endif
4335
4336 #ifdef JP
4337 else msg_format("%^s¤¬ËâË¡¤Ç¥¢¥ó¥Ç¥Ã¥É¤Î¶¯Å¨¤ò¾¤´­¤·¤¿¡ª", m_name);
4338 #else
4339                         else msg_format("%^s magically summons an undead adversary!", m_name);
4340 #endif
4341
4342                         for (k = 0; k < 1; k++)
4343                         {
4344                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_UNDEAD, TRUE, FALSE, FALSE, FALSE, FALSE);
4345                         }
4346 #ifdef JP
4347 if (blind && count) msg_print("²¿¤«¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
4348 #else
4349                         if (blind && count) msg_print("You hear something appear nearby.");
4350 #endif
4351
4352                         break;
4353                 }
4354
4355                 /* RF6_S_DRAGON */
4356                 case 160+27:
4357                 {
4358                         disturb(1, 0);
4359 #ifdef JP
4360 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4361 #else
4362                         if (blind) msg_format("%^s mumbles.", m_name);
4363 #endif
4364
4365 #ifdef JP
4366 else msg_format("%^s¤¬ËâË¡¤Ç¥É¥é¥´¥ó¤ò¾¤´­¤·¤¿¡ª", m_name);
4367 #else
4368                         else msg_format("%^s magically summons a dragon!", m_name);
4369 #endif
4370
4371                         for (k = 0; k < 1; k++)
4372                         {
4373                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_DRAGON, TRUE, FALSE, FALSE, FALSE, FALSE);
4374                         }
4375 #ifdef JP
4376 if (blind && count) msg_print("²¿¤«¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
4377 #else
4378                         if (blind && count) msg_print("You hear something appear nearby.");
4379 #endif
4380
4381                         break;
4382                 }
4383
4384                 /* RF6_S_HI_UNDEAD */
4385                 case 160+28:
4386                 {
4387                         disturb(1, 0);
4388
4389                         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))
4390                         {
4391                                 int cy = y;
4392                                 int cx = x;
4393
4394 #ifdef JP
4395 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4396 #else
4397                                 if (blind) msg_format("%^s mumbles.", m_name);
4398 #endif
4399
4400 #ifdef JP
4401 else msg_format("%^s¤¬ËâË¡¤ÇÍ©µ´ÀïÂâ¤ò¾¤´­¤·¤¿¡ª", m_name);
4402 #else
4403                                 else msg_format("%^s magically summons rangers of Nazgul!", m_name);
4404 #endif
4405                                 msg_print(NULL);
4406
4407                                 for (k = 0; k < 30; k++)
4408                                 {
4409                                         if (!summon_possible(cy, cx) || !cave_floor_bold(cy, cx))
4410                                         {
4411                                                 int j;
4412                                                 for (j = 100; j > 0; j--)
4413                                                 {
4414                                                         scatter(&cy, &cx, y, x, 2, 0);
4415                                                         if (cave_floor_bold(cy, cx)) break;
4416                                                 }
4417                                                 if (!j) break;
4418                                         }
4419                                         if (!cave_floor_bold(cy, cx)) continue;
4420
4421                                         if (summon_named_creature(cy, cx, MON_NAZGUL, FALSE, FALSE, is_friendly(m_ptr), is_pet(m_ptr)))
4422                                         {
4423                                                 y = cy;
4424                                                 x = cx;
4425                                                 count++;
4426                                                 if (count == 1)
4427 #ifdef JP
4428 msg_format("¡ÖÍ©µ´ÀïÂâ%d¹æ¡¢¥Ê¥º¥°¥ë¡¦¥Ö¥é¥Ã¥¯¡ª¡×", count);
4429 #else
4430                                                         msg_format("A Nazgul says 'Nazgul-Rangers Number %d, Nazgul-Black!'",count);
4431 #endif
4432                                                 else
4433 #ifdef JP
4434 msg_format("¡ÖƱ¤¸¤¯%d¹æ¡¢¥Ê¥º¥°¥ë¡¦¥Ö¥é¥Ã¥¯¡ª¡×", count);
4435 #else
4436                                                         msg_format("Another one says 'Number %d, Nazgul-Black!'",count);
4437 #endif
4438                                                 msg_print(NULL);
4439                                         }
4440                                 }
4441 #ifdef JP
4442 msg_format("¡Ö%dɤ¤½¤í¤Ã¤Æ¡¢¥ê¥ó¥°¥ì¥ó¥¸¥ã¡¼¡ª¡×", count);
4443 #else
4444 msg_format("They say 'The %d meets! We are the Ring-Ranger!'.", count);
4445 #endif
4446                                 msg_print(NULL);
4447                         }
4448                         else
4449                         {
4450 #ifdef JP
4451 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4452 #else
4453                                 if (blind) msg_format("%^s mumbles.", m_name);
4454 #endif
4455
4456 #ifdef JP
4457 else msg_format("%^s¤¬ËâË¡¤Ç¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤·¤¿¡ª", m_name);
4458 #else
4459                                 else msg_format("%^s magically summons greater undead!", m_name);
4460 #endif
4461
4462                                 for (k = 0; k < s_num_6; k++)
4463                                 {
4464                                         count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_UNDEAD, TRUE, FALSE, FALSE, TRUE, FALSE);
4465                                 }
4466                         }
4467                         if (blind && count)
4468                         {
4469 #ifdef JP
4470 msg_print("´Ö¶á¤Ç²¿¤«Â¿¤¯¤Î¤â¤Î¤¬Ç礤²ó¤ë²»¤¬Ê¹¤³¤¨¤ë¡£");
4471 #else
4472                                 msg_print("You hear many creepy things appear nearby.");
4473 #endif
4474
4475                         }
4476                         break;
4477                 }
4478
4479                 /* RF6_S_HI_DRAGON */
4480                 case 160+29:
4481                 {
4482                         disturb(1, 0);
4483 #ifdef JP
4484 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4485 #else
4486                         if (blind) msg_format("%^s mumbles.", m_name);
4487 #endif
4488
4489 #ifdef JP
4490 else msg_format("%^s¤¬ËâË¡¤Ç¸ÅÂå¥É¥é¥´¥ó¤ò¾¤´­¤·¤¿¡ª", m_name);
4491 #else
4492                         else msg_format("%^s magically summons ancient dragons!", m_name);
4493 #endif
4494
4495                         for (k = 0; k < s_num_4; k++)
4496                         {
4497                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_DRAGON, TRUE, FALSE, FALSE, TRUE, FALSE);
4498                         }
4499                         if (blind && count)
4500                         {
4501 #ifdef JP
4502 msg_print("¿¤¯¤ÎÎ϶¯¤¤¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬Ê¹¤³¤¨¤ë¡£");
4503 #else
4504                                 msg_print("You hear many powerful things appear nearby.");
4505 #endif
4506
4507                         }
4508                         break;
4509                 }
4510
4511                 /* RF6_S_AMBERITES */
4512                 case 160+30:
4513                 {
4514                         disturb(1, 0);
4515 #ifdef JP
4516 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4517 #else
4518                         if (blind) msg_format("%^s mumbles.", m_name);
4519 #endif
4520
4521 #ifdef JP
4522 else msg_format("%^s¤¬¥¢¥ó¥Ð¡¼¤Î²¦¤ò¾¤´­¤·¤¿¡ª", m_name);
4523 #else
4524                         else msg_format("%^s magically summons Lords of Amber!", m_name);
4525 #endif
4526
4527
4528
4529                         for (k = 0; k < s_num_4; k++)
4530                         {
4531                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_AMBERITES, TRUE, FALSE, FALSE, TRUE, FALSE);
4532                         }
4533                         if (blind && count)
4534                         {
4535 #ifdef JP
4536 msg_print("ÉÔ»à¤Î¼Ô¤¬¶á¤¯¤Ë¸½¤ì¤ë¤Î¤¬Ê¹¤³¤¨¤¿¡£");
4537 #else
4538                                 msg_print("You hear immortal beings appear nearby.");
4539 #endif
4540
4541                         }
4542                         break;
4543                 }
4544
4545                 /* RF6_S_UNIQUE */
4546                 case 160+31:
4547                 {
4548                         disturb(1, 0);
4549 #ifdef JP
4550 if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name);
4551 #else
4552                         if (blind) msg_format("%^s mumbles.", m_name);
4553 #endif
4554
4555 #ifdef JP
4556 else msg_format("%^s¤¬ËâË¡¤ÇÆÃÊ̤ʶ¯Å¨¤ò¾¤´­¤·¤¿¡ª", m_name);
4557 #else
4558                         else msg_format("%^s magically summons special opponents!", m_name);
4559 #endif
4560
4561                         for (k = 0; k < s_num_4; k++)
4562                         {
4563                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_UNIQUE, TRUE, FALSE, FALSE, TRUE, FALSE);
4564                         }
4565                         if (r_ptr->flags3 & RF3_GOOD)
4566                         {
4567                                 for (k = count; k < s_num_4; k++)
4568                                 {
4569                                         count += summon_specific(m_idx, y, x, rlev, SUMMON_ANGEL, TRUE, FALSE, FALSE, TRUE, FALSE);
4570                                 }
4571                         }
4572                         else
4573                         {
4574                                 for (k = count; k < s_num_4; k++)
4575                                 {
4576                                         count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_UNDEAD, TRUE, FALSE, FALSE, TRUE, FALSE);
4577                                 }
4578                         }
4579                         if (blind && count)
4580                         {
4581 #ifdef JP
4582 msg_print("¿¤¯¤ÎÎ϶¯¤¤¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬Ê¹¤³¤¨¤ë¡£");
4583 #else
4584                                 msg_print("You hear many powerful things appear nearby.");
4585 #endif
4586
4587                         }
4588                         break;
4589                 }
4590         }
4591
4592         if ((p_ptr->action == ACTION_LEARN) && thrown_spell > 175)
4593         {
4594                 learn_spell(thrown_spell - 96);
4595         }
4596
4597         if (seen && maneable && !world_monster && (p_ptr->pclass == CLASS_IMITATOR))
4598         {
4599                 if (thrown_spell != 167)
4600                 {
4601                         if (mane_num == MAX_MANE)
4602                         {
4603                                 int i;
4604                                 mane_num--;
4605                                 for (i = 0;i < mane_num;i++)
4606                                 {
4607                                         mane_spell[i] = mane_spell[i+1];
4608                                         mane_dam[i] = mane_dam[i+1];
4609                                 }
4610                         }
4611                         mane_spell[mane_num] = thrown_spell - 96;
4612                         mane_dam[mane_num] = dam;
4613                         mane_num++;
4614                         new_mane = TRUE;
4615
4616                         p_ptr->redraw |= (PR_MANE);
4617                 }
4618         }
4619
4620         /* Remember what the monster did to us */
4621         if (seen)
4622         {
4623                 /* Inate spell */
4624                 if (thrown_spell < 32 * 4)
4625                 {
4626                         r_ptr->r_flags4 |= (1L << (thrown_spell - 32 * 3));
4627                         if (r_ptr->r_cast_inate < MAX_UCHAR) r_ptr->r_cast_inate++;
4628                 }
4629
4630                 /* Bolt or Ball */
4631                 else if (thrown_spell < 32 * 5)
4632                 {
4633                         r_ptr->r_flags5 |= (1L << (thrown_spell - 32 * 4));
4634                         if (r_ptr->r_cast_spell < MAX_UCHAR) r_ptr->r_cast_spell++;
4635                 }
4636
4637                 /* Special spell */
4638                 else if (thrown_spell < 32 * 6)
4639                 {
4640                         r_ptr->r_flags6 |= (1L << (thrown_spell - 32 * 5));
4641                         if (r_ptr->r_cast_spell < MAX_UCHAR) r_ptr->r_cast_spell++;
4642                 }
4643         }
4644
4645
4646         /* Always take note of monsters that kill you */
4647         if (death && (r_ptr->r_deaths < MAX_SHORT))
4648         {
4649                 r_ptr->r_deaths++;
4650         }
4651
4652         /* A spell was cast */
4653         return (TRUE);
4654 }