OSDN Git Service

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