OSDN Git Service

モンスターの暗黒光源を実装.
[hengband/hengband.git] / src / monster1.c
1 /* File: monster1.c */
2
3 /*
4  * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke
5  *
6  * This software may be copied and distributed for educational, research,
7  * and not for profit purposes provided that this copyright and statement
8  * are included in all such copies.  Other copyrights may also apply.
9  */
10
11 /* Purpose: describe monsters (using monster memory) */
12
13 #include "angband.h"
14
15
16 /*
17  * Pronoun arrays, by gender.
18  */
19 static cptr wd_he[3] =
20 #ifdef JP
21 { "¤½¤ì", "Èà", "Èà½÷" };
22 #else
23 { "it", "he", "she" };
24 #endif
25
26 static cptr wd_his[3] =
27 #ifdef JP
28 { "¤½¤ì¤Î", "Èà¤Î", "Èà½÷¤Î" };
29 #else
30 { "its", "his", "her" };
31 #endif
32
33
34
35 /*
36  * Pluralizer.  Args(count, singular, plural)
37  */
38 #define plural(c,s,p) \
39     (((c) == 1) ? (s) : (p))
40
41
42
43
44
45
46 /*
47  * Determine if the "armor" is known
48  * The higher the level, the fewer kills needed.
49  */
50 static bool know_armour(int r_idx)
51 {
52         monster_race *r_ptr = &r_info[r_idx];
53
54         s32b level = r_ptr->level;
55
56         s32b kills = r_ptr->r_tkills;
57
58         if (cheat_know) return (TRUE);
59
60         /* Normal monsters */
61         if (kills > 304 / (4 + level)) return (TRUE);
62
63         /* Skip non-uniques */
64         if (!(r_ptr->flags1 & RF1_UNIQUE)) return (FALSE);
65
66         /* Unique monsters */
67         if (kills > 304 / (38 + (5 * level) / 4)) return (TRUE);
68
69         /* Assume false */
70         return (FALSE);
71 }
72
73
74 /*
75  * Determine if the "damage" of the given attack is known
76  * the higher the level of the monster, the fewer the attacks you need,
77  * the more damage an attack does, the more attacks you need
78  */
79 static bool know_damage(int r_idx, int i)
80 {
81         monster_race *r_ptr = &r_info[r_idx];
82
83         s32b level = r_ptr->level;
84
85         s32b a = r_ptr->r_blows[i];
86
87         s32b d1 = r_ptr->blow[i].d_dice;
88         s32b d2 = r_ptr->blow[i].d_side;
89
90         s32b d = d1 * d2;
91
92         if (d >= ((4+level)*MAX_UCHAR)/80) d = ((4+level)*MAX_UCHAR-1)/80;
93
94         /* Normal monsters */
95         if ((4 + level) * a > 80 * d) return (TRUE);
96
97         /* Skip non-uniques */
98         if (!(r_ptr->flags1 & RF1_UNIQUE)) return (FALSE);
99
100         /* Unique monsters */
101         if ((4 + level) * (2 * a) > 80 * d) return (TRUE);
102
103         /* Assume false */
104         return (FALSE);
105 }
106
107
108 /*
109  * Prepare hook for c_roff(). It will be changed for spoiler generation in wizard1.c.
110  */
111 void (*hook_c_roff)(byte attr, cptr str) = c_roff;
112
113 static void hooked_roff(cptr str)
114 {
115         /* Spawn */
116         hook_c_roff(TERM_WHITE, str);
117 }
118
119
120 /*
121  * Hack -- display monster information using "hooked_roff()"
122  *
123  * Note that there is now a compiler option to only read the monster
124  * descriptions from the raw file when they are actually needed, which
125  * saves about 60K of memory at the cost of disk access during monster
126  * recall, which is optional to the user.
127  *
128  * This function should only be called with the cursor placed at the
129  * left edge of the screen, on a cleared line, in which the recall is
130  * to take place.  One extra blank line is left after the recall.
131  */
132 static void roff_aux(int r_idx, int mode)
133 {
134         monster_race    *r_ptr = &r_info[r_idx];
135
136         bool            old = FALSE;
137
138         int             m, n, r;
139
140         cptr            p, q;
141
142 #ifdef JP
143         char            jverb_buf[64];
144 #else
145         bool            sin = FALSE;
146 #endif
147         int             msex = 0;
148
149         int speed = (ironman_nightmare) ? r_ptr->speed + 5 : r_ptr->speed;
150
151         bool            breath = FALSE;
152         bool            magic = FALSE;
153
154         u32b            flags1;
155         u32b            flags2;
156         u32b            flags3;
157         u32b            flags4;
158         u32b            flags5;
159         u32b            flags6;
160         u32b            flags7;
161
162         byte drop_gold, drop_item;
163
164         int             vn = 0;
165         byte            color[96];
166         cptr            vp[96];
167
168         bool know_everything = FALSE;
169
170         /* Obtain a copy of the "known" number of drops */
171         drop_gold = r_ptr->r_drop_gold;
172         drop_item = r_ptr->r_drop_item;
173
174         /* Obtain a copy of the "known" flags */
175         flags1 = (r_ptr->flags1 & r_ptr->r_flags1);
176         flags2 = (r_ptr->flags2 & r_ptr->r_flags2);
177         flags3 = (r_ptr->flags3 & r_ptr->r_flags3);
178         flags4 = (r_ptr->flags4 & r_ptr->r_flags4);
179         flags5 = (r_ptr->flags5 & r_ptr->r_flags5);
180         flags6 = (r_ptr->flags6 & r_ptr->r_flags6);
181         flags7 = (r_ptr->flags7 & r_ptr->flags7);
182
183         /* cheat_know or research_mon() */
184         if (cheat_know || (mode & 0x01))
185                 know_everything = TRUE;
186
187         /* Cheat -- Know everything */
188         if (know_everything)
189         {
190                 /* Hack -- maximal drops */
191                 drop_gold = drop_item =
192                 (((r_ptr->flags1 & RF1_DROP_4D2) ? 8 : 0) +
193                  ((r_ptr->flags1 & RF1_DROP_3D2) ? 6 : 0) +
194                  ((r_ptr->flags1 & RF1_DROP_2D2) ? 4 : 0) +
195                  ((r_ptr->flags1 & RF1_DROP_1D2) ? 2 : 0) +
196                  ((r_ptr->flags1 & RF1_DROP_90)  ? 1 : 0) +
197                  ((r_ptr->flags1 & RF1_DROP_60)  ? 1 : 0));
198
199                 /* Hack -- but only "valid" drops */
200                 if (r_ptr->flags1 & RF1_ONLY_GOLD) drop_item = 0;
201                 if (r_ptr->flags1 & RF1_ONLY_ITEM) drop_gold = 0;
202
203                 /* Hack -- know all the flags */
204                 flags1 = r_ptr->flags1;
205                 flags2 = r_ptr->flags2;
206                 flags3 = r_ptr->flags3;
207                 flags4 = r_ptr->flags4;
208                 flags5 = r_ptr->flags5;
209                 flags6 = r_ptr->flags6;
210         }
211
212
213         /* Extract a gender (if applicable) */
214         if (r_ptr->flags1 & RF1_FEMALE) msex = 2;
215         else if (r_ptr->flags1 & RF1_MALE) msex = 1;
216
217         /* Assume some "obvious" flags */
218         if (r_ptr->flags1 & RF1_UNIQUE)  flags1 |= (RF1_UNIQUE);
219         if (r_ptr->flags1 & RF1_QUESTOR) flags1 |= (RF1_QUESTOR);
220         if (r_ptr->flags1 & RF1_MALE)    flags1 |= (RF1_MALE);
221         if (r_ptr->flags1 & RF1_FEMALE)  flags1 |= (RF1_FEMALE);
222
223         /* Assume some "creation" flags */
224         if (r_ptr->flags1 & RF1_FRIENDS) flags1 |= (RF1_FRIENDS);
225         if (r_ptr->flags1 & RF1_ESCORT)  flags1 |= (RF1_ESCORT);
226         if (r_ptr->flags1 & RF1_ESCORTS) flags1 |= (RF1_ESCORTS);
227
228         /* Killing a monster reveals some properties */
229         if (r_ptr->r_tkills || know_everything)
230         {
231                 /* Know "race" flags */
232                 if (r_ptr->flags3 & RF3_ORC)      flags3 |= (RF3_ORC);
233                 if (r_ptr->flags3 & RF3_TROLL)    flags3 |= (RF3_TROLL);
234                 if (r_ptr->flags3 & RF3_GIANT)    flags3 |= (RF3_GIANT);
235                 if (r_ptr->flags3 & RF3_DRAGON)   flags3 |= (RF3_DRAGON);
236                 if (r_ptr->flags3 & RF3_DEMON)    flags3 |= (RF3_DEMON);
237                 if (r_ptr->flags3 & RF3_UNDEAD)   flags3 |= (RF3_UNDEAD);
238                 if (r_ptr->flags3 & RF3_EVIL)     flags3 |= (RF3_EVIL);
239                 if (r_ptr->flags3 & RF3_GOOD)     flags3 |= (RF3_GOOD);
240                 if (r_ptr->flags3 & RF3_ANIMAL)   flags3 |= (RF3_ANIMAL);
241                 if (r_ptr->flags3 & RF3_AMBERITE) flags3 |= (RF3_AMBERITE);
242                 if (r_ptr->flags2 & RF2_HUMAN)    flags2 |= (RF2_HUMAN);
243
244                 /* Know 'quantum' flag */
245                 if (r_ptr->flags2 & RF2_QUANTUM)  flags2 |= (RF2_QUANTUM);
246
247                 /* Know "forced" flags */
248                 if (r_ptr->flags1 & RF1_FORCE_DEPTH) flags1 |= (RF1_FORCE_DEPTH);
249                 if (r_ptr->flags1 & RF1_FORCE_MAXHP) flags1 |= (RF1_FORCE_MAXHP);
250         }
251
252         /* For output_monster_spoiler() */
253         if (mode & 0x02)
254         {
255                 /* Nothing to do */
256         }
257         else
258
259         /* Treat uniques differently */
260         if (flags1 & RF1_UNIQUE)
261         {
262                 /* Hack -- Determine if the unique is "dead" */
263                 bool dead = (r_ptr->max_num == 0) ? TRUE : FALSE;
264
265                 /* We've been killed... */
266                 if (r_ptr->r_deaths)
267                 {
268                         /* Killed ancestors */
269 #ifdef JP
270                         hooked_roff(format("%^s¤Ï¤¢¤Ê¤¿¤ÎÀèÁĤò %d ¿ÍÁò¤Ã¤Æ¤¤¤ë",
271                                            wd_he[msex], r_ptr->r_deaths));
272 #else
273                         hooked_roff(format("%^s has slain %d of your ancestors",
274                                            wd_he[msex], r_ptr->r_deaths));
275 #endif
276
277
278                         /* But we've also killed it */
279                         if (dead)
280                         {
281 #ifdef JP
282                                 hooked_roff(format("¤¬¡¢¤¹¤Ç¤ËµØƤ¤Á¤Ï²Ì¤¿¤·¤Æ¤¤¤ë¡ª"));
283 #else
284                                 hooked_roff(format(", but you have avenged %s!  ",
285                                             plural(r_ptr->r_deaths, "him", "them")));
286 #endif
287
288                         }
289
290                         /* Unavenged (ever) */
291                         else
292                         {
293 #ifdef JP
294                                 hooked_roff(format("¤Î¤Ë¡¢¤Þ¤ÀµØƤ¤Á¤ò²Ì¤¿¤·¤Æ¤¤¤Ê¤¤¡£"));
295 #else
296                                 hooked_roff(format(", who %s unavenged.  ",
297                                             plural(r_ptr->r_deaths, "remains", "remain")));
298 #endif
299
300                         }
301
302                         /* Start a new line */
303                         hooked_roff("\n");
304                 }
305
306                 /* Dead unique who never hurt us */
307                 else if (dead)
308                 {
309 #ifdef JP
310                         hooked_roff("¤¢¤Ê¤¿¤Ï¤³¤ÎµØŨ¤ò¤¹¤Ç¤ËÁò¤êµî¤Ã¤Æ¤¤¤ë¡£");
311 #else
312                         hooked_roff("You have slain this foe.  ");
313 #endif
314
315                         /* Start a new line */
316                         hooked_roff("\n");
317                 }
318         }
319
320         /* Not unique, but killed us */
321         else if (r_ptr->r_deaths)
322         {
323                 /* Dead ancestors */
324 #ifdef JP
325                 hooked_roff(format("¤³¤Î¥â¥ó¥¹¥¿¡¼¤Ï¤¢¤Ê¤¿¤ÎÀèÁĤò %d ¿ÍÁò¤Ã¤Æ¤¤¤ë",
326                             r_ptr->r_deaths ));
327 #else
328                 hooked_roff(format("%d of your ancestors %s been killed by this creature, ",
329                             r_ptr->r_deaths, plural(r_ptr->r_deaths, "has", "have")));
330 #endif
331
332
333                 /* Some kills this life */
334                 if (r_ptr->r_pkills)
335                 {
336 #ifdef JP
337                         hooked_roff(format("¤¬¡¢¤¢¤Ê¤¿¤Ï¤³¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¯¤Ê¤¯¤È¤â %d ÂΤÏÅݤ·¤Æ¤¤¤ë¡£", r_ptr->r_pkills));
338 #else
339                         hooked_roff(format("and you have exterminated at least %d of the creatures.  ", r_ptr->r_pkills));
340 #endif
341
342                 }
343
344                 /* Some kills past lives */
345                 else if (r_ptr->r_tkills)
346                 {
347 #ifdef JP
348                         hooked_roff(format("¤¬¡¢%s¤Ï¤³¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¯¤Ê¤¯¤È¤â %d ÂΤÏÅݤ·¤Æ¤¤¤ë¡£",
349                                     "¤¢¤Ê¤¿¤ÎÀèÁÄ", r_ptr->r_tkills));
350 #else
351                         hooked_roff(format("and %s have exterminated at least %d of the creatures.  ",
352                                     "your ancestors", r_ptr->r_tkills));
353 #endif
354
355                 }
356
357                 /* No kills */
358                 else
359                 {
360 #ifdef JP
361                         hooked_roff(format("¤¬¡¢¤Þ¤À%s¤òÅݤ·¤¿¤³¤È¤Ï¤Ê¤¤¡£", wd_he[msex]));
362 #else
363                         hooked_roff(format("and %s is not ever known to have been defeated.  ", wd_he[msex]));
364 #endif
365
366                 }
367
368                 /* Start a new line */
369                 hooked_roff("\n");
370         }
371
372         /* Normal monsters */
373         else
374         {
375                 /* Killed some this life */
376                 if (r_ptr->r_pkills)
377                 {
378 #ifdef JP
379                         hooked_roff(format("¤¢¤Ê¤¿¤Ï¤³¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¯¤Ê¤¯¤È¤â %d ÂΤϻ¦¤·¤Æ¤¤¤ë¡£", r_ptr->r_pkills));
380 #else
381                         hooked_roff(format("You have killed at least %d of these creatures.  ", r_ptr->r_pkills));
382 #endif
383
384                 }
385
386                 /* Killed some last life */
387                 else if (r_ptr->r_tkills)
388                 {
389 #ifdef JP
390                         hooked_roff(format("¤¢¤Ê¤¿¤ÎÀèÁĤϤ³¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¯¤Ê¤¯¤È¤â %d ÂΤϻ¦¤·¤Æ¤¤¤ë¡£", r_ptr->r_tkills));
391 #else
392                         hooked_roff(format("Your ancestors have killed at least %d of these creatures.  ", r_ptr->r_tkills));
393 #endif
394
395                 }
396
397                 /* Killed none */
398                 else
399                 {
400 #ifdef JP
401                         hooked_roff("¤³¤Î¥â¥ó¥¹¥¿¡¼¤òÅݤ·¤¿¤³¤È¤Ï¤Ê¤¤¡£");
402 #else
403                         hooked_roff("No battles to the death are recalled.  ");
404 #endif
405                 }
406
407                 /* Start a new line */
408                 hooked_roff("\n");
409         }
410
411         /* Descriptions */
412         {
413                 char buf[2048];
414
415 #ifdef DELAY_LOAD_R_TEXT
416
417                 int fd;
418
419                 /* Build the filename */
420 #ifdef JP
421 path_build(buf, sizeof(buf), ANGBAND_DIR_DATA, "r_info_j.raw");
422 #else
423                 path_build(buf, sizeof(buf), ANGBAND_DIR_DATA, "r_info.raw");
424 #endif
425
426
427                 /* Open the "raw" file */
428                 fd = fd_open(buf, O_RDONLY);
429
430                 /* Use file */
431                 if (fd >= 0)
432                 {
433                         huge pos;
434
435                         /* Starting position */
436                         pos = r_ptr->text;
437
438                         /* Additional offsets */
439                         pos += r_head->head_size;
440                         pos += r_head->info_size;
441                         pos += r_head->name_size;
442
443                         /* Seek */
444                         (void)fd_seek(fd, pos);
445
446                         /* Read a chunk of data */
447                         (void)fd_read(fd, buf, 2048);
448
449                         /* Close it */
450                         (void)fd_close(fd);
451                 }
452
453 #else
454
455                 /* Simple method */
456                 strcpy(buf, r_text + r_ptr->text);
457
458 #endif
459
460                 if (buf[0])
461                 {
462                         /* Dump it */
463                         hooked_roff(buf);
464
465                         /* Start a new line */
466                         hooked_roff("\n");
467                 }
468         }
469
470         if (r_idx == MON_KAGE)
471         {
472                 /* All done */
473                 hooked_roff("\n");
474
475                 return;
476         }
477
478         /* Nothing yet */
479         old = FALSE;
480
481         /* Describe location */
482         if (r_ptr->level == 0)
483         {
484 #ifdef JP
485                 hooked_roff(format("%^s¤ÏÄ®¤Ë½»¤ß", wd_he[msex]));
486 #else
487                 hooked_roff(format("%^s lives in the town", wd_he[msex]));
488 #endif
489
490                 old = TRUE;
491         }
492         else if (r_ptr->r_tkills || know_everything)
493         {
494                 if (depth_in_feet)
495                 {
496 #ifdef JP
497                         hooked_roff(format("%^s¤ÏÄ̾ïÃϲ¼ %d ¥Õ¥£¡¼¥È¤Ç½Ð¸½¤·",
498 #else
499                         hooked_roff(format("%^s is normally found at depths of %d feet",
500 #endif
501
502                                     wd_he[msex], r_ptr->level * 50));
503                 }
504                 else
505                 {
506 #ifdef JP
507                         hooked_roff(format("%^s¤ÏÄ̾ïÃϲ¼ %d ³¬¤Ç½Ð¸½¤·",
508 #else
509                         hooked_roff(format("%^s is normally found on dungeon level %d",
510 #endif
511
512                                     wd_he[msex], r_ptr->level));
513                 }
514                 old = TRUE;
515         }
516
517
518         /* Describe movement */
519         if (r_idx == MON_CHAMELEON)
520         {
521 #ifdef JP
522                 hooked_roff("¡¢Â¾¤Î¥â¥ó¥¹¥¿¡¼¤Ë²½¤±¤ë¡£");
523 #else
524                 hooked_roff("and can take the shape of other monster.");
525 #endif
526                 return;
527         }
528         else
529         {
530                 /* Introduction */
531                 if (old)
532                 {
533 #ifdef JP
534                         hooked_roff("¡¢");
535 #else
536                         hooked_roff(", and ");
537 #endif
538
539                 }
540                 else
541                 {
542 #ifdef JP
543                         hooked_roff(format("%^s¤Ï", wd_he[msex]));
544 #else
545                         hooked_roff(format("%^s ", wd_he[msex]));
546 #endif
547
548                         old = TRUE;
549                 }
550 #ifndef JP
551                 hooked_roff("moves");
552 #endif
553
554                 /* Random-ness */
555                 if ((flags1 & RF1_RAND_50) || (flags1 & RF1_RAND_25))
556                 {
557                         /* Adverb */
558                         if ((flags1 & RF1_RAND_50) && (flags1 & RF1_RAND_25))
559                         {
560 #ifdef JP
561                                 hooked_roff("¤«¤Ê¤ê");
562 #else
563                                 hooked_roff(" extremely");
564 #endif
565
566                         }
567                         else if (flags1 & RF1_RAND_50)
568                         {
569 #ifdef JP
570                                 hooked_roff("´öʬ");
571 #else
572                                 hooked_roff(" somewhat");
573 #endif
574
575                         }
576                         else if (flags1 & RF1_RAND_25)
577                         {
578 #ifdef JP
579                                 hooked_roff("¾¯¡¹");
580 #else
581                                 hooked_roff(" a bit");
582 #endif
583
584                         }
585
586                         /* Adjective */
587 #ifdef JP
588                         hooked_roff("ÉÔµ¬Â§¤Ë");
589 #else
590                         hooked_roff(" erratically");
591 #endif
592
593
594                         /* Hack -- Occasional conjunction */
595 #ifdef JP
596                         if (speed != 110) hooked_roff("¡¢¤«¤Ä");
597 #else
598                         if (speed != 110) hooked_roff(", and");
599 #endif
600
601                 }
602
603                 /* Speed */
604                 if (speed > 110)
605                 {
606 #ifdef JP
607                         if (speed > 139) hook_c_roff(TERM_RED, "¿®¤¸Æñ¤¤¤Û¤É");
608                         else if (speed > 134) hook_c_roff(TERM_ORANGE, "ÌÔÎõ¤Ë");
609                         else if (speed > 129) hook_c_roff(TERM_ORANGE, "Èó¾ï¤Ë");
610                         else if (speed > 124) hook_c_roff(TERM_UMBER, "¤«¤Ê¤ê");
611                         else if (speed < 120) hook_c_roff(TERM_L_UMBER, "¤ä¤ä");
612                         hook_c_roff(TERM_L_RED, "ÁÇÁ᤯");
613 #else
614                         if (speed > 139) hook_c_roff(TERM_RED, " incredibly");
615                         else if (speed > 134) hook_c_roff(TERM_ORANGE, " extremely");
616                         else if (speed > 129) hook_c_roff(TERM_ORANGE, " very");
617                         else if (speed > 124) hook_c_roff(TERM_UMBER, " fairly");
618                         else if (speed < 120) hook_c_roff(TERM_L_UMBER, " somewhat");
619                         hook_c_roff(TERM_L_RED, " quickly");
620 #endif
621
622                 }
623                 else if (speed < 110)
624                 {
625 #ifdef JP
626                         if (speed < 90) hook_c_roff(TERM_L_GREEN, "¿®¤¸Æñ¤¤¤Û¤É");
627                         else if (speed < 95) hook_c_roff(TERM_BLUE, "Èó¾ï¤Ë");
628                         else if (speed < 100) hook_c_roff(TERM_BLUE, "¤«¤Ê¤ê");
629                         else if (speed > 104) hook_c_roff(TERM_GREEN, "¤ä¤ä");
630                         hook_c_roff(TERM_L_BLUE, "¤æ¤Ã¤¯¤ê¤È");
631 #else
632                         if (speed < 90) hook_c_roff(TERM_L_GREEN, " incredibly");
633                         else if (speed < 95) hook_c_roff(TERM_BLUE, " very");
634                         else if (speed < 100) hook_c_roff(TERM_BLUE, " fairly");
635                         else if (speed > 104) hook_c_roff(TERM_GREEN, " somewhat");
636                         hook_c_roff(TERM_L_BLUE, " slowly");
637 #endif
638
639                 }
640                 else
641                 {
642 #ifdef JP
643                         hooked_roff("ÉáÄ̤ή¤µ¤Ç");
644 #else
645                         hooked_roff(" at normal speed");
646 #endif
647
648                 }
649 #ifdef JP
650                 hooked_roff("Æ°¤¤¤Æ¤¤¤ë");
651 #endif
652         }
653
654         /* The code above includes "attack speed" */
655         if (flags1 & RF1_NEVER_MOVE)
656         {
657                 /* Introduce */
658                 if (old)
659                 {
660 #ifdef JP
661                         hooked_roff("¡¢¤·¤«¤·");
662 #else
663                         hooked_roff(", but ");
664 #endif
665
666                 }
667                 else
668                 {
669 #ifdef JP
670                         hooked_roff(format("%^s¤Ï", wd_he[msex]));
671 #else
672                         hooked_roff(format("%^s ", wd_he[msex]));
673 #endif
674
675                         old = TRUE;
676                 }
677
678                 /* Describe */
679 #ifdef JP
680                 hooked_roff("¿¯Æþ¼Ô¤òÄÉÀפ·¤Ê¤¤");
681 #else
682                 hooked_roff("does not deign to chase intruders");
683 #endif
684
685         }
686
687         /* End this sentence */
688         if (old)
689         {
690 #ifdef JP
691                 hooked_roff("¡£");
692 #else
693                 hooked_roff(".  ");
694 #endif
695
696                 old = FALSE;
697         }
698
699
700         /* Describe experience if known */
701         if (r_ptr->r_tkills || know_everything)
702         {
703                 /* Introduction */
704 #ifdef JP
705                 hooked_roff("¤³¤Î");
706 #else
707                 if (flags1 & RF1_UNIQUE)
708                 {
709                         hooked_roff("Killing this");
710                 }
711                 else
712                 {
713                         hooked_roff("A kill of this");
714                 }
715 #endif
716
717
718                 /* Describe the "quality" */
719 #ifdef JP
720 if (flags2 & RF2_ELDRITCH_HORROR) hook_c_roff(TERM_VIOLET, "¶¸µ¤¤òͶ¤¦");/*nuke me*/
721 #else
722                 if (flags2 & RF2_ELDRITCH_HORROR) hook_c_roff(TERM_VIOLET, " sanity-blasting");
723 #endif
724
725 #ifdef JP
726 if (flags3 & RF3_ANIMAL)          hook_c_roff(TERM_L_GREEN, "¼«Á³³¦¤Î");
727 #else
728                 if (flags3 & RF3_ANIMAL)          hook_c_roff(TERM_L_GREEN, " natural");
729 #endif
730
731 #ifdef JP
732 if (flags3 & RF3_EVIL)            hook_c_roff(TERM_L_DARK, "¼Ù°­¤Ê¤ë");
733 #else
734                 if (flags3 & RF3_EVIL)            hook_c_roff(TERM_L_DARK, " evil");
735 #endif
736
737 #ifdef JP
738 if (flags3 & RF3_GOOD)            hook_c_roff(TERM_YELLOW, "Á±ÎɤÊ");
739 #else
740                 if (flags3 & RF3_GOOD)            hook_c_roff(TERM_YELLOW, " good");
741 #endif
742
743 #ifdef JP
744 if (flags3 & RF3_UNDEAD)          hook_c_roff(TERM_VIOLET, "¥¢¥ó¥Ç¥Ã¥É¤Î");
745 #else
746                 if (flags3 & RF3_UNDEAD)          hook_c_roff(TERM_VIOLET, " undead");
747 #endif
748 #ifdef JP
749 if (flags3 & RF3_AMBERITE)        hook_c_roff(TERM_VIOLET, "¥¢¥ó¥Ð¡¼¤Î²¦Â²¤Î");
750 #else
751                 if (flags3 & RF3_AMBERITE)        hook_c_roff(TERM_VIOLET, " Amberite");
752 #endif
753
754
755         if ((flags3 & (RF3_DRAGON | RF3_DEMON | RF3_GIANT | RF3_TROLL | RF3_ORC)) || (flags2 & (RF2_QUANTUM | RF2_HUMAN)))
756         {
757         /* Describe the "race" */
758 #ifdef JP
759      if (flags3 & RF3_DRAGON)   hook_c_roff(TERM_ORANGE, "¥É¥é¥´¥ó");
760 #else
761                      if (flags3 & RF3_DRAGON)   hook_c_roff(TERM_ORANGE, " dragon");
762 #endif
763
764 #ifdef JP
765 if (flags3 & RF3_DEMON)    hook_c_roff(TERM_VIOLET, "¥Ç¡¼¥â¥ó");
766 #else
767                 if (flags3 & RF3_DEMON)    hook_c_roff(TERM_VIOLET, " demon");
768 #endif
769
770 #ifdef JP
771 if (flags3 & RF3_GIANT)    hook_c_roff(TERM_L_UMBER, "¥¸¥ã¥¤¥¢¥ó¥È");
772 #else
773                 if (flags3 & RF3_GIANT)    hook_c_roff(TERM_L_UMBER, " giant");
774 #endif
775
776 #ifdef JP
777 if (flags3 & RF3_TROLL)    hook_c_roff(TERM_BLUE, "¥È¥í¥ë");
778 #else
779                 if (flags3 & RF3_TROLL)    hook_c_roff(TERM_BLUE, " troll");
780 #endif
781
782 #ifdef JP
783 if (flags3 & RF3_ORC)      hook_c_roff(TERM_UMBER, "¥ª¡¼¥¯");
784 #else
785                 if (flags3 & RF3_ORC)      hook_c_roff(TERM_UMBER, " orc");
786 #endif
787
788 #ifdef JP
789 if (flags2 & RF2_HUMAN) hook_c_roff(TERM_L_WHITE, "¿Í´Ö");
790 #else
791                 if (flags2 & RF2_HUMAN) hook_c_roff(TERM_L_WHITE, " Human");
792 #endif
793
794 #ifdef JP
795 if (flags2 & RF2_QUANTUM)  hook_c_roff(TERM_VIOLET, "ÎÌ»ÒÀ¸Êª");
796 #else
797                 if (flags2 & RF2_QUANTUM)  hook_c_roff(TERM_VIOLET, " quantum creature");
798 #endif
799
800         }
801 #ifdef JP
802 else                            hooked_roff("¥â¥ó¥¹¥¿¡¼");
803 #else
804                 else                            hooked_roff(" creature");
805 #endif
806
807
808 #ifdef JP
809                 hooked_roff("¤òÅݤ¹¤³¤È¤Ï");
810 #endif
811                 /* Group some variables */
812                 {
813                         long i, j;
814
815 #ifdef JP
816                         i = p_ptr->lev;
817                         hooked_roff(format(" %lu ¥ì¥Ù¥ë¤Î¥­¥ã¥é¥¯¥¿¤Ë¤È¤Ã¤Æ", (long)i));
818
819                         i = (long)r_ptr->mexp * r_ptr->level / (p_ptr->max_plv+2);
820                         j = ((((long)r_ptr->mexp * r_ptr->level % (p_ptr->max_plv+2)) *
821                                (long)1000 / (p_ptr->max_plv+2) + 5) / 10);
822
823                         hooked_roff(format(" Ìó%ld.%02ld ¥Ý¥¤¥ó¥È¤Î·Ð¸³¤È¤Ê¤ë¡£",
824                                 (long)i, (long)j ));
825 #else
826                         /* calculate the integer exp part */
827                         i = (long)r_ptr->mexp * r_ptr->level / (p_ptr->max_plv+2);
828
829                         /* calculate the fractional exp part scaled by 100, */
830                         /* must use long arithmetic to avoid overflow  */
831                         j = ((((long)r_ptr->mexp * r_ptr->level % (p_ptr->max_plv+2)) *
832                                (long)1000 / (p_ptr->max_plv+2) + 5) / 10);
833
834                         /* Mention the experience */
835                         hooked_roff(format(" is worth about %ld.%02ld point%s",
836                                     (long)i, (long)j,
837                                     (((i == 1) && (j == 0)) ? "" : "s")));
838
839                         /* Take account of annoying English */
840                         p = "th";
841                         i = p_ptr->lev % 10;
842                         if ((p_ptr->lev / 10) == 1) /* nothing */;
843                         else if (i == 1) p = "st";
844                         else if (i == 2) p = "nd";
845                         else if (i == 3) p = "rd";
846
847                         /* Take account of "leading vowels" in numbers */
848                         q = "";
849                         i = p_ptr->lev;
850                         if ((i == 8) || (i == 11) || (i == 18)) q = "n";
851
852                         /* Mention the dependance on the player's level */
853                         hooked_roff(format(" for a%s %lu%s level character.  ",
854                                     q, (long)i, p));
855 #endif
856
857                 }
858         }
859
860         if ((flags2 & RF2_AURA_FIRE) && (flags2 & RF2_AURA_ELEC) && (flags3 & RF3_AURA_COLD))
861         {
862 #ifdef JP
863 hook_c_roff(TERM_VIOLET, format("%^s¤Ï±ê¤Èɹ¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
864 #else
865                 hook_c_roff(TERM_VIOLET, format("%^s is surrounded by flames and electricity.  ", wd_he[msex]));
866 #endif
867
868         }
869         else if ((flags2 & RF2_AURA_FIRE) && (flags2 & RF2_AURA_ELEC))
870         {
871 #ifdef JP
872 hook_c_roff(TERM_L_RED, format("%^s¤Ï±ê¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
873 #else
874                 hook_c_roff(TERM_L_RED, format("%^s is surrounded by flames and electricity.  ", wd_he[msex]));
875 #endif
876
877         }
878         else if ((flags2 & RF2_AURA_FIRE) && (flags3 & RF3_AURA_COLD))
879         {
880 #ifdef JP
881 hook_c_roff(TERM_BLUE, format("%^s¤Ï±ê¤Èɹ¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
882 #else
883                 hook_c_roff(TERM_BLUE, format("%^s is surrounded by flames and electricity.  ", wd_he[msex]));
884 #endif
885
886         }
887         else if ((flags3 & RF3_AURA_COLD) && (flags2 & RF2_AURA_ELEC))
888         {
889 #ifdef JP
890 hook_c_roff(TERM_L_GREEN, format("%^s¤Ïɹ¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
891 #else
892                 hook_c_roff(TERM_L_GREEN, format("%^s is surrounded by ice and electricity.  ", wd_he[msex]));
893 #endif
894
895         }
896         else if (flags2 & RF2_AURA_FIRE)
897         {
898 #ifdef JP
899 hook_c_roff(TERM_RED, format("%^s¤Ï±ê¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
900 #else
901                 hook_c_roff(TERM_RED, format("%^s is surrounded by flames.  ", wd_he[msex]));
902 #endif
903
904         }
905         else if (flags3 & RF3_AURA_COLD)
906         {
907 #ifdef JP
908 hook_c_roff(TERM_BLUE, format("%^s¤Ïɹ¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
909 #else
910                 hook_c_roff(TERM_BLUE, format("%^s is surrounded by ice.  ", wd_he[msex]));
911 #endif
912
913         }
914         else if (flags2 & RF2_AURA_ELEC)
915         {
916 #ifdef JP
917 hook_c_roff(TERM_L_BLUE, format("%^s¤Ï¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
918 #else
919                 hook_c_roff(TERM_L_BLUE, format("%^s is surrounded by electricity.  ", wd_he[msex]));
920 #endif
921
922         }
923
924         if (flags2 & RF2_REFLECTING)
925         {
926 #ifdef JP
927 hooked_roff(format("%^s¤ÏÌð¤Î¼öʸ¤òÄ·¤ÍÊÖ¤¹¡£", wd_he[msex]));
928 #else
929                 hooked_roff(format("%^s reflects bolt spells.  ", wd_he[msex]));
930 #endif
931
932         }
933
934         /* Describe escorts */
935         if ((flags1 & RF1_ESCORT) || (flags1 & RF1_ESCORTS))
936         {
937 #ifdef JP
938                 hooked_roff(format("%^s¤ÏÄ̾ï¸î±Ò¤òȼ¤Ã¤Æ¸½¤ì¤ë¡£",
939 #else
940                 hooked_roff(format("%^s usually appears with escorts.  ",
941 #endif
942
943                             wd_he[msex]));
944         }
945
946         /* Describe friends */
947         else if (flags1 & RF1_FRIENDS)
948         {
949 #ifdef JP
950                 hooked_roff(format("%^s¤ÏÄ̾クÃĤǸ½¤ì¤ë¡£",
951 #else
952                 hooked_roff(format("%^s usually appears in groups.  ",
953 #endif
954
955                             wd_he[msex]));
956         }
957
958
959         /* Collect inate attacks */
960         vn = 0;
961 #ifdef JP
962         if (flags4 & RF4_SHRIEK)  {vp[vn] = "ÈáÌĤǽõ¤±¤òµá¤á¤ë";color[vn++] = TERM_L_WHITE;}
963 #else
964         if (flags4 & RF4_SHRIEK)  {vp[vn] = "shriek for help";color[vn++] = TERM_L_WHITE;}
965 #endif
966
967 #ifdef JP
968         if (flags4 & RF4_ROCKET)  {vp[vn] = "¥í¥±¥Ã¥È¤òȯ¼Í¤¹¤ë";color[vn++] = TERM_UMBER;}
969 #else
970         if (flags4 & RF4_ROCKET)  {vp[vn] = "shoot a rocket";color[vn++] = TERM_UMBER;}
971 #endif
972
973 #ifdef JP
974         if (flags4 & RF4_SHOOT) {vp[vn] = "¼Í·â¤ò¤¹¤ë";color[vn++] = TERM_UMBER;}
975 #else
976         if (flags4 & RF4_SHOOT) {vp[vn] = "fire an arrow";color[vn++] = TERM_UMBER;}
977 #endif
978
979 #ifdef JP
980         if (flags6 & (RF6_SPECIAL)) {vp[vn] = "ÆÃÊ̤ʹÔÆ°¤ò¤¹¤ë";color[vn++] = TERM_VIOLET;}
981 #else
982         if (flags6 & (RF6_SPECIAL)) {vp[vn] = "do something";color[vn++] = TERM_VIOLET;}
983 #endif
984
985         /* Describe inate attacks */
986         if (vn)
987         {
988                 /* Intro */
989 #ifdef JP
990                 hooked_roff(format("%^s¤Ï", wd_he[msex]));
991 #else
992                 hooked_roff(format("%^s", wd_he[msex]));
993 #endif
994
995
996                 /* Scan */
997                 for (n = 0; n < vn; n++)
998                 {
999 #ifdef JP
1000                         if (n != vn - 1)
1001                         {
1002                                 jverb(vp[n], jverb_buf, JVERB_OR);
1003                                 hook_c_roff(color[n], jverb_buf);
1004                                 hook_c_roff(color[n], "¤ê");
1005                                 hooked_roff("¡¢");
1006                         }
1007                         else hook_c_roff(color[n], vp[n]);
1008 #else
1009                         /* Intro */
1010                         if (n == 0) hooked_roff(" may ");
1011                         else if (n < vn - 1) hooked_roff(", ");
1012                         else hooked_roff(" or ");
1013
1014                         /* Dump */
1015                         hook_c_roff(color[n], vp[n]);
1016 #endif
1017
1018                 }
1019
1020                 /* End */
1021 #ifdef JP
1022                 hooked_roff("¤³¤È¤¬¤¢¤ë¡£");
1023 #else
1024                 hooked_roff(".  ");
1025 #endif
1026
1027         }
1028
1029
1030         /* Collect breaths */
1031         vn = 0;
1032 #ifdef JP
1033         if (flags4 & (RF4_BR_ACID))             {vp[vn] = "»À";color[vn++] = TERM_GREEN;}
1034 #else
1035         if (flags4 & (RF4_BR_ACID))             {vp[vn] = "acid";color[vn++] = TERM_GREEN;}
1036 #endif
1037
1038 #ifdef JP
1039         if (flags4 & (RF4_BR_ELEC))             {vp[vn] = "°ðºÊ";color[vn++] = TERM_BLUE;}
1040 #else
1041         if (flags4 & (RF4_BR_ELEC))             {vp[vn] = "lightning";color[vn++] = TERM_BLUE;}
1042 #endif
1043
1044 #ifdef JP
1045         if (flags4 & (RF4_BR_FIRE))             {vp[vn] = "²Ð±ê";color[vn++] = TERM_RED;}
1046 #else
1047         if (flags4 & (RF4_BR_FIRE))             {vp[vn] = "fire";color[vn++] = TERM_RED;}
1048 #endif
1049
1050 #ifdef JP
1051         if (flags4 & (RF4_BR_COLD))             {vp[vn] = "Î䵤";color[vn++] = TERM_L_WHITE;}
1052 #else
1053         if (flags4 & (RF4_BR_COLD))             {vp[vn] = "frost";color[vn++] = TERM_L_WHITE;}
1054 #endif
1055
1056 #ifdef JP
1057         if (flags4 & (RF4_BR_POIS))             {vp[vn] = "ÆÇ";color[vn++] = TERM_L_GREEN;}
1058 #else
1059         if (flags4 & (RF4_BR_POIS))             {vp[vn] = "poison";color[vn++] = TERM_L_GREEN;}
1060 #endif
1061
1062 #ifdef JP
1063         if (flags4 & (RF4_BR_NETH))             {vp[vn] = "ÃϹö";color[vn++] = TERM_L_DARK;}
1064 #else
1065         if (flags4 & (RF4_BR_NETH))             {vp[vn] = "nether";color[vn++] = TERM_L_DARK;}
1066 #endif
1067
1068 #ifdef JP
1069         if (flags4 & (RF4_BR_LITE))             {vp[vn] = "Á®¸÷";color[vn++] = TERM_YELLOW;}
1070 #else
1071         if (flags4 & (RF4_BR_LITE))             {vp[vn] = "light";color[vn++] = TERM_YELLOW;}
1072 #endif
1073
1074 #ifdef JP
1075         if (flags4 & (RF4_BR_DARK))             {vp[vn] = "°Å¹õ";color[vn++] = TERM_L_DARK;}
1076 #else
1077         if (flags4 & (RF4_BR_DARK))             {vp[vn] = "darkness";color[vn++] = TERM_L_DARK;}
1078 #endif
1079
1080 #ifdef JP
1081         if (flags4 & (RF4_BR_CONF))             {vp[vn] = "º®Íð";color[vn++] = TERM_L_UMBER;}
1082 #else
1083         if (flags4 & (RF4_BR_CONF))             {vp[vn] = "confusion";color[vn++] = TERM_L_UMBER;}
1084 #endif
1085
1086 #ifdef JP
1087         if (flags4 & (RF4_BR_SOUN))             {vp[vn] = "¹ì²»";color[vn++] = TERM_ORANGE;}
1088 #else
1089         if (flags4 & (RF4_BR_SOUN))             {vp[vn] = "sound";color[vn++] = TERM_ORANGE;}
1090 #endif
1091
1092 #ifdef JP
1093         if (flags4 & (RF4_BR_CHAO))             {vp[vn] = "¥«¥ª¥¹";color[vn++] = TERM_VIOLET;}
1094 #else
1095         if (flags4 & (RF4_BR_CHAO))             {vp[vn] = "chaos";color[vn++] = TERM_VIOLET;}
1096 #endif
1097
1098 #ifdef JP
1099         if (flags4 & (RF4_BR_DISE))             {vp[vn] = "Îô²½";color[vn++] = TERM_VIOLET;}
1100 #else
1101         if (flags4 & (RF4_BR_DISE))             {vp[vn] = "disenchantment";color[vn++] = TERM_VIOLET;}
1102 #endif
1103
1104 #ifdef JP
1105         if (flags4 & (RF4_BR_NEXU))             {vp[vn] = "°ø²Ìº®Íð";color[vn++] = TERM_VIOLET;}
1106 #else
1107         if (flags4 & (RF4_BR_NEXU))             {vp[vn] = "nexus";color[vn++] = TERM_VIOLET;}
1108 #endif
1109
1110 #ifdef JP
1111         if (flags4 & (RF4_BR_TIME))             {vp[vn] = "»þ´ÖµÕž";color[vn++] = TERM_L_BLUE;}
1112 #else
1113         if (flags4 & (RF4_BR_TIME))             {vp[vn] = "time";color[vn++] = TERM_L_BLUE;}
1114 #endif
1115
1116 #ifdef JP
1117         if (flags4 & (RF4_BR_INER))             {vp[vn] = "ÃÙÆß";color[vn++] = TERM_SLATE;}
1118 #else
1119         if (flags4 & (RF4_BR_INER))             {vp[vn] = "inertia";color[vn++] = TERM_SLATE;}
1120 #endif
1121
1122 #ifdef JP
1123         if (flags4 & (RF4_BR_GRAV))             {vp[vn] = "½ÅÎÏ";color[vn++] = TERM_SLATE;}
1124 #else
1125         if (flags4 & (RF4_BR_GRAV))             {vp[vn] = "gravity";color[vn++] = TERM_SLATE;}
1126 #endif
1127
1128 #ifdef JP
1129         if (flags4 & (RF4_BR_SHAR))             {vp[vn] = "ÇËÊÒ";color[vn++] = TERM_L_UMBER;}
1130 #else
1131         if (flags4 & (RF4_BR_SHAR))             {vp[vn] = "shards";color[vn++] = TERM_L_UMBER;}
1132 #endif
1133
1134 #ifdef JP
1135         if (flags4 & (RF4_BR_PLAS))             {vp[vn] = "¥×¥é¥º¥Þ";color[vn++] = TERM_L_RED;}
1136 #else
1137         if (flags4 & (RF4_BR_PLAS))             {vp[vn] = "plasma";color[vn++] = TERM_L_RED;}
1138 #endif
1139
1140 #ifdef JP
1141         if (flags4 & (RF4_BR_WALL))             {vp[vn] = "¥Õ¥©¡¼¥¹";color[vn++] = TERM_UMBER;}
1142 #else
1143         if (flags4 & (RF4_BR_WALL))             {vp[vn] = "force";color[vn++] = TERM_UMBER;}
1144 #endif
1145
1146 #ifdef JP
1147         if (flags4 & (RF4_BR_MANA))             {vp[vn] = "ËâÎÏ";color[vn++] = TERM_L_BLUE;}
1148 #else
1149         if (flags4 & (RF4_BR_MANA))             {vp[vn] = "mana";color[vn++] = TERM_L_BLUE;}
1150 #endif
1151
1152 #ifdef JP
1153         if (flags4 & (RF4_BR_NUKE))             {vp[vn] = "Êü¼ÍÀ­ÇÑ´þʪ";color[vn++] = TERM_L_GREEN;}
1154 #else
1155         if (flags4 & (RF4_BR_NUKE))             {vp[vn] = "toxic waste";color[vn++] = TERM_L_GREEN;}
1156 #endif
1157
1158 #ifdef JP
1159         if (flags4 & (RF4_BR_DISI))             {vp[vn] = "ʬ²ò";color[vn++] = TERM_SLATE;}
1160 #else
1161         if (flags4 & (RF4_BR_DISI))             {vp[vn] = "disintegration";color[vn++] = TERM_SLATE;}
1162 #endif
1163
1164
1165         /* Describe breaths */
1166         if (vn)
1167         {
1168                 /* Note breath */
1169                 breath = TRUE;
1170
1171                 /* Intro */
1172 #ifdef JP
1173                 hooked_roff(format("%^s¤Ï", wd_he[msex]));
1174 #else
1175                 hooked_roff(format("%^s", wd_he[msex]));
1176 #endif
1177
1178
1179                 /* Scan */
1180                 for (n = 0; n < vn; n++)
1181                 {
1182                         /* Intro */
1183 #ifdef JP
1184                         if ( n != 0 ) hooked_roff("¤ä");
1185 #else
1186                         if (n == 0) hooked_roff(" may breathe ");
1187                         else if (n < vn-1) hooked_roff(", ");
1188                         else hooked_roff(" or ");
1189 #endif
1190
1191
1192                         /* Dump */
1193                         hook_c_roff(color[n], vp[n]);
1194                 }
1195 #ifdef JP
1196                 hooked_roff("¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤¬¤¢¤ë");
1197 #endif
1198         }
1199
1200
1201         /* Collect spells */
1202         vn = 0;
1203 #ifdef JP
1204 if (flags5 & (RF5_BA_ACID))         {vp[vn] = "¥¢¥·¥Ã¥É¡¦¥Ü¡¼¥ë";color[vn++] = TERM_GREEN;}
1205 #else
1206         if (flags5 & (RF5_BA_ACID))         {vp[vn] = "produce acid balls";color[vn++] = TERM_GREEN;}
1207 #endif
1208
1209 #ifdef JP
1210 if (flags5 & (RF5_BA_ELEC))         {vp[vn] = "¥µ¥ó¥À¡¼¡¦¥Ü¡¼¥ë";color[vn++] = TERM_BLUE;}
1211 #else
1212         if (flags5 & (RF5_BA_ELEC))         {vp[vn] = "produce lightning balls";color[vn++] = TERM_BLUE;}
1213 #endif
1214
1215 #ifdef JP
1216 if (flags5 & (RF5_BA_FIRE))         {vp[vn] = "¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë";color[vn++] = TERM_RED;}
1217 #else
1218         if (flags5 & (RF5_BA_FIRE))         {vp[vn] = "produce fire balls";color[vn++] = TERM_RED;}
1219 #endif
1220
1221 #ifdef JP
1222 if (flags5 & (RF5_BA_COLD))         {vp[vn] = "¥¢¥¤¥¹¡¦¥Ü¡¼¥ë";color[vn++] = TERM_L_WHITE;}
1223 #else
1224         if (flags5 & (RF5_BA_COLD))         {vp[vn] = "produce frost balls";color[vn++] = TERM_L_WHITE;}
1225 #endif
1226
1227 #ifdef JP
1228 if (flags5 & (RF5_BA_POIS))         {vp[vn] = "°­½­±À";color[vn++] = TERM_L_GREEN;}
1229 #else
1230         if (flags5 & (RF5_BA_POIS))         {vp[vn] = "produce poison balls";color[vn++] = TERM_L_GREEN;}
1231 #endif
1232
1233 #ifdef JP
1234 if (flags5 & (RF5_BA_NETH))         {vp[vn] = "ÃϹöµå";color[vn++] = TERM_L_DARK;}
1235 #else
1236         if (flags5 & (RF5_BA_NETH))         {vp[vn] = "produce nether balls";color[vn++] = TERM_L_DARK;}
1237 #endif
1238
1239 #ifdef JP
1240 if (flags5 & (RF5_BA_WATE))         {vp[vn] = "¥¦¥©¡¼¥¿¡¼¡¦¥Ü¡¼¥ë";color[vn++] = TERM_BLUE;}
1241 #else
1242         if (flags5 & (RF5_BA_WATE))         {vp[vn] = "produce water balls";color[vn++] = TERM_BLUE;}
1243 #endif
1244
1245 #ifdef JP
1246 if (flags4 & (RF4_BA_NUKE))         {vp[vn] = "Êü¼Íǽµå";color[vn++] = TERM_L_GREEN;}
1247 #else
1248         if (flags4 & (RF4_BA_NUKE))         {vp[vn] = "produce balls of radiation";color[vn++] = TERM_L_GREEN;}
1249 #endif
1250
1251 #ifdef JP
1252 if (flags5 & (RF5_BA_MANA))         {vp[vn] = "ËâÎϤÎÍò";color[vn++] = TERM_L_BLUE;}
1253 #else
1254         if (flags5 & (RF5_BA_MANA))         {vp[vn] = "invoke mana storms";color[vn++] = TERM_L_BLUE;}
1255 #endif
1256
1257 #ifdef JP
1258 if (flags5 & (RF5_BA_DARK))         {vp[vn] = "°Å¹õ¤ÎÍò";color[vn++] = TERM_L_DARK;}
1259 #else
1260         if (flags5 & (RF5_BA_DARK))         {vp[vn] = "invoke darkness storms";color[vn++] = TERM_L_DARK;}
1261 #endif
1262
1263 #ifdef JP
1264 if (flags5 & (RF5_BA_LITE))         {vp[vn] = "¥¹¥¿¡¼¥Ð¡¼¥¹¥È";color[vn++] = TERM_YELLOW;}
1265 #else
1266         if (flags5 & (RF5_BA_LITE))         {vp[vn] = "invoke starburst";color[vn++] = TERM_YELLOW;}
1267 #endif
1268
1269 #ifdef JP
1270 if (flags4 & (RF4_BA_CHAO))         {vp[vn] = "½ã¥í¥°¥ë¥¹";color[vn++] = TERM_VIOLET;}
1271 #else
1272         if (flags4 & (RF4_BA_CHAO))         {vp[vn] = "invoke raw Logrus";color[vn++] = TERM_VIOLET;}
1273 #endif
1274
1275 #ifdef JP
1276 if (flags6 & (RF6_HAND_DOOM))       {vp[vn] = "ÇËÌǤμê";color[vn++] = TERM_VIOLET;}
1277 #else
1278         if (flags6 & (RF6_HAND_DOOM))       {vp[vn] = "invoke the Hand of Doom";color[vn++] = TERM_VIOLET;}
1279 #endif
1280
1281 #ifdef JP
1282 if (flags6 & (RF6_PSY_SPEAR))            {vp[vn] = "¸÷¤Î·õ";color[vn++] = TERM_YELLOW;}
1283 #else
1284         if (flags6 & (RF6_PSY_SPEAR))            {vp[vn] = "psycho-spear";color[vn++] = TERM_YELLOW;}
1285 #endif
1286
1287 #ifdef JP
1288 if (flags5 & (RF5_DRAIN_MANA))      {vp[vn] = "ËâÎϵۼý";color[vn++] = TERM_SLATE;}
1289 #else
1290         if (flags5 & (RF5_DRAIN_MANA))      {vp[vn] = "drain mana";color[vn++] = TERM_SLATE;}
1291 #endif
1292
1293 #ifdef JP
1294 if (flags5 & (RF5_MIND_BLAST))      {vp[vn] = "Àº¿À¹¶·â";color[vn++] = TERM_L_RED;}
1295 #else
1296         if (flags5 & (RF5_MIND_BLAST))      {vp[vn] = "cause mind blasting";color[vn++] = TERM_L_RED;}
1297 #endif
1298
1299 #ifdef JP
1300 if (flags5 & (RF5_BRAIN_SMASH))     {vp[vn] = "Ǿ¹¶·â";color[vn++] = TERM_RED;}
1301 #else
1302         if (flags5 & (RF5_BRAIN_SMASH))     {vp[vn] = "cause brain smashing";color[vn++] = TERM_RED;}
1303 #endif
1304
1305 #ifdef JP
1306 if (flags5 & (RF5_CAUSE_1))         {vp[vn] = "·Ú½ý¡Ü¼ö¤¤";color[vn++] = TERM_L_WHITE;}
1307 #else
1308         if (flags5 & (RF5_CAUSE_1))         {vp[vn] = "cause light wounds and cursing";color[vn++] = TERM_L_WHITE;}
1309 #endif
1310
1311 #ifdef JP
1312 if (flags5 & (RF5_CAUSE_2))         {vp[vn] = "½Å½ý¡Ü¼ö¤¤";color[vn++] = TERM_L_WHITE;}
1313 #else
1314         if (flags5 & (RF5_CAUSE_2))         {vp[vn] = "cause serious wounds and cursing";color[vn++] = TERM_L_WHITE;}
1315 #endif
1316
1317 #ifdef JP
1318 if (flags5 & (RF5_CAUSE_3))         {vp[vn] = "Ã×Ì¿½ý¡Ü¼ö¤¤";color[vn++] = TERM_L_WHITE;}
1319 #else
1320         if (flags5 & (RF5_CAUSE_3))         {vp[vn] = "cause critical wounds and cursing";color[vn++] = TERM_L_WHITE;}
1321 #endif
1322
1323 #ifdef JP
1324 if (flags5 & (RF5_CAUSE_4))         {vp[vn] = "È빦¤òÆͤ¯";color[vn++] = TERM_L_WHITE;}
1325 #else
1326         if (flags5 & (RF5_CAUSE_4))         {vp[vn] = "cause mortal wounds";color[vn++] = TERM_L_WHITE;}
1327 #endif
1328
1329 #ifdef JP
1330 if (flags5 & (RF5_BO_ACID))         {vp[vn] = "¥¢¥·¥Ã¥É¡¦¥Ü¥ë¥È";color[vn++] = TERM_GREEN;}
1331 #else
1332         if (flags5 & (RF5_BO_ACID))         {vp[vn] = "produce acid bolts";color[vn++] = TERM_GREEN;}
1333 #endif
1334
1335 #ifdef JP
1336 if (flags5 & (RF5_BO_ELEC))         {vp[vn] = "¥µ¥ó¥À¡¼¡¦¥Ü¥ë¥È";color[vn++] = TERM_BLUE;}
1337 #else
1338         if (flags5 & (RF5_BO_ELEC))         {vp[vn] = "produce lightning bolts";color[vn++] = TERM_BLUE;}
1339 #endif
1340
1341 #ifdef JP
1342 if (flags5 & (RF5_BO_FIRE))         {vp[vn] = "¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È";color[vn++] = TERM_RED;}
1343 #else
1344         if (flags5 & (RF5_BO_FIRE))         {vp[vn] = "produce fire bolts";color[vn++] = TERM_RED;}
1345 #endif
1346
1347 #ifdef JP
1348 if (flags5 & (RF5_BO_COLD))         {vp[vn] = "¥¢¥¤¥¹¡¦¥Ü¥ë¥È";color[vn++] = TERM_L_WHITE;}
1349 #else
1350         if (flags5 & (RF5_BO_COLD))         {vp[vn] = "produce frost bolts";color[vn++] = TERM_L_WHITE;}
1351 #endif
1352
1353 #ifdef JP
1354 if (flags5 & (RF5_BO_NETH))         {vp[vn] = "ÃϹö¤ÎÌð";color[vn++] = TERM_L_DARK;}
1355 #else
1356         if (flags5 & (RF5_BO_NETH))         {vp[vn] = "produce nether bolts";color[vn++] = TERM_L_DARK;}
1357 #endif
1358
1359 #ifdef JP
1360 if (flags5 & (RF5_BO_WATE))         {vp[vn] = "¥¦¥©¡¼¥¿¡¼¡¦¥Ü¥ë¥È";color[vn++] = TERM_BLUE;}
1361 #else
1362         if (flags5 & (RF5_BO_WATE))         {vp[vn] = "produce water bolts";color[vn++] = TERM_BLUE;}
1363 #endif
1364
1365 #ifdef JP
1366 if (flags5 & (RF5_BO_MANA))         {vp[vn] = "ËâÎϤÎÌð";color[vn++] = TERM_L_BLUE;}
1367 #else
1368         if (flags5 & (RF5_BO_MANA))         {vp[vn] = "produce mana bolts";color[vn++] = TERM_L_BLUE;}
1369 #endif
1370
1371 #ifdef JP
1372 if (flags5 & (RF5_BO_PLAS))         {vp[vn] = "¥×¥é¥º¥Þ¡¦¥Ü¥ë¥È";color[vn++] = TERM_L_RED;}
1373 #else
1374         if (flags5 & (RF5_BO_PLAS))         {vp[vn] = "produce plasma bolts";color[vn++] = TERM_L_RED;}
1375 #endif
1376
1377 #ifdef JP
1378 if (flags5 & (RF5_BO_ICEE))         {vp[vn] = "¶Ë´¨¤ÎÌð";color[vn++] = TERM_WHITE;}
1379 #else
1380         if (flags5 & (RF5_BO_ICEE))         {vp[vn] = "produce ice bolts";color[vn++] = TERM_WHITE;}
1381 #endif
1382
1383 #ifdef JP
1384 if (flags5 & (RF5_MISSILE))         {vp[vn] = "¥Þ¥¸¥Ã¥¯¥ß¥µ¥¤¥ë";color[vn++] = TERM_SLATE;}
1385 #else
1386         if (flags5 & (RF5_MISSILE))         {vp[vn] = "produce magic missiles";color[vn++] = TERM_SLATE;}
1387 #endif
1388
1389 #ifdef JP
1390 if (flags5 & (RF5_SCARE))           {vp[vn] = "¶²ÉÝ";color[vn++] = TERM_SLATE;}
1391 #else
1392         if (flags5 & (RF5_SCARE))           {vp[vn] = "terrify";color[vn++] = TERM_SLATE;}
1393 #endif
1394
1395 #ifdef JP
1396 if (flags5 & (RF5_BLIND))           {vp[vn] = "Ìܤ¯¤é¤Þ¤·";color[vn++] = TERM_L_DARK;}
1397 #else
1398         if (flags5 & (RF5_BLIND))           {vp[vn] = "blind";color[vn++] = TERM_L_DARK;}
1399 #endif
1400
1401 #ifdef JP
1402 if (flags5 & (RF5_CONF))            {vp[vn] = "º®Íð";color[vn++] = TERM_L_UMBER;}
1403 #else
1404         if (flags5 & (RF5_CONF))            {vp[vn] = "confuse";color[vn++] = TERM_L_UMBER;}
1405 #endif
1406
1407 #ifdef JP
1408 if (flags5 & (RF5_SLOW))            {vp[vn] = "¸ºÂ®";color[vn++] = TERM_UMBER;}
1409 #else
1410         if (flags5 & (RF5_SLOW))            {vp[vn] = "slow";color[vn++] = TERM_UMBER;}
1411 #endif
1412
1413 #ifdef JP
1414 if (flags5 & (RF5_HOLD))            {vp[vn] = "Ëãáã";color[vn++] = TERM_RED;}
1415 #else
1416         if (flags5 & (RF5_HOLD))            {vp[vn] = "paralyze";color[vn++] = TERM_RED;}
1417 #endif
1418
1419 #ifdef JP
1420 if (flags6 & (RF6_HASTE))           {vp[vn] = "²Ã®";color[vn++] = TERM_L_GREEN;}
1421 #else
1422         if (flags6 & (RF6_HASTE))           {vp[vn] = "haste-self";color[vn++] = TERM_L_GREEN;}
1423 #endif
1424
1425 #ifdef JP
1426 if (flags6 & (RF6_HEAL))            {vp[vn] = "¼£Ìþ";color[vn++] = TERM_WHITE;}
1427 #else
1428         if (flags6 & (RF6_HEAL))            {vp[vn] = "heal-self";color[vn++] = TERM_WHITE;}
1429 #endif
1430
1431 #ifdef JP
1432         if (flags6 & (RF6_INVULNER))        {vp[vn] = "̵Ũ²½";color[vn++] = TERM_WHITE;}
1433 #else
1434         if (flags6 & (RF6_INVULNER))        {vp[vn] = "make invulnerable";color[vn++] = TERM_WHITE;}
1435 #endif
1436
1437 #ifdef JP
1438 if (flags4 & RF4_DISPEL)    {vp[vn] = "ËâÎϾõî";color[vn++] = TERM_L_WHITE;}
1439 #else
1440         if (flags4 & RF4_DISPEL)    {vp[vn] = "dispel-magic";color[vn++] = TERM_L_WHITE;}
1441 #endif
1442
1443 #ifdef JP
1444 if (flags6 & (RF6_BLINK))           {vp[vn] = "¥·¥ç¡¼¥È¥Æ¥ì¥Ý¡¼¥È";color[vn++] = TERM_UMBER;}
1445 #else
1446         if (flags6 & (RF6_BLINK))           {vp[vn] = "blink-self";color[vn++] = TERM_UMBER;}
1447 #endif
1448
1449 #ifdef JP
1450 if (flags6 & (RF6_TPORT))           {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È";color[vn++] = TERM_ORANGE;}
1451 #else
1452         if (flags6 & (RF6_TPORT))           {vp[vn] = "teleport-self";color[vn++] = TERM_ORANGE;}
1453 #endif
1454
1455 #ifdef JP
1456 if (flags6 & (RF6_WORLD))            {vp[vn] = "»þ¤ò»ß¤á¤ë";color[vn++] = TERM_L_BLUE;}
1457 #else
1458         if (flags6 & (RF6_WORLD))            {vp[vn] = "stop the time";color[vn++] = TERM_L_BLUE;}
1459 #endif
1460
1461 #ifdef JP
1462 if (flags6 & (RF6_TELE_TO))         {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È¥Ð¥Ã¥¯";color[vn++] = TERM_L_UMBER;}
1463 #else
1464         if (flags6 & (RF6_TELE_TO))         {vp[vn] = "teleport to";color[vn++] = TERM_L_UMBER;}
1465 #endif
1466
1467 #ifdef JP
1468 if (flags6 & (RF6_TELE_AWAY))       {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È¥¢¥¦¥§¥¤";color[vn++] = TERM_UMBER;}
1469 #else
1470         if (flags6 & (RF6_TELE_AWAY))       {vp[vn] = "teleport away";color[vn++] = TERM_UMBER;}
1471 #endif
1472
1473 #ifdef JP
1474 if (flags6 & (RF6_TELE_LEVEL))      {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È¡¦¥ì¥Ù¥ë";color[vn++] = TERM_ORANGE;}
1475 #else
1476         if (flags6 & (RF6_TELE_LEVEL))      {vp[vn] = "teleport level";color[vn++] = TERM_ORANGE;}
1477 #endif
1478
1479         if (flags6 & (RF6_DARKNESS))
1480         {
1481                 if ((p_ptr->pclass != CLASS_NINJA) || (r_ptr->flags3 & (RF3_UNDEAD | RF3_HURT_LITE)) || (r_ptr->flags7 & RF7_DARK_MASK))
1482                 {
1483 #ifdef JP
1484                         vp[vn] =  "°Å°Ç"; color[vn++] = TERM_L_DARK;
1485 #else
1486                         vp[vn] = "create darkness"; color[vn++] = TERM_L_DARK;
1487 #endif
1488                 }
1489                 else
1490                 {
1491 #ifdef JP
1492                         vp[vn] = "Á®¸÷"; color[vn++] = TERM_YELLOW;
1493 #else
1494                         vp[vn] = "create light"; color[vn++] = TERM_YELLOW;
1495 #endif
1496                 }
1497         }
1498
1499 #ifdef JP
1500 if (flags6 & (RF6_TRAPS))           {vp[vn] = "¥È¥é¥Ã¥×";color[vn++] = TERM_BLUE;}
1501 #else
1502         if (flags6 & (RF6_TRAPS))           {vp[vn] = "create traps";color[vn++] = TERM_BLUE;}
1503 #endif
1504
1505 #ifdef JP
1506 if (flags6 & (RF6_FORGET))          {vp[vn] = "µ­²±¾Ãµî";color[vn++] = TERM_BLUE;}
1507 #else
1508         if (flags6 & (RF6_FORGET))          {vp[vn] = "cause amnesia";color[vn++] = TERM_BLUE;}
1509 #endif
1510
1511 #ifdef JP
1512 if (flags6 & (RF6_RAISE_DEAD))      {vp[vn] = "»à¼ÔÉü³è";color[vn++] = TERM_RED;}
1513 #else
1514         if (flags6 & (RF6_RAISE_DEAD))      {vp[vn] = "raise dead";color[vn++] = TERM_RED;}
1515 #endif
1516
1517 #ifdef JP
1518 if (flags6 & (RF6_S_MONSTER))       {vp[vn] = "¥â¥ó¥¹¥¿¡¼°ìÂξ¤´­";color[vn++] = TERM_SLATE;}
1519 #else
1520         if (flags6 & (RF6_S_MONSTER))       {vp[vn] = "summon a monster";color[vn++] = TERM_SLATE;}
1521 #endif
1522
1523 #ifdef JP
1524 if (flags6 & (RF6_S_MONSTERS))      {vp[vn] = "¥â¥ó¥¹¥¿¡¼Ê£¿ô¾¤´­";color[vn++] = TERM_L_WHITE;}
1525 #else
1526         if (flags6 & (RF6_S_MONSTERS))      {vp[vn] = "summon monsters";color[vn++] = TERM_L_WHITE;}
1527 #endif
1528
1529 #ifdef JP
1530 if (flags6 & (RF6_S_KIN))           {vp[vn] = "µß±ç¾¤´­";color[vn++] = TERM_ORANGE;}
1531 #else
1532         if (flags6 & (RF6_S_KIN))           {vp[vn] = "summon aid";color[vn++] = TERM_ORANGE;}
1533 #endif
1534
1535 #ifdef JP
1536 if (flags6 & (RF6_S_ANT))           {vp[vn] = "¥¢¥ê¾¤´­";color[vn++] = TERM_RED;}
1537 #else
1538         if (flags6 & (RF6_S_ANT))           {vp[vn] = "summon ants";color[vn++] = TERM_RED;}
1539 #endif
1540
1541 #ifdef JP
1542 if (flags6 & (RF6_S_SPIDER))        {vp[vn] = "¥¯¥â¾¤´­";color[vn++] = TERM_L_DARK;}
1543 #else
1544         if (flags6 & (RF6_S_SPIDER))        {vp[vn] = "summon spiders";color[vn++] = TERM_L_DARK;}
1545 #endif
1546
1547 #ifdef JP
1548 if (flags6 & (RF6_S_HOUND))         {vp[vn] = "¥Ï¥¦¥ó¥É¾¤´­";color[vn++] = TERM_L_UMBER;}
1549 #else
1550         if (flags6 & (RF6_S_HOUND))         {vp[vn] = "summon hounds";color[vn++] = TERM_L_UMBER;}
1551 #endif
1552
1553 #ifdef JP
1554 if (flags6 & (RF6_S_HYDRA))         {vp[vn] = "¥Ò¥É¥é¾¤´­";color[vn++] = TERM_L_GREEN;}
1555 #else
1556         if (flags6 & (RF6_S_HYDRA))         {vp[vn] = "summon hydras";color[vn++] = TERM_L_GREEN;}
1557 #endif
1558
1559 #ifdef JP
1560 if (flags6 & (RF6_S_ANGEL))         {vp[vn] = "Å·»È°ìÂξ¤´­";color[vn++] = TERM_YELLOW;}
1561 #else
1562         if (flags6 & (RF6_S_ANGEL))         {vp[vn] = "summon an angel";color[vn++] = TERM_YELLOW;}
1563 #endif
1564
1565 #ifdef JP
1566 if (flags6 & (RF6_S_DEMON))         {vp[vn] = "¥Ç¡¼¥â¥ó°ìÂξ¤´­";color[vn++] = TERM_L_RED;}
1567 #else
1568         if (flags6 & (RF6_S_DEMON))         {vp[vn] = "summon a demon";color[vn++] = TERM_L_RED;}
1569 #endif
1570
1571 #ifdef JP
1572 if (flags6 & (RF6_S_UNDEAD))        {vp[vn] = "¥¢¥ó¥Ç¥Ã¥É°ìÂξ¤´­";color[vn++] = TERM_L_DARK;}
1573 #else
1574         if (flags6 & (RF6_S_UNDEAD))        {vp[vn] = "summon an undead";color[vn++] = TERM_L_DARK;}
1575 #endif
1576
1577 #ifdef JP
1578 if (flags6 & (RF6_S_DRAGON))        {vp[vn] = "¥É¥é¥´¥ó°ìÂξ¤´­";color[vn++] = TERM_ORANGE;}
1579 #else
1580         if (flags6 & (RF6_S_DRAGON))        {vp[vn] = "summon a dragon";color[vn++] = TERM_ORANGE;}
1581 #endif
1582
1583 #ifdef JP
1584 if (flags6 & (RF6_S_HI_UNDEAD))     {vp[vn] = "¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¾¤´­";color[vn++] = TERM_L_DARK;}
1585 #else
1586         if (flags6 & (RF6_S_HI_UNDEAD))     {vp[vn] = "summon Greater Undead";color[vn++] = TERM_L_DARK;}
1587 #endif
1588
1589 #ifdef JP
1590 if (flags6 & (RF6_S_HI_DRAGON))     {vp[vn] = "¸ÅÂå¥É¥é¥´¥ó¾¤´­";color[vn++] = TERM_ORANGE;}
1591 #else
1592         if (flags6 & (RF6_S_HI_DRAGON))     {vp[vn] = "summon Ancient Dragons";color[vn++] = TERM_ORANGE;}
1593 #endif
1594
1595 #ifdef JP
1596 if (flags6 & (RF6_S_CYBER))         {vp[vn] = "¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¾¤´­";color[vn++] = TERM_UMBER;}
1597 #else
1598         if (flags6 & (RF6_S_CYBER))         {vp[vn] = "summon Cyberdemons";color[vn++] = TERM_UMBER;}
1599 #endif
1600
1601 #ifdef JP
1602 if (flags6 & (RF6_S_AMBERITES))     {vp[vn] = "¥¢¥ó¥Ð¡¼¤Î²¦Â²¾¤´­";color[vn++] = TERM_VIOLET;}
1603 #else
1604         if (flags6 & (RF6_S_AMBERITES))     {vp[vn] = "summon Lords of Amber";color[vn++] = TERM_VIOLET;}
1605 #endif
1606
1607 #ifdef JP
1608 if (flags6 & (RF6_S_UNIQUE))        {vp[vn] = "¥æ¥Ë¡¼¥¯¡¦¥â¥ó¥¹¥¿¡¼¾¤´­";color[vn++] = TERM_VIOLET;}
1609 #else
1610         if (flags6 & (RF6_S_UNIQUE))        {vp[vn] = "summon Unique Monsters";color[vn++] = TERM_VIOLET;}
1611 #endif
1612
1613
1614         /* Describe spells */
1615         if (vn)
1616         {
1617                 /* Note magic */
1618                 magic = TRUE;
1619
1620                 /* Intro */
1621                 if (breath)
1622                 {
1623 #ifdef JP
1624                         hooked_roff("¡¢¤Ê¤ª¤«¤Ä");
1625 #else
1626                         hooked_roff(", and is also");
1627 #endif
1628
1629                 }
1630                 else
1631                 {
1632 #ifdef JP
1633                         hooked_roff(format("%^s¤Ï", wd_he[msex]));
1634 #else
1635                         hooked_roff(format("%^s is", wd_he[msex]));
1636 #endif
1637
1638                 }
1639
1640 #ifdef JP
1641                 /* Adverb */
1642                 if (flags2 & (RF2_SMART)) hook_c_roff(TERM_YELLOW, "Ū³Î¤Ë");
1643
1644                 /* Verb Phrase */
1645                 hooked_roff("ËâË¡¤ò»È¤¦¤³¤È¤¬¤Ç¤­¡¢");
1646 #else
1647                 /* Verb Phrase */
1648                 hooked_roff(" magical, casting spells");
1649
1650                 /* Adverb */
1651                 if (flags2 & RF2_SMART) hook_c_roff(TERM_YELLOW, " intelligently");
1652 #endif
1653
1654
1655                 /* Scan */
1656                 for (n = 0; n < vn; n++)
1657                 {
1658                         /* Intro */
1659 #ifdef JP
1660                         if ( n != 0 ) hooked_roff("¡¢");
1661 #else
1662                         if (n == 0) hooked_roff(" which ");
1663                         else if (n < vn-1) hooked_roff(", ");
1664                         else hooked_roff(" or ");
1665 #endif
1666
1667
1668                         /* Dump */
1669                         hook_c_roff(color[n], vp[n]);
1670                 }
1671 #ifdef JP
1672                 hooked_roff("¤Î¼öʸ¤ò¾§¤¨¤ë¤³¤È¤¬¤¢¤ë");
1673 #endif
1674         }
1675
1676
1677         /* End the sentence about inate/other spells */
1678         if (breath || magic)
1679         {
1680                 /* Total casting */
1681                 m = r_ptr->r_cast_spell;
1682
1683                 /* Average frequency */
1684                 n = r_ptr->freq_spell;
1685
1686                 /* Describe the spell frequency */
1687                 if (m > 100 || know_everything)
1688                 {
1689 #ifdef JP
1690                         hooked_roff(format("(³ÎΨ:1/%d)", 100 / n));
1691 #else
1692                         hooked_roff(format("; 1 time in %d", 100 / n));
1693 #endif
1694
1695                 }
1696
1697                 /* Guess at the frequency */
1698                 else if (m)
1699                 {
1700                         n = ((n + 9) / 10) * 10;
1701 #ifdef JP
1702                         hooked_roff(format("(³ÎΨ:Ìó1/%d)", 100 / n));
1703 #else
1704                         hooked_roff(format("; about 1 time in %d", 100 / n));
1705 #endif
1706
1707                 }
1708
1709                 /* End this sentence */
1710 #ifdef JP
1711                 hooked_roff("¡£");
1712 #else
1713                 hooked_roff(".  ");
1714 #endif
1715
1716         }
1717
1718         /* Describe monster "toughness" */
1719         if (know_armour(r_idx))
1720         {
1721                 /* Armor */
1722 #ifdef JP
1723                 hooked_roff(format("%^s¤Ï AC%d ¤ÎËɸæÎϤÈ",
1724 #else
1725                 hooked_roff(format("%^s has an armor rating of %d",
1726 #endif
1727
1728                             wd_he[msex], r_ptr->ac));
1729
1730                 /* Maximized hitpoints */
1731                 if (flags1 & RF1_FORCE_MAXHP)
1732                 {
1733 #ifdef JP
1734                         hooked_roff(format(" %d ¤ÎÂÎÎϤ¬¤¢¤ë¡£",
1735 #else
1736                         hooked_roff(format(" and a life rating of %d.  ",
1737 #endif
1738
1739                                     r_ptr->hdice * r_ptr->hside));
1740                 }
1741
1742                 /* Variable hitpoints */
1743                 else
1744                 {
1745 #ifdef JP
1746                         hooked_roff(format(" %dd%d ¤ÎÂÎÎϤ¬¤¢¤ë¡£",
1747 #else
1748                         hooked_roff(format(" and a life rating of %dd%d.  ",
1749 #endif
1750
1751                                     r_ptr->hdice, r_ptr->hside));
1752                 }
1753         }
1754
1755
1756
1757         /* Collect special abilities. */
1758         vn = 0;
1759 #ifdef JP
1760         if (flags7 & (RF7_HAS_LITE_1 | RF7_HAS_LITE_2)) { vp[vn] = "¥À¥ó¥¸¥ç¥ó¤ò¾È¤é¤¹";     color[vn++] = TERM_WHITE; }
1761 #else
1762         if (flags7 & (RF7_HAS_LITE_1 | RF7_HAS_LITE_2)) { vp[vn] = "illuminate the dungeon"; color[vn++] = TERM_WHITE; }
1763 #endif
1764
1765 #ifdef JP
1766         if (flags7 & (RF7_HAS_DARK_1 | RF7_HAS_DARK_2)) { vp[vn] = "¥À¥ó¥¸¥ç¥ó¤ò°Å¤¯¤¹¤ë";   color[vn++] = TERM_L_DARK; }
1767 #else
1768         if (flags7 & (RF7_HAS_DARK_1 | RF7_HAS_DARK_2)) { vp[vn] = "darken the dungeon";     color[vn++] = TERM_L_DARK; }
1769 #endif
1770
1771 #ifdef JP
1772         if (flags2 & RF2_OPEN_DOOR) { vp[vn] = "¥É¥¢¤ò³«¤±¤ë"; color[vn++] = TERM_WHITE; }
1773 #else
1774         if (flags2 & RF2_OPEN_DOOR) { vp[vn] = "open doors"; color[vn++] = TERM_WHITE; }
1775 #endif
1776
1777 #ifdef JP
1778         if (flags2 & RF2_BASH_DOOR) { vp[vn] = "¥É¥¢¤òÂǤÁÇˤë"; color[vn++] = TERM_WHITE; }
1779 #else
1780         if (flags2 & RF2_BASH_DOOR) { vp[vn] = "bash down doors"; color[vn++] = TERM_WHITE; }
1781 #endif
1782
1783 #ifdef JP
1784         if (flags2 & RF2_PASS_WALL) { vp[vn] = "Êɤò¤¹¤êÈ´¤±¤ë"; color[vn++] = TERM_WHITE; }
1785 #else
1786         if (flags2 & RF2_PASS_WALL) { vp[vn] = "pass through walls"; color[vn++] = TERM_WHITE; }
1787 #endif
1788
1789 #ifdef JP
1790         if (flags2 & RF2_KILL_WALL) { vp[vn] = "Êɤò·¡¤ê¿Ê¤à"; color[vn++] = TERM_WHITE; }
1791 #else
1792         if (flags2 & RF2_KILL_WALL) { vp[vn] = "bore through walls"; color[vn++] = TERM_WHITE; }
1793 #endif
1794
1795 #ifdef JP
1796         if (flags2 & RF2_MOVE_BODY) { vp[vn] = "¼å¤¤¥â¥ó¥¹¥¿¡¼¤ò²¡¤·¤Î¤±¤ë"; color[vn++] = TERM_WHITE; }
1797 #else
1798         if (flags2 & RF2_MOVE_BODY) { vp[vn] = "push past weaker monsters"; color[vn++] = TERM_WHITE; }
1799 #endif
1800
1801 #ifdef JP
1802         if (flags2 & RF2_KILL_BODY) { vp[vn] = "¼å¤¤¥â¥ó¥¹¥¿¡¼¤òÅݤ¹"; color[vn++] = TERM_WHITE; }
1803 #else
1804         if (flags2 & RF2_KILL_BODY) { vp[vn] = "destroy weaker monsters"; color[vn++] = TERM_WHITE; }
1805 #endif
1806
1807 #ifdef JP
1808         if (flags2 & RF2_TAKE_ITEM) { vp[vn] = "¥¢¥¤¥Æ¥à¤ò½¦¤¦"; color[vn++] = TERM_WHITE; }
1809 #else
1810         if (flags2 & RF2_TAKE_ITEM) { vp[vn] = "pick up objects"; color[vn++] = TERM_WHITE; }
1811 #endif
1812
1813 #ifdef JP
1814         if (flags2 & RF2_KILL_ITEM) { vp[vn] = "¥¢¥¤¥Æ¥à¤ò²õ¤¹"; color[vn++] = TERM_WHITE; }
1815 #else
1816         if (flags2 & RF2_KILL_ITEM) { vp[vn] = "destroy objects"; color[vn++] = TERM_WHITE; }
1817 #endif
1818
1819
1820         /* Describe special abilities. */
1821         if (vn)
1822         {
1823                 /* Intro */
1824 #ifdef JP
1825                 hooked_roff(format("%^s¤Ï", wd_he[msex]));
1826 #else
1827                 hooked_roff(format("%^s", wd_he[msex]));
1828 #endif
1829
1830
1831                 /* Scan */
1832                 for (n = 0; n < vn; n++)
1833                 {
1834                         /* Intro */
1835 #ifdef JP
1836                         if (n != vn - 1)
1837                         {
1838                                 jverb(vp[n], jverb_buf, JVERB_AND);
1839                                 hook_c_roff(color[n], jverb_buf);
1840                                 hooked_roff("¡¢");
1841                         }
1842                         else hook_c_roff(color[n], vp[n]);
1843 #else
1844                         if (n == 0) hooked_roff(" can ");
1845                         else if (n < vn - 1) hooked_roff(", ");
1846                         else hooked_roff(" and ");
1847
1848                         /* Dump */
1849                         hook_c_roff(color[n], vp[n]);
1850 #endif
1851
1852                 }
1853
1854                 /* End */
1855 #ifdef JP
1856                 hooked_roff("¤³¤È¤¬¤Ç¤­¤ë¡£");
1857 #else
1858                 hooked_roff(".  ");
1859 #endif
1860
1861         }
1862
1863
1864         /* Describe special abilities. */
1865         if (flags7 & (RF7_SELF_LITE_1 | RF7_SELF_LITE_2))
1866         {
1867 #ifdef JP
1868                 hooked_roff(format("%^s¤Ï¸÷¤Ã¤Æ¤¤¤ë¡£", wd_he[msex]));
1869 #else
1870                 hooked_roff(format("%^s illuminate the dungeon.  ", wd_he[msex]));
1871 #endif
1872
1873         }
1874         if (flags7 & (RF7_SELF_DARK_1 | RF7_SELF_DARK_2))
1875         {
1876 #ifdef JP
1877                 hook_c_roff(TERM_L_DARK, format("%^s¤Ï°Å¹õ¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
1878 #else
1879                 hook_c_roff(TERM_L_DARK, format("%^s is surrounded by darkness.  ", wd_he[msex]));
1880 #endif
1881
1882         }
1883         if (flags2 & RF2_INVISIBLE)
1884         {
1885 #ifdef JP
1886                 hooked_roff(format("%^s¤ÏÆ©ÌÀ¤ÇÌܤ˸«¤¨¤Ê¤¤¡£", wd_he[msex]));
1887 #else
1888                 hooked_roff(format("%^s is invisible.  ", wd_he[msex]));
1889 #endif
1890
1891         }
1892         if (flags2 & RF2_COLD_BLOOD)
1893         {
1894 #ifdef JP
1895                 hooked_roff(format("%^s¤ÏÎä·ìưʪ¤Ç¤¢¤ë¡£", wd_he[msex]));
1896 #else
1897                 hooked_roff(format("%^s is cold blooded.  ", wd_he[msex]));
1898 #endif
1899
1900         }
1901         if (flags2 & RF2_EMPTY_MIND)
1902         {
1903 #ifdef JP
1904                 hooked_roff(format("%^s¤Ï¥Æ¥ì¥Ñ¥·¡¼¤Ç¤Ï´¶ÃΤǤ­¤Ê¤¤¡£", wd_he[msex]));
1905 #else
1906                 hooked_roff(format("%^s is not detected by telepathy.  ", wd_he[msex]));
1907 #endif
1908
1909         }
1910         else if (flags2 & RF2_WEIRD_MIND)
1911         {
1912 #ifdef JP
1913                 hooked_roff(format("%^s¤Ï¤Þ¤ì¤Ë¥Æ¥ì¥Ñ¥·¡¼¤Ç´¶ÃΤǤ­¤ë¡£", wd_he[msex]));
1914 #else
1915                 hooked_roff(format("%^s is rarely detected by telepathy.  ", wd_he[msex]));
1916 #endif
1917
1918         }
1919         if (flags2 & RF2_MULTIPLY)
1920         {
1921 #ifdef JP
1922                 hook_c_roff(TERM_L_UMBER, format("%^s¤ÏÇúȯŪ¤ËÁý¿£¤¹¤ë¡£", wd_he[msex]));
1923 #else
1924                 hook_c_roff(TERM_L_UMBER, format("%^s breeds explosively.  ", wd_he[msex]));
1925 #endif
1926
1927         }
1928         if (flags2 & RF2_REGENERATE)
1929         {
1930 #ifdef JP
1931                 hook_c_roff(TERM_L_WHITE, format("%^s¤ÏÁÇÁ᤯ÂÎÎϤò²óÉü¤¹¤ë¡£", wd_he[msex]));
1932 #else
1933                 hook_c_roff(TERM_L_WHITE, format("%^s regenerates quickly.  ", wd_he[msex]));
1934 #endif
1935
1936         }
1937         if (flags7 & RF7_RIDING)
1938         {
1939 #ifdef JP
1940                 hook_c_roff(TERM_SLATE, format("%^s¤Ë¾è¤ë¤³¤È¤¬¤Ç¤­¤ë¡£", wd_he[msex]));
1941 #else
1942                 hook_c_roff(TERM_SLATE, format("%^s is suitable for riding.  ", wd_he[msex]));
1943 #endif
1944
1945         }
1946
1947
1948         /* Collect susceptibilities */
1949         vn = 0;
1950 #ifdef JP
1951         if (flags3 & RF3_HURT_ROCK) {vp[vn] = "´ä¤ò½üµî¤¹¤ë¤â¤Î";color[vn++] = TERM_UMBER;}
1952 #else
1953         if (flags3 & RF3_HURT_ROCK) {vp[vn] = "rock remover";color[vn++] = TERM_UMBER;}
1954 #endif
1955
1956 #ifdef JP
1957         if (flags3 & RF3_HURT_LITE) {vp[vn] = "ÌÀ¤ë¤¤¸÷";color[vn++] = TERM_YELLOW;}
1958 #else
1959         if (flags3 & RF3_HURT_LITE) {vp[vn] = "bright light";color[vn++] = TERM_YELLOW;}
1960 #endif
1961
1962 #ifdef JP
1963         if (flags3 & RF3_HURT_FIRE) {vp[vn] = "±ê";color[vn++] = TERM_RED;}
1964 #else
1965         if (flags3 & RF3_HURT_FIRE) {vp[vn] = "fire";color[vn++] = TERM_RED;}
1966 #endif
1967
1968 #ifdef JP
1969         if (flags3 & RF3_HURT_COLD) {vp[vn] = "Î䵤";color[vn++] = TERM_L_WHITE;}
1970 #else
1971         if (flags3 & RF3_HURT_COLD) {vp[vn] = "cold";color[vn++] = TERM_L_WHITE;}
1972 #endif
1973
1974
1975         /* Describe susceptibilities */
1976         if (vn)
1977         {
1978                 /* Intro */
1979 #ifdef JP
1980                 hooked_roff(format("%^s¤Ë¤Ï", wd_he[msex]));
1981 #else
1982                 hooked_roff(format("%^s", wd_he[msex]));
1983 #endif
1984
1985
1986                 /* Scan */
1987                 for (n = 0; n < vn; n++)
1988                 {
1989                         /* Intro */
1990 #ifdef JP
1991                         if ( n != 0 ) hooked_roff("¤ä");
1992 #else
1993                         if (n == 0) hooked_roff(" is hurt by ");
1994                         else if (n < vn-1) hooked_roff(", ");
1995                         else hooked_roff(" and ");
1996 #endif
1997
1998
1999                         /* Dump */
2000                         hook_c_roff(color[n], vp[n]);
2001                 }
2002
2003                 /* End */
2004 #ifdef JP
2005                 hooked_roff("¤Ç¥À¥á¡¼¥¸¤òÍ¿¤¨¤é¤ì¤ë¡£");
2006 #else
2007                 hooked_roff(".  ");
2008 #endif
2009
2010         }
2011
2012
2013         /* Collect immunities */
2014         vn = 0;
2015 #ifdef JP
2016         if (flags3 & RF3_IM_ACID) {vp[vn] = "»À";color[vn++] = TERM_GREEN;}
2017 #else
2018         if (flags3 & RF3_IM_ACID) {vp[vn] = "acid";color[vn++] = TERM_GREEN;}
2019 #endif
2020
2021 #ifdef JP
2022         if (flags3 & RF3_IM_ELEC) {vp[vn] = "°ðºÊ";color[vn++] = TERM_BLUE;}
2023 #else
2024         if (flags3 & RF3_IM_ELEC) {vp[vn] = "lightning";color[vn++] = TERM_BLUE;}
2025 #endif
2026
2027 #ifdef JP
2028         if (flags3 & RF3_IM_FIRE) {vp[vn] = "±ê";color[vn++] = TERM_RED;}
2029 #else
2030         if (flags3 & RF3_IM_FIRE) {vp[vn] = "fire";color[vn++] = TERM_RED;}
2031 #endif
2032
2033 #ifdef JP
2034         if (flags3 & RF3_IM_COLD) {vp[vn] = "Î䵤";color[vn++] = TERM_L_WHITE;}
2035 #else
2036         if (flags3 & RF3_IM_COLD) {vp[vn] = "cold";color[vn++] = TERM_L_WHITE;}
2037 #endif
2038
2039 #ifdef JP
2040         if (flags3 & RF3_IM_POIS) {vp[vn] = "ÆÇ";color[vn++] = TERM_L_GREEN;}
2041 #else
2042         if (flags3 & RF3_IM_POIS) {vp[vn] = "poison";color[vn++] = TERM_L_GREEN;}
2043 #endif
2044
2045
2046         /* Describe immunities */
2047         if (vn)
2048         {
2049                 /* Intro */
2050 #ifdef JP
2051                 hooked_roff(format("%^s¤Ï", wd_he[msex]));
2052 #else
2053                 hooked_roff(format("%^s", wd_he[msex]));
2054 #endif
2055
2056
2057                 /* Scan */
2058                 for (n = 0; n < vn; n++)
2059                 {
2060                         /* Intro */
2061 #ifdef JP
2062                         if ( n != 0 ) hooked_roff("¤È");
2063 #else
2064                         if (n == 0) hooked_roff(" resists ");
2065                         else if (n < vn-1) hooked_roff(", ");
2066                         else hooked_roff(" and ");
2067 #endif
2068
2069
2070                         /* Dump */
2071                         hook_c_roff(color[n], vp[n]);
2072                 }
2073
2074                 /* End */
2075 #ifdef JP
2076                 hooked_roff("¤ÎÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£");
2077 #else
2078                 hooked_roff(".  ");
2079 #endif
2080
2081         }
2082
2083
2084         /* Collect resistances */
2085         vn = 0;
2086 #ifdef JP
2087 if (flags4 & RF4_BR_LITE) {vp[vn] = "Á®¸÷";color[vn++] = TERM_YELLOW;}
2088 #else
2089  if (flags4 & RF4_BR_LITE) {vp[vn] = "light";color[vn++] = TERM_YELLOW;}
2090 #endif
2091
2092 #ifdef JP
2093 if ((flags4 & RF4_BR_DARK) || (flags3 & RF3_ORC)) {vp[vn] = "°Å¹õ";color[vn++] = TERM_L_DARK;}
2094 #else
2095  if (flags4 & RF4_BR_DARK  || (flags3 & RF3_ORC)) {vp[vn] = "dark";color[vn++] = TERM_L_DARK;}
2096 #endif
2097
2098 #ifdef JP
2099 if (flags3 & RF3_RES_NETH) {vp[vn] = "ÃϹö";color[vn++] = TERM_L_DARK;}
2100 #else
2101  if (flags3 & RF3_RES_NETH) {vp[vn] = "nether";color[vn++] = TERM_L_DARK;}
2102 #endif
2103
2104 #ifdef JP
2105 if (flags3 & RF3_RES_WATE) {vp[vn] = "¿å";color[vn++] = TERM_BLUE;}
2106 #else
2107 if (flags3 & RF3_RES_WATE) {vp[vn] = "water";color[vn++] = TERM_BLUE;}
2108 #endif
2109
2110 #ifdef JP
2111 if (flags3 & RF3_RES_PLAS) {vp[vn] = "¥×¥é¥º¥Þ";color[vn++] = TERM_L_RED;}
2112 #else
2113  if (flags3 & RF3_RES_PLAS) {vp[vn] = "plasma";color[vn++] = TERM_L_RED;}
2114 #endif
2115
2116 #ifdef JP
2117 if (flags4 & RF4_BR_SHAR) {vp[vn] = "ÇËÊÒ";color[vn++] = TERM_L_UMBER;}
2118 #else
2119  if (flags4 & RF4_BR_SHAR) {vp[vn] = "shards";color[vn++] = TERM_L_UMBER;}
2120 #endif
2121
2122 #ifdef JP
2123 if (flags4 & RF4_BR_SOUN) {vp[vn] = "¹ì²»";color[vn++] = TERM_ORANGE;}
2124 #else
2125  if (flags4 & RF4_BR_SOUN) {vp[vn] = "sound";color[vn++] = TERM_ORANGE;}
2126 #endif
2127
2128 #ifdef JP
2129 if (flags4 & RF4_BR_CONF) {vp[vn] = "º®Íð";color[vn++] = TERM_L_UMBER;}
2130 #else
2131  if (flags4 & RF4_BR_CONF) {vp[vn] = "conf";color[vn++] = TERM_L_UMBER;}
2132 #endif
2133
2134 #ifdef JP
2135 if ((flags4 & RF4_BR_CHAO) || (r_idx == MON_STORMBRINGER)) {vp[vn] = "¥«¥ª¥¹";color[vn++] = TERM_VIOLET;}
2136 #else
2137 if ((flags4 & RF4_BR_CHAO) || (r_idx == MON_STORMBRINGER)) {vp[vn] = "chaos";color[vn++] = TERM_VIOLET;}
2138 #endif
2139
2140 #ifdef JP
2141 if (flags3 & RF3_RES_NEXU) {vp[vn] = "°ø²Ìº®Íð";color[vn++] = TERM_VIOLET;}
2142 #else
2143  if (flags3 & RF3_RES_NEXU) {vp[vn] = "nexus";color[vn++] = TERM_VIOLET;}
2144 #endif
2145
2146 #ifdef JP
2147 if (flags3 & RF3_RES_DISE) {vp[vn] = "Îô²½";color[vn++] = TERM_VIOLET;}
2148 #else
2149  if (flags3 & RF3_RES_DISE) {vp[vn] = "disenchantment";color[vn++] = TERM_VIOLET;}
2150 #endif
2151
2152 #ifdef JP
2153 if (flags4 & RF4_BR_WALL) {vp[vn] = "¥Õ¥©¡¼¥¹";color[vn++] = TERM_UMBER;}
2154 #else
2155  if (flags4 & RF4_BR_WALL) {vp[vn] = "sound";color[vn++] = TERM_UMBER;}
2156 #endif
2157
2158 #ifdef JP
2159 if (flags4 & RF4_BR_INER) {vp[vn] = "ÃÙÆß";color[vn++] = TERM_SLATE;}
2160 #else
2161  if (flags4 & RF4_BR_INER) {vp[vn] = "inertia";color[vn++] = TERM_SLATE;}
2162 #endif
2163
2164 #ifdef JP
2165 if (flags4 & RF4_BR_TIME) {vp[vn] = "»þ´ÖµÕž";color[vn++] = TERM_L_BLUE;}
2166 #else
2167  if (flags4 & RF4_BR_TIME) {vp[vn] = "time";color[vn++] = TERM_L_BLUE;}
2168 #endif
2169
2170 #ifdef JP
2171 if (flags4 & RF4_BR_GRAV) {vp[vn] = "½ÅÎÏ";color[vn++] = TERM_SLATE;}
2172 #else
2173  if (flags4 & RF4_BR_GRAV) {vp[vn] = "gravity";color[vn++] = TERM_SLATE;}
2174 #endif
2175
2176 #ifdef JP
2177 if (flags3 & RF3_RES_ALL) {vp[vn] = "¤¢¤é¤æ¤ë¹¶·â";color[vn++] = TERM_YELLOW;}
2178 #else
2179  if (flags3 & RF3_RES_ALL) {vp[vn] = "all";color[vn++] = TERM_YELLOW;}
2180 #endif
2181
2182 #ifdef JP
2183 if ((flags3 & RF3_RES_TELE) && !(r_ptr->flags1 & RF1_UNIQUE)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È";color[vn++] = TERM_ORANGE;}
2184 #else
2185  if ((flags3 & RF3_RES_TELE) && !(r_ptr->flags1 & RF1_UNIQUE)) {vp[vn] = "teleportation";color[vn++] = TERM_ORANGE;}
2186 #endif
2187
2188
2189         /* Describe resistances */
2190         if (vn)
2191         {
2192                 /* Intro */
2193 #ifdef JP
2194                 hooked_roff(format("%^s¤Ï", wd_he[msex]));
2195 #else
2196                 hooked_roff(format("%^s", wd_he[msex]));
2197 #endif
2198
2199
2200                 /* Scan */
2201                 for (n = 0; n < vn; n++)
2202                 {
2203                         /* Intro */
2204 #ifdef JP
2205                         if ( n != 0 ) hooked_roff("¤È");
2206 #else
2207                         if (n == 0) hooked_roff(" resists ");
2208                         else if (n < vn-1) hooked_roff(", ");
2209                         else hooked_roff(" and ");
2210 #endif
2211
2212
2213                         /* Dump */
2214                         hook_c_roff(color[n], vp[n]);
2215                 }
2216
2217                 /* End */
2218 #ifdef JP
2219                 hooked_roff("¤ÎÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£");
2220 #else
2221                 hooked_roff(".  ");
2222 #endif
2223
2224         }
2225
2226
2227         if ((r_ptr->r_xtra1 & MR1_SINKA) || know_everything)
2228         {
2229                 if (r_ptr->next_r_idx)
2230                 {
2231 #ifdef JP
2232                         hooked_roff(format("%^s¤Ï·Ð¸³¤òÀѤà¤È¡¢", wd_he[msex]));
2233 #else
2234                         hooked_roff(format("%^s will evolve into ", wd_he[msex]));
2235 #endif
2236                         hook_c_roff(TERM_YELLOW, format("%s", r_name+r_info[r_ptr->next_r_idx].name));
2237 #ifdef JP
2238                         hooked_roff(format("¤Ë¿Ê²½¤¹¤ë¡£"));
2239 #else
2240                         hooked_roff(format(" when %s gets enugh experience.  ", wd_he[msex]));
2241 #endif
2242                 }
2243                 else if (!(r_ptr->flags1 & RF1_UNIQUE))
2244                 {
2245 #ifdef JP
2246                         hooked_roff(format("%s¤Ï¿Ê²½¤·¤Ê¤¤¡£", wd_he[msex]));
2247 #else
2248                         hooked_roff(format("%s won't evolve.  ", wd_he[msex]));
2249 #endif
2250                 }
2251         }
2252
2253         /* Collect non-effects */
2254         vn = 0;
2255 #ifdef JP
2256 if (flags3 & RF3_NO_STUN)  {vp[vn] = "Û¯Û°¤È¤·¤Ê¤¤";color[vn++] = TERM_ORANGE;}
2257 #else
2258  if (flags3 & RF3_NO_STUN)  {vp[vn] = "stunned";color[vn++] = TERM_ORANGE;}
2259 #endif
2260
2261 #ifdef JP
2262 if (flags3 & RF3_NO_FEAR)  {vp[vn] = "¶²Éݤò´¶¤¸¤Ê¤¤";color[vn++] = TERM_SLATE;}
2263 #else
2264  if (flags3 & RF3_NO_FEAR)  {vp[vn] = "frightened";color[vn++] = TERM_SLATE;}
2265 #endif
2266
2267 #ifdef JP
2268 if (flags3 & RF3_NO_CONF)  {vp[vn] = "º®Í𤷤ʤ¤";color[vn++] = TERM_L_UMBER;}
2269 #else
2270  if (flags3 & RF3_NO_CONF)  {vp[vn] = "confused";color[vn++] = TERM_L_UMBER;}
2271 #endif
2272
2273 #ifdef JP
2274 if (flags3 & RF3_NO_SLEEP) {vp[vn] = "̲¤é¤µ¤ì¤Ê¤¤";color[vn++] = TERM_BLUE;}
2275 #else
2276  if (flags3 & RF3_NO_SLEEP) {vp[vn] = "slept";color[vn++] = TERM_BLUE;}
2277 #endif
2278
2279 #ifdef JP
2280 if ((flags3 & RF3_RES_TELE) && (r_ptr->flags1 & RF1_UNIQUE)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È¤µ¤ì¤Ê¤¤";color[vn++] = TERM_ORANGE;}
2281 #else
2282  if ((flags3 & RF3_RES_TELE) && (r_ptr->flags1 & RF1_UNIQUE)) {vp[vn] = "teleported";color[vn++] = TERM_ORANGE;}
2283 #endif
2284
2285         /* Describe non-effects */
2286         if (vn)
2287         {
2288                 /* Intro */
2289 #ifdef JP
2290                 hooked_roff(format("%^s¤Ï", wd_he[msex]));
2291 #else
2292                 hooked_roff(format("%^s", wd_he[msex]));
2293 #endif
2294
2295
2296                 /* Scan */
2297                 for (n = 0; n < vn; n++)
2298                 {
2299                         /* Intro */
2300 #ifdef JP
2301                         if ( n != 0 ) hooked_roff("¤·¡¢");
2302 #else
2303                         if (n == 0) hooked_roff(" cannot be ");
2304                         else if (n < vn - 1) hooked_roff(", ");
2305                         else hooked_roff(" or ");
2306 #endif
2307
2308
2309                         /* Dump */
2310                         hook_c_roff(color[n], vp[n]);
2311                 }
2312
2313                 /* End */
2314 #ifdef JP
2315                 hooked_roff("¡£");
2316 #else
2317                 hooked_roff(".  ");
2318 #endif
2319
2320         }
2321
2322
2323         /* Do we know how aware it is? */
2324         if ((((int)r_ptr->r_wake * (int)r_ptr->r_wake) > r_ptr->sleep) ||
2325                   (r_ptr->r_ignore == MAX_UCHAR) ||
2326             (r_ptr->sleep == 0 && r_ptr->r_tkills >= 10) || know_everything)
2327         {
2328                 cptr act;
2329
2330                 if (r_ptr->sleep > 200)
2331                 {
2332 #ifdef JP
2333                         act = "¤ò̵»ë¤·¤¬¤Á¤Ç¤¢¤ë¤¬";
2334 #else
2335                         act = "prefers to ignore";
2336 #endif
2337
2338                 }
2339                 else if (r_ptr->sleep > 95)
2340                 {
2341 #ifdef JP
2342                         act = "¤ËÂФ·¤Æ¤Û¤È¤ó¤ÉÃí°Õ¤òʧ¤ï¤Ê¤¤¤¬";
2343 #else
2344                         act = "pays very little attention to";
2345 #endif
2346
2347                 }
2348                 else if (r_ptr->sleep > 75)
2349                 {
2350 #ifdef JP
2351                         act = "¤ËÂФ·¤Æ¤¢¤Þ¤êÃí°Õ¤òʧ¤ï¤Ê¤¤¤¬";
2352 #else
2353                         act = "pays little attention to";
2354 #endif
2355
2356                 }
2357                 else if (r_ptr->sleep > 45)
2358                 {
2359 #ifdef JP
2360                         act = "¤ò¸«²á¤´¤·¤¬¤Á¤Ç¤¢¤ë¤¬";
2361 #else
2362                         act = "tends to overlook";
2363 #endif
2364
2365                 }
2366                 else if (r_ptr->sleep > 25)
2367                 {
2368 #ifdef JP
2369                         act = "¤ò¤Û¤ó¤Î¾¯¤·¤Ï¸«¤Æ¤ª¤ê";
2370 #else
2371                         act = "takes quite a while to see";
2372 #endif
2373
2374                 }
2375                 else if (r_ptr->sleep > 10)
2376                 {
2377 #ifdef JP
2378                         act = "¤ò¤·¤Ð¤é¤¯¤Ï¸«¤Æ¤ª¤ê";
2379 #else
2380                         act = "takes a while to see";
2381 #endif
2382
2383                 }
2384                 else if (r_ptr->sleep > 5)
2385                 {
2386 #ifdef JP
2387                         act = "¤ò´öʬÃí°Õ¿¼¤¯¸«¤Æ¤ª¤ê";
2388 #else
2389                         act = "is fairly observant of";
2390 #endif
2391
2392                 }
2393                 else if (r_ptr->sleep > 3)
2394                 {
2395 #ifdef JP
2396                         act = "¤òÃí°Õ¿¼¤¯¸«¤Æ¤ª¤ê";
2397 #else
2398                         act = "is observant of";
2399 #endif
2400
2401                 }
2402                 else if (r_ptr->sleep > 1)
2403                 {
2404 #ifdef JP
2405                         act = "¤ò¤«¤Ê¤êÃí°Õ¿¼¤¯¸«¤Æ¤ª¤ê";
2406 #else
2407                         act = "is very observant of";
2408 #endif
2409
2410                 }
2411                 else if (r_ptr->sleep > 0)
2412                 {
2413 #ifdef JP
2414                         act = "¤ò·Ù²ü¤·¤Æ¤ª¤ê";
2415 #else
2416                         act = "is vigilant for";
2417 #endif
2418
2419                 }
2420                 else
2421                 {
2422 #ifdef JP
2423                         act = "¤ò¤«¤Ê¤ê·Ù²ü¤·¤Æ¤ª¤ê";
2424 #else
2425                         act = "is ever vigilant for";
2426 #endif
2427
2428                 }
2429
2430 #ifdef JP
2431                 hooked_roff(format("%^s¤Ï¿¯Æþ¼Ô%s¡¢ %d ¥Õ¥£¡¼¥ÈÀ褫¤é¿¯Æþ¼Ô¤Ëµ¤ÉÕ¤¯¤³¤È¤¬¤¢¤ë¡£",
2432                      wd_he[msex], act, 10 * r_ptr->aaf));
2433 #else
2434                 hooked_roff(format("%^s %s intruders, which %s may notice from %d feet.  ",
2435                             wd_he[msex], act, wd_he[msex], 10 * r_ptr->aaf));
2436 #endif
2437
2438         }
2439
2440
2441         /* Drops gold and/or items */
2442         if (drop_gold || drop_item)
2443         {
2444                 /* Intro */
2445 #ifdef JP
2446                 hooked_roff(format("%^s¤Ï", wd_he[msex]));
2447 #else
2448                 hooked_roff(format("%^s may carry", wd_he[msex]));
2449
2450                 /* No "n" needed */
2451                 sin = FALSE;
2452 #endif
2453
2454
2455                 /* Count maximum drop */
2456                 n = MAX(drop_gold, drop_item);
2457
2458                 /* One drop (may need an "n") */
2459                 if (n == 1)
2460                 {
2461 #ifdef JP
2462                         hooked_roff("°ì¤Ä¤Î");
2463 #else
2464                         hooked_roff(" a");
2465                         sin = TRUE;
2466 #endif
2467                 }
2468
2469                 /* Two drops */
2470                 else if (n == 2)
2471                 {
2472 #ifdef JP
2473                         hooked_roff("°ì¤Ä¤«Æó¤Ä¤Î");
2474 #else
2475                         hooked_roff(" one or two");
2476 #endif
2477
2478                 }
2479
2480                 /* Many drops */
2481                 else
2482                 {
2483 #ifdef JP
2484                         hooked_roff(format(" %d ¸Ä¤Þ¤Ç¤Î", n));
2485 #else
2486                         hooked_roff(format(" up to %d", n));
2487 #endif
2488
2489                 }
2490
2491
2492                 /* Great */
2493                 if (flags1 & RF1_DROP_GREAT)
2494                 {
2495 #ifdef JP
2496                         p = "ÆÃÊ̤Ê";
2497 #else
2498                         p = " exceptional";
2499 #endif
2500
2501                 }
2502
2503                 /* Good (no "n" needed) */
2504                 else if (flags1 & RF1_DROP_GOOD)
2505                 {
2506 #ifdef JP
2507                         p = "¾å¼Á¤Ê";
2508 #else
2509                         p = " good";
2510                         sin = FALSE;
2511 #endif
2512                 }
2513
2514                 /* Okay */
2515                 else
2516                 {
2517                         p = NULL;
2518                 }
2519
2520
2521                 /* Objects */
2522                 if (drop_item)
2523                 {
2524                         /* Handle singular "an" */
2525 #ifndef JP
2526                         if (sin) hooked_roff("n");
2527                         sin = FALSE;
2528 #endif
2529
2530                         /* Dump "object(s)" */
2531                         if (p) hooked_roff(p);
2532 #ifdef JP
2533                         hooked_roff("¥¢¥¤¥Æ¥à");
2534 #else
2535                         hooked_roff(" object");
2536                         if (n != 1) hooked_roff("s");
2537 #endif
2538
2539
2540                         /* Conjunction replaces variety, if needed for "gold" below */
2541 #ifdef JP
2542                         p = "¤ä";
2543 #else
2544                         p = " or";
2545 #endif
2546
2547                 }
2548
2549                 /* Treasures */
2550                 if (drop_gold)
2551                 {
2552 #ifndef JP
2553                         /* Cancel prefix */
2554                         if (!p) sin = FALSE;
2555
2556                         /* Handle singular "an" */
2557                         if (sin) hooked_roff("n");
2558                         sin = FALSE;
2559 #endif
2560
2561                         /* Dump "treasure(s)" */
2562                         if (p) hooked_roff(p);
2563 #ifdef JP
2564                         hooked_roff("ºâÊõ");
2565 #else
2566                         hooked_roff(" treasure");
2567                         if (n != 1) hooked_roff("s");
2568 #endif
2569
2570                 }
2571
2572                 /* End this sentence */
2573 #ifdef JP
2574                 hooked_roff("¤ò»ý¤Ã¤Æ¤¤¤ë¤³¤È¤¬¤¢¤ë¡£");
2575 #else
2576                 hooked_roff(".  ");
2577 #endif
2578
2579         }
2580
2581
2582         /* Count the number of "known" attacks */
2583         for (n = 0, m = 0; m < 4; m++)
2584         {
2585                 /* Skip non-attacks */
2586                 if (!r_ptr->blow[m].method) continue;
2587                 if (r_ptr->blow[m].method == RBM_SHOOT) continue;
2588
2589                 /* Count known attacks */
2590                 if (r_ptr->r_blows[m] || know_everything) n++;
2591         }
2592
2593         /* Examine (and count) the actual attacks */
2594         for (r = 0, m = 0; m < 4; m++)
2595         {
2596                 int method, effect, d1, d2;
2597
2598                 /* Skip non-attacks */
2599                 if (!r_ptr->blow[m].method) continue;
2600                 if (r_ptr->blow[m].method == RBM_SHOOT) continue;
2601
2602                 /* Skip unknown attacks */
2603                 if (!r_ptr->r_blows[m] && !know_everything) continue;
2604
2605                 /* Extract the attack info */
2606                 method = r_ptr->blow[m].method;
2607                 effect = r_ptr->blow[m].effect;
2608                 d1 = r_ptr->blow[m].d_dice;
2609                 d2 = r_ptr->blow[m].d_side;
2610
2611                 /* No method yet */
2612                 p = NULL;
2613
2614                 /* Acquire the method */
2615                 switch (method)
2616                 {
2617 #ifdef JP
2618 case RBM_HIT:           p = "²¥¤ë"; break;
2619 #else
2620                         case RBM_HIT:           p = "hit"; break;
2621 #endif
2622
2623 #ifdef JP
2624 case RBM_TOUCH:         p = "¿¨¤ë"; break;
2625 #else
2626                         case RBM_TOUCH:         p = "touch"; break;
2627 #endif
2628
2629 #ifdef JP
2630 case RBM_PUNCH:         p = "¥Ñ¥ó¥Á¤¹¤ë"; break;
2631 #else
2632                         case RBM_PUNCH:         p = "punch"; break;
2633 #endif
2634
2635 #ifdef JP
2636 case RBM_KICK:          p = "½³¤ë"; break;
2637 #else
2638                         case RBM_KICK:          p = "kick"; break;
2639 #endif
2640
2641 #ifdef JP
2642 case RBM_CLAW:          p = "¤Ò¤Ã¤«¤¯"; break;
2643 #else
2644                         case RBM_CLAW:          p = "claw"; break;
2645 #endif
2646
2647 #ifdef JP
2648 case RBM_BITE:          p = "³ú¤à"; break;
2649 #else
2650                         case RBM_BITE:          p = "bite"; break;
2651 #endif
2652
2653 #ifdef JP
2654 case RBM_STING:         p = "»É¤¹"; break;
2655 #else
2656                         case RBM_STING:         p = "sting"; break;
2657 #endif
2658
2659 #ifdef JP
2660 case RBM_SLASH:         p = "»Â¤ë"; break;
2661 #else
2662                         case RBM_SLASH:         p = "slash"; break;
2663 #endif
2664
2665 #ifdef JP
2666 case RBM_BUTT:          p = "³Ñ¤ÇÆͤ¯"; break;
2667 #else
2668                         case RBM_BUTT:          p = "butt"; break;
2669 #endif
2670
2671 #ifdef JP
2672 case RBM_CRUSH:         p = "ÂÎÅö¤¿¤ê¤¹¤ë"; break;
2673 #else
2674                         case RBM_CRUSH:         p = "crush"; break;
2675 #endif
2676
2677 #ifdef JP
2678 case RBM_ENGULF:        p = "°û¤ß¹þ¤à"; break;
2679 #else
2680                         case RBM_ENGULF:        p = "engulf"; break;
2681 #endif
2682
2683 #ifdef JP
2684 case RBM_CHARGE:        p = "ÀÁµá½ñ¤ò¤è¤³¤¹"; break;
2685 #else
2686                         case RBM_CHARGE:        p = "charge";   break;
2687 #endif
2688
2689 #ifdef JP
2690 case RBM_CRAWL:         p = "ÂΤξå¤òÇ礤²ó¤ë"; break;
2691 #else
2692                         case RBM_CRAWL:         p = "crawl on you"; break;
2693 #endif
2694
2695 #ifdef JP
2696 case RBM_DROOL:         p = "¤è¤À¤ì¤ò¤¿¤é¤¹"; break;
2697 #else
2698                         case RBM_DROOL:         p = "drool on you"; break;
2699 #endif
2700
2701 #ifdef JP
2702 case RBM_SPIT:          p = "¤Ä¤Ð¤òÅǤ¯"; break;
2703 #else
2704                         case RBM_SPIT:          p = "spit"; break;
2705 #endif
2706
2707 #ifdef JP
2708 case RBM_EXPLODE:       p = "Çúȯ¤¹¤ë"; break;
2709 #else
2710                         case RBM_EXPLODE:       p = "explode"; break;
2711 #endif
2712
2713 #ifdef JP
2714 case RBM_GAZE:          p = "¤Ë¤é¤à"; break;
2715 #else
2716                         case RBM_GAZE:          p = "gaze"; break;
2717 #endif
2718
2719 #ifdef JP
2720 case RBM_WAIL:          p = "µã¤­¶«¤Ö"; break;
2721 #else
2722                         case RBM_WAIL:          p = "wail"; break;
2723 #endif
2724
2725 #ifdef JP
2726 case RBM_SPORE:         p = "˦»Ò¤òÈô¤Ð¤¹"; break;
2727 #else
2728                         case RBM_SPORE:         p = "release spores"; break;
2729 #endif
2730
2731                         case RBM_XXX4:          break;
2732 #ifdef JP
2733 case RBM_BEG:           p = "¶â¤ò¤»¤¬¤à"; break;
2734 #else
2735                         case RBM_BEG:           p = "beg"; break;
2736 #endif
2737
2738 #ifdef JP
2739 case RBM_INSULT:        p = "Éî¿«¤¹¤ë"; break;
2740 #else
2741                         case RBM_INSULT:        p = "insult"; break;
2742 #endif
2743
2744 #ifdef JP
2745 case RBM_MOAN:          p = "¤¦¤á¤¯"; break;
2746 #else
2747                         case RBM_MOAN:          p = "moan"; break;
2748 #endif
2749
2750 #ifdef JP
2751 case RBM_SHOW:          p = "²Î¤¦"; break;
2752 #else
2753                         case RBM_SHOW:          p = "sing"; break;
2754 #endif
2755
2756                 }
2757
2758
2759                 /* Default effect */
2760                 q = NULL;
2761
2762                 /* Acquire the effect */
2763                 switch (effect)
2764                 {
2765 #ifdef JP
2766 case RBE_SUPERHURT:
2767 case RBE_HURT:          q = "¹¶·â¤¹¤ë"; break;
2768 #else
2769                         case RBE_SUPERHURT:
2770                         case RBE_HURT:          q = "attack"; break;
2771 #endif
2772
2773 #ifdef JP
2774 case RBE_POISON:        q = "ÆǤò¤¯¤é¤ï¤¹"; break;
2775 #else
2776                         case RBE_POISON:        q = "poison"; break;
2777 #endif
2778
2779 #ifdef JP
2780 case RBE_UN_BONUS:      q = "Îô²½¤µ¤»¤ë"; break;
2781 #else
2782                         case RBE_UN_BONUS:      q = "disenchant"; break;
2783 #endif
2784
2785 #ifdef JP
2786 case RBE_UN_POWER:      q = "ËâÎϤòµÛ¤¤¼è¤ë"; break;
2787 #else
2788                         case RBE_UN_POWER:      q = "drain charges"; break;
2789 #endif
2790
2791 #ifdef JP
2792 case RBE_EAT_GOLD:      q = "¶â¤òÅð¤à"; break;
2793 #else
2794                         case RBE_EAT_GOLD:      q = "steal gold"; break;
2795 #endif
2796
2797 #ifdef JP
2798 case RBE_EAT_ITEM:      q = "¥¢¥¤¥Æ¥à¤òÅð¤à"; break;
2799 #else
2800                         case RBE_EAT_ITEM:      q = "steal items"; break;
2801 #endif
2802
2803 #ifdef JP
2804 case RBE_EAT_FOOD:      q = "¤¢¤Ê¤¿¤Î¿©ÎÁ¤ò¿©¤Ù¤ë"; break;
2805 #else
2806                         case RBE_EAT_FOOD:      q = "eat your food"; break;
2807 #endif
2808
2809 #ifdef JP
2810 case RBE_EAT_LITE:      q = "ÌÀ¤«¤ê¤òµÛ¼ý¤¹¤ë"; break;
2811 #else
2812                         case RBE_EAT_LITE:      q = "absorb light"; break;
2813 #endif
2814
2815 #ifdef JP
2816 case RBE_ACID:          q = "»À¤òÈô¤Ð¤¹"; break;
2817 #else
2818                         case RBE_ACID:          q = "shoot acid"; break;
2819 #endif
2820
2821 #ifdef JP
2822 case RBE_ELEC:          q = "´¶ÅŤµ¤»¤ë"; break;
2823 #else
2824                         case RBE_ELEC:          q = "electrocute"; break;
2825 #endif
2826
2827 #ifdef JP
2828 case RBE_FIRE:          q = "dz¤ä¤¹"; break;
2829 #else
2830                         case RBE_FIRE:          q = "burn"; break;
2831 #endif
2832
2833 #ifdef JP
2834 case RBE_COLD:          q = "Åà¤é¤»¤ë"; break;
2835 #else
2836                         case RBE_COLD:          q = "freeze"; break;
2837 #endif
2838
2839 #ifdef JP
2840 case RBE_BLIND:         q = "ÌÕÌܤˤ¹¤ë"; break;
2841 #else
2842                         case RBE_BLIND:         q = "blind"; break;
2843 #endif
2844
2845 #ifdef JP
2846 case RBE_CONFUSE:       q = "º®Í𤵤»¤ë"; break;
2847 #else
2848                         case RBE_CONFUSE:       q = "confuse"; break;
2849 #endif
2850
2851 #ifdef JP
2852 case RBE_TERRIFY:       q = "¶²Éݤµ¤»¤ë"; break;
2853 #else
2854                         case RBE_TERRIFY:       q = "terrify"; break;
2855 #endif
2856
2857 #ifdef JP
2858 case RBE_PARALYZE:      q = "Ëãá㤵¤»¤ë"; break;
2859 #else
2860                         case RBE_PARALYZE:      q = "paralyze"; break;
2861 #endif
2862
2863 #ifdef JP
2864 case RBE_LOSE_STR:      q = "ÏÓÎϤò¸º¾¯¤µ¤»¤ë"; break;
2865 #else
2866                         case RBE_LOSE_STR:      q = "reduce strength"; break;
2867 #endif
2868
2869 #ifdef JP
2870 case RBE_LOSE_INT:      q = "ÃÎǽ¤ò¸º¾¯¤µ¤»¤ë"; break;
2871 #else
2872                         case RBE_LOSE_INT:      q = "reduce intelligence"; break;
2873 #endif
2874
2875 #ifdef JP
2876 case RBE_LOSE_WIS:      q = "¸­¤µ¤ò¸º¾¯¤µ¤»¤ë"; break;
2877 #else
2878                         case RBE_LOSE_WIS:      q = "reduce wisdom"; break;
2879 #endif
2880
2881 #ifdef JP
2882 case RBE_LOSE_DEX:      q = "´ïÍѤµ¤ò¸º¾¯¤µ¤»¤ë"; break;
2883 #else
2884                         case RBE_LOSE_DEX:      q = "reduce dexterity"; break;
2885 #endif
2886
2887 #ifdef JP
2888 case RBE_LOSE_CON:      q = "Âѵ×ÎϤò¸º¾¯¤µ¤»¤ë"; break;
2889 #else
2890                         case RBE_LOSE_CON:      q = "reduce constitution"; break;
2891 #endif
2892
2893 #ifdef JP
2894 case RBE_LOSE_CHR:      q = "Ì¥ÎϤò¸º¾¯¤µ¤»¤ë"; break;
2895 #else
2896                         case RBE_LOSE_CHR:      q = "reduce charisma"; break;
2897 #endif
2898
2899 #ifdef JP
2900 case RBE_LOSE_ALL:      q = "Á´¥¹¥Æ¡¼¥¿¥¹¤ò¸º¾¯¤µ¤»¤ë"; break;
2901 #else
2902                         case RBE_LOSE_ALL:      q = "reduce all stats"; break;
2903 #endif
2904
2905 #ifdef JP
2906 case RBE_SHATTER:       q = "Ê´ºÕ¤¹¤ë"; break;
2907 #else
2908                         case RBE_SHATTER:       q = "shatter"; break;
2909 #endif
2910
2911 #ifdef JP
2912 case RBE_EXP_10:        q = "·Ð¸³Ãͤò¸º¾¯(10d6+)¤µ¤»¤ë"; break;
2913 #else
2914                         case RBE_EXP_10:        q = "lower experience (by 10d6+)"; break;
2915 #endif
2916
2917 #ifdef JP
2918 case RBE_EXP_20:        q = "·Ð¸³Ãͤò¸º¾¯(20d6+)¤µ¤»¤ë"; break;
2919 #else
2920                         case RBE_EXP_20:        q = "lower experience (by 20d6+)"; break;
2921 #endif
2922
2923 #ifdef JP
2924 case RBE_EXP_40:        q = "·Ð¸³Ãͤò¸º¾¯(40d6+)¤µ¤»¤ë"; break;
2925 #else
2926                         case RBE_EXP_40:        q = "lower experience (by 40d6+)"; break;
2927 #endif
2928
2929 #ifdef JP
2930 case RBE_EXP_80:        q = "·Ð¸³Ãͤò¸º¾¯(80d6+)¤µ¤»¤ë"; break;
2931 #else
2932                         case RBE_EXP_80:        q = "lower experience (by 80d6+)"; break;
2933 #endif
2934
2935 #ifdef JP
2936 case RBE_DISEASE:       q = "ɵ¤¤Ë¤¹¤ë"; break;
2937 #else
2938                         case RBE_DISEASE:       q = "disease"; break;
2939 #endif
2940
2941 #ifdef JP
2942 case RBE_TIME:      q = "»þ´Ö¤òµÕÌá¤ê¤µ¤»¤ë"; break;
2943 #else
2944                         case RBE_TIME:      q = "time"; break;
2945 #endif
2946
2947 #ifdef JP
2948 case RBE_EXP_VAMP:  q = "À¸Ì¿ÎϤòµÛ¼ý¤¹¤ë"; break;
2949 #else
2950                         case RBE_EXP_VAMP:  q = "drain life force"; break;
2951 #endif
2952
2953 #ifdef JP
2954 case RBE_DR_MANA:  q = "ËâÎϤòÃ¥¤¦"; break;
2955 #else
2956                         case RBE_DR_MANA:  q = "drain mana force"; break;
2957 #endif
2958
2959                 }
2960
2961
2962 #ifdef JP
2963                 if ( r == 0 ) hooked_roff( format("%^s¤Ï", wd_he[msex]) );
2964
2965                 /***¼ã´³É½¸½¤òÊѹ¹ ita ***/
2966
2967                         /* Describe damage (if known) */
2968                 if (d1 && d2 && (know_everything || know_damage(r_idx, m)))
2969                   {
2970                     
2971                     /* Display the damage */
2972                     hooked_roff(format(" %dd%d ", d1, d2));
2973                     hooked_roff("¤Î¥À¥á¡¼¥¸¤Ç");
2974                   }
2975                 /* Hack -- force a method */
2976                 if (!p) p = "²¿¤«´ñ̯¤Ê¤³¤È¤ò¤¹¤ë";
2977
2978                 /* Describe the method */
2979                 /* XX¤·¤ÆYY¤·/XX¤·¤ÆYY¤¹¤ë/XX¤·/XX¤¹¤ë */
2980                 if(q) jverb( p ,jverb_buf, JVERB_TO);
2981                 else if(r!=n-1) jverb( p ,jverb_buf, JVERB_AND);
2982                 else strcpy(jverb_buf, p);
2983
2984                 hooked_roff(jverb_buf);
2985
2986                 /* Describe the effect (if any) */
2987                 if (q)
2988                 {
2989                   if(r!=n-1) jverb( q,jverb_buf, JVERB_AND);
2990                   else strcpy(jverb_buf,q); 
2991                   hooked_roff(jverb_buf);
2992                 }
2993                 if(r!=n-1) hooked_roff("¡¢");
2994 #else
2995                 /* Introduce the attack description */
2996                 if (!r)
2997                 {
2998                         hooked_roff(format("%^s can ", wd_he[msex]));
2999                 }
3000                 else if (r < n-1)
3001                 {
3002                         hooked_roff(", ");
3003                 }
3004                 else
3005                 {
3006                         hooked_roff(", and ");
3007                 }
3008
3009
3010                 /* Hack -- force a method */
3011                 if (!p) p = "do something weird";
3012
3013                 /* Describe the method */
3014                 hooked_roff(p);
3015
3016
3017                 /* Describe the effect (if any) */
3018                 if (q)
3019                 {
3020                         /* Describe the attack type */
3021                         hooked_roff(" to ");
3022                         hooked_roff(q);
3023
3024                         /* Describe damage (if known) */
3025                         if (d1 && d2 && (know_everything || know_damage(r_idx, m)))
3026                         {
3027                                 /* Display the damage */
3028                                 hooked_roff(" with damage");
3029                                 hooked_roff(format(" %dd%d", d1, d2));
3030                         }
3031                 }
3032 #endif
3033
3034
3035
3036                 /* Count the attacks as printed */
3037                 r++;
3038         }
3039
3040         /* Finish sentence above */
3041         if (r)
3042         {
3043 #ifdef JP
3044                 hooked_roff("¡£");
3045 #else
3046                 hooked_roff(".  ");
3047 #endif
3048
3049         }
3050
3051         /* Notice lack of attacks */
3052         else if (flags1 & RF1_NEVER_BLOW)
3053         {
3054 #ifdef JP
3055                 hooked_roff(format("%^s¤ÏʪÍýŪ¤Ê¹¶·âÊýË¡¤ò»ý¤¿¤Ê¤¤¡£", wd_he[msex]));
3056 #else
3057                 hooked_roff(format("%^s has no physical attacks.  ", wd_he[msex]));
3058 #endif
3059
3060         }
3061
3062         /* Or describe the lack of knowledge */
3063         else
3064         {
3065 #ifdef JP
3066                 hooked_roff(format("%s¹¶·â¤Ë¤Ä¤¤¤Æ¤Ï²¿¤âÃΤé¤Ê¤¤¡£", wd_his[msex]));
3067 #else
3068                 hooked_roff(format("Nothing is known about %s attack.  ", wd_his[msex]));
3069 #endif
3070
3071         }
3072
3073
3074         /*
3075          * Notice "Quest" monsters, but only if you
3076          * already encountered the monster.
3077          */
3078         if ((flags1 & RF1_QUESTOR) && ((r_ptr->r_sights) && (r_ptr->max_num) && ((r_idx == MON_OBERON) || (r_idx == MON_SERPENT))))
3079         {
3080 #ifdef JP
3081                 hook_c_roff(TERM_VIOLET, "¤¢¤Ê¤¿¤Ï¤³¤Î¥â¥ó¥¹¥¿¡¼¤ò»¦¤·¤¿¤¤¤È¤¤¤¦¶¯¤¤Íß˾¤ò´¶¤¸¤Æ¤¤¤ë...");
3082 #else
3083                 hook_c_roff(TERM_VIOLET, "You feel an intense desire to kill this monster...  ");
3084 #endif
3085
3086         }
3087
3088         else if (flags7 & RF7_GUARDIAN)
3089         {
3090 #ifdef JP
3091                 hook_c_roff(TERM_L_RED, "¤³¤Î¥â¥ó¥¹¥¿¡¼¤Ï¥À¥ó¥¸¥ç¥ó¤Î¼ç¤Ç¤¢¤ë¡£");
3092 #else
3093                 hook_c_roff(TERM_L_RED, "This monster is the master of a dungeon.");
3094 #endif
3095
3096         }
3097
3098
3099         /* All done */
3100         hooked_roff("\n");
3101
3102 }
3103
3104
3105
3106 /*
3107  * Hack -- Display the "name" and "attr/chars" of a monster race
3108  */
3109 void roff_top(int r_idx)
3110 {
3111         monster_race    *r_ptr = &r_info[r_idx];
3112
3113         byte            a1, a2;
3114         char            c1, c2;
3115
3116
3117         /* Access the chars */
3118         c1 = r_ptr->d_char;
3119         c2 = r_ptr->x_char;
3120
3121         /* Access the attrs */
3122         a1 = r_ptr->d_attr;
3123         a2 = r_ptr->x_attr;
3124
3125
3126         /* Clear the top line */
3127         Term_erase(0, 0, 255);
3128
3129         /* Reset the cursor */
3130         Term_gotoxy(0, 0);
3131
3132 #ifndef JP
3133         /* A title (use "The" for non-uniques) */
3134         if (!(r_ptr->flags1 & RF1_UNIQUE))
3135         {
3136                 Term_addstr(-1, TERM_WHITE, "The ");
3137         }
3138 #endif
3139
3140         /* Dump the name */
3141         Term_addstr(-1, TERM_WHITE, (r_name + r_ptr->name));
3142
3143         /* Append the "standard" attr/char info */
3144         Term_addstr(-1, TERM_WHITE, " ('");
3145         Term_addch(a1, c1);
3146         if (use_bigtile && (a1 & 0x80)) Term_addch(255, -1);
3147         Term_addstr(-1, TERM_WHITE, "')");
3148
3149         /* Append the "optional" attr/char info */
3150         Term_addstr(-1, TERM_WHITE, "/('");
3151         Term_addch(a2, c2);
3152         if (use_bigtile && (a2 & 0x80)) Term_addch(255, -1);
3153         Term_addstr(-1, TERM_WHITE, "'):");
3154
3155         /* Wizards get extra info */
3156         if (p_ptr->wizard)
3157         {
3158                 char buf[6];
3159
3160                 sprintf(buf, "%d", r_idx);
3161
3162                 Term_addstr(-1, TERM_WHITE, " (");
3163                 Term_addstr(-1, TERM_L_BLUE, buf);
3164                 Term_addch(TERM_WHITE, ')');
3165         }
3166 }
3167
3168
3169
3170 /*
3171  * Hack -- describe the given monster race at the top of the screen
3172  */
3173 void screen_roff(int r_idx, int mode)
3174 {
3175         /* Flush messages */
3176         msg_print(NULL);
3177
3178         /* Begin recall */
3179         Term_erase(0, 1, 255);
3180
3181         hook_c_roff = c_roff;
3182
3183         /* Recall monster */
3184         roff_aux(r_idx, mode);
3185
3186         /* Describe monster */
3187         roff_top(r_idx);
3188 }
3189
3190
3191
3192
3193 /*
3194  * Hack -- describe the given monster race in the current "term" window
3195  */
3196 void display_roff(int r_idx)
3197 {
3198         int y;
3199
3200         /* Erase the window */
3201         for (y = 0; y < Term->hgt; y++)
3202         {
3203                 /* Erase the line */
3204                 Term_erase(0, y, 255);
3205         }
3206
3207         /* Begin recall */
3208         Term_gotoxy(0, 1);
3209
3210         hook_c_roff = c_roff;
3211
3212         /* Recall monster */
3213         roff_aux(r_idx, 0);
3214
3215         /* Describe monster */
3216         roff_top(r_idx);
3217 }
3218
3219
3220
3221 /*
3222  * Hack -- output description of the given monster race
3223  */
3224 void output_monster_spoiler(int r_idx, void (*roff_func)(byte attr, cptr str))
3225 {
3226         hook_c_roff = roff_func;
3227
3228         /* Recall monster */
3229         roff_aux(r_idx, 0x03);
3230 }
3231
3232
3233 bool monster_quest(int r_idx)
3234 {
3235         monster_race *r_ptr = &r_info[r_idx];
3236
3237         /* Random quests are in the dungeon */
3238         if (r_ptr->flags8 & RF8_WILD_ONLY) return FALSE;
3239
3240         /* No random quests for aquatic monsters */
3241         if (r_ptr->flags7 & RF7_AQUATIC) return FALSE;
3242
3243         /* No random quests for multiplying monsters */
3244         if (r_ptr->flags2 & RF2_MULTIPLY) return FALSE;
3245
3246         /* No quests to kill friendly monsters */
3247         if (r_ptr->flags7 & RF7_FRIENDLY) return FALSE;
3248
3249         return TRUE;
3250 }
3251
3252
3253 bool monster_dungeon(int r_idx)
3254 {
3255         monster_race *r_ptr = &r_info[r_idx];
3256
3257         if (!(r_ptr->flags8 & RF8_WILD_ONLY))
3258                 return TRUE;
3259         else
3260         {
3261                 dungeon_info_type *d_ptr = &d_info[dungeon_type];
3262                 if ((d_ptr->mflags8 & RF8_WILD_MOUNTAIN) &&
3263                     (r_ptr->flags8 & RF8_WILD_MOUNTAIN)) return TRUE;
3264                 return FALSE;
3265         }
3266 }
3267
3268
3269 bool monster_ocean(int r_idx)
3270 {
3271         monster_race *r_ptr = &r_info[r_idx];
3272
3273         if (r_ptr->flags8 & RF8_WILD_OCEAN)
3274                 return TRUE;
3275         else
3276                 return FALSE;
3277 }
3278
3279
3280 bool monster_shore(int r_idx)
3281 {
3282         monster_race *r_ptr = &r_info[r_idx];
3283
3284         if (r_ptr->flags8 & RF8_WILD_SHORE)
3285                 return TRUE;
3286         else
3287                 return FALSE;
3288 }
3289
3290
3291 static bool monster_waste(int r_idx)
3292 {
3293         monster_race *r_ptr = &r_info[r_idx];
3294
3295         if (r_ptr->flags8 & (RF8_WILD_WASTE | RF8_WILD_ALL))
3296                 return TRUE;
3297         else
3298                 return FALSE;
3299 }
3300
3301
3302 bool monster_town(int r_idx)
3303 {
3304         monster_race *r_ptr = &r_info[r_idx];
3305
3306         if (r_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL))
3307                 return TRUE;
3308         else
3309                 return FALSE;
3310 }
3311
3312
3313 bool monster_wood(int r_idx)
3314 {
3315         monster_race *r_ptr = &r_info[r_idx];
3316
3317         if (r_ptr->flags8 & (RF8_WILD_WOOD | RF8_WILD_ALL))
3318                 return TRUE;
3319         else
3320                 return FALSE;
3321 }
3322
3323
3324 bool monster_volcano(int r_idx)
3325 {
3326         monster_race *r_ptr = &r_info[r_idx];
3327
3328         if (r_ptr->flags8 & RF8_WILD_VOLCANO)
3329                 return TRUE;
3330         else
3331                 return FALSE;
3332 }
3333
3334
3335 bool monster_mountain(int r_idx)
3336 {
3337         monster_race *r_ptr = &r_info[r_idx];
3338
3339         if (r_ptr->flags8 & RF8_WILD_MOUNTAIN)
3340                 return TRUE;
3341         else
3342                 return FALSE;
3343 }
3344
3345
3346 bool monster_grass(int r_idx)
3347 {
3348         monster_race *r_ptr = &r_info[r_idx];
3349
3350         if (r_ptr->flags8 & (RF8_WILD_GRASS | RF8_WILD_ALL))
3351                 return TRUE;
3352         else
3353                 return FALSE;
3354 }
3355
3356
3357 bool monster_deep_water(int r_idx)
3358 {
3359         monster_race *r_ptr = &r_info[r_idx];
3360
3361         if (!monster_dungeon(r_idx)) return FALSE;
3362
3363         if (r_ptr->flags7 & RF7_AQUATIC)
3364                 return TRUE;
3365         else
3366                 return FALSE;
3367 }
3368
3369
3370 bool monster_shallow_water(int r_idx)
3371 {
3372         monster_race *r_ptr = &r_info[r_idx];
3373
3374         if (!monster_dungeon(r_idx)) return FALSE;
3375
3376         if (r_ptr->flags2 & RF2_AURA_FIRE)
3377                 return FALSE;
3378         else
3379                 return TRUE;
3380 }
3381
3382
3383 bool monster_lava(int r_idx)
3384 {
3385         monster_race *r_ptr = &r_info[r_idx];
3386
3387         if (!monster_dungeon(r_idx)) return FALSE;
3388
3389         if (((r_ptr->flags3 & RF3_EFF_IM_FIRE_MASK) ||
3390              (r_ptr->flags7 & RF7_CAN_FLY)) &&
3391             !(r_ptr->flags3 & RF3_AURA_COLD))
3392                 return TRUE;
3393         else
3394                 return FALSE;
3395 }
3396
3397
3398 monster_hook_type get_monster_hook(void)
3399 {
3400         if (!dun_level && !p_ptr->inside_quest)
3401         {
3402                 switch (wilderness[p_ptr->wilderness_y][p_ptr->wilderness_x].terrain)
3403                 {
3404                 case TERRAIN_TOWN:
3405                         return (monster_hook_type)monster_town;
3406                 case TERRAIN_DEEP_WATER:
3407                         return (monster_hook_type)monster_ocean;
3408                 case TERRAIN_SHALLOW_WATER:
3409                 case TERRAIN_SWAMP:
3410                         return (monster_hook_type)monster_shore;
3411                 case TERRAIN_DIRT:
3412                 case TERRAIN_DESERT:
3413                         return (monster_hook_type)monster_waste;
3414                 case TERRAIN_GRASS:
3415                         return (monster_hook_type)monster_grass;
3416                 case TERRAIN_TREES:
3417                         return (monster_hook_type)monster_wood;
3418                 case TERRAIN_SHALLOW_LAVA:
3419                 case TERRAIN_DEEP_LAVA:
3420                         return (monster_hook_type)monster_volcano;
3421                 case TERRAIN_MOUNTAIN:
3422                         return (monster_hook_type)monster_mountain;
3423                 default:
3424                         return (monster_hook_type)monster_dungeon;
3425                 }
3426         }
3427         else
3428         {
3429                 return (monster_hook_type)monster_dungeon;
3430         }
3431 }
3432
3433
3434 monster_hook_type get_monster_hook2(int y, int x)
3435 {
3436         /* Set the monster list */
3437         switch (cave[y][x].feat)
3438         {
3439         case FEAT_SHAL_WATER:
3440                 return (monster_hook_type)monster_shallow_water;
3441         case FEAT_DEEP_WATER:
3442                 return (monster_hook_type)monster_deep_water;
3443         case FEAT_DEEP_LAVA:
3444         case FEAT_SHAL_LAVA:
3445                 return (monster_hook_type)monster_lava;
3446         default:
3447                 return NULL;
3448         }
3449 }
3450
3451
3452 void set_friendly(monster_type *m_ptr)
3453 {
3454         m_ptr->smart |= SM_FRIENDLY;
3455 }
3456
3457 void set_pet(monster_type *m_ptr)
3458 {
3459         /* Check for quest completion */
3460         check_quest_completion(m_ptr);
3461
3462         m_ptr->smart |= SM_PET;
3463         if (!(r_info[m_ptr->r_idx].flags3 & (RF3_EVIL | RF3_GOOD)))
3464                 m_ptr->sub_align = SUB_ALIGN_NEUTRAL;
3465 }
3466
3467 /*
3468  * Makes the monster hostile towards the player
3469  */
3470 void set_hostile(monster_type *m_ptr)
3471 {
3472         if (p_ptr->inside_battle) return;
3473         m_ptr->smart &= ~SM_PET;
3474         m_ptr->smart &= ~SM_FRIENDLY;
3475 }
3476
3477
3478 /*
3479  * Anger the monster
3480  */
3481 void anger_monster(monster_type *m_ptr)
3482 {
3483         if (p_ptr->inside_battle) return;
3484         if (is_friendly(m_ptr))
3485         {
3486                 char m_name[80];
3487
3488                 monster_desc(m_name, m_ptr, 0);
3489 #ifdef JP
3490 msg_format("%^s¤ÏÅܤä¿¡ª", m_name);
3491 #else
3492                 msg_format("%^s gets angry!", m_name);
3493 #endif
3494
3495                 set_hostile(m_ptr);
3496
3497                 chg_virtue(V_INDIVIDUALISM, 1);
3498                 chg_virtue(V_HONOUR, -1);
3499                 chg_virtue(V_JUSTICE, -1);
3500                 chg_virtue(V_COMPASSION, -1);
3501         }
3502 }
3503
3504
3505 /*
3506  * Check if monster can cross terrain
3507  */
3508 bool monster_can_cross_terrain(byte feat, monster_race *r_ptr)
3509 {
3510         /* Pit */
3511         if (feat == FEAT_DARK_PIT)
3512         {
3513                 if (r_ptr->flags7 & RF7_CAN_FLY)
3514                         return TRUE;
3515                 else
3516                         return FALSE;
3517         }
3518         /* Deep water */
3519         if (feat == FEAT_DEEP_WATER)
3520         {
3521                 if ((r_ptr->flags7 & RF7_AQUATIC) ||
3522                     (r_ptr->flags7 & RF7_CAN_FLY) ||
3523                     (r_ptr->flags7 & RF7_CAN_SWIM))
3524                         return TRUE;
3525                 else
3526                         return FALSE;
3527         }
3528         /* Shallow water */
3529         else if (feat == FEAT_SHAL_WATER)
3530         {
3531                 if (!(r_ptr->flags2 & RF2_AURA_FIRE) ||
3532                     (r_ptr->flags7 & RF7_AQUATIC) ||
3533                     (r_ptr->flags7 & RF7_CAN_FLY) ||
3534                     (r_ptr->flags7 & RF7_CAN_SWIM))
3535                         return TRUE;
3536                 else
3537                         return FALSE;
3538         }
3539         /* Aquatic monster */
3540         else if ((r_ptr->flags7 & RF7_AQUATIC) &&
3541                     !(r_ptr->flags7 & RF7_CAN_FLY))
3542         {
3543                 return FALSE;
3544         }
3545         /* Lava */
3546         else if ((feat == FEAT_SHAL_LAVA) ||
3547             (feat == FEAT_DEEP_LAVA))
3548         {
3549                 if ((r_ptr->flags3 & RF3_EFF_IM_FIRE_MASK) ||
3550                     (r_ptr->flags7 & RF7_CAN_FLY))
3551                         return TRUE;
3552                 else
3553                         return FALSE;
3554         }
3555
3556         return TRUE;
3557 }
3558
3559
3560 /*
3561  * Strictly check if monster can enter the grid
3562  */
3563 bool monster_can_enter(int y, int x, monster_race *r_ptr)
3564 {
3565         cave_type *c_ptr = &cave[y][x];
3566         byte feat = c_ptr->feat;
3567
3568         /* Player or other monster */
3569         if (player_bold(y, x)) return FALSE;
3570         if (c_ptr->m_idx) return FALSE;
3571
3572         /* Permanent wall */
3573         if ((c_ptr->feat >= FEAT_PERM_EXTRA) &&
3574             (c_ptr->feat <= FEAT_PERM_SOLID))
3575                 return FALSE;
3576
3577         /* Can fly over the Pattern */
3578         if ((c_ptr->feat >= FEAT_PATTERN_START) &&
3579             (c_ptr->feat <= FEAT_PATTERN_XTRA2))
3580         {
3581             if (!(r_ptr->flags7 & RF7_CAN_FLY))
3582                     return FALSE;
3583             else
3584                     return TRUE;
3585         }
3586
3587         /* Can fly over mountain on the surface */
3588         if (feat == FEAT_MOUNTAIN)
3589         {
3590             if (!dun_level && 
3591                 ((r_ptr->flags7 & RF7_CAN_FLY) ||
3592                  (r_ptr->flags8 & RF8_WILD_MOUNTAIN)))
3593                     return TRUE;
3594             else
3595                     return FALSE;
3596         }
3597
3598         /* Cannot enter wall without pass wall ability */
3599         if (!cave_floor_grid(c_ptr) && !(r_ptr->flags2 & RF2_PASS_WALL))
3600                 return FALSE;
3601
3602         /* Pit */
3603         if (feat == FEAT_DARK_PIT)
3604         {
3605                 if (r_ptr->flags7 & RF7_CAN_FLY)
3606                         return TRUE;
3607                 else
3608                         return FALSE;
3609         }
3610         /* Deep water */
3611         if (feat == FEAT_DEEP_WATER)
3612         {
3613                 if ((r_ptr->flags7 & RF7_AQUATIC) ||
3614                     (r_ptr->flags7 & RF7_CAN_FLY) ||
3615                     (r_ptr->flags7 & RF7_CAN_SWIM))
3616                         return TRUE;
3617                 else
3618                         return FALSE;
3619         }
3620         /* Shallow water */
3621         else if (feat == FEAT_SHAL_WATER)
3622         {
3623                 if (!(r_ptr->flags2 & RF2_AURA_FIRE) ||
3624                     (r_ptr->flags7 & RF7_AQUATIC) ||
3625                     (r_ptr->flags7 & RF7_CAN_FLY) ||
3626                     (r_ptr->flags7 & RF7_CAN_SWIM))
3627                         return TRUE;
3628                 else
3629                         return FALSE;
3630         }
3631         /* Aquatic monster */
3632         else if ((r_ptr->flags7 & RF7_AQUATIC) &&
3633                     !(r_ptr->flags7 & RF7_CAN_FLY))
3634         {
3635                 return FALSE;
3636         }
3637         /* Lava */
3638         else if ((feat == FEAT_SHAL_LAVA) ||
3639             (feat == FEAT_DEEP_LAVA))
3640         {
3641                 if ((r_ptr->flags3 & RF3_EFF_IM_FIRE_MASK) ||
3642                     (r_ptr->flags7 & RF7_CAN_FLY))
3643                         return TRUE;
3644                 else
3645                         return FALSE;
3646         }
3647
3648         return TRUE;
3649 }
3650
3651
3652
3653 /*
3654  * Check if two monsters are enemies
3655  */
3656 bool are_enemies(monster_type *m_ptr, monster_type *n_ptr)
3657 {
3658         monster_race *r_ptr = &r_info[m_ptr->r_idx];
3659         monster_race *s_ptr = &r_info[n_ptr->r_idx];
3660
3661         if (p_ptr->inside_battle)
3662         {
3663                 if (is_pet(m_ptr) || is_pet(n_ptr)) return FALSE;
3664                 return TRUE;
3665         }
3666
3667         if ((r_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL))
3668             && (s_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL)))
3669         {
3670                 if (!is_pet(m_ptr) && !is_pet(n_ptr)) return FALSE;
3671         }
3672
3673         /* Friendly vs. opposite aligned normal or pet */
3674         if (m_ptr->sub_align != n_ptr->sub_align)
3675         {
3676                 if (((m_ptr->sub_align & SUB_ALIGN_EVIL) &&
3677                           (n_ptr->sub_align & SUB_ALIGN_GOOD)) ||
3678                          ((m_ptr->sub_align & SUB_ALIGN_GOOD) &&
3679                           (n_ptr->sub_align & SUB_ALIGN_EVIL)))
3680                 {
3681                         if (!(m_ptr->mflag2 & MFLAG2_CHAMELEON) || !(n_ptr->mflag2 & MFLAG2_CHAMELEON)) return TRUE;
3682                 }
3683         }
3684
3685         /* Hostile vs. non-hostile */
3686         if (is_hostile(m_ptr) != is_hostile(n_ptr))
3687         {
3688                 return TRUE;
3689         }
3690
3691         /* Default */
3692         return FALSE;
3693 }
3694
3695
3696 /*
3697  * Is the monster "alive"?
3698  *
3699  * Used to determine the message to print for a killed monster.
3700  * ("dies", "destroyed")
3701  */
3702 bool monster_living(monster_race *r_ptr)
3703 {
3704         /* Non-living, undead, or demon */
3705         if (r_ptr->flags3 & (RF3_DEMON | RF3_UNDEAD | RF3_NONLIVING))
3706                 return FALSE;
3707         else
3708                 return TRUE;
3709 }
3710
3711
3712 /*
3713  * Is this monster declined to be questor or bounty?
3714  */
3715 bool no_questor_or_bounty_uniques(int r_idx)
3716 {
3717         switch (r_idx)
3718         {
3719         /*
3720          * Decline them to be questor or bounty because they use
3721          * special motion "split and combine"
3722          */
3723         case MON_BANORLUPART:
3724         case MON_BANOR:
3725         case MON_LUPART:
3726                 return TRUE;
3727         default:
3728                 return FALSE;
3729         }
3730 }