OSDN Git Service

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