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_FRIEND) flags1 |= (RF1_FRIEND);
233 if (r_ptr->flags1 & RF1_FRIENDS) flags1 |= (RF1_FRIENDS);
234 if (r_ptr->flags1 & RF1_ESCORT) flags1 |= (RF1_ESCORT);
235 if (r_ptr->flags1 & RF1_ESCORTS) flags1 |= (RF1_ESCORTS);
237 /* Killing a monster reveals some properties */
238 if (r_ptr->r_tkills || cheat_know)
240 /* Know "race" flags */
241 if (r_ptr->flags3 & RF3_ORC) flags3 |= (RF3_ORC);
242 if (r_ptr->flags3 & RF3_TROLL) flags3 |= (RF3_TROLL);
243 if (r_ptr->flags3 & RF3_GIANT) flags3 |= (RF3_GIANT);
244 if (r_ptr->flags3 & RF3_DRAGON) flags3 |= (RF3_DRAGON);
245 if (r_ptr->flags3 & RF3_DEMON) flags3 |= (RF3_DEMON);
246 if (r_ptr->flags3 & RF3_UNDEAD) flags3 |= (RF3_UNDEAD);
247 if (r_ptr->flags3 & RF3_EVIL) flags3 |= (RF3_EVIL);
248 if (r_ptr->flags3 & RF3_GOOD) flags3 |= (RF3_GOOD);
249 if (r_ptr->flags3 & RF3_ANIMAL) flags3 |= (RF3_ANIMAL);
250 if (r_ptr->flags3 & RF3_AMBERITE) flags3 |= (RF3_AMBERITE);
252 /* Know 'quantum' flag */
253 if (r_ptr->flags2 & RF2_QUANTUM) flags2 |= (RF2_QUANTUM);
255 /* Know "forced" flags */
256 if (r_ptr->flags1 & RF1_FORCE_DEPTH) flags1 |= (RF1_FORCE_DEPTH);
257 if (r_ptr->flags1 & RF1_FORCE_MAXHP) flags1 |= (RF1_FORCE_MAXHP);
261 /* Treat uniques differently */
262 if (flags1 & RF1_UNIQUE)
264 /* Hack -- Determine if the unique is "dead" */
265 bool dead = (r_ptr->max_num == 0) ? TRUE : FALSE;
267 /* We've been killed... */
270 /* Killed ancestors */
272 roff(format("%^s¤Ï¤¢¤Ê¤¿¤ÎÀèÁĤò %d ¿ÍÁò¤Ã¤Æ¤¤¤ë",
274 roff(format("%^s has slain %d of your ancestors",
277 wd_he[msex], r_ptr->r_deaths));
279 /* But we've also killed it */
283 roff(format("¤¬¡¢¤¹¤Ç¤ËµØƤ¤Á¤Ï²Ì¤¿¤·¤Æ¤¤¤ë¡ª"));
285 roff(format(", but you have avenged %s! ",
286 plural(r_ptr->r_deaths, "him", "them")));
291 /* Unavenged (ever) */
295 roff(format("¤Î¤Ë¡¢¤Þ¤ÀµØƤ¤Á¤ò²Ì¤¿¤·¤Æ¤¤¤Ê¤¤¡£"));
297 roff(format(", who %s unavenged. ",
298 plural(r_ptr->r_deaths, "remains", "remain")));
304 /* Dead unique who never hurt us */
308 roff("¤¢¤Ê¤¿¤Ï¤³¤ÎµØŨ¤ò¤¹¤Ç¤ËÁò¤êµî¤Ã¤Æ¤¤¤ë¡£");
310 roff("You have slain this foe. ");
316 /* Not unique, but killed us */
317 else if (r_ptr->r_deaths)
321 roff(format("¤³¤Î¥â¥ó¥¹¥¿¡¼¤Ï¤¢¤Ê¤¿¤ÎÀèÁĤò %d ¿ÍÁò¤Ã¤Æ¤¤¤ë",
324 roff(format("%d of your ancestors %s been killed by this creature, ",
325 r_ptr->r_deaths, plural(r_ptr->r_deaths, "has", "have")));
329 /* Some kills this life */
333 roff(format("¤¬¡¢¤¢¤Ê¤¿¤Ï¤³¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¯¤Ê¤¯¤È¤â %d ÂΤÏÅݤ·¤Æ¤¤¤ë¡£",
335 roff(format("and you have exterminated at least %d of the creatures. ",
341 /* Some kills past lives */
342 else if (r_ptr->r_tkills)
345 roff(format("¤¬¡¢%s¤Ï¤³¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¯¤Ê¤¯¤È¤â %d ÂΤÏÅݤ·¤Æ¤¤¤ë¡£",
346 "¤¢¤Ê¤¿¤ÎÀèÁÄ", r_ptr->r_tkills));
348 roff(format("and %s have exterminated at least %d of the creatures. ",
349 "your ancestors", r_ptr->r_tkills));
358 roff(format("¤¬¡¢¤Þ¤À%s¤òÅݤ·¤¿¤³¤È¤Ï¤Ê¤¤¡£",
360 roff(format("and %s is not ever known to have been defeated. ",
367 /* Normal monsters */
370 /* Killed some this life */
374 roff(format("¤¢¤Ê¤¿¤Ï¤³¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¯¤Ê¤¯¤È¤â %d ÂΤϻ¦¤·¤Æ¤¤¤ë¡£",
376 roff(format("You have killed at least %d of these creatures. ",
382 /* Killed some last life */
383 else if (r_ptr->r_tkills)
386 roff(format("¤¢¤Ê¤¿¤ÎÀèÁĤϤ³¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¯¤Ê¤¯¤È¤â %d ÂΤϻ¦¤·¤Æ¤¤¤ë¡£",
388 roff(format("Your ancestors have killed at least %d of these creatures. ",
398 roff("¤³¤Î¥â¥ó¥¹¥¿¡¼¤òÅݤ·¤¿¤³¤È¤Ï¤Ê¤¤¡£");
400 roff("No battles to the death are recalled. ");
412 #ifdef DELAY_LOAD_R_TEXT
416 /* Build the filename */
418 path_build(buf, 1024, ANGBAND_DIR_DATA, "r_info_j.raw");
420 path_build(buf, 1024, ANGBAND_DIR_DATA, "r_info.raw");
424 /* Open the "raw" file */
425 fd = fd_open(buf, O_RDONLY);
432 /* Starting position */
435 /* Additional offsets */
436 pos += r_head->head_size;
437 pos += r_head->info_size;
438 pos += r_head->name_size;
441 (void)fd_seek(fd, pos);
443 /* Read a chunk of data */
444 (void)fd_read(fd, buf, 2048);
453 strcpy(buf, r_text + r_ptr->text);
464 if (r_idx == MON_KAGE)
469 /* Cheat -- know everything */
470 if ((cheat_know) && (remem == 0))
472 /* Hack -- restore memory */
473 COPY(r_ptr, &save_mem, monster_race);
481 /* Describe location */
482 if (r_ptr->level == 0)
485 roff(format("%^s¤ÏÄ®¤Ë½»¤ß", wd_he[msex]));
487 roff(format("%^s lives in the town", wd_he[msex]));
492 else if (r_ptr->r_tkills || cheat_know)
497 roff(format("%^s¤ÏÄ̾ïÃϲ¼ %d ¥Õ¥£¡¼¥È¤Ç½Ð¸½¤·",
499 roff(format("%^s is normally found at depths of %d feet",
502 wd_he[msex], r_ptr->level * 50));
507 roff(format("%^s¤ÏÄ̾ïÃϲ¼ %d ³¬¤Ç½Ð¸½¤·",
509 roff(format("%^s is normally found on dungeon level %d",
512 wd_he[msex], r_ptr->level));
518 /* Describe movement */
519 if (r_idx == MON_CHAMELEON)
522 roff("¡¢Â¾¤Î¥â¥ó¥¹¥¿¡¼¤Ë²½¤±¤ë¡£");
524 roff("and can take the shape of other monster.");
543 roff(format("%^s¤Ï", wd_he[msex]));
545 roff(format("%^s ", wd_he[msex]));
555 if ((flags1 & RF1_RAND_50) || (flags1 & RF1_RAND_25))
558 if ((flags1 & RF1_RAND_50) && (flags1 & RF1_RAND_25))
567 else if (flags1 & RF1_RAND_50)
576 else if (flags1 & RF1_RAND_25)
590 roff(" erratically");
594 /* Hack -- Occasional conjunction */
596 if (speed != 110) roff("¡¢¤«¤Ä");
598 if (speed != 110) roff(", and");
607 if (speed > 139) c_roff(TERM_RED, "¿®¤¸Æñ¤¤¤Û¤É");
608 else if (speed > 134) c_roff(TERM_ORANGE, "ÌÔÎõ¤Ë");
609 else if (speed > 129) c_roff(TERM_ORANGE, "Èó¾ï¤Ë");
610 else if (speed > 124) c_roff(TERM_UMBER, "¤«¤Ê¤ê");
611 else if (speed < 120) c_roff(TERM_L_UMBER, "¤ä¤ä");
612 c_roff(TERM_L_RED, "ÁÇÁ᤯");
614 if (speed > 130) roff(" incredibly");
615 else if (speed > 120) roff(" very");
620 else if (speed < 110)
623 if (speed < 90) c_roff(TERM_L_GREEN, "¿®¤¸Æñ¤¤¤Û¤É");
624 else if (speed < 95) c_roff(TERM_BLUE, "Èó¾ï¤Ë");
625 else if (speed < 100) c_roff(TERM_BLUE, "¤«¤Ê¤ê");
626 else if (speed > 104) c_roff(TERM_GREEN, "¤ä¤ä");
627 c_roff(TERM_L_BLUE, "¤æ¤Ã¤¯¤ê¤È");
629 if (speed < 90) roff(" incredibly");
630 else if (speed < 100) roff(" very");
638 roff("ÉáÄ̤ή¤µ¤Ç");
640 roff(" at normal speed");
649 /* The code above includes "attack speed" */
650 if (flags1 & RF1_NEVER_MOVE)
665 roff(format("%^s¤Ï", wd_he[msex]));
667 roff(format("%^s ", wd_he[msex]));
675 roff("¿¯Æþ¼Ô¤òÄÉÀפ·¤Ê¤¤");
677 roff("does not deign to chase intruders");
682 /* End this sentence */
695 /* Describe experience if known */
696 if (r_ptr->r_tkills || cheat_know)
702 if (flags1 & RF1_UNIQUE)
704 roff("Killing this");
708 roff("A kill of this");
713 /* Describe the "quality" */
715 if (flags2 & RF2_ELDRITCH_HORROR) c_roff(TERM_VIOLET, "¶¸µ¤¤òͶ¤¦");/*nuke me*/
717 if (flags2 & RF2_ELDRITCH_HORROR) roff(" sanity-blasting");
721 if (flags3 & RF3_ANIMAL) c_roff(TERM_L_GREEN, "¼«Á³³¦¤Î");
723 if (flags3 & RF3_ANIMAL) roff(" natural");
727 if (flags3 & RF3_EVIL) c_roff(TERM_L_DARK, "¼Ù°¤Ê¤ë");
729 if (flags3 & RF3_EVIL) roff(" evil");
733 if (flags3 & RF3_GOOD) c_roff(TERM_YELLOW, "Á±ÎɤÊ");
735 if (flags3 & RF3_GOOD) roff(" good");
739 if (flags3 & RF3_UNDEAD) c_roff(TERM_VIOLET, "¥¢¥ó¥Ç¥Ã¥É¤Î");
741 if (flags3 & RF3_UNDEAD) roff(" undead");
745 if ((flags3 & (RF3_DRAGON | RF3_DEMON | RF3_GIANT | RF3_TROLL | RF3_ORC | RF3_AMBERITE)) || (flags2 & RF2_QUANTUM))
747 /* Describe the "race" */
749 if (flags3 & RF3_DRAGON) c_roff(TERM_ORANGE, "¥É¥é¥´¥ó");
751 if (flags3 & RF3_DRAGON) roff(" dragon");
755 if (flags3 & RF3_DEMON) c_roff(TERM_VIOLET, "¥Ç¡¼¥â¥ó");
757 if (flags3 & RF3_DEMON) roff(" demon");
761 if (flags3 & RF3_GIANT) c_roff(TERM_L_UMBER, "¥¸¥ã¥¤¥¢¥ó¥È");
763 if (flags3 & RF3_GIANT) roff(" giant");
767 if (flags3 & RF3_TROLL) c_roff(TERM_BLUE, "¥È¥í¥ë");
769 if (flags3 & RF3_TROLL) roff(" troll");
773 if (flags3 & RF3_ORC) c_roff(TERM_UMBER, "¥ª¡¼¥¯");
775 if (flags3 & RF3_ORC) roff(" orc");
779 if (flags3 & RF3_AMBERITE) c_roff(TERM_L_WHITE, "¥¢¥ó¥Ð¡¼¤Î²¦Â²");
781 if (flags3 & RF3_AMBERITE) roff(" Amberite");
785 if (flags2 & RF2_QUANTUM) c_roff(TERM_VIOLET, "ÎÌ»ÒÀ¸Êª");
787 if (flags2 & RF2_QUANTUM) roff(" quantum creature");
792 else roff("¥â¥ó¥¹¥¿¡¼");
794 else roff(" creature");
799 roff("¤òÅݤ¹¤³¤È¤Ï");
801 /* Group some variables */
808 roff(format(" %lu ¥ì¥Ù¥ë¤Î¥¥ã¥é¥¯¥¿¤Ë¤È¤Ã¤Æ", (long)i));
810 i = (long)r_ptr->mexp * r_ptr->level / (p_ptr->max_plv+2);
811 j = ((((long)r_ptr->mexp * r_ptr->level % (p_ptr->max_plv+2)) *
812 (long)1000 / (p_ptr->max_plv+2) + 5) / 10);
814 roff(format(" Ìó%ld.%02ld ¥Ý¥¤¥ó¥È¤Î·Ð¸³¤È¤Ê¤ë¡£",
817 /* calculate the integer exp part */
818 i = (long)r_ptr->mexp * r_ptr->level / (p_ptr->max_plv+2);
820 /* calculate the fractional exp part scaled by 100, */
821 /* must use long arithmetic to avoid overflow */
822 j = ((((long)r_ptr->mexp * r_ptr->level % (p_ptr->max_plv+2)) *
823 (long)1000 / (p_ptr->max_plv+2) + 5) / 10);
825 /* Mention the experience */
826 roff(format(" is worth about %ld.%02ld point%s",
828 (((i == 1) && (j == 0)) ? "" : "s")));
830 /* Take account of annoying English */
833 if ((p_ptr->lev / 10) == 1) /* nothing */;
834 else if (i == 1) p = "st";
835 else if (i == 2) p = "nd";
836 else if (i == 3) p = "rd";
838 /* Take account of "leading vowels" in numbers */
841 if ((i == 8) || (i == 11) || (i == 18)) q = "n";
843 /* Mention the dependance on the player's level */
844 roff(format(" for a%s %lu%s level character. ",
851 if ((flags2 & RF2_AURA_FIRE) && (flags2 & RF2_AURA_ELEC) && (flags3 & RF3_AURA_COLD))
854 c_roff(TERM_VIOLET, format("%^s¤Ï±ê¤Èɹ¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
856 roff(format("%^s is surrounded by flames and electricity. ", wd_he[msex]));
860 else if ((flags2 & RF2_AURA_FIRE) && (flags2 & RF2_AURA_ELEC))
863 c_roff(TERM_L_RED, format("%^s¤Ï±ê¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
865 roff(format("%^s is surrounded by flames and electricity. ", wd_he[msex]));
869 else if ((flags2 & RF2_AURA_FIRE) && (flags3 & RF3_AURA_COLD))
872 c_roff(TERM_BLUE, format("%^s¤Ï±ê¤Èɹ¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
874 roff(format("%^s is surrounded by flames and electricity. ", wd_he[msex]));
878 else if ((flags3 & RF3_AURA_COLD) && (flags2 & RF2_AURA_ELEC))
881 c_roff(TERM_L_GREEN, format("%^s¤Ïɹ¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
883 roff(format("%^s is surrounded by ice and electricity. ", wd_he[msex]));
887 else if (flags2 & RF2_AURA_FIRE)
890 c_roff(TERM_RED, format("%^s¤Ï±ê¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
892 roff(format("%^s is surrounded by flames. ", wd_he[msex]));
896 else if (flags3 & RF3_AURA_COLD)
899 c_roff(TERM_BLUE, format("%^s¤Ïɹ¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
901 roff(format("%^s is surrounded by ice. ", wd_he[msex]));
905 else if (flags2 & RF2_AURA_ELEC)
908 c_roff(TERM_L_BLUE, format("%^s¤Ï¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
910 roff(format("%^s is surrounded by electricity. ", wd_he[msex]));
915 if (flags2 & RF2_REFLECTING)
918 roff(format("%^s¤ÏÌð¤Î¼öʸ¤òÄ·¤ÍÊÖ¤¹¡£", wd_he[msex]));
920 roff(format("%^s reflects bolt spells. ", wd_he[msex]));
925 /* Describe escorts */
926 if ((flags1 & RF1_ESCORT) || (flags1 & RF1_ESCORTS))
929 roff(format("%^s¤ÏÄ̾ï¸î±Ò¤òȼ¤Ã¤Æ¸½¤ì¤ë¡£",
931 roff(format("%^s usually appears with escorts. ",
937 /* Describe friends */
938 else if ((flags1 & RF1_FRIEND) || (flags1 & RF1_FRIENDS))
941 roff(format("%^s¤ÏÄ̾クÃĤǸ½¤ì¤ë¡£",
943 roff(format("%^s usually appears in groups. ",
950 /* Collect inate attacks */
953 if (flags4 & RF4_SHRIEK) {vp[vn] = "ÈáÌĤǽõ¤±¤òµá¤á¤ë";color[vn++] = TERM_L_WHITE;}
955 if (flags4 & RF4_SHRIEK) {vp[vn] = "shriek for help";color[vn++] = TERM_L_WHITE;}
959 if (flags4 & RF4_ROCKET) {vp[vn] = "¥í¥±¥Ã¥È¤òȯ¼Í¤¹¤ë";color[vn++] = TERM_UMBER;}
961 if (flags4 & RF4_ROCKET) {vp[vn] = "shoot a rocket";color[vn++] = TERM_UMBER;}
965 if (flags4 & RF4_ARROW_1) {vp[vn] = "Ìð¤ò·â¤Ä";color[vn++] = TERM_L_UMBER;}
967 if (flags4 & RF4_ARROW_1) {vp[vn] = "fire an arrow";color[vn++] = TERM_L_UMBER;}
971 if (flags4 & RF4_ARROW_2) {vp[vn] = "¶¯ÎϤÊÌð¤ò·â¤Ä";color[vn++] = TERM_L_UMBER;}
973 if (flags4 & RF4_ARROW_2) {vp[vn] = "fire arrows";color[vn++] = TERM_L_UMBER;}
977 if (flags4 & RF4_ARROW_3) {vp[vn] = "¼Í·â¤ò¤¹¤ë";color[vn++] = TERM_UMBER;}
979 if (flags4 & RF4_ARROW_3) {vp[vn] = "fire a missile";color[vn++] = TERM_UMBER;}
983 if (flags4 & RF4_ARROW_4) {vp[vn] = "¶¯ÎϤʼͷâ¤ò¤¹¤ë";color[vn++] = TERM_UMBER;}
985 if (flags4 & RF4_ARROW_4) {vp[vn] = "fire missiles";color[vn++] = TERM_UMBER;}
989 if (flags6 & (RF6_SPECIAL)) {vp[vn] = "ÆÃÊ̤ʹÔÆ°¤ò¤¹¤ë";color[vn++] = TERM_VIOLET;}
991 if (flags6 & (RF6_SPECIAL)) {vp[vn] = "do something";color[vn++] = TERM_VIOLET;}
994 /* Describe inate attacks */
999 roff(format("%^s¤Ï", wd_he[msex]));
1001 roff(format("%^s", wd_he[msex]));
1006 for (n = 0; n < vn; n++)
1010 jverb(vp[n],jverb_buf,JVERB_OR);
1011 c_roff(color[n], jverb_buf);
1012 c_roff(color[n], "¤ê¡¢");
1014 else c_roff(color[n], vp[n]);
1017 if (n == 0) roff(" may ");
1018 else if (n < vn-1) roff(", ");
1029 roff("¤³¤È¤¬¤¢¤ë¡£");
1037 /* Collect breaths */
1040 if (flags4 & (RF4_BR_ACID)) {vp[vn] = "»À";color[vn++] = TERM_GREEN;}
1042 if (flags4 & (RF4_BR_ACID)) {vp[vn] = "acid";color[vn++] = TERM_GREEN;}
1046 if (flags4 & (RF4_BR_ELEC)) {vp[vn] = "°ðºÊ";color[vn++] = TERM_BLUE;}
1048 if (flags4 & (RF4_BR_ELEC)) {vp[vn] = "lightning";color[vn++] = TERM_BLUE;}
1052 if (flags4 & (RF4_BR_FIRE)) {vp[vn] = "²Ð±ê";color[vn++] = TERM_RED;}
1054 if (flags4 & (RF4_BR_FIRE)) {vp[vn] = "fire";color[vn++] = TERM_RED;}
1058 if (flags4 & (RF4_BR_COLD)) {vp[vn] = "Î䵤";color[vn++] = TERM_L_WHITE;}
1060 if (flags4 & (RF4_BR_COLD)) {vp[vn] = "frost";color[vn++] = TERM_L_WHITE;}
1064 if (flags4 & (RF4_BR_POIS)) {vp[vn] = "ÆÇ";color[vn++] = TERM_L_GREEN;}
1066 if (flags4 & (RF4_BR_POIS)) {vp[vn] = "poison";color[vn++] = TERM_L_GREEN;}
1070 if (flags4 & (RF4_BR_NETH)) {vp[vn] = "ÃϹö";color[vn++] = TERM_L_DARK;}
1072 if (flags4 & (RF4_BR_NETH)) {vp[vn] = "nether";color[vn++] = TERM_L_DARK;}
1076 if (flags4 & (RF4_BR_LITE)) {vp[vn] = "Á®¸÷";color[vn++] = TERM_YELLOW;}
1078 if (flags4 & (RF4_BR_LITE)) {vp[vn] = "light";color[vn++] = TERM_YELLOW;}
1082 if (flags4 & (RF4_BR_DARK)) {vp[vn] = "°Å¹õ";color[vn++] = TERM_L_DARK;}
1084 if (flags4 & (RF4_BR_DARK)) {vp[vn] = "darkness";color[vn++] = TERM_L_DARK;}
1088 if (flags4 & (RF4_BR_CONF)) {vp[vn] = "º®Íð";color[vn++] = TERM_L_UMBER;}
1090 if (flags4 & (RF4_BR_CONF)) {vp[vn] = "confusion";color[vn++] = TERM_L_UMBER;}
1094 if (flags4 & (RF4_BR_SOUN)) {vp[vn] = "¹ì²»";color[vn++] = TERM_ORANGE;}
1096 if (flags4 & (RF4_BR_SOUN)) {vp[vn] = "sound";color[vn++] = TERM_ORANGE;}
1100 if (flags4 & (RF4_BR_CHAO)) {vp[vn] = "¥«¥ª¥¹";color[vn++] = TERM_VIOLET;}
1102 if (flags4 & (RF4_BR_CHAO)) {vp[vn] = "chaos";color[vn++] = TERM_VIOLET;}
1106 if (flags4 & (RF4_BR_DISE)) {vp[vn] = "Îô²½";color[vn++] = TERM_VIOLET;}
1108 if (flags4 & (RF4_BR_DISE)) {vp[vn] = "disenchantment";color[vn++] = TERM_VIOLET;}
1112 if (flags4 & (RF4_BR_NEXU)) {vp[vn] = "°ø²Ìº®Íð";color[vn++] = TERM_VIOLET;}
1114 if (flags4 & (RF4_BR_NEXU)) {vp[vn] = "nexus";color[vn++] = TERM_VIOLET;}
1118 if (flags4 & (RF4_BR_TIME)) {vp[vn] = "»þ´ÖµÕž";color[vn++] = TERM_L_BLUE;}
1120 if (flags4 & (RF4_BR_TIME)) {vp[vn] = "time";color[vn++] = TERM_L_BLUE;}
1124 if (flags4 & (RF4_BR_INER)) {vp[vn] = "ÃÙÆß";color[vn++] = TERM_SLATE;}
1126 if (flags4 & (RF4_BR_INER)) {vp[vn] = "inertia";color[vn++] = TERM_SLATE;}
1130 if (flags4 & (RF4_BR_GRAV)) {vp[vn] = "½ÅÎÏ";color[vn++] = TERM_SLATE;}
1132 if (flags4 & (RF4_BR_GRAV)) {vp[vn] = "gravity";color[vn++] = TERM_SLATE;}
1136 if (flags4 & (RF4_BR_SHAR)) {vp[vn] = "ÇËÊÒ";color[vn++] = TERM_L_UMBER;}
1138 if (flags4 & (RF4_BR_SHAR)) {vp[vn] = "shards";color[vn++] = TERM_L_UMBER;}
1142 if (flags4 & (RF4_BR_PLAS)) {vp[vn] = "¥×¥é¥º¥Þ";color[vn++] = TERM_L_RED;}
1144 if (flags4 & (RF4_BR_PLAS)) {vp[vn] = "plasma";color[vn++] = TERM_L_RED;}
1148 if (flags4 & (RF4_BR_WALL)) {vp[vn] = "¥Õ¥©¡¼¥¹";color[vn++] = TERM_UMBER;}
1150 if (flags4 & (RF4_BR_WALL)) {vp[vn] = "force";color[vn++] = TERM_UMBER;}
1154 if (flags4 & (RF4_BR_MANA)) {vp[vn] = "ËâÎÏ";color[vn++] = TERM_L_BLUE;}
1156 if (flags4 & (RF4_BR_MANA)) {vp[vn] = "mana";color[vn++] = TERM_L_BLUE;}
1160 if (flags4 & (RF4_BR_NUKE)) {vp[vn] = "Êü¼ÍÀÇÑ´þʪ";color[vn++] = TERM_L_GREEN;}
1162 if (flags4 & (RF4_BR_NUKE)) {vp[vn] = "toxic waste";color[vn++] = TERM_L_GREEN;}
1166 if (flags4 & (RF4_BR_DISI)) {vp[vn] = "ʬ²ò";color[vn++] = TERM_SLATE;}
1168 if (flags4 & (RF4_BR_DISI)) {vp[vn] = "disintegration";color[vn++] = TERM_SLATE;}
1172 /* Describe breaths */
1180 roff(format("%^s¤Ï", wd_he[msex]));
1182 roff(format("%^s", wd_he[msex]));
1187 for (n = 0; n < vn; n++)
1191 if ( n != 0 ) roff("¤ä");
1193 if (n == 0) roff(" may breathe ");
1194 else if (n < vn-1) roff(", ");
1200 c_roff(color[n], vp[n]);
1203 roff("¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤¬¤¢¤ë");
1208 /* Collect spells */
1211 if (flags5 & (RF5_BA_ACID)) {vp[vn] = "¥¢¥·¥Ã¥É¡¦¥Ü¡¼¥ë";color[vn++] = TERM_GREEN;}
1213 if (flags5 & (RF5_BA_ACID)) {vp[vn] = "produce acid balls";color[vn++] = TERM_GREEN;}
1217 if (flags5 & (RF5_BA_ELEC)) {vp[vn] = "¥µ¥ó¥À¡¼¡¦¥Ü¡¼¥ë";color[vn++] = TERM_BLUE;}
1219 if (flags5 & (RF5_BA_ELEC)) {vp[vn] = "produce lightning balls";color[vn++] = TERM_BLUE;}
1223 if (flags5 & (RF5_BA_FIRE)) {vp[vn] = "¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë";color[vn++] = TERM_RED;}
1225 if (flags5 & (RF5_BA_FIRE)) {vp[vn] = "produce fire balls";color[vn++] = TERM_RED;}
1229 if (flags5 & (RF5_BA_COLD)) {vp[vn] = "¥¢¥¤¥¹¡¦¥Ü¡¼¥ë";color[vn++] = TERM_L_WHITE;}
1231 if (flags5 & (RF5_BA_COLD)) {vp[vn] = "produce frost balls";color[vn++] = TERM_L_WHITE;}
1235 if (flags5 & (RF5_BA_POIS)) {vp[vn] = "°½±À";color[vn++] = TERM_L_GREEN;}
1237 if (flags5 & (RF5_BA_POIS)) {vp[vn] = "produce poison balls";color[vn++] = TERM_L_GREEN;}
1241 if (flags5 & (RF5_BA_NETH)) {vp[vn] = "ÃϹöµå";color[vn++] = TERM_L_DARK;}
1243 if (flags5 & (RF5_BA_NETH)) {vp[vn] = "produce nether balls";color[vn++] = TERM_L_DARK;}
1247 if (flags5 & (RF5_BA_WATE)) {vp[vn] = "¥¦¥©¡¼¥¿¡¼¡¦¥Ü¡¼¥ë";color[vn++] = TERM_BLUE;}
1249 if (flags5 & (RF5_BA_WATE)) {vp[vn] = "produce water balls";color[vn++] = TERM_BLUE;}
1253 if (flags4 & (RF4_BA_NUKE)) {vp[vn] = "Êü¼Íǽµå";color[vn++] = TERM_L_GREEN;}
1255 if (flags4 & (RF4_BA_NUKE)) {vp[vn] = "produce balls of radiation";color[vn++] = TERM_L_GREEN;}
1259 if (flags5 & (RF5_BA_MANA)) {vp[vn] = "ËâÎϤÎÍò";color[vn++] = TERM_L_BLUE;}
1261 if (flags5 & (RF5_BA_MANA)) {vp[vn] = "invoke mana storms";color[vn++] = TERM_L_BLUE;}
1265 if (flags5 & (RF5_BA_DARK)) {vp[vn] = "°Å¹õ¤ÎÍò";color[vn++] = TERM_L_DARK;}
1267 if (flags5 & (RF5_BA_DARK)) {vp[vn] = "invoke darkness storms";color[vn++] = TERM_L_DARK;}
1271 if (flags5 & (RF5_BA_LITE)) {vp[vn] = "¥¹¥¿¡¼¥Ð¡¼¥¹¥È";color[vn++] = TERM_YELLOW;}
1273 if (flags5 & (RF5_BA_LITE)) {vp[vn] = "invoke starburst";color[vn++] = TERM_YELLOW;}
1277 if (flags4 & (RF4_BA_CHAO)) {vp[vn] = "½ã¥í¥°¥ë¥¹";color[vn++] = TERM_VIOLET;}
1279 if (flags4 & (RF4_BA_CHAO)) {vp[vn] = "invoke raw Logrus";color[vn++] = TERM_VIOLET;}
1283 if (flags6 & (RF6_HAND_DOOM)) {vp[vn] = "ÇËÌǤμê";color[vn++] = TERM_VIOLET;}
1285 if (flags6 & (RF6_HAND_DOOM)) {vp[vn] = "invoke the Hand of Doom";color[vn++] = TERM_VIOLET;}
1289 if (flags6 & (RF6_PSY_SPEAR)) {vp[vn] = "¸÷¤Î·õ";color[vn++] = TERM_YELLOW;}
1291 if (flags6 & (RF6_PSY_SPEAR)) {vp[vn] = "psycho-spear";color[vn++] = TERM_YELLOW;}
1295 if (flags5 & (RF5_DRAIN_MANA)) {vp[vn] = "ËâÎϵۼý";color[vn++] = TERM_SLATE;}
1297 if (flags5 & (RF5_DRAIN_MANA)) {vp[vn] = "drain mana";color[vn++] = TERM_SLATE;}
1301 if (flags5 & (RF5_MIND_BLAST)) {vp[vn] = "Àº¿À¹¶·â";color[vn++] = TERM_L_RED;}
1303 if (flags5 & (RF5_MIND_BLAST)) {vp[vn] = "cause mind blasting";color[vn++] = TERM_L_RED;}
1307 if (flags5 & (RF5_BRAIN_SMASH)) {vp[vn] = "Ǿ¹¶·â";color[vn++] = TERM_RED;}
1309 if (flags5 & (RF5_BRAIN_SMASH)) {vp[vn] = "cause brain smashing";color[vn++] = TERM_RED;}
1313 if (flags5 & (RF5_CAUSE_1)) {vp[vn] = "·Ú½ý¡Ü¼ö¤¤";color[vn++] = TERM_L_WHITE;}
1315 if (flags5 & (RF5_CAUSE_1)) {vp[vn] = "cause light wounds and cursing";color[vn++] = TERM_L_WHITE;}
1319 if (flags5 & (RF5_CAUSE_2)) {vp[vn] = "½Å½ý¡Ü¼ö¤¤";color[vn++] = TERM_L_WHITE;}
1321 if (flags5 & (RF5_CAUSE_2)) {vp[vn] = "cause serious wounds and cursing";color[vn++] = TERM_L_WHITE;}
1325 if (flags5 & (RF5_CAUSE_3)) {vp[vn] = "Ã×Ì¿½ý¡Ü¼ö¤¤";color[vn++] = TERM_L_WHITE;}
1327 if (flags5 & (RF5_CAUSE_3)) {vp[vn] = "cause critical wounds and cursing";color[vn++] = TERM_L_WHITE;}
1331 if (flags5 & (RF5_CAUSE_4)) {vp[vn] = "È빦¤òÆͤ¯";color[vn++] = TERM_L_WHITE;}
1333 if (flags5 & (RF5_CAUSE_4)) {vp[vn] = "cause mortal wounds";color[vn++] = TERM_L_WHITE;}
1337 if (flags5 & (RF5_BO_ACID)) {vp[vn] = "¥¢¥·¥Ã¥É¡¦¥Ü¥ë¥È";color[vn++] = TERM_GREEN;}
1339 if (flags5 & (RF5_BO_ACID)) {vp[vn] = "produce acid bolts";color[vn++] = TERM_GREEN;}
1343 if (flags5 & (RF5_BO_ELEC)) {vp[vn] = "¥µ¥ó¥À¡¼¡¦¥Ü¥ë¥È";color[vn++] = TERM_BLUE;}
1345 if (flags5 & (RF5_BO_ELEC)) {vp[vn] = "produce lightning bolts";color[vn++] = TERM_BLUE;}
1349 if (flags5 & (RF5_BO_FIRE)) {vp[vn] = "¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È";color[vn++] = TERM_RED;}
1351 if (flags5 & (RF5_BO_FIRE)) {vp[vn] = "produce fire bolts";color[vn++] = TERM_RED;}
1355 if (flags5 & (RF5_BO_COLD)) {vp[vn] = "¥¢¥¤¥¹¡¦¥Ü¥ë¥È";color[vn++] = TERM_L_WHITE;}
1357 if (flags5 & (RF5_BO_COLD)) {vp[vn] = "produce frost bolts";color[vn++] = TERM_L_WHITE;}
1361 if (flags5 & (RF5_BO_NETH)) {vp[vn] = "ÃϹö¤ÎÌð";color[vn++] = TERM_L_DARK;}
1363 if (flags5 & (RF5_BO_NETH)) {vp[vn] = "produce nether bolts";color[vn++] = TERM_L_DARK;}
1367 if (flags5 & (RF5_BO_WATE)) {vp[vn] = "¥¦¥©¡¼¥¿¡¼¡¦¥Ü¥ë¥È";color[vn++] = TERM_BLUE;}
1369 if (flags5 & (RF5_BO_WATE)) {vp[vn] = "produce water bolts";color[vn++] = TERM_BLUE;}
1373 if (flags5 & (RF5_BO_MANA)) {vp[vn] = "ËâÎϤÎÌð";color[vn++] = TERM_L_BLUE;}
1375 if (flags5 & (RF5_BO_MANA)) {vp[vn] = "produce mana bolts";color[vn++] = TERM_L_BLUE;}
1379 if (flags5 & (RF5_BO_PLAS)) {vp[vn] = "¥×¥é¥º¥Þ¡¦¥Ü¥ë¥È";color[vn++] = TERM_L_RED;}
1381 if (flags5 & (RF5_BO_PLAS)) {vp[vn] = "produce plasma bolts";color[vn++] = TERM_L_RED;}
1385 if (flags5 & (RF5_BO_ICEE)) {vp[vn] = "¶Ë´¨¤ÎÌð";color[vn++] = TERM_WHITE;}
1387 if (flags5 & (RF5_BO_ICEE)) {vp[vn] = "produce ice bolts";color[vn++] = TERM_WHITE;}
1391 if (flags5 & (RF5_MISSILE)) {vp[vn] = "¥Þ¥¸¥Ã¥¯¥ß¥µ¥¤¥ë";color[vn++] = TERM_SLATE;}
1393 if (flags5 & (RF5_MISSILE)) {vp[vn] = "produce magic missiles";color[vn++] = TERM_SLATE;}
1397 if (flags5 & (RF5_SCARE)) {vp[vn] = "¶²ÉÝ";color[vn++] = TERM_SLATE;}
1399 if (flags5 & (RF5_SCARE)) {vp[vn] = "terrify";color[vn++] = TERM_SLATE;}
1403 if (flags5 & (RF5_BLIND)) {vp[vn] = "Ìܤ¯¤é¤Þ¤·";color[vn++] = TERM_L_DARK;}
1405 if (flags5 & (RF5_BLIND)) {vp[vn] = "blind";color[vn++] = TERM_L_DARK;}
1409 if (flags5 & (RF5_CONF)) {vp[vn] = "º®Íð";color[vn++] = TERM_L_UMBER;}
1411 if (flags5 & (RF5_CONF)) {vp[vn] = "confuse";color[vn++] = TERM_L_UMBER;}
1415 if (flags5 & (RF5_SLOW)) {vp[vn] = "¸ºÂ®";color[vn++] = TERM_UMBER;}
1417 if (flags5 & (RF5_SLOW)) {vp[vn] = "slow";color[vn++] = TERM_UMBER;}
1421 if (flags5 & (RF5_HOLD)) {vp[vn] = "Ëãáã";color[vn++] = TERM_RED;}
1423 if (flags5 & (RF5_HOLD)) {vp[vn] = "paralyze";color[vn++] = TERM_RED;}
1427 if (flags6 & (RF6_HASTE)) {vp[vn] = "²Ã®";color[vn++] = TERM_L_GREEN;}
1429 if (flags6 & (RF6_HASTE)) {vp[vn] = "haste-self";color[vn++] = TERM_L_GREEN;}
1433 if (flags6 & (RF6_HEAL)) {vp[vn] = "¼£Ìþ";color[vn++] = TERM_WHITE;}
1435 if (flags6 & (RF6_HEAL)) {vp[vn] = "heal-self";color[vn++] = TERM_WHITE;}
1439 if (flags6 & (RF6_INVULNER)) {vp[vn] = "̵Ũ²½";color[vn++] = TERM_WHITE;}
1441 if (flags6 & (RF6_INVULNER)) {vp[vn] = "make invulnerable";color[vn++] = TERM_WHITE;}
1445 if (flags4 & RF4_DISPEL) {vp[vn] = "ËâÎϾõî";color[vn++] = TERM_L_WHITE;}
1447 if (flags4 & RF4_DISPEL) {vp[vn] = "dispel-magic";color[vn++] = TERM_L_WHITE;}
1451 if (flags6 & (RF6_BLINK)) {vp[vn] = "¥·¥ç¡¼¥È¥Æ¥ì¥Ý¡¼¥È";color[vn++] = TERM_UMBER;}
1453 if (flags6 & (RF6_BLINK)) {vp[vn] = "blink-self";color[vn++] = TERM_UMBER;}
1457 if (flags6 & (RF6_TPORT)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È";color[vn++] = TERM_ORANGE;}
1459 if (flags6 & (RF6_TPORT)) {vp[vn] = "teleport-self";color[vn++] = TERM_ORANGE;}
1463 if (flags6 & (RF6_WORLD)) {vp[vn] = "»þ¤ò»ß¤á¤ë";color[vn++] = TERM_L_BLUE;}
1465 if (flags6 & (RF6_WORLD)) {vp[vn] = "stop the time";color[vn++] = TERM_L_BLUE;}
1469 if (flags6 & (RF6_TELE_TO)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È¥Ð¥Ã¥¯";color[vn++] = TERM_L_UMBER;}
1471 if (flags6 & (RF6_TELE_TO)) {vp[vn] = "teleport to";color[vn++] = TERM_L_UMBER;}
1475 if (flags6 & (RF6_TELE_AWAY)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È¥¢¥¦¥§¥¤";color[vn++] = TERM_UMBER;}
1477 if (flags6 & (RF6_TELE_AWAY)) {vp[vn] = "teleport away";color[vn++] = TERM_UMBER;}
1481 if (flags6 & (RF6_TELE_LEVEL)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È¡¦¥ì¥Ù¥ë";color[vn++] = TERM_ORANGE;}
1483 if (flags6 & (RF6_TELE_LEVEL)) {vp[vn] = "teleport level";color[vn++] = TERM_ORANGE;}
1487 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;}}
1489 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;}
1493 if (flags6 & (RF6_TRAPS)) {vp[vn] = "¥È¥é¥Ã¥×";color[vn++] = TERM_BLUE;}
1495 if (flags6 & (RF6_TRAPS)) {vp[vn] = "create traps";color[vn++] = TERM_BLUE;}
1499 if (flags6 & (RF6_FORGET)) {vp[vn] = "µ²±¾Ãµî";color[vn++] = TERM_BLUE;}
1501 if (flags6 & (RF6_FORGET)) {vp[vn] = "cause amnesia";color[vn++] = TERM_BLUE;}
1505 if (flags6 & (RF6_RAISE_DEAD)) {vp[vn] = "»à¼ÔÉü³è";color[vn++] = TERM_RED;}
1507 if (flags6 & (RF6_RAISE_DEAD)) {vp[vn] = "raise dead";color[vn++] = TERM_RED;}
1511 if (flags6 & (RF6_S_MONSTER)) {vp[vn] = "¥â¥ó¥¹¥¿¡¼°ìÂξ¤´";color[vn++] = TERM_SLATE;}
1513 if (flags6 & (RF6_S_MONSTER)) {vp[vn] = "summon a monster";color[vn++] = TERM_SLATE;}
1517 if (flags6 & (RF6_S_MONSTERS)) {vp[vn] = "¥â¥ó¥¹¥¿¡¼Ê£¿ô¾¤´";color[vn++] = TERM_L_WHITE;}
1519 if (flags6 & (RF6_S_MONSTERS)) {vp[vn] = "summon monsters";color[vn++] = TERM_L_WHITE;}
1523 if (flags6 & (RF6_S_KIN)) {vp[vn] = "µß±ç¾¤´";color[vn++] = TERM_ORANGE;}
1525 if (flags6 & (RF6_S_KIN)) {vp[vn] = "summon aid";color[vn++] = TERM_ORANGE;}
1529 if (flags6 & (RF6_S_ANT)) {vp[vn] = "¥¢¥ê¾¤´";color[vn++] = TERM_RED;}
1531 if (flags6 & (RF6_S_ANT)) {vp[vn] = "summon ants";color[vn++] = TERM_RED;}
1535 if (flags6 & (RF6_S_SPIDER)) {vp[vn] = "¥¯¥â¾¤´";color[vn++] = TERM_L_DARK;}
1537 if (flags6 & (RF6_S_SPIDER)) {vp[vn] = "summon spiders";color[vn++] = TERM_L_DARK;}
1541 if (flags6 & (RF6_S_HOUND)) {vp[vn] = "¥Ï¥¦¥ó¥É¾¤´";color[vn++] = TERM_L_UMBER;}
1543 if (flags6 & (RF6_S_HOUND)) {vp[vn] = "summon hounds";color[vn++] = TERM_L_UMBER;}
1547 if (flags6 & (RF6_S_HYDRA)) {vp[vn] = "¥Ò¥É¥é¾¤´";color[vn++] = TERM_L_GREEN;}
1549 if (flags6 & (RF6_S_HYDRA)) {vp[vn] = "summon hydras";color[vn++] = TERM_L_GREEN;}
1553 if (flags6 & (RF6_S_ANGEL)) {vp[vn] = "Å·»È°ìÂξ¤´";color[vn++] = TERM_YELLOW;}
1555 if (flags6 & (RF6_S_ANGEL)) {vp[vn] = "summon an angel";color[vn++] = TERM_YELLOW;}
1559 if (flags6 & (RF6_S_DEMON)) {vp[vn] = "¥Ç¡¼¥â¥ó°ìÂξ¤´";color[vn++] = TERM_L_RED;}
1561 if (flags6 & (RF6_S_DEMON)) {vp[vn] = "summon a demon";color[vn++] = TERM_L_RED;}
1565 if (flags6 & (RF6_S_UNDEAD)) {vp[vn] = "¥¢¥ó¥Ç¥Ã¥É°ìÂξ¤´";color[vn++] = TERM_L_DARK;}
1567 if (flags6 & (RF6_S_UNDEAD)) {vp[vn] = "summon an undead";color[vn++] = TERM_L_DARK;}
1571 if (flags6 & (RF6_S_DRAGON)) {vp[vn] = "¥É¥é¥´¥ó°ìÂξ¤´";color[vn++] = TERM_ORANGE;}
1573 if (flags6 & (RF6_S_DRAGON)) {vp[vn] = "summon a dragon";color[vn++] = TERM_ORANGE;}
1577 if (flags6 & (RF6_S_HI_UNDEAD)) {vp[vn] = "¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¾¤´";color[vn++] = TERM_L_DARK;}
1579 if (flags6 & (RF6_S_HI_UNDEAD)) {vp[vn] = "summon Greater Undead";color[vn++] = TERM_L_DARK;}
1583 if (flags6 & (RF6_S_HI_DRAGON)) {vp[vn] = "¸ÅÂå¥É¥é¥´¥ó¾¤´";color[vn++] = TERM_ORANGE;}
1585 if (flags6 & (RF6_S_HI_DRAGON)) {vp[vn] = "summon Ancient Dragons";color[vn++] = TERM_ORANGE;}
1589 if (flags6 & (RF6_S_CYBER)) {vp[vn] = "¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¾¤´";color[vn++] = TERM_UMBER;}
1591 if (flags6 & (RF6_S_CYBER)) {vp[vn] = "summon Cyberdemons";color[vn++] = TERM_UMBER;}
1595 if (flags6 & (RF6_S_AMBERITES)) {vp[vn] = "¥¢¥ó¥Ð¡¼¤Î²¦¾¤´";color[vn++] = TERM_VIOLET;}
1597 if (flags6 & (RF6_S_AMBERITES)) {vp[vn] = "summon Lords of Amber";color[vn++] = TERM_VIOLET;}
1601 if (flags6 & (RF6_S_UNIQUE)) {vp[vn] = "¥æ¥Ë¡¼¥¯¡¦¥â¥ó¥¹¥¿¡¼¾¤´";color[vn++] = TERM_VIOLET;}
1603 if (flags6 & (RF6_S_UNIQUE)) {vp[vn] = "summon Unique Monsters";color[vn++] = TERM_VIOLET;}
1607 /* Describe spells */
1619 roff(", and is also");
1626 roff(format("%^s¤Ï", wd_he[msex]));
1628 roff(format("%^s is", wd_he[msex]));
1635 if (flags2 & (RF2_SMART)) c_roff(TERM_YELLOW, "Ū³Î¤Ë");
1638 roff("ËâË¡¤ò»È¤¦¤³¤È¤¬¤Ç¤¡¢");
1641 roff(" magical, casting spells");
1644 if (flags2 & RF2_SMART) roff(" intelligently");
1649 for (n = 0; n < vn; n++)
1653 if ( n != 0 ) roff("¡¢");
1655 if (n == 0) roff(" which ");
1656 else if (n < vn-1) roff(", ");
1662 c_roff(color[n], vp[n]);
1665 roff("¤Î¼öʸ¤ò¾§¤¨¤ë¤³¤È¤¬¤¢¤ë");
1670 /* End the sentence about inate/other spells */
1671 if (breath || magic)
1674 m = r_ptr->r_cast_inate + r_ptr->r_cast_spell;
1676 /* Average frequency */
1677 n = (r_ptr->freq_inate + r_ptr->freq_spell) / 2;
1679 /* Describe the spell frequency */
1683 roff(format("(³ÎΨ:1/%d)", 100 / n));
1685 roff(format("; 1 time in %d", 100 / n));
1690 /* Guess at the frequency */
1693 n = ((n + 9) / 10) * 10;
1695 roff(format("(³ÎΨ:Ìó1/%d)", 100 / n));
1697 roff(format("; about 1 time in %d", 100 / n));
1702 /* End this sentence */
1711 /* Describe monster "toughness" */
1712 if (know_armour(r_idx))
1716 roff(format("%^s¤Ï AC%d ¤ÎËɸæÎϤÈ",
1718 roff(format("%^s has an armor rating of %d",
1721 wd_he[msex], r_ptr->ac));
1723 /* Maximized hitpoints */
1724 if (flags1 & RF1_FORCE_MAXHP)
1727 roff(format(" %d ¤ÎÂÎÎϤ¬¤¢¤ë¡£",
1729 roff(format(" and a life rating of %d. ",
1732 r_ptr->hdice * r_ptr->hside));
1735 /* Variable hitpoints */
1739 roff(format(" %dd%d ¤ÎÂÎÎϤ¬¤¢¤ë¡£",
1741 roff(format(" and a life rating of %dd%d. ",
1744 r_ptr->hdice, r_ptr->hside));
1750 /* Collect special abilities. */
1753 if (flags7 & (RF7_HAS_LITE_1 | RF7_HAS_LITE_2)) vp[vn++] = "¥À¥ó¥¸¥ç¥ó¤ò¾È¤é¤¹";
1755 if (flags7 & (RF7_HAS_LITE_1 | RF7_HAS_LITE_2)) vp[vn++] = "illuminate the dungeon";
1759 if (flags2 & RF2_OPEN_DOOR) vp[vn++] = "¥É¥¢¤ò³«¤±¤ë";
1761 if (flags2 & RF2_OPEN_DOOR) vp[vn++] = "open doors";
1765 if (flags2 & RF2_BASH_DOOR) vp[vn++] = "¥É¥¢¤òÂǤÁÇˤë";
1767 if (flags2 & RF2_BASH_DOOR) vp[vn++] = "bash down doors";
1771 if (flags2 & RF2_PASS_WALL) vp[vn++] = "Êɤò¤¹¤êÈ´¤±¤ë";
1773 if (flags2 & RF2_PASS_WALL) vp[vn++] = "pass through walls";
1777 if (flags2 & RF2_KILL_WALL) vp[vn++] = "Êɤò·¡¤ê¿Ê¤à";
1779 if (flags2 & RF2_KILL_WALL) vp[vn++] = "bore through walls";
1783 if (flags2 & RF2_MOVE_BODY) vp[vn++] = "¼å¤¤¥â¥ó¥¹¥¿¡¼¤ò²¡¤·¤Î¤±¤ë";
1785 if (flags2 & RF2_MOVE_BODY) vp[vn++] = "push past weaker monsters";
1789 if (flags2 & RF2_KILL_BODY) vp[vn++] = "¼å¤¤¥â¥ó¥¹¥¿¡¼¤òÅݤ¹";
1791 if (flags2 & RF2_KILL_BODY) vp[vn++] = "destroy weaker monsters";
1795 if (flags2 & RF2_TAKE_ITEM) vp[vn++] = "¥¢¥¤¥Æ¥à¤ò½¦¤¦";
1797 if (flags2 & RF2_TAKE_ITEM) vp[vn++] = "pick up objects";
1801 if (flags2 & RF2_KILL_ITEM) vp[vn++] = "¥¢¥¤¥Æ¥à¤ò²õ¤¹";
1803 if (flags2 & RF2_KILL_ITEM) vp[vn++] = "destroy objects";
1807 /* Describe special abilities. */
1812 roff(format("%^s¤Ï", wd_he[msex]));
1814 roff(format("%^s", wd_he[msex]));
1819 for (n = 0; n < vn; n++)
1824 jverb(vp[n],jverb_buf,JVERB_AND);
1830 if (n == 0) roff(" can ");
1831 else if (n < vn-1) roff(", ");
1842 roff("¤³¤È¤¬¤Ç¤¤ë¡£");
1850 /* Describe special abilities. */
1851 if (flags7 & (RF7_SELF_LITE_1 | RF7_SELF_LITE_2))
1854 roff(format("%^s¤Ï¸÷¤Ã¤Æ¤¤¤ë¡£", wd_he[msex]));
1856 roff(format("%^s illuminate the dungeon. ", wd_he[msex]));
1860 if (flags2 & RF2_INVISIBLE)
1863 roff(format("%^s¤ÏÆ©ÌÀ¤ÇÌܤ˸«¤¨¤Ê¤¤¡£", wd_he[msex]));
1865 roff(format("%^s is invisible. ", wd_he[msex]));
1869 if (flags2 & RF2_COLD_BLOOD)
1872 roff(format("%^s¤ÏÎä·ìưʪ¤Ç¤¢¤ë¡£", wd_he[msex]));
1874 roff(format("%^s is cold blooded. ", wd_he[msex]));
1878 if (flags2 & RF2_EMPTY_MIND)
1881 roff(format("%^s¤Ï¥Æ¥ì¥Ñ¥·¡¼¤Ç¤Ï´¶ÃΤǤ¤Ê¤¤¡£", wd_he[msex]));
1883 roff(format("%^s is not detected by telepathy. ", wd_he[msex]));
1887 else if (flags2 & RF2_WEIRD_MIND)
1890 roff(format("%^s¤Ï¤Þ¤ì¤Ë¥Æ¥ì¥Ñ¥·¡¼¤Ç´¶ÃΤǤ¤ë¡£", wd_he[msex]));
1892 roff(format("%^s is rarely detected by telepathy. ", wd_he[msex]));
1896 if (flags2 & RF2_MULTIPLY)
1899 c_roff(TERM_L_UMBER, format("%^s¤ÏÇúȯŪ¤ËÁý¿£¤¹¤ë¡£", wd_he[msex]));
1901 c_roff(TERM_L_UMBER, format("%^s breeds explosively. ", wd_he[msex]));
1905 if (flags2 & RF2_REGENERATE)
1908 c_roff(TERM_L_WHITE, format("%^s¤ÏÁÇÁ᤯ÂÎÎϤò²óÉü¤¹¤ë¡£", wd_he[msex]));
1910 c_roff(TERM_L_WHITE, format("%^s regenerates quickly. ", wd_he[msex]));
1914 if (flags7 & RF7_RIDING)
1917 c_roff(TERM_SLATE, format("%^s¤Ë¾è¤ë¤³¤È¤¬¤Ç¤¤ë¡£", wd_he[msex]));
1919 c_roff(TERM_SLATE, format("%^s is suitable for riding. ", wd_he[msex]));
1925 /* Collect susceptibilities */
1928 if (flags3 & RF3_HURT_ROCK) {vp[vn] = "´ä¤ò½üµî¤¹¤ë¤â¤Î";color[vn++] = TERM_UMBER;}
1930 if (flags3 & RF3_HURT_ROCK) {vp[vn] = "rock remover";color[vn++] = TERM_UMBER;}
1934 if (flags3 & RF3_HURT_LITE) {vp[vn] = "ÌÀ¤ë¤¤¸÷";color[vn++] = TERM_YELLOW;}
1936 if (flags3 & RF3_HURT_LITE) {vp[vn] = "bright light";color[vn++] = TERM_YELLOW;}
1940 if (flags3 & RF3_HURT_FIRE) {vp[vn] = "±ê";color[vn++] = TERM_RED;}
1942 if (flags3 & RF3_HURT_FIRE) {vp[vn] = "fire";color[vn++] = TERM_RED;}
1946 if (flags3 & RF3_HURT_COLD) {vp[vn] = "Î䵤";color[vn++] = TERM_L_WHITE;}
1948 if (flags3 & RF3_HURT_COLD) {vp[vn] = "cold";color[vn++] = TERM_L_WHITE;}
1952 /* Describe susceptibilities */
1957 roff(format("%^s¤Ë¤Ï", wd_he[msex]));
1959 roff(format("%^s", wd_he[msex]));
1964 for (n = 0; n < vn; n++)
1968 if ( n != 0 ) roff("¤ä");
1970 if (n == 0) roff(" is hurt by ");
1971 else if (n < vn-1) roff(", ");
1977 c_roff(color[n], vp[n]);
1982 roff("¤Ç¥À¥á¡¼¥¸¤òÍ¿¤¨¤é¤ì¤ë¡£");
1990 /* Collect immunities */
1993 if (flags3 & RF3_IM_ACID) {vp[vn] = "»À";color[vn++] = TERM_GREEN;}
1995 if (flags3 & RF3_IM_ACID) {vp[vn] = "acid";color[vn++] = TERM_GREEN;}
1999 if (flags3 & RF3_IM_ELEC) {vp[vn] = "°ðºÊ";color[vn++] = TERM_BLUE;}
2001 if (flags3 & RF3_IM_ELEC) {vp[vn] = "lightning";color[vn++] = TERM_BLUE;}
2005 if (flags3 & RF3_IM_FIRE) {vp[vn] = "±ê";color[vn++] = TERM_RED;}
2007 if (flags3 & RF3_IM_FIRE) {vp[vn] = "fire";color[vn++] = TERM_RED;}
2011 if (flags3 & RF3_IM_COLD) {vp[vn] = "Î䵤";color[vn++] = TERM_L_WHITE;}
2013 if (flags3 & RF3_IM_COLD) {vp[vn] = "cold";color[vn++] = TERM_L_WHITE;}
2017 if (flags3 & RF3_IM_POIS) {vp[vn] = "ÆÇ";color[vn++] = TERM_L_GREEN;}
2019 if (flags3 & RF3_IM_POIS) {vp[vn] = "poison";color[vn++] = TERM_L_GREEN;}
2023 /* Describe immunities */
2028 roff(format("%^s¤Ï", wd_he[msex]));
2030 roff(format("%^s", wd_he[msex]));
2035 for (n = 0; n < vn; n++)
2039 if ( n != 0 ) roff("¤È");
2041 if (n == 0) roff(" resists ");
2042 else if (n < vn-1) roff(", ");
2048 c_roff(color[n], vp[n]);
2053 roff("¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£");
2061 /* Collect resistances */
2064 if (flags4 & RF4_BR_LITE) {vp[vn] = "Á®¸÷";color[vn++] = TERM_YELLOW;}
2066 if (flags4 & RF4_BR_LITE) {vp[vn] = "light";color[vn++] = TERM_YELLOW;}
2070 if ((flags4 & RF4_BR_DARK) || (flags3 & RF3_ORC)) {vp[vn] = "°Å¹õ";color[vn++] = TERM_L_DARK;}
2072 if (flags4 & RF4_BR_DARK || (flags3 & RF3_ORC)) {vp[vn] = "dark";color[vn++] = TERM_L_DARK;}
2076 if (flags3 & RF3_RES_NETH) {vp[vn] = "ÃϹö";color[vn++] = TERM_L_DARK;}
2078 if (flags3 & RF3_RES_NETH) {vp[vn] = "nether";color[vn++] = TERM_L_DARK;}
2082 if (flags3 & RF3_RES_WATE) {vp[vn] = "¿å";color[vn++] = TERM_BLUE;}
2084 if (flags3 & RF3_RES_WATE) {vp[vn] = "water";color[vn++] = TERM_BLUE;}
2088 if (flags3 & RF3_RES_PLAS) {vp[vn] = "¥×¥é¥º¥Þ";color[vn++] = TERM_L_RED;}
2090 if (flags3 & RF3_RES_PLAS) {vp[vn] = "plasma";color[vn++] = TERM_L_RED;}
2094 if (flags4 & RF4_BR_SHAR) {vp[vn] = "ÇËÊÒ";color[vn++] = TERM_L_UMBER;}
2096 if (flags4 & RF4_BR_SHAR) {vp[vn] = "shards";color[vn++] = TERM_L_UMBER;}
2100 if (flags4 & RF4_BR_SOUN) {vp[vn] = "¹ì²»";color[vn++] = TERM_ORANGE;}
2102 if (flags4 & RF4_BR_SOUN) {vp[vn] = "sound";color[vn++] = TERM_ORANGE;}
2106 if (flags4 & RF4_BR_CONF) {vp[vn] = "º®Íð";color[vn++] = TERM_L_UMBER;}
2108 if (flags4 & RF4_BR_CONF) {vp[vn] = "conf";color[vn++] = TERM_L_UMBER;}
2112 if ((flags4 & RF4_BR_CHAO) || (r_idx == MON_STORMBRINGER)) {vp[vn] = "¥«¥ª¥¹";color[vn++] = TERM_VIOLET;}
2114 if ((flags4 & RF4_BR_CHAO) || (r_idx == MON_STORMBRINGER)) {vp[vn] = "chaos";color[vn++] = TERM_VIOLET;}
2118 if (flags3 & RF3_RES_NEXU) {vp[vn] = "°ø²Ìº®Íð";color[vn++] = TERM_VIOLET;}
2120 if (flags3 & RF3_RES_NEXU) {vp[vn] = "nexus";color[vn++] = TERM_VIOLET;}
2124 if (flags3 & RF3_RES_DISE) {vp[vn] = "Îô²½";color[vn++] = TERM_VIOLET;}
2126 if (flags3 & RF3_RES_DISE) {vp[vn] = "disenchantment";color[vn++] = TERM_VIOLET;}
2130 if (flags4 & RF4_BR_WALL) {vp[vn] = "¥Õ¥©¡¼¥¹";color[vn++] = TERM_UMBER;}
2132 if (flags4 & RF4_BR_WALL) {vp[vn] = "sound";color[vn++] = TERM_UMBER;}
2136 if (flags4 & RF4_BR_INER) {vp[vn] = "ÃÙÆß";color[vn++] = TERM_SLATE;}
2138 if (flags4 & RF4_BR_INER) {vp[vn] = "inertia";color[vn++] = TERM_SLATE;}
2142 if (flags4 & RF4_BR_TIME) {vp[vn] = "»þ´ÖµÕž";color[vn++] = TERM_L_BLUE;}
2144 if (flags4 & RF4_BR_TIME) {vp[vn] = "time";color[vn++] = TERM_L_BLUE;}
2148 if (flags4 & RF4_BR_GRAV) {vp[vn] = "½ÅÎÏ";color[vn++] = TERM_SLATE;}
2150 if (flags4 & RF4_BR_GRAV) {vp[vn] = "gravity";color[vn++] = TERM_SLATE;}
2154 if (flags3 & RF3_RES_ALL) {vp[vn] = "¤¢¤é¤æ¤ë¹¶·â";color[vn++] = TERM_YELLOW;}
2156 if (flags3 & RF3_RES_ALL) {vp[vn] = "all";color[vn++] = TERM_YELLOW;}
2160 if ((flags3 & RF3_RES_TELE) && !(r_ptr->flags1 & RF1_UNIQUE)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È";color[vn++] = TERM_ORANGE;}
2162 if ((flags3 & RF3_RES_TELE) && !(r_ptr->flags1 & RF1_UNIQUE)) {vp[vn] = "teleportation";color[vn++] = TERM_ORANGE;}
2166 /* Describe resistances */
2171 roff(format("%^s¤Ï", wd_he[msex]));
2173 roff(format("%^s", wd_he[msex]));
2178 for (n = 0; n < vn; n++)
2182 if ( n != 0 ) roff("¤È");
2184 if (n == 0) roff(" resists ");
2185 else if (n < vn-1) roff(", ");
2191 c_roff(color[n], vp[n]);
2196 roff("¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£");
2204 if ((r_ptr->r_xtra1 & MR1_SINKA) || cheat_know)
2206 if (r_ptr->next_r_idx)
2209 roff(format("%^s¤Ï·Ð¸³¤òÀѤà¤È¡¢", wd_he[msex]));
2211 roff(format("%^s will evolve into ", wd_he[msex]));
2213 c_roff(TERM_YELLOW, format("%s", r_name+r_info[r_ptr->next_r_idx].name));
2215 roff(format("¤Ë¿Ê²½¤¹¤ë¡£"));
2217 roff(format(" when %s gets enugh experience. ", wd_he[msex]));
2220 else if (!(r_ptr->flags1 & RF1_UNIQUE))
2223 roff(format("%s¤Ï¿Ê²½¤·¤Ê¤¤¡£", wd_he[msex]));
2225 roff(format("%s won't evolve. ", wd_he[msex]));
2230 /* Collect non-effects */
2233 if (flags3 & RF3_NO_STUN) {vp[vn] = "Û¯Û°¤È¤·¤Ê¤¤";color[vn++] = TERM_ORANGE;}
2235 if (flags3 & RF3_NO_STUN) {vp[vn] = "stunned";color[vn++] = TERM_ORANGE;}
2239 if (flags3 & RF3_NO_FEAR) {vp[vn] = "¶²Éݤò´¶¤¸¤Ê¤¤";color[vn++] = TERM_SLATE;}
2241 if (flags3 & RF3_NO_FEAR) {vp[vn] = "frightened";color[vn++] = TERM_SLATE;}
2245 if (flags3 & RF3_NO_CONF) {vp[vn] = "º®Í𤷤ʤ¤";color[vn++] = TERM_L_UMBER;}
2247 if (flags3 & RF3_NO_CONF) {vp[vn] = "confused";color[vn++] = TERM_L_UMBER;}
2251 if (flags3 & RF3_NO_SLEEP) {vp[vn] = "̲¤é¤µ¤ì¤Ê¤¤";color[vn++] = TERM_BLUE;}
2253 if (flags3 & RF3_NO_SLEEP) {vp[vn] = "slept";color[vn++] = TERM_BLUE;}
2257 if ((flags3 & RF3_RES_TELE) && (r_ptr->flags1 & RF1_UNIQUE)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È¤µ¤ì¤Ê¤¤";color[vn++] = TERM_ORANGE;}
2259 if ((flags3 & RF3_RES_TELE) && (r_ptr->flags1 & RF1_UNIQUE)) {vp[vn] = "teleported";color[vn++] = TERM_ORANGE;}
2262 /* Describe non-effects */
2267 roff(format("%^s¤Ï", wd_he[msex]));
2269 roff(format("%^s", wd_he[msex]));
2274 for (n = 0; n < vn; n++)
2278 if ( n != 0 ) roff("¤·¡¢");
2280 if (n == 0) roff(" cannot be ");
2281 else if (n < vn - 1) roff(", ");
2287 c_roff(color[n], vp[n]);
2300 /* Do we know how aware it is? */
2301 if ((((int)r_ptr->r_wake * (int)r_ptr->r_wake) > r_ptr->sleep) ||
2302 (r_ptr->r_ignore == MAX_UCHAR) ||
2303 ((r_ptr->sleep == 0) && ((r_ptr->r_tkills >= 10) || cheat_know)))
2307 if (r_ptr->sleep > 200)
2310 act = "¤ò̵»ë¤·¤¬¤Á¤Ç¤¢¤ë¤¬";
2312 act = "prefers to ignore";
2316 else if (r_ptr->sleep > 95)
2319 act = "¤ËÂФ·¤Æ¤Û¤È¤ó¤ÉÃí°Õ¤òʧ¤ï¤Ê¤¤¤¬";
2321 act = "pays very little attention to";
2325 else if (r_ptr->sleep > 75)
2328 act = "¤ËÂФ·¤Æ¤¢¤Þ¤êÃí°Õ¤òʧ¤ï¤Ê¤¤¤¬";
2330 act = "pays little attention to";
2334 else if (r_ptr->sleep > 45)
2337 act = "¤ò¸«²á¤´¤·¤¬¤Á¤Ç¤¢¤ë¤¬";
2339 act = "tends to overlook";
2343 else if (r_ptr->sleep > 25)
2346 act = "¤ò¤Û¤ó¤Î¾¯¤·¤Ï¸«¤Æ¤ª¤ê";
2348 act = "takes quite a while to see";
2352 else if (r_ptr->sleep > 10)
2355 act = "¤ò¤·¤Ð¤é¤¯¤Ï¸«¤Æ¤ª¤ê";
2357 act = "takes a while to see";
2361 else if (r_ptr->sleep > 5)
2364 act = "¤ò´öʬÃí°Õ¿¼¤¯¸«¤Æ¤ª¤ê";
2366 act = "is fairly observant of";
2370 else if (r_ptr->sleep > 3)
2373 act = "¤òÃí°Õ¿¼¤¯¸«¤Æ¤ª¤ê";
2375 act = "is observant of";
2379 else if (r_ptr->sleep > 1)
2382 act = "¤ò¤«¤Ê¤êÃí°Õ¿¼¤¯¸«¤Æ¤ª¤ê";
2384 act = "is very observant of";
2388 else if (r_ptr->sleep > 0)
2391 act = "¤ò·Ù²ü¤·¤Æ¤ª¤ê";
2393 act = "is vigilant for";
2400 act = "¤ò¤«¤Ê¤ê·Ù²ü¤·¤Æ¤ª¤ê";
2402 act = "is ever vigilant for";
2408 roff(format("%^s¤Ï¿¯Æþ¼Ô%s¡¢ %d ¥Õ¥£¡¼¥ÈÀ褫¤é¿¯Æþ¼Ô¤Ëµ¤ÉÕ¤¯¤³¤È¤¬¤¢¤ë¡£",
2409 wd_he[msex], act, 10 * r_ptr->aaf));
2411 roff(format("%^s %s intruders, which %s may notice from %d feet. ",
2412 wd_he[msex], act, wd_he[msex], 10 * r_ptr->aaf));
2418 /* Drops gold and/or items */
2419 if (r_ptr->r_drop_gold || r_ptr->r_drop_item)
2426 roff(format("%^s¤Ï", wd_he[msex]));
2428 roff(format("%^s may carry", wd_he[msex]));
2432 /* Count maximum drop */
2433 n = MAX(r_ptr->r_drop_gold, r_ptr->r_drop_item);
2435 /* One drop (may need an "n") */
2451 roff("°ì¤Ä¤«Æó¤Ä¤Î");
2453 roff(" one or two");
2462 roff(format(" %d ¸Ä¤Þ¤Ç¤Î", n));
2464 roff(format(" up to %d", n));
2471 if (flags1 & RF1_DROP_GREAT)
2481 /* Good (no "n" needed) */
2482 else if (flags1 & RF1_DROP_GOOD)
2501 if (r_ptr->r_drop_item)
2503 /* Handle singular "an" */
2509 /* Dump "object(s)" */
2515 if (n != 1) roff("s");
2519 /* Conjunction replaces variety, if needed for "gold" below */
2529 if (r_ptr->r_drop_gold)
2532 if (!p) sin = FALSE;
2534 /* Handle singular "an" */
2540 /* Dump "treasure(s)" */
2546 if (n != 1) roff("s");
2551 /* End this sentence */
2553 roff("¤ò»ý¤Ã¤Æ¤¤¤ë¤³¤È¤¬¤¢¤ë¡£");
2561 /* Count the number of "known" attacks */
2562 for (n = 0, m = 0; m < 4; m++)
2564 /* Skip non-attacks */
2565 if (!r_ptr->blow[m].method) continue;
2567 /* Count known attacks */
2568 if (r_ptr->r_blows[m]) n++;
2571 /* Examine (and count) the actual attacks */
2572 for (r = 0, m = 0; m < 4; m++)
2574 int method, effect, d1, d2;
2576 /* Skip non-attacks */
2577 if (!r_ptr->blow[m].method) continue;
2579 /* Skip unknown attacks */
2580 if (!r_ptr->r_blows[m]) continue;
2583 /* Extract the attack info */
2584 method = r_ptr->blow[m].method;
2585 effect = r_ptr->blow[m].effect;
2586 d1 = r_ptr->blow[m].d_dice;
2587 d2 = r_ptr->blow[m].d_side;
2593 /* Acquire the method */
2597 case RBM_HIT: p = "²¥¤ë"; break;
2599 case RBM_HIT: p = "hit"; break;
2603 case RBM_TOUCH: p = "¿¨¤ë"; break;
2605 case RBM_TOUCH: p = "touch"; break;
2609 case RBM_PUNCH: p = "¥Ñ¥ó¥Á¤¹¤ë"; break;
2611 case RBM_PUNCH: p = "punch"; break;
2615 case RBM_KICK: p = "½³¤ë"; break;
2617 case RBM_KICK: p = "kick"; break;
2621 case RBM_CLAW: p = "¤Ò¤Ã¤«¤¯"; break;
2623 case RBM_CLAW: p = "claw"; break;
2627 case RBM_BITE: p = "³ú¤à"; break;
2629 case RBM_BITE: p = "bite"; break;
2633 case RBM_STING: p = "»É¤¹"; break;
2635 case RBM_STING: p = "sting"; break;
2639 case RBM_SLASH: p = "»Â¤ë"; break;
2641 case RBM_SLASH: p = "slash"; break;
2645 case RBM_BUTT: p = "³Ñ¤ÇÆͤ¯"; break;
2647 case RBM_BUTT: p = "butt"; break;
2651 case RBM_CRUSH: p = "ÂÎÅö¤¿¤ê¤¹¤ë"; break;
2653 case RBM_CRUSH: p = "crush"; break;
2657 case RBM_ENGULF: p = "°û¤ß¹þ¤à"; break;
2659 case RBM_ENGULF: p = "engulf"; break;
2663 case RBM_CHARGE: p = "ÀÁµá½ñ¤ò¤è¤³¤¹"; break;
2665 case RBM_CHARGE: p = "charge"; break;
2669 case RBM_CRAWL: p = "ÂΤξå¤òÇ礤²ó¤ë"; break;
2671 case RBM_CRAWL: p = "crawl on you"; break;
2675 case RBM_DROOL: p = "¤è¤À¤ì¤ò¤¿¤é¤¹"; break;
2677 case RBM_DROOL: p = "drool on you"; break;
2681 case RBM_SPIT: p = "¤Ä¤Ð¤òÅǤ¯"; break;
2683 case RBM_SPIT: p = "spit"; break;
2687 case RBM_EXPLODE: p = "Çúȯ¤¹¤ë"; break;
2689 case RBM_EXPLODE: p = "explode"; break;
2693 case RBM_GAZE: p = "¤Ë¤é¤à"; break;
2695 case RBM_GAZE: p = "gaze"; break;
2699 case RBM_WAIL: p = "µã¤¶«¤Ö"; break;
2701 case RBM_WAIL: p = "wail"; break;
2705 case RBM_SPORE: p = "˦»Ò¤òÈô¤Ð¤¹"; break;
2707 case RBM_SPORE: p = "release spores"; break;
2710 case RBM_XXX4: break;
2712 case RBM_BEG: p = "¶â¤ò¤»¤¬¤à"; break;
2714 case RBM_BEG: p = "beg"; break;
2718 case RBM_INSULT: p = "Éî¿«¤¹¤ë"; break;
2720 case RBM_INSULT: p = "insult"; break;
2724 case RBM_MOAN: p = "¤¦¤á¤¯"; break;
2726 case RBM_MOAN: p = "moan"; break;
2730 case RBM_SHOW: p = "²Î¤¦"; break;
2732 case RBM_SHOW: p = "sing"; break;
2738 /* Default effect */
2741 /* Acquire the effect */
2746 case RBE_HURT: q = "¹¶·â¤¹¤ë"; break;
2749 case RBE_HURT: q = "attack"; break;
2753 case RBE_POISON: q = "ÆǤò¤¯¤é¤ï¤¹"; break;
2755 case RBE_POISON: q = "poison"; break;
2759 case RBE_UN_BONUS: q = "Îô²½¤µ¤»¤ë"; break;
2761 case RBE_UN_BONUS: q = "disenchant"; break;
2765 case RBE_UN_POWER: q = "ËâÎϤòµÛ¤¤¼è¤ë"; break;
2767 case RBE_UN_POWER: q = "drain charges"; break;
2771 case RBE_EAT_GOLD: q = "¶â¤òÅð¤à"; break;
2773 case RBE_EAT_GOLD: q = "steal gold"; break;
2777 case RBE_EAT_ITEM: q = "¥¢¥¤¥Æ¥à¤òÅð¤à"; break;
2779 case RBE_EAT_ITEM: q = "steal items"; break;
2783 case RBE_EAT_FOOD: q = "¤¢¤Ê¤¿¤Î¿©ÎÁ¤ò¿©¤Ù¤ë"; break;
2785 case RBE_EAT_FOOD: q = "eat your food"; break;
2789 case RBE_EAT_LITE: q = "ÌÀ¤«¤ê¤òµÛ¼ý¤¹¤ë"; break;
2791 case RBE_EAT_LITE: q = "absorb light"; break;
2795 case RBE_ACID: q = "»À¤òÈô¤Ð¤¹"; break;
2797 case RBE_ACID: q = "shoot acid"; break;
2801 case RBE_ELEC: q = "´¶ÅŤµ¤»¤ë"; break;
2803 case RBE_ELEC: q = "electrocute"; break;
2807 case RBE_FIRE: q = "dz¤ä¤¹"; break;
2809 case RBE_FIRE: q = "burn"; break;
2813 case RBE_COLD: q = "Åà¤é¤»¤ë"; break;
2815 case RBE_COLD: q = "freeze"; break;
2819 case RBE_BLIND: q = "ÌÕÌܤˤ¹¤ë"; break;
2821 case RBE_BLIND: q = "blind"; break;
2825 case RBE_CONFUSE: q = "º®Í𤵤»¤ë"; break;
2827 case RBE_CONFUSE: q = "confuse"; break;
2831 case RBE_TERRIFY: q = "¶²Éݤµ¤»¤ë"; break;
2833 case RBE_TERRIFY: q = "terrify"; break;
2837 case RBE_PARALYZE: q = "Ëãá㤵¤»¤ë"; break;
2839 case RBE_PARALYZE: q = "paralyze"; break;
2843 case RBE_LOSE_STR: q = "ÏÓÎϤò¸º¾¯¤µ¤»¤ë"; break;
2845 case RBE_LOSE_STR: q = "reduce strength"; break;
2849 case RBE_LOSE_INT: q = "ÃÎǽ¤ò¸º¾¯¤µ¤»¤ë"; break;
2851 case RBE_LOSE_INT: q = "reduce intelligence"; break;
2855 case RBE_LOSE_WIS: q = "¸¤µ¤ò¸º¾¯¤µ¤»¤ë"; break;
2857 case RBE_LOSE_WIS: q = "reduce wisdom"; break;
2861 case RBE_LOSE_DEX: q = "´ïÍѤµ¤ò¸º¾¯¤µ¤»¤ë"; break;
2863 case RBE_LOSE_DEX: q = "reduce dexterity"; break;
2867 case RBE_LOSE_CON: q = "Âѵ×ÎϤò¸º¾¯¤µ¤»¤ë"; break;
2869 case RBE_LOSE_CON: q = "reduce constitution"; break;
2873 case RBE_LOSE_CHR: q = "Ì¥ÎϤò¸º¾¯¤µ¤»¤ë"; break;
2875 case RBE_LOSE_CHR: q = "reduce charisma"; break;
2879 case RBE_LOSE_ALL: q = "Á´¥¹¥Æ¡¼¥¿¥¹¤ò¸º¾¯¤µ¤»¤ë"; break;
2881 case RBE_LOSE_ALL: q = "reduce all stats"; break;
2885 case RBE_SHATTER: q = "Ê´ºÕ¤¹¤ë"; break;
2887 case RBE_SHATTER: q = "shatter"; break;
2891 case RBE_EXP_10: q = "·Ð¸³Ãͤò¸º¾¯(10d6+)¤µ¤»¤ë"; break;
2893 case RBE_EXP_10: q = "lower experience (by 10d6+)"; break;
2897 case RBE_EXP_20: q = "·Ð¸³Ãͤò¸º¾¯(20d6+)¤µ¤»¤ë"; break;
2899 case RBE_EXP_20: q = "lower experience (by 20d6+)"; break;
2903 case RBE_EXP_40: q = "·Ð¸³Ãͤò¸º¾¯(40d6+)¤µ¤»¤ë"; break;
2905 case RBE_EXP_40: q = "lower experience (by 40d6+)"; break;
2909 case RBE_EXP_80: q = "·Ð¸³Ãͤò¸º¾¯(80d6+)¤µ¤»¤ë"; break;
2911 case RBE_EXP_80: q = "lower experience (by 80d6+)"; break;
2915 case RBE_DISEASE: q = "ɵ¤¤Ë¤¹¤ë"; break;
2917 case RBE_DISEASE: q = "disease"; break;
2921 case RBE_TIME: q = "»þ´Ö¤òµÕÌá¤ê¤µ¤»¤ë"; break;
2923 case RBE_TIME: q = "time"; break;
2927 case RBE_EXP_VAMP: q = "À¸Ì¿ÎϤòµÛ¼ý¤¹¤ë"; break;
2929 case RBE_EXP_VAMP: q = "drain life force"; break;
2933 case RBE_DR_MANA: q = "ËâÎϤòÃ¥¤¦"; break;
2935 case RBE_DR_MANA: q = "drain mana force"; break;
2942 if ( r == 0 ) roff( format("%^s¤Ï", wd_he[msex]) );
2944 /***¼ã´³É½¸½¤òÊѹ¹ ita ***/
2946 /* Describe damage (if known) */
2947 if (d1 && d2 && know_damage(r_idx, m))
2950 /* Display the damage */
2951 roff(format(" %dd%d ", d1, d2));
2952 roff("¤Î¥À¥á¡¼¥¸¤Ç");
2954 /* Hack -- force a method */
2955 if (!p) p = "²¿¤«´ñ̯¤Ê¤³¤È¤ò¤¹¤ë";
2957 /* Describe the method */
2958 /* XX¤·¤ÆYY¤·/XX¤·¤ÆYY¤¹¤ë/XX¤·/XX¤¹¤ë */
2959 if(q) jverb( p ,jverb_buf, JVERB_TO);
2960 else if(r!=n-1) jverb( p ,jverb_buf, JVERB_AND);
2961 else strcpy(jverb_buf, p);
2965 /* Describe the effect (if any) */
2968 if(r!=n-1) jverb( q,jverb_buf, JVERB_AND);
2969 else strcpy(jverb_buf,q);
2972 if(r!=n-1) roff("¡¢");
2974 /* Introduce the attack description */
2977 roff(format("%^s can ", wd_he[msex]));
2989 /* Hack -- force a method */
2990 if (!p) p = "do something weird";
2992 /* Describe the method */
2996 /* Describe the effect (if any) */
2999 /* Describe the attack type */
3003 /* Describe damage (if known) */
3004 if (d1 && d2 && know_damage(r_idx, m))
3006 /* Display the damage */
3007 roff(" with damage");
3008 roff(format(" %dd%d", d1, d2));
3015 /* Count the attacks as printed */
3019 /* Finish sentence above */
3030 /* Notice lack of attacks */
3031 else if (flags1 & RF1_NEVER_BLOW)
3034 roff(format("%^s¤ÏʪÍýŪ¤Ê¹¶·âÊýË¡¤ò»ý¤¿¤Ê¤¤¡£", wd_he[msex]));
3036 roff(format("%^s has no physical attacks. ", wd_he[msex]));
3041 /* Or describe the lack of knowledge */
3045 roff(format("%s¹¶·â¤Ë¤Ä¤¤¤Æ¤Ï²¿¤âÃΤé¤Ê¤¤¡£", wd_his[msex]));
3047 roff(format("Nothing is known about %s attack. ", wd_his[msex]));
3054 * Notice "Quest" monsters, but only if you
3055 * already encountered the monster.
3057 if ((flags1 & RF1_QUESTOR) && ((r_ptr->r_sights) && (r_ptr->max_num) && ((r_idx == MON_OBERON) || (r_idx == MON_SERPENT))))
3060 c_roff(TERM_VIOLET, "¤¢¤Ê¤¿¤Ï¤³¤Î¥â¥ó¥¹¥¿¡¼¤ò»¦¤·¤¿¤¤¤È¤¤¤¦¶¯¤¤Íß˾¤ò´¶¤¸¤Æ¤¤¤ë...");
3062 c_roff(TERM_VIOLET, "You feel an intense desire to kill this monster... ");
3067 else if (flags7 & RF7_GUARDIAN)
3070 c_roff(TERM_L_RED, "¤³¤Î¥â¥ó¥¹¥¿¡¼¤Ï¥À¥ó¥¸¥ç¥ó¤Î¼ç¤Ç¤¢¤ë¡£");
3072 c_roff(TERM_L_RED, "This monster is the master of a dungeon.");
3081 /* Cheat -- know everything */
3082 if ((cheat_know) && (remem == 0))
3084 /* Hack -- restore memory */
3085 COPY(r_ptr, &save_mem, monster_race);
3092 * Hack -- Display the "name" and "attr/chars" of a monster race
3094 static void roff_top(int r_idx)
3096 monster_race *r_ptr = &r_info[r_idx];
3102 /* Access the chars */
3106 /* Access the attrs */
3111 /* Clear the top line */
3112 Term_erase(0, 0, 255);
3114 /* Reset the cursor */
3117 /* A title (use "The" for non-uniques) */
3121 if (!(r_ptr->flags1 & RF1_UNIQUE))
3125 Term_addstr(-1, TERM_WHITE, "The ");
3129 Term_addstr(-1, TERM_WHITE, (r_name + r_ptr->name));
3131 /* Append the "standard" attr/char info */
3132 Term_addstr(-1, TERM_WHITE, " ('");
3134 Term_addstr(-1, TERM_WHITE, "')");
3136 /* Append the "optional" attr/char info */
3137 Term_addstr(-1, TERM_WHITE, "/('");
3139 Term_addstr(-1, TERM_WHITE, "'):");
3141 /* Wizards get extra info */
3146 sprintf(buf, "%d", r_idx);
3148 Term_addstr(-1, TERM_WHITE, " (");
3149 Term_addstr(-1, TERM_L_BLUE, buf);
3150 Term_addch(TERM_WHITE, ')');
3157 * Hack -- describe the given monster race at the top of the screen
3159 void screen_roff(int r_idx, int remember)
3161 /* Flush messages */
3165 Term_erase(0, 1, 255);
3167 /* Recall monster */
3168 roff_aux(r_idx, remember);
3170 /* Describe monster */
3178 * Hack -- describe the given monster race in the current "term" window
3180 void display_roff(int r_idx)
3184 /* Erase the window */
3185 for (y = 0; y < Term->hgt; y++)
3187 /* Erase the line */
3188 Term_erase(0, y, 255);
3194 /* Recall monster */
3197 /* Describe monster */
3202 bool monster_quest(int r_idx)
3204 monster_race *r_ptr = &r_info[r_idx];
3206 /* Random quests are in the dungeon */
3207 if (r_ptr->flags8 & RF8_WILD_ONLY) return FALSE;
3209 /* No random quests for aquatic monsters */
3210 if (r_ptr->flags7 & RF7_AQUATIC) return FALSE;
3212 /* No random quests for multiplying monsters */
3213 if (r_ptr->flags2 & RF2_MULTIPLY) return FALSE;
3215 /* No quests to kill friendly monsters */
3216 if (r_ptr->flags7 & RF7_FRIENDLY) return FALSE;
3222 bool monster_dungeon(int r_idx)
3224 monster_race *r_ptr = &r_info[r_idx];
3226 if (!(r_ptr->flags8 & RF8_WILD_ONLY))
3233 bool monster_ocean(int r_idx)
3235 monster_race *r_ptr = &r_info[r_idx];
3237 if (r_ptr->flags8 & RF8_WILD_OCEAN)
3244 bool monster_shore(int r_idx)
3246 monster_race *r_ptr = &r_info[r_idx];
3248 if (r_ptr->flags8 & RF8_WILD_SHORE)
3255 bool monster_waste(int r_idx)
3257 monster_race *r_ptr = &r_info[r_idx];
3259 if (r_ptr->flags8 & (RF8_WILD_WASTE | RF8_WILD_ALL))
3266 bool monster_town(int r_idx)
3268 monster_race *r_ptr = &r_info[r_idx];
3270 if (r_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL))
3277 bool monster_wood(int r_idx)
3279 monster_race *r_ptr = &r_info[r_idx];
3281 if (r_ptr->flags8 & (RF8_WILD_WOOD | RF8_WILD_ALL))
3288 bool monster_volcano(int r_idx)
3290 monster_race *r_ptr = &r_info[r_idx];
3292 if (r_ptr->flags8 & RF8_WILD_VOLCANO)
3299 bool monster_mountain(int r_idx)
3301 monster_race *r_ptr = &r_info[r_idx];
3303 if (r_ptr->flags8 & RF8_WILD_MOUNTAIN)
3310 bool monster_grass(int r_idx)
3312 monster_race *r_ptr = &r_info[r_idx];
3314 if (r_ptr->flags8 & (RF8_WILD_GRASS | RF8_WILD_ALL))
3321 bool monster_deep_water(int r_idx)
3323 monster_race *r_ptr = &r_info[r_idx];
3325 if (!monster_dungeon(r_idx)) return FALSE;
3327 if (r_ptr->flags7 & RF7_AQUATIC)
3334 bool monster_shallow_water(int r_idx)
3336 monster_race *r_ptr = &r_info[r_idx];
3338 if (!monster_dungeon(r_idx)) return FALSE;
3340 if (r_ptr->flags2 & RF2_AURA_FIRE)
3347 bool monster_lava(int r_idx)
3349 monster_race *r_ptr = &r_info[r_idx];
3351 if (!monster_dungeon(r_idx)) return FALSE;
3353 if (((r_ptr->flags3 & RF3_IM_FIRE) ||
3354 (r_ptr->flags7 & RF7_CAN_FLY)) &&
3355 !(r_ptr->flags3 & RF3_AURA_COLD))
3362 monster_hook_type get_monster_hook(void)
3364 if (!dun_level && !p_ptr->inside_quest)
3366 switch (wilderness[p_ptr->wilderness_y][p_ptr->wilderness_x].terrain)
3369 return (monster_hook_type)monster_town;
3370 case TERRAIN_DEEP_WATER:
3371 return (monster_hook_type)monster_ocean;
3372 case TERRAIN_SHALLOW_WATER:
3374 return (monster_hook_type)monster_shore;
3376 case TERRAIN_DESERT:
3377 return (monster_hook_type)monster_waste;
3379 return (monster_hook_type)monster_grass;
3381 return (monster_hook_type)monster_wood;
3382 case TERRAIN_SHALLOW_LAVA:
3383 case TERRAIN_DEEP_LAVA:
3384 return (monster_hook_type)monster_volcano;
3385 case TERRAIN_MOUNTAIN:
3386 return (monster_hook_type)monster_mountain;
3388 return (monster_hook_type)monster_dungeon;
3393 return (monster_hook_type)monster_dungeon;
3398 monster_hook_type get_monster_hook2(int y, int x)
3400 /* Set the monster list */
3401 switch (cave[y][x].feat)
3403 case FEAT_SHAL_WATER:
3404 return (monster_hook_type)monster_shallow_water;
3405 case FEAT_DEEP_WATER:
3406 return (monster_hook_type)monster_deep_water;
3407 case FEAT_DEEP_LAVA:
3408 case FEAT_SHAL_LAVA:
3409 return (monster_hook_type)monster_lava;
3416 void set_friendly(monster_type *m_ptr)
3418 m_ptr->smart |= SM_FRIENDLY;
3421 void set_pet(monster_type *m_ptr)
3423 /* Check for quest completion */
3424 check_quest_completion(m_ptr);
3426 m_ptr->smart |= SM_PET;
3430 * Makes the monster hostile towards the player
3432 void set_hostile(monster_type *m_ptr)
3434 if (p_ptr->inside_battle) return;
3435 m_ptr->smart &= ~SM_PET;
3436 m_ptr->smart &= ~SM_FRIENDLY;
3443 void anger_monster(monster_type *m_ptr)
3445 if (p_ptr->inside_battle) return;
3446 if (is_friendly(m_ptr))
3450 monster_desc(m_name, m_ptr, 0);
3452 msg_format("%^s¤ÏÅܤä¿¡ª", m_name);
3454 msg_format("%^s gets angry!", m_name);
3459 chg_virtue(V_INDIVIDUALISM, 1);
3460 chg_virtue(V_HONOUR, -1);
3461 chg_virtue(V_JUSTICE, -1);
3462 chg_virtue(V_COMPASSION, -1);
3468 * Check if monster can cross terrain
3470 bool monster_can_cross_terrain(byte feat, monster_race *r_ptr)
3473 if (feat == FEAT_DEEP_WATER)
3475 if ((r_ptr->flags7 & RF7_AQUATIC) ||
3476 (r_ptr->flags7 & RF7_CAN_FLY) ||
3477 (r_ptr->flags7 & RF7_CAN_SWIM))
3483 else if (feat == FEAT_SHAL_WATER)
3485 if (!(r_ptr->flags2 & RF2_AURA_FIRE) ||
3486 (r_ptr->flags7 & RF7_AQUATIC) ||
3487 (r_ptr->flags7 & RF7_CAN_FLY) ||
3488 (r_ptr->flags7 & RF7_CAN_SWIM))
3493 /* Aquatic monster */
3494 else if ((r_ptr->flags7 & RF7_AQUATIC) &&
3495 !(r_ptr->flags7 & RF7_CAN_FLY))
3500 else if ((feat == FEAT_SHAL_LAVA) ||
3501 (feat == FEAT_DEEP_LAVA))
3503 if ((r_ptr->flags3 & RF3_IM_FIRE) ||
3504 (r_ptr->flags7 & RF7_CAN_FLY))
3515 * Check if two monsters are enemies
3517 bool are_enemies(monster_type *m_ptr, monster_type *n_ptr)
3519 monster_race *r_ptr = &r_info[m_ptr->r_idx];
3520 monster_race *s_ptr = &r_info[n_ptr->r_idx];
3522 if (p_ptr->inside_battle)
3524 if (is_pet(m_ptr) || is_pet(n_ptr)) return FALSE;
3528 if ((r_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL))
3529 && (s_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL)))
3531 if (!is_pet(m_ptr) && !is_pet(n_ptr)) return FALSE;
3534 /* Friendly vs. opposite aligned normal or pet */
3535 if (((r_ptr->flags3 & RF3_EVIL) &&
3536 (s_ptr->flags3 & RF3_GOOD)) ||
3537 ((r_ptr->flags3 & RF3_GOOD) &&
3538 (s_ptr->flags3 & RF3_EVIL)))
3540 if (!(m_ptr->mflag2 & MFLAG_CHAMELEON) || !(n_ptr->mflag2 & MFLAG_CHAMELEON)) return TRUE;
3543 /* Hostile vs. non-hostile */
3544 if (is_hostile(m_ptr) != is_hostile(n_ptr))
3555 * Is the monster "alive"?
3557 * Used to determine the message to print for a killed monster.
3558 * ("dies", "destroyed")
3560 bool monster_living(monster_race *r_ptr)
3562 /* Non-living, undead, or demon */
3563 if (r_ptr->flags3 & (RF3_DEMON | RF3_UNDEAD | RF3_NONLIVING))
3572 static char *dwarf_syllable1[] =
3574 "B", "D", "F", "G", "Gl", "H", "K", "L", "M", "N", "R", "S", "T", "Th", "V",
3577 static char *dwarf_syllable2[] =
3579 "a", "e", "i", "o", "oi", "u",
3582 static char *dwarf_syllable3[] =
3584 "bur", "fur", "gan", "gnus", "gnar", "li", "lin", "lir", "mli", "nar",
3585 "nus", "rin", "ran", "sin", "sil", "sur",
3589 static char *elf_syllable1[] =
3591 "Al", "An", "Bal", "Bel", "Cal", "Cel", "El", "Elr", "Elv", "Eow", "F",
3592 "Fal", "Fel", "Fin", "G", "Gal", "Gel", "Gl", "Is", "Lan", "Leg", "N",
3593 "Nal", "Nel", "S", "Sal", "Sel", "T", "Tal", "Tel", "Thr", "Tin",
3596 static char *elf_syllable2[] =
3598 "a", "adrie", "ara", "e", "ebri", "ele", "ere", "i", "io", "ithra",
3599 "ilma", "il-Ga", "ili", "o", "orfi", "u", "y",
3602 static char *elf_syllable3[] =
3604 "l", "las", "lad", "ldor", "ldur", "linde", "lith", "mir", "n", "nd",
3605 "ndel", "ndil", "ndir", "nduil", "ng", "mbor", "r", "rith", "ril",
3606 "riand", "rion", "s", "thien", "viel", "wen", "wyn",
3610 static char *gnome_syllable1[] =
3612 "Aar", "An", "Ar", "As", "C", "H", "Han", "Har", "Hel", "Iir", "J",
3613 "Jan", "Jar", "K", "L", "M", "Mar", "N", "Nik", "Os", "Ol", "P", "R",
3614 "S", "Sam", "San", "T", "Ter", "Tom", "Ul", "V", "W", "Y",
3617 static char *gnome_syllable2[] =
3619 "a", "aa", "ai", "e", "ei", "i", "o", "uo", "u", "uu",
3622 static char *gnome_syllable3[] =
3624 "ron", "re", "la", "ki", "kseli", "ksi", "ku", "ja", "ta", "na",
3625 "namari", "neli", "nika", "nikki", "nu", "nukka", "ka", "ko", "li",
3626 "kki", "rik", "po", "to", "pekka", "rjaana", "rjatta", "rjukka", "la",
3627 "lla", "lli", "mo", "nni",
3631 static char *hobbit_syllable1[] =
3633 "B", "Ber", "Br", "D", "Der", "Dr", "F", "Fr", "G", "H", "L", "Ler",
3634 "M", "Mer", "N", "P", "Pr", "Per", "R", "S", "T", "W",
3637 static char *hobbit_syllable2[] =
3639 "a", "e", "i", "ia", "o", "oi", "u",
3642 static char *hobbit_syllable3[] =
3644 "bo", "ck", "decan", "degar", "do", "doc", "go", "grin", "lba", "lbo",
3645 "lda", "ldo", "lla", "ll", "lo", "m", "mwise", "nac", "noc", "nwise",
3646 "p", "ppin", "pper", "tho", "to",
3650 static char *human_syllable1[] =
3652 "Ab", "Ac", "Ad", "Af", "Agr", "Ast", "As", "Al", "Adw", "Adr", "Ar",
3653 "B", "Br", "C", "Cr", "Ch", "Cad", "D", "Dr", "Dw", "Ed", "Eth", "Et",
3654 "Er", "El", "Eow", "F", "Fr", "G", "Gr", "Gw", "Gal", "Gl", "H", "Ha",
3655 "Ib", "Jer", "K", "Ka", "Ked", "L", "Loth", "Lar", "Leg", "M", "Mir",
3656 "N", "Nyd", "Ol", "Oc", "On", "P", "Pr", "R", "Rh", "S", "Sev", "T",
3657 "Tr", "Th", "V", "Y", "Z", "W", "Wic",
3660 static char *human_syllable2[] =
3662 "a", "ae", "au", "ao", "are", "ale", "ali", "ay", "ardo", "e", "ei",
3663 "ea", "eri", "era", "ela", "eli", "enda", "erra", "i", "ia", "ie",
3664 "ire", "ira", "ila", "ili", "ira", "igo", "o", "oa", "oi", "oe",
3668 static char *human_syllable3[] =
3670 "a", "and", "b", "bwyn", "baen", "bard", "c", "ctred", "cred", "ch",
3671 "can", "d", "dan", "don", "der", "dric", "dfrid", "dus", "f", "g",
3672 "gord", "gan", "l", "li", "lgrin", "lin", "lith", "lath", "loth", "ld",
3673 "ldric", "ldan", "m", "mas", "mos", "mar", "mond", "n", "nydd", "nidd",
3674 "nnon", "nwan", "nyth", "nad", "nn", "nnor", "nd", "p", "r", "ron",
3675 "rd", "s", "sh", "seth", "sean", "t", "th", "tha", "tlan", "trem",
3676 "tram", "v", "vudd", "w", "wan", "win", "wyn", "wyr", "wyr", "wyth",
3680 static char *orc_syllable1[] =
3682 "B", "Er", "G", "Gr", "H", "P", "Pr", "R", "V", "Vr", "T", "Tr", "M", "Dr",
3685 static char *orc_syllable2[] =
3687 "a", "i", "o", "oo", "u", "ui",
3690 static char *orc_syllable3[] =
3692 "dash", "dish", "dush", "gar", "gor", "gdush", "lo", "gdish", "k",
3693 "lg", "nak", "rag", "rbag", "rg", "rk", "ng", "nk", "rt", "ol", "urk",
3694 "shnak", "mog", "mak", "rak",
3699 * Random Name Generator
3700 * based on a Javascript by Michael Hensley
3701 * "http://geocities.com/timessquare/castle/6274/"
3703 void create_name(int type, char *name)
3708 /* Select the monster type */
3711 /* Create the monster name */
3713 strcpy(name, dwarf_syllable1[rand_int(sizeof(dwarf_syllable1) / sizeof(char*))]);
3714 strcat(name, dwarf_syllable2[rand_int(sizeof(dwarf_syllable2) / sizeof(char*))]);
3715 strcat(name, dwarf_syllable3[rand_int(sizeof(dwarf_syllable3) / sizeof(char*))]);
3718 strcpy(name, elf_syllable1[rand_int(sizeof(elf_syllable1) / sizeof(char*))]);
3719 strcat(name, elf_syllable2[rand_int(sizeof(elf_syllable2) / sizeof(char*))]);
3720 strcat(name, elf_syllable3[rand_int(sizeof(elf_syllable3) / sizeof(char*))]);
3723 strcpy(name, gnome_syllable1[rand_int(sizeof(gnome_syllable1) / sizeof(char*))]);
3724 strcat(name, gnome_syllable2[rand_int(sizeof(gnome_syllable2) / sizeof(char*))]);
3725 strcat(name, gnome_syllable3[rand_int(sizeof(gnome_syllable3) / sizeof(char*))]);
3728 strcpy(name, hobbit_syllable1[rand_int(sizeof(hobbit_syllable1) / sizeof(char*))]);
3729 strcat(name, hobbit_syllable2[rand_int(sizeof(hobbit_syllable2) / sizeof(char*))]);
3730 strcat(name, hobbit_syllable3[rand_int(sizeof(hobbit_syllable3) / sizeof(char*))]);
3733 strcpy(name, human_syllable1[rand_int(sizeof(human_syllable1) / sizeof(char*))]);
3734 strcat(name, human_syllable2[rand_int(sizeof(human_syllable2) / sizeof(char*))]);
3735 strcat(name, human_syllable3[rand_int(sizeof(human_syllable3) / sizeof(char*))]);
3738 strcpy(name, orc_syllable1[rand_int(sizeof(orc_syllable1) / sizeof(char*))]);
3739 strcat(name, orc_syllable2[rand_int(sizeof(orc_syllable2) / sizeof(char*))]);
3740 strcat(name, orc_syllable3[rand_int(sizeof(orc_syllable3) / sizeof(char*))]);
3742 /* Create an empty name */