OSDN Git Service

add mspells4.c in Makefile.am
[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 static 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         /* RF4_SHRIEK */
834         case 96+0:
835                 if (known)
836                 {
837                         if (see_m)
838                         {
839                                 msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¶«¤ó¤À¡£", "%^s shrieks at %s."), m_name, t_name);
840                         }
841                         else
842                         {
843                                 mon_fight = TRUE;
844                         }
845                 }
846
847                 wake_up = TRUE;
848
849                 break;
850
851         /* RF4_XXX1 */
852         case 96+1:
853                 /* XXX XXX XXX */
854                 return FALSE;
855
856         /* RF4_DISPEL */
857         case 96+2:
858                 if (known)
859                 {
860                         if (see_m)
861                         {
862                                 msg_format(_("%^s¤¬%s¤ËÂФ·¤ÆËâÎϾõî¤Î¼öʸ¤òÇ°¤¸¤¿¡£", 
863                                                  "%^s invokes a dispel magic at %s."), m_name, t_name);
864                         }
865                         else
866                         {
867                                 mon_fight = TRUE;
868                         }
869                 }
870
871                 if (t_idx == p_ptr->riding) dispel_player();
872                 dispel_monster_status(t_idx);
873
874                 break;
875
876         /* RF4_ROCKET */
877         case 96+3:
878                 if (known)
879                 {
880                         if (see_either)
881                         {
882                                 disturb(1, 1);
883
884                                 if (blind)
885                                 {
886                                         msg_format(_("%^s¤¬²¿¤«¤ò¼Í¤Ã¤¿¡£", "%^s shoots something."), m_name);
887                                 }
888                                 else
889                                 {
890                                         msg_format(_("%^s¤¬%s¤Ë¥í¥±¥Ã¥È¤òȯ¼Í¤·¤¿¡£", "%^s fires a rocket at %s."), m_name, t_name);
891                                 }
892                         }
893                         else
894                         {
895                                 mon_fight = TRUE;
896                         }
897                 }
898
899                 dam = ((m_ptr->hp / 4) > 800 ? 800 : (m_ptr->hp / 4));
900                 monst_breath_monst(m_idx, y, x, GF_ROCKET,
901                                    dam, 2, FALSE, MS_ROCKET, learnable);
902
903                 break;
904
905         /* RF4_SHOOT */
906         case 96+4:
907                 if (known)
908                 {
909                         if (see_either)
910                         {
911                                 if (blind)
912                                 {
913                                         msg_format(_("%^s¤¬´ñ̯¤Ê²»¤òȯ¤·¤¿¡£", "%^s makes a strange noise."), m_name);
914                                 }
915                                 else
916                                 {
917                                         msg_format(_("%^s¤¬%s¤ËÌð¤òÊü¤Ã¤¿¡£", "%^s fires an arrow at %s."), m_name, t_name);
918                                 }
919                         }
920                         else
921                         {
922                                 mon_fight = TRUE;
923                         }
924
925                         sound(SOUND_SHOOT);
926                 }
927
928                 dam = damroll(r_ptr->blow[0].d_dice, r_ptr->blow[0].d_side);
929                 monst_bolt_monst(m_idx, y, x, GF_ARROW, dam, MS_SHOOT, learnable);
930
931                 break;
932
933         /* RF4_XXX2 */
934         case 96+5:
935                 /* XXX XXX XXX */
936                 return FALSE;
937
938         /* RF4_XXX3 */
939         case 96+6:
940                 /* XXX XXX XXX */
941                 return FALSE;
942
943         /* RF4_XXX4 */
944         case 96+7:
945                 /* XXX XXX XXX */
946                 return FALSE;
947
948         /* RF4_BR_ACID */
949         case 96+8:
950                 if (known)
951                 {
952                         if (see_either)
953                         {
954                                 disturb(1, 1);
955
956                                 if (blind)
957                                 {
958                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
959                                 }
960                                 else
961                                 {
962                                         msg_format(_("%^s¤¬%s¤Ë»À¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes acid at %s."), m_name, t_name);
963                                 }
964                         }
965                         else
966                         {
967                                 mon_fight = TRUE;
968                         }
969
970                         sound(SOUND_BREATH);
971                 }
972
973                 dam = ((m_ptr->hp / 3) > 1600 ? 1600 : (m_ptr->hp / 3));
974                 monst_breath_monst(m_idx, y, x, GF_ACID,
975                                    dam,0, TRUE, MS_BR_ACID, learnable);
976
977                 break;
978
979         /* RF4_BR_ELEC */
980         case 96+9:
981                 if (known)
982                 {
983                         if (see_either)
984                         {
985                                 disturb(1, 1);
986
987                                 if (blind)
988                                 {
989                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
990                                 }
991                                 else
992                                 {
993                                         msg_format(_("%^s¤¬%s¤Ë°ðºÊ¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes lightning at %s."), m_name, t_name);
994                                 }
995                         }
996                         else
997                         {
998                                 mon_fight = TRUE;
999                         }
1000
1001                         sound(SOUND_BREATH);
1002                 }
1003
1004                 dam = ((m_ptr->hp / 3) > 1600 ? 1600 : (m_ptr->hp / 3));
1005                 monst_breath_monst(m_idx, y, x, GF_ELEC,
1006                                    dam,0, TRUE, MS_BR_ELEC, learnable);
1007
1008                 break;
1009
1010         /* RF4_BR_FIRE */
1011         case 96+10:
1012                 if (known)
1013                 {
1014                         if (see_either)
1015                         {
1016                                 disturb(1, 1);
1017
1018                                 if (blind)
1019                                 {
1020                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1021                                 }
1022                                 else
1023                                 {
1024                                         msg_format(_("%^s¤¬%s¤Ë²Ð±ê¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes fire at %s."), m_name, t_name);
1025                                 }
1026                         }
1027                         else
1028                         {
1029                                 mon_fight = TRUE;
1030                         }
1031
1032                         sound(SOUND_BREATH);
1033                 }
1034
1035                 dam = ((m_ptr->hp / 3) > 1600 ? 1600 : (m_ptr->hp / 3));
1036                 monst_breath_monst(m_idx, y, x, GF_FIRE,
1037                                    dam,0, TRUE, MS_BR_FIRE, learnable);
1038
1039                 break;
1040
1041         /* RF4_BR_COLD */
1042         case 96+11:
1043                 if (known)
1044                 {
1045                         if (see_either)
1046                         {
1047                                 disturb(1, 1);
1048
1049                                 if (blind)
1050                                 {
1051                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1052                                 }
1053                                 else
1054                                 {
1055                                         msg_format(_("%^s¤¬%s¤ËÎ䵤¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes frost at %s."), m_name, t_name);
1056                                 }
1057                         }
1058                         else
1059                         {
1060                                 mon_fight = TRUE;
1061                         }
1062
1063                         sound(SOUND_BREATH);
1064                 }
1065
1066                 dam = ((m_ptr->hp / 3) > 1600 ? 1600 : (m_ptr->hp / 3));
1067                 monst_breath_monst(m_idx, y, x, GF_COLD,
1068                                    dam,0, TRUE, MS_BR_COLD, learnable);
1069                 break;
1070
1071         /* RF4_BR_POIS */
1072         case 96+12:
1073                 if (known)
1074                 {
1075                         if (see_either)
1076                         {
1077                                 disturb(1, 1);
1078
1079                                 if (blind)
1080                                 {
1081                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1082                                 }
1083                                 else
1084                                 {
1085                                         msg_format(_("%^s¤¬%s¤Ë¥¬¥¹¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes gas at %s."), m_name, t_name);
1086                                 }
1087                         }
1088                         else
1089                         {
1090                                 mon_fight = TRUE;
1091                         }
1092
1093                         sound(SOUND_BREATH);
1094                 }
1095
1096                 dam = ((m_ptr->hp / 3) > 800 ? 800 : (m_ptr->hp / 3));
1097                 monst_breath_monst(m_idx, y, x, GF_POIS,
1098                                    dam,0, TRUE, MS_BR_POIS, learnable);
1099
1100                 break;
1101
1102         /* RF4_BR_NETH */
1103         case 96+13:
1104                 if (known)
1105                 {
1106                         if (see_either)
1107                         {
1108                                 disturb(1, 1);
1109
1110                                 if (blind)
1111                                 {
1112                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1113                                 }
1114                                 else
1115                                 {
1116                                         msg_format(_("%^s¤¬%s¤ËÃϹö¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes nether at %s."), m_name, t_name);
1117                                 }
1118                         }
1119                         else
1120                         {
1121                                 mon_fight = TRUE;
1122                         }
1123
1124                         sound(SOUND_BREATH);
1125                 }
1126
1127                 dam = ((m_ptr->hp / 6) > 550 ? 550 : (m_ptr->hp / 6));
1128                 monst_breath_monst(m_idx, y, x, GF_NETHER,
1129                                    dam,0, TRUE, MS_BR_NETHER, learnable);
1130
1131                 break;
1132
1133         /* RF4_BR_LITE */
1134         case 96+14:
1135                 if (known)
1136                 {
1137                         if (see_either)
1138                         {
1139                                 disturb(1, 1);
1140
1141                                 if (blind)
1142                                 {
1143                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1144                                 }
1145                                 else
1146                                 {
1147                                         msg_format(_("%^s¤¬%s¤ËÁ®¸÷¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes light at %s."), m_name, t_name);
1148                                 }
1149                         }
1150                         else
1151                         {
1152                                 mon_fight = TRUE;
1153                         }
1154
1155                         sound(SOUND_BREATH);
1156                 }
1157
1158                 dam = ((m_ptr->hp / 6) > 400 ? 400 : (m_ptr->hp / 6));
1159                 monst_breath_monst(m_idx, y, x, GF_LITE,
1160                                    dam,0, TRUE, MS_BR_LITE, learnable);
1161
1162                 break;
1163
1164         /* RF4_BR_DARK */
1165         case 96+15:
1166                 if (known)
1167                 {
1168                         if (see_either)
1169                         {
1170                                 disturb(1, 1);
1171
1172                                 if (blind)
1173                                 {
1174                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1175                                 }
1176                                 else
1177                                 {
1178                                         msg_format(_("%^s¤¬%s¤Ë°Å¹õ¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes darkness at %s."), m_name, t_name);
1179                                 }
1180                         }
1181                         else
1182                         {
1183                                 mon_fight = TRUE;
1184                         }
1185
1186                         sound(SOUND_BREATH);
1187                 }
1188
1189                 dam = ((m_ptr->hp / 6) > 400 ? 400 : (m_ptr->hp / 6));
1190                 monst_breath_monst(m_idx, y, x, GF_DARK,
1191                                    dam,0, TRUE, MS_BR_DARK, learnable);
1192
1193                 break;
1194
1195         /* RF4_BR_CONF */
1196         case 96+16:
1197                 if (known)
1198                 {
1199                         if (see_either)
1200                         {
1201                                 disturb(1, 1);
1202
1203                                 if (blind)
1204                                 {
1205                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1206                                 }
1207                                 else
1208                                 {
1209                                         msg_format(_("%^s¤¬%s¤Ëº®Íð¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes confusion at %s."), m_name, t_name);
1210                                 }
1211                         }
1212                         else
1213                         {
1214                                 mon_fight = TRUE;
1215                         }
1216
1217                         sound(SOUND_BREATH);
1218                 }
1219
1220                 dam = ((m_ptr->hp / 6) > 450 ? 450 : (m_ptr->hp / 6));
1221                 monst_breath_monst(m_idx, y, x, GF_CONFUSION,
1222                                    dam,0, TRUE, MS_BR_CONF, learnable);
1223
1224                 break;
1225
1226         /* RF4_BR_SOUN */
1227         case 96+17:
1228                 if (known)
1229                 {
1230                         if (see_either)
1231                         {
1232                                 disturb(1, 1);
1233
1234                                 if (m_ptr->r_idx == MON_JAIAN)
1235                                 {
1236                                         msg_format(_("¡Ö¥Ü¥©¥¨¡Á¡Á¡Á¡Á¡Á¡Á¡×", "'Booooeeeeee'"));
1237                                 }
1238                                 else if (blind)
1239                                 {
1240                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1241                                 }
1242                                 else
1243                                 {
1244                                         msg_format(_("%^s¤¬%s¤Ë¹ì²»¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes sound at %s."), m_name, t_name);
1245                                 }
1246                         }
1247                         else
1248                         {
1249                                 mon_fight = TRUE;
1250                         }
1251
1252                         sound(SOUND_BREATH);
1253                 }
1254
1255                 dam = ((m_ptr->hp / 6) > 450 ? 450 : (m_ptr->hp / 6));
1256                 monst_breath_monst(m_idx, y, x, GF_SOUND,
1257                                    dam,0, TRUE, MS_BR_SOUND, learnable);
1258
1259                 break;
1260
1261         /* RF4_BR_CHAO */
1262         case 96+18:
1263                 if (known)
1264                 {
1265                         if (see_either)
1266                         {
1267                                 disturb(1, 1);
1268
1269                                 if (blind)
1270                                 {
1271                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1272                                 }
1273                                 else
1274                                 {
1275                                         msg_format(_("%^s¤¬%s¤Ë¥«¥ª¥¹¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes chaos at %s."), m_name, t_name);
1276                                 }
1277                         }
1278                         else
1279                         {
1280                                 mon_fight = TRUE;
1281                         }
1282
1283                         sound(SOUND_BREATH);
1284                 }
1285
1286                 dam = ((m_ptr->hp / 6) > 600 ? 600 : (m_ptr->hp / 6));
1287                 monst_breath_monst(m_idx, y, x, GF_CHAOS,
1288                                    dam,0, TRUE, MS_BR_CHAOS, learnable);
1289
1290                 break;
1291
1292         /* RF4_BR_DISE */
1293         case 96+19:
1294                 if (known)
1295                 {
1296                         if (see_either)
1297                         {
1298                                 disturb(1, 1);
1299
1300                                 if (blind)
1301                                 {
1302                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1303                                 }
1304                                 else
1305                                 {
1306                                         msg_format(_("%^s¤¬%s¤ËÎô²½¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes disenchantment at %s."), m_name, t_name);
1307                                 }
1308                         }
1309                         else
1310                         {
1311                                 mon_fight = TRUE;
1312                         }
1313
1314                         sound(SOUND_BREATH);
1315                 }
1316
1317                 dam = ((m_ptr->hp / 6) > 500 ? 500 : (m_ptr->hp / 6));
1318                 monst_breath_monst(m_idx, y, x, GF_DISENCHANT,
1319                                    dam,0, TRUE, MS_BR_DISEN, learnable);
1320
1321                 break;
1322
1323         /* RF4_BR_NEXU */
1324         case 96+20:
1325                 if (known)
1326                 {
1327                         if (see_either)
1328                         {
1329                                 disturb(1, 1);
1330
1331                                 if (blind)
1332                                 {
1333                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1334                                 }
1335                                 else
1336                                 {
1337                                         msg_format(_("%^s¤¬%s¤Ë°ø²Ìº®Íð¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes nexus at %s."), m_name, t_name);
1338                                 }
1339                         }
1340                         else
1341                         {
1342                                 mon_fight = TRUE;
1343                         }
1344
1345                         sound(SOUND_BREATH);
1346                 }
1347
1348                 dam = ((m_ptr->hp / 3) > 250 ? 250 : (m_ptr->hp / 3));
1349                 monst_breath_monst(m_idx, y, x, GF_NEXUS,
1350                                    dam,0, TRUE, MS_BR_NEXUS, learnable);
1351
1352                 break;
1353
1354         /* RF4_BR_TIME */
1355         case 96+21:
1356                 if (known)
1357                 {
1358                         if (see_either)
1359                         {
1360                                 disturb(1, 1);
1361
1362                                 if (blind)
1363                                 {
1364                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1365                                 }
1366                                 else
1367                                 {
1368                                         msg_format(_("%^s¤¬%s¤Ë»þ´ÖµÕž¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes time at %s."), m_name, t_name);
1369                                 }
1370                         }
1371                         else
1372                         {
1373                                 mon_fight = TRUE;
1374                         }
1375
1376                         sound(SOUND_BREATH);
1377                 }
1378
1379                 dam = ((m_ptr->hp / 3) > 150 ? 150 : (m_ptr->hp / 3));
1380                 monst_breath_monst(m_idx, y, x, GF_TIME,
1381                                    dam,0, TRUE, MS_BR_TIME, learnable);
1382
1383                 break;
1384
1385         /* RF4_BR_INER */
1386         case 96+22:
1387                 if (known)
1388                 {
1389                         if (see_either)
1390                         {
1391                                 disturb(1, 1);
1392
1393                                 if (blind)
1394                                 {
1395                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1396                                 }
1397                                 else
1398                                 {
1399                                         msg_format(_("%^s¤¬%s¤ËÃÙÆߤΥ֥쥹¤òÅǤ¤¤¿¡£", "%^s breathes inertia at %s."), m_name, t_name);
1400                                 }
1401                         }
1402                         else
1403                         {
1404                                 mon_fight = TRUE;
1405                         }
1406
1407                         sound(SOUND_BREATH);
1408                 }
1409
1410                 dam = ((m_ptr->hp / 6) > 200 ? 200 : (m_ptr->hp / 6));
1411                 monst_breath_monst(m_idx, y, x, GF_INERTIA,
1412                                    dam,0, TRUE, MS_BR_INERTIA, learnable);
1413
1414                 break;
1415
1416         /* RF4_BR_GRAV */
1417         case 96+23:
1418                 if (known)
1419                 {
1420                         if (see_either)
1421                         {
1422                                 disturb(1, 1);
1423
1424                                 if (blind)
1425                                 {
1426                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1427                                 }
1428                                 else
1429                                 {
1430                                         msg_format(_("%^s¤¬%s¤Ë½ÅÎϤΥ֥쥹¤òÅǤ¤¤¿¡£", "%^s breathes gravity at %s."), m_name, t_name);
1431                                 }
1432                         }
1433                         else
1434                         {
1435                                 mon_fight = TRUE;
1436                         }
1437
1438                         sound(SOUND_BREATH);
1439                 }
1440
1441                 dam = ((m_ptr->hp / 3) > 200 ? 200 : (m_ptr->hp / 3));
1442                 monst_breath_monst(m_idx, y, x, GF_GRAVITY,
1443                                    dam,0, TRUE, MS_BR_GRAVITY, learnable);
1444
1445                 break;
1446
1447         /* RF4_BR_SHAR */
1448         case 96+24:
1449                 if (known)
1450                 {
1451                         if (see_either)
1452                         {
1453                                 disturb(1, 1);
1454
1455                                 if (m_ptr->r_idx == MON_BOTEI)
1456                                 {
1457                                         msg_format(_("¡Ö¥ÜÄë¥Ó¥ë¥«¥Ã¥¿¡¼¡ª¡ª¡ª¡×", "'Boty-Build cutter!!!'"));
1458                                 }
1459                                 else if (blind)
1460                                 {
1461                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1462                                 }
1463                                 else
1464                                 {
1465                                         msg_format(_("%^s¤¬%s¤ËÇËÊҤΥ֥쥹¤òÅǤ¤¤¿¡£", "%^s breathes shards at %s."), m_name, t_name);
1466                                 }
1467                         }
1468                         else
1469                         {
1470                                 mon_fight = TRUE;
1471                         }
1472
1473                         sound(SOUND_BREATH);
1474                 }
1475
1476                 dam = ((m_ptr->hp / 6) > 500 ? 500 : (m_ptr->hp / 6));
1477                 monst_breath_monst(m_idx, y, x, GF_SHARDS,
1478                                    dam,0, TRUE, MS_BR_SHARDS, learnable);
1479
1480                 break;
1481
1482         /* RF4_BR_PLAS */
1483         case 96+25:
1484                 if (known)
1485                 {
1486                         if (see_either)
1487                         {
1488                                 disturb(1, 1);
1489
1490                                 if (blind)
1491                                 {
1492                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1493                                 }
1494                                 else
1495                                 {
1496                                         msg_format(_("%^s¤¬%s¤Ë¥×¥é¥º¥Þ¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes plasma at %s."), m_name, t_name);
1497                                 }
1498                         }
1499                         else
1500                         {
1501                                 mon_fight = TRUE;
1502                         }
1503
1504                         sound(SOUND_BREATH);
1505                 }
1506
1507                 dam = ((m_ptr->hp / 6) > 150 ? 150 : (m_ptr->hp / 6));
1508                 monst_breath_monst(m_idx, y, x, GF_PLASMA,
1509                                    dam,0, TRUE, MS_BR_PLASMA, learnable);
1510
1511                 break;
1512
1513         /* RF4_BR_WALL */
1514         case 96+26:
1515                 if (known)
1516                 {
1517                         if (see_either)
1518                         {
1519                                 disturb(1, 1);
1520
1521                                 if (blind)
1522                                 {
1523                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1524                                 }
1525                                 else
1526                                 {
1527                                         msg_format(_("%^s¤¬%s¤Ë¥Õ¥©¡¼¥¹¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes force at %s."), m_name, t_name);
1528                                 }
1529                         }
1530                         else
1531                         {
1532                                 mon_fight = TRUE;
1533                         }
1534
1535                         sound(SOUND_BREATH);
1536                 }
1537
1538                 dam = ((m_ptr->hp / 6) > 200 ? 200 : (m_ptr->hp / 6));
1539                 monst_breath_monst(m_idx, y, x, GF_FORCE,
1540                                    dam,0, TRUE, MS_BR_FORCE, learnable);
1541                 break;
1542
1543         /* RF4_BR_MANA */
1544         case 96+27:
1545                 if (known)
1546                 {
1547                         if (see_either)
1548                         {
1549                                 disturb(1, 1);
1550
1551                                 if (blind)
1552                                 {
1553                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1554                                 }
1555                                 else
1556                                 {
1557                                         msg_format(_("%^s¤¬%s¤ËËâÎϤΥ֥쥹¤òÅǤ¤¤¿¡£", "%^s breathes mana at %s."), m_name, t_name);
1558                                 }
1559                         }
1560                         else
1561                         {
1562                                 mon_fight = TRUE;
1563                         }
1564
1565                         sound(SOUND_BREATH);
1566                 }
1567
1568                 dam = ((m_ptr->hp / 3) > 250 ? 250 : (m_ptr->hp / 3));
1569                 monst_breath_monst(m_idx, y, x, GF_MANA,
1570                                    dam,0, TRUE, MS_BR_MANA, learnable);
1571
1572                 break;
1573
1574         /* RF4_BA_NUKE */
1575         case 96+28:
1576                 if (known)
1577                 {
1578                         if (see_either)
1579                         {
1580                                 disturb(1, 1);
1581
1582                                 if (blind)
1583                                 {
1584                                         msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
1585                                 }
1586                                 else
1587                                 {
1588                                         msg_format(_("%^s¤¬%s¤ËÊü¼Íǽµå¤òÊü¤Ã¤¿¡£", "%^s casts a ball of radiation at %s."), m_name, t_name);
1589                                 }
1590                         }
1591                         else
1592                         {
1593                                 mon_fight = TRUE;
1594                         }
1595                 }
1596
1597                 dam = (rlev + damroll(10, 6));
1598                 monst_breath_monst(m_idx, y, x, GF_NUKE,
1599                                    dam, 2, FALSE, MS_BALL_NUKE, learnable);
1600
1601                 break;
1602
1603         /* RF4_BR_NUKE */
1604         case 96+29:
1605                 if (known)
1606                 {
1607                         if (see_either)
1608                         {
1609                                 disturb(1, 1);
1610
1611                                 if (blind)
1612                                 {
1613                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1614                                 }
1615                                 else
1616                                 {
1617                                         msg_format(_("%^s¤¬%s¤ËÊü¼ÍÀ­ÇÑ´þʪ¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes toxic waste at %s."), m_name, t_name);
1618                                 }
1619                         }
1620                         else
1621                         {
1622                                 mon_fight = TRUE;
1623                         }
1624
1625                         sound(SOUND_BREATH);
1626                 }
1627
1628                 dam = ((m_ptr->hp / 3) > 800 ? 800 : (m_ptr->hp / 3));
1629                 monst_breath_monst(m_idx, y, x, GF_NUKE,
1630                                    dam,0, TRUE, MS_BR_NUKE, learnable);
1631                 break;
1632
1633         /* RF4_BA_CHAO */
1634         case 96+30:
1635                 if (known)
1636                 {
1637                         if (see_either)
1638                         {
1639                                 disturb(1, 1);
1640
1641                                 if (blind)
1642                                 {
1643                                         msg_format(_("%^s¤¬¶²¤í¤·¤²¤Ë¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles frighteningly."), m_name);
1644                                 }
1645                                 else
1646                                 {
1647                                         msg_format(_("%^s¤¬%s¤Ë½ã¥í¥°¥ë¥¹¤òÊü¤Ã¤¿¡£", "%^s invokes raw Logrus upon %s."), m_name, t_name);
1648                                 }
1649                         }
1650                         else
1651                         {
1652                                 mon_fight = TRUE;
1653                         }
1654                 }
1655
1656                 dam = (rlev * 2) + damroll(10, 10);
1657                 monst_breath_monst(m_idx, y, x, GF_CHAOS,
1658                                    dam, 4, FALSE, MS_BALL_CHAOS, learnable);
1659
1660                 break;
1661
1662         /* RF4_BR_DISI */
1663         case 96+31:
1664                 if (known)
1665                 {
1666                         if (see_either)
1667                         {
1668                                 disturb(1, 1);
1669
1670                                 if (blind)
1671                                 {
1672                                         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
1673                                 }
1674                                 else
1675                                 {
1676                                         msg_format(_("%^s¤¬%s¤Ëʬ²ò¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes disintegration at %s."), m_name, t_name);
1677                                 }
1678                         }
1679                         else
1680                         {
1681                                 mon_fight = TRUE;
1682                         }
1683
1684                         sound(SOUND_BREATH);
1685                 }
1686
1687                 dam = ((m_ptr->hp / 6) > 150 ? 150 : (m_ptr->hp / 6));
1688                 monst_breath_monst(m_idx, y, x, GF_DISINTEGRATE,
1689                                    dam,0, TRUE, MS_BR_DISI, learnable);
1690                 break;
1691
1692         /* RF5_BA_ACID */
1693         case 128+0:
1694                 if (known)
1695                 {
1696                         if (see_either)
1697                         {
1698                                 disturb(1, 1);
1699
1700                                 if (blind)
1701                                 {
1702                                         msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
1703                                 }
1704                                 else
1705                                 {
1706                                         msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥¢¥·¥Ã¥É¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", 
1707                                                          "%^s casts an acid ball at %s."), m_name, t_name);
1708                                 }
1709                         }
1710                         else
1711                         {
1712                                 mon_fight = TRUE;
1713                         }
1714                 }
1715
1716                 if (r_ptr->flags2 & RF2_POWERFUL)
1717                 {
1718                         rad = 4;
1719                         dam = (rlev * 4) + 50 + damroll(10, 10);
1720                 }
1721                 else
1722                 {
1723                         rad = 2;
1724                         dam = (randint1(rlev * 3) + 15);
1725                 }
1726                 monst_breath_monst(m_idx, y, x, GF_ACID, dam, rad, FALSE, MS_BALL_ACID, learnable);
1727                 break;
1728
1729         /* RF5_BA_ELEC */
1730         case 128+1:
1731                 if (known)
1732                 {
1733                         if (see_either)
1734                         {
1735                                 disturb(1, 1);
1736
1737                                 if (blind)
1738                                 {
1739                                         msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
1740                                 }
1741                                 else
1742                                 {
1743                                         msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥µ¥ó¥À¡¼¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a lightning ball at %s."), m_name, t_name);
1744                                 }
1745                         }
1746                         else
1747                         {
1748                                 mon_fight = TRUE;
1749                         }
1750                 }
1751
1752                 if (r_ptr->flags2 & RF2_POWERFUL)
1753                 {
1754                         rad = 4;
1755                         dam = (rlev * 4) + 50 + damroll(10, 10);
1756                 }
1757                 else
1758                 {
1759                         rad = 2;
1760                         dam = (randint1(rlev * 3 / 2) + 8);
1761                 }
1762                 monst_breath_monst(m_idx, y, x, GF_ELEC, dam, rad, FALSE, MS_BALL_ELEC, learnable);
1763                 break;
1764
1765         /* RF5_BA_FIRE */
1766         case 128+2:
1767                 if (known)
1768                 {
1769                         if (see_either)
1770                         {
1771                                 disturb(1, 1);
1772
1773                                 if (m_ptr->r_idx == MON_ROLENTO)
1774                                 {
1775                                         if (blind)
1776                                                 msg_format(_("%^s¤¬²¿¤«¤òÅꤲ¤¿¡£", "%^s throws something."), m_name);
1777                                         else
1778                                                 msg_format(_("%^s¤¬%^s¤Ë¸þ¤«¤Ã¤Æ¼êÜØÃƤòÅꤲ¤¿¡£", "%^s throws a hand grenade."), m_name, t_name);
1779                                 }
1780                                 else
1781                                 {
1782                                         if (blind)
1783                                         {
1784                                                 msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
1785                                         }
1786                                         else
1787                                         {
1788                                                 msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£",
1789                                                                  "%^s casts a fire ball at %s."), m_name, t_name);
1790                                         }
1791                                 }
1792                         }
1793                         else
1794                         {
1795                                 mon_fight = TRUE;
1796                         }
1797                 }
1798
1799                 if (r_ptr->flags2 & RF2_POWERFUL)
1800                 {
1801                         rad = 4;
1802                         dam = (rlev * 4) + 50 + damroll(10, 10);
1803                 }
1804                 else
1805                 {
1806                         rad = 2;
1807                         dam = (randint1(rlev * 7 / 2) + 10);
1808                 }
1809                 monst_breath_monst(m_idx, y, x, GF_FIRE, dam, rad, FALSE, MS_BALL_FIRE, learnable);
1810                 break;
1811
1812         /* RF5_BA_COLD */
1813         case 128+3:
1814                 if (known)
1815                 {
1816                         if (see_either)
1817                         {
1818                                 disturb(1, 1);
1819
1820                                 if (blind)
1821                                 {
1822                                         msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
1823                                 }
1824                                 else
1825                                 {
1826                                         msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥¢¥¤¥¹¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", 
1827                                                          "%^s casts a frost ball at %s."), m_name, t_name);
1828                                 }
1829                         }
1830                         else
1831                         {
1832                                 mon_fight = TRUE;
1833                         }
1834                 }
1835
1836                 if (r_ptr->flags2 & RF2_POWERFUL)
1837                 {
1838                         rad = 4;
1839                         dam = (rlev * 4) + 50 + damroll(10, 10);
1840                 }
1841                 else
1842                 {
1843                         rad = 2;
1844                         dam = (randint1(rlev * 3 / 2) + 10);
1845                 }
1846                 monst_breath_monst(m_idx, y, x, GF_COLD, dam, rad, FALSE, MS_BALL_COLD, learnable);
1847                 break;
1848
1849         /* RF5_BA_POIS */
1850         case 128+4:
1851                 if (known)
1852                 {
1853                         if (see_either)
1854                         {
1855                                 disturb(1, 1);
1856
1857                                 if (blind)
1858                                 {
1859                                         msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
1860                                 }
1861                                 else
1862                                 {
1863                                         msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ°­½­±À¤Î¼öʸ¤ò¾§¤¨¤¿¡£", 
1864                                                          "%^s casts a stinking cloud at %s."), m_name, t_name);
1865                                 }
1866                         }
1867                         else
1868                         {
1869                                 mon_fight = TRUE;
1870                         }
1871                 }
1872
1873                 dam = damroll(12, 2) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
1874                 monst_breath_monst(m_idx, y, x, GF_POIS, dam, 2, FALSE, MS_BALL_POIS, learnable);
1875
1876                 break;
1877
1878         /* RF5_BA_NETH */
1879         case 128+5:
1880                 if (known)
1881                 {
1882                         if (see_either)
1883                         {
1884                                 disturb(1, 1);
1885
1886                                 if (blind)
1887                                 {
1888                                         msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
1889                                 }
1890                                 else
1891                                 {
1892                                         msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤ÆÃϹöµå¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a nether ball at %s."), m_name, t_name);
1893                                 }
1894                         }
1895                         else
1896                         {
1897                                 mon_fight = TRUE;
1898                         }
1899                 }
1900
1901                 dam = 50 + damroll(10, 10) + (rlev * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1));
1902                 monst_breath_monst(m_idx, y, x, GF_NETHER, dam, 2, FALSE, MS_BALL_NETHER, learnable);
1903
1904                 break;
1905
1906         /* RF5_BA_WATE */
1907         case 128+6:
1908                 if (known)
1909                 {
1910                         if (see_either)
1911                         {
1912                                 disturb(1, 1);
1913
1914                                 if (blind)
1915                                 {
1916                                         msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
1917                                 }
1918                                 else
1919                                 {
1920                                         msg_format(_("%^s¤¬%s¤ËÂФ·¤Æή¤ì¤ë¤è¤¦¤Ê¿È¿¶¤ê¤ò¤·¤¿¡£", "%^s gestures fluidly at %s."), m_name, t_name);
1921
1922                                         msg_format(_("%^s¤Ï±²´¬¤Ë°û¤ß¹þ¤Þ¤ì¤¿¡£", "%^s is engulfed in a whirlpool."), t_name);
1923                                 }
1924                         }
1925                         else
1926                         {
1927                                 mon_fight = TRUE;
1928                         }
1929                 }
1930
1931                 dam = ((r_ptr->flags2 & RF2_POWERFUL) ? randint1(rlev * 3) : randint1(rlev * 2)) + 50;
1932                 monst_breath_monst(m_idx, y, x, GF_WATER, dam, 4, FALSE, MS_BALL_WATER, learnable);
1933
1934                 break;
1935
1936         /* RF5_BA_MANA */
1937         case 128+7:
1938                 if (known)
1939                 {
1940                         if (see_either)
1941                         {
1942                                 disturb(1, 1);
1943
1944                                 if (blind)
1945                                 {
1946                                         msg_format(_("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles powerfully."), m_name);
1947                                 }
1948                                 else
1949                                 {
1950                                         msg_format(_("%^s¤¬%s¤ËÂФ·¤ÆËâÎϤÎÍò¤Î¼öʸ¤òÇ°¤¸¤¿¡£", "%^s invokes a mana storm upon %s."), m_name, t_name);
1951                                 }
1952                         }
1953                         else
1954                         {
1955                                 mon_fight = TRUE;
1956                         }
1957                 }
1958
1959                 dam = (rlev * 4) + 50 + damroll(10, 10);
1960                 monst_breath_monst(m_idx, y, x, GF_MANA, dam, 4, FALSE, MS_BALL_MANA, learnable);
1961
1962                 break;
1963
1964         /* RF5_BA_DARK */
1965         case 128+8:
1966                 if (known)
1967                 {
1968                         if (see_either)
1969                         {
1970                                 disturb(1, 1);
1971
1972                                 if (blind)
1973                                 {
1974                                         msg_format(_("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles powerfully."), m_name);
1975                                 }
1976                                 else
1977                                 {
1978                                         msg_format(_("%^s¤¬%s¤ËÂФ·¤Æ°Å¹õ¤ÎÍò¤Î¼öʸ¤òÇ°¤¸¤¿¡£", "%^s invokes a darkness storm upon %s."), m_name, t_name);
1979                                 }
1980                         }
1981                         else
1982                         {
1983                                 mon_fight = TRUE;
1984                         }
1985                 }
1986
1987                 dam = (rlev * 4) + 50 + damroll(10, 10);
1988                 monst_breath_monst(m_idx, y, x, GF_DARK, dam, 4, FALSE, MS_BALL_DARK, learnable);
1989
1990                 break;
1991
1992         /* RF5_DRAIN_MANA */
1993         case 128+9:
1994                 if (see_m)
1995                 {
1996                         /* Basic message */
1997                         msg_format(_("%^s¤ÏÀº¿À¥¨¥Í¥ë¥®¡¼¤ò%s¤«¤éµÛ¤¤¤È¤Ã¤¿¡£", "%^s draws psychic energy from %s."), m_name, t_name);
1998                 }
1999
2000                 dam = ((randint1(rlev) / 2) + 1);
2001                 monst_breath_monst(m_idx, y, x, GF_DRAIN_MANA, dam, 0, FALSE, MS_DRAIN_MANA, learnable);
2002
2003                 break;
2004
2005         /* RF5_MIND_BLAST */
2006         case 128+10:
2007                 if (see_m)
2008                 {
2009                         msg_format(_("%^s¤Ï%s¤ò¤¸¤Ã¤Èâˤó¤À¡£", "%^s gazes intently at %s."), m_name, t_name);
2010                 }
2011
2012                 dam = damroll(7, 7);
2013                 monst_breath_monst(m_idx, y, x, GF_MIND_BLAST, dam, 0, FALSE, MS_MIND_BLAST, learnable);
2014
2015                 break;
2016
2017         /* RF5_BRAIN_SMASH */
2018         case 128+11:
2019                 if (see_m)
2020                 {
2021                         msg_format(_("%^s¤Ï%s¤ò¤¸¤Ã¤Èâˤó¤À¡£", "%^s gazes intently at %s."), m_name, t_name);
2022                 }
2023
2024                 dam = damroll(12, 12);
2025                 monst_breath_monst(m_idx, y, x, GF_BRAIN_SMASH, dam, 0, FALSE, MS_BRAIN_SMASH, learnable);
2026
2027                 break;
2028
2029         /* RF5_CAUSE_1 */
2030         case 128+12:
2031                 if (known)
2032                 {
2033                         if (see_m)
2034                         {
2035                                 msg_format(_("%^s¤Ï%s¤ò»Ø¤µ¤·¤Æ¼ö¤¤¤ò¤«¤±¤¿¡£", "%^s points at %s and curses."), m_name, t_name);
2036                         }
2037                         else
2038                         {
2039                                 mon_fight = TRUE;
2040                         }
2041                 }
2042
2043                 dam = damroll(3, 8);
2044                 monst_breath_monst(m_idx, y, x, GF_CAUSE_1, dam, 0, FALSE, MS_CAUSE_1, learnable);
2045
2046                 break;
2047
2048         /* RF5_CAUSE_2 */
2049         case 128+13:
2050                 if (known)
2051                 {
2052                         if (see_m)
2053                         {
2054                                 msg_format(_("%^s¤Ï%s¤ò»Ø¤µ¤·¤Æ¶²¤í¤·¤²¤Ë¼ö¤¤¤ò¤«¤±¤¿¡£", 
2055                                                  "%^s points at %s and curses horribly."), m_name, t_name);
2056                         }
2057                         else
2058                         {
2059                                 mon_fight = TRUE;
2060                         }
2061                 }
2062
2063                 dam = damroll(8, 8);
2064                 monst_breath_monst(m_idx, y, x, GF_CAUSE_2, dam, 0, FALSE, MS_CAUSE_2, learnable);
2065
2066                 break;
2067
2068         /* RF5_CAUSE_3 */
2069         case 128+14:
2070                 if (known)
2071                 {
2072                         if (see_m)
2073                         {
2074                                 msg_format(_("%^s¤Ï%s¤ò»Ø¤µ¤·¡¢¶²¤í¤·¤²¤Ë¼öʸ¤ò¾§¤¨¤¿¡ª", 
2075                                                  "%^s points at %s, incanting terribly!"), m_name, t_name);
2076                         }
2077                         else
2078                         {
2079                                 mon_fight = TRUE;
2080                         }
2081                 }
2082
2083                 dam = damroll(10, 15);
2084                 monst_breath_monst(m_idx, y, x, GF_CAUSE_3, dam, 0, FALSE, MS_CAUSE_3, learnable);
2085
2086                 break;
2087
2088         /* RF5_CAUSE_4 */
2089         case 128+15:
2090                 if (known)
2091                 {
2092                         if (see_m)
2093                         {
2094                                 msg_format(_("%^s¤¬%s¤ÎÈ빦¤òÆͤ¤¤Æ¡¢¡Ö¤ªÁ°¤Ï´û¤Ë»à¤ó¤Ç¤¤¤ë¡×¤È¶«¤ó¤À¡£", 
2095                                                  "%^s points at %s, screaming the word, 'DIE!'"), m_name, t_name);
2096                         }
2097                         else
2098                         {
2099                                 mon_fight = TRUE;
2100                         }
2101                 }
2102
2103                 dam = damroll(15, 15);
2104                 monst_breath_monst(m_idx, y, x, GF_CAUSE_4, dam, 0, FALSE, MS_CAUSE_4, learnable);
2105
2106                 break;
2107
2108         /* RF5_BO_ACID */
2109         case 128+16:
2110                 if (known)
2111                 {
2112                         if (see_either)
2113                         {
2114                                 msg_format(_("%s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥¢¥·¥Ã¥É¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts an acid bolt at %s."), m_name, t_name);
2115                         }
2116                         else
2117                         {
2118                                 mon_fight = TRUE;
2119                         }
2120                 }
2121
2122                 dam = (damroll(7, 8) + (rlev / 3)) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2123                 monst_bolt_monst(m_idx, y, x, GF_ACID,
2124                                  dam, MS_BOLT_ACID, learnable);
2125
2126                 break;
2127
2128         /* RF5_BO_ELEC */
2129         case 128+17:
2130                 if (known)
2131                 {
2132                         if (see_either)
2133                         {
2134                                 msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥µ¥ó¥À¡¼¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a lightning bolt at %s."), m_name, t_name);
2135                         }
2136                         else
2137                         {
2138                                 mon_fight = TRUE;
2139                         }
2140                 }
2141
2142                 dam = (damroll(4, 8) + (rlev / 3)) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2143                 monst_bolt_monst(m_idx, y, x, GF_ELEC,
2144                                  dam, MS_BOLT_ELEC, learnable);
2145
2146                 break;
2147
2148         /* RF5_BO_FIRE */
2149         case 128+18:
2150                 if (known)
2151                 {
2152                         if (see_either)
2153                         {
2154                                 msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a fire bolt at %s."), m_name, t_name);
2155                         }
2156                         else
2157                         {
2158                                 mon_fight = TRUE;
2159                         }
2160                 }
2161
2162                 dam = (damroll(9, 8) + (rlev / 3)) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2163                 monst_bolt_monst(m_idx, y, x, GF_FIRE,
2164                                  dam, MS_BOLT_FIRE, learnable);
2165
2166                 break;
2167
2168         /* RF5_BO_COLD */
2169         case 128+19:
2170                 if (known)
2171                 {
2172                         if (see_either)
2173                         {
2174                                 msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥¢¥¤¥¹¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a frost bolt at %s."), m_name, t_name);
2175                         }
2176                         else
2177                         {
2178                                 mon_fight = TRUE;
2179                         }
2180                 }
2181
2182                 dam = (damroll(6, 8) + (rlev / 3)) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
2183                 monst_bolt_monst(m_idx, y, x, GF_COLD,
2184                                  dam, MS_BOLT_COLD, learnable);
2185
2186                 break;
2187
2188         /* RF5_BA_LITE */
2189         case 128+20:
2190                 if (known)
2191                 {
2192                         if (see_either)
2193                         {
2194                                 disturb(1, 1);
2195
2196                                 if (blind)
2197                                 {
2198                                         msg_format(_("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles powerfully."), m_name);
2199                                 }
2200                                 else
2201                                 {
2202                                         msg_format(_("%^s¤¬%s¤ËÂФ·¤Æ¥¹¥¿¡¼¥Ð¡¼¥¹¥È¤Î¼öʸ¤òÇ°¤¸¤¿¡£", 
2203                                                          "%^s invokes a starburst upon %s."), m_name, t_name);
2204                                 }
2205                         }
2206                         else
2207                         {
2208                                 mon_fight = TRUE;
2209                         }
2210                 }
2211
2212                 dam = (rlev * 4) + 50 + damroll(10, 10);
2213                 monst_breath_monst(m_idx, y, x, GF_LITE, dam, 4, FALSE, MS_STARBURST, learnable);
2214
2215                 break;
2216
2217         /* RF5_BO_NETH */
2218         case 128+21:
2219                 if (known)
2220                 {
2221                         if (see_either)
2222                         {
2223                                 msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤ÆÃϹö¤ÎÌð¤Î¼öʸ¤ò¾§¤¨¤¿¡£",
2224                                                  "%^s casts a nether bolt at %s."), m_name, t_name);
2225                         }
2226                         else
2227                         {
2228                                 mon_fight = TRUE;
2229                         }
2230                 }
2231
2232                 dam = 30 + damroll(5, 5) + (rlev * 4) / ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 3);
2233                 monst_bolt_monst(m_idx, y, x, GF_NETHER,
2234                                  dam, MS_BOLT_NETHER, learnable);
2235
2236                 break;
2237
2238         /* RF5_BO_WATE */
2239         case 128+22:
2240                 if (known)
2241                 {
2242                         if (see_either)
2243                         {
2244                                 msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥¦¥©¡¼¥¿¡¼¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", 
2245                                                  "%^s casts a water bolt at %s."), m_name, t_name);
2246                         }
2247                         else
2248                         {
2249                                 mon_fight = TRUE;
2250                         }
2251                 }
2252
2253                 dam = damroll(10, 10) + (rlev * 3 / ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 3));
2254                 monst_bolt_monst(m_idx, y, x, GF_WATER,
2255                                  dam, MS_BOLT_WATER, learnable);
2256
2257                 break;
2258
2259         /* RF5_BO_MANA */
2260         case 128+23:
2261                 if (known)
2262                 {
2263                         if (see_either)
2264                         {
2265                                 msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤ÆËâÎϤÎÌð¤Î¼öʸ¤ò¾§¤¨¤¿¡£", 
2266                                                  "%^s casts a mana bolt at %s."), m_name, t_name);
2267                         }
2268                         else
2269                         {
2270                                 mon_fight = TRUE;
2271                         }
2272                 }
2273
2274                 dam = randint1(rlev * 7 / 2) + 50;
2275                 monst_bolt_monst(m_idx, y, x, GF_MANA,
2276                                  dam, MS_BOLT_MANA, learnable);
2277
2278                 break;
2279
2280         /* RF5_BO_PLAS */
2281         case 128+24:
2282                 if (known)
2283                 {
2284                         if (see_either)
2285                         {
2286                                 msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥×¥é¥º¥Þ¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", 
2287                                                  "%^s casts a plasma bolt at %s."), m_name, t_name);
2288                         }
2289                         else
2290                         {
2291                                 mon_fight = TRUE;
2292                         }
2293                 }
2294
2295                 dam = 10 + damroll(8, 7) + (rlev * 3 / ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 3));
2296                 monst_bolt_monst(m_idx, y, x, GF_PLASMA,
2297                                  dam, MS_BOLT_PLASMA, learnable);
2298
2299                 break;
2300
2301         /* RF5_BO_ICEE */
2302         case 128+25:
2303                 if (known)
2304                 {
2305                         if (see_either)
2306                         {
2307                                 msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¶Ë´¨¤ÎÌð¤Î¼öʸ¤ò¾§¤¨¤¿¡£",
2308                                                  "%^s casts an ice bolt at %s."), m_name, t_name);
2309                         }
2310                         else
2311                         {
2312                                 mon_fight = TRUE;
2313                         }
2314                 }
2315
2316                 dam = damroll(6, 6) + (rlev * 3 / ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 3));
2317                 monst_bolt_monst(m_idx, y, x, GF_ICE,
2318                                  dam, MS_BOLT_ICE, learnable);
2319
2320                 break;
2321
2322         /* RF5_MISSILE */
2323         case 128+26:
2324                 if (known)
2325                 {
2326                         if (see_either)
2327                         {
2328                                 msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥Þ¥¸¥Ã¥¯¡¦¥ß¥µ¥¤¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", 
2329                                                  "%^s casts a magic missile at %s."), m_name, t_name);
2330                         }
2331                         else
2332                         {
2333                                 mon_fight = TRUE;
2334                         }
2335                 }
2336
2337                 dam = damroll(2, 6) + (rlev / 3);
2338                 monst_bolt_monst(m_idx, y, x, GF_MISSILE,
2339                                  dam, MS_MAGIC_MISSILE, learnable);
2340
2341                 break;
2342
2343         /* RF5_SCARE */
2344         case 128+27:
2345                 if (known)
2346                 {
2347                         if (see_either)
2348                         {
2349                                 msg_format(_("%^s¤¬¶²¤í¤·¤²¤Ê¸¸³Ð¤òºî¤ê½Ð¤·¤¿¡£",
2350                                                  "%^s casts a fearful illusion in front of %s."), m_name, t_name);
2351                         }
2352                         else
2353                         {
2354                                 mon_fight = TRUE;
2355                         }
2356                 }
2357
2358                 if (tr_ptr->flags3 & RF3_NO_FEAR)
2359                 {
2360                         if (see_t) msg_format(_("%^s¤Ï¶²Éݤò´¶¤¸¤Ê¤¤¡£", 
2361                                                     "%^s refuses to be frightened."), t_name);
2362
2363                 }
2364                 else if (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
2365                 {
2366                         if (see_t) msg_format(_("%^s¤Ï¶²Éݤò´¶¤¸¤Ê¤¤¡£", 
2367                                                     "%^s refuses to be frightened."), t_name);
2368                 }
2369                 else
2370                 {
2371                         if (set_monster_monfear(t_idx, MON_MONFEAR(t_ptr) + randint0(4) + 4)) fear = TRUE;
2372                 }
2373
2374                 wake_up = TRUE;
2375
2376                 break;
2377
2378         /* RF5_BLIND */
2379         case 128+28:
2380                 if (known)
2381                 {
2382                         if (see_either)
2383                         {
2384                                 _(msg_format("%s¤Ï¼öʸ¤ò¾§¤¨¤Æ%s¤ÎÌܤò¾Æ¤­ÉÕ¤«¤»¤¿¡£", m_name, t_name),
2385                                   msg_format("%^s casts a spell, burning %s%s eyes.", m_name, t_name,
2386                                                  (streq(t_name, "it") ? "s" : "'s")));
2387
2388                         }
2389                         else
2390                         {
2391                                 mon_fight = TRUE;
2392                         }
2393                 }
2394
2395                 /* Simulate blindness with confusion */
2396                 if (tr_ptr->flags3 & RF3_NO_CONF)
2397                 {
2398                         if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."), t_name);
2399                 }
2400                 else if (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
2401                 {
2402                         if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."), t_name);
2403                 }
2404                 else
2405                 {
2406                         if (see_t) msg_format(_("%^s¤ÏÌܤ¬¸«¤¨¤Ê¤¯¤Ê¤Ã¤¿¡ª ", "%^s is blinded!"), t_name);
2407
2408                         (void)set_monster_confused(t_idx, MON_CONFUSED(t_ptr) + 12 + randint0(4));
2409                 }
2410
2411                 wake_up = TRUE;
2412
2413                 break;
2414
2415         /* RF5_CONF */
2416         case 128+29:
2417                 if (known)
2418                 {
2419                         if (see_either)
2420                         {
2421                                 msg_format(_("%^s¤¬%s¤ÎÁ°¤Ë¸¸ÏÇŪ¤Ê¸¸¤ò¤Ä¤¯¤ê½Ð¤·¤¿¡£",
2422                                                  "%^s casts a mesmerizing illusion in front of %s."), m_name, t_name);
2423                         }
2424                         else
2425                         {
2426                                 mon_fight = TRUE;
2427                         }
2428                 }
2429
2430                 if (tr_ptr->flags3 & RF3_NO_CONF)
2431                 {
2432                         if (see_t) msg_format(_("%^s¤ÏÏǤ蘆¤ì¤Ê¤«¤Ã¤¿¡£",
2433                                                     "%^s disbelieves the feeble spell."), t_name);
2434                 }
2435                 else if (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
2436                 {
2437                         if (see_t) msg_format(_("%^s¤ÏÏǤ蘆¤ì¤Ê¤«¤Ã¤¿¡£",
2438                                                     "%^s disbelieves the feeble spell."), t_name);
2439                 }
2440                 else
2441                 {
2442                         if (see_t) msg_format(_("%^s¤Ïº®Í𤷤¿¤è¤¦¤À¡£",
2443                                                     "%^s seems confused."), t_name);
2444
2445                         (void)set_monster_confused(t_idx, MON_CONFUSED(t_ptr) + 12 + randint0(4));
2446                 }
2447
2448                 wake_up = TRUE;
2449
2450                 break;
2451
2452         /* RF5_SLOW */
2453         case 128+30:
2454                 if (known)
2455                 {
2456                         if (see_either)
2457                         {
2458                                 _(msg_format("%s¤¬%s¤Î¶ÚÆù¤«¤éÎϤòµÛ¤¤¤È¤Ã¤¿¡£", m_name, t_name),
2459                                   msg_format("%^s drains power from %s%s muscles.", m_name, t_name,
2460                                            (streq(t_name, "it") ? "s" : "'s")));
2461                         }
2462                         else
2463                         {
2464                                 mon_fight = TRUE;
2465                         }
2466                 }
2467
2468                 if (tr_ptr->flags1 & RF1_UNIQUE)
2469                 {
2470                         if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£",
2471                                                     "%^s is unaffected."), t_name);
2472                 }
2473                 else if (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
2474                 {
2475                         if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£",
2476                                                     "%^s is unaffected."), t_name);
2477                 }
2478                 else
2479                 {
2480                         if (set_monster_slow(t_idx, MON_SLOW(t_ptr) + 50))
2481                         {
2482                                 if (see_t) msg_format(_("%s¤ÎÆ°¤­¤¬ÃÙ¤¯¤Ê¤Ã¤¿¡£",
2483                                                             "%^s starts moving slower."), t_name);
2484                         }
2485                 }
2486
2487                 wake_up = TRUE;
2488
2489                 break;
2490
2491         /* RF5_HOLD */
2492         case 128+31:
2493                 if (known)
2494                 {
2495                         if (see_either)
2496                         {
2497                                 msg_format(_("%^s¤Ï%s¤ò¤¸¤Ã¤È¸«¤Ä¤á¤¿¡£", "%^s stares intently at %s."), m_name, t_name);
2498                         }
2499                         else
2500                         {
2501                                 mon_fight = TRUE;
2502                         }
2503                 }
2504
2505                 if ((tr_ptr->flags1 & RF1_UNIQUE) ||
2506                     (tr_ptr->flags3 & RF3_NO_STUN))
2507                 {
2508                         if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."), t_name);
2509                 }
2510                 else if (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
2511                 {
2512                         if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."), t_name);
2513                 }
2514                 else
2515                 {
2516                         if (see_t) msg_format(_("%^s¤ÏËãá㤷¤¿¡ª", "%^s is paralyzed!"), t_name);
2517
2518                         (void)set_monster_stunned(t_idx, MON_STUNNED(t_ptr) + randint1(4) + 4);
2519                 }
2520
2521                 wake_up = TRUE;
2522
2523                 break;
2524
2525
2526         /* RF6_HASTE */
2527         case 160+0:
2528                 if (known)
2529                 {
2530                         if (see_m)
2531                         {
2532                                 msg_format(_("%^s¤¬¼«Ê¬¤ÎÂΤËÇ°¤òÁ÷¤Ã¤¿¡£", "%^s concentrates on %s body."), m_name);
2533                         }
2534                         else
2535                         {
2536                                 mon_fight = TRUE;
2537                         }
2538                 }
2539
2540                 /* Allow quick speed increases to base+10 */
2541                 if (set_monster_fast(m_idx, MON_FAST(m_ptr) + 100))
2542                 {
2543                         if (see_m) msg_format(_("%^s¤ÎÆ°¤­¤¬Â®¤¯¤Ê¤Ã¤¿¡£", "%^s starts moving faster."), m_name);
2544                 }
2545                 break;
2546
2547         /* RF6_HAND_DOOM */
2548         case 160+1:
2549                 if (known)
2550                 {
2551                         if (see_m)
2552                         {
2553                                 msg_format(_("%^s¤¬%s¤Ë<ÇËÌǤμê>¤òÊü¤Ã¤¿¡ª", "%^s invokes the Hand of Doom upon %s!"), m_name, t_name);
2554                         }
2555                         else
2556                         {
2557                                 mon_fight = TRUE;
2558                         }
2559                 }
2560
2561                 dam = 20; /* Dummy power */
2562                 monst_breath_monst(m_idx, y, x, GF_HAND_DOOM, dam, 0, FALSE, MS_HAND_DOOM, learnable);
2563
2564                 break;
2565
2566         /* RF6_HEAL */
2567         case 160+2:
2568                 if (known)
2569                 {
2570                         if (see_m)
2571                         {
2572                                 msg_format(_("%^s¤Ï¼«Ê¬¤Î½ý¤ËÇ°¤ò½¸Ã椷¤¿¡£", "%^s concentrates on %s wounds."), m_name);
2573                         }
2574                         else
2575                         {
2576                                 mon_fight = TRUE;
2577                         }
2578                 }
2579
2580                 /* Heal some */
2581                 m_ptr->hp += (rlev * 6);
2582
2583                 /* Fully healed */
2584                 if (m_ptr->hp >= m_ptr->maxhp)
2585                 {
2586                         /* Fully healed */
2587                         m_ptr->hp = m_ptr->maxhp;
2588
2589                         if (known)
2590                         {
2591                                 if (see_m)
2592                                 {
2593                                         msg_format(_("%^s¤Ï´°Á´¤Ë¼£¤Ã¤¿¡ª", "%^s looks completely healed!"), m_name);
2594                                 }
2595                                 else
2596                                 {
2597                                         mon_fight = TRUE;
2598                                 }
2599                         }
2600                 }
2601
2602                 /* Partially healed */
2603                 else if (known)
2604                 {
2605                         if (see_m)
2606                         {
2607                                 msg_format(_("%^s¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£", "%^s looks healthier."), m_name);
2608                         }
2609                         else
2610                         {
2611                                 mon_fight = TRUE;
2612                         }
2613                 }
2614
2615                 /* Redraw (later) if needed */
2616                 if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
2617                 if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
2618
2619                 /* Cancel fear */
2620                 if (MON_MONFEAR(m_ptr))
2621                 {
2622                         /* Cancel fear */
2623                         (void)set_monster_monfear(m_idx, 0);
2624
2625                         /* Message */
2626                         if (see_m) msg_format(_("%^s¤Ïͦµ¤¤ò¼è¤êÌᤷ¤¿¡£", "%^s recovers %s courage."), m_name);
2627                 }
2628
2629                 break;
2630
2631         /* RF6_INVULNER */
2632         case 160+3:
2633                 if (known)
2634                 {
2635                         if (see_m)
2636                         {
2637                                 disturb(1, 1);
2638                                 msg_format(_("%s¤Ï̵½ý¤Îµå¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a Globe of Invulnerability."), m_name);
2639                         }
2640                         else
2641                         {
2642                                 mon_fight = TRUE;
2643                         }
2644                 }
2645
2646                 if (!MON_INVULNER(m_ptr)) (void)set_monster_invulner(m_idx, randint1(4) + 4, FALSE);
2647                 break;
2648
2649         /* RF6_BLINK */
2650         case 160+4:
2651                 if (teleport_barrier(m_idx))
2652                 {
2653                         if (see_m)
2654                         {
2655                                 msg_format(_("ËâË¡¤Î¥Ð¥ê¥¢¤¬%^s¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¼ÙË⤷¤¿¡£", "Magic barrier obstructs teleporting of %^s."), m_name);
2656                         }
2657                 }
2658                 else
2659                 {
2660                         if (see_m)
2661                         {
2662                                 msg_format(_("%^s¤¬½Ö»þ¤Ë¾Ã¤¨¤¿¡£", "%^s blinks away."), m_name);
2663                         }
2664                         teleport_away(m_idx, 10, 0L);
2665                 }
2666                 break;
2667
2668         /* RF6_TPORT */
2669         case 160+5:
2670                 if (teleport_barrier(m_idx))
2671                 {
2672                         if (see_m)
2673                         {
2674                                 msg_format(_("ËâË¡¤Î¥Ð¥ê¥¢¤¬%^s¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¼ÙË⤷¤¿¡£", "Magic barrier obstructs teleporting of %^s."), m_name);
2675                         }
2676                 }
2677                 else
2678                 {
2679                         if (see_m)
2680                         {
2681                                 msg_format(_("%^s¤¬¥Æ¥ì¥Ý¡¼¥È¤·¤¿¡£", "%^s teleports away."), m_name);
2682                         }
2683                         teleport_away_followable(m_idx);
2684                 }
2685                 break;
2686
2687         /* RF6_WORLD */
2688         case 160+6:
2689 #if 0
2690                 int who = 0;
2691                 if(m_ptr->r_idx = MON_DIO) who == 1;
2692                 else if(m_ptr->r_idx = MON_WONG) who == 3;
2693                 dam = who;
2694                 if(!process_the_world(randint1(2)+2, who, player_has_los_bold(m_ptr->fy, m_ptr->fx))) return (FALSE);
2695 #endif
2696                 return FALSE;
2697
2698         /* RF6_SPECIAL */
2699         case 160+7:
2700                 switch (m_ptr->r_idx)
2701                 {
2702                 case MON_OHMU:
2703                         /* Moved to process_monster(), like multiplication */
2704                         return FALSE;
2705
2706                 case MON_ROLENTO:
2707                         if (known)
2708                         {
2709                                 if (see_either)
2710                                 {
2711                                         disturb(1, 1);
2712
2713                                         msg_format(_("%^s¤Ï¼êÜØÃƤò¤Ð¤é¤Þ¤¤¤¿¡£", "%^s throws some hand grenades."), m_name);
2714                                 }
2715                                 else
2716                                 {
2717                                         mon_fight = TRUE;
2718                                 }
2719                         }
2720
2721                         {
2722                                 int num = 1 + randint1(3);
2723                                 for (k = 0; k < num; k++)
2724                                 {
2725                                         count += summon_named_creature(m_idx, y, x, MON_SHURYUUDAN, 0);
2726                                 }
2727                         }
2728
2729                         if (known && !see_t && count)
2730                         {
2731                                 mon_fight = TRUE;
2732                         }
2733                         break;
2734
2735                 default:
2736                         if (r_ptr->d_char == 'B')
2737                         {
2738                                 if (one_in_(3))
2739                                 {
2740                                         if (see_m)
2741                                         {
2742                                                 msg_format(_("%^s¤ÏÆÍÁ³µÞ¾å¾º¤·¤Æ»ë³¦¤«¤é¾Ã¤¨¤¿!", "%^s suddenly go out of your sight!"), m_name);
2743                                         }
2744                                         teleport_away(m_idx, 10, TELEPORT_NONMAGICAL);
2745                                         p_ptr->update |= (PU_MONSTERS);
2746                                 }
2747                                 else
2748                                 {
2749                                         if (known)
2750                                         {
2751                                                 if (see_either)
2752                                                 {
2753                                                         msg_format(_("%^s¤¬%s¤òÄϤó¤Ç¶õÃ椫¤éÅꤲÍî¤È¤·¤¿¡£", "%^s holds %s, and drops from the sky."), m_name, t_name);
2754                                                 }
2755                                                 else
2756                                                 {
2757                                                         mon_fight = TRUE;
2758                                                 }
2759                                         }
2760
2761                                         dam = damroll(4, 8);
2762
2763                                         if (t_idx == p_ptr->riding) teleport_player_to(m_ptr->fy, m_ptr->fx, TELEPORT_NONMAGICAL | TELEPORT_PASSIVE);
2764                                         else teleport_monster_to(t_idx, m_ptr->fy, m_ptr->fx, 100, TELEPORT_NONMAGICAL | TELEPORT_PASSIVE);
2765
2766                                         sound(SOUND_FALL);
2767
2768                                         if (tr_ptr->flags7 & RF7_CAN_FLY)
2769                                         {
2770                                                 if (see_t) msg_format(_("%^s¤ÏÀŤ«¤ËÃåÃϤ·¤¿¡£", "%^s floats gently down to the ground."), t_name);
2771                                         }
2772                                         else
2773                                         {
2774                                                 if (see_t) msg_format(_("%^s¤ÏÃÏÌ̤Ë᤭¤Ä¤±¤é¤ì¤¿¡£", "%^s crashed into the ground."), t_name);
2775
2776                                                 dam += damroll(6, 8);
2777                                         }
2778
2779                                         if (p_ptr->riding == t_idx)
2780                                         {
2781                                                 int get_damage = 0;
2782
2783                                                 /* Mega hack -- this special action deals damage to the player. Therefore the code of "eyeeye" is necessary.
2784                                                    -- henkma
2785                                                  */
2786                                                 get_damage = take_hit(DAMAGE_NOESCAPE, dam, m_name, -1);
2787                                                 if (p_ptr->tim_eyeeye && get_damage > 0 && !p_ptr->is_dead)
2788                                                 {
2789                                                         char m_name_self[80];
2790
2791                                                         /* hisself */
2792                                                         monster_desc(m_name_self, m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE | MD_OBJECTIVE);
2793
2794                                                         _(msg_format("¹¶·â¤¬%s¼«¿È¤ò½ý¤Ä¤±¤¿¡ª", m_name),
2795                                                           msg_format("The attack of %s has wounded %s!", m_name, m_name_self));
2796
2797                                                         project(0, 0, m_ptr->fy, m_ptr->fx, get_damage, GF_MISSILE, PROJECT_KILL, -1);
2798                                                         set_tim_eyeeye(p_ptr->tim_eyeeye-5, TRUE);
2799                                                 }
2800                                         }
2801
2802                                         mon_take_hit_mon(t_idx, dam, &fear, extract_note_dies(real_r_ptr(t_ptr)), m_idx);
2803                                 }
2804                                 break;
2805                         }
2806
2807                         /* Something is wrong */
2808                         else return FALSE;
2809                 }
2810
2811                 /* done */
2812                 break;
2813
2814         /* RF6_TELE_TO */
2815         case 160+8:
2816                 if (known)
2817                 {
2818                         if (see_either)
2819                         {
2820                                 msg_format(_("%^s¤¬%s¤ò°ú¤­Ìᤷ¤¿¡£", "%^s commands %s to return."), m_name, t_name);
2821                         }
2822                         else
2823                         {
2824                                 mon_fight = TRUE;
2825                         }
2826                 }
2827
2828                 if (tr_ptr->flagsr & RFR_RES_TELE)
2829                 {
2830                         if ((tr_ptr->flags1 & RF1_UNIQUE) || (tr_ptr->flagsr & RFR_RES_ALL))
2831                         {
2832                                 if (is_original_ap_and_seen(t_ptr)) tr_ptr->r_flagsr |= RFR_RES_TELE;
2833                                 if (see_t)
2834                                 {
2835                                         msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected!"), t_name);
2836                                 }
2837
2838                                 resists_tele = TRUE;
2839                         }
2840                         else if (tr_ptr->level > randint1(100))
2841                         {
2842                                 if (is_original_ap_and_seen(t_ptr)) tr_ptr->r_flagsr |= RFR_RES_TELE;
2843                                 if (see_t)
2844                                 {
2845                                         msg_format(_("%^s¤ÏÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡ª", "%^s resists!"), t_name);
2846                                 }
2847
2848                                 resists_tele = TRUE;
2849                         }
2850                 }
2851
2852                 if (!resists_tele)
2853                 {
2854                         if (t_idx == p_ptr->riding) teleport_player_to(m_ptr->fy, m_ptr->fx, TELEPORT_PASSIVE);
2855                         else teleport_monster_to(t_idx, m_ptr->fy, m_ptr->fx, 100, TELEPORT_PASSIVE);
2856                 }
2857
2858                 wake_up = TRUE;
2859                 break;
2860
2861         /* RF6_TELE_AWAY */
2862         case 160+9:
2863                 if (known)
2864                 {
2865                         if (see_either)
2866                         {
2867                                 msg_format(_("%^s¤Ï%s¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤¿¡£", "%^s teleports %s away."), m_name, t_name);
2868                         }
2869                         else
2870                         {
2871                                 mon_fight = TRUE;
2872                         }
2873                 }
2874
2875                 if (tr_ptr->flagsr & RFR_RES_TELE)
2876                 {
2877                         if ((tr_ptr->flags1 & RF1_UNIQUE) || (tr_ptr->flagsr & RFR_RES_ALL))
2878                         {
2879                                 if (is_original_ap_and_seen(t_ptr)) tr_ptr->r_flagsr |= RFR_RES_TELE;
2880                                 if (see_t)
2881                                 {
2882                                         msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected!"), t_name);
2883                                 }
2884
2885                                 resists_tele = TRUE;
2886                         }
2887                         else if (tr_ptr->level > randint1(100))
2888                         {
2889                                 if (is_original_ap_and_seen(t_ptr)) tr_ptr->r_flagsr |= RFR_RES_TELE;
2890                                 if (see_t)
2891                                 {
2892                                         msg_format(_("%^s¤ÏÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡ª", "%^s resists!"), t_name);
2893                                 }
2894
2895                                 resists_tele = TRUE;
2896                         }
2897                 }
2898
2899                 if (!resists_tele)
2900                 {
2901                         if (t_idx == p_ptr->riding) teleport_player_away(m_idx, MAX_SIGHT * 2 + 5);
2902                         else teleport_away(t_idx, MAX_SIGHT * 2 + 5, TELEPORT_PASSIVE);
2903                 }
2904
2905                 wake_up = TRUE;
2906                 break;
2907
2908         /* RF6_TELE_LEVEL */
2909         case 160+10:
2910                 if (known)
2911                 {
2912                         if (see_either)
2913                         {
2914                                 msg_format(_("%^s¤¬%s¤Î­¤ò»Ø¤µ¤·¤¿¡£", "%^s gestures at %s's feet."), m_name, t_name);
2915                         }
2916                         else
2917                         {
2918                                 mon_fight = TRUE;
2919                         }
2920                 }
2921
2922                 if (tr_ptr->flagsr & (RFR_EFF_RES_NEXU_MASK | RFR_RES_TELE))
2923                 {
2924                         if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected!"), t_name);
2925                 }
2926                 else if ((tr_ptr->flags1 & RF1_QUESTOR) ||
2927                             (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10))
2928                 {
2929                         if (see_t) msg_format(_("%^s¤Ï¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª", "%^s resist the effects!"), t_name);
2930                 }
2931                 else teleport_level((t_idx == p_ptr->riding) ? 0 : t_idx);
2932
2933                 wake_up = TRUE;
2934                 break;
2935
2936         /* RF6_PSY_SPEAR */
2937         case 160+11:
2938                 if (known)
2939                 {
2940                         if (see_either)
2941                         {
2942                                 msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¸÷¤Î·õ¤òÊü¤Ã¤¿¡£", "%^s throw a Psycho-spear at %s."), m_name, t_name);
2943                         }
2944                         else
2945                         {
2946                                 mon_fight = TRUE;
2947                         }
2948                 }
2949
2950                 dam = (r_ptr->flags2 & RF2_POWERFUL) ? (randint1(rlev * 2) + 180) : (randint1(rlev * 3 / 2) + 120);
2951                 monst_beam_monst(m_idx, y, x, GF_PSY_SPEAR,
2952                                  dam, MS_PSY_SPEAR, learnable);
2953                 break;
2954
2955         /* RF6_DARKNESS */
2956         case 160+12:
2957                 if (known)
2958                 {
2959                         if (see_m)
2960                         {
2961                                 if (can_use_lite_area)
2962                                 {
2963                                         msg_format(_("%^s¤¬ÊÕ¤ê¤òÌÀ¤ë¤¯¾È¤é¤·¤¿¡£", "%^s cast a spell to light up."), m_name);
2964                                 }
2965                                 else
2966                                 {
2967                                         msg_format(_("%^s¤¬°Å°Ç¤ÎÃæ¤Ç¼ê¤ò¿¶¤Ã¤¿¡£", "%^s gestures in shadow."), m_name);
2968                                 }
2969
2970                                 if (see_t)
2971                                 {
2972                                         if (can_use_lite_area)
2973                                         {
2974                                                 msg_format(_("%^s¤ÏÇò¤¤¸÷¤ËÊñ¤Þ¤ì¤¿¡£", "%^s is surrounded by a white light."), t_name);
2975                                         }
2976                                         else
2977                                         {
2978                                                 msg_format(_("%^s¤Ï°Å°Ç¤ËÊñ¤Þ¤ì¤¿¡£", "%^s is surrounded by darkness."), t_name);
2979                                         }
2980                                 }
2981                         }
2982                         else
2983                         {
2984                                 mon_fight = TRUE;
2985                         }
2986                 }
2987
2988                 if (can_use_lite_area)
2989                 {
2990                         (void)project(m_idx, 3, y, x, 0, GF_LITE_WEAK, PROJECT_GRID | PROJECT_KILL, -1);
2991                         lite_room(y, x);
2992                 }
2993                 else
2994                 {
2995                         (void)project(m_idx, 3, y, x, 0, GF_DARK_WEAK, PROJECT_GRID | PROJECT_KILL, MS_DARKNESS);
2996                         unlite_room(y, x);
2997                 }
2998
2999                 break;
3000
3001         /* RF6_TRAPS */
3002         case 160+13:
3003 #if 0
3004                 if (known)
3005                 {
3006                         if (see_m)
3007                         {
3008                                 msg_format(_("%^s¤¬¼öʸ¤ò¾§¤¨¤Æ¼Ù°­¤ËÈù¾Ð¤ó¤À¡£", "%^s casts a spell and cackles evilly."), m_name);
3009                         }
3010                         else
3011                         {
3012                                 msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
3013                         }
3014                 }
3015
3016                 trap_creation(y, x);
3017
3018                 break;
3019 #else
3020                 /* Not implemented */
3021                 return FALSE;
3022 #endif
3023
3024         /* RF6_FORGET */
3025         case 160+14:
3026                 /* Not implemented */
3027                 return FALSE;
3028
3029         /* RF6_RAISE_DEAD */
3030         case 160+15:
3031                 if (known)
3032                 {
3033                         if (see_either)
3034                         {
3035                                 disturb(1, 1);
3036                                 if (blind)
3037                                 {
3038                                         msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
3039                                 }
3040                                 else
3041                                 {
3042                                         msg_format(_("%^s¤¬»à¼ÔÉü³è¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a spell to revive corpses."), m_name);
3043                                 }
3044                         }
3045                         else
3046                         {
3047                                 mon_fight = TRUE;
3048                         }
3049                 }
3050                 animate_dead(m_idx, m_ptr->fy, m_ptr->fx);
3051                 break;
3052
3053         /* RF6_S_KIN */
3054         case 160+16:
3055                 if (known)
3056                 {
3057                         if (see_either)
3058                         {
3059                                 disturb(1, 1);
3060
3061                                 if (m_ptr->r_idx == MON_SERPENT || m_ptr->r_idx == MON_ZOMBI_SERPENT)
3062                                 {
3063                                         msg_format(_("%^s¤¬¥À¥ó¥¸¥ç¥ó¤Î¼ç¤ò¾¤´­¤·¤¿¡£", "%^s magically summons guardians of dungeons."), m_name);
3064                                 }
3065                                 else
3066                                 {
3067                                         _(msg_format("%s¤¬ËâË¡¤Ç%s¤ò¾¤´­¤·¤¿¡£", m_name, ((r_ptr->flags1 & RF1_UNIQUE) ? "¼ê²¼" : "Ãç´Ö")),   
3068                                           msg_format("%^s magically summons %s %s.", m_name, m_poss, ((r_ptr->flags1 & RF1_UNIQUE) ? "minions" : "kin")));
3069                                 }
3070
3071                         }
3072                         else
3073                         {
3074                                 mon_fight = TRUE;
3075                         }
3076                 }
3077
3078                 switch (m_ptr->r_idx)
3079                 {
3080                 case MON_MENELDOR:
3081                 case MON_GWAIHIR:
3082                 case MON_THORONDOR:
3083                         {
3084                                 int num = 4 + randint1(3);
3085                                 for (k = 0; k < num; k++)
3086                                 {
3087                                         count += summon_specific(m_idx, y, x, rlev, SUMMON_EAGLES, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
3088                                 }
3089                         }
3090                         break;
3091
3092                 case MON_BULLGATES:
3093                         {
3094                                 int num = 2 + randint1(3);
3095                                 for (k = 0; k < num; k++)
3096                                 {
3097                                         count += summon_named_creature(m_idx, y, x, MON_IE, 0);
3098                                 }
3099                         }
3100                         break;
3101
3102                 case MON_SERPENT:
3103                 case MON_ZOMBI_SERPENT:
3104                         if (r_info[MON_JORMUNGAND].cur_num < r_info[MON_JORMUNGAND].max_num && one_in_(6))
3105                         {
3106                                 if (known && see_t)
3107                                 {
3108                                         msg_print(_("ÃÏÌ̤«¤é¿å¤¬¿á¤­½Ð¤·¤¿¡ª", "Water blew off from the ground!"));
3109                                 }
3110                                 project(t_idx, 8, y, x, 3, GF_WATER_FLOW, PROJECT_GRID | PROJECT_HIDE, -1);
3111                         }
3112
3113                         {
3114                                 int num = 2 + randint1(3);
3115                                 for (k = 0; k < num; k++)
3116                                 {
3117                                         count += summon_specific(m_idx, y, x, rlev, SUMMON_GUARDIANS, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
3118                                 }
3119                         }
3120                         break;
3121
3122                 case MON_CALDARM:
3123                         {
3124                                 int num = randint1(3);
3125                                 for (k = 0; k < num; k++)
3126                                 {
3127                                         count += summon_named_creature(m_idx, y, x, MON_LOCKE_CLONE, 0);
3128                                 }
3129                         }
3130                         break;
3131
3132                 case MON_LOUSY:
3133                         {
3134                                 int num = 2 + randint1(3);
3135                                 for (k = 0; k < num; k++)
3136                                 {
3137                                         count += summon_specific(m_idx, y, x, rlev, SUMMON_LOUSE, (PM_ALLOW_GROUP));
3138                                 }
3139                         }
3140                         break;
3141
3142                 default:
3143                         summon_kin_type = r_ptr->d_char;
3144
3145                         for (k = 0; k < 4; k++)
3146                         {
3147                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_KIN, (PM_ALLOW_GROUP));
3148                         }
3149                         break;
3150                 }
3151
3152                 if (known && !see_t && count)
3153                 {
3154                         mon_fight = TRUE;
3155                 }
3156
3157                 break;
3158
3159         /* RF6_S_CYBER */
3160         case 160+17:
3161                 if (known)
3162                 {
3163                         if (see_either)
3164                         {
3165                                 disturb(1, 1);
3166
3167                                 msg_format(_("%^s¤¬¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons Cyberdemons!"), m_name);
3168                         }
3169                         else
3170                         {
3171                                 mon_fight = TRUE;
3172                         }
3173                 }
3174
3175                 if (is_friendly(m_ptr))
3176                 {
3177                         count += summon_specific(m_idx, y, x, rlev, SUMMON_CYBER, (PM_ALLOW_GROUP));
3178                 }
3179                 else
3180                 {
3181                         count += summon_cyber(m_idx, y, x);
3182                 }
3183
3184                 if (known && !see_t && count)
3185                 {
3186                         mon_fight = TRUE;
3187                 }
3188
3189                 break;
3190
3191         /* RF6_S_MONSTER */
3192         case 160+18:
3193                 if (known)
3194                 {
3195                         if (see_either)
3196                         {
3197                                 disturb(1, 1);
3198
3199                                 msg_format(_("%^s¤¬ËâË¡¤ÇÃç´Ö¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons help!"), m_name);
3200                         }
3201                         else
3202                         {
3203                                 mon_fight = TRUE;
3204                         }
3205                 }
3206
3207                 count += summon_specific(m_idx, y, x, rlev, 0, (u_mode));
3208
3209                 if (known && !see_t && count)
3210                 {
3211                         mon_fight = TRUE;
3212                 }
3213
3214                 break;
3215
3216         /* RF6_S_MONSTERS */
3217         case 160+19:
3218                 if (known)
3219                 {
3220                         if (see_either)
3221                         {
3222                                 disturb(1, 1);
3223
3224                                 msg_format(_("%^s¤¬ËâË¡¤Ç¥â¥ó¥¹¥¿¡¼¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons monsters!"), m_name);
3225                         }
3226                         else
3227                         {
3228                                 mon_fight = TRUE;
3229                         }
3230                 }
3231
3232                 for (k = 0; k < s_num_6; k++)
3233                 {
3234                         count += summon_specific(m_idx, y, x, rlev, 0, (PM_ALLOW_GROUP | u_mode));
3235                 }
3236
3237                 if (known && !see_t && count)
3238                 {
3239                         mon_fight = TRUE;
3240                 }
3241
3242                 break;
3243
3244         /* RF6_S_ANT */
3245         case 160+20:
3246                 if (known)
3247                 {
3248                         if (see_either)
3249                         {
3250                                 disturb(1, 1);
3251
3252                                 msg_format(_("%^s¤¬ËâË¡¤Ç¥¢¥ê¤ò¾¤´­¤·¤¿¡£", "%^s magically summons ants."), m_name);
3253                         }
3254                         else
3255                         {
3256                                 mon_fight = TRUE;
3257                         }
3258                 }
3259
3260                 for (k = 0; k < s_num_6; k++)
3261                 {
3262                         count += summon_specific(m_idx, y, x, rlev, SUMMON_ANT, (PM_ALLOW_GROUP));
3263                 }
3264
3265                 if (known && !see_t && count)
3266                 {
3267                         mon_fight = TRUE;
3268                 }
3269
3270                 break;
3271
3272         /* RF6_S_SPIDER */
3273         case 160+21:
3274                 if (known)
3275                 {
3276                         if (see_either)
3277                         {
3278                                 disturb(1, 1);
3279
3280                                 msg_format(_("%^s¤¬ËâË¡¤Ç¥¯¥â¤ò¾¤´­¤·¤¿¡£", "%^s magically summons spiders."), m_name);
3281                         }
3282                         else
3283                         {
3284                                 mon_fight = TRUE;
3285                         }
3286                 }
3287
3288                 for (k = 0; k < s_num_6; k++)
3289                 {
3290                         count += summon_specific(m_idx, y, x, rlev, SUMMON_SPIDER, (PM_ALLOW_GROUP));
3291                 }
3292
3293                 if (known && !see_t && count)
3294                 {
3295                         mon_fight = TRUE;
3296                 }
3297
3298                 break;
3299
3300         /* RF6_S_HOUND */
3301         case 160+22:
3302                 if (known)
3303                 {
3304                         if (see_either)
3305                         {
3306                                 disturb(1, 1);
3307
3308                                 msg_format(_("%^s¤¬ËâË¡¤Ç¥Ï¥¦¥ó¥É¤ò¾¤´­¤·¤¿¡£", "%^s magically summons hounds."), m_name);
3309                         }
3310                         else
3311                         {
3312                                 mon_fight = TRUE;
3313                         }
3314                 }
3315
3316                 for (k = 0; k < s_num_4; k++)
3317                 {
3318                         count += summon_specific(m_idx, y, x, rlev, SUMMON_HOUND, (PM_ALLOW_GROUP));
3319                 }
3320
3321                 if (known && !see_t && count)
3322                 {
3323                         mon_fight = TRUE;
3324                 }
3325
3326                 break;
3327
3328         /* RF6_S_HYDRA */
3329         case 160+23:
3330                 if (known)
3331                 {
3332                         if (see_either)
3333                         {
3334                                 disturb(1, 1);
3335
3336                                 msg_format(_("%^s¤¬ËâË¡¤Ç¥Ò¥É¥é¤ò¾¤´­¤·¤¿¡£", "%^s magically summons hydras."), m_name);
3337                         }
3338                         else
3339                         {
3340                                 mon_fight = TRUE;
3341                         }
3342                 }
3343
3344                 for (k = 0; k < s_num_4; k++)
3345                 {
3346                         count += summon_specific(m_idx, y, x, rlev, SUMMON_HYDRA, (PM_ALLOW_GROUP));
3347                 }
3348
3349                 if (known && !see_t && count)
3350                 {
3351                         mon_fight = TRUE;
3352                 }
3353
3354                 break;
3355
3356         /* RF6_S_ANGEL */
3357         case 160+24:
3358                 if (known)
3359                 {
3360                         if (see_either)
3361                         {
3362                                 disturb(1, 1);
3363
3364                                 msg_format(_("%^s¤¬ËâË¡¤ÇÅ·»È¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons an angel!"), m_name);
3365                         }
3366                         else
3367                         {
3368                                 mon_fight = TRUE;
3369                         }
3370                 }
3371
3372                 {
3373                         int num = 1;
3374
3375                         if ((r_ptr->flags1 & RF1_UNIQUE) && !easy_band)
3376                         {
3377                                 num += r_ptr->level/40;
3378                         }
3379
3380                         for (k = 0; k < num; k++)
3381                         {
3382                                 count += summon_specific(m_idx, y, x, rlev, SUMMON_ANGEL, (PM_ALLOW_GROUP));
3383                         }
3384                 }
3385
3386                 if (known && !see_t && count)
3387                 {
3388                         mon_fight = TRUE;
3389                 }
3390
3391                 break;
3392
3393         /* RF6_S_DEMON */
3394         case 160+25:
3395                 if (known)
3396                 {
3397                         if (see_either)
3398                         {
3399                                 disturb(1, 1);
3400
3401                                 msg_format(_("%^s¤¬ËâË¡¤Çº®Æ٤εÜÄ¤é¥Ç¡¼¥â¥ó¤ò¾¤´­¤·¤¿¡ª", 
3402                                                  "%^s magically summons a demon from the Courts of Chaos!"), m_name);
3403                         }
3404                         else
3405                         {
3406                                 mon_fight = TRUE;
3407                         }
3408                 }
3409
3410                 for (k = 0; k < 1; k++)
3411                 {
3412                         count += summon_specific(m_idx, y, x, rlev, SUMMON_DEMON, (PM_ALLOW_GROUP));
3413                 }
3414
3415                 if (known && !see_t && count)
3416                 {
3417                         mon_fight = TRUE;
3418                 }
3419
3420                 break;
3421
3422         /* RF6_S_UNDEAD */
3423         case 160+26:
3424                 if (known)
3425                 {
3426                         if (see_either)
3427                         {
3428                                 disturb(1, 1);
3429
3430                                 msg_format(_("%s¤¬ËâË¡¤Ç¥¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤·¤¿¡£", "%^s magically summons undead."), m_name);
3431                         }
3432                         else
3433                         {
3434                                 mon_fight = TRUE;
3435                         }
3436                 }
3437
3438                 for (k = 0; k < 1; k++)
3439                 {
3440                         count += summon_specific(m_idx, y, x, rlev, SUMMON_UNDEAD, (PM_ALLOW_GROUP));
3441                 }
3442
3443                 if (known && !see_t && count)
3444                 {
3445                         mon_fight = TRUE;
3446                 }
3447
3448                 break;
3449
3450         /* RF6_S_DRAGON */
3451         case 160+27:
3452                 if (known)
3453                 {
3454                         if (see_either)
3455                         {
3456                                 disturb(1, 1);
3457
3458                                 msg_format(_("%^s¤¬ËâË¡¤Ç¥É¥é¥´¥ó¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons a dragon!"), m_name);
3459                         }
3460                         else
3461                         {
3462                                 mon_fight = TRUE;
3463                         }
3464                 }
3465
3466                 for (k = 0; k < 1; k++)
3467                 {
3468                         count += summon_specific(m_idx, y, x, rlev, SUMMON_DRAGON, (PM_ALLOW_GROUP));
3469                 }
3470
3471                 if (known && !see_t && count)
3472                 {
3473                         mon_fight = TRUE;
3474                 }
3475
3476                 break;
3477
3478         /* RF6_S_HI_UNDEAD */
3479         case 160+28:
3480                 if (known)
3481                 {
3482                         if (see_either)
3483                         {
3484                                 disturb(1, 1);
3485
3486                                 msg_format(_("%s¤¬ËâË¡¤Ç¥¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤·¤¿¡£", "%^s magically summons undead."), m_name);
3487                         }
3488                         else
3489                         {
3490                                 mon_fight = TRUE;
3491                         }
3492                 }
3493
3494                 for (k = 0; k < s_num_6; k++)
3495                 {
3496                         count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_UNDEAD, (PM_ALLOW_GROUP | u_mode));
3497                 }
3498
3499                 if (known && !see_t && count)
3500                 {
3501                         mon_fight = TRUE;
3502                 }
3503
3504                 break;
3505
3506         /* RF6_S_HI_DRAGON */
3507         case 160+29:
3508                 if (known)
3509                 {
3510                         if (see_either)
3511                         {
3512                                 disturb(1, 1);
3513
3514                                 msg_format(_("%^s¤¬ËâË¡¤Ç¸ÅÂå¥É¥é¥´¥ó¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons ancient dragons!"), m_name);
3515                         }
3516                         else
3517                         {
3518                                 mon_fight = TRUE;
3519                         }
3520                 }
3521
3522                 for (k = 0; k < s_num_4; k++)
3523                 {
3524                         count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_DRAGON, (PM_ALLOW_GROUP | u_mode));
3525                 }
3526
3527                 if (known && !see_t && count)
3528                 {
3529                         mon_fight = TRUE;
3530                 }
3531
3532                 break;
3533
3534         /* RF6_S_AMBERITES */
3535         case 160+30:
3536                 if (known)
3537                 {
3538                         if (see_either)
3539                         {
3540                                 disturb(1, 1);
3541
3542                                 msg_format(_("%^s¤¬¥¢¥ó¥Ð¡¼¤Î²¦Â²¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons Lords of Amber!"), m_name);
3543                         }
3544                         else
3545                         {
3546                                 mon_fight = TRUE;
3547                         }
3548                 }
3549
3550                 for (k = 0; k < s_num_4; k++)
3551                 {
3552                         count += summon_specific(m_idx, y, x, rlev, SUMMON_AMBERITES, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
3553                 }
3554
3555                 if (known && !see_t && count)
3556                 {
3557                         mon_fight = TRUE;
3558                 }
3559
3560                 break;
3561
3562         /* RF6_S_UNIQUE */
3563         case 160+31:
3564                 if (known)
3565                 {
3566                         if (see_either)
3567                         {
3568                                 disturb(1, 1);
3569
3570                                 msg_format(_("%^s¤¬ËâË¡¤ÇÆÃÊ̤ʶ¯Å¨¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons special opponents!"), m_name);
3571                         }
3572                         else
3573                         {
3574                                 mon_fight = TRUE;
3575                         }
3576                 }
3577
3578                 for (k = 0; k < s_num_4; k++)
3579                 {
3580                         count += summon_specific(m_idx, y, x, rlev, SUMMON_UNIQUE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
3581                 }
3582
3583                 {
3584                         int non_unique_type = SUMMON_HI_UNDEAD;
3585
3586                         if ((m_ptr->sub_align & (SUB_ALIGN_GOOD | SUB_ALIGN_EVIL)) == (SUB_ALIGN_GOOD | SUB_ALIGN_EVIL))
3587                                 non_unique_type = 0;
3588                         else if (m_ptr->sub_align & SUB_ALIGN_GOOD)
3589                                 non_unique_type = SUMMON_ANGEL;
3590
3591                         for (k = count; k < s_num_4; k++)
3592                         {
3593                                 count += summon_specific(m_idx, y, x, rlev, non_unique_type, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
3594                         }
3595                 }
3596
3597                 if (known && !see_t && count)
3598                 {
3599                         mon_fight = TRUE;
3600                 }
3601
3602                 break;
3603         }
3604
3605         if (wake_up) (void)set_monster_csleep(t_idx, 0);
3606
3607         if (fear && see_t)
3608         {
3609                 msg_format(_("%^s¤Ï¶²Éݤ·¤Æƨ¤²½Ð¤·¤¿¡ª", "%^s flees in terror!"), t_name);
3610         }
3611
3612         if (m_ptr->ml && maneable && !world_monster && !p_ptr->blind && (p_ptr->pclass == CLASS_IMITATOR))
3613         {
3614                 if (thrown_spell != 167) /* Not RF6_SPECIAL */
3615                 {
3616                         if (p_ptr->mane_num == MAX_MANE)
3617                         {
3618                                 p_ptr->mane_num--;
3619                                 for (i = 0; i < p_ptr->mane_num - 1; i++)
3620                                 {
3621                                         p_ptr->mane_spell[i] = p_ptr->mane_spell[i+1];
3622                                         p_ptr->mane_dam[i] = p_ptr->mane_dam[i+1];
3623                                 }
3624                         }
3625                         p_ptr->mane_spell[p_ptr->mane_num] = thrown_spell - 96;
3626                         p_ptr->mane_dam[p_ptr->mane_num] = dam;
3627                         p_ptr->mane_num++;
3628                         new_mane = TRUE;
3629
3630                         p_ptr->redraw |= (PR_IMITATION);
3631                 }
3632         }
3633
3634         /* Remember what the monster did, if we saw it */
3635         if (can_remember)
3636         {
3637                 /* Inate spell */
3638                 if (thrown_spell < 32*4)
3639                 {
3640                         r_ptr->r_flags4 |= (1L << (thrown_spell - 32*3));
3641                         if (r_ptr->r_cast_spell < MAX_UCHAR) r_ptr->r_cast_spell++;
3642                 }
3643
3644                 /* Bolt or Ball */
3645                 else if (thrown_spell < 32*5)
3646                 {
3647                         r_ptr->r_flags5 |= (1L << (thrown_spell - 32*4));
3648                         if (r_ptr->r_cast_spell < MAX_UCHAR) r_ptr->r_cast_spell++;
3649                 }
3650
3651                 /* Special spell */
3652                 else if (thrown_spell < 32*6)
3653                 {
3654                         r_ptr->r_flags6 |= (1L << (thrown_spell - 32*5));
3655                         if (r_ptr->r_cast_spell < MAX_UCHAR) r_ptr->r_cast_spell++;
3656                 }
3657         }
3658
3659         /* Always take note of monsters that kill you */
3660         if (p_ptr->is_dead && (r_ptr->r_deaths < MAX_SHORT) && !p_ptr->inside_arena)
3661         {
3662                 r_ptr->r_deaths++; /* Ignore appearance difference */
3663         }
3664
3665         /* A spell was cast */
3666         return TRUE;
3667 }