OSDN Git Service

56e3b625bb8cf221d127cf6dfb3c7c85c1060639
[hengband/hengband.git] / src / mspells2.c
1 /*!
2  * @file mspells2.c
3  * @brief ¥â¥ó¥¹¥¿¡¼ËâË¡¤Î¼ÂÁõ(ÂÐ¥â¥ó¥¹¥¿¡¼½èÍý) / Monster spells (attack monster)
4  * @date 2014/01/17
5  * @author
6  * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke\n
7  * This software may be copied and distributed for educational, research,\n
8  * and not for profit purposes provided that this copyright and statement\n
9  * are included in all such copies.  Other copyrights may also apply.\n
10  * 2014 Deskull rearranged comment for Doxygen.\n
11  * @details
12  */
13
14 #include "angband.h"
15
16
17 /*!
18  * @brief ¥â¥ó¥¹¥¿¡¼¤¬Å¨ÂÐ¥â¥ó¥¹¥¿¡¼¤Ë¥Ö¥ì¥¹/¥Ü¡¼¥ë·¿Æü쵻ǽ¤òÊü¤Ä½èÍý /
19  * Monster casts a breath (or ball) attack at another monster.
20  * @param m_idx Æü쵻ǽ¤ò»È¤¦¥â¥ó¥¹¥¿¡¼¤Î»²¾ÈID
21  * @param y ÌÜɸ¤ÎYºÂɸ
22  * @param x ÌÜɸ¤ÎXºÂɸ
23  * @param typ ¸ú²Ì°À­¤ÎID
24  * @param dam_hp °ÒÎÏ
25  * @param rad È¾·Â
26  * @param breath TRUE¤Ê¤é¤Ð¥Ö¥ì¥¹ / FALSE¤Ê¤é¤Ð¥Ü¡¼¥ë
27  * @param monspell Æü칶·â¤ÎID
28  * @param learnable ¥é¡¼¥Ë¥ó¥°²Äǽ¤ÊÁ°Äó¤¬Â·¤Ã¤Æ¤¤¤ë¤Ê¤é¤ÐTRUE
29  * @return ¤Ê¤·
30  * @details
31  * Pass over any monsters that may be in the way
32  * Affect grids, objects, monsters, and the player
33  */
34 void monst_breath_monst(int m_idx, int y, int x, int typ, int dam_hp, int rad, bool breath, int monspell, bool learnable)
35 {
36         int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
37
38         monster_type *m_ptr = &m_list[m_idx];
39         monster_race *r_ptr = &r_info[m_ptr->r_idx];
40
41         /* Determine the radius of the blast */
42         if (rad < 1 && breath) rad = (r_ptr->flags2 & RF2_POWERFUL) ? 3 : 2;
43
44         /* Handle breath attacks */
45         if (breath) rad = 0 - rad;
46
47         switch (typ)
48         {
49         case GF_ROCKET:
50                 flg |= PROJECT_STOP;
51                 break;
52         case GF_DRAIN_MANA:
53         case GF_MIND_BLAST:
54         case GF_BRAIN_SMASH:
55         case GF_CAUSE_1:
56         case GF_CAUSE_2:
57         case GF_CAUSE_3:
58         case GF_CAUSE_4:
59         case GF_HAND_DOOM:
60                 flg |= (PROJECT_HIDE | PROJECT_AIMED);
61                 break;
62         }
63
64         (void)project(m_idx, rad, y, x, dam_hp, typ, flg, (learnable ? monspell : -1));
65 }
66
67
68 /*!
69  * @brief ¥â¥ó¥¹¥¿¡¼¤¬Å¨ÂÐ¥â¥ó¥¹¥¿¡¼¤Ë¥Ü¥ë¥È·¿Æü쵻ǽ¤òÊü¤Ä½èÍý /
70  * Monster casts a bolt at another monster
71  * @param m_idx Æü쵻ǽ¤ò»È¤¦¥â¥ó¥¹¥¿¡¼¤Î»²¾ÈID
72  * @param y ÌÜɸ¤ÎYºÂɸ
73  * @param x ÌÜɸ¤ÎXºÂɸ
74  * @param typ ¸ú²Ì°À­¤ÎID
75  * @param dam_hp °ÒÎÏ
76  * @param monspell Æü칶·â¤ÎID
77  * @param learnable ¥é¡¼¥Ë¥ó¥°²Äǽ¤ÊÁ°Äó¤¬Â·¤Ã¤Æ¤¤¤ë¤Ê¤é¤ÐTRUE
78  * @return ¤Ê¤·
79  * @details
80  * Stop if we hit a monster
81  * Affect monsters and the player
82  */
83 static void monst_bolt_monst(int m_idx, int y, int x, int typ, int dam_hp, int monspell, bool learnable)
84 {
85         int flg = PROJECT_STOP | PROJECT_KILL;
86         if (typ != GF_ARROW) flg |= PROJECT_REFLECTABLE;
87         (void)project(m_idx, 0, y, x, dam_hp, typ, flg, (learnable ? monspell : -1));
88 }
89
90
91 /*!
92  * @brief ¥â¥ó¥¹¥¿¡¼¤¬Å¨ÂÐ¥â¥ó¥¹¥¿¡¼¤Ë¥Ó¡¼¥à·¿Æü쵻ǽ¤òÊü¤Ä½èÍý /
93  * Monster casts a bolt at another monster
94  * @param m_idx Æü쵻ǽ¤ò»È¤¦¥â¥ó¥¹¥¿¡¼¤Î»²¾ÈID
95  * @param y ÌÜɸ¤ÎYºÂɸ
96  * @param x ÌÜɸ¤ÎXºÂɸ
97  * @param typ ¸ú²Ì°À­¤ÎID
98  * @param dam_hp °ÒÎÏ
99  * @param monspell Æü칶·â¤ÎID
100  * @param learnable ¥é¡¼¥Ë¥ó¥°²Äǽ¤ÊÁ°Äó¤¬Â·¤Ã¤Æ¤¤¤ë¤Ê¤é¤ÐTRUE
101  * @return ¤Ê¤·
102  */
103 static void monst_beam_monst(int m_idx, int y, int x, int typ, int dam_hp, int monspell, bool learnable)
104 {
105         int flg = PROJECT_BEAM | PROJECT_KILL | PROJECT_THRU;
106
107         (void)project(m_idx, 0, y, x, dam_hp, typ, flg, (learnable ? monspell : -1));
108 }
109
110 /*!
111  * @brief ¥â¥ó¥¹¥¿¡¼¤¬Å¨ÂÐ¥â¥ó¥¹¥¿¡¼¤Ë¥Ó¡¼¥à¤òÅö¤Æ¤ë¤³¤È²Äǽ¤«¤òȽÄꤹ¤ë /
112  * Determine if a beam spell will hit the target.
113  * @param y1 »ÏÅÀ¤ÎYºÂɸ
114  * @param x1 »ÏÅÀ¤ÎXºÂɸ
115  * @param y2 ÌÜɸ¤ÎYºÂɸ
116  * @param x2 ÌÜɸ¤ÎXºÂɸ
117  * @param m_ptr »ÈÍѤ¹¤ë¥â¥ó¥¹¥¿¡¼¤Î¹½Â¤Âλ²¾È¥Ý¥¤¥ó¥¿
118  * @return ¥Ó¡¼¥à¤¬Åþã²Äǽ¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
119  */
120 static bool direct_beam(int y1, int x1, int y2, int x2, monster_type *m_ptr)
121 {
122         bool hit2 = FALSE;
123         int i, y, x;
124
125         int grid_n = 0;
126         u16b grid_g[512];
127
128         bool is_friend = is_pet(m_ptr);
129
130         /* Check the projection path */
131         grid_n = project_path(grid_g, MAX_RANGE, y1, x1, y2, x2, PROJECT_THRU);
132
133         /* No grid is ever projectable from itself */
134         if (!grid_n) return (FALSE);
135
136         for (i = 0; i < grid_n; i++)
137         {
138                 y = GRID_Y(grid_g[i]);
139                 x = GRID_X(grid_g[i]);
140
141                 if (y == y2 && x == x2)
142                         hit2 = TRUE;
143                 else if (is_friend && cave[y][x].m_idx > 0 &&
144                          !are_enemies(m_ptr, &m_list[cave[y][x].m_idx]))
145                 {
146                         /* Friends don't shoot friends */
147                         return FALSE;
148                 }
149
150                 if (is_friend && player_bold(y, x))
151                         return FALSE;
152         }
153         if (!hit2)
154                 return FALSE;
155         return TRUE;
156 }
157
158 /*!
159  * @brief ¥â¥ó¥¹¥¿¡¼¤¬Å¨ÂÐ¥â¥ó¥¹¥¿¡¼¤ËľÀܥ֥쥹¤òÅö¤Æ¤ë¤³¤È¤¬²Äǽ¤«¤òȽÄꤹ¤ë /
160  * Determine if a breath will hit the target.
161  * @param y1 »ÏÅÀ¤ÎYºÂɸ
162  * @param x1 »ÏÅÀ¤ÎXºÂɸ
163  * @param y2 ÌÜɸ¤ÎYºÂɸ
164  * @param x2 ÌÜɸ¤ÎXºÂɸ
165  * @param rad È¾·Â
166  * @param typ ¸ú²Ì°À­ID
167  * @param is_friend TRUE¤Ê¤é¤Ð¡¢¥×¥ì¥¤¥ä¡¼¤ò´¬¤­¹þ¤à»þ¤Ë¥Ö¥ì¥¹¤ÎȽÄê¤òFALSE¤Ë¤¹¤ë¡£
168  * @return ¥Ö¥ì¥¹¤òľÀÜÅö¤Æ¤é¤ì¤ë¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
169  */
170 static bool breath_direct(int y1, int x1, int y2, int x2, int rad, int typ, bool is_friend)
171 {
172         /* Must be the same as projectable() */
173
174         int i;
175
176         /* Initial grid */
177         int y = y1;
178         int x = x1;
179
180         int grid_n = 0;
181         u16b grid_g[512];
182
183         int grids = 0;
184         byte gx[1024], gy[1024];
185         byte gm[32];
186         int gm_rad = rad;
187
188         bool hit2 = FALSE;
189         bool hityou = FALSE;
190
191         int flg;
192
193         switch (typ)
194         {
195         case GF_LITE:
196         case GF_LITE_WEAK:
197                 flg = PROJECT_LOS;
198                 break;
199         case GF_DISINTEGRATE:
200                 flg = PROJECT_DISI;
201                 break;
202         default:
203                 flg = 0;
204                 break;
205         }
206
207         /* Check the projection path */
208         grid_n = project_path(grid_g, MAX_RANGE, y1, x1, y2, x2, flg);
209
210         /* Project along the path */
211         for (i = 0; i < grid_n; ++i)
212         {
213                 int ny = GRID_Y(grid_g[i]);
214                 int nx = GRID_X(grid_g[i]);
215
216                 if (flg & PROJECT_DISI)
217                 {
218                         /* Hack -- Balls explode before reaching walls */
219                         if (cave_stop_disintegration(ny, nx)) break;
220                 }
221                 else if (flg & PROJECT_LOS)
222                 {
223                         /* Hack -- Balls explode before reaching walls */
224                         if (!cave_los_bold(ny, nx)) break;
225                 }
226                 else
227                 {
228                         /* Hack -- Balls explode before reaching walls */
229                         if (!cave_have_flag_bold(ny, nx, FF_PROJECT)) break;
230                 }
231
232                 /* Save the "blast epicenter" */
233                 y = ny;
234                 x = nx;
235         }
236
237         grid_n = i;
238
239         if (!grid_n)
240         {
241                 if (flg & PROJECT_DISI)
242                 {
243                         if (in_disintegration_range(y1, x1, y2, x2) && (distance(y1, x1, y2, x2) <= rad)) hit2 = TRUE;
244                         if (in_disintegration_range(y1, x1, py, px) && (distance(y1, x1, py, px) <= rad)) hityou = TRUE;
245                 }
246                 else if (flg & PROJECT_LOS)
247                 {
248                         if (los(y1, x1, y2, x2) && (distance(y1, x1, y2, x2) <= rad)) hit2 = TRUE;
249                         if (los(y1, x1, py, px) && (distance(y1, x1, py, px) <= rad)) hityou = TRUE;
250                 }
251                 else
252                 {
253                         if (projectable(y1, x1, y2, x2) && (distance(y1, x1, y2, x2) <= rad)) hit2 = TRUE;
254                         if (projectable(y1, x1, py, px) && (distance(y1, x1, py, px) <= rad)) hityou = TRUE;
255                 }
256         }
257         else
258         {
259                 breath_shape(grid_g, grid_n, &grids, gx, gy, gm, &gm_rad, rad, y1, x1, y, x, typ);
260
261                 for (i = 0; i < grids; i++)
262                 {
263                         /* Extract the location */
264                         y = gy[i];
265                         x = gx[i];
266
267                         if ((y == y2) && (x == x2)) hit2 = TRUE;
268                         if (player_bold(y, x)) hityou = TRUE;
269                 }
270         }
271
272         if (!hit2) return FALSE;
273         if (is_friend && hityou) return FALSE;
274
275         return TRUE;
276 }
277
278 /*!
279  * @brief ¥â¥ó¥¹¥¿¡¼¤¬ÆüìǽÎϤÎÌÜɸÃÏÅÀ¤ò·è¤á¤ë½èÍý /
280  * Get the actual center point of ball spells (rad > 1) (originally from TOband)
281  * @param sy »ÏÅÀ¤ÎYºÂɸ
282  * @param sx »ÏÅÀ¤ÎXºÂɸ
283  * @param ty ÌÜɸYºÂɸ¤òÊÖ¤¹»²¾È¥Ý¥¤¥ó¥¿
284  * @param tx ÌÜɸXºÂɸ¤òÊÖ¤¹»²¾È¥Ý¥¤¥ó¥¿
285  * @param flg È½Äê¤Î¥Õ¥é¥°ÇÛÎó
286  * @return ¤Ê¤·
287  */
288 void get_project_point(int sy, int sx, int *ty, int *tx, int flg)
289 {
290         u16b path_g[128];
291         int  path_n, i;
292
293         path_n = project_path(path_g, MAX_RANGE, sy, sx, *ty, *tx, flg);
294
295         *ty = sy;
296         *tx = sx;
297
298         /* Project along the path */
299         for (i = 0; i < path_n; i++)
300         {
301                 sy = GRID_Y(path_g[i]);
302                 sx = GRID_X(path_g[i]);
303
304                 /* Hack -- Balls explode before reaching walls */
305                 if (!cave_have_flag_bold(sy, sx, FF_PROJECT)) break;
306
307                 *ty = sy;
308                 *tx = sx;
309         }
310 }
311
312 /*!
313  * @brief ¥â¥ó¥¹¥¿¡¼¤¬Å¨¥â¥ó¥¹¥¿¡¼¤ËËâÎϾõî¤ò»È¤¦¤«¤É¤¦¤«¤òÊÖ¤¹ /
314  * Check should monster cast dispel spell at other monster.
315  * @param m_idx ½Ñ¼Ô¤Î¥â¥ó¥¹¥¿¡¼ID
316  * @param t_idx ÌÜɸ¤Î¥â¥ó¥¹¥¿¡¼ID
317  * @return ËâÎϾõî¤ò»È¤¦¤Ù¤­¤Ê¤é¤ÐTRUE¤òÊѤ¨¤¹¡£
318  */
319 static bool dispel_check_monster(int m_idx, int t_idx)
320 {
321         monster_type *t_ptr = &m_list[t_idx];
322
323         /* Invulnabilty */
324         if (MON_INVULNER(t_ptr)) return TRUE;
325
326         /* Speed */
327         if (t_ptr->mspeed < 135)
328         {
329                 if (MON_FAST(t_ptr)) return TRUE;
330         }
331
332         /* Riding monster */
333         if (t_idx == p_ptr->riding)
334         {
335                 if (dispel_check(m_idx)) return TRUE;
336         }
337
338         /* No need to cast dispel spell */
339         return FALSE;
340 }
341
342 /*!
343  * @brief ¥â¥ó¥¹¥¿¡¼¤¬Å¨¥â¥ó¥¹¥¿¡¼¤ËÆüìǽÎϤò»È¤¦½èÍý¤Î¥á¥¤¥ó¥ë¡¼¥Á¥ó /
344  * Monster tries to 'cast a spell' (or breath, etc) at another monster.
345  * @param m_idx ½Ñ¼Ô¤Î¥â¥ó¥¹¥¿¡¼ID
346  * @return ¼ÂºÝ¤ËÆüìǽÎϤò»È¤Ã¤¿¾ì¹çTRUE¤òÊÖ¤¹
347  * @details
348  * The player is only disturbed if able to be affected by the spell.
349  */
350 bool monst_spell_monst(int m_idx)
351 {
352         int y = 0, x = 0;
353         int i, k, t_idx = 0;
354         int thrown_spell, count = 0;
355         int rlev;
356         int dam = 0;
357         int start;
358         int plus = 1;
359         u32b u_mode = 0L;
360         int s_num_6 = (easy_band ? 2 : 6);
361         int s_num_4 = (easy_band ? 1 : 4);
362         int rad = 0; //For elemental balls
363
364         byte spell[96], num = 0;
365
366         char m_name[160];
367         char t_name[160];
368
369 #ifndef JP
370         char m_poss[160];
371 #endif
372
373         monster_type *m_ptr = &m_list[m_idx];
374         monster_type *t_ptr = NULL;
375
376         monster_race *r_ptr = &r_info[m_ptr->r_idx];
377         monster_race *tr_ptr = NULL;
378
379         u32b f4, f5, f6;
380
381         bool wake_up = FALSE;
382         bool fear = FALSE;
383
384         bool blind = (p_ptr->blind ? TRUE : FALSE);
385
386         bool see_m = is_seen(m_ptr);
387         bool maneable = player_has_los_bold(m_ptr->fy, m_ptr->fx);
388         bool learnable = (m_ptr->ml && maneable && !world_monster);
389         bool see_t;
390         bool see_either;
391         bool known;
392
393         bool pet = is_pet(m_ptr);
394
395         bool in_no_magic_dungeon = (d_info[dungeon_type].flags1 & DF1_NO_MAGIC) && dun_level
396                 && (!p_ptr->inside_quest || is_fixed_quest_idx(p_ptr->inside_quest));
397
398         bool can_use_lite_area = FALSE;
399
400         bool can_remember;
401
402         bool resists_tele = FALSE;
403
404         /* Prepare flags for summoning */
405         if (!pet) u_mode |= PM_ALLOW_UNIQUE;
406
407         /* Cannot cast spells when confused */
408         if (MON_CONFUSED(m_ptr)) return (FALSE);
409
410         /* Extract the racial spell flags */
411         f4 = r_ptr->flags4;
412         f5 = r_ptr->flags5;
413         f6 = r_ptr->flags6;
414
415         /* Target is given for pet? */
416         if (pet_t_m_idx && pet)
417         {
418                 t_idx = pet_t_m_idx;
419                 t_ptr = &m_list[t_idx];
420
421                 /* Cancel if not projectable (for now) */
422                 if ((m_idx == t_idx) || !projectable(m_ptr->fy, m_ptr->fx, t_ptr->fy, t_ptr->fx))
423                 {
424                         t_idx = 0;
425                 }
426         }
427
428         /* Is there counter attack target? */
429         if (!t_idx && m_ptr->target_y)
430         {
431                 t_idx = cave[m_ptr->target_y][m_ptr->target_x].m_idx;
432
433                 if (t_idx)
434                 {
435                         t_ptr = &m_list[t_idx];
436
437                         /* Cancel if neither enemy nor a given target */
438                         if ((m_idx == t_idx) ||
439                             ((t_idx != pet_t_m_idx) && !are_enemies(m_ptr, t_ptr)))
440                         {
441                                 t_idx = 0;
442                         }
443
444                         /* Allow only summoning etc.. if not projectable */
445                         else if (!projectable(m_ptr->fy, m_ptr->fx, t_ptr->fy, t_ptr->fx))
446                         {
447                                 f4 &= (RF4_INDIRECT_MASK);
448                                 f5 &= (RF5_INDIRECT_MASK);
449                                 f6 &= (RF6_INDIRECT_MASK);
450                         }
451                 }
452         }
453
454         /* Look for enemies normally */
455         if (!t_idx)
456         {
457                 bool success = FALSE;
458
459                 if (p_ptr->inside_battle)
460                 {
461                         start = randint1(m_max-1) + m_max;
462                         if (randint0(2)) plus = -1;
463                 }
464                 else start = m_max + 1;
465
466                 /* Scan thru all monsters */
467                 for (i = start; ((i < start + m_max) && (i > start - m_max)); i += plus)
468                 {
469                         int dummy = (i % m_max);
470                         if (!dummy) continue;
471
472                         t_idx = dummy;
473                         t_ptr = &m_list[t_idx];
474
475                         /* Skip dead monsters */
476                         if (!t_ptr->r_idx) continue;
477
478                         /* Monster must be 'an enemy' */
479                         if ((m_idx == t_idx) || !are_enemies(m_ptr, t_ptr)) continue;
480
481                         /* Monster must be projectable */
482                         if (!projectable(m_ptr->fy, m_ptr->fx, t_ptr->fy, t_ptr->fx)) continue;
483
484                         /* Get it */
485                         success = TRUE;
486                         break;
487                 }
488
489                 /* No enemy found */
490                 if (!success) return FALSE;
491         }
492
493
494         /* OK -- we've got a target */
495         y = t_ptr->fy;
496         x = t_ptr->fx;
497         tr_ptr = &r_info[t_ptr->r_idx];
498
499         /* Forget old counter attack target */
500         reset_target(m_ptr);
501
502         /* Extract the monster level */
503         rlev = ((r_ptr->level >= 1) ? r_ptr->level : 1);
504
505         /* Remove unimplemented spells */
506         f6 &= ~(RF6_WORLD | RF6_TRAPS | RF6_FORGET);
507
508         if (f4 & RF4_BR_LITE)
509         {
510                 if (!los(m_ptr->fy, m_ptr->fx, t_ptr->fy, t_ptr->fx))
511                         f4 &= ~(RF4_BR_LITE);
512         }
513
514         /* Remove unimplemented special moves */
515         if (f6 & RF6_SPECIAL)
516         {
517                 if ((m_ptr->r_idx != MON_ROLENTO) && (r_ptr->d_char != 'B'))
518                         f6 &= ~(RF6_SPECIAL);
519         }
520
521         if (f6 & RF6_DARKNESS)
522         {
523                 bool vs_ninja = (p_ptr->pclass == CLASS_NINJA) && !is_hostile(t_ptr);
524
525                 if (vs_ninja &&
526                     !(r_ptr->flags3 & (RF3_UNDEAD | RF3_HURT_LITE)) &&
527                     !(r_ptr->flags7 & RF7_DARK_MASK))
528                         can_use_lite_area = TRUE;
529
530                 if (!(r_ptr->flags2 & RF2_STUPID))
531                 {
532                         if (d_info[dungeon_type].flags1 & DF1_DARKNESS) f6 &= ~(RF6_DARKNESS);
533                         else if (vs_ninja && !can_use_lite_area) f6 &= ~(RF6_DARKNESS);
534                 }
535         }
536
537         if (in_no_magic_dungeon && !(r_ptr->flags2 & RF2_STUPID))
538         {
539                 f4 &= (RF4_NOMAGIC_MASK);
540                 f5 &= (RF5_NOMAGIC_MASK);
541                 f6 &= (RF6_NOMAGIC_MASK);
542         }
543
544         if (p_ptr->inside_arena || p_ptr->inside_battle)
545         {
546                 f4 &= ~(RF4_SUMMON_MASK);
547                 f5 &= ~(RF5_SUMMON_MASK);
548                 f6 &= ~(RF6_SUMMON_MASK | RF6_TELE_LEVEL);
549
550                 if (m_ptr->r_idx == MON_ROLENTO) f6 &= ~(RF6_SPECIAL);
551         }
552
553         if (p_ptr->inside_battle && !one_in_(3))
554         {
555                 f6 &= ~(RF6_HEAL);
556         }
557
558         if (m_idx == p_ptr->riding)
559         {
560                 f4 &= ~(RF4_RIDING_MASK);
561                 f5 &= ~(RF5_RIDING_MASK);
562                 f6 &= ~(RF6_RIDING_MASK);
563         }
564
565         if (pet)
566         {
567                 f4 &= ~(RF4_SHRIEK);
568                 f6 &= ~(RF6_DARKNESS | RF6_TRAPS);
569
570                 if (!(p_ptr->pet_extra_flags & PF_TELEPORT))
571                 {
572                         f6 &= ~(RF6_BLINK | RF6_TPORT | RF6_TELE_TO | RF6_TELE_AWAY | RF6_TELE_LEVEL);
573                 }
574
575                 if (!(p_ptr->pet_extra_flags & PF_ATTACK_SPELL))
576                 {
577                         f4 &= ~(RF4_ATTACK_MASK);
578                         f5 &= ~(RF5_ATTACK_MASK);
579                         f6 &= ~(RF6_ATTACK_MASK);
580                 }
581
582                 if (!(p_ptr->pet_extra_flags & PF_SUMMON_SPELL))
583                 {
584                         f4 &= ~(RF4_SUMMON_MASK);
585                         f5 &= ~(RF5_SUMMON_MASK);
586                         f6 &= ~(RF6_SUMMON_MASK);
587                 }
588
589                 /* Prevent collateral damage */
590                 if (!(p_ptr->pet_extra_flags & PF_BALL_SPELL) && (m_idx != p_ptr->riding))
591                 {
592                         if ((f4 & (RF4_BALL_MASK & ~(RF4_ROCKET))) ||
593                             (f5 & RF5_BALL_MASK) ||
594                             (f6 & RF6_BALL_MASK))
595                         {
596                                 int real_y = y;
597                                 int real_x = x;
598
599                                 get_project_point(m_ptr->fy, m_ptr->fx, &real_y, &real_x, 0L);
600
601                                 if (projectable(real_y, real_x, py, px))
602                                 {
603                                         int dist = distance(real_y, real_x, py, px);
604
605                                         if (dist <= 2)
606                                         {
607                                                 f4 &= ~(RF4_BALL_MASK & ~(RF4_ROCKET));
608                                                 f5 &= ~(RF5_BALL_MASK);
609                                                 f6 &= ~(RF6_BALL_MASK);
610                                         }
611                                         else if (dist <= 4)
612                                         {
613                                                 f4 &= ~(RF4_BIG_BALL_MASK);
614                                                 f5 &= ~(RF5_BIG_BALL_MASK);
615                                                 f6 &= ~(RF6_BIG_BALL_MASK);
616                                         }
617                                 }
618                                 else if (f5 & RF5_BA_LITE)
619                                 {
620                                         if ((distance(real_y, real_x, py, px) <= 4) && los(real_y, real_x, py, px))
621                                                 f5 &= ~(RF5_BA_LITE);
622                                 }
623                         }
624
625                         if (f4 & RF4_ROCKET)
626                         {
627                                 int real_y = y;
628                                 int real_x = x;
629
630                                 get_project_point(m_ptr->fy, m_ptr->fx, &real_y, &real_x, PROJECT_STOP);
631                                 if (projectable(real_y, real_x, py, px) && (distance(real_y, real_x, py, px) <= 2))
632                                         f4 &= ~(RF4_ROCKET);
633                         }
634
635                         if (((f4 & RF4_BEAM_MASK) ||
636                              (f5 & RF5_BEAM_MASK) ||
637                              (f6 & RF6_BEAM_MASK)) &&
638                             !direct_beam(m_ptr->fy, m_ptr->fx, t_ptr->fy, t_ptr->fx, m_ptr))
639                         {
640                                 f4 &= ~(RF4_BEAM_MASK);
641                                 f5 &= ~(RF5_BEAM_MASK);
642                                 f6 &= ~(RF6_BEAM_MASK);
643                         }
644
645                         if ((f4 & RF4_BREATH_MASK) ||
646                             (f5 & RF5_BREATH_MASK) ||
647                             (f6 & RF6_BREATH_MASK))
648                         {
649                                 /* Expected breath radius */
650                                 int rad = (r_ptr->flags2 & RF2_POWERFUL) ? 3 : 2;
651
652                                 if (!breath_direct(m_ptr->fy, m_ptr->fx, t_ptr->fy, t_ptr->fx, rad, 0, TRUE))
653                                 {
654                                         f4 &= ~(RF4_BREATH_MASK);
655                                         f5 &= ~(RF5_BREATH_MASK);
656                                         f6 &= ~(RF6_BREATH_MASK);
657                                 }
658                                 else if ((f4 & RF4_BR_LITE) &&
659                                          !breath_direct(m_ptr->fy, m_ptr->fx, t_ptr->fy, t_ptr->fx, rad, GF_LITE, TRUE))
660                                 {
661                                         f4 &= ~(RF4_BR_LITE);
662                                 }
663                                 else if ((f4 & RF4_BR_DISI) &&
664                                          !breath_direct(m_ptr->fy, m_ptr->fx, t_ptr->fy, t_ptr->fx, rad, GF_DISINTEGRATE, TRUE))
665                                 {
666                                         f4 &= ~(RF4_BR_DISI);
667                                 }
668                         }
669                 }
670
671                 /* Special moves restriction */
672                 if (f6 & RF6_SPECIAL)
673                 {
674                         if (m_ptr->r_idx == MON_ROLENTO)
675                         {
676                                 if ((p_ptr->pet_extra_flags & (PF_ATTACK_SPELL | PF_SUMMON_SPELL)) != (PF_ATTACK_SPELL | PF_SUMMON_SPELL))
677                                         f6 &= ~(RF6_SPECIAL);
678                         }
679                         else if (r_ptr->d_char == 'B')
680                         {
681                                 if ((p_ptr->pet_extra_flags & (PF_ATTACK_SPELL | PF_TELEPORT)) != (PF_ATTACK_SPELL | PF_TELEPORT))
682                                         f6 &= ~(RF6_SPECIAL);
683                         }
684                         else f6 &= ~(RF6_SPECIAL);
685                 }
686         }
687
688         /* Remove some spells if necessary */
689
690         if (!(r_ptr->flags2 & RF2_STUPID))
691         {
692                 /* Check for a clean bolt shot */
693                 if (((f4 & RF4_BOLT_MASK) ||
694                      (f5 & RF5_BOLT_MASK) ||
695                      (f6 & RF6_BOLT_MASK)) &&
696                     !clean_shot(m_ptr->fy, m_ptr->fx, t_ptr->fy, t_ptr->fx, pet))
697                 {
698                         f4 &= ~(RF4_BOLT_MASK);
699                         f5 &= ~(RF5_BOLT_MASK);
700                         f6 &= ~(RF6_BOLT_MASK);
701                 }
702
703                 /* Check for a possible summon */
704                 if (((f4 & RF4_SUMMON_MASK) ||
705                      (f5 & RF5_SUMMON_MASK) ||
706                      (f6 & RF6_SUMMON_MASK)) &&
707                     !(summon_possible(t_ptr->fy, t_ptr->fx)))
708                 {
709                         /* Remove summoning spells */
710                         f4 &= ~(RF4_SUMMON_MASK);
711                         f5 &= ~(RF5_SUMMON_MASK);
712                         f6 &= ~(RF6_SUMMON_MASK);
713                 }
714
715                 /* Dispel magic */
716                 if ((f4 & RF4_DISPEL) && !dispel_check_monster(m_idx, t_idx))
717                 {
718                         /* Remove dispel spell */
719                         f4 &= ~(RF4_DISPEL);
720                 }
721
722                 /* Check for a possible raise dead */
723                 if ((f6 & RF6_RAISE_DEAD) && !raise_possible(m_ptr))
724                 {
725                         /* Remove raise dead spell */
726                         f6 &= ~(RF6_RAISE_DEAD);
727                 }
728
729                 /* Special moves restriction */
730                 if (f6 & RF6_SPECIAL)
731                 {
732                         if ((m_ptr->r_idx == MON_ROLENTO) && !summon_possible(t_ptr->fy, t_ptr->fx))
733                         {
734                                 f6 &= ~(RF6_SPECIAL);
735                         }
736                 }
737         }
738
739         if (r_ptr->flags2 & RF2_SMART)
740         {
741                 /* Hack -- allow "desperate" spells */
742                 if ((m_ptr->hp < m_ptr->maxhp / 10) &&
743                     (randint0(100) < 50))
744                 {
745                         /* Require intelligent spells */
746                         f4 &= (RF4_INT_MASK);
747                         f5 &= (RF5_INT_MASK);
748                         f6 &= (RF6_INT_MASK);
749                 }
750
751                 /* Hack -- decline "teleport level" in some case */
752                 if ((f6 & RF6_TELE_LEVEL) && TELE_LEVEL_IS_INEFF((t_idx == p_ptr->riding) ? 0 : t_idx))
753                 {
754                         f6 &= ~(RF6_TELE_LEVEL);
755                 }
756         }
757
758         /* No spells left */
759         if (!f4 && !f5 && !f6) return FALSE;
760
761         /* Extract the "inate" spells */
762         for (k = 0; k < 32; k++)
763         {
764                 if (f4 & (1L << k)) spell[num++] = k + 32 * 3;
765         }
766
767         /* Extract the "normal" spells */
768         for (k = 0; k < 32; k++)
769         {
770                 if (f5 & (1L << k)) spell[num++] = k + 32 * 4;
771         }
772
773         /* Extract the "bizarre" spells */
774         for (k = 0; k < 32; k++)
775         {
776                 if (f6 & (1L << k)) spell[num++] = k + 32 * 5;
777         }
778
779         /* No spells left */
780         if (!num) return (FALSE);
781
782         /* Stop if player is dead or gone */
783         if (!p_ptr->playing || p_ptr->is_dead) return (FALSE);
784
785         /* Handle "leaving" */
786         if (p_ptr->leaving) return (FALSE);
787
788         /* Get the monster name (or "it") */
789         monster_desc(m_name, m_ptr, 0x00);
790
791 #ifndef JP
792         /* Get the monster possessive ("his"/"her"/"its") */
793         monster_desc(m_poss, m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE);
794 #endif
795
796         /* Get the target's name (or "it") */
797         monster_desc(t_name, t_ptr, 0x00);
798
799         /* Choose a spell to cast */
800         thrown_spell = spell[randint0(num)];
801
802         see_t = is_seen(t_ptr);
803         see_either = (see_m || see_t);
804
805         /* Can the player be aware of this attack? */
806         known = (m_ptr->cdis <= MAX_SIGHT) || (t_ptr->cdis <= MAX_SIGHT);
807
808         if (p_ptr->riding && (m_idx == p_ptr->riding)) disturb(1, 1);
809
810         /* Check for spell failure (inate attacks never fail) */
811         if (!spell_is_inate(thrown_spell) && (in_no_magic_dungeon || (MON_STUNNED(m_ptr) && one_in_(2))))
812         {
813                 disturb(1, 1);
814                 /* Message */
815                 if (see_m) msg_format(_("%^s¤Ï¼öʸ¤ò¾§¤¨¤è¤¦¤È¤·¤¿¤¬¼ºÇÔ¤·¤¿¡£", 
816                                             "%^s tries to cast a spell, but fails."), m_name);
817
818                 return (TRUE);
819         }
820
821         /* Hex: Anti Magic Barrier */
822         if (!spell_is_inate(thrown_spell) && magic_barrier(m_idx))
823         {
824                 if (see_m) msg_format(_("È¿ËâË¡¥Ð¥ê¥¢¤¬%^s¤Î¼öʸ¤ò¤«¤­¾Ã¤·¤¿¡£", 
825                                             "Anti magic barrier cancels the spell which %^s casts."), m_name);
826                 return (TRUE);
827         }
828
829         can_remember = is_original_ap_and_seen(m_ptr);
830
831         switch (thrown_spell)
832         {
833     case 96 + 0: MM_spell_RF4_SHRIEK(m_idx, t_idx); break; /* RF4_SHRIEK */
834     case 96 + 1: return FALSE;  /* RF4_XXX1 */
835     case 96 + 2: MM_spell_RF4_DISPEL(m_idx, t_idx); break; /* RF4_DISPEL */
836     case 96 + 3: dam = MM_spell_RF4_ROCKET(y, x, m_idx, t_idx); break; /* RF4_ROCKET */
837         
838         /* RF4_SHOOT */
839         case 96+4:
840                 if (known)
841                 {
842                         if (see_either)
843                         {
844                                 if (blind)
845                                 {
846                                         msg_format(_("%^s¤¬´ñ̯¤Ê²»¤òȯ¤·¤¿¡£", "%^s makes a strange noise."), m_name);
847                                 }
848                                 else
849                                 {
850                                         msg_format(_("%^s¤¬%s¤ËÌð¤òÊü¤Ã¤¿¡£", "%^s fires an arrow at %s."), m_name, t_name);
851                                 }
852                         }
853                         else
854                         {
855                                 mon_fight = TRUE;
856                         }
857
858                         sound(SOUND_SHOOT);
859                 }
860
861                 dam = damroll(r_ptr->blow[0].d_dice, r_ptr->blow[0].d_side);
862                 monst_bolt_monst(m_idx, y, x, GF_ARROW, dam, MS_SHOOT, learnable);
863
864                 break;
865
866         /* RF4_XXX2 */
867         case 96+5:
868                 /* XXX XXX XXX */
869                 return FALSE;
870
871         /* RF4_XXX3 */
872         case 96+6:
873                 /* XXX XXX XXX */
874                 return FALSE;
875
876         /* RF4_XXX4 */
877         case 96+7:
878                 /* XXX XXX XXX */
879                 return FALSE;
880
881         /* RF4_BR_ACID */
882         case 96+8:
883                 if (known)
884                 {
885                         if (see_either)
886                         {
887                                 disturb(1, 1);
888
889                                 if (blind)
890                                 {
891                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
892                                 }
893                                 else
894                                 {
895                                         msg_format(_("%^s¤¬%s¤Ë»À¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes acid at %s."), m_name, t_name);
896                                 }
897                         }
898                         else
899                         {
900                                 mon_fight = TRUE;
901                         }
902
903                         sound(SOUND_BREATH);
904                 }
905
906                 dam = ((m_ptr->hp / 3) > 1600 ? 1600 : (m_ptr->hp / 3));
907                 monst_breath_monst(m_idx, y, x, GF_ACID,
908                                    dam,0, TRUE, MS_BR_ACID, learnable);
909
910                 break;
911
912         /* RF4_BR_ELEC */
913         case 96+9:
914                 if (known)
915                 {
916                         if (see_either)
917                         {
918                                 disturb(1, 1);
919
920                                 if (blind)
921                                 {
922                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
923                                 }
924                                 else
925                                 {
926                                         msg_format(_("%^s¤¬%s¤Ë°ðºÊ¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes lightning at %s."), m_name, t_name);
927                                 }
928                         }
929                         else
930                         {
931                                 mon_fight = TRUE;
932                         }
933
934                         sound(SOUND_BREATH);
935                 }
936
937                 dam = ((m_ptr->hp / 3) > 1600 ? 1600 : (m_ptr->hp / 3));
938                 monst_breath_monst(m_idx, y, x, GF_ELEC,
939                                    dam,0, TRUE, MS_BR_ELEC, learnable);
940
941                 break;
942
943         /* RF4_BR_FIRE */
944         case 96+10:
945                 if (known)
946                 {
947                         if (see_either)
948                         {
949                                 disturb(1, 1);
950
951                                 if (blind)
952                                 {
953                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
954                                 }
955                                 else
956                                 {
957                                         msg_format(_("%^s¤¬%s¤Ë²Ð±ê¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes fire at %s."), m_name, t_name);
958                                 }
959                         }
960                         else
961                         {
962                                 mon_fight = TRUE;
963                         }
964
965                         sound(SOUND_BREATH);
966                 }
967
968                 dam = ((m_ptr->hp / 3) > 1600 ? 1600 : (m_ptr->hp / 3));
969                 monst_breath_monst(m_idx, y, x, GF_FIRE,
970                                    dam,0, TRUE, MS_BR_FIRE, learnable);
971
972                 break;
973
974         /* RF4_BR_COLD */
975         case 96+11:
976                 if (known)
977                 {
978                         if (see_either)
979                         {
980                                 disturb(1, 1);
981
982                                 if (blind)
983                                 {
984                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
985                                 }
986                                 else
987                                 {
988                                         msg_format(_("%^s¤¬%s¤ËÎ䵤¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes frost at %s."), m_name, t_name);
989                                 }
990                         }
991                         else
992                         {
993                                 mon_fight = TRUE;
994                         }
995
996                         sound(SOUND_BREATH);
997                 }
998
999                 dam = ((m_ptr->hp / 3) > 1600 ? 1600 : (m_ptr->hp / 3));
1000                 monst_breath_monst(m_idx, y, x, GF_COLD,
1001                                    dam,0, TRUE, MS_BR_COLD, learnable);
1002                 break;
1003
1004         /* RF4_BR_POIS */
1005         case 96+12:
1006                 if (known)
1007                 {
1008                         if (see_either)
1009                         {
1010                                 disturb(1, 1);
1011
1012                                 if (blind)
1013                                 {
1014                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1015                                 }
1016                                 else
1017                                 {
1018                                         msg_format(_("%^s¤¬%s¤Ë¥¬¥¹¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes gas at %s."), m_name, t_name);
1019                                 }
1020                         }
1021                         else
1022                         {
1023                                 mon_fight = TRUE;
1024                         }
1025
1026                         sound(SOUND_BREATH);
1027                 }
1028
1029                 dam = ((m_ptr->hp / 3) > 800 ? 800 : (m_ptr->hp / 3));
1030                 monst_breath_monst(m_idx, y, x, GF_POIS,
1031                                    dam,0, TRUE, MS_BR_POIS, learnable);
1032
1033                 break;
1034
1035         /* RF4_BR_NETH */
1036         case 96+13:
1037                 if (known)
1038                 {
1039                         if (see_either)
1040                         {
1041                                 disturb(1, 1);
1042
1043                                 if (blind)
1044                                 {
1045                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1046                                 }
1047                                 else
1048                                 {
1049                                         msg_format(_("%^s¤¬%s¤ËÃϹö¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes nether at %s."), m_name, t_name);
1050                                 }
1051                         }
1052                         else
1053                         {
1054                                 mon_fight = TRUE;
1055                         }
1056
1057                         sound(SOUND_BREATH);
1058                 }
1059
1060                 dam = ((m_ptr->hp / 6) > 550 ? 550 : (m_ptr->hp / 6));
1061                 monst_breath_monst(m_idx, y, x, GF_NETHER,
1062                                    dam,0, TRUE, MS_BR_NETHER, learnable);
1063
1064                 break;
1065
1066         /* RF4_BR_LITE */
1067         case 96+14:
1068                 if (known)
1069                 {
1070                         if (see_either)
1071                         {
1072                                 disturb(1, 1);
1073
1074                                 if (blind)
1075                                 {
1076                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1077                                 }
1078                                 else
1079                                 {
1080                                         msg_format(_("%^s¤¬%s¤ËÁ®¸÷¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes light at %s."), m_name, t_name);
1081                                 }
1082                         }
1083                         else
1084                         {
1085                                 mon_fight = TRUE;
1086                         }
1087
1088                         sound(SOUND_BREATH);
1089                 }
1090
1091                 dam = ((m_ptr->hp / 6) > 400 ? 400 : (m_ptr->hp / 6));
1092                 monst_breath_monst(m_idx, y, x, GF_LITE,
1093                                    dam,0, TRUE, MS_BR_LITE, learnable);
1094
1095                 break;
1096
1097         /* RF4_BR_DARK */
1098         case 96+15:
1099                 if (known)
1100                 {
1101                         if (see_either)
1102                         {
1103                                 disturb(1, 1);
1104
1105                                 if (blind)
1106                                 {
1107                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1108                                 }
1109                                 else
1110                                 {
1111                                         msg_format(_("%^s¤¬%s¤Ë°Å¹õ¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes darkness at %s."), m_name, t_name);
1112                                 }
1113                         }
1114                         else
1115                         {
1116                                 mon_fight = TRUE;
1117                         }
1118
1119                         sound(SOUND_BREATH);
1120                 }
1121
1122                 dam = ((m_ptr->hp / 6) > 400 ? 400 : (m_ptr->hp / 6));
1123                 monst_breath_monst(m_idx, y, x, GF_DARK,
1124                                    dam,0, TRUE, MS_BR_DARK, learnable);
1125
1126                 break;
1127
1128         /* RF4_BR_CONF */
1129         case 96+16:
1130                 if (known)
1131                 {
1132                         if (see_either)
1133                         {
1134                                 disturb(1, 1);
1135
1136                                 if (blind)
1137                                 {
1138                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1139                                 }
1140                                 else
1141                                 {
1142                                         msg_format(_("%^s¤¬%s¤Ëº®Íð¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes confusion at %s."), m_name, t_name);
1143                                 }
1144                         }
1145                         else
1146                         {
1147                                 mon_fight = TRUE;
1148                         }
1149
1150                         sound(SOUND_BREATH);
1151                 }
1152
1153                 dam = ((m_ptr->hp / 6) > 450 ? 450 : (m_ptr->hp / 6));
1154                 monst_breath_monst(m_idx, y, x, GF_CONFUSION,
1155                                    dam,0, TRUE, MS_BR_CONF, learnable);
1156
1157                 break;
1158
1159         /* RF4_BR_SOUN */
1160         case 96+17:
1161                 if (known)
1162                 {
1163                         if (see_either)
1164                         {
1165                                 disturb(1, 1);
1166
1167                                 if (m_ptr->r_idx == MON_JAIAN)
1168                                 {
1169                                         msg_format(_("¡Ö¥Ü¥©¥¨¡Á¡Á¡Á¡Á¡Á¡Á¡×", "'Booooeeeeee'"));
1170                                 }
1171                                 else if (blind)
1172                                 {
1173                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1174                                 }
1175                                 else
1176                                 {
1177                                         msg_format(_("%^s¤¬%s¤Ë¹ì²»¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes sound at %s."), m_name, t_name);
1178                                 }
1179                         }
1180                         else
1181                         {
1182                                 mon_fight = TRUE;
1183                         }
1184
1185                         sound(SOUND_BREATH);
1186                 }
1187
1188                 dam = ((m_ptr->hp / 6) > 450 ? 450 : (m_ptr->hp / 6));
1189                 monst_breath_monst(m_idx, y, x, GF_SOUND,
1190                                    dam,0, TRUE, MS_BR_SOUND, learnable);
1191
1192                 break;
1193
1194         /* RF4_BR_CHAO */
1195         case 96+18:
1196                 if (known)
1197                 {
1198                         if (see_either)
1199                         {
1200                                 disturb(1, 1);
1201
1202                                 if (blind)
1203                                 {
1204                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1205                                 }
1206                                 else
1207                                 {
1208                                         msg_format(_("%^s¤¬%s¤Ë¥«¥ª¥¹¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes chaos at %s."), m_name, t_name);
1209                                 }
1210                         }
1211                         else
1212                         {
1213                                 mon_fight = TRUE;
1214                         }
1215
1216                         sound(SOUND_BREATH);
1217                 }
1218
1219                 dam = ((m_ptr->hp / 6) > 600 ? 600 : (m_ptr->hp / 6));
1220                 monst_breath_monst(m_idx, y, x, GF_CHAOS,
1221                                    dam,0, TRUE, MS_BR_CHAOS, learnable);
1222
1223                 break;
1224
1225         /* RF4_BR_DISE */
1226         case 96+19:
1227                 if (known)
1228                 {
1229                         if (see_either)
1230                         {
1231                                 disturb(1, 1);
1232
1233                                 if (blind)
1234                                 {
1235                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1236                                 }
1237                                 else
1238                                 {
1239                                         msg_format(_("%^s¤¬%s¤ËÎô²½¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes disenchantment at %s."), m_name, t_name);
1240                                 }
1241                         }
1242                         else
1243                         {
1244                                 mon_fight = TRUE;
1245                         }
1246
1247                         sound(SOUND_BREATH);
1248                 }
1249
1250                 dam = ((m_ptr->hp / 6) > 500 ? 500 : (m_ptr->hp / 6));
1251                 monst_breath_monst(m_idx, y, x, GF_DISENCHANT,
1252                                    dam,0, TRUE, MS_BR_DISEN, learnable);
1253
1254                 break;
1255
1256         /* RF4_BR_NEXU */
1257         case 96+20:
1258                 if (known)
1259                 {
1260                         if (see_either)
1261                         {
1262                                 disturb(1, 1);
1263
1264                                 if (blind)
1265                                 {
1266                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1267                                 }
1268                                 else
1269                                 {
1270                                         msg_format(_("%^s¤¬%s¤Ë°ø²Ìº®Íð¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes nexus at %s."), m_name, t_name);
1271                                 }
1272                         }
1273                         else
1274                         {
1275                                 mon_fight = TRUE;
1276                         }
1277
1278                         sound(SOUND_BREATH);
1279                 }
1280
1281                 dam = ((m_ptr->hp / 3) > 250 ? 250 : (m_ptr->hp / 3));
1282                 monst_breath_monst(m_idx, y, x, GF_NEXUS,
1283                                    dam,0, TRUE, MS_BR_NEXUS, learnable);
1284
1285                 break;
1286
1287         /* RF4_BR_TIME */
1288         case 96+21:
1289                 if (known)
1290                 {
1291                         if (see_either)
1292                         {
1293                                 disturb(1, 1);
1294
1295                                 if (blind)
1296                                 {
1297                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1298                                 }
1299                                 else
1300                                 {
1301                                         msg_format(_("%^s¤¬%s¤Ë»þ´ÖµÕž¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes time at %s."), m_name, t_name);
1302                                 }
1303                         }
1304                         else
1305                         {
1306                                 mon_fight = TRUE;
1307                         }
1308
1309                         sound(SOUND_BREATH);
1310                 }
1311
1312                 dam = ((m_ptr->hp / 3) > 150 ? 150 : (m_ptr->hp / 3));
1313                 monst_breath_monst(m_idx, y, x, GF_TIME,
1314                                    dam,0, TRUE, MS_BR_TIME, learnable);
1315
1316                 break;
1317
1318         /* RF4_BR_INER */
1319         case 96+22:
1320                 if (known)
1321                 {
1322                         if (see_either)
1323                         {
1324                                 disturb(1, 1);
1325
1326                                 if (blind)
1327                                 {
1328                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1329                                 }
1330                                 else
1331                                 {
1332                                         msg_format(_("%^s¤¬%s¤ËÃÙÆߤΥ֥쥹¤òÅǤ¤¤¿¡£", "%^s breathes inertia at %s."), m_name, t_name);
1333                                 }
1334                         }
1335                         else
1336                         {
1337                                 mon_fight = TRUE;
1338                         }
1339
1340                         sound(SOUND_BREATH);
1341                 }
1342
1343                 dam = ((m_ptr->hp / 6) > 200 ? 200 : (m_ptr->hp / 6));
1344                 monst_breath_monst(m_idx, y, x, GF_INERTIA,
1345                                    dam,0, TRUE, MS_BR_INERTIA, learnable);
1346
1347                 break;
1348
1349         /* RF4_BR_GRAV */
1350         case 96+23:
1351                 if (known)
1352                 {
1353                         if (see_either)
1354                         {
1355                                 disturb(1, 1);
1356
1357                                 if (blind)
1358                                 {
1359                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1360                                 }
1361                                 else
1362                                 {
1363                                         msg_format(_("%^s¤¬%s¤Ë½ÅÎϤΥ֥쥹¤òÅǤ¤¤¿¡£", "%^s breathes gravity at %s."), m_name, t_name);
1364                                 }
1365                         }
1366                         else
1367                         {
1368                                 mon_fight = TRUE;
1369                         }
1370
1371                         sound(SOUND_BREATH);
1372                 }
1373
1374                 dam = ((m_ptr->hp / 3) > 200 ? 200 : (m_ptr->hp / 3));
1375                 monst_breath_monst(m_idx, y, x, GF_GRAVITY,
1376                                    dam,0, TRUE, MS_BR_GRAVITY, learnable);
1377
1378                 break;
1379
1380         /* RF4_BR_SHAR */
1381         case 96+24:
1382                 if (known)
1383                 {
1384                         if (see_either)
1385                         {
1386                                 disturb(1, 1);
1387
1388                                 if (m_ptr->r_idx == MON_BOTEI)
1389                                 {
1390                                         msg_format(_("¡Ö¥ÜÄë¥Ó¥ë¥«¥Ã¥¿¡¼¡ª¡ª¡ª¡×", "'Boty-Build cutter!!!'"));
1391                                 }
1392                                 else if (blind)
1393                                 {
1394                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1395                                 }
1396                                 else
1397                                 {
1398                                         msg_format(_("%^s¤¬%s¤ËÇËÊҤΥ֥쥹¤òÅǤ¤¤¿¡£", "%^s breathes shards at %s."), m_name, t_name);
1399                                 }
1400                         }
1401                         else
1402                         {
1403                                 mon_fight = TRUE;
1404                         }
1405
1406                         sound(SOUND_BREATH);
1407                 }
1408
1409                 dam = ((m_ptr->hp / 6) > 500 ? 500 : (m_ptr->hp / 6));
1410                 monst_breath_monst(m_idx, y, x, GF_SHARDS,
1411                                    dam,0, TRUE, MS_BR_SHARDS, learnable);
1412
1413                 break;
1414
1415         /* RF4_BR_PLAS */
1416         case 96+25:
1417                 if (known)
1418                 {
1419                         if (see_either)
1420                         {
1421                                 disturb(1, 1);
1422
1423                                 if (blind)
1424                                 {
1425                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1426                                 }
1427                                 else
1428                                 {
1429                                         msg_format(_("%^s¤¬%s¤Ë¥×¥é¥º¥Þ¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes plasma at %s."), m_name, t_name);
1430                                 }
1431                         }
1432                         else
1433                         {
1434                                 mon_fight = TRUE;
1435                         }
1436
1437                         sound(SOUND_BREATH);
1438                 }
1439
1440                 dam = ((m_ptr->hp / 6) > 150 ? 150 : (m_ptr->hp / 6));
1441                 monst_breath_monst(m_idx, y, x, GF_PLASMA,
1442                                    dam,0, TRUE, MS_BR_PLASMA, learnable);
1443
1444                 break;
1445
1446         /* RF4_BR_WALL */
1447         case 96+26:
1448                 if (known)
1449                 {
1450                         if (see_either)
1451                         {
1452                                 disturb(1, 1);
1453
1454                                 if (blind)
1455                                 {
1456                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1457                                 }
1458                                 else
1459                                 {
1460                                         msg_format(_("%^s¤¬%s¤Ë¥Õ¥©¡¼¥¹¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes force at %s."), m_name, t_name);
1461                                 }
1462                         }
1463                         else
1464                         {
1465                                 mon_fight = TRUE;
1466                         }
1467
1468                         sound(SOUND_BREATH);
1469                 }
1470
1471                 dam = ((m_ptr->hp / 6) > 200 ? 200 : (m_ptr->hp / 6));
1472                 monst_breath_monst(m_idx, y, x, GF_FORCE,
1473                                    dam,0, TRUE, MS_BR_FORCE, learnable);
1474                 break;
1475
1476         /* RF4_BR_MANA */
1477         case 96+27:
1478                 if (known)
1479                 {
1480                         if (see_either)
1481                         {
1482                                 disturb(1, 1);
1483
1484                                 if (blind)
1485                                 {
1486                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1487                                 }
1488                                 else
1489                                 {
1490                                         msg_format(_("%^s¤¬%s¤ËËâÎϤΥ֥쥹¤òÅǤ¤¤¿¡£", "%^s breathes mana at %s."), m_name, t_name);
1491                                 }
1492                         }
1493                         else
1494                         {
1495                                 mon_fight = TRUE;
1496                         }
1497
1498                         sound(SOUND_BREATH);
1499                 }
1500
1501                 dam = ((m_ptr->hp / 3) > 250 ? 250 : (m_ptr->hp / 3));
1502                 monst_breath_monst(m_idx, y, x, GF_MANA,
1503                                    dam,0, TRUE, MS_BR_MANA, learnable);
1504
1505                 break;
1506
1507         /* RF4_BA_NUKE */
1508         case 96+28:
1509                 if (known)
1510                 {
1511                         if (see_either)
1512                         {
1513                                 disturb(1, 1);
1514
1515                                 if (blind)
1516                                 {
1517                                         msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
1518                                 }
1519                                 else
1520                                 {
1521                                         msg_format(_("%^s¤¬%s¤ËÊü¼Íǽµå¤òÊü¤Ã¤¿¡£", "%^s casts a ball of radiation at %s."), m_name, t_name);
1522                                 }
1523                         }
1524                         else
1525                         {
1526                                 mon_fight = TRUE;
1527                         }
1528                 }
1529
1530                 dam = (rlev + damroll(10, 6));
1531                 monst_breath_monst(m_idx, y, x, GF_NUKE,
1532                                    dam, 2, FALSE, MS_BALL_NUKE, learnable);
1533
1534                 break;
1535
1536         /* RF4_BR_NUKE */
1537         case 96+29:
1538                 if (known)
1539                 {
1540                         if (see_either)
1541                         {
1542                                 disturb(1, 1);
1543
1544                                 if (blind)
1545                                 {
1546                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1547                                 }
1548                                 else
1549                                 {
1550                                         msg_format(_("%^s¤¬%s¤ËÊü¼ÍÀ­ÇÑ´þʪ¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes toxic waste at %s."), m_name, t_name);
1551                                 }
1552                         }
1553                         else
1554                         {
1555                                 mon_fight = TRUE;
1556                         }
1557
1558                         sound(SOUND_BREATH);
1559                 }
1560
1561                 dam = ((m_ptr->hp / 3) > 800 ? 800 : (m_ptr->hp / 3));
1562                 monst_breath_monst(m_idx, y, x, GF_NUKE,
1563                                    dam,0, TRUE, MS_BR_NUKE, learnable);
1564                 break;
1565
1566         /* RF4_BA_CHAO */
1567         case 96+30:
1568                 if (known)
1569                 {
1570                         if (see_either)
1571                         {
1572                                 disturb(1, 1);
1573
1574                                 if (blind)
1575                                 {
1576                                         msg_format(_("%^s¤¬¶²¤í¤·¤²¤Ë¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles frighteningly."), m_name);
1577                                 }
1578                                 else
1579                                 {
1580                                         msg_format(_("%^s¤¬%s¤Ë½ã¥í¥°¥ë¥¹¤òÊü¤Ã¤¿¡£", "%^s invokes raw Logrus upon %s."), m_name, t_name);
1581                                 }
1582                         }
1583                         else
1584                         {
1585                                 mon_fight = TRUE;
1586                         }
1587                 }
1588
1589                 dam = (rlev * 2) + damroll(10, 10);
1590                 monst_breath_monst(m_idx, y, x, GF_CHAOS,
1591                                    dam, 4, FALSE, MS_BALL_CHAOS, learnable);
1592
1593                 break;
1594
1595         /* RF4_BR_DISI */
1596         case 96+31:
1597                 if (known)
1598                 {
1599                         if (see_either)
1600                         {
1601                                 disturb(1, 1);
1602
1603                                 if (blind)
1604                                 {
1605                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1606                                 }
1607                                 else
1608                                 {
1609                                         msg_format(_("%^s¤¬%s¤Ëʬ²ò¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes disintegration at %s."), m_name, t_name);
1610                                 }
1611                         }
1612                         else
1613                         {
1614                                 mon_fight = TRUE;
1615                         }
1616
1617                         sound(SOUND_BREATH);
1618                 }
1619
1620                 dam = ((m_ptr->hp / 6) > 150 ? 150 : (m_ptr->hp / 6));
1621                 monst_breath_monst(m_idx, y, x, GF_DISINTEGRATE,
1622                                    dam,0, TRUE, MS_BR_DISI, learnable);
1623                 break;
1624
1625         /* RF5_BA_ACID */
1626         case 128+0:
1627                 if (known)
1628                 {
1629                         if (see_either)
1630                         {
1631                                 disturb(1, 1);
1632
1633                                 if (blind)
1634                                 {
1635                                         msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
1636                                 }
1637                                 else
1638                                 {
1639                                         msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥¢¥·¥Ã¥É¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", 
1640                                                          "%^s casts an acid ball at %s."), m_name, t_name);
1641                                 }
1642                         }
1643                         else
1644                         {
1645                                 mon_fight = TRUE;
1646                         }
1647                 }
1648
1649                 if (r_ptr->flags2 & RF2_POWERFUL)
1650                 {
1651                         rad = 4;
1652                         dam = (rlev * 4) + 50 + damroll(10, 10);
1653                 }
1654                 else
1655                 {
1656                         rad = 2;
1657                         dam = (randint1(rlev * 3) + 15);
1658                 }
1659                 monst_breath_monst(m_idx, y, x, GF_ACID, dam, rad, FALSE, MS_BALL_ACID, learnable);
1660                 break;
1661
1662         /* RF5_BA_ELEC */
1663         case 128+1:
1664                 if (known)
1665                 {
1666                         if (see_either)
1667                         {
1668                                 disturb(1, 1);
1669
1670                                 if (blind)
1671                                 {
1672                                         msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
1673                                 }
1674                                 else
1675                                 {
1676                                         msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥µ¥ó¥À¡¼¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a lightning ball at %s."), m_name, t_name);
1677                                 }
1678                         }
1679                         else
1680                         {
1681                                 mon_fight = TRUE;
1682                         }
1683                 }
1684
1685                 if (r_ptr->flags2 & RF2_POWERFUL)
1686                 {
1687                         rad = 4;
1688                         dam = (rlev * 4) + 50 + damroll(10, 10);
1689                 }
1690                 else
1691                 {
1692                         rad = 2;
1693                         dam = (randint1(rlev * 3 / 2) + 8);
1694                 }
1695                 monst_breath_monst(m_idx, y, x, GF_ELEC, dam, rad, FALSE, MS_BALL_ELEC, learnable);
1696                 break;
1697
1698         /* RF5_BA_FIRE */
1699         case 128+2:
1700                 if (known)
1701                 {
1702                         if (see_either)
1703                         {
1704                                 disturb(1, 1);
1705
1706                                 if (m_ptr->r_idx == MON_ROLENTO)
1707                                 {
1708                                         if (blind)
1709                                                 msg_format(_("%^s¤¬²¿¤«¤òÅꤲ¤¿¡£", "%^s throws something."), m_name);
1710                                         else
1711                                                 msg_format(_("%^s¤¬%^s¤Ë¸þ¤«¤Ã¤Æ¼êÜØÃƤòÅꤲ¤¿¡£", "%^s throws a hand grenade."), m_name, t_name);
1712                                 }
1713                                 else
1714                                 {
1715                                         if (blind)
1716                                         {
1717                                                 msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
1718                                         }
1719                                         else
1720                                         {
1721                                                 msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£",
1722                                                                  "%^s casts a fire ball at %s."), m_name, t_name);
1723                                         }
1724                                 }
1725                         }
1726                         else
1727                         {
1728                                 mon_fight = TRUE;
1729                         }
1730                 }
1731
1732                 if (r_ptr->flags2 & RF2_POWERFUL)
1733                 {
1734                         rad = 4;
1735                         dam = (rlev * 4) + 50 + damroll(10, 10);
1736                 }
1737                 else
1738                 {
1739                         rad = 2;
1740                         dam = (randint1(rlev * 7 / 2) + 10);
1741                 }
1742                 monst_breath_monst(m_idx, y, x, GF_FIRE, dam, rad, FALSE, MS_BALL_FIRE, learnable);
1743                 break;
1744
1745         /* RF5_BA_COLD */
1746         case 128+3:
1747                 if (known)
1748                 {
1749                         if (see_either)
1750                         {
1751                                 disturb(1, 1);
1752
1753                                 if (blind)
1754                                 {
1755                                         msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
1756                                 }
1757                                 else
1758                                 {
1759                                         msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥¢¥¤¥¹¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", 
1760                                                          "%^s casts a frost ball at %s."), m_name, t_name);
1761                                 }
1762                         }
1763                         else
1764                         {
1765                                 mon_fight = TRUE;
1766                         }
1767                 }
1768
1769                 if (r_ptr->flags2 & RF2_POWERFUL)
1770                 {
1771                         rad = 4;
1772                         dam = (rlev * 4) + 50 + damroll(10, 10);
1773                 }
1774                 else
1775                 {
1776                         rad = 2;
1777                         dam = (randint1(rlev * 3 / 2) + 10);
1778                 }
1779                 monst_breath_monst(m_idx, y, x, GF_COLD, dam, rad, FALSE, MS_BALL_COLD, learnable);
1780                 break;
1781
1782         /* RF5_BA_POIS */
1783         case 128+4:
1784                 if (known)
1785                 {
1786                         if (see_either)
1787                         {
1788                                 disturb(1, 1);
1789
1790                                 if (blind)
1791                                 {
1792                                         msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
1793                                 }
1794                                 else
1795                                 {
1796                                         msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ°­½­±À¤Î¼öʸ¤ò¾§¤¨¤¿¡£", 
1797                                                          "%^s casts a stinking cloud at %s."), m_name, t_name);
1798                                 }
1799                         }
1800                         else
1801                         {
1802                                 mon_fight = TRUE;
1803                         }
1804                 }
1805
1806                 dam = damroll(12, 2) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
1807                 monst_breath_monst(m_idx, y, x, GF_POIS, dam, 2, FALSE, MS_BALL_POIS, learnable);
1808
1809                 break;
1810
1811         /* RF5_BA_NETH */
1812         case 128+5:
1813                 if (known)
1814                 {
1815                         if (see_either)
1816                         {
1817                                 disturb(1, 1);
1818
1819                                 if (blind)
1820                                 {
1821                                         msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
1822                                 }
1823                                 else
1824                                 {
1825                                         msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤ÆÃϹöµå¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a nether ball at %s."), m_name, t_name);
1826                                 }
1827                         }
1828                         else
1829                         {
1830                                 mon_fight = TRUE;
1831                         }
1832                 }
1833
1834                 dam = 50 + damroll(10, 10) + (rlev * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1));
1835                 monst_breath_monst(m_idx, y, x, GF_NETHER, dam, 2, FALSE, MS_BALL_NETHER, learnable);
1836
1837                 break;
1838
1839         /* RF5_BA_WATE */
1840         case 128+6:
1841                 if (known)
1842                 {
1843                         if (see_either)
1844                         {
1845                                 disturb(1, 1);
1846
1847                                 if (blind)
1848                                 {
1849                                         msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
1850                                 }
1851                                 else
1852                                 {
1853                                         msg_format(_("%^s¤¬%s¤ËÂФ·¤Æή¤ì¤ë¤è¤¦¤Ê¿È¿¶¤ê¤ò¤·¤¿¡£", "%^s gestures fluidly at %s."), m_name, t_name);
1854
1855                                         msg_format(_("%^s¤Ï±²´¬¤Ë°û¤ß¹þ¤Þ¤ì¤¿¡£", "%^s is engulfed in a whirlpool."), t_name);
1856                                 }
1857                         }
1858                         else
1859                         {
1860                                 mon_fight = TRUE;
1861                         }
1862                 }
1863
1864                 dam = ((r_ptr->flags2 & RF2_POWERFUL) ? randint1(rlev * 3) : randint1(rlev * 2)) + 50;
1865                 monst_breath_monst(m_idx, y, x, GF_WATER, dam, 4, FALSE, MS_BALL_WATER, learnable);
1866
1867                 break;
1868
1869         /* RF5_BA_MANA */
1870         case 128+7:
1871                 if (known)
1872                 {
1873                         if (see_either)
1874                         {
1875                                 disturb(1, 1);
1876
1877                                 if (blind)
1878                                 {
1879                                         msg_format(_("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles powerfully."), m_name);
1880                                 }
1881                                 else
1882                                 {
1883                                         msg_format(_("%^s¤¬%s¤ËÂФ·¤ÆËâÎϤÎÍò¤Î¼öʸ¤òÇ°¤¸¤¿¡£", "%^s invokes a mana storm upon %s."), m_name, t_name);
1884                                 }
1885                         }
1886                         else
1887                         {
1888                                 mon_fight = TRUE;
1889                         }
1890                 }
1891
1892                 dam = (rlev * 4) + 50 + damroll(10, 10);
1893                 monst_breath_monst(m_idx, y, x, GF_MANA, dam, 4, FALSE, MS_BALL_MANA, learnable);
1894
1895                 break;
1896
1897         /* RF5_BA_DARK */
1898         case 128+8:
1899                 if (known)
1900                 {
1901                         if (see_either)
1902                         {
1903                                 disturb(1, 1);
1904
1905                                 if (blind)
1906                                 {
1907                                         msg_format(_("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles powerfully."), m_name);
1908                                 }
1909                                 else
1910                                 {
1911                                         msg_format(_("%^s¤¬%s¤ËÂФ·¤Æ°Å¹õ¤ÎÍò¤Î¼öʸ¤òÇ°¤¸¤¿¡£", "%^s invokes a darkness storm upon %s."), m_name, t_name);
1912                                 }
1913                         }
1914                         else
1915                         {
1916                                 mon_fight = TRUE;
1917                         }
1918                 }
1919
1920                 dam = (rlev * 4) + 50 + damroll(10, 10);
1921                 monst_breath_monst(m_idx, y, x, GF_DARK, dam, 4, FALSE, MS_BALL_DARK, learnable);
1922
1923                 break;
1924
1925         /* RF5_DRAIN_MANA */
1926         case 128+9:
1927                 if (see_m)
1928                 {
1929                         /* Basic message */
1930                         msg_format(_("%^s¤ÏÀº¿À¥¨¥Í¥ë¥®¡¼¤ò%s¤«¤éµÛ¤¤¤È¤Ã¤¿¡£", "%^s draws psychic energy from %s."), m_name, t_name);
1931                 }
1932
1933                 dam = ((randint1(rlev) / 2) + 1);
1934                 monst_breath_monst(m_idx, y, x, GF_DRAIN_MANA, dam, 0, FALSE, MS_DRAIN_MANA, learnable);
1935
1936                 break;
1937
1938         /* RF5_MIND_BLAST */
1939         case 128+10:
1940                 if (see_m)
1941                 {
1942                         msg_format(_("%^s¤Ï%s¤ò¤¸¤Ã¤Èâˤó¤À¡£", "%^s gazes intently at %s."), m_name, t_name);
1943                 }
1944
1945                 dam = damroll(7, 7);
1946                 monst_breath_monst(m_idx, y, x, GF_MIND_BLAST, dam, 0, FALSE, MS_MIND_BLAST, learnable);
1947
1948                 break;
1949
1950         /* RF5_BRAIN_SMASH */
1951         case 128+11:
1952                 if (see_m)
1953                 {
1954                         msg_format(_("%^s¤Ï%s¤ò¤¸¤Ã¤Èâˤó¤À¡£", "%^s gazes intently at %s."), m_name, t_name);
1955                 }
1956
1957                 dam = damroll(12, 12);
1958                 monst_breath_monst(m_idx, y, x, GF_BRAIN_SMASH, dam, 0, FALSE, MS_BRAIN_SMASH, learnable);
1959
1960                 break;
1961
1962         /* RF5_CAUSE_1 */
1963         case 128+12:
1964                 if (known)
1965                 {
1966                         if (see_m)
1967                         {
1968                                 msg_format(_("%^s¤Ï%s¤ò»Ø¤µ¤·¤Æ¼ö¤¤¤ò¤«¤±¤¿¡£", "%^s points at %s and curses."), m_name, t_name);
1969                         }
1970                         else
1971                         {
1972                                 mon_fight = TRUE;
1973                         }
1974                 }
1975
1976                 dam = damroll(3, 8);
1977                 monst_breath_monst(m_idx, y, x, GF_CAUSE_1, dam, 0, FALSE, MS_CAUSE_1, learnable);
1978
1979                 break;
1980
1981         /* RF5_CAUSE_2 */
1982         case 128+13:
1983                 if (known)
1984                 {
1985                         if (see_m)
1986                         {
1987                                 msg_format(_("%^s¤Ï%s¤ò»Ø¤µ¤·¤Æ¶²¤í¤·¤²¤Ë¼ö¤¤¤ò¤«¤±¤¿¡£", 
1988                                                  "%^s points at %s and curses horribly."), m_name, t_name);
1989                         }
1990                         else
1991                         {
1992                                 mon_fight = TRUE;
1993                         }
1994                 }
1995
1996                 dam = damroll(8, 8);
1997                 monst_breath_monst(m_idx, y, x, GF_CAUSE_2, dam, 0, FALSE, MS_CAUSE_2, learnable);
1998
1999                 break;
2000
2001         /* RF5_CAUSE_3 */
2002         case 128+14:
2003                 if (known)
2004                 {
2005                         if (see_m)
2006                         {
2007                                 msg_format(_("%^s¤Ï%s¤ò»Ø¤µ¤·¡¢¶²¤í¤·¤²¤Ë¼öʸ¤ò¾§¤¨¤¿¡ª", 
2008                                                  "%^s points at %s, incanting terribly!"), m_name, t_name);
2009                         }
2010                         else
2011                         {
2012                                 mon_fight = TRUE;
2013                         }
2014                 }
2015
2016                 dam = damroll(10, 15);
2017                 monst_breath_monst(m_idx, y, x, GF_CAUSE_3, dam, 0, FALSE, MS_CAUSE_3, learnable);
2018
2019                 break;
2020
2021         /* RF5_CAUSE_4 */
2022         case 128+15:
2023                 if (known)
2024                 {
2025                         if (see_m)
2026                         {
2027                                 msg_format(_("%^s¤¬%s¤ÎÈ빦¤òÆͤ¤¤Æ¡¢¡Ö¤ªÁ°¤Ï´û¤Ë»à¤ó¤Ç¤¤¤ë¡×¤È¶«¤ó¤À¡£", 
2028                                                  "%^s points at %s, screaming the word, 'DIE!'"), m_name, t_name);
2029                         }
2030                         else
2031                         {
2032                                 mon_fight = TRUE;
2033                         }
2034                 }
2035
2036                 dam = damroll(15, 15);
2037                 monst_breath_monst(m_idx, y, x, GF_CAUSE_4, dam, 0, FALSE, MS_CAUSE_4, learnable);
2038
2039                 break;
2040
2041         /* RF5_BO_ACID */
2042         case 128+16:
2043                 if (known)
2044                 {
2045                         if (see_either)
2046                         {
2047                                 msg_format(_("%s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥¢¥·¥Ã¥É¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts an acid bolt at %s."), m_name, t_name);
2048                         }
2049                         else
2050                         {
2051                                 mon_fight = TRUE;
2052                         }
2053                 }
2054
2055                 dam = (damroll(7, 8) + (rlev / 3)) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2056                 monst_bolt_monst(m_idx, y, x, GF_ACID,
2057                                  dam, MS_BOLT_ACID, learnable);
2058
2059                 break;
2060
2061         /* RF5_BO_ELEC */
2062         case 128+17:
2063                 if (known)
2064                 {
2065                         if (see_either)
2066                         {
2067                                 msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥µ¥ó¥À¡¼¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a lightning bolt at %s."), m_name, t_name);
2068                         }
2069                         else
2070                         {
2071                                 mon_fight = TRUE;
2072                         }
2073                 }
2074
2075                 dam = (damroll(4, 8) + (rlev / 3)) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2076                 monst_bolt_monst(m_idx, y, x, GF_ELEC,
2077                                  dam, MS_BOLT_ELEC, learnable);
2078
2079                 break;
2080
2081         /* RF5_BO_FIRE */
2082         case 128+18:
2083                 if (known)
2084                 {
2085                         if (see_either)
2086                         {
2087                                 msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a fire bolt at %s."), m_name, t_name);
2088                         }
2089                         else
2090                         {
2091                                 mon_fight = TRUE;
2092                         }
2093                 }
2094
2095                 dam = (damroll(9, 8) + (rlev / 3)) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2096                 monst_bolt_monst(m_idx, y, x, GF_FIRE,
2097                                  dam, MS_BOLT_FIRE, learnable);
2098
2099                 break;
2100
2101         /* RF5_BO_COLD */
2102         case 128+19:
2103                 if (known)
2104                 {
2105                         if (see_either)
2106                         {
2107                                 msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥¢¥¤¥¹¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a frost bolt at %s."), m_name, t_name);
2108                         }
2109                         else
2110                         {
2111                                 mon_fight = TRUE;
2112                         }
2113                 }
2114
2115                 dam = (damroll(6, 8) + (rlev / 3)) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2116                 monst_bolt_monst(m_idx, y, x, GF_COLD,
2117                                  dam, MS_BOLT_COLD, learnable);
2118
2119                 break;
2120
2121         /* RF5_BA_LITE */
2122         case 128+20:
2123                 if (known)
2124                 {
2125                         if (see_either)
2126                         {
2127                                 disturb(1, 1);
2128
2129                                 if (blind)
2130                                 {
2131                                         msg_format(_("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles powerfully."), m_name);
2132                                 }
2133                                 else
2134                                 {
2135                                         msg_format(_("%^s¤¬%s¤ËÂФ·¤Æ¥¹¥¿¡¼¥Ð¡¼¥¹¥È¤Î¼öʸ¤òÇ°¤¸¤¿¡£", 
2136                                                          "%^s invokes a starburst upon %s."), m_name, t_name);
2137                                 }
2138                         }
2139                         else
2140                         {
2141                                 mon_fight = TRUE;
2142                         }
2143                 }
2144
2145                 dam = (rlev * 4) + 50 + damroll(10, 10);
2146                 monst_breath_monst(m_idx, y, x, GF_LITE, dam, 4, FALSE, MS_STARBURST, learnable);
2147
2148                 break;
2149
2150         /* RF5_BO_NETH */
2151         case 128+21:
2152                 if (known)
2153                 {
2154                         if (see_either)
2155                         {
2156                                 msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤ÆÃϹö¤ÎÌð¤Î¼öʸ¤ò¾§¤¨¤¿¡£",
2157                                                  "%^s casts a nether bolt at %s."), m_name, t_name);
2158                         }
2159                         else
2160                         {
2161                                 mon_fight = TRUE;
2162                         }
2163                 }
2164
2165                 dam = 30 + damroll(5, 5) + (rlev * 4) / ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 3);
2166                 monst_bolt_monst(m_idx, y, x, GF_NETHER,
2167                                  dam, MS_BOLT_NETHER, learnable);
2168
2169                 break;
2170
2171         /* RF5_BO_WATE */
2172         case 128+22:
2173                 if (known)
2174                 {
2175                         if (see_either)
2176                         {
2177                                 msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥¦¥©¡¼¥¿¡¼¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", 
2178                                                  "%^s casts a water bolt at %s."), m_name, t_name);
2179                         }
2180                         else
2181                         {
2182                                 mon_fight = TRUE;
2183                         }
2184                 }
2185
2186                 dam = damroll(10, 10) + (rlev * 3 / ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 3));
2187                 monst_bolt_monst(m_idx, y, x, GF_WATER,
2188                                  dam, MS_BOLT_WATER, learnable);
2189
2190                 break;
2191
2192         /* RF5_BO_MANA */
2193         case 128+23:
2194                 if (known)
2195                 {
2196                         if (see_either)
2197                         {
2198                                 msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤ÆËâÎϤÎÌð¤Î¼öʸ¤ò¾§¤¨¤¿¡£", 
2199                                                  "%^s casts a mana bolt at %s."), m_name, t_name);
2200                         }
2201                         else
2202                         {
2203                                 mon_fight = TRUE;
2204                         }
2205                 }
2206
2207                 dam = randint1(rlev * 7 / 2) + 50;
2208                 monst_bolt_monst(m_idx, y, x, GF_MANA,
2209                                  dam, MS_BOLT_MANA, learnable);
2210
2211                 break;
2212
2213         /* RF5_BO_PLAS */
2214         case 128+24:
2215                 if (known)
2216                 {
2217                         if (see_either)
2218                         {
2219                                 msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥×¥é¥º¥Þ¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", 
2220                                                  "%^s casts a plasma bolt at %s."), m_name, t_name);
2221                         }
2222                         else
2223                         {
2224                                 mon_fight = TRUE;
2225                         }
2226                 }
2227
2228                 dam = 10 + damroll(8, 7) + (rlev * 3 / ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 3));
2229                 monst_bolt_monst(m_idx, y, x, GF_PLASMA,
2230                                  dam, MS_BOLT_PLASMA, learnable);
2231
2232                 break;
2233
2234         /* RF5_BO_ICEE */
2235         case 128+25:
2236                 if (known)
2237                 {
2238                         if (see_either)
2239                         {
2240                                 msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¶Ë´¨¤ÎÌð¤Î¼öʸ¤ò¾§¤¨¤¿¡£",
2241                                                  "%^s casts an ice bolt at %s."), m_name, t_name);
2242                         }
2243                         else
2244                         {
2245                                 mon_fight = TRUE;
2246                         }
2247                 }
2248
2249                 dam = damroll(6, 6) + (rlev * 3 / ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 3));
2250                 monst_bolt_monst(m_idx, y, x, GF_ICE,
2251                                  dam, MS_BOLT_ICE, learnable);
2252
2253                 break;
2254
2255         /* RF5_MISSILE */
2256         case 128+26:
2257                 if (known)
2258                 {
2259                         if (see_either)
2260                         {
2261                                 msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥Þ¥¸¥Ã¥¯¡¦¥ß¥µ¥¤¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", 
2262                                                  "%^s casts a magic missile at %s."), m_name, t_name);
2263                         }
2264                         else
2265                         {
2266                                 mon_fight = TRUE;
2267                         }
2268                 }
2269
2270                 dam = damroll(2, 6) + (rlev / 3);
2271                 monst_bolt_monst(m_idx, y, x, GF_MISSILE,
2272                                  dam, MS_MAGIC_MISSILE, learnable);
2273
2274                 break;
2275
2276         /* RF5_SCARE */
2277         case 128+27:
2278                 if (known)
2279                 {
2280                         if (see_either)
2281                         {
2282                                 msg_format(_("%^s¤¬¶²¤í¤·¤²¤Ê¸¸³Ð¤òºî¤ê½Ð¤·¤¿¡£",
2283                                                  "%^s casts a fearful illusion in front of %s."), m_name, t_name);
2284                         }
2285                         else
2286                         {
2287                                 mon_fight = TRUE;
2288                         }
2289                 }
2290
2291                 if (tr_ptr->flags3 & RF3_NO_FEAR)
2292                 {
2293                         if (see_t) msg_format(_("%^s¤Ï¶²Éݤò´¶¤¸¤Ê¤¤¡£", 
2294                                                     "%^s refuses to be frightened."), t_name);
2295
2296                 }
2297                 else if (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
2298                 {
2299                         if (see_t) msg_format(_("%^s¤Ï¶²Éݤò´¶¤¸¤Ê¤¤¡£", 
2300                                                     "%^s refuses to be frightened."), t_name);
2301                 }
2302                 else
2303                 {
2304                         if (set_monster_monfear(t_idx, MON_MONFEAR(t_ptr) + randint0(4) + 4)) fear = TRUE;
2305                 }
2306
2307                 wake_up = TRUE;
2308
2309                 break;
2310
2311         /* RF5_BLIND */
2312         case 128+28:
2313                 if (known)
2314                 {
2315                         if (see_either)
2316                         {
2317                                 _(msg_format("%s¤Ï¼öʸ¤ò¾§¤¨¤Æ%s¤ÎÌܤò¾Æ¤­ÉÕ¤«¤»¤¿¡£", m_name, t_name),
2318                                   msg_format("%^s casts a spell, burning %s%s eyes.", m_name, t_name,
2319                                                  (streq(t_name, "it") ? "s" : "'s")));
2320
2321                         }
2322                         else
2323                         {
2324                                 mon_fight = TRUE;
2325                         }
2326                 }
2327
2328                 /* Simulate blindness with confusion */
2329                 if (tr_ptr->flags3 & RF3_NO_CONF)
2330                 {
2331                         if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."), t_name);
2332                 }
2333                 else if (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
2334                 {
2335                         if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."), t_name);
2336                 }
2337                 else
2338                 {
2339                         if (see_t) msg_format(_("%^s¤ÏÌܤ¬¸«¤¨¤Ê¤¯¤Ê¤Ã¤¿¡ª ", "%^s is blinded!"), t_name);
2340
2341                         (void)set_monster_confused(t_idx, MON_CONFUSED(t_ptr) + 12 + randint0(4));
2342                 }
2343
2344                 wake_up = TRUE;
2345
2346                 break;
2347
2348         /* RF5_CONF */
2349         case 128+29:
2350                 if (known)
2351                 {
2352                         if (see_either)
2353                         {
2354                                 msg_format(_("%^s¤¬%s¤ÎÁ°¤Ë¸¸ÏÇŪ¤Ê¸¸¤ò¤Ä¤¯¤ê½Ð¤·¤¿¡£",
2355                                                  "%^s casts a mesmerizing illusion in front of %s."), m_name, t_name);
2356                         }
2357                         else
2358                         {
2359                                 mon_fight = TRUE;
2360                         }
2361                 }
2362
2363                 if (tr_ptr->flags3 & RF3_NO_CONF)
2364                 {
2365                         if (see_t) msg_format(_("%^s¤ÏÏǤ蘆¤ì¤Ê¤«¤Ã¤¿¡£",
2366                                                     "%^s disbelieves the feeble spell."), t_name);
2367                 }
2368                 else if (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
2369                 {
2370                         if (see_t) msg_format(_("%^s¤ÏÏǤ蘆¤ì¤Ê¤«¤Ã¤¿¡£",
2371                                                     "%^s disbelieves the feeble spell."), t_name);
2372                 }
2373                 else
2374                 {
2375                         if (see_t) msg_format(_("%^s¤Ïº®Í𤷤¿¤è¤¦¤À¡£",
2376                                                     "%^s seems confused."), t_name);
2377
2378                         (void)set_monster_confused(t_idx, MON_CONFUSED(t_ptr) + 12 + randint0(4));
2379                 }
2380
2381                 wake_up = TRUE;
2382
2383                 break;
2384
2385         /* RF5_SLOW */
2386         case 128+30:
2387                 if (known)
2388                 {
2389                         if (see_either)
2390                         {
2391                                 _(msg_format("%s¤¬%s¤Î¶ÚÆù¤«¤éÎϤòµÛ¤¤¤È¤Ã¤¿¡£", m_name, t_name),
2392                                   msg_format("%^s drains power from %s%s muscles.", m_name, t_name,
2393                                            (streq(t_name, "it") ? "s" : "'s")));
2394                         }
2395                         else
2396                         {
2397                                 mon_fight = TRUE;
2398                         }
2399                 }
2400
2401                 if (tr_ptr->flags1 & RF1_UNIQUE)
2402                 {
2403                         if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£",
2404                                                     "%^s is unaffected."), t_name);
2405                 }
2406                 else if (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
2407                 {
2408                         if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£",
2409                                                     "%^s is unaffected."), t_name);
2410                 }
2411                 else
2412                 {
2413                         if (set_monster_slow(t_idx, MON_SLOW(t_ptr) + 50))
2414                         {
2415                                 if (see_t) msg_format(_("%s¤ÎÆ°¤­¤¬ÃÙ¤¯¤Ê¤Ã¤¿¡£",
2416                                                             "%^s starts moving slower."), t_name);
2417                         }
2418                 }
2419
2420                 wake_up = TRUE;
2421
2422                 break;
2423
2424         /* RF5_HOLD */
2425         case 128+31:
2426                 if (known)
2427                 {
2428                         if (see_either)
2429                         {
2430                                 msg_format(_("%^s¤Ï%s¤ò¤¸¤Ã¤È¸«¤Ä¤á¤¿¡£", "%^s stares intently at %s."), m_name, t_name);
2431                         }
2432                         else
2433                         {
2434                                 mon_fight = TRUE;
2435                         }
2436                 }
2437
2438                 if ((tr_ptr->flags1 & RF1_UNIQUE) ||
2439                     (tr_ptr->flags3 & RF3_NO_STUN))
2440                 {
2441                         if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."), t_name);
2442                 }
2443                 else if (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
2444                 {
2445                         if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."), t_name);
2446                 }
2447                 else
2448                 {
2449                         if (see_t) msg_format(_("%^s¤ÏËãá㤷¤¿¡ª", "%^s is paralyzed!"), t_name);
2450
2451                         (void)set_monster_stunned(t_idx, MON_STUNNED(t_ptr) + randint1(4) + 4);
2452                 }
2453
2454                 wake_up = TRUE;
2455
2456                 break;
2457
2458
2459         /* RF6_HASTE */
2460         case 160+0:
2461                 if (known)
2462                 {
2463                         if (see_m)
2464                         {
2465                                 msg_format(_("%^s¤¬¼«Ê¬¤ÎÂΤËÇ°¤òÁ÷¤Ã¤¿¡£", "%^s concentrates on %s body."), m_name);
2466                         }
2467                         else
2468                         {
2469                                 mon_fight = TRUE;
2470                         }
2471                 }
2472
2473                 /* Allow quick speed increases to base+10 */
2474                 if (set_monster_fast(m_idx, MON_FAST(m_ptr) + 100))
2475                 {
2476                         if (see_m) msg_format(_("%^s¤ÎÆ°¤­¤¬Â®¤¯¤Ê¤Ã¤¿¡£", "%^s starts moving faster."), m_name);
2477                 }
2478                 break;
2479
2480         /* RF6_HAND_DOOM */
2481         case 160+1:
2482                 if (known)
2483                 {
2484                         if (see_m)
2485                         {
2486                                 msg_format(_("%^s¤¬%s¤Ë<ÇËÌǤμê>¤òÊü¤Ã¤¿¡ª", "%^s invokes the Hand of Doom upon %s!"), m_name, t_name);
2487                         }
2488                         else
2489                         {
2490                                 mon_fight = TRUE;
2491                         }
2492                 }
2493
2494                 dam = 20; /* Dummy power */
2495                 monst_breath_monst(m_idx, y, x, GF_HAND_DOOM, dam, 0, FALSE, MS_HAND_DOOM, learnable);
2496
2497                 break;
2498
2499         /* RF6_HEAL */
2500         case 160+2:
2501                 if (known)
2502                 {
2503                         if (see_m)
2504                         {
2505                                 msg_format(_("%^s¤Ï¼«Ê¬¤Î½ý¤ËÇ°¤ò½¸Ã椷¤¿¡£", "%^s concentrates on %s wounds."), m_name);
2506                         }
2507                         else
2508                         {
2509                                 mon_fight = TRUE;
2510                         }
2511                 }
2512
2513                 /* Heal some */
2514                 m_ptr->hp += (rlev * 6);
2515
2516                 /* Fully healed */
2517                 if (m_ptr->hp >= m_ptr->maxhp)
2518                 {
2519                         /* Fully healed */
2520                         m_ptr->hp = m_ptr->maxhp;
2521
2522                         if (known)
2523                         {
2524                                 if (see_m)
2525                                 {
2526                                         msg_format(_("%^s¤Ï´°Á´¤Ë¼£¤Ã¤¿¡ª", "%^s looks completely healed!"), m_name);
2527                                 }
2528                                 else
2529                                 {
2530                                         mon_fight = TRUE;
2531                                 }
2532                         }
2533                 }
2534
2535                 /* Partially healed */
2536                 else if (known)
2537                 {
2538                         if (see_m)
2539                         {
2540                                 msg_format(_("%^s¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£", "%^s looks healthier."), m_name);
2541                         }
2542                         else
2543                         {
2544                                 mon_fight = TRUE;
2545                         }
2546                 }
2547
2548                 /* Redraw (later) if needed */
2549                 if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
2550                 if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
2551
2552                 /* Cancel fear */
2553                 if (MON_MONFEAR(m_ptr))
2554                 {
2555                         /* Cancel fear */
2556                         (void)set_monster_monfear(m_idx, 0);
2557
2558                         /* Message */
2559                         if (see_m) msg_format(_("%^s¤Ïͦµ¤¤ò¼è¤êÌᤷ¤¿¡£", "%^s recovers %s courage."), m_name);
2560                 }
2561
2562                 break;
2563
2564         /* RF6_INVULNER */
2565         case 160+3:
2566                 if (known)
2567                 {
2568                         if (see_m)
2569                         {
2570                                 disturb(1, 1);
2571                                 msg_format(_("%s¤Ï̵½ý¤Îµå¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a Globe of Invulnerability."), m_name);
2572                         }
2573                         else
2574                         {
2575                                 mon_fight = TRUE;
2576                         }
2577                 }
2578
2579                 if (!MON_INVULNER(m_ptr)) (void)set_monster_invulner(m_idx, randint1(4) + 4, FALSE);
2580                 break;
2581
2582         /* RF6_BLINK */
2583         case 160+4:
2584                 if (teleport_barrier(m_idx))
2585                 {
2586                         if (see_m)
2587                         {
2588                                 msg_format(_("ËâË¡¤Î¥Ð¥ê¥¢¤¬%^s¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¼ÙË⤷¤¿¡£", "Magic barrier obstructs teleporting of %^s."), m_name);
2589                         }
2590                 }
2591                 else
2592                 {
2593                         if (see_m)
2594                         {
2595                                 msg_format(_("%^s¤¬½Ö»þ¤Ë¾Ã¤¨¤¿¡£", "%^s blinks away."), m_name);
2596                         }
2597                         teleport_away(m_idx, 10, 0L);
2598                 }
2599                 break;
2600
2601         /* RF6_TPORT */
2602         case 160+5:
2603                 if (teleport_barrier(m_idx))
2604                 {
2605                         if (see_m)
2606                         {
2607                                 msg_format(_("ËâË¡¤Î¥Ð¥ê¥¢¤¬%^s¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¼ÙË⤷¤¿¡£", "Magic barrier obstructs teleporting of %^s."), m_name);
2608                         }
2609                 }
2610                 else
2611                 {
2612                         if (see_m)
2613                         {
2614                                 msg_format(_("%^s¤¬¥Æ¥ì¥Ý¡¼¥È¤·¤¿¡£", "%^s teleports away."), m_name);
2615                         }
2616                         teleport_away_followable(m_idx);
2617                 }
2618                 break;
2619
2620         /* RF6_WORLD */
2621         case 160+6:
2622 #if 0
2623                 int who = 0;
2624                 if(m_ptr->r_idx = MON_DIO) who == 1;
2625                 else if(m_ptr->r_idx = MON_WONG) who == 3;
2626                 dam = who;
2627                 if(!process_the_world(randint1(2)+2, who, player_has_los_bold(m_ptr->fy, m_ptr->fx))) return (FALSE);
2628 #endif
2629                 return FALSE;
2630
2631         /* RF6_SPECIAL */
2632         case 160+7:
2633                 switch (m_ptr->r_idx)
2634                 {
2635                 case MON_OHMU:
2636                         /* Moved to process_monster(), like multiplication */
2637                         return FALSE;
2638
2639                 case MON_ROLENTO:
2640                         if (known)
2641                         {
2642                                 if (see_either)
2643                                 {
2644                                         disturb(1, 1);
2645
2646                                         msg_format(_("%^s¤Ï¼êÜØÃƤò¤Ð¤é¤Þ¤¤¤¿¡£", "%^s throws some hand grenades."), m_name);
2647                                 }
2648                                 else
2649                                 {
2650                                         mon_fight = TRUE;
2651                                 }
2652                         }
2653
2654                         {
2655                                 int num = 1 + randint1(3);
2656                                 for (k = 0; k < num; k++)
2657                                 {
2658                                         count += summon_named_creature(m_idx, y, x, MON_SHURYUUDAN, 0);
2659                                 }
2660                         }
2661
2662                         if (known && !see_t && count)
2663                         {
2664                                 mon_fight = TRUE;
2665                         }
2666                         break;
2667
2668                 default:
2669                         if (r_ptr->d_char == 'B')
2670                         {
2671                                 if (one_in_(3))
2672                                 {
2673                                         if (see_m)
2674                                         {
2675                                                 msg_format(_("%^s¤ÏÆÍÁ³µÞ¾å¾º¤·¤Æ»ë³¦¤«¤é¾Ã¤¨¤¿!", "%^s suddenly go out of your sight!"), m_name);
2676                                         }
2677                                         teleport_away(m_idx, 10, TELEPORT_NONMAGICAL);
2678                                         p_ptr->update |= (PU_MONSTERS);
2679                                 }
2680                                 else
2681                                 {
2682                                         if (known)
2683                                         {
2684                                                 if (see_either)
2685                                                 {
2686                                                         msg_format(_("%^s¤¬%s¤òÄϤó¤Ç¶õÃ椫¤éÅꤲÍî¤È¤·¤¿¡£", "%^s holds %s, and drops from the sky."), m_name, t_name);
2687                                                 }
2688                                                 else
2689                                                 {
2690                                                         mon_fight = TRUE;
2691                                                 }
2692                                         }
2693
2694                                         dam = damroll(4, 8);
2695
2696                                         if (t_idx == p_ptr->riding) teleport_player_to(m_ptr->fy, m_ptr->fx, TELEPORT_NONMAGICAL | TELEPORT_PASSIVE);
2697                                         else teleport_monster_to(t_idx, m_ptr->fy, m_ptr->fx, 100, TELEPORT_NONMAGICAL | TELEPORT_PASSIVE);
2698
2699                                         sound(SOUND_FALL);
2700
2701                                         if (tr_ptr->flags7 & RF7_CAN_FLY)
2702                                         {
2703                                                 if (see_t) msg_format(_("%^s¤ÏÀŤ«¤ËÃåÃϤ·¤¿¡£", "%^s floats gently down to the ground."), t_name);
2704                                         }
2705                                         else
2706                                         {
2707                                                 if (see_t) msg_format(_("%^s¤ÏÃÏÌ̤Ë᤭¤Ä¤±¤é¤ì¤¿¡£", "%^s crashed into the ground."), t_name);
2708
2709                                                 dam += damroll(6, 8);
2710                                         }
2711
2712                                         if (p_ptr->riding == t_idx)
2713                                         {
2714                                                 int get_damage = 0;
2715
2716                                                 /* Mega hack -- this special action deals damage to the player. Therefore the code of "eyeeye" is necessary.
2717                                                    -- henkma
2718                                                  */
2719                                                 get_damage = take_hit(DAMAGE_NOESCAPE, dam, m_name, -1);
2720                                                 if (p_ptr->tim_eyeeye && get_damage > 0 && !p_ptr->is_dead)
2721                                                 {
2722                                                         char m_name_self[80];
2723
2724                                                         /* hisself */
2725                                                         monster_desc(m_name_self, m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE | MD_OBJECTIVE);
2726
2727                                                         _(msg_format("¹¶·â¤¬%s¼«¿È¤ò½ý¤Ä¤±¤¿¡ª", m_name),
2728                                                           msg_format("The attack of %s has wounded %s!", m_name, m_name_self));
2729
2730                                                         project(0, 0, m_ptr->fy, m_ptr->fx, get_damage, GF_MISSILE, PROJECT_KILL, -1);
2731                                                         set_tim_eyeeye(p_ptr->tim_eyeeye-5, TRUE);
2732                                                 }
2733                                         }
2734
2735                                         mon_take_hit_mon(t_idx, dam, &fear, extract_note_dies(real_r_ptr(t_ptr)), m_idx);
2736                                 }
2737                                 break;
2738                         }
2739
2740                         /* Something is wrong */
2741                         else return FALSE;
2742                 }
2743
2744                 /* done */
2745                 break;
2746
2747         /* RF6_TELE_TO */
2748         case 160+8:
2749                 if (known)
2750                 {
2751                         if (see_either)
2752                         {
2753                                 msg_format(_("%^s¤¬%s¤ò°ú¤­Ìᤷ¤¿¡£", "%^s commands %s to return."), m_name, t_name);
2754                         }
2755                         else
2756                         {
2757                                 mon_fight = TRUE;
2758                         }
2759                 }
2760
2761                 if (tr_ptr->flagsr & RFR_RES_TELE)
2762                 {
2763                         if ((tr_ptr->flags1 & RF1_UNIQUE) || (tr_ptr->flagsr & RFR_RES_ALL))
2764                         {
2765                                 if (is_original_ap_and_seen(t_ptr)) tr_ptr->r_flagsr |= RFR_RES_TELE;
2766                                 if (see_t)
2767                                 {
2768                                         msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected!"), t_name);
2769                                 }
2770
2771                                 resists_tele = TRUE;
2772                         }
2773                         else if (tr_ptr->level > randint1(100))
2774                         {
2775                                 if (is_original_ap_and_seen(t_ptr)) tr_ptr->r_flagsr |= RFR_RES_TELE;
2776                                 if (see_t)
2777                                 {
2778                                         msg_format(_("%^s¤ÏÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡ª", "%^s resists!"), t_name);
2779                                 }
2780
2781                                 resists_tele = TRUE;
2782                         }
2783                 }
2784
2785                 if (!resists_tele)
2786                 {
2787                         if (t_idx == p_ptr->riding) teleport_player_to(m_ptr->fy, m_ptr->fx, TELEPORT_PASSIVE);
2788                         else teleport_monster_to(t_idx, m_ptr->fy, m_ptr->fx, 100, TELEPORT_PASSIVE);
2789                 }
2790
2791                 wake_up = TRUE;
2792                 break;
2793
2794         /* RF6_TELE_AWAY */
2795         case 160+9:
2796                 if (known)
2797                 {
2798                         if (see_either)
2799                         {
2800                                 msg_format(_("%^s¤Ï%s¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤¿¡£", "%^s teleports %s away."), m_name, t_name);
2801                         }
2802                         else
2803                         {
2804                                 mon_fight = TRUE;
2805                         }
2806                 }
2807
2808                 if (tr_ptr->flagsr & RFR_RES_TELE)
2809                 {
2810                         if ((tr_ptr->flags1 & RF1_UNIQUE) || (tr_ptr->flagsr & RFR_RES_ALL))
2811                         {
2812                                 if (is_original_ap_and_seen(t_ptr)) tr_ptr->r_flagsr |= RFR_RES_TELE;
2813                                 if (see_t)
2814                                 {
2815                                         msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected!"), t_name);
2816                                 }
2817
2818                                 resists_tele = TRUE;
2819                         }
2820                         else if (tr_ptr->level > randint1(100))
2821                         {
2822                                 if (is_original_ap_and_seen(t_ptr)) tr_ptr->r_flagsr |= RFR_RES_TELE;
2823                                 if (see_t)
2824                                 {
2825                                         msg_format(_("%^s¤ÏÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡ª", "%^s resists!"), t_name);
2826                                 }
2827
2828                                 resists_tele = TRUE;
2829                         }
2830                 }
2831
2832                 if (!resists_tele)
2833                 {
2834                         if (t_idx == p_ptr->riding) teleport_player_away(m_idx, MAX_SIGHT * 2 + 5);
2835                         else teleport_away(t_idx, MAX_SIGHT * 2 + 5, TELEPORT_PASSIVE);
2836                 }
2837
2838                 wake_up = TRUE;
2839                 break;
2840
2841         /* RF6_TELE_LEVEL */
2842         case 160+10:
2843                 if (known)
2844                 {
2845                         if (see_either)
2846                         {
2847                                 msg_format(_("%^s¤¬%s¤Î­¤ò»Ø¤µ¤·¤¿¡£", "%^s gestures at %s's feet."), m_name, t_name);
2848                         }
2849                         else
2850                         {
2851                                 mon_fight = TRUE;
2852                         }
2853                 }
2854
2855                 if (tr_ptr->flagsr & (RFR_EFF_RES_NEXU_MASK | RFR_RES_TELE))
2856                 {
2857                         if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected!"), t_name);
2858                 }
2859                 else if ((tr_ptr->flags1 & RF1_QUESTOR) ||
2860                             (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10))
2861                 {
2862                         if (see_t) msg_format(_("%^s¤Ï¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª", "%^s resist the effects!"), t_name);
2863                 }
2864                 else teleport_level((t_idx == p_ptr->riding) ? 0 : t_idx);
2865
2866                 wake_up = TRUE;
2867                 break;
2868
2869         /* RF6_PSY_SPEAR */
2870         case 160+11:
2871                 if (known)
2872                 {
2873                         if (see_either)
2874                         {
2875                                 msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¸÷¤Î·õ¤òÊü¤Ã¤¿¡£", "%^s throw a Psycho-spear at %s."), m_name, t_name);
2876                         }
2877                         else
2878                         {
2879                                 mon_fight = TRUE;
2880                         }
2881                 }
2882
2883                 dam = (r_ptr->flags2 & RF2_POWERFUL) ? (randint1(rlev * 2) + 180) : (randint1(rlev * 3 / 2) + 120);
2884                 monst_beam_monst(m_idx, y, x, GF_PSY_SPEAR,
2885                                  dam, MS_PSY_SPEAR, learnable);
2886                 break;
2887
2888         /* RF6_DARKNESS */
2889         case 160+12:
2890                 if (known)
2891                 {
2892                         if (see_m)
2893                         {
2894                                 if (can_use_lite_area)
2895                                 {
2896                                         msg_format(_("%^s¤¬ÊÕ¤ê¤òÌÀ¤ë¤¯¾È¤é¤·¤¿¡£", "%^s cast a spell to light up."), m_name);
2897                                 }
2898                                 else
2899                                 {
2900                                         msg_format(_("%^s¤¬°Å°Ç¤ÎÃæ¤Ç¼ê¤ò¿¶¤Ã¤¿¡£", "%^s gestures in shadow."), m_name);
2901                                 }
2902
2903                                 if (see_t)
2904                                 {
2905                                         if (can_use_lite_area)
2906                                         {
2907                                                 msg_format(_("%^s¤ÏÇò¤¤¸÷¤ËÊñ¤Þ¤ì¤¿¡£", "%^s is surrounded by a white light."), t_name);
2908                                         }
2909                                         else
2910                                         {
2911                                                 msg_format(_("%^s¤Ï°Å°Ç¤ËÊñ¤Þ¤ì¤¿¡£", "%^s is surrounded by darkness."), t_name);
2912                                         }
2913                                 }
2914                         }
2915                         else
2916                         {
2917                                 mon_fight = TRUE;
2918                         }
2919                 }
2920
2921                 if (can_use_lite_area)
2922                 {
2923                         (void)project(m_idx, 3, y, x, 0, GF_LITE_WEAK, PROJECT_GRID | PROJECT_KILL, -1);
2924                         lite_room(y, x);
2925                 }
2926                 else
2927                 {
2928                         (void)project(m_idx, 3, y, x, 0, GF_DARK_WEAK, PROJECT_GRID | PROJECT_KILL, MS_DARKNESS);
2929                         unlite_room(y, x);
2930                 }
2931
2932                 break;
2933
2934         /* RF6_TRAPS */
2935         case 160+13:
2936 #if 0
2937                 if (known)
2938                 {
2939                         if (see_m)
2940                         {
2941                                 msg_format(_("%^s¤¬¼öʸ¤ò¾§¤¨¤Æ¼Ù°­¤ËÈù¾Ð¤ó¤À¡£", "%^s casts a spell and cackles evilly."), m_name);
2942                         }
2943                         else
2944                         {
2945                                 msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
2946                         }
2947                 }
2948
2949                 trap_creation(y, x);
2950
2951                 break;
2952 #else
2953                 /* Not implemented */
2954                 return FALSE;
2955 #endif
2956
2957         /* RF6_FORGET */
2958         case 160+14:
2959                 /* Not implemented */
2960                 return FALSE;
2961
2962         /* RF6_RAISE_DEAD */
2963         case 160+15:
2964                 if (known)
2965                 {
2966                         if (see_either)
2967                         {
2968                                 disturb(1, 1);
2969                                 if (blind)
2970                                 {
2971                                         msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
2972                                 }
2973                                 else
2974                                 {
2975                                         msg_format(_("%^s¤¬»à¼ÔÉü³è¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a spell to revive corpses."), m_name);
2976                                 }
2977                         }
2978                         else
2979                         {
2980                                 mon_fight = TRUE;
2981                         }
2982                 }
2983                 animate_dead(m_idx, m_ptr->fy, m_ptr->fx);
2984                 break;
2985
2986         /* RF6_S_KIN */
2987         case 160+16:
2988                 if (known)
2989                 {
2990                         if (see_either)
2991                         {
2992                                 disturb(1, 1);
2993
2994                                 if (m_ptr->r_idx == MON_SERPENT || m_ptr->r_idx == MON_ZOMBI_SERPENT)
2995                                 {
2996                                         msg_format(_("%^s¤¬¥À¥ó¥¸¥ç¥ó¤Î¼ç¤ò¾¤´­¤·¤¿¡£", "%^s magically summons guardians of dungeons."), m_name);
2997                                 }
2998                                 else
2999                                 {
3000                                         _(msg_format("%s¤¬ËâË¡¤Ç%s¤ò¾¤´­¤·¤¿¡£", m_name, ((r_ptr->flags1 & RF1_UNIQUE) ? "¼ê²¼" : "Ãç´Ö")),   
3001                                           msg_format("%^s magically summons %s %s.", m_name, m_poss, ((r_ptr->flags1 & RF1_UNIQUE) ? "minions" : "kin")));
3002                                 }
3003
3004                         }
3005                         else
3006                         {
3007                                 mon_fight = TRUE;
3008                         }
3009                 }
3010
3011                 switch (m_ptr->r_idx)
3012                 {
3013                 case MON_MENELDOR:
3014                 case MON_GWAIHIR:
3015                 case MON_THORONDOR:
3016                         {
3017                                 int num = 4 + randint1(3);
3018                                 for (k = 0; k < num; k++)
3019                                 {
3020                                         count += summon_specific(m_idx, y, x, rlev, SUMMON_EAGLES, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
3021                                 }
3022                         }
3023                         break;
3024
3025                 case MON_BULLGATES:
3026                         {
3027                                 int num = 2 + randint1(3);
3028                                 for (k = 0; k < num; k++)
3029                                 {
3030                                         count += summon_named_creature(m_idx, y, x, MON_IE, 0);
3031                                 }
3032                         }
3033                         break;
3034
3035                 case MON_SERPENT:
3036                 case MON_ZOMBI_SERPENT:
3037                         if (r_info[MON_JORMUNGAND].cur_num < r_info[MON_JORMUNGAND].max_num && one_in_(6))
3038                         {
3039                                 if (known && see_t)
3040                                 {
3041                                         msg_print(_("ÃÏÌ̤«¤é¿å¤¬¿á¤­½Ð¤·¤¿¡ª", "Water blew off from the ground!"));
3042                                 }
3043                                 project(t_idx, 8, y, x, 3, GF_WATER_FLOW, PROJECT_GRID | PROJECT_HIDE, -1);
3044                         }
3045
3046                         {
3047                                 int num = 2 + randint1(3);
3048                                 for (k = 0; k < num; k++)
3049                                 {
3050                                         count += summon_specific(m_idx, y, x, rlev, SUMMON_GUARDIANS, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
3051                                 }
3052                         }
3053                         break;
3054
3055                 case MON_CALDARM:
3056                         {
3057                                 int num = randint1(3);
3058                                 for (k = 0; k < num; k++)
3059                                 {
3060                                         count += summon_named_creature(m_idx, y, x, MON_LOCKE_CLONE, 0);
3061                                 }
3062                         }
3063                         break;
3064
3065                 case MON_LOUSY:
3066                         {
3067                                 int num = 2 + randint1(3);
3068                                 for (k = 0; k < num; k++)
3069                                 {
3070                                         count += summon_specific(m_idx, y, x, rlev, SUMMON_LOUSE, (PM_ALLOW_GROUP));
3071                                 }
3072                         }
3073                         break;
3074
3075                 default:
3076                         summon_kin_type = r_ptr->d_char;
3077
3078                         for (k = 0; k < 4; k++)
3079                         {
3080                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_KIN, (PM_ALLOW_GROUP));
3081                         }
3082                         break;
3083                 }
3084
3085                 if (known && !see_t && count)
3086                 {
3087                         mon_fight = TRUE;
3088                 }
3089
3090                 break;
3091
3092         /* RF6_S_CYBER */
3093         case 160+17:
3094                 if (known)
3095                 {
3096                         if (see_either)
3097                         {
3098                                 disturb(1, 1);
3099
3100                                 msg_format(_("%^s¤¬¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons Cyberdemons!"), m_name);
3101                         }
3102                         else
3103                         {
3104                                 mon_fight = TRUE;
3105                         }
3106                 }
3107
3108                 if (is_friendly(m_ptr))
3109                 {
3110                         count += summon_specific(m_idx, y, x, rlev, SUMMON_CYBER, (PM_ALLOW_GROUP));
3111                 }
3112                 else
3113                 {
3114                         count += summon_cyber(m_idx, y, x);
3115                 }
3116
3117                 if (known && !see_t && count)
3118                 {
3119                         mon_fight = TRUE;
3120                 }
3121
3122                 break;
3123
3124         /* RF6_S_MONSTER */
3125         case 160+18:
3126                 if (known)
3127                 {
3128                         if (see_either)
3129                         {
3130                                 disturb(1, 1);
3131
3132                                 msg_format(_("%^s¤¬ËâË¡¤ÇÃç´Ö¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons help!"), m_name);
3133                         }
3134                         else
3135                         {
3136                                 mon_fight = TRUE;
3137                         }
3138                 }
3139
3140                 count += summon_specific(m_idx, y, x, rlev, 0, (u_mode));
3141
3142                 if (known && !see_t && count)
3143                 {
3144                         mon_fight = TRUE;
3145                 }
3146
3147                 break;
3148
3149         /* RF6_S_MONSTERS */
3150         case 160+19:
3151                 if (known)
3152                 {
3153                         if (see_either)
3154                         {
3155                                 disturb(1, 1);
3156
3157                                 msg_format(_("%^s¤¬ËâË¡¤Ç¥â¥ó¥¹¥¿¡¼¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons monsters!"), m_name);
3158                         }
3159                         else
3160                         {
3161                                 mon_fight = TRUE;
3162                         }
3163                 }
3164
3165                 for (k = 0; k < s_num_6; k++)
3166                 {
3167                         count += summon_specific(m_idx, y, x, rlev, 0, (PM_ALLOW_GROUP | u_mode));
3168                 }
3169
3170                 if (known && !see_t && count)
3171                 {
3172                         mon_fight = TRUE;
3173                 }
3174
3175                 break;
3176
3177         /* RF6_S_ANT */
3178         case 160+20:
3179                 if (known)
3180                 {
3181                         if (see_either)
3182                         {
3183                                 disturb(1, 1);
3184
3185                                 msg_format(_("%^s¤¬ËâË¡¤Ç¥¢¥ê¤ò¾¤´­¤·¤¿¡£", "%^s magically summons ants."), m_name);
3186                         }
3187                         else
3188                         {
3189                                 mon_fight = TRUE;
3190                         }
3191                 }
3192
3193                 for (k = 0; k < s_num_6; k++)
3194                 {
3195                         count += summon_specific(m_idx, y, x, rlev, SUMMON_ANT, (PM_ALLOW_GROUP));
3196                 }
3197
3198                 if (known && !see_t && count)
3199                 {
3200                         mon_fight = TRUE;
3201                 }
3202
3203                 break;
3204
3205         /* RF6_S_SPIDER */
3206         case 160+21:
3207                 if (known)
3208                 {
3209                         if (see_either)
3210                         {
3211                                 disturb(1, 1);
3212
3213                                 msg_format(_("%^s¤¬ËâË¡¤Ç¥¯¥â¤ò¾¤´­¤·¤¿¡£", "%^s magically summons spiders."), m_name);
3214                         }
3215                         else
3216                         {
3217                                 mon_fight = TRUE;
3218                         }
3219                 }
3220
3221                 for (k = 0; k < s_num_6; k++)
3222                 {
3223                         count += summon_specific(m_idx, y, x, rlev, SUMMON_SPIDER, (PM_ALLOW_GROUP));
3224                 }
3225
3226                 if (known && !see_t && count)
3227                 {
3228                         mon_fight = TRUE;
3229                 }
3230
3231                 break;
3232
3233         /* RF6_S_HOUND */
3234         case 160+22:
3235                 if (known)
3236                 {
3237                         if (see_either)
3238                         {
3239                                 disturb(1, 1);
3240
3241                                 msg_format(_("%^s¤¬ËâË¡¤Ç¥Ï¥¦¥ó¥É¤ò¾¤´­¤·¤¿¡£", "%^s magically summons hounds."), m_name);
3242                         }
3243                         else
3244                         {
3245                                 mon_fight = TRUE;
3246                         }
3247                 }
3248
3249                 for (k = 0; k < s_num_4; k++)
3250                 {
3251                         count += summon_specific(m_idx, y, x, rlev, SUMMON_HOUND, (PM_ALLOW_GROUP));
3252                 }
3253
3254                 if (known && !see_t && count)
3255                 {
3256                         mon_fight = TRUE;
3257                 }
3258
3259                 break;
3260
3261         /* RF6_S_HYDRA */
3262         case 160+23:
3263                 if (known)
3264                 {
3265                         if (see_either)
3266                         {
3267                                 disturb(1, 1);
3268
3269                                 msg_format(_("%^s¤¬ËâË¡¤Ç¥Ò¥É¥é¤ò¾¤´­¤·¤¿¡£", "%^s magically summons hydras."), m_name);
3270                         }
3271                         else
3272                         {
3273                                 mon_fight = TRUE;
3274                         }
3275                 }
3276
3277                 for (k = 0; k < s_num_4; k++)
3278                 {
3279                         count += summon_specific(m_idx, y, x, rlev, SUMMON_HYDRA, (PM_ALLOW_GROUP));
3280                 }
3281
3282                 if (known && !see_t && count)
3283                 {
3284                         mon_fight = TRUE;
3285                 }
3286
3287                 break;
3288
3289         /* RF6_S_ANGEL */
3290         case 160+24:
3291                 if (known)
3292                 {
3293                         if (see_either)
3294                         {
3295                                 disturb(1, 1);
3296
3297                                 msg_format(_("%^s¤¬ËâË¡¤ÇÅ·»È¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons an angel!"), m_name);
3298                         }
3299                         else
3300                         {
3301                                 mon_fight = TRUE;
3302                         }
3303                 }
3304
3305                 {
3306                         int num = 1;
3307
3308                         if ((r_ptr->flags1 & RF1_UNIQUE) && !easy_band)
3309                         {
3310                                 num += r_ptr->level/40;
3311                         }
3312
3313                         for (k = 0; k < num; k++)
3314                         {
3315                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_ANGEL, (PM_ALLOW_GROUP));
3316                         }
3317                 }
3318
3319                 if (known && !see_t && count)
3320                 {
3321                         mon_fight = TRUE;
3322                 }
3323
3324                 break;
3325
3326         /* RF6_S_DEMON */
3327         case 160+25:
3328                 if (known)
3329                 {
3330                         if (see_either)
3331                         {
3332                                 disturb(1, 1);
3333
3334                                 msg_format(_("%^s¤¬ËâË¡¤Çº®Æ٤εÜÄ¤é¥Ç¡¼¥â¥ó¤ò¾¤´­¤·¤¿¡ª", 
3335                                                  "%^s magically summons a demon from the Courts of Chaos!"), m_name);
3336                         }
3337                         else
3338                         {
3339                                 mon_fight = TRUE;
3340                         }
3341                 }
3342
3343                 for (k = 0; k < 1; k++)
3344                 {
3345                         count += summon_specific(m_idx, y, x, rlev, SUMMON_DEMON, (PM_ALLOW_GROUP));
3346                 }
3347
3348                 if (known && !see_t && count)
3349                 {
3350                         mon_fight = TRUE;
3351                 }
3352
3353                 break;
3354
3355         /* RF6_S_UNDEAD */
3356         case 160+26:
3357                 if (known)
3358                 {
3359                         if (see_either)
3360                         {
3361                                 disturb(1, 1);
3362
3363                                 msg_format(_("%s¤¬ËâË¡¤Ç¥¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤·¤¿¡£", "%^s magically summons undead."), m_name);
3364                         }
3365                         else
3366                         {
3367                                 mon_fight = TRUE;
3368                         }
3369                 }
3370
3371                 for (k = 0; k < 1; k++)
3372                 {
3373                         count += summon_specific(m_idx, y, x, rlev, SUMMON_UNDEAD, (PM_ALLOW_GROUP));
3374                 }
3375
3376                 if (known && !see_t && count)
3377                 {
3378                         mon_fight = TRUE;
3379                 }
3380
3381                 break;
3382
3383         /* RF6_S_DRAGON */
3384         case 160+27:
3385                 if (known)
3386                 {
3387                         if (see_either)
3388                         {
3389                                 disturb(1, 1);
3390
3391                                 msg_format(_("%^s¤¬ËâË¡¤Ç¥É¥é¥´¥ó¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons a dragon!"), m_name);
3392                         }
3393                         else
3394                         {
3395                                 mon_fight = TRUE;
3396                         }
3397                 }
3398
3399                 for (k = 0; k < 1; k++)
3400                 {
3401                         count += summon_specific(m_idx, y, x, rlev, SUMMON_DRAGON, (PM_ALLOW_GROUP));
3402                 }
3403
3404                 if (known && !see_t && count)
3405                 {
3406                         mon_fight = TRUE;
3407                 }
3408
3409                 break;
3410
3411         /* RF6_S_HI_UNDEAD */
3412         case 160+28:
3413                 if (known)
3414                 {
3415                         if (see_either)
3416                         {
3417                                 disturb(1, 1);
3418
3419                                 msg_format(_("%s¤¬ËâË¡¤Ç¥¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤·¤¿¡£", "%^s magically summons undead."), m_name);
3420                         }
3421                         else
3422                         {
3423                                 mon_fight = TRUE;
3424                         }
3425                 }
3426
3427                 for (k = 0; k < s_num_6; k++)
3428                 {
3429                         count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_UNDEAD, (PM_ALLOW_GROUP | u_mode));
3430                 }
3431
3432                 if (known && !see_t && count)
3433                 {
3434                         mon_fight = TRUE;
3435                 }
3436
3437                 break;
3438
3439         /* RF6_S_HI_DRAGON */
3440         case 160+29:
3441                 if (known)
3442                 {
3443                         if (see_either)
3444                         {
3445                                 disturb(1, 1);
3446
3447                                 msg_format(_("%^s¤¬ËâË¡¤Ç¸ÅÂå¥É¥é¥´¥ó¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons ancient dragons!"), m_name);
3448                         }
3449                         else
3450                         {
3451                                 mon_fight = TRUE;
3452                         }
3453                 }
3454
3455                 for (k = 0; k < s_num_4; k++)
3456                 {
3457                         count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_DRAGON, (PM_ALLOW_GROUP | u_mode));
3458                 }
3459
3460                 if (known && !see_t && count)
3461                 {
3462                         mon_fight = TRUE;
3463                 }
3464
3465                 break;
3466
3467         /* RF6_S_AMBERITES */
3468         case 160+30:
3469                 if (known)
3470                 {
3471                         if (see_either)
3472                         {
3473                                 disturb(1, 1);
3474
3475                                 msg_format(_("%^s¤¬¥¢¥ó¥Ð¡¼¤Î²¦Â²¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons Lords of Amber!"), m_name);
3476                         }
3477                         else
3478                         {
3479                                 mon_fight = TRUE;
3480                         }
3481                 }
3482
3483                 for (k = 0; k < s_num_4; k++)
3484                 {
3485                         count += summon_specific(m_idx, y, x, rlev, SUMMON_AMBERITES, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
3486                 }
3487
3488                 if (known && !see_t && count)
3489                 {
3490                         mon_fight = TRUE;
3491                 }
3492
3493                 break;
3494
3495         /* RF6_S_UNIQUE */
3496         case 160+31:
3497                 if (known)
3498                 {
3499                         if (see_either)
3500                         {
3501                                 disturb(1, 1);
3502
3503                                 msg_format(_("%^s¤¬ËâË¡¤ÇÆÃÊ̤ʶ¯Å¨¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons special opponents!"), m_name);
3504                         }
3505                         else
3506                         {
3507                                 mon_fight = TRUE;
3508                         }
3509                 }
3510
3511                 for (k = 0; k < s_num_4; k++)
3512                 {
3513                         count += summon_specific(m_idx, y, x, rlev, SUMMON_UNIQUE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
3514                 }
3515
3516                 {
3517                         int non_unique_type = SUMMON_HI_UNDEAD;
3518
3519                         if ((m_ptr->sub_align & (SUB_ALIGN_GOOD | SUB_ALIGN_EVIL)) == (SUB_ALIGN_GOOD | SUB_ALIGN_EVIL))
3520                                 non_unique_type = 0;
3521                         else if (m_ptr->sub_align & SUB_ALIGN_GOOD)
3522                                 non_unique_type = SUMMON_ANGEL;
3523
3524                         for (k = count; k < s_num_4; k++)
3525                         {
3526                                 count += summon_specific(m_idx, y, x, rlev, non_unique_type, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
3527                         }
3528                 }
3529
3530                 if (known && !see_t && count)
3531                 {
3532                         mon_fight = TRUE;
3533                 }
3534
3535                 break;
3536         }
3537
3538         if (wake_up) (void)set_monster_csleep(t_idx, 0);
3539
3540         if (fear && see_t)
3541         {
3542                 msg_format(_("%^s¤Ï¶²Éݤ·¤Æƨ¤²½Ð¤·¤¿¡ª", "%^s flees in terror!"), t_name);
3543         }
3544
3545         if (m_ptr->ml && maneable && !world_monster && !p_ptr->blind && (p_ptr->pclass == CLASS_IMITATOR))
3546         {
3547                 if (thrown_spell != 167) /* Not RF6_SPECIAL */
3548                 {
3549                         if (p_ptr->mane_num == MAX_MANE)
3550                         {
3551                                 p_ptr->mane_num--;
3552                                 for (i = 0; i < p_ptr->mane_num - 1; i++)
3553                                 {
3554                                         p_ptr->mane_spell[i] = p_ptr->mane_spell[i+1];
3555                                         p_ptr->mane_dam[i] = p_ptr->mane_dam[i+1];
3556                                 }
3557                         }
3558                         p_ptr->mane_spell[p_ptr->mane_num] = thrown_spell - 96;
3559                         p_ptr->mane_dam[p_ptr->mane_num] = dam;
3560                         p_ptr->mane_num++;
3561                         new_mane = TRUE;
3562
3563                         p_ptr->redraw |= (PR_IMITATION);
3564                 }
3565         }
3566
3567         /* Remember what the monster did, if we saw it */
3568         if (can_remember)
3569         {
3570                 /* Inate spell */
3571                 if (thrown_spell < 32*4)
3572                 {
3573                         r_ptr->r_flags4 |= (1L << (thrown_spell - 32*3));
3574                         if (r_ptr->r_cast_spell < MAX_UCHAR) r_ptr->r_cast_spell++;
3575                 }
3576
3577                 /* Bolt or Ball */
3578                 else if (thrown_spell < 32*5)
3579                 {
3580                         r_ptr->r_flags5 |= (1L << (thrown_spell - 32*4));
3581                         if (r_ptr->r_cast_spell < MAX_UCHAR) r_ptr->r_cast_spell++;
3582                 }
3583
3584                 /* Special spell */
3585                 else if (thrown_spell < 32*6)
3586                 {
3587                         r_ptr->r_flags6 |= (1L << (thrown_spell - 32*5));
3588                         if (r_ptr->r_cast_spell < MAX_UCHAR) r_ptr->r_cast_spell++;
3589                 }
3590         }
3591
3592         /* Always take note of monsters that kill you */
3593         if (p_ptr->is_dead && (r_ptr->r_deaths < MAX_SHORT) && !p_ptr->inside_arena)
3594         {
3595                 r_ptr->r_deaths++; /* Ignore appearance difference */
3596         }
3597
3598         /* A spell was cast */
3599         return TRUE;
3600 }