OSDN Git Service

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