OSDN Git Service

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