3 /* Purpose: describe monsters (using monster memory) */
6 * Copyright (c) 1989 James E. Wilson, Christopher J. Stuart
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.
17 * Pronoun arrays, by gender.
19 static cptr wd_he[3] =
21 { "¤½¤ì", "Èà", "Èà½÷" };
23 { "it", "he", "she" };
26 static cptr wd_his[3] =
28 { "¤½¤ì¤Î", "Èà¤Î", "Èà½÷¤Î" };
30 { "its", "his", "her" };
36 * Pluralizer. Args(count, singular, plural)
38 #define plural(c,s,p) \
39 (((c) == 1) ? (s) : (p))
47 * Determine if the "armor" is known
48 * The higher the level, the fewer kills needed.
50 static bool know_armour(int r_idx)
52 monster_race *r_ptr = &r_info[r_idx];
54 s32b level = r_ptr->level;
56 s32b kills = r_ptr->r_tkills;
58 if (cheat_know) return (TRUE);
61 if (kills > 304 / (4 + level)) return (TRUE);
63 /* Skip non-uniques */
64 if (!(r_ptr->flags1 & RF1_UNIQUE)) return (FALSE);
67 if (kills > 304 / (38 + (5 * level) / 4)) return (TRUE);
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
79 static bool know_damage(int r_idx, int i)
81 monster_race *r_ptr = &r_info[r_idx];
83 s32b level = r_ptr->level;
85 s32b a = r_ptr->r_blows[i];
87 s32b d1 = r_ptr->blow[i].d_dice;
88 s32b d2 = r_ptr->blow[i].d_side;
92 if (d >= ((4+level)*MAX_UCHAR)/80) d = ((4+level)*MAX_UCHAR-1)/80;
95 if ((4 + level) * a > 80 * d) return (TRUE);
97 /* Skip non-uniques */
98 if (!(r_ptr->flags1 & RF1_UNIQUE)) return (FALSE);
100 /* Unique monsters */
101 if ((4 + level) * (2 * a) > 80 * d) return (TRUE);
109 * Hack -- display monster information using "roff()"
111 * Note that there is now a compiler option to only read the monster
112 * descriptions from the raw file when they are actually needed, which
113 * saves about 60K of memory at the cost of disk access during monster
114 * recall, which is optional to the user.
116 * This function should only be called with the cursor placed at the
117 * left edge of the screen, on a cleared line, in which the recall is
118 * to take place. One extra blank line is left after the recall.
120 static void roff_aux(int r_idx, int remem)
122 monster_race *r_ptr = &r_info[r_idx];
136 int speed = (ironman_nightmare) ? r_ptr->speed + 5 : r_ptr->speed;
153 monster_race save_mem;
156 /* Cheat -- Know everything */
161 /* Save the "old" memory */
164 /* Hack -- Maximal kills */
165 /* r_ptr->r_tkills = MAX_SHORT; */
167 /* Hack -- Maximal info */
168 r_ptr->r_wake = r_ptr->r_ignore = MAX_UCHAR;
170 /* Observe "maximal" attacks */
171 for (m = 0; m < 4; m++)
173 /* Examine "actual" blows */
174 if (r_ptr->blow[m].effect || r_ptr->blow[m].method)
176 /* Hack -- maximal observations */
177 r_ptr->r_blows[m] = MAX_UCHAR;
181 /* Hack -- maximal drops */
182 r_ptr->r_drop_gold = r_ptr->r_drop_item =
183 (((r_ptr->flags1 & RF1_DROP_4D2) ? 8 : 0) +
184 ((r_ptr->flags1 & RF1_DROP_3D2) ? 6 : 0) +
185 ((r_ptr->flags1 & RF1_DROP_2D2) ? 4 : 0) +
186 ((r_ptr->flags1 & RF1_DROP_1D2) ? 2 : 0) +
187 ((r_ptr->flags1 & RF1_DROP_90) ? 1 : 0) +
188 ((r_ptr->flags1 & RF1_DROP_60) ? 1 : 0));
190 /* Hack -- but only "valid" drops */
191 if (r_ptr->flags1 & RF1_ONLY_GOLD) r_ptr->r_drop_item = 0;
192 if (r_ptr->flags1 & RF1_ONLY_ITEM) r_ptr->r_drop_gold = 0;
194 /* Hack -- observe many spells */
195 r_ptr->r_cast_inate = MAX_UCHAR;
196 r_ptr->r_cast_spell = MAX_UCHAR;
198 /* Hack -- know all the flags */
199 r_ptr->r_flags1 = r_ptr->flags1;
200 r_ptr->r_flags2 = r_ptr->flags2;
201 r_ptr->r_flags3 = r_ptr->flags3;
202 r_ptr->r_flags4 = r_ptr->flags4;
203 r_ptr->r_flags5 = r_ptr->flags5;
204 r_ptr->r_flags6 = r_ptr->flags6;
206 r_ptr->r_xtra1 |= MR1_SINKA;
210 /* Extract a gender (if applicable) */
211 if (r_ptr->flags1 & RF1_FEMALE) msex = 2;
212 else if (r_ptr->flags1 & RF1_MALE) msex = 1;
215 /* Obtain a copy of the "known" flags */
216 flags1 = (r_ptr->flags1 & r_ptr->r_flags1);
217 flags2 = (r_ptr->flags2 & r_ptr->r_flags2);
218 flags3 = (r_ptr->flags3 & r_ptr->r_flags3);
219 flags4 = (r_ptr->flags4 & r_ptr->r_flags4);
220 flags5 = (r_ptr->flags5 & r_ptr->r_flags5);
221 flags6 = (r_ptr->flags6 & r_ptr->r_flags6);
222 flags7 = (r_ptr->flags7 & r_ptr->flags7);
225 /* Assume some "obvious" flags */
226 if (r_ptr->flags1 & RF1_UNIQUE) flags1 |= (RF1_UNIQUE);
227 if (r_ptr->flags1 & RF1_QUESTOR) flags1 |= (RF1_QUESTOR);
228 if (r_ptr->flags1 & RF1_MALE) flags1 |= (RF1_MALE);
229 if (r_ptr->flags1 & RF1_FEMALE) flags1 |= (RF1_FEMALE);
231 /* Assume some "creation" flags */
232 if (r_ptr->flags1 & RF1_FRIENDS) flags1 |= (RF1_FRIENDS);
233 if (r_ptr->flags1 & RF1_ESCORT) flags1 |= (RF1_ESCORT);
234 if (r_ptr->flags1 & RF1_ESCORTS) flags1 |= (RF1_ESCORTS);
236 /* Killing a monster reveals some properties */
237 if (r_ptr->r_tkills || cheat_know)
239 /* Know "race" flags */
240 if (r_ptr->flags3 & RF3_ORC) flags3 |= (RF3_ORC);
241 if (r_ptr->flags3 & RF3_TROLL) flags3 |= (RF3_TROLL);
242 if (r_ptr->flags3 & RF3_GIANT) flags3 |= (RF3_GIANT);
243 if (r_ptr->flags3 & RF3_DRAGON) flags3 |= (RF3_DRAGON);
244 if (r_ptr->flags3 & RF3_DEMON) flags3 |= (RF3_DEMON);
245 if (r_ptr->flags3 & RF3_UNDEAD) flags3 |= (RF3_UNDEAD);
246 if (r_ptr->flags3 & RF3_EVIL) flags3 |= (RF3_EVIL);
247 if (r_ptr->flags3 & RF3_GOOD) flags3 |= (RF3_GOOD);
248 if (r_ptr->flags3 & RF3_ANIMAL) flags3 |= (RF3_ANIMAL);
249 if (r_ptr->flags3 & RF3_AMBERITE) flags3 |= (RF3_AMBERITE);
251 /* Know 'quantum' flag */
252 if (r_ptr->flags2 & RF2_QUANTUM) flags2 |= (RF2_QUANTUM);
254 /* Know "forced" flags */
255 if (r_ptr->flags1 & RF1_FORCE_DEPTH) flags1 |= (RF1_FORCE_DEPTH);
256 if (r_ptr->flags1 & RF1_FORCE_MAXHP) flags1 |= (RF1_FORCE_MAXHP);
260 /* Treat uniques differently */
261 if (flags1 & RF1_UNIQUE)
263 /* Hack -- Determine if the unique is "dead" */
264 bool dead = (r_ptr->max_num == 0) ? TRUE : FALSE;
266 /* We've been killed... */
269 /* Killed ancestors */
271 roff(format("%^s¤Ï¤¢¤Ê¤¿¤ÎÀèÁĤò %d ¿ÍÁò¤Ã¤Æ¤¤¤ë",
273 roff(format("%^s has slain %d of your ancestors",
276 wd_he[msex], r_ptr->r_deaths));
278 /* But we've also killed it */
282 roff(format("¤¬¡¢¤¹¤Ç¤ËµØƤ¤Á¤Ï²Ì¤¿¤·¤Æ¤¤¤ë¡ª"));
284 roff(format(", but you have avenged %s! ",
285 plural(r_ptr->r_deaths, "him", "them")));
290 /* Unavenged (ever) */
294 roff(format("¤Î¤Ë¡¢¤Þ¤ÀµØƤ¤Á¤ò²Ì¤¿¤·¤Æ¤¤¤Ê¤¤¡£"));
296 roff(format(", who %s unavenged. ",
297 plural(r_ptr->r_deaths, "remains", "remain")));
303 /* Dead unique who never hurt us */
307 roff("¤¢¤Ê¤¿¤Ï¤³¤ÎµØŨ¤ò¤¹¤Ç¤ËÁò¤êµî¤Ã¤Æ¤¤¤ë¡£");
309 roff("You have slain this foe. ");
315 /* Not unique, but killed us */
316 else if (r_ptr->r_deaths)
320 roff(format("¤³¤Î¥â¥ó¥¹¥¿¡¼¤Ï¤¢¤Ê¤¿¤ÎÀèÁĤò %d ¿ÍÁò¤Ã¤Æ¤¤¤ë",
323 roff(format("%d of your ancestors %s been killed by this creature, ",
324 r_ptr->r_deaths, plural(r_ptr->r_deaths, "has", "have")));
328 /* Some kills this life */
332 roff(format("¤¬¡¢¤¢¤Ê¤¿¤Ï¤³¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¯¤Ê¤¯¤È¤â %d ÂΤÏÅݤ·¤Æ¤¤¤ë¡£",
334 roff(format("and you have exterminated at least %d of the creatures. ",
340 /* Some kills past lives */
341 else if (r_ptr->r_tkills)
344 roff(format("¤¬¡¢%s¤Ï¤³¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¯¤Ê¤¯¤È¤â %d ÂΤÏÅݤ·¤Æ¤¤¤ë¡£",
345 "¤¢¤Ê¤¿¤ÎÀèÁÄ", r_ptr->r_tkills));
347 roff(format("and %s have exterminated at least %d of the creatures. ",
348 "your ancestors", r_ptr->r_tkills));
357 roff(format("¤¬¡¢¤Þ¤À%s¤òÅݤ·¤¿¤³¤È¤Ï¤Ê¤¤¡£",
359 roff(format("and %s is not ever known to have been defeated. ",
366 /* Normal monsters */
369 /* Killed some this life */
373 roff(format("¤¢¤Ê¤¿¤Ï¤³¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¯¤Ê¤¯¤È¤â %d ÂΤϻ¦¤·¤Æ¤¤¤ë¡£",
375 roff(format("You have killed at least %d of these creatures. ",
381 /* Killed some last life */
382 else if (r_ptr->r_tkills)
385 roff(format("¤¢¤Ê¤¿¤ÎÀèÁĤϤ³¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¯¤Ê¤¯¤È¤â %d ÂΤϻ¦¤·¤Æ¤¤¤ë¡£",
387 roff(format("Your ancestors have killed at least %d of these creatures. ",
397 roff("¤³¤Î¥â¥ó¥¹¥¿¡¼¤òÅݤ·¤¿¤³¤È¤Ï¤Ê¤¤¡£");
399 roff("No battles to the death are recalled. ");
411 #ifdef DELAY_LOAD_R_TEXT
415 /* Build the filename */
417 path_build(buf, 1024, ANGBAND_DIR_DATA, "r_info_j.raw");
419 path_build(buf, 1024, ANGBAND_DIR_DATA, "r_info.raw");
423 /* Open the "raw" file */
424 fd = fd_open(buf, O_RDONLY);
431 /* Starting position */
434 /* Additional offsets */
435 pos += r_head->head_size;
436 pos += r_head->info_size;
437 pos += r_head->name_size;
440 (void)fd_seek(fd, pos);
442 /* Read a chunk of data */
443 (void)fd_read(fd, buf, 2048);
452 strcpy(buf, r_text + r_ptr->text);
463 if (r_idx == MON_KAGE)
468 /* Cheat -- know everything */
469 if ((cheat_know) && (remem == 0))
471 /* Hack -- restore memory */
472 COPY(r_ptr, &save_mem, monster_race);
480 /* Describe location */
481 if (r_ptr->level == 0)
484 roff(format("%^s¤ÏÄ®¤Ë½»¤ß", wd_he[msex]));
486 roff(format("%^s lives in the town", wd_he[msex]));
491 else if (r_ptr->r_tkills || cheat_know)
496 roff(format("%^s¤ÏÄ̾ïÃϲ¼ %d ¥Õ¥£¡¼¥È¤Ç½Ð¸½¤·",
498 roff(format("%^s is normally found at depths of %d feet",
501 wd_he[msex], r_ptr->level * 50));
506 roff(format("%^s¤ÏÄ̾ïÃϲ¼ %d ³¬¤Ç½Ð¸½¤·",
508 roff(format("%^s is normally found on dungeon level %d",
511 wd_he[msex], r_ptr->level));
517 /* Describe movement */
518 if (r_idx == MON_CHAMELEON)
521 roff("¡¢Â¾¤Î¥â¥ó¥¹¥¿¡¼¤Ë²½¤±¤ë¡£");
523 roff("and can take the shape of other monster.");
542 roff(format("%^s¤Ï", wd_he[msex]));
544 roff(format("%^s ", wd_he[msex]));
554 if ((flags1 & RF1_RAND_50) || (flags1 & RF1_RAND_25))
557 if ((flags1 & RF1_RAND_50) && (flags1 & RF1_RAND_25))
566 else if (flags1 & RF1_RAND_50)
575 else if (flags1 & RF1_RAND_25)
589 roff(" erratically");
593 /* Hack -- Occasional conjunction */
595 if (speed != 110) roff("¡¢¤«¤Ä");
597 if (speed != 110) roff(", and");
606 if (speed > 139) c_roff(TERM_RED, "¿®¤¸Æñ¤¤¤Û¤É");
607 else if (speed > 134) c_roff(TERM_ORANGE, "ÌÔÎõ¤Ë");
608 else if (speed > 129) c_roff(TERM_ORANGE, "Èó¾ï¤Ë");
609 else if (speed > 124) c_roff(TERM_UMBER, "¤«¤Ê¤ê");
610 else if (speed < 120) c_roff(TERM_L_UMBER, "¤ä¤ä");
611 c_roff(TERM_L_RED, "ÁÇÁ᤯");
613 if (speed > 130) roff(" incredibly");
614 else if (speed > 120) roff(" very");
619 else if (speed < 110)
622 if (speed < 90) c_roff(TERM_L_GREEN, "¿®¤¸Æñ¤¤¤Û¤É");
623 else if (speed < 95) c_roff(TERM_BLUE, "Èó¾ï¤Ë");
624 else if (speed < 100) c_roff(TERM_BLUE, "¤«¤Ê¤ê");
625 else if (speed > 104) c_roff(TERM_GREEN, "¤ä¤ä");
626 c_roff(TERM_L_BLUE, "¤æ¤Ã¤¯¤ê¤È");
628 if (speed < 90) roff(" incredibly");
629 else if (speed < 100) roff(" very");
637 roff("ÉáÄ̤ή¤µ¤Ç");
639 roff(" at normal speed");
648 /* The code above includes "attack speed" */
649 if (flags1 & RF1_NEVER_MOVE)
664 roff(format("%^s¤Ï", wd_he[msex]));
666 roff(format("%^s ", wd_he[msex]));
674 roff("¿¯Æþ¼Ô¤òÄÉÀפ·¤Ê¤¤");
676 roff("does not deign to chase intruders");
681 /* End this sentence */
694 /* Describe experience if known */
695 if (r_ptr->r_tkills || cheat_know)
701 if (flags1 & RF1_UNIQUE)
703 roff("Killing this");
707 roff("A kill of this");
712 /* Describe the "quality" */
714 if (flags2 & RF2_ELDRITCH_HORROR) c_roff(TERM_VIOLET, "¶¸µ¤¤òͶ¤¦");/*nuke me*/
716 if (flags2 & RF2_ELDRITCH_HORROR) roff(" sanity-blasting");
720 if (flags3 & RF3_ANIMAL) c_roff(TERM_L_GREEN, "¼«Á³³¦¤Î");
722 if (flags3 & RF3_ANIMAL) roff(" natural");
726 if (flags3 & RF3_EVIL) c_roff(TERM_L_DARK, "¼Ù°¤Ê¤ë");
728 if (flags3 & RF3_EVIL) roff(" evil");
732 if (flags3 & RF3_GOOD) c_roff(TERM_YELLOW, "Á±ÎɤÊ");
734 if (flags3 & RF3_GOOD) roff(" good");
738 if (flags3 & RF3_UNDEAD) c_roff(TERM_VIOLET, "¥¢¥ó¥Ç¥Ã¥É¤Î");
740 if (flags3 & RF3_UNDEAD) roff(" undead");
744 if ((flags3 & (RF3_DRAGON | RF3_DEMON | RF3_GIANT | RF3_TROLL | RF3_ORC | RF3_AMBERITE)) || (flags2 & RF2_QUANTUM))
746 /* Describe the "race" */
748 if (flags3 & RF3_DRAGON) c_roff(TERM_ORANGE, "¥É¥é¥´¥ó");
750 if (flags3 & RF3_DRAGON) roff(" dragon");
754 if (flags3 & RF3_DEMON) c_roff(TERM_VIOLET, "¥Ç¡¼¥â¥ó");
756 if (flags3 & RF3_DEMON) roff(" demon");
760 if (flags3 & RF3_GIANT) c_roff(TERM_L_UMBER, "¥¸¥ã¥¤¥¢¥ó¥È");
762 if (flags3 & RF3_GIANT) roff(" giant");
766 if (flags3 & RF3_TROLL) c_roff(TERM_BLUE, "¥È¥í¥ë");
768 if (flags3 & RF3_TROLL) roff(" troll");
772 if (flags3 & RF3_ORC) c_roff(TERM_UMBER, "¥ª¡¼¥¯");
774 if (flags3 & RF3_ORC) roff(" orc");
778 if (flags3 & RF3_AMBERITE) c_roff(TERM_L_WHITE, "¥¢¥ó¥Ð¡¼¤Î²¦Â²");
780 if (flags3 & RF3_AMBERITE) roff(" Amberite");
784 if (flags2 & RF2_QUANTUM) c_roff(TERM_VIOLET, "ÎÌ»ÒÀ¸Êª");
786 if (flags2 & RF2_QUANTUM) roff(" quantum creature");
791 else roff("¥â¥ó¥¹¥¿¡¼");
793 else roff(" creature");
798 roff("¤òÅݤ¹¤³¤È¤Ï");
800 /* Group some variables */
807 roff(format(" %lu ¥ì¥Ù¥ë¤Î¥¥ã¥é¥¯¥¿¤Ë¤È¤Ã¤Æ", (long)i));
809 i = (long)r_ptr->mexp * r_ptr->level / (p_ptr->max_plv+2);
810 j = ((((long)r_ptr->mexp * r_ptr->level % (p_ptr->max_plv+2)) *
811 (long)1000 / (p_ptr->max_plv+2) + 5) / 10);
813 roff(format(" Ìó%ld.%02ld ¥Ý¥¤¥ó¥È¤Î·Ð¸³¤È¤Ê¤ë¡£",
816 /* calculate the integer exp part */
817 i = (long)r_ptr->mexp * r_ptr->level / (p_ptr->max_plv+2);
819 /* calculate the fractional exp part scaled by 100, */
820 /* must use long arithmetic to avoid overflow */
821 j = ((((long)r_ptr->mexp * r_ptr->level % (p_ptr->max_plv+2)) *
822 (long)1000 / (p_ptr->max_plv+2) + 5) / 10);
824 /* Mention the experience */
825 roff(format(" is worth about %ld.%02ld point%s",
827 (((i == 1) && (j == 0)) ? "" : "s")));
829 /* Take account of annoying English */
832 if ((p_ptr->lev / 10) == 1) /* nothing */;
833 else if (i == 1) p = "st";
834 else if (i == 2) p = "nd";
835 else if (i == 3) p = "rd";
837 /* Take account of "leading vowels" in numbers */
840 if ((i == 8) || (i == 11) || (i == 18)) q = "n";
842 /* Mention the dependance on the player's level */
843 roff(format(" for a%s %lu%s level character. ",
850 if ((flags2 & RF2_AURA_FIRE) && (flags2 & RF2_AURA_ELEC) && (flags3 & RF3_AURA_COLD))
853 c_roff(TERM_VIOLET, format("%^s¤Ï±ê¤Èɹ¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
855 roff(format("%^s is surrounded by flames and electricity. ", wd_he[msex]));
859 else if ((flags2 & RF2_AURA_FIRE) && (flags2 & RF2_AURA_ELEC))
862 c_roff(TERM_L_RED, format("%^s¤Ï±ê¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
864 roff(format("%^s is surrounded by flames and electricity. ", wd_he[msex]));
868 else if ((flags2 & RF2_AURA_FIRE) && (flags3 & RF3_AURA_COLD))
871 c_roff(TERM_BLUE, format("%^s¤Ï±ê¤Èɹ¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
873 roff(format("%^s is surrounded by flames and electricity. ", wd_he[msex]));
877 else if ((flags3 & RF3_AURA_COLD) && (flags2 & RF2_AURA_ELEC))
880 c_roff(TERM_L_GREEN, format("%^s¤Ïɹ¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
882 roff(format("%^s is surrounded by ice and electricity. ", wd_he[msex]));
886 else if (flags2 & RF2_AURA_FIRE)
889 c_roff(TERM_RED, format("%^s¤Ï±ê¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
891 roff(format("%^s is surrounded by flames. ", wd_he[msex]));
895 else if (flags3 & RF3_AURA_COLD)
898 c_roff(TERM_BLUE, format("%^s¤Ïɹ¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
900 roff(format("%^s is surrounded by ice. ", wd_he[msex]));
904 else if (flags2 & RF2_AURA_ELEC)
907 c_roff(TERM_L_BLUE, format("%^s¤Ï¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
909 roff(format("%^s is surrounded by electricity. ", wd_he[msex]));
914 if (flags2 & RF2_REFLECTING)
917 roff(format("%^s¤ÏÌð¤Î¼öʸ¤òÄ·¤ÍÊÖ¤¹¡£", wd_he[msex]));
919 roff(format("%^s reflects bolt spells. ", wd_he[msex]));
924 /* Describe escorts */
925 if ((flags1 & RF1_ESCORT) || (flags1 & RF1_ESCORTS))
928 roff(format("%^s¤ÏÄ̾ï¸î±Ò¤òȼ¤Ã¤Æ¸½¤ì¤ë¡£",
930 roff(format("%^s usually appears with escorts. ",
936 /* Describe friends */
937 else if (flags1 & RF1_FRIENDS)
940 roff(format("%^s¤ÏÄ̾クÃĤǸ½¤ì¤ë¡£",
942 roff(format("%^s usually appears in groups. ",
949 /* Collect inate attacks */
952 if (flags4 & RF4_SHRIEK) {vp[vn] = "ÈáÌĤǽõ¤±¤òµá¤á¤ë";color[vn++] = TERM_L_WHITE;}
954 if (flags4 & RF4_SHRIEK) {vp[vn] = "shriek for help";color[vn++] = TERM_L_WHITE;}
958 if (flags4 & RF4_ROCKET) {vp[vn] = "¥í¥±¥Ã¥È¤òȯ¼Í¤¹¤ë";color[vn++] = TERM_UMBER;}
960 if (flags4 & RF4_ROCKET) {vp[vn] = "shoot a rocket";color[vn++] = TERM_UMBER;}
964 if (flags4 & RF4_SHOOT) {vp[vn] = "¼Í·â¤ò¤¹¤ë";color[vn++] = TERM_UMBER;}
966 if (flags4 & RF4_SHOOT) {vp[vn] = "fire an arrow";color[vn++] = TERM_UMBER;}
970 if (flags6 & (RF6_SPECIAL)) {vp[vn] = "ÆÃÊ̤ʹÔÆ°¤ò¤¹¤ë";color[vn++] = TERM_VIOLET;}
972 if (flags6 & (RF6_SPECIAL)) {vp[vn] = "do something";color[vn++] = TERM_VIOLET;}
975 /* Describe inate attacks */
980 roff(format("%^s¤Ï", wd_he[msex]));
982 roff(format("%^s", wd_he[msex]));
987 for (n = 0; n < vn; n++)
991 jverb(vp[n],jverb_buf,JVERB_OR);
992 c_roff(color[n], jverb_buf);
993 c_roff(color[n], "¤ê¡¢");
995 else c_roff(color[n], vp[n]);
998 if (n == 0) roff(" may ");
999 else if (n < vn-1) roff(", ");
1010 roff("¤³¤È¤¬¤¢¤ë¡£");
1018 /* Collect breaths */
1021 if (flags4 & (RF4_BR_ACID)) {vp[vn] = "»À";color[vn++] = TERM_GREEN;}
1023 if (flags4 & (RF4_BR_ACID)) {vp[vn] = "acid";color[vn++] = TERM_GREEN;}
1027 if (flags4 & (RF4_BR_ELEC)) {vp[vn] = "°ðºÊ";color[vn++] = TERM_BLUE;}
1029 if (flags4 & (RF4_BR_ELEC)) {vp[vn] = "lightning";color[vn++] = TERM_BLUE;}
1033 if (flags4 & (RF4_BR_FIRE)) {vp[vn] = "²Ð±ê";color[vn++] = TERM_RED;}
1035 if (flags4 & (RF4_BR_FIRE)) {vp[vn] = "fire";color[vn++] = TERM_RED;}
1039 if (flags4 & (RF4_BR_COLD)) {vp[vn] = "Î䵤";color[vn++] = TERM_L_WHITE;}
1041 if (flags4 & (RF4_BR_COLD)) {vp[vn] = "frost";color[vn++] = TERM_L_WHITE;}
1045 if (flags4 & (RF4_BR_POIS)) {vp[vn] = "ÆÇ";color[vn++] = TERM_L_GREEN;}
1047 if (flags4 & (RF4_BR_POIS)) {vp[vn] = "poison";color[vn++] = TERM_L_GREEN;}
1051 if (flags4 & (RF4_BR_NETH)) {vp[vn] = "ÃϹö";color[vn++] = TERM_L_DARK;}
1053 if (flags4 & (RF4_BR_NETH)) {vp[vn] = "nether";color[vn++] = TERM_L_DARK;}
1057 if (flags4 & (RF4_BR_LITE)) {vp[vn] = "Á®¸÷";color[vn++] = TERM_YELLOW;}
1059 if (flags4 & (RF4_BR_LITE)) {vp[vn] = "light";color[vn++] = TERM_YELLOW;}
1063 if (flags4 & (RF4_BR_DARK)) {vp[vn] = "°Å¹õ";color[vn++] = TERM_L_DARK;}
1065 if (flags4 & (RF4_BR_DARK)) {vp[vn] = "darkness";color[vn++] = TERM_L_DARK;}
1069 if (flags4 & (RF4_BR_CONF)) {vp[vn] = "º®Íð";color[vn++] = TERM_L_UMBER;}
1071 if (flags4 & (RF4_BR_CONF)) {vp[vn] = "confusion";color[vn++] = TERM_L_UMBER;}
1075 if (flags4 & (RF4_BR_SOUN)) {vp[vn] = "¹ì²»";color[vn++] = TERM_ORANGE;}
1077 if (flags4 & (RF4_BR_SOUN)) {vp[vn] = "sound";color[vn++] = TERM_ORANGE;}
1081 if (flags4 & (RF4_BR_CHAO)) {vp[vn] = "¥«¥ª¥¹";color[vn++] = TERM_VIOLET;}
1083 if (flags4 & (RF4_BR_CHAO)) {vp[vn] = "chaos";color[vn++] = TERM_VIOLET;}
1087 if (flags4 & (RF4_BR_DISE)) {vp[vn] = "Îô²½";color[vn++] = TERM_VIOLET;}
1089 if (flags4 & (RF4_BR_DISE)) {vp[vn] = "disenchantment";color[vn++] = TERM_VIOLET;}
1093 if (flags4 & (RF4_BR_NEXU)) {vp[vn] = "°ø²Ìº®Íð";color[vn++] = TERM_VIOLET;}
1095 if (flags4 & (RF4_BR_NEXU)) {vp[vn] = "nexus";color[vn++] = TERM_VIOLET;}
1099 if (flags4 & (RF4_BR_TIME)) {vp[vn] = "»þ´ÖµÕž";color[vn++] = TERM_L_BLUE;}
1101 if (flags4 & (RF4_BR_TIME)) {vp[vn] = "time";color[vn++] = TERM_L_BLUE;}
1105 if (flags4 & (RF4_BR_INER)) {vp[vn] = "ÃÙÆß";color[vn++] = TERM_SLATE;}
1107 if (flags4 & (RF4_BR_INER)) {vp[vn] = "inertia";color[vn++] = TERM_SLATE;}
1111 if (flags4 & (RF4_BR_GRAV)) {vp[vn] = "½ÅÎÏ";color[vn++] = TERM_SLATE;}
1113 if (flags4 & (RF4_BR_GRAV)) {vp[vn] = "gravity";color[vn++] = TERM_SLATE;}
1117 if (flags4 & (RF4_BR_SHAR)) {vp[vn] = "ÇËÊÒ";color[vn++] = TERM_L_UMBER;}
1119 if (flags4 & (RF4_BR_SHAR)) {vp[vn] = "shards";color[vn++] = TERM_L_UMBER;}
1123 if (flags4 & (RF4_BR_PLAS)) {vp[vn] = "¥×¥é¥º¥Þ";color[vn++] = TERM_L_RED;}
1125 if (flags4 & (RF4_BR_PLAS)) {vp[vn] = "plasma";color[vn++] = TERM_L_RED;}
1129 if (flags4 & (RF4_BR_WALL)) {vp[vn] = "¥Õ¥©¡¼¥¹";color[vn++] = TERM_UMBER;}
1131 if (flags4 & (RF4_BR_WALL)) {vp[vn] = "force";color[vn++] = TERM_UMBER;}
1135 if (flags4 & (RF4_BR_MANA)) {vp[vn] = "ËâÎÏ";color[vn++] = TERM_L_BLUE;}
1137 if (flags4 & (RF4_BR_MANA)) {vp[vn] = "mana";color[vn++] = TERM_L_BLUE;}
1141 if (flags4 & (RF4_BR_NUKE)) {vp[vn] = "Êü¼ÍÀÇÑ´þʪ";color[vn++] = TERM_L_GREEN;}
1143 if (flags4 & (RF4_BR_NUKE)) {vp[vn] = "toxic waste";color[vn++] = TERM_L_GREEN;}
1147 if (flags4 & (RF4_BR_DISI)) {vp[vn] = "ʬ²ò";color[vn++] = TERM_SLATE;}
1149 if (flags4 & (RF4_BR_DISI)) {vp[vn] = "disintegration";color[vn++] = TERM_SLATE;}
1153 /* Describe breaths */
1161 roff(format("%^s¤Ï", wd_he[msex]));
1163 roff(format("%^s", wd_he[msex]));
1168 for (n = 0; n < vn; n++)
1172 if ( n != 0 ) roff("¤ä");
1174 if (n == 0) roff(" may breathe ");
1175 else if (n < vn-1) roff(", ");
1181 c_roff(color[n], vp[n]);
1184 roff("¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤¬¤¢¤ë");
1189 /* Collect spells */
1192 if (flags5 & (RF5_BA_ACID)) {vp[vn] = "¥¢¥·¥Ã¥É¡¦¥Ü¡¼¥ë";color[vn++] = TERM_GREEN;}
1194 if (flags5 & (RF5_BA_ACID)) {vp[vn] = "produce acid balls";color[vn++] = TERM_GREEN;}
1198 if (flags5 & (RF5_BA_ELEC)) {vp[vn] = "¥µ¥ó¥À¡¼¡¦¥Ü¡¼¥ë";color[vn++] = TERM_BLUE;}
1200 if (flags5 & (RF5_BA_ELEC)) {vp[vn] = "produce lightning balls";color[vn++] = TERM_BLUE;}
1204 if (flags5 & (RF5_BA_FIRE)) {vp[vn] = "¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë";color[vn++] = TERM_RED;}
1206 if (flags5 & (RF5_BA_FIRE)) {vp[vn] = "produce fire balls";color[vn++] = TERM_RED;}
1210 if (flags5 & (RF5_BA_COLD)) {vp[vn] = "¥¢¥¤¥¹¡¦¥Ü¡¼¥ë";color[vn++] = TERM_L_WHITE;}
1212 if (flags5 & (RF5_BA_COLD)) {vp[vn] = "produce frost balls";color[vn++] = TERM_L_WHITE;}
1216 if (flags5 & (RF5_BA_POIS)) {vp[vn] = "°½±À";color[vn++] = TERM_L_GREEN;}
1218 if (flags5 & (RF5_BA_POIS)) {vp[vn] = "produce poison balls";color[vn++] = TERM_L_GREEN;}
1222 if (flags5 & (RF5_BA_NETH)) {vp[vn] = "ÃϹöµå";color[vn++] = TERM_L_DARK;}
1224 if (flags5 & (RF5_BA_NETH)) {vp[vn] = "produce nether balls";color[vn++] = TERM_L_DARK;}
1228 if (flags5 & (RF5_BA_WATE)) {vp[vn] = "¥¦¥©¡¼¥¿¡¼¡¦¥Ü¡¼¥ë";color[vn++] = TERM_BLUE;}
1230 if (flags5 & (RF5_BA_WATE)) {vp[vn] = "produce water balls";color[vn++] = TERM_BLUE;}
1234 if (flags4 & (RF4_BA_NUKE)) {vp[vn] = "Êü¼Íǽµå";color[vn++] = TERM_L_GREEN;}
1236 if (flags4 & (RF4_BA_NUKE)) {vp[vn] = "produce balls of radiation";color[vn++] = TERM_L_GREEN;}
1240 if (flags5 & (RF5_BA_MANA)) {vp[vn] = "ËâÎϤÎÍò";color[vn++] = TERM_L_BLUE;}
1242 if (flags5 & (RF5_BA_MANA)) {vp[vn] = "invoke mana storms";color[vn++] = TERM_L_BLUE;}
1246 if (flags5 & (RF5_BA_DARK)) {vp[vn] = "°Å¹õ¤ÎÍò";color[vn++] = TERM_L_DARK;}
1248 if (flags5 & (RF5_BA_DARK)) {vp[vn] = "invoke darkness storms";color[vn++] = TERM_L_DARK;}
1252 if (flags5 & (RF5_BA_LITE)) {vp[vn] = "¥¹¥¿¡¼¥Ð¡¼¥¹¥È";color[vn++] = TERM_YELLOW;}
1254 if (flags5 & (RF5_BA_LITE)) {vp[vn] = "invoke starburst";color[vn++] = TERM_YELLOW;}
1258 if (flags4 & (RF4_BA_CHAO)) {vp[vn] = "½ã¥í¥°¥ë¥¹";color[vn++] = TERM_VIOLET;}
1260 if (flags4 & (RF4_BA_CHAO)) {vp[vn] = "invoke raw Logrus";color[vn++] = TERM_VIOLET;}
1264 if (flags6 & (RF6_HAND_DOOM)) {vp[vn] = "ÇËÌǤμê";color[vn++] = TERM_VIOLET;}
1266 if (flags6 & (RF6_HAND_DOOM)) {vp[vn] = "invoke the Hand of Doom";color[vn++] = TERM_VIOLET;}
1270 if (flags6 & (RF6_PSY_SPEAR)) {vp[vn] = "¸÷¤Î·õ";color[vn++] = TERM_YELLOW;}
1272 if (flags6 & (RF6_PSY_SPEAR)) {vp[vn] = "psycho-spear";color[vn++] = TERM_YELLOW;}
1276 if (flags5 & (RF5_DRAIN_MANA)) {vp[vn] = "ËâÎϵۼý";color[vn++] = TERM_SLATE;}
1278 if (flags5 & (RF5_DRAIN_MANA)) {vp[vn] = "drain mana";color[vn++] = TERM_SLATE;}
1282 if (flags5 & (RF5_MIND_BLAST)) {vp[vn] = "Àº¿À¹¶·â";color[vn++] = TERM_L_RED;}
1284 if (flags5 & (RF5_MIND_BLAST)) {vp[vn] = "cause mind blasting";color[vn++] = TERM_L_RED;}
1288 if (flags5 & (RF5_BRAIN_SMASH)) {vp[vn] = "Ǿ¹¶·â";color[vn++] = TERM_RED;}
1290 if (flags5 & (RF5_BRAIN_SMASH)) {vp[vn] = "cause brain smashing";color[vn++] = TERM_RED;}
1294 if (flags5 & (RF5_CAUSE_1)) {vp[vn] = "·Ú½ý¡Ü¼ö¤¤";color[vn++] = TERM_L_WHITE;}
1296 if (flags5 & (RF5_CAUSE_1)) {vp[vn] = "cause light wounds and cursing";color[vn++] = TERM_L_WHITE;}
1300 if (flags5 & (RF5_CAUSE_2)) {vp[vn] = "½Å½ý¡Ü¼ö¤¤";color[vn++] = TERM_L_WHITE;}
1302 if (flags5 & (RF5_CAUSE_2)) {vp[vn] = "cause serious wounds and cursing";color[vn++] = TERM_L_WHITE;}
1306 if (flags5 & (RF5_CAUSE_3)) {vp[vn] = "Ã×Ì¿½ý¡Ü¼ö¤¤";color[vn++] = TERM_L_WHITE;}
1308 if (flags5 & (RF5_CAUSE_3)) {vp[vn] = "cause critical wounds and cursing";color[vn++] = TERM_L_WHITE;}
1312 if (flags5 & (RF5_CAUSE_4)) {vp[vn] = "È빦¤òÆͤ¯";color[vn++] = TERM_L_WHITE;}
1314 if (flags5 & (RF5_CAUSE_4)) {vp[vn] = "cause mortal wounds";color[vn++] = TERM_L_WHITE;}
1318 if (flags5 & (RF5_BO_ACID)) {vp[vn] = "¥¢¥·¥Ã¥É¡¦¥Ü¥ë¥È";color[vn++] = TERM_GREEN;}
1320 if (flags5 & (RF5_BO_ACID)) {vp[vn] = "produce acid bolts";color[vn++] = TERM_GREEN;}
1324 if (flags5 & (RF5_BO_ELEC)) {vp[vn] = "¥µ¥ó¥À¡¼¡¦¥Ü¥ë¥È";color[vn++] = TERM_BLUE;}
1326 if (flags5 & (RF5_BO_ELEC)) {vp[vn] = "produce lightning bolts";color[vn++] = TERM_BLUE;}
1330 if (flags5 & (RF5_BO_FIRE)) {vp[vn] = "¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È";color[vn++] = TERM_RED;}
1332 if (flags5 & (RF5_BO_FIRE)) {vp[vn] = "produce fire bolts";color[vn++] = TERM_RED;}
1336 if (flags5 & (RF5_BO_COLD)) {vp[vn] = "¥¢¥¤¥¹¡¦¥Ü¥ë¥È";color[vn++] = TERM_L_WHITE;}
1338 if (flags5 & (RF5_BO_COLD)) {vp[vn] = "produce frost bolts";color[vn++] = TERM_L_WHITE;}
1342 if (flags5 & (RF5_BO_NETH)) {vp[vn] = "ÃϹö¤ÎÌð";color[vn++] = TERM_L_DARK;}
1344 if (flags5 & (RF5_BO_NETH)) {vp[vn] = "produce nether bolts";color[vn++] = TERM_L_DARK;}
1348 if (flags5 & (RF5_BO_WATE)) {vp[vn] = "¥¦¥©¡¼¥¿¡¼¡¦¥Ü¥ë¥È";color[vn++] = TERM_BLUE;}
1350 if (flags5 & (RF5_BO_WATE)) {vp[vn] = "produce water bolts";color[vn++] = TERM_BLUE;}
1354 if (flags5 & (RF5_BO_MANA)) {vp[vn] = "ËâÎϤÎÌð";color[vn++] = TERM_L_BLUE;}
1356 if (flags5 & (RF5_BO_MANA)) {vp[vn] = "produce mana bolts";color[vn++] = TERM_L_BLUE;}
1360 if (flags5 & (RF5_BO_PLAS)) {vp[vn] = "¥×¥é¥º¥Þ¡¦¥Ü¥ë¥È";color[vn++] = TERM_L_RED;}
1362 if (flags5 & (RF5_BO_PLAS)) {vp[vn] = "produce plasma bolts";color[vn++] = TERM_L_RED;}
1366 if (flags5 & (RF5_BO_ICEE)) {vp[vn] = "¶Ë´¨¤ÎÌð";color[vn++] = TERM_WHITE;}
1368 if (flags5 & (RF5_BO_ICEE)) {vp[vn] = "produce ice bolts";color[vn++] = TERM_WHITE;}
1372 if (flags5 & (RF5_MISSILE)) {vp[vn] = "¥Þ¥¸¥Ã¥¯¥ß¥µ¥¤¥ë";color[vn++] = TERM_SLATE;}
1374 if (flags5 & (RF5_MISSILE)) {vp[vn] = "produce magic missiles";color[vn++] = TERM_SLATE;}
1378 if (flags5 & (RF5_SCARE)) {vp[vn] = "¶²ÉÝ";color[vn++] = TERM_SLATE;}
1380 if (flags5 & (RF5_SCARE)) {vp[vn] = "terrify";color[vn++] = TERM_SLATE;}
1384 if (flags5 & (RF5_BLIND)) {vp[vn] = "Ìܤ¯¤é¤Þ¤·";color[vn++] = TERM_L_DARK;}
1386 if (flags5 & (RF5_BLIND)) {vp[vn] = "blind";color[vn++] = TERM_L_DARK;}
1390 if (flags5 & (RF5_CONF)) {vp[vn] = "º®Íð";color[vn++] = TERM_L_UMBER;}
1392 if (flags5 & (RF5_CONF)) {vp[vn] = "confuse";color[vn++] = TERM_L_UMBER;}
1396 if (flags5 & (RF5_SLOW)) {vp[vn] = "¸ºÂ®";color[vn++] = TERM_UMBER;}
1398 if (flags5 & (RF5_SLOW)) {vp[vn] = "slow";color[vn++] = TERM_UMBER;}
1402 if (flags5 & (RF5_HOLD)) {vp[vn] = "Ëãáã";color[vn++] = TERM_RED;}
1404 if (flags5 & (RF5_HOLD)) {vp[vn] = "paralyze";color[vn++] = TERM_RED;}
1408 if (flags6 & (RF6_HASTE)) {vp[vn] = "²Ã®";color[vn++] = TERM_L_GREEN;}
1410 if (flags6 & (RF6_HASTE)) {vp[vn] = "haste-self";color[vn++] = TERM_L_GREEN;}
1414 if (flags6 & (RF6_HEAL)) {vp[vn] = "¼£Ìþ";color[vn++] = TERM_WHITE;}
1416 if (flags6 & (RF6_HEAL)) {vp[vn] = "heal-self";color[vn++] = TERM_WHITE;}
1420 if (flags6 & (RF6_INVULNER)) {vp[vn] = "̵Ũ²½";color[vn++] = TERM_WHITE;}
1422 if (flags6 & (RF6_INVULNER)) {vp[vn] = "make invulnerable";color[vn++] = TERM_WHITE;}
1426 if (flags4 & RF4_DISPEL) {vp[vn] = "ËâÎϾõî";color[vn++] = TERM_L_WHITE;}
1428 if (flags4 & RF4_DISPEL) {vp[vn] = "dispel-magic";color[vn++] = TERM_L_WHITE;}
1432 if (flags6 & (RF6_BLINK)) {vp[vn] = "¥·¥ç¡¼¥È¥Æ¥ì¥Ý¡¼¥È";color[vn++] = TERM_UMBER;}
1434 if (flags6 & (RF6_BLINK)) {vp[vn] = "blink-self";color[vn++] = TERM_UMBER;}
1438 if (flags6 & (RF6_TPORT)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È";color[vn++] = TERM_ORANGE;}
1440 if (flags6 & (RF6_TPORT)) {vp[vn] = "teleport-self";color[vn++] = TERM_ORANGE;}
1444 if (flags6 & (RF6_WORLD)) {vp[vn] = "»þ¤ò»ß¤á¤ë";color[vn++] = TERM_L_BLUE;}
1446 if (flags6 & (RF6_WORLD)) {vp[vn] = "stop the time";color[vn++] = TERM_L_BLUE;}
1450 if (flags6 & (RF6_TELE_TO)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È¥Ð¥Ã¥¯";color[vn++] = TERM_L_UMBER;}
1452 if (flags6 & (RF6_TELE_TO)) {vp[vn] = "teleport to";color[vn++] = TERM_L_UMBER;}
1456 if (flags6 & (RF6_TELE_AWAY)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È¥¢¥¦¥§¥¤";color[vn++] = TERM_UMBER;}
1458 if (flags6 & (RF6_TELE_AWAY)) {vp[vn] = "teleport away";color[vn++] = TERM_UMBER;}
1462 if (flags6 & (RF6_TELE_LEVEL)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È¡¦¥ì¥Ù¥ë";color[vn++] = TERM_ORANGE;}
1464 if (flags6 & (RF6_TELE_LEVEL)) {vp[vn] = "teleport level";color[vn++] = TERM_ORANGE;}
1468 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;}}
1470 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;}
1474 if (flags6 & (RF6_TRAPS)) {vp[vn] = "¥È¥é¥Ã¥×";color[vn++] = TERM_BLUE;}
1476 if (flags6 & (RF6_TRAPS)) {vp[vn] = "create traps";color[vn++] = TERM_BLUE;}
1480 if (flags6 & (RF6_FORGET)) {vp[vn] = "µ²±¾Ãµî";color[vn++] = TERM_BLUE;}
1482 if (flags6 & (RF6_FORGET)) {vp[vn] = "cause amnesia";color[vn++] = TERM_BLUE;}
1486 if (flags6 & (RF6_RAISE_DEAD)) {vp[vn] = "»à¼ÔÉü³è";color[vn++] = TERM_RED;}
1488 if (flags6 & (RF6_RAISE_DEAD)) {vp[vn] = "raise dead";color[vn++] = TERM_RED;}
1492 if (flags6 & (RF6_S_MONSTER)) {vp[vn] = "¥â¥ó¥¹¥¿¡¼°ìÂξ¤´";color[vn++] = TERM_SLATE;}
1494 if (flags6 & (RF6_S_MONSTER)) {vp[vn] = "summon a monster";color[vn++] = TERM_SLATE;}
1498 if (flags6 & (RF6_S_MONSTERS)) {vp[vn] = "¥â¥ó¥¹¥¿¡¼Ê£¿ô¾¤´";color[vn++] = TERM_L_WHITE;}
1500 if (flags6 & (RF6_S_MONSTERS)) {vp[vn] = "summon monsters";color[vn++] = TERM_L_WHITE;}
1504 if (flags6 & (RF6_S_KIN)) {vp[vn] = "µß±ç¾¤´";color[vn++] = TERM_ORANGE;}
1506 if (flags6 & (RF6_S_KIN)) {vp[vn] = "summon aid";color[vn++] = TERM_ORANGE;}
1510 if (flags6 & (RF6_S_ANT)) {vp[vn] = "¥¢¥ê¾¤´";color[vn++] = TERM_RED;}
1512 if (flags6 & (RF6_S_ANT)) {vp[vn] = "summon ants";color[vn++] = TERM_RED;}
1516 if (flags6 & (RF6_S_SPIDER)) {vp[vn] = "¥¯¥â¾¤´";color[vn++] = TERM_L_DARK;}
1518 if (flags6 & (RF6_S_SPIDER)) {vp[vn] = "summon spiders";color[vn++] = TERM_L_DARK;}
1522 if (flags6 & (RF6_S_HOUND)) {vp[vn] = "¥Ï¥¦¥ó¥É¾¤´";color[vn++] = TERM_L_UMBER;}
1524 if (flags6 & (RF6_S_HOUND)) {vp[vn] = "summon hounds";color[vn++] = TERM_L_UMBER;}
1528 if (flags6 & (RF6_S_HYDRA)) {vp[vn] = "¥Ò¥É¥é¾¤´";color[vn++] = TERM_L_GREEN;}
1530 if (flags6 & (RF6_S_HYDRA)) {vp[vn] = "summon hydras";color[vn++] = TERM_L_GREEN;}
1534 if (flags6 & (RF6_S_ANGEL)) {vp[vn] = "Å·»È°ìÂξ¤´";color[vn++] = TERM_YELLOW;}
1536 if (flags6 & (RF6_S_ANGEL)) {vp[vn] = "summon an angel";color[vn++] = TERM_YELLOW;}
1540 if (flags6 & (RF6_S_DEMON)) {vp[vn] = "¥Ç¡¼¥â¥ó°ìÂξ¤´";color[vn++] = TERM_L_RED;}
1542 if (flags6 & (RF6_S_DEMON)) {vp[vn] = "summon a demon";color[vn++] = TERM_L_RED;}
1546 if (flags6 & (RF6_S_UNDEAD)) {vp[vn] = "¥¢¥ó¥Ç¥Ã¥É°ìÂξ¤´";color[vn++] = TERM_L_DARK;}
1548 if (flags6 & (RF6_S_UNDEAD)) {vp[vn] = "summon an undead";color[vn++] = TERM_L_DARK;}
1552 if (flags6 & (RF6_S_DRAGON)) {vp[vn] = "¥É¥é¥´¥ó°ìÂξ¤´";color[vn++] = TERM_ORANGE;}
1554 if (flags6 & (RF6_S_DRAGON)) {vp[vn] = "summon a dragon";color[vn++] = TERM_ORANGE;}
1558 if (flags6 & (RF6_S_HI_UNDEAD)) {vp[vn] = "¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¾¤´";color[vn++] = TERM_L_DARK;}
1560 if (flags6 & (RF6_S_HI_UNDEAD)) {vp[vn] = "summon Greater Undead";color[vn++] = TERM_L_DARK;}
1564 if (flags6 & (RF6_S_HI_DRAGON)) {vp[vn] = "¸ÅÂå¥É¥é¥´¥ó¾¤´";color[vn++] = TERM_ORANGE;}
1566 if (flags6 & (RF6_S_HI_DRAGON)) {vp[vn] = "summon Ancient Dragons";color[vn++] = TERM_ORANGE;}
1570 if (flags6 & (RF6_S_CYBER)) {vp[vn] = "¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¾¤´";color[vn++] = TERM_UMBER;}
1572 if (flags6 & (RF6_S_CYBER)) {vp[vn] = "summon Cyberdemons";color[vn++] = TERM_UMBER;}
1576 if (flags6 & (RF6_S_AMBERITES)) {vp[vn] = "¥¢¥ó¥Ð¡¼¤Î²¦Â²¾¤´";color[vn++] = TERM_VIOLET;}
1578 if (flags6 & (RF6_S_AMBERITES)) {vp[vn] = "summon Lords of Amber";color[vn++] = TERM_VIOLET;}
1582 if (flags6 & (RF6_S_UNIQUE)) {vp[vn] = "¥æ¥Ë¡¼¥¯¡¦¥â¥ó¥¹¥¿¡¼¾¤´";color[vn++] = TERM_VIOLET;}
1584 if (flags6 & (RF6_S_UNIQUE)) {vp[vn] = "summon Unique Monsters";color[vn++] = TERM_VIOLET;}
1588 /* Describe spells */
1600 roff(", and is also");
1607 roff(format("%^s¤Ï", wd_he[msex]));
1609 roff(format("%^s is", wd_he[msex]));
1616 if (flags2 & (RF2_SMART)) c_roff(TERM_YELLOW, "Ū³Î¤Ë");
1619 roff("ËâË¡¤ò»È¤¦¤³¤È¤¬¤Ç¤¡¢");
1622 roff(" magical, casting spells");
1625 if (flags2 & RF2_SMART) roff(" intelligently");
1630 for (n = 0; n < vn; n++)
1634 if ( n != 0 ) roff("¡¢");
1636 if (n == 0) roff(" which ");
1637 else if (n < vn-1) roff(", ");
1643 c_roff(color[n], vp[n]);
1646 roff("¤Î¼öʸ¤ò¾§¤¨¤ë¤³¤È¤¬¤¢¤ë");
1651 /* End the sentence about inate/other spells */
1652 if (breath || magic)
1655 m = r_ptr->r_cast_inate + r_ptr->r_cast_spell;
1657 /* Average frequency */
1658 n = (r_ptr->freq_inate + r_ptr->freq_spell) / 2;
1660 /* Describe the spell frequency */
1664 roff(format("(³ÎΨ:1/%d)", 100 / n));
1666 roff(format("; 1 time in %d", 100 / n));
1671 /* Guess at the frequency */
1674 n = ((n + 9) / 10) * 10;
1676 roff(format("(³ÎΨ:Ìó1/%d)", 100 / n));
1678 roff(format("; about 1 time in %d", 100 / n));
1683 /* End this sentence */
1692 /* Describe monster "toughness" */
1693 if (know_armour(r_idx))
1697 roff(format("%^s¤Ï AC%d ¤ÎËɸæÎϤÈ",
1699 roff(format("%^s has an armor rating of %d",
1702 wd_he[msex], r_ptr->ac));
1704 /* Maximized hitpoints */
1705 if (flags1 & RF1_FORCE_MAXHP)
1708 roff(format(" %d ¤ÎÂÎÎϤ¬¤¢¤ë¡£",
1710 roff(format(" and a life rating of %d. ",
1713 r_ptr->hdice * r_ptr->hside));
1716 /* Variable hitpoints */
1720 roff(format(" %dd%d ¤ÎÂÎÎϤ¬¤¢¤ë¡£",
1722 roff(format(" and a life rating of %dd%d. ",
1725 r_ptr->hdice, r_ptr->hside));
1731 /* Collect special abilities. */
1734 if (flags7 & (RF7_HAS_LITE_1 | RF7_HAS_LITE_2)) vp[vn++] = "¥À¥ó¥¸¥ç¥ó¤ò¾È¤é¤¹";
1736 if (flags7 & (RF7_HAS_LITE_1 | RF7_HAS_LITE_2)) vp[vn++] = "illuminate the dungeon";
1740 if (flags2 & RF2_OPEN_DOOR) vp[vn++] = "¥É¥¢¤ò³«¤±¤ë";
1742 if (flags2 & RF2_OPEN_DOOR) vp[vn++] = "open doors";
1746 if (flags2 & RF2_BASH_DOOR) vp[vn++] = "¥É¥¢¤òÂǤÁÇˤë";
1748 if (flags2 & RF2_BASH_DOOR) vp[vn++] = "bash down doors";
1752 if (flags2 & RF2_PASS_WALL) vp[vn++] = "Êɤò¤¹¤êÈ´¤±¤ë";
1754 if (flags2 & RF2_PASS_WALL) vp[vn++] = "pass through walls";
1758 if (flags2 & RF2_KILL_WALL) vp[vn++] = "Êɤò·¡¤ê¿Ê¤à";
1760 if (flags2 & RF2_KILL_WALL) vp[vn++] = "bore through walls";
1764 if (flags2 & RF2_MOVE_BODY) vp[vn++] = "¼å¤¤¥â¥ó¥¹¥¿¡¼¤ò²¡¤·¤Î¤±¤ë";
1766 if (flags2 & RF2_MOVE_BODY) vp[vn++] = "push past weaker monsters";
1770 if (flags2 & RF2_KILL_BODY) vp[vn++] = "¼å¤¤¥â¥ó¥¹¥¿¡¼¤òÅݤ¹";
1772 if (flags2 & RF2_KILL_BODY) vp[vn++] = "destroy weaker monsters";
1776 if (flags2 & RF2_TAKE_ITEM) vp[vn++] = "¥¢¥¤¥Æ¥à¤ò½¦¤¦";
1778 if (flags2 & RF2_TAKE_ITEM) vp[vn++] = "pick up objects";
1782 if (flags2 & RF2_KILL_ITEM) vp[vn++] = "¥¢¥¤¥Æ¥à¤ò²õ¤¹";
1784 if (flags2 & RF2_KILL_ITEM) vp[vn++] = "destroy objects";
1788 /* Describe special abilities. */
1793 roff(format("%^s¤Ï", wd_he[msex]));
1795 roff(format("%^s", wd_he[msex]));
1800 for (n = 0; n < vn; n++)
1805 jverb(vp[n],jverb_buf,JVERB_AND);
1811 if (n == 0) roff(" can ");
1812 else if (n < vn-1) roff(", ");
1823 roff("¤³¤È¤¬¤Ç¤¤ë¡£");
1831 /* Describe special abilities. */
1832 if (flags7 & (RF7_SELF_LITE_1 | RF7_SELF_LITE_2))
1835 roff(format("%^s¤Ï¸÷¤Ã¤Æ¤¤¤ë¡£", wd_he[msex]));
1837 roff(format("%^s illuminate the dungeon. ", wd_he[msex]));
1841 if (flags2 & RF2_INVISIBLE)
1844 roff(format("%^s¤ÏÆ©ÌÀ¤ÇÌܤ˸«¤¨¤Ê¤¤¡£", wd_he[msex]));
1846 roff(format("%^s is invisible. ", wd_he[msex]));
1850 if (flags2 & RF2_COLD_BLOOD)
1853 roff(format("%^s¤ÏÎä·ìưʪ¤Ç¤¢¤ë¡£", wd_he[msex]));
1855 roff(format("%^s is cold blooded. ", wd_he[msex]));
1859 if (flags2 & RF2_EMPTY_MIND)
1862 roff(format("%^s¤Ï¥Æ¥ì¥Ñ¥·¡¼¤Ç¤Ï´¶ÃΤǤ¤Ê¤¤¡£", wd_he[msex]));
1864 roff(format("%^s is not detected by telepathy. ", wd_he[msex]));
1868 else if (flags2 & RF2_WEIRD_MIND)
1871 roff(format("%^s¤Ï¤Þ¤ì¤Ë¥Æ¥ì¥Ñ¥·¡¼¤Ç´¶ÃΤǤ¤ë¡£", wd_he[msex]));
1873 roff(format("%^s is rarely detected by telepathy. ", wd_he[msex]));
1877 if (flags2 & RF2_MULTIPLY)
1880 c_roff(TERM_L_UMBER, format("%^s¤ÏÇúȯŪ¤ËÁý¿£¤¹¤ë¡£", wd_he[msex]));
1882 c_roff(TERM_L_UMBER, format("%^s breeds explosively. ", wd_he[msex]));
1886 if (flags2 & RF2_REGENERATE)
1889 c_roff(TERM_L_WHITE, format("%^s¤ÏÁÇÁ᤯ÂÎÎϤò²óÉü¤¹¤ë¡£", wd_he[msex]));
1891 c_roff(TERM_L_WHITE, format("%^s regenerates quickly. ", wd_he[msex]));
1895 if (flags7 & RF7_RIDING)
1898 c_roff(TERM_SLATE, format("%^s¤Ë¾è¤ë¤³¤È¤¬¤Ç¤¤ë¡£", wd_he[msex]));
1900 c_roff(TERM_SLATE, format("%^s is suitable for riding. ", wd_he[msex]));
1906 /* Collect susceptibilities */
1909 if (flags3 & RF3_HURT_ROCK) {vp[vn] = "´ä¤ò½üµî¤¹¤ë¤â¤Î";color[vn++] = TERM_UMBER;}
1911 if (flags3 & RF3_HURT_ROCK) {vp[vn] = "rock remover";color[vn++] = TERM_UMBER;}
1915 if (flags3 & RF3_HURT_LITE) {vp[vn] = "ÌÀ¤ë¤¤¸÷";color[vn++] = TERM_YELLOW;}
1917 if (flags3 & RF3_HURT_LITE) {vp[vn] = "bright light";color[vn++] = TERM_YELLOW;}
1921 if (flags3 & RF3_HURT_FIRE) {vp[vn] = "±ê";color[vn++] = TERM_RED;}
1923 if (flags3 & RF3_HURT_FIRE) {vp[vn] = "fire";color[vn++] = TERM_RED;}
1927 if (flags3 & RF3_HURT_COLD) {vp[vn] = "Î䵤";color[vn++] = TERM_L_WHITE;}
1929 if (flags3 & RF3_HURT_COLD) {vp[vn] = "cold";color[vn++] = TERM_L_WHITE;}
1933 /* Describe susceptibilities */
1938 roff(format("%^s¤Ë¤Ï", wd_he[msex]));
1940 roff(format("%^s", wd_he[msex]));
1945 for (n = 0; n < vn; n++)
1949 if ( n != 0 ) roff("¤ä");
1951 if (n == 0) roff(" is hurt by ");
1952 else if (n < vn-1) roff(", ");
1958 c_roff(color[n], vp[n]);
1963 roff("¤Ç¥À¥á¡¼¥¸¤òÍ¿¤¨¤é¤ì¤ë¡£");
1971 /* Collect immunities */
1974 if (flags3 & RF3_IM_ACID) {vp[vn] = "»À";color[vn++] = TERM_GREEN;}
1976 if (flags3 & RF3_IM_ACID) {vp[vn] = "acid";color[vn++] = TERM_GREEN;}
1980 if (flags3 & RF3_IM_ELEC) {vp[vn] = "°ðºÊ";color[vn++] = TERM_BLUE;}
1982 if (flags3 & RF3_IM_ELEC) {vp[vn] = "lightning";color[vn++] = TERM_BLUE;}
1986 if (flags3 & RF3_IM_FIRE) {vp[vn] = "±ê";color[vn++] = TERM_RED;}
1988 if (flags3 & RF3_IM_FIRE) {vp[vn] = "fire";color[vn++] = TERM_RED;}
1992 if (flags3 & RF3_IM_COLD) {vp[vn] = "Î䵤";color[vn++] = TERM_L_WHITE;}
1994 if (flags3 & RF3_IM_COLD) {vp[vn] = "cold";color[vn++] = TERM_L_WHITE;}
1998 if (flags3 & RF3_IM_POIS) {vp[vn] = "ÆÇ";color[vn++] = TERM_L_GREEN;}
2000 if (flags3 & RF3_IM_POIS) {vp[vn] = "poison";color[vn++] = TERM_L_GREEN;}
2004 /* Describe immunities */
2009 roff(format("%^s¤Ï", wd_he[msex]));
2011 roff(format("%^s", wd_he[msex]));
2016 for (n = 0; n < vn; n++)
2020 if ( n != 0 ) roff("¤È");
2022 if (n == 0) roff(" resists ");
2023 else if (n < vn-1) roff(", ");
2029 c_roff(color[n], vp[n]);
2034 roff("¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£");
2042 /* Collect resistances */
2045 if (flags4 & RF4_BR_LITE) {vp[vn] = "Á®¸÷";color[vn++] = TERM_YELLOW;}
2047 if (flags4 & RF4_BR_LITE) {vp[vn] = "light";color[vn++] = TERM_YELLOW;}
2051 if ((flags4 & RF4_BR_DARK) || (flags3 & RF3_ORC)) {vp[vn] = "°Å¹õ";color[vn++] = TERM_L_DARK;}
2053 if (flags4 & RF4_BR_DARK || (flags3 & RF3_ORC)) {vp[vn] = "dark";color[vn++] = TERM_L_DARK;}
2057 if (flags3 & RF3_RES_NETH) {vp[vn] = "ÃϹö";color[vn++] = TERM_L_DARK;}
2059 if (flags3 & RF3_RES_NETH) {vp[vn] = "nether";color[vn++] = TERM_L_DARK;}
2063 if (flags3 & RF3_RES_WATE) {vp[vn] = "¿å";color[vn++] = TERM_BLUE;}
2065 if (flags3 & RF3_RES_WATE) {vp[vn] = "water";color[vn++] = TERM_BLUE;}
2069 if (flags3 & RF3_RES_PLAS) {vp[vn] = "¥×¥é¥º¥Þ";color[vn++] = TERM_L_RED;}
2071 if (flags3 & RF3_RES_PLAS) {vp[vn] = "plasma";color[vn++] = TERM_L_RED;}
2075 if (flags4 & RF4_BR_SHAR) {vp[vn] = "ÇËÊÒ";color[vn++] = TERM_L_UMBER;}
2077 if (flags4 & RF4_BR_SHAR) {vp[vn] = "shards";color[vn++] = TERM_L_UMBER;}
2081 if (flags4 & RF4_BR_SOUN) {vp[vn] = "¹ì²»";color[vn++] = TERM_ORANGE;}
2083 if (flags4 & RF4_BR_SOUN) {vp[vn] = "sound";color[vn++] = TERM_ORANGE;}
2087 if (flags4 & RF4_BR_CONF) {vp[vn] = "º®Íð";color[vn++] = TERM_L_UMBER;}
2089 if (flags4 & RF4_BR_CONF) {vp[vn] = "conf";color[vn++] = TERM_L_UMBER;}
2093 if ((flags4 & RF4_BR_CHAO) || (r_idx == MON_STORMBRINGER)) {vp[vn] = "¥«¥ª¥¹";color[vn++] = TERM_VIOLET;}
2095 if ((flags4 & RF4_BR_CHAO) || (r_idx == MON_STORMBRINGER)) {vp[vn] = "chaos";color[vn++] = TERM_VIOLET;}
2099 if (flags3 & RF3_RES_NEXU) {vp[vn] = "°ø²Ìº®Íð";color[vn++] = TERM_VIOLET;}
2101 if (flags3 & RF3_RES_NEXU) {vp[vn] = "nexus";color[vn++] = TERM_VIOLET;}
2105 if (flags3 & RF3_RES_DISE) {vp[vn] = "Îô²½";color[vn++] = TERM_VIOLET;}
2107 if (flags3 & RF3_RES_DISE) {vp[vn] = "disenchantment";color[vn++] = TERM_VIOLET;}
2111 if (flags4 & RF4_BR_WALL) {vp[vn] = "¥Õ¥©¡¼¥¹";color[vn++] = TERM_UMBER;}
2113 if (flags4 & RF4_BR_WALL) {vp[vn] = "sound";color[vn++] = TERM_UMBER;}
2117 if (flags4 & RF4_BR_INER) {vp[vn] = "ÃÙÆß";color[vn++] = TERM_SLATE;}
2119 if (flags4 & RF4_BR_INER) {vp[vn] = "inertia";color[vn++] = TERM_SLATE;}
2123 if (flags4 & RF4_BR_TIME) {vp[vn] = "»þ´ÖµÕž";color[vn++] = TERM_L_BLUE;}
2125 if (flags4 & RF4_BR_TIME) {vp[vn] = "time";color[vn++] = TERM_L_BLUE;}
2129 if (flags4 & RF4_BR_GRAV) {vp[vn] = "½ÅÎÏ";color[vn++] = TERM_SLATE;}
2131 if (flags4 & RF4_BR_GRAV) {vp[vn] = "gravity";color[vn++] = TERM_SLATE;}
2135 if (flags3 & RF3_RES_ALL) {vp[vn] = "¤¢¤é¤æ¤ë¹¶·â";color[vn++] = TERM_YELLOW;}
2137 if (flags3 & RF3_RES_ALL) {vp[vn] = "all";color[vn++] = TERM_YELLOW;}
2141 if ((flags3 & RF3_RES_TELE) && !(r_ptr->flags1 & RF1_UNIQUE)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È";color[vn++] = TERM_ORANGE;}
2143 if ((flags3 & RF3_RES_TELE) && !(r_ptr->flags1 & RF1_UNIQUE)) {vp[vn] = "teleportation";color[vn++] = TERM_ORANGE;}
2147 /* Describe resistances */
2152 roff(format("%^s¤Ï", wd_he[msex]));
2154 roff(format("%^s", wd_he[msex]));
2159 for (n = 0; n < vn; n++)
2163 if ( n != 0 ) roff("¤È");
2165 if (n == 0) roff(" resists ");
2166 else if (n < vn-1) roff(", ");
2172 c_roff(color[n], vp[n]);
2177 roff("¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£");
2185 if ((r_ptr->r_xtra1 & MR1_SINKA) || cheat_know)
2187 if (r_ptr->next_r_idx)
2190 roff(format("%^s¤Ï·Ð¸³¤òÀѤà¤È¡¢", wd_he[msex]));
2192 roff(format("%^s will evolve into ", wd_he[msex]));
2194 c_roff(TERM_YELLOW, format("%s", r_name+r_info[r_ptr->next_r_idx].name));
2196 roff(format("¤Ë¿Ê²½¤¹¤ë¡£"));
2198 roff(format(" when %s gets enugh experience. ", wd_he[msex]));
2201 else if (!(r_ptr->flags1 & RF1_UNIQUE))
2204 roff(format("%s¤Ï¿Ê²½¤·¤Ê¤¤¡£", wd_he[msex]));
2206 roff(format("%s won't evolve. ", wd_he[msex]));
2211 /* Collect non-effects */
2214 if (flags3 & RF3_NO_STUN) {vp[vn] = "Û¯Û°¤È¤·¤Ê¤¤";color[vn++] = TERM_ORANGE;}
2216 if (flags3 & RF3_NO_STUN) {vp[vn] = "stunned";color[vn++] = TERM_ORANGE;}
2220 if (flags3 & RF3_NO_FEAR) {vp[vn] = "¶²Éݤò´¶¤¸¤Ê¤¤";color[vn++] = TERM_SLATE;}
2222 if (flags3 & RF3_NO_FEAR) {vp[vn] = "frightened";color[vn++] = TERM_SLATE;}
2226 if (flags3 & RF3_NO_CONF) {vp[vn] = "º®Í𤷤ʤ¤";color[vn++] = TERM_L_UMBER;}
2228 if (flags3 & RF3_NO_CONF) {vp[vn] = "confused";color[vn++] = TERM_L_UMBER;}
2232 if (flags3 & RF3_NO_SLEEP) {vp[vn] = "̲¤é¤µ¤ì¤Ê¤¤";color[vn++] = TERM_BLUE;}
2234 if (flags3 & RF3_NO_SLEEP) {vp[vn] = "slept";color[vn++] = TERM_BLUE;}
2238 if ((flags3 & RF3_RES_TELE) && (r_ptr->flags1 & RF1_UNIQUE)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È¤µ¤ì¤Ê¤¤";color[vn++] = TERM_ORANGE;}
2240 if ((flags3 & RF3_RES_TELE) && (r_ptr->flags1 & RF1_UNIQUE)) {vp[vn] = "teleported";color[vn++] = TERM_ORANGE;}
2243 /* Describe non-effects */
2248 roff(format("%^s¤Ï", wd_he[msex]));
2250 roff(format("%^s", wd_he[msex]));
2255 for (n = 0; n < vn; n++)
2259 if ( n != 0 ) roff("¤·¡¢");
2261 if (n == 0) roff(" cannot be ");
2262 else if (n < vn - 1) roff(", ");
2268 c_roff(color[n], vp[n]);
2281 /* Do we know how aware it is? */
2282 if ((((int)r_ptr->r_wake * (int)r_ptr->r_wake) > r_ptr->sleep) ||
2283 (r_ptr->r_ignore == MAX_UCHAR) ||
2284 ((r_ptr->sleep == 0) && ((r_ptr->r_tkills >= 10) || cheat_know)))
2288 if (r_ptr->sleep > 200)
2291 act = "¤ò̵»ë¤·¤¬¤Á¤Ç¤¢¤ë¤¬";
2293 act = "prefers to ignore";
2297 else if (r_ptr->sleep > 95)
2300 act = "¤ËÂФ·¤Æ¤Û¤È¤ó¤ÉÃí°Õ¤òʧ¤ï¤Ê¤¤¤¬";
2302 act = "pays very little attention to";
2306 else if (r_ptr->sleep > 75)
2309 act = "¤ËÂФ·¤Æ¤¢¤Þ¤êÃí°Õ¤òʧ¤ï¤Ê¤¤¤¬";
2311 act = "pays little attention to";
2315 else if (r_ptr->sleep > 45)
2318 act = "¤ò¸«²á¤´¤·¤¬¤Á¤Ç¤¢¤ë¤¬";
2320 act = "tends to overlook";
2324 else if (r_ptr->sleep > 25)
2327 act = "¤ò¤Û¤ó¤Î¾¯¤·¤Ï¸«¤Æ¤ª¤ê";
2329 act = "takes quite a while to see";
2333 else if (r_ptr->sleep > 10)
2336 act = "¤ò¤·¤Ð¤é¤¯¤Ï¸«¤Æ¤ª¤ê";
2338 act = "takes a while to see";
2342 else if (r_ptr->sleep > 5)
2345 act = "¤ò´öʬÃí°Õ¿¼¤¯¸«¤Æ¤ª¤ê";
2347 act = "is fairly observant of";
2351 else if (r_ptr->sleep > 3)
2354 act = "¤òÃí°Õ¿¼¤¯¸«¤Æ¤ª¤ê";
2356 act = "is observant of";
2360 else if (r_ptr->sleep > 1)
2363 act = "¤ò¤«¤Ê¤êÃí°Õ¿¼¤¯¸«¤Æ¤ª¤ê";
2365 act = "is very observant of";
2369 else if (r_ptr->sleep > 0)
2372 act = "¤ò·Ù²ü¤·¤Æ¤ª¤ê";
2374 act = "is vigilant for";
2381 act = "¤ò¤«¤Ê¤ê·Ù²ü¤·¤Æ¤ª¤ê";
2383 act = "is ever vigilant for";
2389 roff(format("%^s¤Ï¿¯Æþ¼Ô%s¡¢ %d ¥Õ¥£¡¼¥ÈÀ褫¤é¿¯Æþ¼Ô¤Ëµ¤ÉÕ¤¯¤³¤È¤¬¤¢¤ë¡£",
2390 wd_he[msex], act, 10 * r_ptr->aaf));
2392 roff(format("%^s %s intruders, which %s may notice from %d feet. ",
2393 wd_he[msex], act, wd_he[msex], 10 * r_ptr->aaf));
2399 /* Drops gold and/or items */
2400 if (r_ptr->r_drop_gold || r_ptr->r_drop_item)
2407 roff(format("%^s¤Ï", wd_he[msex]));
2409 roff(format("%^s may carry", wd_he[msex]));
2413 /* Count maximum drop */
2414 n = MAX(r_ptr->r_drop_gold, r_ptr->r_drop_item);
2416 /* One drop (may need an "n") */
2432 roff("°ì¤Ä¤«Æó¤Ä¤Î");
2434 roff(" one or two");
2443 roff(format(" %d ¸Ä¤Þ¤Ç¤Î", n));
2445 roff(format(" up to %d", n));
2452 if (flags1 & RF1_DROP_GREAT)
2462 /* Good (no "n" needed) */
2463 else if (flags1 & RF1_DROP_GOOD)
2482 if (r_ptr->r_drop_item)
2484 /* Handle singular "an" */
2490 /* Dump "object(s)" */
2496 if (n != 1) roff("s");
2500 /* Conjunction replaces variety, if needed for "gold" below */
2510 if (r_ptr->r_drop_gold)
2513 if (!p) sin = FALSE;
2515 /* Handle singular "an" */
2521 /* Dump "treasure(s)" */
2527 if (n != 1) roff("s");
2532 /* End this sentence */
2534 roff("¤ò»ý¤Ã¤Æ¤¤¤ë¤³¤È¤¬¤¢¤ë¡£");
2542 /* Count the number of "known" attacks */
2543 for (n = 0, m = 0; m < 4; m++)
2545 /* Skip non-attacks */
2546 if (!r_ptr->blow[m].method) continue;
2547 if (r_ptr->blow[m].method == RBM_SHOOT) continue;
2549 /* Count known attacks */
2550 if (r_ptr->r_blows[m]) n++;
2553 /* Examine (and count) the actual attacks */
2554 for (r = 0, m = 0; m < 4; m++)
2556 int method, effect, d1, d2;
2558 /* Skip non-attacks */
2559 if (!r_ptr->blow[m].method) continue;
2560 if (r_ptr->blow[m].method == RBM_SHOOT) continue;
2562 /* Skip unknown attacks */
2563 if (!r_ptr->r_blows[m]) continue;
2565 /* Extract the attack info */
2566 method = r_ptr->blow[m].method;
2567 effect = r_ptr->blow[m].effect;
2568 d1 = r_ptr->blow[m].d_dice;
2569 d2 = r_ptr->blow[m].d_side;
2574 /* Acquire the method */
2578 case RBM_HIT: p = "²¥¤ë"; break;
2580 case RBM_HIT: p = "hit"; break;
2584 case RBM_TOUCH: p = "¿¨¤ë"; break;
2586 case RBM_TOUCH: p = "touch"; break;
2590 case RBM_PUNCH: p = "¥Ñ¥ó¥Á¤¹¤ë"; break;
2592 case RBM_PUNCH: p = "punch"; break;
2596 case RBM_KICK: p = "½³¤ë"; break;
2598 case RBM_KICK: p = "kick"; break;
2602 case RBM_CLAW: p = "¤Ò¤Ã¤«¤¯"; break;
2604 case RBM_CLAW: p = "claw"; break;
2608 case RBM_BITE: p = "³ú¤à"; break;
2610 case RBM_BITE: p = "bite"; break;
2614 case RBM_STING: p = "»É¤¹"; break;
2616 case RBM_STING: p = "sting"; break;
2620 case RBM_SLASH: p = "»Â¤ë"; break;
2622 case RBM_SLASH: p = "slash"; break;
2626 case RBM_BUTT: p = "³Ñ¤ÇÆͤ¯"; break;
2628 case RBM_BUTT: p = "butt"; break;
2632 case RBM_CRUSH: p = "ÂÎÅö¤¿¤ê¤¹¤ë"; break;
2634 case RBM_CRUSH: p = "crush"; break;
2638 case RBM_ENGULF: p = "°û¤ß¹þ¤à"; break;
2640 case RBM_ENGULF: p = "engulf"; break;
2644 case RBM_CHARGE: p = "ÀÁµá½ñ¤ò¤è¤³¤¹"; break;
2646 case RBM_CHARGE: p = "charge"; break;
2650 case RBM_CRAWL: p = "ÂΤξå¤òÇ礤²ó¤ë"; break;
2652 case RBM_CRAWL: p = "crawl on you"; break;
2656 case RBM_DROOL: p = "¤è¤À¤ì¤ò¤¿¤é¤¹"; break;
2658 case RBM_DROOL: p = "drool on you"; break;
2662 case RBM_SPIT: p = "¤Ä¤Ð¤òÅǤ¯"; break;
2664 case RBM_SPIT: p = "spit"; break;
2668 case RBM_EXPLODE: p = "Çúȯ¤¹¤ë"; break;
2670 case RBM_EXPLODE: p = "explode"; break;
2674 case RBM_GAZE: p = "¤Ë¤é¤à"; break;
2676 case RBM_GAZE: p = "gaze"; break;
2680 case RBM_WAIL: p = "µã¤¶«¤Ö"; break;
2682 case RBM_WAIL: p = "wail"; break;
2686 case RBM_SPORE: p = "˦»Ò¤òÈô¤Ð¤¹"; break;
2688 case RBM_SPORE: p = "release spores"; break;
2691 case RBM_XXX4: break;
2693 case RBM_BEG: p = "¶â¤ò¤»¤¬¤à"; break;
2695 case RBM_BEG: p = "beg"; break;
2699 case RBM_INSULT: p = "Éî¿«¤¹¤ë"; break;
2701 case RBM_INSULT: p = "insult"; break;
2705 case RBM_MOAN: p = "¤¦¤á¤¯"; break;
2707 case RBM_MOAN: p = "moan"; break;
2711 case RBM_SHOW: p = "²Î¤¦"; break;
2713 case RBM_SHOW: p = "sing"; break;
2719 /* Default effect */
2722 /* Acquire the effect */
2727 case RBE_HURT: q = "¹¶·â¤¹¤ë"; break;
2730 case RBE_HURT: q = "attack"; break;
2734 case RBE_POISON: q = "ÆǤò¤¯¤é¤ï¤¹"; break;
2736 case RBE_POISON: q = "poison"; break;
2740 case RBE_UN_BONUS: q = "Îô²½¤µ¤»¤ë"; break;
2742 case RBE_UN_BONUS: q = "disenchant"; break;
2746 case RBE_UN_POWER: q = "ËâÎϤòµÛ¤¤¼è¤ë"; break;
2748 case RBE_UN_POWER: q = "drain charges"; break;
2752 case RBE_EAT_GOLD: q = "¶â¤òÅð¤à"; break;
2754 case RBE_EAT_GOLD: q = "steal gold"; break;
2758 case RBE_EAT_ITEM: q = "¥¢¥¤¥Æ¥à¤òÅð¤à"; break;
2760 case RBE_EAT_ITEM: q = "steal items"; break;
2764 case RBE_EAT_FOOD: q = "¤¢¤Ê¤¿¤Î¿©ÎÁ¤ò¿©¤Ù¤ë"; break;
2766 case RBE_EAT_FOOD: q = "eat your food"; break;
2770 case RBE_EAT_LITE: q = "ÌÀ¤«¤ê¤òµÛ¼ý¤¹¤ë"; break;
2772 case RBE_EAT_LITE: q = "absorb light"; break;
2776 case RBE_ACID: q = "»À¤òÈô¤Ð¤¹"; break;
2778 case RBE_ACID: q = "shoot acid"; break;
2782 case RBE_ELEC: q = "´¶ÅŤµ¤»¤ë"; break;
2784 case RBE_ELEC: q = "electrocute"; break;
2788 case RBE_FIRE: q = "dz¤ä¤¹"; break;
2790 case RBE_FIRE: q = "burn"; break;
2794 case RBE_COLD: q = "Åà¤é¤»¤ë"; break;
2796 case RBE_COLD: q = "freeze"; break;
2800 case RBE_BLIND: q = "ÌÕÌܤˤ¹¤ë"; break;
2802 case RBE_BLIND: q = "blind"; break;
2806 case RBE_CONFUSE: q = "º®Í𤵤»¤ë"; break;
2808 case RBE_CONFUSE: q = "confuse"; break;
2812 case RBE_TERRIFY: q = "¶²Éݤµ¤»¤ë"; break;
2814 case RBE_TERRIFY: q = "terrify"; break;
2818 case RBE_PARALYZE: q = "Ëãá㤵¤»¤ë"; break;
2820 case RBE_PARALYZE: q = "paralyze"; break;
2824 case RBE_LOSE_STR: q = "ÏÓÎϤò¸º¾¯¤µ¤»¤ë"; break;
2826 case RBE_LOSE_STR: q = "reduce strength"; break;
2830 case RBE_LOSE_INT: q = "ÃÎǽ¤ò¸º¾¯¤µ¤»¤ë"; break;
2832 case RBE_LOSE_INT: q = "reduce intelligence"; break;
2836 case RBE_LOSE_WIS: q = "¸¤µ¤ò¸º¾¯¤µ¤»¤ë"; break;
2838 case RBE_LOSE_WIS: q = "reduce wisdom"; break;
2842 case RBE_LOSE_DEX: q = "´ïÍѤµ¤ò¸º¾¯¤µ¤»¤ë"; break;
2844 case RBE_LOSE_DEX: q = "reduce dexterity"; break;
2848 case RBE_LOSE_CON: q = "Âѵ×ÎϤò¸º¾¯¤µ¤»¤ë"; break;
2850 case RBE_LOSE_CON: q = "reduce constitution"; break;
2854 case RBE_LOSE_CHR: q = "Ì¥ÎϤò¸º¾¯¤µ¤»¤ë"; break;
2856 case RBE_LOSE_CHR: q = "reduce charisma"; break;
2860 case RBE_LOSE_ALL: q = "Á´¥¹¥Æ¡¼¥¿¥¹¤ò¸º¾¯¤µ¤»¤ë"; break;
2862 case RBE_LOSE_ALL: q = "reduce all stats"; break;
2866 case RBE_SHATTER: q = "Ê´ºÕ¤¹¤ë"; break;
2868 case RBE_SHATTER: q = "shatter"; break;
2872 case RBE_EXP_10: q = "·Ð¸³Ãͤò¸º¾¯(10d6+)¤µ¤»¤ë"; break;
2874 case RBE_EXP_10: q = "lower experience (by 10d6+)"; break;
2878 case RBE_EXP_20: q = "·Ð¸³Ãͤò¸º¾¯(20d6+)¤µ¤»¤ë"; break;
2880 case RBE_EXP_20: q = "lower experience (by 20d6+)"; break;
2884 case RBE_EXP_40: q = "·Ð¸³Ãͤò¸º¾¯(40d6+)¤µ¤»¤ë"; break;
2886 case RBE_EXP_40: q = "lower experience (by 40d6+)"; break;
2890 case RBE_EXP_80: q = "·Ð¸³Ãͤò¸º¾¯(80d6+)¤µ¤»¤ë"; break;
2892 case RBE_EXP_80: q = "lower experience (by 80d6+)"; break;
2896 case RBE_DISEASE: q = "ɵ¤¤Ë¤¹¤ë"; break;
2898 case RBE_DISEASE: q = "disease"; break;
2902 case RBE_TIME: q = "»þ´Ö¤òµÕÌá¤ê¤µ¤»¤ë"; break;
2904 case RBE_TIME: q = "time"; break;
2908 case RBE_EXP_VAMP: q = "À¸Ì¿ÎϤòµÛ¼ý¤¹¤ë"; break;
2910 case RBE_EXP_VAMP: q = "drain life force"; break;
2914 case RBE_DR_MANA: q = "ËâÎϤòÃ¥¤¦"; break;
2916 case RBE_DR_MANA: q = "drain mana force"; break;
2923 if ( r == 0 ) roff( format("%^s¤Ï", wd_he[msex]) );
2925 /***¼ã´³É½¸½¤òÊѹ¹ ita ***/
2927 /* Describe damage (if known) */
2928 if (d1 && d2 && know_damage(r_idx, m))
2931 /* Display the damage */
2932 roff(format(" %dd%d ", d1, d2));
2933 roff("¤Î¥À¥á¡¼¥¸¤Ç");
2935 /* Hack -- force a method */
2936 if (!p) p = "²¿¤«´ñ̯¤Ê¤³¤È¤ò¤¹¤ë";
2938 /* Describe the method */
2939 /* XX¤·¤ÆYY¤·/XX¤·¤ÆYY¤¹¤ë/XX¤·/XX¤¹¤ë */
2940 if(q) jverb( p ,jverb_buf, JVERB_TO);
2941 else if(r!=n-1) jverb( p ,jverb_buf, JVERB_AND);
2942 else strcpy(jverb_buf, p);
2946 /* Describe the effect (if any) */
2949 if(r!=n-1) jverb( q,jverb_buf, JVERB_AND);
2950 else strcpy(jverb_buf,q);
2953 if(r!=n-1) roff("¡¢");
2955 /* Introduce the attack description */
2958 roff(format("%^s can ", wd_he[msex]));
2970 /* Hack -- force a method */
2971 if (!p) p = "do something weird";
2973 /* Describe the method */
2977 /* Describe the effect (if any) */
2980 /* Describe the attack type */
2984 /* Describe damage (if known) */
2985 if (d1 && d2 && know_damage(r_idx, m))
2987 /* Display the damage */
2988 roff(" with damage");
2989 roff(format(" %dd%d", d1, d2));
2996 /* Count the attacks as printed */
3000 /* Finish sentence above */
3011 /* Notice lack of attacks */
3012 else if (flags1 & RF1_NEVER_BLOW)
3015 roff(format("%^s¤ÏʪÍýŪ¤Ê¹¶·âÊýË¡¤ò»ý¤¿¤Ê¤¤¡£", wd_he[msex]));
3017 roff(format("%^s has no physical attacks. ", wd_he[msex]));
3022 /* Or describe the lack of knowledge */
3026 roff(format("%s¹¶·â¤Ë¤Ä¤¤¤Æ¤Ï²¿¤âÃΤé¤Ê¤¤¡£", wd_his[msex]));
3028 roff(format("Nothing is known about %s attack. ", wd_his[msex]));
3035 * Notice "Quest" monsters, but only if you
3036 * already encountered the monster.
3038 if ((flags1 & RF1_QUESTOR) && ((r_ptr->r_sights) && (r_ptr->max_num) && ((r_idx == MON_OBERON) || (r_idx == MON_SERPENT))))
3041 c_roff(TERM_VIOLET, "¤¢¤Ê¤¿¤Ï¤³¤Î¥â¥ó¥¹¥¿¡¼¤ò»¦¤·¤¿¤¤¤È¤¤¤¦¶¯¤¤Íß˾¤ò´¶¤¸¤Æ¤¤¤ë...");
3043 c_roff(TERM_VIOLET, "You feel an intense desire to kill this monster... ");
3048 else if (flags7 & RF7_GUARDIAN)
3051 c_roff(TERM_L_RED, "¤³¤Î¥â¥ó¥¹¥¿¡¼¤Ï¥À¥ó¥¸¥ç¥ó¤Î¼ç¤Ç¤¢¤ë¡£");
3053 c_roff(TERM_L_RED, "This monster is the master of a dungeon.");
3062 /* Cheat -- know everything */
3063 if ((cheat_know) && (remem == 0))
3065 /* Hack -- restore memory */
3066 COPY(r_ptr, &save_mem, monster_race);
3073 * Hack -- Display the "name" and "attr/chars" of a monster race
3075 static void roff_top(int r_idx)
3077 monster_race *r_ptr = &r_info[r_idx];
3083 /* Access the chars */
3087 /* Access the attrs */
3092 /* Clear the top line */
3093 Term_erase(0, 0, 255);
3095 /* Reset the cursor */
3098 /* A title (use "The" for non-uniques) */
3102 if (!(r_ptr->flags1 & RF1_UNIQUE))
3106 Term_addstr(-1, TERM_WHITE, "The ");
3110 Term_addstr(-1, TERM_WHITE, (r_name + r_ptr->name));
3112 /* Append the "standard" attr/char info */
3113 Term_addstr(-1, TERM_WHITE, " ('");
3115 Term_addstr(-1, TERM_WHITE, "')");
3117 /* Append the "optional" attr/char info */
3118 Term_addstr(-1, TERM_WHITE, "/('");
3120 Term_addstr(-1, TERM_WHITE, "'):");
3122 /* Wizards get extra info */
3127 sprintf(buf, "%d", r_idx);
3129 Term_addstr(-1, TERM_WHITE, " (");
3130 Term_addstr(-1, TERM_L_BLUE, buf);
3131 Term_addch(TERM_WHITE, ')');
3138 * Hack -- describe the given monster race at the top of the screen
3140 void screen_roff(int r_idx, int remember)
3142 /* Flush messages */
3146 Term_erase(0, 1, 255);
3148 /* Recall monster */
3149 roff_aux(r_idx, remember);
3151 /* Describe monster */
3159 * Hack -- describe the given monster race in the current "term" window
3161 void display_roff(int r_idx)
3165 /* Erase the window */
3166 for (y = 0; y < Term->hgt; y++)
3168 /* Erase the line */
3169 Term_erase(0, y, 255);
3175 /* Recall monster */
3178 /* Describe monster */
3183 bool monster_quest(int r_idx)
3185 monster_race *r_ptr = &r_info[r_idx];
3187 /* Random quests are in the dungeon */
3188 if (r_ptr->flags8 & RF8_WILD_ONLY) return FALSE;
3190 /* No random quests for aquatic monsters */
3191 if (r_ptr->flags7 & RF7_AQUATIC) return FALSE;
3193 /* No random quests for multiplying monsters */
3194 if (r_ptr->flags2 & RF2_MULTIPLY) return FALSE;
3196 /* No quests to kill friendly monsters */
3197 if (r_ptr->flags7 & RF7_FRIENDLY) return FALSE;
3203 bool monster_dungeon(int r_idx)
3205 monster_race *r_ptr = &r_info[r_idx];
3207 if (!(r_ptr->flags8 & RF8_WILD_ONLY))
3214 bool monster_ocean(int r_idx)
3216 monster_race *r_ptr = &r_info[r_idx];
3218 if (r_ptr->flags8 & RF8_WILD_OCEAN)
3225 bool monster_shore(int r_idx)
3227 monster_race *r_ptr = &r_info[r_idx];
3229 if (r_ptr->flags8 & RF8_WILD_SHORE)
3236 bool monster_waste(int r_idx)
3238 monster_race *r_ptr = &r_info[r_idx];
3240 if (r_ptr->flags8 & (RF8_WILD_WASTE | RF8_WILD_ALL))
3247 bool monster_town(int r_idx)
3249 monster_race *r_ptr = &r_info[r_idx];
3251 if (r_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL))
3258 bool monster_wood(int r_idx)
3260 monster_race *r_ptr = &r_info[r_idx];
3262 if (r_ptr->flags8 & (RF8_WILD_WOOD | RF8_WILD_ALL))
3269 bool monster_volcano(int r_idx)
3271 monster_race *r_ptr = &r_info[r_idx];
3273 if (r_ptr->flags8 & RF8_WILD_VOLCANO)
3280 bool monster_mountain(int r_idx)
3282 monster_race *r_ptr = &r_info[r_idx];
3284 if (r_ptr->flags8 & RF8_WILD_MOUNTAIN)
3291 bool monster_grass(int r_idx)
3293 monster_race *r_ptr = &r_info[r_idx];
3295 if (r_ptr->flags8 & (RF8_WILD_GRASS | RF8_WILD_ALL))
3302 bool monster_deep_water(int r_idx)
3304 monster_race *r_ptr = &r_info[r_idx];
3306 if (!monster_dungeon(r_idx)) return FALSE;
3308 if (r_ptr->flags7 & RF7_AQUATIC)
3315 bool monster_shallow_water(int r_idx)
3317 monster_race *r_ptr = &r_info[r_idx];
3319 if (!monster_dungeon(r_idx)) return FALSE;
3321 if (r_ptr->flags2 & RF2_AURA_FIRE)
3328 bool monster_lava(int r_idx)
3330 monster_race *r_ptr = &r_info[r_idx];
3332 if (!monster_dungeon(r_idx)) return FALSE;
3334 if (((r_ptr->flags3 & RF3_IM_FIRE) ||
3335 (r_ptr->flags7 & RF7_CAN_FLY)) &&
3336 !(r_ptr->flags3 & RF3_AURA_COLD))
3343 monster_hook_type get_monster_hook(void)
3345 if (!dun_level && !p_ptr->inside_quest)
3347 switch (wilderness[p_ptr->wilderness_y][p_ptr->wilderness_x].terrain)
3350 return (monster_hook_type)monster_town;
3351 case TERRAIN_DEEP_WATER:
3352 return (monster_hook_type)monster_ocean;
3353 case TERRAIN_SHALLOW_WATER:
3355 return (monster_hook_type)monster_shore;
3357 case TERRAIN_DESERT:
3358 return (monster_hook_type)monster_waste;
3360 return (monster_hook_type)monster_grass;
3362 return (monster_hook_type)monster_wood;
3363 case TERRAIN_SHALLOW_LAVA:
3364 case TERRAIN_DEEP_LAVA:
3365 return (monster_hook_type)monster_volcano;
3366 case TERRAIN_MOUNTAIN:
3367 return (monster_hook_type)monster_mountain;
3369 return (monster_hook_type)monster_dungeon;
3374 return (monster_hook_type)monster_dungeon;
3379 monster_hook_type get_monster_hook2(int y, int x)
3381 /* Set the monster list */
3382 switch (cave[y][x].feat)
3384 case FEAT_SHAL_WATER:
3385 return (monster_hook_type)monster_shallow_water;
3386 case FEAT_DEEP_WATER:
3387 return (monster_hook_type)monster_deep_water;
3388 case FEAT_DEEP_LAVA:
3389 case FEAT_SHAL_LAVA:
3390 return (monster_hook_type)monster_lava;
3397 void set_friendly(monster_type *m_ptr)
3399 m_ptr->smart |= SM_FRIENDLY;
3402 void set_pet(monster_type *m_ptr)
3404 /* Check for quest completion */
3405 check_quest_completion(m_ptr);
3407 m_ptr->smart |= SM_PET;
3411 * Makes the monster hostile towards the player
3413 void set_hostile(monster_type *m_ptr)
3415 if (p_ptr->inside_battle) return;
3416 m_ptr->smart &= ~SM_PET;
3417 m_ptr->smart &= ~SM_FRIENDLY;
3424 void anger_monster(monster_type *m_ptr)
3426 if (p_ptr->inside_battle) return;
3427 if (is_friendly(m_ptr))
3431 monster_desc(m_name, m_ptr, 0);
3433 msg_format("%^s¤ÏÅܤä¿¡ª", m_name);
3435 msg_format("%^s gets angry!", m_name);
3440 chg_virtue(V_INDIVIDUALISM, 1);
3441 chg_virtue(V_HONOUR, -1);
3442 chg_virtue(V_JUSTICE, -1);
3443 chg_virtue(V_COMPASSION, -1);
3449 * Check if monster can cross terrain
3451 bool monster_can_cross_terrain(byte feat, monster_race *r_ptr)
3454 if (feat == FEAT_DEEP_WATER)
3456 if ((r_ptr->flags7 & RF7_AQUATIC) ||
3457 (r_ptr->flags7 & RF7_CAN_FLY) ||
3458 (r_ptr->flags7 & RF7_CAN_SWIM))
3464 else if (feat == FEAT_SHAL_WATER)
3466 if (!(r_ptr->flags2 & RF2_AURA_FIRE) ||
3467 (r_ptr->flags7 & RF7_AQUATIC) ||
3468 (r_ptr->flags7 & RF7_CAN_FLY) ||
3469 (r_ptr->flags7 & RF7_CAN_SWIM))
3474 /* Aquatic monster */
3475 else if ((r_ptr->flags7 & RF7_AQUATIC) &&
3476 !(r_ptr->flags7 & RF7_CAN_FLY))
3481 else if ((feat == FEAT_SHAL_LAVA) ||
3482 (feat == FEAT_DEEP_LAVA))
3484 if ((r_ptr->flags3 & RF3_IM_FIRE) ||
3485 (r_ptr->flags7 & RF7_CAN_FLY))
3496 * Check if two monsters are enemies
3498 bool are_enemies(monster_type *m_ptr, monster_type *n_ptr)
3500 monster_race *r_ptr = &r_info[m_ptr->r_idx];
3501 monster_race *s_ptr = &r_info[n_ptr->r_idx];
3503 if (p_ptr->inside_battle)
3505 if (is_pet(m_ptr) || is_pet(n_ptr)) return FALSE;
3509 if ((r_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL))
3510 && (s_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL)))
3512 if (!is_pet(m_ptr) && !is_pet(n_ptr)) return FALSE;
3515 /* Friendly vs. opposite aligned normal or pet */
3516 if (((r_ptr->flags3 & RF3_EVIL) &&
3517 (s_ptr->flags3 & RF3_GOOD)) ||
3518 ((r_ptr->flags3 & RF3_GOOD) &&
3519 (s_ptr->flags3 & RF3_EVIL)))
3521 if (!(m_ptr->mflag2 & MFLAG_CHAMELEON) || !(n_ptr->mflag2 & MFLAG_CHAMELEON)) return TRUE;
3524 /* Hostile vs. non-hostile */
3525 if (is_hostile(m_ptr) != is_hostile(n_ptr))
3536 * Is the monster "alive"?
3538 * Used to determine the message to print for a killed monster.
3539 * ("dies", "destroyed")
3541 bool monster_living(monster_race *r_ptr)
3543 /* Non-living, undead, or demon */
3544 if (r_ptr->flags3 & (RF3_DEMON | RF3_UNDEAD | RF3_NONLIVING))
3553 static char *dwarf_syllable1[] =
3555 "B", "D", "F", "G", "Gl", "H", "K", "L", "M", "N", "R", "S", "T", "Th", "V",
3558 static char *dwarf_syllable2[] =
3560 "a", "e", "i", "o", "oi", "u",
3563 static char *dwarf_syllable3[] =
3565 "bur", "fur", "gan", "gnus", "gnar", "li", "lin", "lir", "mli", "nar",
3566 "nus", "rin", "ran", "sin", "sil", "sur",
3570 static char *elf_syllable1[] =
3572 "Al", "An", "Bal", "Bel", "Cal", "Cel", "El", "Elr", "Elv", "Eow", "F",
3573 "Fal", "Fel", "Fin", "G", "Gal", "Gel", "Gl", "Is", "Lan", "Leg", "N",
3574 "Nal", "Nel", "S", "Sal", "Sel", "T", "Tal", "Tel", "Thr", "Tin",
3577 static char *elf_syllable2[] =
3579 "a", "adrie", "ara", "e", "ebri", "ele", "ere", "i", "io", "ithra",
3580 "ilma", "il-Ga", "ili", "o", "orfi", "u", "y",
3583 static char *elf_syllable3[] =
3585 "l", "las", "lad", "ldor", "ldur", "linde", "lith", "mir", "n", "nd",
3586 "ndel", "ndil", "ndir", "nduil", "ng", "mbor", "r", "rith", "ril",
3587 "riand", "rion", "s", "thien", "viel", "wen", "wyn",
3591 static char *gnome_syllable1[] =
3593 "Aar", "An", "Ar", "As", "C", "H", "Han", "Har", "Hel", "Iir", "J",
3594 "Jan", "Jar", "K", "L", "M", "Mar", "N", "Nik", "Os", "Ol", "P", "R",
3595 "S", "Sam", "San", "T", "Ter", "Tom", "Ul", "V", "W", "Y",
3598 static char *gnome_syllable2[] =
3600 "a", "aa", "ai", "e", "ei", "i", "o", "uo", "u", "uu",
3603 static char *gnome_syllable3[] =
3605 "ron", "re", "la", "ki", "kseli", "ksi", "ku", "ja", "ta", "na",
3606 "namari", "neli", "nika", "nikki", "nu", "nukka", "ka", "ko", "li",
3607 "kki", "rik", "po", "to", "pekka", "rjaana", "rjatta", "rjukka", "la",
3608 "lla", "lli", "mo", "nni",
3612 static char *hobbit_syllable1[] =
3614 "B", "Ber", "Br", "D", "Der", "Dr", "F", "Fr", "G", "H", "L", "Ler",
3615 "M", "Mer", "N", "P", "Pr", "Per", "R", "S", "T", "W",
3618 static char *hobbit_syllable2[] =
3620 "a", "e", "i", "ia", "o", "oi", "u",
3623 static char *hobbit_syllable3[] =
3625 "bo", "ck", "decan", "degar", "do", "doc", "go", "grin", "lba", "lbo",
3626 "lda", "ldo", "lla", "ll", "lo", "m", "mwise", "nac", "noc", "nwise",
3627 "p", "ppin", "pper", "tho", "to",
3631 static char *human_syllable1[] =
3633 "Ab", "Ac", "Ad", "Af", "Agr", "Ast", "As", "Al", "Adw", "Adr", "Ar",
3634 "B", "Br", "C", "Cr", "Ch", "Cad", "D", "Dr", "Dw", "Ed", "Eth", "Et",
3635 "Er", "El", "Eow", "F", "Fr", "G", "Gr", "Gw", "Gal", "Gl", "H", "Ha",
3636 "Ib", "Jer", "K", "Ka", "Ked", "L", "Loth", "Lar", "Leg", "M", "Mir",
3637 "N", "Nyd", "Ol", "Oc", "On", "P", "Pr", "R", "Rh", "S", "Sev", "T",
3638 "Tr", "Th", "V", "Y", "Z", "W", "Wic",
3641 static char *human_syllable2[] =
3643 "a", "ae", "au", "ao", "are", "ale", "ali", "ay", "ardo", "e", "ei",
3644 "ea", "eri", "era", "ela", "eli", "enda", "erra", "i", "ia", "ie",
3645 "ire", "ira", "ila", "ili", "ira", "igo", "o", "oa", "oi", "oe",
3649 static char *human_syllable3[] =
3651 "a", "and", "b", "bwyn", "baen", "bard", "c", "ctred", "cred", "ch",
3652 "can", "d", "dan", "don", "der", "dric", "dfrid", "dus", "f", "g",
3653 "gord", "gan", "l", "li", "lgrin", "lin", "lith", "lath", "loth", "ld",
3654 "ldric", "ldan", "m", "mas", "mos", "mar", "mond", "n", "nydd", "nidd",
3655 "nnon", "nwan", "nyth", "nad", "nn", "nnor", "nd", "p", "r", "ron",
3656 "rd", "s", "sh", "seth", "sean", "t", "th", "tha", "tlan", "trem",
3657 "tram", "v", "vudd", "w", "wan", "win", "wyn", "wyr", "wyr", "wyth",
3661 static char *orc_syllable1[] =
3663 "B", "Er", "G", "Gr", "H", "P", "Pr", "R", "V", "Vr", "T", "Tr", "M", "Dr",
3666 static char *orc_syllable2[] =
3668 "a", "i", "o", "oo", "u", "ui",
3671 static char *orc_syllable3[] =
3673 "dash", "dish", "dush", "gar", "gor", "gdush", "lo", "gdish", "k",
3674 "lg", "nak", "rag", "rbag", "rg", "rk", "ng", "nk", "rt", "ol", "urk",
3675 "shnak", "mog", "mak", "rak",
3680 * Random Name Generator
3681 * based on a Javascript by Michael Hensley
3682 * "http://geocities.com/timessquare/castle/6274/"
3684 void create_name(int type, char *name)
3689 /* Select the monster type */
3692 /* Create the monster name */
3694 strcpy(name, dwarf_syllable1[randint0(sizeof(dwarf_syllable1) / sizeof(char*))]);
3695 strcat(name, dwarf_syllable2[randint0(sizeof(dwarf_syllable2) / sizeof(char*))]);
3696 strcat(name, dwarf_syllable3[randint0(sizeof(dwarf_syllable3) / sizeof(char*))]);
3699 strcpy(name, elf_syllable1[randint0(sizeof(elf_syllable1) / sizeof(char*))]);
3700 strcat(name, elf_syllable2[randint0(sizeof(elf_syllable2) / sizeof(char*))]);
3701 strcat(name, elf_syllable3[randint0(sizeof(elf_syllable3) / sizeof(char*))]);
3704 strcpy(name, gnome_syllable1[randint0(sizeof(gnome_syllable1) / sizeof(char*))]);
3705 strcat(name, gnome_syllable2[randint0(sizeof(gnome_syllable2) / sizeof(char*))]);
3706 strcat(name, gnome_syllable3[randint0(sizeof(gnome_syllable3) / sizeof(char*))]);
3709 strcpy(name, hobbit_syllable1[randint0(sizeof(hobbit_syllable1) / sizeof(char*))]);
3710 strcat(name, hobbit_syllable2[randint0(sizeof(hobbit_syllable2) / sizeof(char*))]);
3711 strcat(name, hobbit_syllable3[randint0(sizeof(hobbit_syllable3) / sizeof(char*))]);
3714 strcpy(name, human_syllable1[randint0(sizeof(human_syllable1) / sizeof(char*))]);
3715 strcat(name, human_syllable2[randint0(sizeof(human_syllable2) / sizeof(char*))]);
3716 strcat(name, human_syllable3[randint0(sizeof(human_syllable3) / sizeof(char*))]);
3719 strcpy(name, orc_syllable1[randint0(sizeof(orc_syllable1) / sizeof(char*))]);
3720 strcat(name, orc_syllable2[randint0(sizeof(orc_syllable2) / sizeof(char*))]);
3721 strcat(name, orc_syllable3[randint0(sizeof(orc_syllable3) / sizeof(char*))]);
3723 /* Create an empty name */