OSDN Git Service

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