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)
521 roff("¡¢Â¾¤Î¥â¥ó¥¹¥¿¡¼¤Ë²½¤±¤ë¡£");
539 roff(format("%^s¤Ï", wd_he[msex]));
541 roff(format("%^s ", wd_he[msex]));
551 if ((flags1 & RF1_RAND_50) || (flags1 & RF1_RAND_25))
554 if ((flags1 & RF1_RAND_50) && (flags1 & RF1_RAND_25))
563 else if (flags1 & RF1_RAND_50)
572 else if (flags1 & RF1_RAND_25)
586 roff(" erratically");
590 /* Hack -- Occasional conjunction */
592 if (speed != 110) roff("¡¢¤«¤Ä");
594 if (speed != 110) roff(", and");
603 if (speed > 139) c_roff(TERM_RED, "¿®¤¸Æñ¤¤¤Û¤É");
604 else if (speed > 134) c_roff(TERM_ORANGE, "ÌÔÎõ¤Ë");
605 else if (speed > 129) c_roff(TERM_ORANGE, "Èó¾ï¤Ë");
606 else if (speed > 124) c_roff(TERM_UMBER, "¤«¤Ê¤ê");
607 else if (speed < 120) c_roff(TERM_L_UMBER, "¤ä¤ä");
608 c_roff(TERM_L_RED, "ÁÇÁ᤯");
610 if (speed > 130) roff(" incredibly");
611 else if (speed > 120) roff(" very");
616 else if (speed < 110)
619 if (speed < 90) c_roff(TERM_L_GREEN, "¿®¤¸Æñ¤¤¤Û¤É");
620 else if (speed < 95) c_roff(TERM_BLUE, "Èó¾ï¤Ë");
621 else if (speed < 100) c_roff(TERM_BLUE, "¤«¤Ê¤ê");
622 else if (speed > 104) c_roff(TERM_GREEN, "¤ä¤ä");
623 c_roff(TERM_L_BLUE, "¤æ¤Ã¤¯¤ê¤È");
625 if (speed < 90) roff(" incredibly");
626 else if (speed < 100) roff(" very");
634 roff("ÉáÄ̤ή¤µ¤Ç");
636 roff(" at normal speed");
645 /* The code above includes "attack speed" */
646 if (flags1 & RF1_NEVER_MOVE)
661 roff(format("%^s¤Ï", wd_he[msex]));
663 roff(format("%^s ", wd_he[msex]));
671 roff("¿¯Æþ¼Ô¤òÄÉÀפ·¤Ê¤¤");
673 roff("does not deign to chase intruders");
678 /* End this sentence */
691 /* Describe experience if known */
692 if (r_ptr->r_tkills || cheat_know)
698 if (flags1 & RF1_UNIQUE)
700 roff("Killing this");
704 roff("A kill of this");
709 /* Describe the "quality" */
711 if (flags2 & RF2_ELDRITCH_HORROR) c_roff(TERM_VIOLET, "¶¸µ¤¤òͶ¤¦");/*nuke me*/
713 if (flags2 & RF2_ELDRITCH_HORROR) roff(" sanity-blasting");
717 if (flags3 & RF3_ANIMAL) c_roff(TERM_L_GREEN, "¼«Á³³¦¤Î");
719 if (flags3 & RF3_ANIMAL) roff(" natural");
723 if (flags3 & RF3_EVIL) c_roff(TERM_L_DARK, "¼Ù°¤Ê¤ë");
725 if (flags3 & RF3_EVIL) roff(" evil");
729 if (flags3 & RF3_GOOD) c_roff(TERM_YELLOW, "Á±ÎɤÊ");
731 if (flags3 & RF3_GOOD) roff(" good");
735 if (flags3 & RF3_UNDEAD) c_roff(TERM_VIOLET, "¥¢¥ó¥Ç¥Ã¥É¤Î");
737 if (flags3 & RF3_UNDEAD) roff(" undead");
741 if ((flags3 & (RF3_DRAGON | RF3_DEMON | RF3_GIANT | RF3_TROLL | RF3_ORC | RF3_AMBERITE)) || (flags2 & RF2_QUANTUM))
743 /* Describe the "race" */
745 if (flags3 & RF3_DRAGON) c_roff(TERM_ORANGE, "¥É¥é¥´¥ó");
747 if (flags3 & RF3_DRAGON) roff(" dragon");
751 if (flags3 & RF3_DEMON) c_roff(TERM_VIOLET, "¥Ç¡¼¥â¥ó");
753 if (flags3 & RF3_DEMON) roff(" demon");
757 if (flags3 & RF3_GIANT) c_roff(TERM_L_UMBER, "¥¸¥ã¥¤¥¢¥ó¥È");
759 if (flags3 & RF3_GIANT) roff(" giant");
763 if (flags3 & RF3_TROLL) c_roff(TERM_BLUE, "¥È¥í¥ë");
765 if (flags3 & RF3_TROLL) roff(" troll");
769 if (flags3 & RF3_ORC) c_roff(TERM_UMBER, "¥ª¡¼¥¯");
771 if (flags3 & RF3_ORC) roff(" orc");
775 if (flags3 & RF3_AMBERITE) c_roff(TERM_L_WHITE, "¥¢¥ó¥Ð¡¼¤Î²¦Â²");
777 if (flags3 & RF3_AMBERITE) roff(" Amberite");
781 if (flags2 & RF2_QUANTUM) c_roff(TERM_VIOLET, "ÎÌ»ÒÀ¸Êª");
783 if (flags2 & RF2_QUANTUM) roff(" quantum creature");
788 else roff("¥â¥ó¥¹¥¿¡¼");
790 else roff(" creature");
795 roff("¤òÅݤ¹¤³¤È¤Ï");
797 /* Group some variables */
804 roff(format(" %lu ¥ì¥Ù¥ë¤Î¥¥ã¥é¥¯¥¿¤Ë¤È¤Ã¤Æ", (long)i));
806 i = (long)r_ptr->mexp * r_ptr->level / (p_ptr->max_plv+2);
807 j = ((((long)r_ptr->mexp * r_ptr->level % (p_ptr->max_plv+2)) *
808 (long)1000 / (p_ptr->max_plv+2) + 5) / 10);
810 roff(format(" Ìó%ld.%02ld ¥Ý¥¤¥ó¥È¤Î·Ð¸³¤È¤Ê¤ë¡£",
813 /* calculate the integer exp part */
814 i = (long)r_ptr->mexp * r_ptr->level / (p_ptr->max_plv+2);
816 /* calculate the fractional exp part scaled by 100, */
817 /* must use long arithmetic to avoid overflow */
818 j = ((((long)r_ptr->mexp * r_ptr->level % (p_ptr->max_plv+2)) *
819 (long)1000 / (p_ptr->max_plv+2) + 5) / 10);
821 /* Mention the experience */
822 roff(format(" is worth %s%ld.%02ld point%s",
823 (r_ptr->flags1 & RF1_UNIQUE) ? "" : "about ",
825 (((i == 1) && (j == 0)) ? "" : "s")));
827 /* Take account of annoying English */
830 if ((p_ptr->lev / 10) == 1) /* nothing */;
831 else if (i == 1) p = "st";
832 else if (i == 2) p = "nd";
833 else if (i == 3) p = "rd";
835 /* Take account of "leading vowels" in numbers */
838 if ((i == 8) || (i == 11) || (i == 18)) q = "n";
840 /* Mention the dependance on the player's level */
841 roff(format(" for a%s %lu%s level character. ",
848 if ((flags2 & RF2_AURA_FIRE) && (flags2 & RF2_AURA_ELEC) && (flags3 & RF3_AURA_COLD))
851 c_roff(TERM_VIOLET, format("%^s¤Ï±ê¤Èɹ¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
853 roff(format("%^s is surrounded by flames and electricity. ", wd_he[msex]));
857 else if ((flags2 & RF2_AURA_FIRE) && (flags2 & RF2_AURA_ELEC))
860 c_roff(TERM_L_RED, format("%^s¤Ï±ê¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
862 roff(format("%^s is surrounded by flames and electricity. ", wd_he[msex]));
866 else if ((flags2 & RF2_AURA_FIRE) && (flags3 & RF3_AURA_COLD))
869 c_roff(TERM_BLUE, format("%^s¤Ï±ê¤Èɹ¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
871 roff(format("%^s is surrounded by flames and electricity. ", wd_he[msex]));
875 else if ((flags3 & RF3_AURA_COLD) && (flags2 & RF2_AURA_ELEC))
878 c_roff(TERM_L_GREEN, format("%^s¤Ïɹ¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
880 roff(format("%^s is surrounded by ice and electricity. ", wd_he[msex]));
884 else if (flags2 & RF2_AURA_FIRE)
887 c_roff(TERM_RED, format("%^s¤Ï±ê¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
889 roff(format("%^s is surrounded by flames. ", wd_he[msex]));
893 else if (flags3 & RF3_AURA_COLD)
896 c_roff(TERM_BLUE, format("%^s¤Ïɹ¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
898 roff(format("%^s is surrounded by ice. ", wd_he[msex]));
902 else if (flags2 & RF2_AURA_ELEC)
905 c_roff(TERM_L_BLUE, format("%^s¤Ï¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
907 roff(format("%^s is surrounded by electricity. ", wd_he[msex]));
912 if (flags2 & RF2_REFLECTING)
915 roff(format("%^s¤ÏÌð¤Î¼öʸ¤òÄ·¤ÍÊÖ¤¹¡£", wd_he[msex]));
917 roff(format("%^s reflects bolt spells. ", wd_he[msex]));
922 /* Describe escorts */
923 if ((flags1 & RF1_ESCORT) || (flags1 & RF1_ESCORTS))
926 roff(format("%^s¤ÏÄ̾ï¸î±Ò¤òȼ¤Ã¤Æ¸½¤ì¤ë¡£",
928 roff(format("%^s usually appears with escorts. ",
934 /* Describe friends */
935 else if ((flags1 & RF1_FRIEND) || (flags1 & RF1_FRIENDS))
938 roff(format("%^s¤ÏÄ̾クÃĤǸ½¤ì¤ë¡£",
940 roff(format("%^s usually appears in groups. ",
947 /* Collect inate attacks */
950 if (flags4 & RF4_SHRIEK) {vp[vn] = "ÈáÌĤǽõ¤±¤òµá¤á¤ë";color[vn++] = TERM_L_WHITE;}
952 if (flags4 & RF4_SHRIEK) {vp[vn] = "shriek for help";color[vn++] = TERM_L_WHITE;}
956 if (flags4 & RF4_ROCKET) {vp[vn] = "¥í¥±¥Ã¥È¤òȯ¼Í¤¹¤ë";color[vn++] = TERM_UMBER;}
958 if (flags4 & RF4_ROCKET) {vp[vn] = "shoot a rocket";color[vn++] = TERM_UMBER;}
962 if (flags4 & RF4_ARROW_1) {vp[vn] = "Ìð¤ò·â¤Ä";color[vn++] = TERM_L_UMBER;}
964 if (flags4 & RF4_ARROW_1) {vp[vn] = "fire an arrow";color[vn++] = TERM_L_UMBER;}
968 if (flags4 & RF4_ARROW_2) {vp[vn] = "¶¯ÎϤÊÌð¤ò·â¤Ä";color[vn++] = TERM_L_UMBER;}
970 if (flags4 & RF4_ARROW_2) {vp[vn] = "fire arrows";color[vn++] = TERM_L_UMBER;}
974 if (flags4 & RF4_ARROW_3) {vp[vn] = "¼Í·â¤ò¤¹¤ë";color[vn++] = TERM_UMBER;}
976 if (flags4 & RF4_ARROW_3) {vp[vn] = "fire a missile";color[vn++] = TERM_UMBER;}
980 if (flags4 & RF4_ARROW_4) {vp[vn] = "¶¯ÎϤʼͷâ¤ò¤¹¤ë";color[vn++] = TERM_UMBER;}
982 if (flags4 & RF4_ARROW_4) {vp[vn] = "fire missiles";color[vn++] = TERM_UMBER;}
986 if (flags6 & (RF6_SPECIAL)) {vp[vn] = "ÆÃÊ̤ʹÔÆ°¤ò¤¹¤ë";color[vn++] = TERM_VIOLET;}
988 if (flags6 & (RF6_SPECIAL)) {vp[vn] = "do something";color[vn++] = TERM_VIOLET;}
991 /* Describe inate attacks */
996 roff(format("%^s¤Ï", wd_he[msex]));
998 roff(format("%^s", wd_he[msex]));
1003 for (n = 0; n < vn; n++)
1007 jverb(vp[n],jverb_buf,JVERB_OR);
1008 c_roff(color[n], jverb_buf);
1009 c_roff(color[n], "¤ê¡¢");
1011 else c_roff(color[n], vp[n]);
1014 if (n == 0) roff(" may ");
1015 else if (n < vn-1) roff(", ");
1026 roff("¤³¤È¤¬¤¢¤ë¡£");
1034 /* Collect breaths */
1037 if (flags4 & (RF4_BR_ACID)) {vp[vn] = "»À";color[vn++] = TERM_GREEN;}
1039 if (flags4 & (RF4_BR_ACID)) {vp[vn] = "acid";color[vn++] = TERM_GREEN;}
1043 if (flags4 & (RF4_BR_ELEC)) {vp[vn] = "°ðºÊ";color[vn++] = TERM_BLUE;}
1045 if (flags4 & (RF4_BR_ELEC)) {vp[vn] = "lightning";color[vn++] = TERM_BLUE;}
1049 if (flags4 & (RF4_BR_FIRE)) {vp[vn] = "²Ð±ê";color[vn++] = TERM_RED;}
1051 if (flags4 & (RF4_BR_FIRE)) {vp[vn] = "fire";color[vn++] = TERM_RED;}
1055 if (flags4 & (RF4_BR_COLD)) {vp[vn] = "Î䵤";color[vn++] = TERM_L_WHITE;}
1057 if (flags4 & (RF4_BR_COLD)) {vp[vn] = "frost";color[vn++] = TERM_L_WHITE;}
1061 if (flags4 & (RF4_BR_POIS)) {vp[vn] = "ÆÇ";color[vn++] = TERM_L_GREEN;}
1063 if (flags4 & (RF4_BR_POIS)) {vp[vn] = "poison";color[vn++] = TERM_L_GREEN;}
1067 if (flags4 & (RF4_BR_NETH)) {vp[vn] = "ÃϹö";color[vn++] = TERM_L_DARK;}
1069 if (flags4 & (RF4_BR_NETH)) {vp[vn] = "nether";color[vn++] = TERM_L_DARK;}
1073 if (flags4 & (RF4_BR_LITE)) {vp[vn] = "Á®¸÷";color[vn++] = TERM_YELLOW;}
1075 if (flags4 & (RF4_BR_LITE)) {vp[vn] = "light";color[vn++] = TERM_YELLOW;}
1079 if (flags4 & (RF4_BR_DARK)) {vp[vn] = "°Å¹õ";color[vn++] = TERM_L_DARK;}
1081 if (flags4 & (RF4_BR_DARK)) {vp[vn] = "darkness";color[vn++] = TERM_L_DARK;}
1085 if (flags4 & (RF4_BR_CONF)) {vp[vn] = "º®Íð";color[vn++] = TERM_L_UMBER;}
1087 if (flags4 & (RF4_BR_CONF)) {vp[vn] = "confusion";color[vn++] = TERM_L_UMBER;}
1091 if (flags4 & (RF4_BR_SOUN)) {vp[vn] = "¹ì²»";color[vn++] = TERM_ORANGE;}
1093 if (flags4 & (RF4_BR_SOUN)) {vp[vn] = "sound";color[vn++] = TERM_ORANGE;}
1097 if (flags4 & (RF4_BR_CHAO)) {vp[vn] = "¥«¥ª¥¹";color[vn++] = TERM_VIOLET;}
1099 if (flags4 & (RF4_BR_CHAO)) {vp[vn] = "chaos";color[vn++] = TERM_VIOLET;}
1103 if (flags4 & (RF4_BR_DISE)) {vp[vn] = "Îô²½";color[vn++] = TERM_VIOLET;}
1105 if (flags4 & (RF4_BR_DISE)) {vp[vn] = "disenchantment";color[vn++] = TERM_VIOLET;}
1109 if (flags4 & (RF4_BR_NEXU)) {vp[vn] = "°ø²Ìº®Íð";color[vn++] = TERM_VIOLET;}
1111 if (flags4 & (RF4_BR_NEXU)) {vp[vn] = "nexus";color[vn++] = TERM_VIOLET;}
1115 if (flags4 & (RF4_BR_TIME)) {vp[vn] = "»þ´ÖµÕž";color[vn++] = TERM_L_BLUE;}
1117 if (flags4 & (RF4_BR_TIME)) {vp[vn] = "time";color[vn++] = TERM_L_BLUE;}
1121 if (flags4 & (RF4_BR_INER)) {vp[vn] = "ÃÙÆß";color[vn++] = TERM_SLATE;}
1123 if (flags4 & (RF4_BR_INER)) {vp[vn] = "inertia";color[vn++] = TERM_SLATE;}
1127 if (flags4 & (RF4_BR_GRAV)) {vp[vn] = "½ÅÎÏ";color[vn++] = TERM_SLATE;}
1129 if (flags4 & (RF4_BR_GRAV)) {vp[vn] = "gravity";color[vn++] = TERM_SLATE;}
1133 if (flags4 & (RF4_BR_SHAR)) {vp[vn] = "ÇËÊÒ";color[vn++] = TERM_L_UMBER;}
1135 if (flags4 & (RF4_BR_SHAR)) {vp[vn] = "shards";color[vn++] = TERM_L_UMBER;}
1139 if (flags4 & (RF4_BR_PLAS)) {vp[vn] = "¥×¥é¥º¥Þ";color[vn++] = TERM_L_RED;}
1141 if (flags4 & (RF4_BR_PLAS)) {vp[vn] = "plasma";color[vn++] = TERM_L_RED;}
1145 if (flags4 & (RF4_BR_WALL)) {vp[vn] = "¥Õ¥©¡¼¥¹";color[vn++] = TERM_UMBER;}
1147 if (flags4 & (RF4_BR_WALL)) {vp[vn] = "force";color[vn++] = TERM_UMBER;}
1151 if (flags4 & (RF4_BR_MANA)) {vp[vn] = "ËâÎÏ";color[vn++] = TERM_L_BLUE;}
1153 if (flags4 & (RF4_BR_MANA)) {vp[vn] = "mana";color[vn++] = TERM_L_BLUE;}
1157 if (flags4 & (RF4_BR_NUKE)) {vp[vn] = "Êü¼ÍÀÇÑ´þʪ";color[vn++] = TERM_L_GREEN;}
1159 if (flags4 & (RF4_BR_NUKE)) {vp[vn] = "toxic waste";color[vn++] = TERM_L_GREEN;}
1163 if (flags4 & (RF4_BR_DISI)) {vp[vn] = "ʬ²ò";color[vn++] = TERM_SLATE;}
1165 if (flags4 & (RF4_BR_DISI)) {vp[vn] = "disintegration";color[vn++] = TERM_SLATE;}
1169 /* Describe breaths */
1177 roff(format("%^s¤Ï", wd_he[msex]));
1179 roff(format("%^s", wd_he[msex]));
1184 for (n = 0; n < vn; n++)
1188 if ( n != 0 ) roff("¤ä");
1190 if (n == 0) roff(" may breathe ");
1191 else if (n < vn-1) roff(", ");
1197 c_roff(color[n], vp[n]);
1200 roff("¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤¬¤¢¤ë");
1205 /* Collect spells */
1208 if (flags5 & (RF5_BA_ACID)) {vp[vn] = "¥¢¥·¥Ã¥É¡¦¥Ü¡¼¥ë";color[vn++] = TERM_GREEN;}
1210 if (flags5 & (RF5_BA_ACID)) {vp[vn] = "produce acid balls";color[vn++] = TERM_GREEN;}
1214 if (flags5 & (RF5_BA_ELEC)) {vp[vn] = "¥µ¥ó¥À¡¼¡¦¥Ü¡¼¥ë";color[vn++] = TERM_BLUE;}
1216 if (flags5 & (RF5_BA_ELEC)) {vp[vn] = "produce lightning balls";color[vn++] = TERM_BLUE;}
1220 if (flags5 & (RF5_BA_FIRE)) {vp[vn] = "¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë";color[vn++] = TERM_RED;}
1222 if (flags5 & (RF5_BA_FIRE)) {vp[vn] = "produce fire balls";color[vn++] = TERM_RED;}
1226 if (flags5 & (RF5_BA_COLD)) {vp[vn] = "¥¢¥¤¥¹¡¦¥Ü¡¼¥ë";color[vn++] = TERM_L_WHITE;}
1228 if (flags5 & (RF5_BA_COLD)) {vp[vn] = "produce frost balls";color[vn++] = TERM_L_WHITE;}
1232 if (flags5 & (RF5_BA_POIS)) {vp[vn] = "°½±À";color[vn++] = TERM_L_GREEN;}
1234 if (flags5 & (RF5_BA_POIS)) {vp[vn] = "produce poison balls";color[vn++] = TERM_L_GREEN;}
1238 if (flags5 & (RF5_BA_NETH)) {vp[vn] = "ÃϹöµå";color[vn++] = TERM_L_DARK;}
1240 if (flags5 & (RF5_BA_NETH)) {vp[vn] = "produce nether balls";color[vn++] = TERM_L_DARK;}
1244 if (flags5 & (RF5_BA_WATE)) {vp[vn] = "¥¦¥©¡¼¥¿¡¼¡¦¥Ü¡¼¥ë";color[vn++] = TERM_BLUE;}
1246 if (flags5 & (RF5_BA_WATE)) {vp[vn] = "produce water balls";color[vn++] = TERM_BLUE;}
1250 if (flags4 & (RF4_BA_NUKE)) {vp[vn] = "Êü¼Íǽµå";color[vn++] = TERM_L_GREEN;}
1252 if (flags4 & (RF4_BA_NUKE)) {vp[vn] = "produce balls of radiation";color[vn++] = TERM_L_GREEN;}
1256 if (flags5 & (RF5_BA_MANA)) {vp[vn] = "ËâÎϤÎÍò";color[vn++] = TERM_L_BLUE;}
1258 if (flags5 & (RF5_BA_MANA)) {vp[vn] = "invoke mana storms";color[vn++] = TERM_L_BLUE;}
1262 if (flags5 & (RF5_BA_DARK)) {vp[vn] = "°Å¹õ¤ÎÍò";color[vn++] = TERM_L_DARK;}
1264 if (flags5 & (RF5_BA_DARK)) {vp[vn] = "invoke darkness storms";color[vn++] = TERM_L_DARK;}
1268 if (flags5 & (RF5_BA_LITE)) {vp[vn] = "¥¹¥¿¡¼¥Ð¡¼¥¹¥È";color[vn++] = TERM_YELLOW;}
1270 if (flags4 & (RF5_BA_LITE)) {vp[vn] = "invoke starburst";color[vn++] = TERM_YELLOW;}
1274 if (flags4 & (RF4_BA_CHAO)) {vp[vn] = "½ã¥í¥°¥ë¥¹";color[vn++] = TERM_VIOLET;}
1276 if (flags4 & (RF4_BA_CHAO)) {vp[vn] = "invoke raw Logrus";color[vn++] = TERM_VIOLET;}
1280 if (flags6 & (RF6_HAND_DOOM)) {vp[vn] = "ÇËÌǤμê";color[vn++] = TERM_VIOLET;}
1282 if (flags6 & (RF6_HAND_DOOM)) {vp[vn] = "invoke the Hand of Doom";color[vn++] = TERM_VIOLET;}
1286 if (flags6 & (RF6_PSY_SPEAR)) {vp[vn] = "¸÷¤Î·õ";color[vn++] = TERM_YELLOW;}
1288 if (flags6 & (RF6_PSY_SPEAR)) {vp[vn] = "psycho-spear";color[vn++] = TERM_YELLOW;}
1292 if (flags5 & (RF5_DRAIN_MANA)) {vp[vn] = "ËâÎϵۼý";color[vn++] = TERM_SLATE;}
1294 if (flags5 & (RF5_DRAIN_MANA)) {vp[vn] = "drain mana";color[vn++] = TERM_SLATE;}
1298 if (flags5 & (RF5_MIND_BLAST)) {vp[vn] = "Àº¿À¹¶·â";color[vn++] = TERM_L_RED;}
1300 if (flags5 & (RF5_MIND_BLAST)) {vp[vn] = "cause mind blasting";color[vn++] = TERM_L_RED;}
1304 if (flags5 & (RF5_BRAIN_SMASH)) {vp[vn] = "Ǿ¹¶·â";color[vn++] = TERM_RED;}
1306 if (flags5 & (RF5_BRAIN_SMASH)) {vp[vn] = "cause brain smashing";color[vn++] = TERM_RED;}
1310 if (flags5 & (RF5_CAUSE_1)) {vp[vn] = "·Ú½ý¡Ü¼ö¤¤";color[vn++] = TERM_L_WHITE;}
1312 if (flags5 & (RF5_CAUSE_1)) {vp[vn] = "cause light wounds and cursing";color[vn++] = TERM_L_WHITE;}
1316 if (flags5 & (RF5_CAUSE_2)) {vp[vn] = "½Å½ý¡Ü¼ö¤¤";color[vn++] = TERM_L_WHITE;}
1318 if (flags5 & (RF5_CAUSE_2)) {vp[vn] = "cause serious wounds and cursing";color[vn++] = TERM_L_WHITE;}
1322 if (flags5 & (RF5_CAUSE_3)) {vp[vn] = "Ã×Ì¿½ý¡Ü¼ö¤¤";color[vn++] = TERM_L_WHITE;}
1324 if (flags5 & (RF5_CAUSE_3)) {vp[vn] = "cause critical wounds and cursing";color[vn++] = TERM_L_WHITE;}
1328 if (flags5 & (RF5_CAUSE_4)) {vp[vn] = "È빦¤òÆͤ¯";color[vn++] = TERM_L_WHITE;}
1330 if (flags5 & (RF5_CAUSE_4)) {vp[vn] = "cause mortal wounds";color[vn++] = TERM_L_WHITE;}
1334 if (flags5 & (RF5_BO_ACID)) {vp[vn] = "¥¢¥·¥Ã¥É¡¦¥Ü¥ë¥È";color[vn++] = TERM_GREEN;}
1336 if (flags5 & (RF5_BO_ACID)) {vp[vn] = "produce acid bolts";color[vn++] = TERM_GREEN;}
1340 if (flags5 & (RF5_BO_ELEC)) {vp[vn] = "¥µ¥ó¥À¡¼¡¦¥Ü¥ë¥È";color[vn++] = TERM_BLUE;}
1342 if (flags5 & (RF5_BO_ELEC)) {vp[vn] = "produce lightning bolts";color[vn++] = TERM_BLUE;}
1346 if (flags5 & (RF5_BO_FIRE)) {vp[vn] = "¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È";color[vn++] = TERM_RED;}
1348 if (flags5 & (RF5_BO_FIRE)) {vp[vn] = "produce fire bolts";color[vn++] = TERM_RED;}
1352 if (flags5 & (RF5_BO_COLD)) {vp[vn] = "¥¢¥¤¥¹¡¦¥Ü¥ë¥È";color[vn++] = TERM_L_WHITE;}
1354 if (flags5 & (RF5_BO_COLD)) {vp[vn] = "produce frost bolts";color[vn++] = TERM_L_WHITE;}
1358 if (flags5 & (RF5_BO_NETH)) {vp[vn] = "ÃϹö¤ÎÌð";color[vn++] = TERM_L_DARK;}
1360 if (flags5 & (RF5_BO_NETH)) {vp[vn] = "produce nether bolts";color[vn++] = TERM_L_DARK;}
1364 if (flags5 & (RF5_BO_WATE)) {vp[vn] = "¥¦¥©¡¼¥¿¡¼¡¦¥Ü¥ë¥È";color[vn++] = TERM_BLUE;}
1366 if (flags5 & (RF5_BO_WATE)) {vp[vn] = "produce water bolts";color[vn++] = TERM_BLUE;}
1370 if (flags5 & (RF5_BO_MANA)) {vp[vn] = "ËâÎϤÎÌð";color[vn++] = TERM_L_BLUE;}
1372 if (flags5 & (RF5_BO_MANA)) {vp[vn] = "produce mana bolts";color[vn++] = TERM_L_BLUE;}
1376 if (flags5 & (RF5_BO_PLAS)) {vp[vn] = "¥×¥é¥º¥Þ¡¦¥Ü¥ë¥È";color[vn++] = TERM_L_RED;}
1378 if (flags5 & (RF5_BO_PLAS)) {vp[vn] = "produce plasma bolts";color[vn++] = TERM_L_RED;}
1382 if (flags5 & (RF5_BO_ICEE)) {vp[vn] = "¶Ë´¨¤ÎÌð";color[vn++] = TERM_WHITE;}
1384 if (flags5 & (RF5_BO_ICEE)) {vp[vn] = "produce ice bolts";color[vn++] = TERM_WHITE;}
1388 if (flags5 & (RF5_MISSILE)) {vp[vn] = "¥Þ¥¸¥Ã¥¯¥ß¥µ¥¤¥ë";color[vn++] = TERM_SLATE;}
1390 if (flags5 & (RF5_MISSILE)) {vp[vn] = "produce magic missiles";color[vn++] = TERM_SLATE;}
1394 if (flags5 & (RF5_SCARE)) {vp[vn] = "¶²ÉÝ";color[vn++] = TERM_SLATE;}
1396 if (flags5 & (RF5_SCARE)) {vp[vn] = "terrify";color[vn++] = TERM_SLATE;}
1400 if (flags5 & (RF5_BLIND)) {vp[vn] = "Ìܤ¯¤é¤Þ¤·";color[vn++] = TERM_L_DARK;}
1402 if (flags5 & (RF5_BLIND)) {vp[vn] = "blind";color[vn++] = TERM_L_DARK;}
1406 if (flags5 & (RF5_CONF)) {vp[vn] = "º®Íð";color[vn++] = TERM_L_UMBER;}
1408 if (flags5 & (RF5_CONF)) {vp[vn] = "confuse";color[vn++] = TERM_L_UMBER;}
1412 if (flags5 & (RF5_SLOW)) {vp[vn] = "¸ºÂ®";color[vn++] = TERM_UMBER;}
1414 if (flags5 & (RF5_SLOW)) {vp[vn] = "slow";color[vn++] = TERM_UMBER;}
1418 if (flags5 & (RF5_HOLD)) {vp[vn] = "Ëãáã";color[vn++] = TERM_RED;}
1420 if (flags5 & (RF5_HOLD)) {vp[vn] = "paralyze";color[vn++] = TERM_RED;}
1424 if (flags6 & (RF6_HASTE)) {vp[vn] = "²Ã®";color[vn++] = TERM_L_GREEN;}
1426 if (flags6 & (RF6_HASTE)) {vp[vn] = "haste-self";color[vn++] = TERM_L_GREEN;}
1430 if (flags6 & (RF6_HEAL)) {vp[vn] = "¼£Ìþ";color[vn++] = TERM_WHITE;}
1432 if (flags6 & (RF6_HEAL)) {vp[vn] = "heal-self";color[vn++] = TERM_WHITE;}
1436 if (flags6 & (RF6_INVULNER)) {vp[vn] = "̵Ũ²½";color[vn++] = TERM_WHITE;}
1438 if (flags6 & (RF6_INVULNER)) {vp[vn] = "make invulnerable";color[vn++] = TERM_WHITE;}
1442 if (flags4 & RF4_DISPEL) {vp[vn] = "ËâÎϾõî";color[vn++] = TERM_L_WHITE;}
1444 if (flags4 & RF4_DISPEL) {vp[vn] = "dispel-magic";color[vn++] = TERM_L_WHITE;}
1448 if (flags6 & (RF6_BLINK)) {vp[vn] = "¥·¥ç¡¼¥È¥Æ¥ì¥Ý¡¼¥È";color[vn++] = TERM_UMBER;}
1450 if (flags6 & (RF6_BLINK)) {vp[vn] = "blink-self";color[vn++] = TERM_UMBER;}
1454 if (flags6 & (RF6_TPORT)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È";color[vn++] = TERM_ORANGE;}
1456 if (flags6 & (RF6_TPORT)) {vp[vn] = "teleport-self";color[vn++] = TERM_ORANGE;}
1460 if (flags6 & (RF6_WORLD)) {vp[vn] = "»þ¤ò»ß¤á¤ë";color[vn++] = TERM_L_BLUE;}
1462 if (flags6 & (RF6_WORLD)) {vp[vn] = "stop the time";color[vn++] = TERM_L_BLUE;}
1466 if (flags6 & (RF6_TELE_TO)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È¥Ð¥Ã¥¯";color[vn++] = TERM_L_UMBER;}
1468 if (flags6 & (RF6_TELE_TO)) {vp[vn] = "teleport to";color[vn++] = TERM_L_UMBER;}
1472 if (flags6 & (RF6_TELE_AWAY)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È¥¢¥¦¥§¥¤";color[vn++] = TERM_UMBER;}
1474 if (flags6 & (RF6_TELE_AWAY)) {vp[vn] = "teleport away";color[vn++] = TERM_UMBER;}
1478 if (flags6 & (RF6_TELE_LEVEL)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È¡¦¥ì¥Ù¥ë";color[vn++] = TERM_ORANGE;}
1480 if (flags6 & (RF6_TELE_LEVEL)) {vp[vn] = "teleport level";color[vn++] = TERM_ORANGE;}
1484 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;}}
1486 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;}
1490 if (flags6 & (RF6_TRAPS)) {vp[vn] = "¥È¥é¥Ã¥×";color[vn++] = TERM_BLUE;}
1492 if (flags6 & (RF6_TRAPS)) {vp[vn] = "create traps";color[vn++] = TERM_BLUE;}
1496 if (flags6 & (RF6_FORGET)) {vp[vn] = "µ²±¾Ãµî";color[vn++] = TERM_BLUE;}
1498 if (flags6 & (RF6_FORGET)) {vp[vn] = "cause amnesia";color[vn++] = TERM_BLUE;}
1502 if (flags6 & (RF6_RAISE_DEAD)) {vp[vn] = "»à¼ÔÉü³è";color[vn++] = TERM_RED;}
1504 if (flags6 & (RF6_RAISE_DEAD)) {vp[vn] = "raise dead";color[vn++] = TERM_RED;}
1508 if (flags6 & (RF6_S_MONSTER)) {vp[vn] = "¥â¥ó¥¹¥¿¡¼°ìÂξ¤´";color[vn++] = TERM_SLATE;}
1510 if (flags6 & (RF6_S_MONSTER)) {vp[vn] = "summon a monster";color[vn++] = TERM_SLATE;}
1514 if (flags6 & (RF6_S_MONSTERS)) {vp[vn] = "¥â¥ó¥¹¥¿¡¼Ê£¿ô¾¤´";color[vn++] = TERM_L_WHITE;}
1516 if (flags6 & (RF6_S_MONSTERS)) {vp[vn] = "summon monsters";color[vn++] = TERM_L_WHITE;}
1520 if (flags6 & (RF6_S_KIN)) {vp[vn] = "µß±ç¾¤´";color[vn++] = TERM_ORANGE;}
1522 if (flags6 & (RF6_S_KIN)) {vp[vn] = "summon aid";color[vn++] = TERM_ORANGE;}
1526 if (flags6 & (RF6_S_ANT)) {vp[vn] = "¥¢¥ê¾¤´";color[vn++] = TERM_RED;}
1528 if (flags6 & (RF6_S_ANT)) {vp[vn] = "summon ants";color[vn++] = TERM_RED;}
1532 if (flags6 & (RF6_S_SPIDER)) {vp[vn] = "¥¯¥â¾¤´";color[vn++] = TERM_L_DARK;}
1534 if (flags6 & (RF6_S_SPIDER)) {vp[vn] = "summon spiders";color[vn++] = TERM_L_DARK;}
1538 if (flags6 & (RF6_S_HOUND)) {vp[vn] = "¥Ï¥¦¥ó¥É¾¤´";color[vn++] = TERM_L_UMBER;}
1540 if (flags6 & (RF6_S_HOUND)) {vp[vn] = "summon hounds";color[vn++] = TERM_L_UMBER;}
1544 if (flags6 & (RF6_S_HYDRA)) {vp[vn] = "¥Ò¥É¥é¾¤´";color[vn++] = TERM_L_GREEN;}
1546 if (flags6 & (RF6_S_HYDRA)) {vp[vn] = "summon hydras";color[vn++] = TERM_L_GREEN;}
1550 if (flags6 & (RF6_S_ANGEL)) {vp[vn] = "Å·»È°ìÂξ¤´";color[vn++] = TERM_YELLOW;}
1552 if (flags6 & (RF6_S_ANGEL)) {vp[vn] = "summon an angel";color[vn++] = TERM_YELLOW;}
1556 if (flags6 & (RF6_S_DEMON)) {vp[vn] = "¥Ç¡¼¥â¥ó°ìÂξ¤´";color[vn++] = TERM_L_RED;}
1558 if (flags6 & (RF6_S_DEMON)) {vp[vn] = "summon a demon";color[vn++] = TERM_L_RED;}
1562 if (flags6 & (RF6_S_UNDEAD)) {vp[vn] = "¥¢¥ó¥Ç¥Ã¥É°ìÂξ¤´";color[vn++] = TERM_L_DARK;}
1564 if (flags6 & (RF6_S_UNDEAD)) {vp[vn] = "summon an undead";color[vn++] = TERM_L_DARK;}
1568 if (flags6 & (RF6_S_DRAGON)) {vp[vn] = "¥É¥é¥´¥ó°ìÂξ¤´";color[vn++] = TERM_ORANGE;}
1570 if (flags6 & (RF6_S_DRAGON)) {vp[vn] = "summon a dragon";color[vn++] = TERM_ORANGE;}
1574 if (flags6 & (RF6_S_HI_UNDEAD)) {vp[vn] = "¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¾¤´";color[vn++] = TERM_L_DARK;}
1576 if (flags6 & (RF6_S_HI_UNDEAD)) {vp[vn] = "summon Greater Undead";color[vn++] = TERM_L_DARK;}
1580 if (flags6 & (RF6_S_HI_DRAGON)) {vp[vn] = "¸ÅÂå¥É¥é¥´¥ó¾¤´";color[vn++] = TERM_ORANGE;}
1582 if (flags6 & (RF6_S_HI_DRAGON)) {vp[vn] = "summon Ancient Dragons";color[vn++] = TERM_ORANGE;}
1586 if (flags6 & (RF6_S_CYBER)) {vp[vn] = "¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¾¤´";color[vn++] = TERM_UMBER;}
1588 if (flags6 & (RF6_S_CYBER)) {vp[vn] = "summon Cyberdemons";color[vn++] = TERM_UMBER;}
1592 if (flags6 & (RF6_S_AMBERITES)) {vp[vn] = "¥¢¥ó¥Ð¡¼¤Î²¦¾¤´";color[vn++] = TERM_VIOLET;}
1594 if (flags6 & (RF6_S_AMBERITES)) {vp[vn] = "summon Lords of Amber";color[vn++] = TERM_VIOLET;}
1598 if (flags6 & (RF6_S_UNIQUE)) {vp[vn] = "¥æ¥Ë¡¼¥¯¡¦¥â¥ó¥¹¥¿¡¼¾¤´";color[vn++] = TERM_VIOLET;}
1600 if (flags6 & (RF6_S_UNIQUE)) {vp[vn] = "summon Unique Monsters";color[vn++] = TERM_VIOLET;}
1604 /* Describe spells */
1616 roff(", and is also");
1623 roff(format("%^s¤Ï", wd_he[msex]));
1625 roff(format("%^s is", wd_he[msex]));
1632 if (flags2 & (RF2_SMART)) c_roff(TERM_YELLOW, "Ū³Î¤Ë");
1635 roff("ËâË¡¤ò»È¤¦¤³¤È¤¬¤Ç¤¡¢");
1638 roff(" magical, casting spells");
1641 if (flags2 & RF2_SMART) roff(" intelligently");
1646 for (n = 0; n < vn; n++)
1650 if ( n != 0 ) roff("¡¢");
1652 if (n == 0) roff(" which ");
1653 else if (n < vn-1) roff(", ");
1659 c_roff(color[n], vp[n]);
1662 roff("¤Î¼öʸ¤ò¾§¤¨¤ë¤³¤È¤¬¤¢¤ë");
1667 /* End the sentence about inate/other spells */
1668 if (breath || magic)
1671 m = r_ptr->r_cast_inate + r_ptr->r_cast_spell;
1673 /* Average frequency */
1674 n = (r_ptr->freq_inate + r_ptr->freq_spell) / 2;
1676 /* Describe the spell frequency */
1680 roff(format("(³ÎΨ:1/%d)", 100 / n));
1682 roff(format("; 1 time in %d", 100 / n));
1687 /* Guess at the frequency */
1690 n = ((n + 9) / 10) * 10;
1692 roff(format("(³ÎΨ:Ìó1/%d)", 100 / n));
1694 roff(format("; about 1 time in %d", 100 / n));
1699 /* End this sentence */
1708 /* Describe monster "toughness" */
1709 if (know_armour(r_idx))
1713 roff(format("%^s¤Ï AC%d ¤ÎËɸæÎϤÈ",
1715 roff(format("%^s has an armor rating of %d",
1718 wd_he[msex], r_ptr->ac));
1720 /* Maximized hitpoints */
1721 if (flags1 & RF1_FORCE_MAXHP)
1724 roff(format(" %d ¤ÎÂÎÎϤ¬¤¢¤ë¡£",
1726 roff(format(" and a life rating of %d. ",
1729 r_ptr->hdice * r_ptr->hside));
1732 /* Variable hitpoints */
1736 roff(format(" %dd%d ¤ÎÂÎÎϤ¬¤¢¤ë¡£",
1738 roff(format(" and a life rating of %dd%d. ",
1741 r_ptr->hdice, r_ptr->hside));
1747 /* Collect special abilities. */
1750 if (flags7 & (RF7_HAS_LITE_1 | RF7_HAS_LITE_2)) vp[vn++] = "¥À¥ó¥¸¥ç¥ó¤ò¾È¤é¤¹";
1752 if (flags7 & (RF7_HAS_LITE_1 | RF7_HAS_LITE_2)) vp[vn++] = "illuminate the dungeon";
1756 if (flags2 & RF2_OPEN_DOOR) vp[vn++] = "¥É¥¢¤ò³«¤±¤ë";
1758 if (flags2 & RF2_OPEN_DOOR) vp[vn++] = "open doors";
1762 if (flags2 & RF2_BASH_DOOR) vp[vn++] = "¥É¥¢¤òÂǤÁÇˤë";
1764 if (flags2 & RF2_BASH_DOOR) vp[vn++] = "bash down doors";
1768 if (flags2 & RF2_PASS_WALL) vp[vn++] = "Êɤò¤¹¤êÈ´¤±¤ë";
1770 if (flags2 & RF2_PASS_WALL) vp[vn++] = "pass through walls";
1774 if (flags2 & RF2_KILL_WALL) vp[vn++] = "Êɤò·¡¤ê¿Ê¤à";
1776 if (flags2 & RF2_KILL_WALL) vp[vn++] = "bore through walls";
1780 if (flags2 & RF2_MOVE_BODY) vp[vn++] = "¼å¤¤¥â¥ó¥¹¥¿¡¼¤ò²¡¤·¤Î¤±¤ë";
1782 if (flags2 & RF2_MOVE_BODY) vp[vn++] = "push past weaker monsters";
1786 if (flags2 & RF2_KILL_BODY) vp[vn++] = "¼å¤¤¥â¥ó¥¹¥¿¡¼¤òÅݤ¹";
1788 if (flags2 & RF2_KILL_BODY) vp[vn++] = "destroy weaker monsters";
1792 if (flags2 & RF2_TAKE_ITEM) vp[vn++] = "¥¢¥¤¥Æ¥à¤ò½¦¤¦";
1794 if (flags2 & RF2_TAKE_ITEM) vp[vn++] = "pick up objects";
1798 if (flags2 & RF2_KILL_ITEM) vp[vn++] = "¥¢¥¤¥Æ¥à¤ò²õ¤¹";
1800 if (flags2 & RF2_KILL_ITEM) vp[vn++] = "destroy objects";
1804 /* Describe special abilities. */
1809 roff(format("%^s¤Ï", wd_he[msex]));
1811 roff(format("%^s", wd_he[msex]));
1816 for (n = 0; n < vn; n++)
1821 jverb(vp[n],jverb_buf,JVERB_AND);
1827 if (n == 0) roff(" can ");
1828 else if (n < vn-1) roff(", ");
1839 roff("¤³¤È¤¬¤Ç¤¤ë¡£");
1847 /* Describe special abilities. */
1848 if (flags7 & (RF7_SELF_LITE_1 | RF7_SELF_LITE_2))
1851 roff(format("%^s¤Ï¸÷¤Ã¤Æ¤¤¤ë¡£", wd_he[msex]));
1853 roff(format("%^s illuminate the dungeon. ", wd_he[msex]));
1857 if (flags2 & RF2_INVISIBLE)
1860 roff(format("%^s¤ÏÆ©ÌÀ¤ÇÌܤ˸«¤¨¤Ê¤¤¡£", wd_he[msex]));
1862 roff(format("%^s is invisible. ", wd_he[msex]));
1866 if (flags2 & RF2_COLD_BLOOD)
1869 roff(format("%^s¤ÏÎä·ìưʪ¤Ç¤¢¤ë¡£", wd_he[msex]));
1871 roff(format("%^s is cold blooded. ", wd_he[msex]));
1875 if (flags2 & RF2_EMPTY_MIND)
1878 roff(format("%^s¤Ï¥Æ¥ì¥Ñ¥·¡¼¤Ç¤Ï´¶ÃΤǤ¤Ê¤¤¡£", wd_he[msex]));
1880 roff(format("%^s is not detected by telepathy. ", wd_he[msex]));
1884 else if (flags2 & RF2_WEIRD_MIND)
1887 roff(format("%^s¤Ï¤Þ¤ì¤Ë¥Æ¥ì¥Ñ¥·¡¼¤Ç´¶ÃΤǤ¤ë¡£", wd_he[msex]));
1889 roff(format("%^s is rarely detected by telepathy. ", wd_he[msex]));
1893 if (flags2 & RF2_MULTIPLY)
1896 c_roff(TERM_L_UMBER, format("%^s¤ÏÇúȯŪ¤ËÁý¿£¤¹¤ë¡£", wd_he[msex]));
1898 c_roff(TERM_L_UMBER, format("%^s breeds explosively. ", wd_he[msex]));
1902 if (flags2 & RF2_REGENERATE)
1905 c_roff(TERM_L_WHITE, format("%^s¤ÏÁÇÁ᤯ÂÎÎϤò²óÉü¤¹¤ë¡£", wd_he[msex]));
1907 c_roff(TERM_L_WHITE, format("%^s regenerates quickly. ", wd_he[msex]));
1911 if (flags7 & RF7_RIDING)
1914 c_roff(TERM_SLATE, format("%^s¤Ë¾è¤ë¤³¤È¤¬¤Ç¤¤ë¡£", wd_he[msex]));
1916 c_roff(TERM_SLATE, format("%^s is suitable for riding. ", wd_he[msex]));
1922 /* Collect susceptibilities */
1925 if (flags3 & RF3_HURT_ROCK) {vp[vn] = "´ä¤ò½üµî¤¹¤ë¤â¤Î";color[vn++] = TERM_UMBER;}
1927 if (flags3 & RF3_HURT_ROCK) {vp[vn] = "rock remover";color[vn++] = TERM_UMBER;}
1931 if (flags3 & RF3_HURT_LITE) {vp[vn] = "ÌÀ¤ë¤¤¸÷";color[vn++] = TERM_YELLOW;}
1933 if (flags3 & RF3_HURT_LITE) {vp[vn] = "bright light";color[vn++] = TERM_YELLOW;}
1937 if (flags3 & RF3_HURT_FIRE) {vp[vn] = "±ê";color[vn++] = TERM_RED;}
1939 if (flags3 & RF3_HURT_FIRE) {vp[vn] = "fire";color[vn++] = TERM_RED;}
1943 if (flags3 & RF3_HURT_COLD) {vp[vn] = "Î䵤";color[vn++] = TERM_L_WHITE;}
1945 if (flags3 & RF3_HURT_COLD) {vp[vn] = "cold";color[vn++] = TERM_L_WHITE;}
1949 /* Describe susceptibilities */
1954 roff(format("%^s¤Ë¤Ï", wd_he[msex]));
1956 roff(format("%^s", wd_he[msex]));
1961 for (n = 0; n < vn; n++)
1965 if ( n != 0 ) roff("¤ä");
1967 if (n == 0) roff(" is hurt by ");
1968 else if (n < vn-1) roff(", ");
1974 c_roff(color[n], vp[n]);
1979 roff("¤Ç¥À¥á¡¼¥¸¤òÍ¿¤¨¤é¤ì¤ë¡£");
1987 /* Collect immunities */
1990 if (flags3 & RF3_IM_ACID) {vp[vn] = "»À";color[vn++] = TERM_GREEN;}
1992 if (flags3 & RF3_IM_ACID) {vp[vn] = "acid";color[vn++] = TERM_GREEN;}
1996 if (flags3 & RF3_IM_ELEC) {vp[vn] = "°ðºÊ";color[vn++] = TERM_BLUE;}
1998 if (flags3 & RF3_IM_ELEC) {vp[vn] = "lightning";color[vn++] = TERM_BLUE;}
2002 if (flags3 & RF3_IM_FIRE) {vp[vn] = "±ê";color[vn++] = TERM_RED;}
2004 if (flags3 & RF3_IM_FIRE) {vp[vn] = "fire";color[vn++] = TERM_RED;}
2008 if (flags3 & RF3_IM_COLD) {vp[vn] = "Î䵤";color[vn++] = TERM_L_WHITE;}
2010 if (flags3 & RF3_IM_COLD) {vp[vn] = "cold";color[vn++] = TERM_L_WHITE;}
2014 if (flags3 & RF3_IM_POIS) {vp[vn] = "ÆÇ";color[vn++] = TERM_L_GREEN;}
2016 if (flags3 & RF3_IM_POIS) {vp[vn] = "poison";color[vn++] = TERM_L_GREEN;}
2020 /* Describe immunities */
2025 roff(format("%^s¤Ï", wd_he[msex]));
2027 roff(format("%^s", wd_he[msex]));
2032 for (n = 0; n < vn; n++)
2036 if ( n != 0 ) roff("¤È");
2038 if (n == 0) roff(" resists ");
2039 else if (n < vn-1) roff(", ");
2045 c_roff(color[n], vp[n]);
2050 roff("¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£");
2058 /* Collect resistances */
2061 if (flags4 & RF4_BR_LITE) {vp[vn] = "Á®¸÷";color[vn++] = TERM_YELLOW;}
2063 if (flags4 & RF4_BR_LITE) {vp[vn] = "light";color[vn++] = TERM_YELLOW;}
2067 if ((flags4 & RF4_BR_DARK) || (flags3 & RF3_ORC)) {vp[vn] = "°Å¹õ";color[vn++] = TERM_L_DARK;}
2069 if (flags4 & RF4_BR_DARK || (flags3 & RF3_ORC)) {vp[vn] = "dark";color[vn++] = TERM_L_DARK;}
2073 if (flags3 & RF3_RES_NETH) {vp[vn] = "ÃϹö";color[vn++] = TERM_L_DARK;}
2075 if (flags3 & RF3_RES_NETH) {vp[vn] = "nether";color[vn++] = TERM_L_DARK;}
2079 if (flags3 & RF3_RES_WATE) {vp[vn] = "¿å";color[vn++] = TERM_BLUE;}
2081 if (flags3 & RF3_RES_WATE) {vp[vn] = "water";color[vn++] = TERM_BLUE;}
2085 if (flags3 & RF3_RES_PLAS) {vp[vn] = "¥×¥é¥º¥Þ";color[vn++] = TERM_L_RED;}
2087 if (flags3 & RF3_RES_PLAS) {vp[vn] = "plasma";color[vn++] = TERM_L_RED;}
2091 if (flags4 & RF4_BR_SHAR) {vp[vn] = "ÇËÊÒ";color[vn++] = TERM_L_UMBER;}
2093 if (flags4 & RF4_BR_SHAR) {vp[vn] = "shards";color[vn++] = TERM_L_UMBER;}
2097 if (flags4 & RF4_BR_SOUN) {vp[vn] = "¹ì²»";color[vn++] = TERM_ORANGE;}
2099 if (flags4 & RF4_BR_SOUN) {vp[vn] = "sound";color[vn++] = TERM_ORANGE;}
2103 if (flags4 & RF4_BR_CONF) {vp[vn] = "º®Íð";color[vn++] = TERM_L_UMBER;}
2105 if (flags4 & RF4_BR_CONF) {vp[vn] = "conf";color[vn++] = TERM_L_UMBER;}
2109 if ((flags4 & RF4_BR_CHAO) || (r_idx == MON_STORMBRINGER)) {vp[vn] = "¥«¥ª¥¹";color[vn++] = TERM_VIOLET;}
2111 if ((flags4 & RF4_BR_CHAO) || (r_idx == MON_STORMBRINGER)) {vp[vn] = "chaos";color[vn++] = TERM_VIOLET;}
2115 if (flags3 & RF3_RES_NEXU) {vp[vn] = "°ø²Ìº®Íð";color[vn++] = TERM_VIOLET;}
2117 if (flags3 & RF3_RES_NEXU) {vp[vn] = "nexus";color[vn++] = TERM_VIOLET;}
2121 if (flags3 & RF3_RES_DISE) {vp[vn] = "Îô²½";color[vn++] = TERM_VIOLET;}
2123 if (flags3 & RF3_RES_DISE) {vp[vn] = "disenchantment";color[vn++] = TERM_VIOLET;}
2127 if (flags4 & RF4_BR_WALL) {vp[vn] = "¥Õ¥©¡¼¥¹";color[vn++] = TERM_UMBER;}
2129 if (flags4 & RF4_BR_WALL) {vp[vn] = "sound";color[vn++] = TERM_UMBER;}
2133 if (flags4 & RF4_BR_INER) {vp[vn] = "ÃÙÆß";color[vn++] = TERM_SLATE;}
2135 if (flags4 & RF4_BR_INER) {vp[vn] = "inertia";color[vn++] = TERM_SLATE;}
2139 if (flags4 & RF4_BR_TIME) {vp[vn] = "»þ´ÖµÕž";color[vn++] = TERM_L_BLUE;}
2141 if (flags4 & RF4_BR_TIME) {vp[vn] = "time";color[vn++] = TERM_L_BLUE;}
2145 if (flags4 & RF4_BR_GRAV) {vp[vn] = "½ÅÎÏ";color[vn++] = TERM_SLATE;}
2147 if (flags4 & RF4_BR_GRAV) {vp[vn] = "gravity";color[vn++] = TERM_SLATE;}
2151 if (flags3 & RF3_RES_ALL) {vp[vn] = "¤¢¤é¤æ¤ë¹¶·â";color[vn++] = TERM_YELLOW;}
2153 if (flags3 & RF3_RES_ALL) {vp[vn] = "all";color[vn++] = TERM_YELLOW;}
2157 if ((flags3 & RF3_RES_TELE) && !(r_ptr->flags1 & RF1_UNIQUE)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È";color[vn++] = TERM_ORANGE;}
2159 if ((flags3 & RF3_RES_TELE) && !(r_ptr->flags1 & RF1_UNIQUE)) {vp[vn] = "teleportation";color[vn++] = TERM_ORANGE;}
2163 /* Describe resistances */
2168 roff(format("%^s¤Ï", wd_he[msex]));
2170 roff(format("%^s", wd_he[msex]));
2175 for (n = 0; n < vn; n++)
2179 if ( n != 0 ) roff("¤È");
2181 if (n == 0) roff(" resists ");
2182 else if (n < vn-1) roff(", ");
2188 c_roff(color[n], vp[n]);
2193 roff("¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£");
2201 if ((r_ptr->r_xtra1 & MR1_SINKA) || cheat_know)
2203 if (r_ptr->next_r_idx)
2206 roff(format("%^s¤Ï·Ð¸³¤òÀѤà¤È¡¢", wd_he[msex]));
2208 roff(format("%^s will evolve into ", wd_he[msex]));
2210 c_roff(TERM_YELLOW, format("%s", r_name+r_info[r_ptr->next_r_idx].name));
2212 roff(format("¤Ë¿Ê²½¤¹¤ë¡£"));
2214 roff(format(" when %s gets enugh experience. ", wd_he[msex]));
2217 else if (!(r_ptr->flags1 & RF1_UNIQUE))
2220 roff(format("%s¤Ï¿Ê²½¤·¤Ê¤¤¡£", wd_he[msex]));
2222 roff(format("%s won't evolve. ", wd_he[msex]));
2227 /* Collect non-effects */
2230 if (flags3 & RF3_NO_STUN) {vp[vn] = "Û¯Û°¤È¤·¤Ê¤¤";color[vn++] = TERM_ORANGE;}
2232 if (flags3 & RF3_NO_STUN) {vp[vn] = "stunned";color[vn++] = TERM_ORANGE;}
2236 if (flags3 & RF3_NO_FEAR) {vp[vn] = "¶²Éݤò´¶¤¸¤Ê¤¤";color[vn++] = TERM_SLATE;}
2238 if (flags3 & RF3_NO_FEAR) {vp[vn] = "frightened";color[vn++] = TERM_SLATE;}
2242 if (flags3 & RF3_NO_CONF) {vp[vn] = "º®Í𤷤ʤ¤";color[vn++] = TERM_L_UMBER;}
2244 if (flags3 & RF3_NO_CONF) {vp[vn] = "confused";color[vn++] = TERM_L_UMBER;}
2248 if (flags3 & RF3_NO_SLEEP) {vp[vn] = "̲¤é¤µ¤ì¤Ê¤¤";color[vn++] = TERM_BLUE;}
2250 if (flags3 & RF3_NO_SLEEP) {vp[vn] = "slept";color[vn++] = TERM_BLUE;}
2254 if ((flags3 & RF3_RES_TELE) && (r_ptr->flags1 & RF1_UNIQUE)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È¤µ¤ì¤Ê¤¤";color[vn++] = TERM_ORANGE;}
2256 if ((flags3 & RF3_RES_TELE) && (r_ptr->flags1 & RF1_UNIQUE)) {vp[vn] = "teleported";color[vn++] = TERM_ORANGE;}
2259 /* Describe non-effects */
2264 roff(format("%^s¤Ï", wd_he[msex]));
2266 roff(format("%^s", wd_he[msex]));
2271 for (n = 0; n < vn; n++)
2275 if ( n != 0 ) roff("¤·¡¢");
2277 if (n == 0) roff(" cannot be ");
2278 else if (n < vn - 1) roff(", ");
2284 c_roff(color[n], vp[n]);
2297 /* Do we know how aware it is? */
2298 if ((((int)r_ptr->r_wake * (int)r_ptr->r_wake) > r_ptr->sleep) ||
2299 (r_ptr->r_ignore == MAX_UCHAR) ||
2300 ((r_ptr->sleep == 0) && ((r_ptr->r_tkills >= 10) || cheat_know)))
2304 if (r_ptr->sleep > 200)
2307 act = "¤ò̵»ë¤·¤¬¤Á¤Ç¤¢¤ë¤¬";
2309 act = "prefers to ignore";
2313 else if (r_ptr->sleep > 95)
2316 act = "¤ËÂФ·¤Æ¤Û¤È¤ó¤ÉÃí°Õ¤òʧ¤ï¤Ê¤¤¤¬";
2318 act = "pays very little attention to";
2322 else if (r_ptr->sleep > 75)
2325 act = "¤ËÂФ·¤Æ¤¢¤Þ¤êÃí°Õ¤òʧ¤ï¤Ê¤¤¤¬";
2327 act = "pays little attention to";
2331 else if (r_ptr->sleep > 45)
2334 act = "¤ò¸«²á¤´¤·¤¬¤Á¤Ç¤¢¤ë¤¬";
2336 act = "tends to overlook";
2340 else if (r_ptr->sleep > 25)
2343 act = "¤ò¤Û¤ó¤Î¾¯¤·¤Ï¸«¤Æ¤ª¤ê";
2345 act = "takes quite a while to see";
2349 else if (r_ptr->sleep > 10)
2352 act = "¤ò¤·¤Ð¤é¤¯¤Ï¸«¤Æ¤ª¤ê";
2354 act = "takes a while to see";
2358 else if (r_ptr->sleep > 5)
2361 act = "¤ò´öʬÃí°Õ¿¼¤¯¸«¤Æ¤ª¤ê";
2363 act = "is fairly observant of";
2367 else if (r_ptr->sleep > 3)
2370 act = "¤òÃí°Õ¿¼¤¯¸«¤Æ¤ª¤ê";
2372 act = "is observant of";
2376 else if (r_ptr->sleep > 1)
2379 act = "¤ò¤«¤Ê¤êÃí°Õ¿¼¤¯¸«¤Æ¤ª¤ê";
2381 act = "is very observant of";
2385 else if (r_ptr->sleep > 0)
2388 act = "¤ò·Ù²ü¤·¤Æ¤ª¤ê";
2390 act = "is vigilant for";
2397 act = "¤ò¤«¤Ê¤ê·Ù²ü¤·¤Æ¤ª¤ê";
2399 act = "is ever vigilant for";
2405 roff(format("%^s¤Ï¿¯Æþ¼Ô%s¡¢ %d ¥Õ¥£¡¼¥ÈÀ褫¤é¿¯Æþ¼Ô¤Ëµ¤ÉÕ¤¯¤³¤È¤¬¤¢¤ë¡£",
2406 wd_he[msex], act, 10 * r_ptr->aaf));
2408 roff(format("%^s %s intruders, which %s may notice from %d feet. ",
2409 wd_he[msex], act, wd_he[msex], 10 * r_ptr->aaf));
2415 /* Drops gold and/or items */
2416 if (r_ptr->r_drop_gold || r_ptr->r_drop_item)
2423 roff(format("%^s¤Ï", wd_he[msex]));
2425 roff(format("%^s may carry", wd_he[msex]));
2429 /* Count maximum drop */
2430 n = MAX(r_ptr->r_drop_gold, r_ptr->r_drop_item);
2432 /* One drop (may need an "n") */
2448 roff("°ì¤Ä¤«Æó¤Ä¤Î");
2450 roff(" one or two");
2459 roff(format(" %d ¸Ä¤Þ¤Ç¤Î", n));
2461 roff(format(" up to %d", n));
2468 if (flags1 & RF1_DROP_GREAT)
2478 /* Good (no "n" needed) */
2479 else if (flags1 & RF1_DROP_GOOD)
2498 if (r_ptr->r_drop_item)
2500 /* Handle singular "an" */
2506 /* Dump "object(s)" */
2512 if (n != 1) roff("s");
2516 /* Conjunction replaces variety, if needed for "gold" below */
2526 if (r_ptr->r_drop_gold)
2529 if (!p) sin = FALSE;
2531 /* Handle singular "an" */
2537 /* Dump "treasure(s)" */
2543 if (n != 1) roff("s");
2548 /* End this sentence */
2550 roff("¤ò»ý¤Ã¤Æ¤¤¤ë¤³¤È¤¬¤¢¤ë¡£");
2558 /* Count the number of "known" attacks */
2559 for (n = 0, m = 0; m < 4; m++)
2561 /* Skip non-attacks */
2562 if (!r_ptr->blow[m].method) continue;
2564 /* Count known attacks */
2565 if (r_ptr->r_blows[m]) n++;
2568 /* Examine (and count) the actual attacks */
2569 for (r = 0, m = 0; m < 4; m++)
2571 int method, effect, d1, d2;
2573 /* Skip non-attacks */
2574 if (!r_ptr->blow[m].method) continue;
2576 /* Skip unknown attacks */
2577 if (!r_ptr->r_blows[m]) continue;
2580 /* Extract the attack info */
2581 method = r_ptr->blow[m].method;
2582 effect = r_ptr->blow[m].effect;
2583 d1 = r_ptr->blow[m].d_dice;
2584 d2 = r_ptr->blow[m].d_side;
2590 /* Acquire the method */
2594 case RBM_HIT: p = "²¥¤ë"; break;
2596 case RBM_HIT: p = "hit"; break;
2600 case RBM_TOUCH: p = "¿¨¤ë"; break;
2602 case RBM_TOUCH: p = "touch"; break;
2606 case RBM_PUNCH: p = "¥Ñ¥ó¥Á¤¹¤ë"; break;
2608 case RBM_PUNCH: p = "punch"; break;
2612 case RBM_KICK: p = "½³¤ë"; break;
2614 case RBM_KICK: p = "kick"; break;
2618 case RBM_CLAW: p = "¤Ò¤Ã¤«¤¯"; break;
2620 case RBM_CLAW: p = "claw"; break;
2624 case RBM_BITE: p = "³ú¤à"; break;
2626 case RBM_BITE: p = "bite"; break;
2630 case RBM_STING: p = "»É¤¹"; break;
2632 case RBM_STING: p = "sting"; break;
2636 case RBM_SLASH: p = "»Â¤ë"; break;
2638 case RBM_SLASH: p = "slash"; break;
2642 case RBM_BUTT: p = "³Ñ¤ÇÆͤ¯"; break;
2644 case RBM_BUTT: p = "butt"; break;
2648 case RBM_CRUSH: p = "ÂÎÅö¤¿¤ê¤¹¤ë"; break;
2650 case RBM_CRUSH: p = "crush"; break;
2654 case RBM_ENGULF: p = "°û¤ß¹þ¤à"; break;
2656 case RBM_ENGULF: p = "engulf"; break;
2660 case RBM_CHARGE: p = "ÀÁµá½ñ¤ò¤è¤³¤¹"; break;
2662 case RBM_CHARGE: p = "charge"; break;
2666 case RBM_CRAWL: p = "ÂΤξå¤òÇ礤²ó¤ë"; break;
2668 case RBM_CRAWL: p = "crawl on you"; break;
2672 case RBM_DROOL: p = "¤è¤À¤ì¤ò¤¿¤é¤¹"; break;
2674 case RBM_DROOL: p = "drool on you"; break;
2678 case RBM_SPIT: p = "¤Ä¤Ð¤òÅǤ¯"; break;
2680 case RBM_SPIT: p = "spit"; break;
2684 case RBM_EXPLODE: p = "Çúȯ¤¹¤ë"; break;
2686 case RBM_EXPLODE: p = "explode"; break;
2690 case RBM_GAZE: p = "¤Ë¤é¤à"; break;
2692 case RBM_GAZE: p = "gaze"; break;
2696 case RBM_WAIL: p = "µã¤¶«¤Ö"; break;
2698 case RBM_WAIL: p = "wail"; break;
2702 case RBM_SPORE: p = "˦»Ò¤òÈô¤Ð¤¹"; break;
2704 case RBM_SPORE: p = "release spores"; break;
2707 case RBM_XXX4: break;
2709 case RBM_BEG: p = "¶â¤ò¤»¤¬¤à"; break;
2711 case RBM_BEG: p = "beg"; break;
2715 case RBM_INSULT: p = "Éî¿«¤¹¤ë"; break;
2717 case RBM_INSULT: p = "insult"; break;
2721 case RBM_MOAN: p = "¤¦¤á¤¯"; break;
2723 case RBM_MOAN: p = "moan"; break;
2727 case RBM_SHOW: p = "²Î¤¦"; break;
2729 case RBM_SHOW: p = "sing"; break;
2735 /* Default effect */
2738 /* Acquire the effect */
2743 case RBE_HURT: q = "¹¶·â¤¹¤ë"; break;
2746 case RBE_HURT: q = "attack"; break;
2750 case RBE_POISON: q = "ÆǤò¤¯¤é¤ï¤¹"; break;
2752 case RBE_POISON: q = "poison"; break;
2756 case RBE_UN_BONUS: q = "Îô²½¤µ¤»¤ë"; break;
2758 case RBE_UN_BONUS: q = "disenchant"; break;
2762 case RBE_UN_POWER: q = "ËâÎϤòµÛ¤¤¼è¤ë"; break;
2764 case RBE_UN_POWER: q = "drain charges"; break;
2768 case RBE_EAT_GOLD: q = "¶â¤òÅð¤à"; break;
2770 case RBE_EAT_GOLD: q = "steal gold"; break;
2774 case RBE_EAT_ITEM: q = "¥¢¥¤¥Æ¥à¤òÅð¤à"; break;
2776 case RBE_EAT_ITEM: q = "steal items"; break;
2780 case RBE_EAT_FOOD: q = "¤¢¤Ê¤¿¤Î¿©ÎÁ¤ò¿©¤Ù¤ë"; break;
2782 case RBE_EAT_FOOD: q = "eat your food"; break;
2786 case RBE_EAT_LITE: q = "ÌÀ¤«¤ê¤òµÛ¼ý¤¹¤ë"; break;
2788 case RBE_EAT_LITE: q = "absorb light"; break;
2792 case RBE_ACID: q = "»À¤òÈô¤Ð¤¹"; break;
2794 case RBE_ACID: q = "shoot acid"; break;
2798 case RBE_ELEC: q = "´¶ÅŤµ¤»¤ë"; break;
2800 case RBE_ELEC: q = "electrocute"; break;
2804 case RBE_FIRE: q = "dz¤ä¤¹"; break;
2806 case RBE_FIRE: q = "burn"; break;
2810 case RBE_COLD: q = "Åà¤é¤»¤ë"; break;
2812 case RBE_COLD: q = "freeze"; break;
2816 case RBE_BLIND: q = "ÌÕÌܤˤ¹¤ë"; break;
2818 case RBE_BLIND: q = "blind"; break;
2822 case RBE_CONFUSE: q = "º®Í𤵤»¤ë"; break;
2824 case RBE_CONFUSE: q = "confuse"; break;
2828 case RBE_TERRIFY: q = "¶²Éݤµ¤»¤ë"; break;
2830 case RBE_TERRIFY: q = "terrify"; break;
2834 case RBE_PARALYZE: q = "Ëãá㤵¤»¤ë"; break;
2836 case RBE_PARALYZE: q = "paralyze"; break;
2840 case RBE_LOSE_STR: q = "ÏÓÎϤò¸º¾¯¤µ¤»¤ë"; break;
2842 case RBE_LOSE_STR: q = "reduce strength"; break;
2846 case RBE_LOSE_INT: q = "ÃÎǽ¤ò¸º¾¯¤µ¤»¤ë"; break;
2848 case RBE_LOSE_INT: q = "reduce intelligence"; break;
2852 case RBE_LOSE_WIS: q = "¸¤µ¤ò¸º¾¯¤µ¤»¤ë"; break;
2854 case RBE_LOSE_WIS: q = "reduce wisdom"; break;
2858 case RBE_LOSE_DEX: q = "´ïÍѤµ¤ò¸º¾¯¤µ¤»¤ë"; break;
2860 case RBE_LOSE_DEX: q = "reduce dexterity"; break;
2864 case RBE_LOSE_CON: q = "Âѵ×ÎϤò¸º¾¯¤µ¤»¤ë"; break;
2866 case RBE_LOSE_CON: q = "reduce constitution"; break;
2870 case RBE_LOSE_CHR: q = "Ì¥ÎϤò¸º¾¯¤µ¤»¤ë"; break;
2872 case RBE_LOSE_CHR: q = "reduce charisma"; break;
2876 case RBE_LOSE_ALL: q = "Á´¥¹¥Æ¡¼¥¿¥¹¤ò¸º¾¯¤µ¤»¤ë"; break;
2878 case RBE_LOSE_ALL: q = "reduce all stats"; break;
2882 case RBE_SHATTER: q = "Ê´ºÕ¤¹¤ë"; break;
2884 case RBE_SHATTER: q = "shatter"; break;
2888 case RBE_EXP_10: q = "·Ð¸³Ãͤò¸º¾¯(10d6+)¤µ¤»¤ë"; break;
2890 case RBE_EXP_10: q = "lower experience (by 10d6+)"; break;
2894 case RBE_EXP_20: q = "·Ð¸³Ãͤò¸º¾¯(20d6+)¤µ¤»¤ë"; break;
2896 case RBE_EXP_20: q = "lower experience (by 20d6+)"; break;
2900 case RBE_EXP_40: q = "·Ð¸³Ãͤò¸º¾¯(40d6+)¤µ¤»¤ë"; break;
2902 case RBE_EXP_40: q = "lower experience (by 40d6+)"; break;
2906 case RBE_EXP_80: q = "·Ð¸³Ãͤò¸º¾¯(80d6+)¤µ¤»¤ë"; break;
2908 case RBE_EXP_80: q = "lower experience (by 80d6+)"; break;
2912 case RBE_DISEASE: q = "ɵ¤¤Ë¤¹¤ë"; break;
2914 case RBE_DISEASE: q = "disease"; break;
2918 case RBE_TIME: q = "»þ´Ö¤òµÕÌá¤ê¤µ¤»¤ë"; break;
2920 case RBE_TIME: q = "time"; break;
2924 case RBE_EXP_VAMP: q = "À¸Ì¿ÎϤòµÛ¼ý¤¹¤ë"; break;
2926 case RBE_EXP_VAMP: q = "drain life force"; break;
2930 case RBE_DR_MANA: q = "ËâÎϤòÃ¥¤¦"; break;
2932 case RBE_DR_MANA: q = "drain mana force"; break;
2939 if ( r == 0 ) roff( format("%^s¤Ï", wd_he[msex]) );
2941 /***¼ã´³É½¸½¤òÊѹ¹ ita ***/
2943 /* Describe damage (if known) */
2944 if (d1 && d2 && know_damage(r_idx, m))
2947 /* Display the damage */
2948 roff(format(" %dd%d ", d1, d2));
2949 roff("¤Î¥À¥á¡¼¥¸¤Ç");
2951 /* Hack -- force a method */
2952 if (!p) p = "²¿¤«´ñ̯¤Ê¤³¤È¤ò¤¹¤ë";
2954 /* Describe the method */
2955 /* XX¤·¤ÆYY¤·/XX¤·¤ÆYY¤¹¤ë/XX¤·/XX¤¹¤ë */
2956 if(q) jverb( p ,jverb_buf, JVERB_TO);
2957 else if(r!=n-1) jverb( p ,jverb_buf, JVERB_AND);
2958 else strcpy(jverb_buf, p);
2962 /* Describe the effect (if any) */
2965 if(r!=n-1) jverb( q,jverb_buf, JVERB_AND);
2966 else strcpy(jverb_buf,q);
2969 if(r!=n-1) roff("¡¢");
2971 /* Introduce the attack description */
2974 roff(format("%^s can ", wd_he[msex]));
2986 /* Hack -- force a method */
2987 if (!p) p = "do something weird";
2989 /* Describe the method */
2993 /* Describe the effect (if any) */
2996 /* Describe the attack type */
3000 /* Describe damage (if known) */
3001 if (d1 && d2 && know_damage(r_idx, m))
3003 /* Display the damage */
3004 roff(" with damage");
3005 roff(format(" %dd%d", d1, d2));
3012 /* Count the attacks as printed */
3016 /* Finish sentence above */
3027 /* Notice lack of attacks */
3028 else if (flags1 & RF1_NEVER_BLOW)
3031 roff(format("%^s¤ÏʪÍýŪ¤Ê¹¶·âÊýË¡¤ò»ý¤¿¤Ê¤¤¡£", wd_he[msex]));
3033 roff(format("%^s has no physical attacks. ", wd_he[msex]));
3038 /* Or describe the lack of knowledge */
3042 roff(format("%s¹¶·â¤Ë¤Ä¤¤¤Æ¤Ï²¿¤âÃΤé¤Ê¤¤¡£", wd_his[msex]));
3044 roff(format("Nothing is known about %s attack. ", wd_his[msex]));
3051 * Notice "Quest" monsters, but only if you
3052 * already encountered the monster.
3054 if ((flags1 & RF1_QUESTOR) && (cheat_know || ((r_ptr->r_sights) && (r_ptr->max_num) && ((r_idx == MON_OBERON) || (r_idx == MON_SERPENT)))))
3057 c_roff(TERM_VIOLET, "¤¢¤Ê¤¿¤Ï¤³¤Î¥â¥ó¥¹¥¿¡¼¤ò»¦¤·¤¿¤¤¤È¤¤¤¦¶¯¤¤Íß˾¤ò´¶¤¸¤Æ¤¤¤ë...");
3059 c_roff(TERM_VIOLET, "You feel an intense desire to kill this monster... ");
3064 else if (flags7 & RF7_GUARDIAN)
3067 c_roff(TERM_L_RED, "¤³¤Î¥â¥ó¥¹¥¿¡¼¤Ï¥À¥ó¥¸¥ç¥ó¤Î¼ç¤Ç¤¢¤ë¡£");
3069 c_roff(TERM_L_RED, "This monster is the master of a dungeon.");
3078 /* Cheat -- know everything */
3079 if ((cheat_know) && (remem == 0))
3081 /* Hack -- restore memory */
3082 COPY(r_ptr, &save_mem, monster_race);
3089 * Hack -- Display the "name" and "attr/chars" of a monster race
3091 static void roff_top(int r_idx)
3093 monster_race *r_ptr = &r_info[r_idx];
3099 /* Access the chars */
3103 /* Access the attrs */
3108 /* Clear the top line */
3109 Term_erase(0, 0, 255);
3111 /* Reset the cursor */
3114 /* A title (use "The" for non-uniques) */
3118 if (!(r_ptr->flags1 & RF1_UNIQUE))
3122 Term_addstr(-1, TERM_WHITE, "The ");
3126 Term_addstr(-1, TERM_WHITE, (r_name + r_ptr->name));
3128 /* Append the "standard" attr/char info */
3129 Term_addstr(-1, TERM_WHITE, " ('");
3131 Term_addstr(-1, TERM_WHITE, "')");
3133 /* Append the "optional" attr/char info */
3134 Term_addstr(-1, TERM_WHITE, "/('");
3136 Term_addstr(-1, TERM_WHITE, "'):");
3138 /* Wizards get extra info */
3143 sprintf(buf, "%d", r_idx);
3145 Term_addstr(-1, TERM_WHITE, " (");
3146 Term_addstr(-1, TERM_L_BLUE, buf);
3147 Term_addch(TERM_WHITE, ')');
3154 * Hack -- describe the given monster race at the top of the screen
3156 void screen_roff(int r_idx, int remember)
3158 /* Flush messages */
3162 Term_erase(0, 1, 255);
3164 /* Recall monster */
3165 roff_aux(r_idx, remember);
3167 /* Describe monster */
3175 * Hack -- describe the given monster race in the current "term" window
3177 void display_roff(int r_idx)
3181 /* Erase the window */
3182 for (y = 0; y < Term->hgt; y++)
3184 /* Erase the line */
3185 Term_erase(0, y, 255);
3191 /* Recall monster */
3194 /* Describe monster */
3199 bool monster_quest(int r_idx)
3201 monster_race *r_ptr = &r_info[r_idx];
3203 /* Random quests are in the dungeon */
3204 if (!(r_ptr->flags8 & RF8_DUNGEON)) return FALSE;
3206 /* No random quests for aquatic monsters */
3207 if (r_ptr->flags7 & RF7_AQUATIC) return FALSE;
3209 /* No random quests for multiplying monsters */
3210 if (r_ptr->flags2 & RF2_MULTIPLY) return FALSE;
3212 /* No quests to kill friendly monsters */
3213 if (r_ptr->flags7 & RF7_FRIENDLY) return FALSE;
3219 bool monster_dungeon(int r_idx)
3221 monster_race *r_ptr = &r_info[r_idx];
3223 if (r_ptr->flags8 & RF8_DUNGEON)
3230 bool monster_ocean(int r_idx)
3232 monster_race *r_ptr = &r_info[r_idx];
3234 if (r_ptr->flags8 & RF8_WILD_OCEAN)
3241 bool monster_shore(int r_idx)
3243 monster_race *r_ptr = &r_info[r_idx];
3245 if (r_ptr->flags8 & RF8_WILD_SHORE)
3252 bool monster_waste(int r_idx)
3254 monster_race *r_ptr = &r_info[r_idx];
3256 if (r_ptr->flags8 & RF8_WILD_WASTE)
3263 bool monster_town(int r_idx)
3265 monster_race *r_ptr = &r_info[r_idx];
3267 if (r_ptr->flags8 & RF8_WILD_TOWN)
3274 bool monster_wood(int r_idx)
3276 monster_race *r_ptr = &r_info[r_idx];
3278 if (r_ptr->flags8 & RF8_WILD_WOOD)
3285 bool monster_volcano(int r_idx)
3287 monster_race *r_ptr = &r_info[r_idx];
3289 if (r_ptr->flags8 & RF8_WILD_VOLCANO)
3296 bool monster_mountain(int r_idx)
3298 monster_race *r_ptr = &r_info[r_idx];
3300 if (r_ptr->flags8 & RF8_WILD_MOUNTAIN)
3307 bool monster_grass(int r_idx)
3309 monster_race *r_ptr = &r_info[r_idx];
3311 if (r_ptr->flags8 & RF8_WILD_GRASS)
3318 bool monster_deep_water(int r_idx)
3320 monster_race *r_ptr = &r_info[r_idx];
3322 if (!monster_dungeon(r_idx)) return FALSE;
3324 if (r_ptr->flags7 & RF7_AQUATIC)
3331 bool monster_shallow_water(int r_idx)
3333 monster_race *r_ptr = &r_info[r_idx];
3335 if (!monster_dungeon(r_idx)) return FALSE;
3337 if (r_ptr->flags2 & RF2_AURA_FIRE)
3344 bool monster_lava(int r_idx)
3346 monster_race *r_ptr = &r_info[r_idx];
3348 if (!monster_dungeon(r_idx)) return FALSE;
3350 if (((r_ptr->flags3 & RF3_IM_FIRE) ||
3351 (r_ptr->flags7 & RF7_CAN_FLY)) &&
3352 !(r_ptr->flags3 & RF3_AURA_COLD))
3359 monster_hook_type get_monster_hook(void)
3361 if (!dun_level && !p_ptr->inside_quest)
3363 switch (wilderness[p_ptr->wilderness_y][p_ptr->wilderness_x].terrain)
3366 return (monster_hook_type)monster_town;
3367 case TERRAIN_DEEP_WATER:
3368 return (monster_hook_type)monster_ocean;
3369 case TERRAIN_SHALLOW_WATER:
3371 return (monster_hook_type)monster_shore;
3373 case TERRAIN_DESERT:
3374 return (monster_hook_type)monster_waste;
3376 return (monster_hook_type)monster_grass;
3378 return (monster_hook_type)monster_wood;
3379 case TERRAIN_SHALLOW_LAVA:
3380 case TERRAIN_DEEP_LAVA:
3381 return (monster_hook_type)monster_volcano;
3382 case TERRAIN_MOUNTAIN:
3383 return (monster_hook_type)monster_mountain;
3385 return (monster_hook_type)monster_dungeon;
3390 return monster_dungeon;
3395 monster_hook_type get_monster_hook2(int y, int x)
3397 /* Set the monster list */
3398 switch (cave[y][x].feat)
3400 case FEAT_SHAL_WATER:
3401 return monster_shallow_water;
3402 case FEAT_DEEP_WATER:
3403 return monster_deep_water;
3404 case FEAT_DEEP_LAVA:
3405 case FEAT_SHAL_LAVA:
3406 return monster_lava;
3413 void set_friendly(monster_type *m_ptr)
3415 m_ptr->smart |= SM_FRIENDLY;
3418 void set_pet(monster_type *m_ptr)
3420 /* Check for quest completion */
3421 check_quest_completion(m_ptr);
3423 m_ptr->smart |= SM_PET;
3427 * Makes the monster hostile towards the player
3429 void set_hostile(monster_type *m_ptr)
3431 if (p_ptr->inside_battle) return;
3432 m_ptr->smart &= ~SM_PET;
3433 m_ptr->smart &= ~SM_FRIENDLY;
3440 void anger_monster(monster_type *m_ptr)
3442 if (p_ptr->inside_battle) return;
3443 if (is_friendly(m_ptr))
3447 monster_desc(m_name, m_ptr, 0);
3449 msg_format("%^s¤ÏÅܤä¿¡ª", m_name);
3451 msg_format("%^s gets angry!", m_name);
3456 chg_virtue(V_INDIVIDUALISM, 1);
3457 chg_virtue(V_HONOUR, -1);
3458 chg_virtue(V_JUSTICE, -1);
3459 chg_virtue(V_COMPASSION, -1);
3465 * Check if monster can cross terrain
3467 bool monster_can_cross_terrain(byte feat, monster_race *r_ptr)
3470 if (feat == FEAT_DEEP_WATER)
3472 if ((r_ptr->flags7 & RF7_AQUATIC) ||
3473 (r_ptr->flags7 & RF7_CAN_FLY) ||
3474 (r_ptr->flags7 & RF7_CAN_SWIM))
3480 else if (feat == FEAT_SHAL_WATER)
3482 if (!(r_ptr->flags2 & RF2_AURA_FIRE) ||
3483 (r_ptr->flags7 & RF7_AQUATIC) ||
3484 (r_ptr->flags7 & RF7_CAN_FLY) ||
3485 (r_ptr->flags7 & RF7_CAN_SWIM))
3490 /* Aquatic monster */
3491 else if ((r_ptr->flags7 & RF7_AQUATIC) &&
3492 !(r_ptr->flags7 & RF7_CAN_FLY))
3497 else if ((feat == FEAT_SHAL_LAVA) ||
3498 (feat == FEAT_DEEP_LAVA))
3500 if ((r_ptr->flags3 & RF3_IM_FIRE) ||
3501 (r_ptr->flags7 & RF7_CAN_FLY))
3512 * Check if two monsters are enemies
3514 bool are_enemies(monster_type *m_ptr, monster_type *n_ptr)
3516 monster_race *r_ptr = &r_info[m_ptr->r_idx];
3517 monster_race *s_ptr = &r_info[n_ptr->r_idx];
3519 if (p_ptr->inside_battle)
3521 if (is_pet(m_ptr) || is_pet(n_ptr)) return FALSE;
3525 if ((r_ptr->flags8 & RF8_WILD_TOWN) && (s_ptr->flags8 & RF8_WILD_TOWN))
3527 if (!is_pet(m_ptr) && !is_pet(n_ptr)) return FALSE;
3530 /* Friendly vs. opposite aligned normal or pet */
3531 if (((r_ptr->flags3 & RF3_EVIL) &&
3532 (s_ptr->flags3 & RF3_GOOD)) ||
3533 ((r_ptr->flags3 & RF3_GOOD) &&
3534 (s_ptr->flags3 & RF3_EVIL)))
3536 if (!(m_ptr->mflag2 & MFLAG_CHAMELEON) || !(n_ptr->mflag2 & MFLAG_CHAMELEON)) return TRUE;
3539 /* Hostile vs. non-hostile */
3540 if (is_hostile(m_ptr) != is_hostile(n_ptr))
3551 * Is the monster "alive"?
3553 * Used to determine the message to print for a killed monster.
3554 * ("dies", "destroyed")
3556 bool monster_living(monster_race *r_ptr)
3558 /* Non-living, undead, or demon */
3559 if (r_ptr->flags3 & (RF3_DEMON | RF3_UNDEAD | RF3_NONLIVING))
3568 static char *dwarf_syllable1[] =
3570 "B", "D", "F", "G", "Gl", "H", "K", "L", "M", "N", "R", "S", "T", "Th", "V",
3573 static char *dwarf_syllable2[] =
3575 "a", "e", "i", "o", "oi", "u",
3578 static char *dwarf_syllable3[] =
3580 "bur", "fur", "gan", "gnus", "gnar", "li", "lin", "lir", "mli", "nar",
3581 "nus", "rin", "ran", "sin", "sil", "sur",
3585 static char *elf_syllable1[] =
3587 "Al", "An", "Bal", "Bel", "Cal", "Cel", "El", "Elr", "Elv", "Eow", "F",
3588 "Fal", "Fel", "Fin", "G", "Gal", "Gel", "Gl", "Is", "Lan", "Leg", "N",
3589 "Nal", "Nel", "S", "Sal", "Sel", "T", "Tal", "Tel", "Thr", "Tin",
3592 static char *elf_syllable2[] =
3594 "a", "adrie", "ara", "e", "ebri", "ele", "ere", "i", "io", "ithra",
3595 "ilma", "il-Ga", "ili", "o", "orfi", "u", "y",
3598 static char *elf_syllable3[] =
3600 "l", "las", "lad", "ldor", "ldur", "linde", "lith", "mir", "n", "nd",
3601 "ndel", "ndil", "ndir", "nduil", "ng", "mbor", "r", "rith", "ril",
3602 "riand", "rion", "s", "thien", "viel", "wen", "wyn",
3606 static char *gnome_syllable1[] =
3608 "Aar", "An", "Ar", "As", "C", "H", "Han", "Har", "Hel", "Iir", "J",
3609 "Jan", "Jar", "K", "L", "M", "Mar", "N", "Nik", "Os", "Ol", "P", "R",
3610 "S", "Sam", "San", "T", "Ter", "Tom", "Ul", "V", "W", "Y",
3613 static char *gnome_syllable2[] =
3615 "a", "aa", "ai", "e", "ei", "i", "o", "uo", "u", "uu",
3618 static char *gnome_syllable3[] =
3620 "ron", "re", "la", "ki", "kseli", "ksi", "ku", "ja", "ta", "na",
3621 "namari", "neli", "nika", "nikki", "nu", "nukka", "ka", "ko", "li",
3622 "kki", "rik", "po", "to", "pekka", "rjaana", "rjatta", "rjukka", "la",
3623 "lla", "lli", "mo", "nni",
3627 static char *hobbit_syllable1[] =
3629 "B", "Ber", "Br", "D", "Der", "Dr", "F", "Fr", "G", "H", "L", "Ler",
3630 "M", "Mer", "N", "P", "Pr", "Per", "R", "S", "T", "W",
3633 static char *hobbit_syllable2[] =
3635 "a", "e", "i", "ia", "o", "oi", "u",
3638 static char *hobbit_syllable3[] =
3640 "bo", "ck", "decan", "degar", "do", "doc", "go", "grin", "lba", "lbo",
3641 "lda", "ldo", "lla", "ll", "lo", "m", "mwise", "nac", "noc", "nwise",
3642 "p", "ppin", "pper", "tho", "to",
3646 static char *human_syllable1[] =
3648 "Ab", "Ac", "Ad", "Af", "Agr", "Ast", "As", "Al", "Adw", "Adr", "Ar",
3649 "B", "Br", "C", "Cr", "Ch", "Cad", "D", "Dr", "Dw", "Ed", "Eth", "Et",
3650 "Er", "El", "Eow", "F", "Fr", "G", "Gr", "Gw", "Gal", "Gl", "H", "Ha",
3651 "Ib", "Jer", "K", "Ka", "Ked", "L", "Loth", "Lar", "Leg", "M", "Mir",
3652 "N", "Nyd", "Ol", "Oc", "On", "P", "Pr", "R", "Rh", "S", "Sev", "T",
3653 "Tr", "Th", "V", "Y", "Z", "W", "Wic",
3656 static char *human_syllable2[] =
3658 "a", "ae", "au", "ao", "are", "ale", "ali", "ay", "ardo", "e", "ei",
3659 "ea", "eri", "era", "ela", "eli", "enda", "erra", "i", "ia", "ie",
3660 "ire", "ira", "ila", "ili", "ira", "igo", "o", "oa", "oi", "oe",
3664 static char *human_syllable3[] =
3666 "a", "and", "b", "bwyn", "baen", "bard", "c", "ctred", "cred", "ch",
3667 "can", "d", "dan", "don", "der", "dric", "dfrid", "dus", "f", "g",
3668 "gord", "gan", "l", "li", "lgrin", "lin", "lith", "lath", "loth", "ld",
3669 "ldric", "ldan", "m", "mas", "mos", "mar", "mond", "n", "nydd", "nidd",
3670 "nnon", "nwan", "nyth", "nad", "nn", "nnor", "nd", "p", "r", "ron",
3671 "rd", "s", "sh", "seth", "sean", "t", "th", "tha", "tlan", "trem",
3672 "tram", "v", "vudd", "w", "wan", "win", "wyn", "wyr", "wyr", "wyth",
3676 static char *orc_syllable1[] =
3678 "B", "Er", "G", "Gr", "H", "P", "Pr", "R", "V", "Vr", "T", "Tr", "M", "Dr",
3681 static char *orc_syllable2[] =
3683 "a", "i", "o", "oo", "u", "ui",
3686 static char *orc_syllable3[] =
3688 "dash", "dish", "dush", "gar", "gor", "gdush", "lo", "gdish", "k",
3689 "lg", "nak", "rag", "rbag", "rg", "rk", "ng", "nk", "rt", "ol", "urk",
3690 "shnak", "mog", "mak", "rak",
3695 * Random Name Generator
3696 * based on a Javascript by Michael Hensley
3697 * "http://geocities.com/timessquare/castle/6274/"
3699 void create_name(int type, char *name)
3704 /* Select the monster type */
3707 /* Create the monster name */
3709 strcpy(name, dwarf_syllable1[rand_int(sizeof(dwarf_syllable1) / sizeof(char*))]);
3710 strcat(name, dwarf_syllable2[rand_int(sizeof(dwarf_syllable2) / sizeof(char*))]);
3711 strcat(name, dwarf_syllable3[rand_int(sizeof(dwarf_syllable3) / sizeof(char*))]);
3714 strcpy(name, elf_syllable1[rand_int(sizeof(elf_syllable1) / sizeof(char*))]);
3715 strcat(name, elf_syllable2[rand_int(sizeof(elf_syllable2) / sizeof(char*))]);
3716 strcat(name, elf_syllable3[rand_int(sizeof(elf_syllable3) / sizeof(char*))]);
3719 strcpy(name, gnome_syllable1[rand_int(sizeof(gnome_syllable1) / sizeof(char*))]);
3720 strcat(name, gnome_syllable2[rand_int(sizeof(gnome_syllable2) / sizeof(char*))]);
3721 strcat(name, gnome_syllable3[rand_int(sizeof(gnome_syllable3) / sizeof(char*))]);
3724 strcpy(name, hobbit_syllable1[rand_int(sizeof(hobbit_syllable1) / sizeof(char*))]);
3725 strcat(name, hobbit_syllable2[rand_int(sizeof(hobbit_syllable2) / sizeof(char*))]);
3726 strcat(name, hobbit_syllable3[rand_int(sizeof(hobbit_syllable3) / sizeof(char*))]);
3729 strcpy(name, human_syllable1[rand_int(sizeof(human_syllable1) / sizeof(char*))]);
3730 strcat(name, human_syllable2[rand_int(sizeof(human_syllable2) / sizeof(char*))]);
3731 strcat(name, human_syllable3[rand_int(sizeof(human_syllable3) / sizeof(char*))]);
3734 strcpy(name, orc_syllable1[rand_int(sizeof(orc_syllable1) / sizeof(char*))]);
3735 strcat(name, orc_syllable2[rand_int(sizeof(orc_syllable2) / sizeof(char*))]);
3736 strcat(name, orc_syllable3[rand_int(sizeof(orc_syllable3) / sizeof(char*))]);
3738 /* Create an empty name */