OSDN Git Service

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