OSDN Git Service

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