OSDN Git Service

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