OSDN Git Service

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