4 * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke
6 * This software may be copied and distributed for educational, research,
7 * and not for profit purposes provided that this copyright and statement
8 * are included in all such copies. Other copyrights may also apply.
11 /* Purpose: describe monsters (using monster memory) */
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 * Prepare hook for c_roff(). It will be changed for spoiler generation in wizard1.c.
111 void (*hook_c_roff)(byte attr, cptr str) = c_roff;
113 static void hooked_roff(cptr str)
116 hook_c_roff(TERM_WHITE, str);
121 * Hack -- display monster information using "hooked_roff()"
123 * Note that there is now a compiler option to only read the monster
124 * descriptions from the raw file when they are actually needed, which
125 * saves about 60K of memory at the cost of disk access during monster
126 * recall, which is optional to the user.
128 * This function should only be called with the cursor placed at the
129 * left edge of the screen, on a cleared line, in which the recall is
130 * to take place. One extra blank line is left after the recall.
132 static void roff_aux(int r_idx, int mode)
134 monster_race *r_ptr = &r_info[r_idx];
148 int speed = (ironman_nightmare) ? r_ptr->speed + 5 : r_ptr->speed;
161 byte drop_gold, drop_item;
167 bool know_everything = FALSE;
169 /* Obtain a copy of the "known" number of drops */
170 drop_gold = r_ptr->r_drop_gold;
171 drop_item = r_ptr->r_drop_item;
173 /* Obtain a copy of the "known" flags */
174 flags1 = (r_ptr->flags1 & r_ptr->r_flags1);
175 flags2 = (r_ptr->flags2 & r_ptr->r_flags2);
176 flags3 = (r_ptr->flags3 & r_ptr->r_flags3);
177 flags4 = (r_ptr->flags4 & r_ptr->r_flags4);
178 flags5 = (r_ptr->flags5 & r_ptr->r_flags5);
179 flags6 = (r_ptr->flags6 & r_ptr->r_flags6);
180 flags7 = (r_ptr->flags7 & r_ptr->flags7);
182 /* cheat_know or research_mon() */
183 if (cheat_know || (mode & 0x01))
184 know_everything = TRUE;
186 /* Cheat -- Know everything */
189 /* Hack -- maximal drops */
190 drop_gold = drop_item =
191 (((r_ptr->flags1 & RF1_DROP_4D2) ? 8 : 0) +
192 ((r_ptr->flags1 & RF1_DROP_3D2) ? 6 : 0) +
193 ((r_ptr->flags1 & RF1_DROP_2D2) ? 4 : 0) +
194 ((r_ptr->flags1 & RF1_DROP_1D2) ? 2 : 0) +
195 ((r_ptr->flags1 & RF1_DROP_90) ? 1 : 0) +
196 ((r_ptr->flags1 & RF1_DROP_60) ? 1 : 0));
198 /* Hack -- but only "valid" drops */
199 if (r_ptr->flags1 & RF1_ONLY_GOLD) drop_item = 0;
200 if (r_ptr->flags1 & RF1_ONLY_ITEM) drop_gold = 0;
202 /* Hack -- know all the flags */
203 flags1 = r_ptr->flags1;
204 flags2 = r_ptr->flags2;
205 flags3 = r_ptr->flags3;
206 flags4 = r_ptr->flags4;
207 flags5 = r_ptr->flags5;
208 flags6 = r_ptr->flags6;
212 /* Extract a gender (if applicable) */
213 if (r_ptr->flags1 & RF1_FEMALE) msex = 2;
214 else if (r_ptr->flags1 & RF1_MALE) msex = 1;
216 /* Assume some "obvious" flags */
217 if (r_ptr->flags1 & RF1_UNIQUE) flags1 |= (RF1_UNIQUE);
218 if (r_ptr->flags1 & RF1_QUESTOR) flags1 |= (RF1_QUESTOR);
219 if (r_ptr->flags1 & RF1_MALE) flags1 |= (RF1_MALE);
220 if (r_ptr->flags1 & RF1_FEMALE) flags1 |= (RF1_FEMALE);
222 /* Assume some "creation" flags */
223 if (r_ptr->flags1 & RF1_FRIENDS) flags1 |= (RF1_FRIENDS);
224 if (r_ptr->flags1 & RF1_ESCORT) flags1 |= (RF1_ESCORT);
225 if (r_ptr->flags1 & RF1_ESCORTS) flags1 |= (RF1_ESCORTS);
227 /* Killing a monster reveals some properties */
228 if (r_ptr->r_tkills || know_everything)
230 /* Know "race" flags */
231 if (r_ptr->flags3 & RF3_ORC) flags3 |= (RF3_ORC);
232 if (r_ptr->flags3 & RF3_TROLL) flags3 |= (RF3_TROLL);
233 if (r_ptr->flags3 & RF3_GIANT) flags3 |= (RF3_GIANT);
234 if (r_ptr->flags3 & RF3_DRAGON) flags3 |= (RF3_DRAGON);
235 if (r_ptr->flags3 & RF3_DEMON) flags3 |= (RF3_DEMON);
236 if (r_ptr->flags3 & RF3_UNDEAD) flags3 |= (RF3_UNDEAD);
237 if (r_ptr->flags3 & RF3_EVIL) flags3 |= (RF3_EVIL);
238 if (r_ptr->flags3 & RF3_GOOD) flags3 |= (RF3_GOOD);
239 if (r_ptr->flags3 & RF3_ANIMAL) flags3 |= (RF3_ANIMAL);
240 if (r_ptr->flags3 & RF3_AMBERITE) flags3 |= (RF3_AMBERITE);
241 if (r_ptr->flags2 & RF2_HUMAN) flags2 |= (RF2_HUMAN);
243 /* Know 'quantum' flag */
244 if (r_ptr->flags2 & RF2_QUANTUM) flags2 |= (RF2_QUANTUM);
246 /* Know "forced" flags */
247 if (r_ptr->flags1 & RF1_FORCE_DEPTH) flags1 |= (RF1_FORCE_DEPTH);
248 if (r_ptr->flags1 & RF1_FORCE_MAXHP) flags1 |= (RF1_FORCE_MAXHP);
251 /* For output_monster_spoiler() */
258 /* Treat uniques differently */
259 if (flags1 & RF1_UNIQUE)
261 /* Hack -- Determine if the unique is "dead" */
262 bool dead = (r_ptr->max_num == 0) ? TRUE : FALSE;
264 /* We've been killed... */
267 /* Killed ancestors */
269 hooked_roff(format("%^s¤Ï¤¢¤Ê¤¿¤ÎÀèÁĤò %d ¿ÍÁò¤Ã¤Æ¤¤¤ë",
270 wd_he[msex], r_ptr->r_deaths));
272 hooked_roff(format("%^s has slain %d of your ancestors",
273 wd_he[msex], r_ptr->r_deaths));
277 /* But we've also killed it */
281 hooked_roff(format("¤¬¡¢¤¹¤Ç¤ËµØƤ¤Á¤Ï²Ì¤¿¤·¤Æ¤¤¤ë¡ª"));
283 hooked_roff(format(", but you have avenged %s! ",
284 plural(r_ptr->r_deaths, "him", "them")));
289 /* Unavenged (ever) */
293 hooked_roff(format("¤Î¤Ë¡¢¤Þ¤ÀµØƤ¤Á¤ò²Ì¤¿¤·¤Æ¤¤¤Ê¤¤¡£"));
295 hooked_roff(format(", who %s unavenged. ",
296 plural(r_ptr->r_deaths, "remains", "remain")));
301 /* Start a new line */
305 /* Dead unique who never hurt us */
309 hooked_roff("¤¢¤Ê¤¿¤Ï¤³¤ÎµØŨ¤ò¤¹¤Ç¤ËÁò¤êµî¤Ã¤Æ¤¤¤ë¡£");
311 hooked_roff("You have slain this foe. ");
314 /* Start a new line */
319 /* Not unique, but killed us */
320 else if (r_ptr->r_deaths)
324 hooked_roff(format("¤³¤Î¥â¥ó¥¹¥¿¡¼¤Ï¤¢¤Ê¤¿¤ÎÀèÁĤò %d ¿ÍÁò¤Ã¤Æ¤¤¤ë",
327 hooked_roff(format("%d of your ancestors %s been killed by this creature, ",
328 r_ptr->r_deaths, plural(r_ptr->r_deaths, "has", "have")));
332 /* Some kills this life */
336 hooked_roff(format("¤¬¡¢¤¢¤Ê¤¿¤Ï¤³¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¯¤Ê¤¯¤È¤â %d ÂΤÏÅݤ·¤Æ¤¤¤ë¡£", r_ptr->r_pkills));
338 hooked_roff(format("and you have exterminated at least %d of the creatures. ", r_ptr->r_pkills));
343 /* Some kills past lives */
344 else if (r_ptr->r_tkills)
347 hooked_roff(format("¤¬¡¢%s¤Ï¤³¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¯¤Ê¤¯¤È¤â %d ÂΤÏÅݤ·¤Æ¤¤¤ë¡£",
348 "¤¢¤Ê¤¿¤ÎÀèÁÄ", r_ptr->r_tkills));
350 hooked_roff(format("and %s have exterminated at least %d of the creatures. ",
351 "your ancestors", r_ptr->r_tkills));
360 hooked_roff(format("¤¬¡¢¤Þ¤À%s¤òÅݤ·¤¿¤³¤È¤Ï¤Ê¤¤¡£", wd_he[msex]));
362 hooked_roff(format("and %s is not ever known to have been defeated. ", wd_he[msex]));
367 /* Start a new line */
371 /* Normal monsters */
374 /* Killed some this life */
378 hooked_roff(format("¤¢¤Ê¤¿¤Ï¤³¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¯¤Ê¤¯¤È¤â %d ÂΤϻ¦¤·¤Æ¤¤¤ë¡£", r_ptr->r_pkills));
380 hooked_roff(format("You have killed at least %d of these creatures. ", r_ptr->r_pkills));
385 /* Killed some last life */
386 else if (r_ptr->r_tkills)
389 hooked_roff(format("¤¢¤Ê¤¿¤ÎÀèÁĤϤ³¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¯¤Ê¤¯¤È¤â %d ÂΤϻ¦¤·¤Æ¤¤¤ë¡£", r_ptr->r_tkills));
391 hooked_roff(format("Your ancestors have killed at least %d of these creatures. ", r_ptr->r_tkills));
400 hooked_roff("¤³¤Î¥â¥ó¥¹¥¿¡¼¤òÅݤ·¤¿¤³¤È¤Ï¤Ê¤¤¡£");
402 hooked_roff("No battles to the death are recalled. ");
406 /* Start a new line */
415 #ifdef DELAY_LOAD_R_TEXT
419 /* Build the filename */
421 path_build(buf, sizeof(buf), ANGBAND_DIR_DATA, "r_info_j.raw");
423 path_build(buf, sizeof(buf), ANGBAND_DIR_DATA, "r_info.raw");
427 /* Open the "raw" file */
428 fd = fd_open(buf, O_RDONLY);
435 /* Starting position */
438 /* Additional offsets */
439 pos += r_head->head_size;
440 pos += r_head->info_size;
441 pos += r_head->name_size;
444 (void)fd_seek(fd, pos);
446 /* Read a chunk of data */
447 (void)fd_read(fd, buf, 2048);
456 strcpy(buf, r_text + r_ptr->text);
465 /* Start a new line */
470 if (r_idx == MON_KAGE)
481 /* Describe location */
482 if (r_ptr->level == 0)
485 hooked_roff(format("%^s¤ÏÄ®¤Ë½»¤ß", wd_he[msex]));
487 hooked_roff(format("%^s lives in the town", wd_he[msex]));
492 else if (r_ptr->r_tkills || know_everything)
497 hooked_roff(format("%^s¤ÏÄ̾ïÃϲ¼ %d ¥Õ¥£¡¼¥È¤Ç½Ð¸½¤·",
499 hooked_roff(format("%^s is normally found at depths of %d feet",
502 wd_he[msex], r_ptr->level * 50));
507 hooked_roff(format("%^s¤ÏÄ̾ïÃϲ¼ %d ³¬¤Ç½Ð¸½¤·",
509 hooked_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 hooked_roff("¡¢Â¾¤Î¥â¥ó¥¹¥¿¡¼¤Ë²½¤±¤ë¡£");
524 hooked_roff("and can take the shape of other monster.");
536 hooked_roff(", and ");
543 hooked_roff(format("%^s¤Ï", wd_he[msex]));
545 hooked_roff(format("%^s ", wd_he[msex]));
551 hooked_roff("moves");
555 if ((flags1 & RF1_RAND_50) || (flags1 & RF1_RAND_25))
558 if ((flags1 & RF1_RAND_50) && (flags1 & RF1_RAND_25))
561 hooked_roff("¤«¤Ê¤ê");
563 hooked_roff(" extremely");
567 else if (flags1 & RF1_RAND_50)
572 hooked_roff(" somewhat");
576 else if (flags1 & RF1_RAND_25)
581 hooked_roff(" a bit");
588 hooked_roff("ÉÔµ¬Â§¤Ë");
590 hooked_roff(" erratically");
594 /* Hack -- Occasional conjunction */
596 if (speed != 110) hooked_roff("¡¢¤«¤Ä");
598 if (speed != 110) hooked_roff(", and");
607 if (speed > 139) hook_c_roff(TERM_RED, "¿®¤¸Æñ¤¤¤Û¤É");
608 else if (speed > 134) hook_c_roff(TERM_ORANGE, "ÌÔÎõ¤Ë");
609 else if (speed > 129) hook_c_roff(TERM_ORANGE, "Èó¾ï¤Ë");
610 else if (speed > 124) hook_c_roff(TERM_UMBER, "¤«¤Ê¤ê");
611 else if (speed < 120) hook_c_roff(TERM_L_UMBER, "¤ä¤ä");
612 hook_c_roff(TERM_L_RED, "ÁÇÁ᤯");
614 if (speed > 139) hook_c_roff(TERM_RED, " incredibly");
615 else if (speed > 134) hook_c_roff(TERM_ORANGE, " extremely");
616 else if (speed > 129) hook_c_roff(TERM_ORANGE, " very");
617 else if (speed > 124) hook_c_roff(TERM_UMBER, " fairly");
618 else if (speed < 120) hook_c_roff(TERM_L_UMBER, " somewhat");
619 hook_c_roff(TERM_L_RED, " quickly");
623 else if (speed < 110)
626 if (speed < 90) hook_c_roff(TERM_L_GREEN, "¿®¤¸Æñ¤¤¤Û¤É");
627 else if (speed < 95) hook_c_roff(TERM_BLUE, "Èó¾ï¤Ë");
628 else if (speed < 100) hook_c_roff(TERM_BLUE, "¤«¤Ê¤ê");
629 else if (speed > 104) hook_c_roff(TERM_GREEN, "¤ä¤ä");
630 hook_c_roff(TERM_L_BLUE, "¤æ¤Ã¤¯¤ê¤È");
632 if (speed < 90) hook_c_roff(TERM_L_GREEN, " incredibly");
633 else if (speed < 95) hook_c_roff(TERM_BLUE, " very");
634 else if (speed < 100) hook_c_roff(TERM_BLUE, " fairly");
635 else if (speed > 104) hook_c_roff(TERM_GREEN, " somewhat");
636 hook_c_roff(TERM_L_BLUE, " slowly");
643 hooked_roff("ÉáÄ̤ή¤µ¤Ç");
645 hooked_roff(" at normal speed");
650 hooked_roff("Æ°¤¤¤Æ¤¤¤ë");
654 /* The code above includes "attack speed" */
655 if (flags1 & RF1_NEVER_MOVE)
661 hooked_roff("¡¢¤·¤«¤·");
663 hooked_roff(", but ");
670 hooked_roff(format("%^s¤Ï", wd_he[msex]));
672 hooked_roff(format("%^s ", wd_he[msex]));
680 hooked_roff("¿¯Æþ¼Ô¤òÄÉÀפ·¤Ê¤¤");
682 hooked_roff("does not deign to chase intruders");
687 /* End this sentence */
700 /* Describe experience if known */
701 if (r_ptr->r_tkills || know_everything)
707 if (flags1 & RF1_UNIQUE)
709 hooked_roff("Killing this");
713 hooked_roff("A kill of this");
718 /* Describe the "quality" */
720 if (flags2 & RF2_ELDRITCH_HORROR) hook_c_roff(TERM_VIOLET, "¶¸µ¤¤òͶ¤¦");/*nuke me*/
722 if (flags2 & RF2_ELDRITCH_HORROR) hook_c_roff(TERM_VIOLET, " sanity-blasting");
726 if (flags3 & RF3_ANIMAL) hook_c_roff(TERM_L_GREEN, "¼«Á³³¦¤Î");
728 if (flags3 & RF3_ANIMAL) hook_c_roff(TERM_L_GREEN, " natural");
732 if (flags3 & RF3_EVIL) hook_c_roff(TERM_L_DARK, "¼Ù°¤Ê¤ë");
734 if (flags3 & RF3_EVIL) hook_c_roff(TERM_L_DARK, " evil");
738 if (flags3 & RF3_GOOD) hook_c_roff(TERM_YELLOW, "Á±ÎɤÊ");
740 if (flags3 & RF3_GOOD) hook_c_roff(TERM_YELLOW, " good");
744 if (flags3 & RF3_UNDEAD) hook_c_roff(TERM_VIOLET, "¥¢¥ó¥Ç¥Ã¥É¤Î");
746 if (flags3 & RF3_UNDEAD) hook_c_roff(TERM_VIOLET, " undead");
749 if (flags3 & RF3_AMBERITE) hook_c_roff(TERM_VIOLET, "¥¢¥ó¥Ð¡¼¤Î²¦Â²¤Î");
751 if (flags3 & RF3_AMBERITE) hook_c_roff(TERM_VIOLET, " Amberite");
755 if ((flags3 & (RF3_DRAGON | RF3_DEMON | RF3_GIANT | RF3_TROLL | RF3_ORC)) || (flags2 & (RF2_QUANTUM | RF2_HUMAN)))
757 /* Describe the "race" */
759 if (flags3 & RF3_DRAGON) hook_c_roff(TERM_ORANGE, "¥É¥é¥´¥ó");
761 if (flags3 & RF3_DRAGON) hook_c_roff(TERM_ORANGE, " dragon");
765 if (flags3 & RF3_DEMON) hook_c_roff(TERM_VIOLET, "¥Ç¡¼¥â¥ó");
767 if (flags3 & RF3_DEMON) hook_c_roff(TERM_VIOLET, " demon");
771 if (flags3 & RF3_GIANT) hook_c_roff(TERM_L_UMBER, "¥¸¥ã¥¤¥¢¥ó¥È");
773 if (flags3 & RF3_GIANT) hook_c_roff(TERM_L_UMBER, " giant");
777 if (flags3 & RF3_TROLL) hook_c_roff(TERM_BLUE, "¥È¥í¥ë");
779 if (flags3 & RF3_TROLL) hook_c_roff(TERM_BLUE, " troll");
783 if (flags3 & RF3_ORC) hook_c_roff(TERM_UMBER, "¥ª¡¼¥¯");
785 if (flags3 & RF3_ORC) hook_c_roff(TERM_UMBER, " orc");
789 if (flags2 & RF2_HUMAN) hook_c_roff(TERM_L_WHITE, "¿Í´Ö");
791 if (flags2 & RF2_HUMAN) hook_c_roff(TERM_L_WHITE, " Human");
795 if (flags2 & RF2_QUANTUM) hook_c_roff(TERM_VIOLET, "ÎÌ»ÒÀ¸Êª");
797 if (flags2 & RF2_QUANTUM) hook_c_roff(TERM_VIOLET, " quantum creature");
802 else hooked_roff("¥â¥ó¥¹¥¿¡¼");
804 else hooked_roff(" creature");
809 hooked_roff("¤òÅݤ¹¤³¤È¤Ï");
811 /* Group some variables */
818 hooked_roff(format(" %lu ¥ì¥Ù¥ë¤Î¥¥ã¥é¥¯¥¿¤Ë¤È¤Ã¤Æ", (long)i));
820 i = (long)r_ptr->mexp * r_ptr->level / (p_ptr->max_plv+2);
821 j = ((((long)r_ptr->mexp * r_ptr->level % (p_ptr->max_plv+2)) *
822 (long)1000 / (p_ptr->max_plv+2) + 5) / 10);
824 hooked_roff(format(" Ìó%ld.%02ld ¥Ý¥¤¥ó¥È¤Î·Ð¸³¤È¤Ê¤ë¡£",
827 /* calculate the integer exp part */
828 i = (long)r_ptr->mexp * r_ptr->level / (p_ptr->max_plv+2);
830 /* calculate the fractional exp part scaled by 100, */
831 /* must use long arithmetic to avoid overflow */
832 j = ((((long)r_ptr->mexp * r_ptr->level % (p_ptr->max_plv+2)) *
833 (long)1000 / (p_ptr->max_plv+2) + 5) / 10);
835 /* Mention the experience */
836 hooked_roff(format(" is worth about %ld.%02ld point%s",
838 (((i == 1) && (j == 0)) ? "" : "s")));
840 /* Take account of annoying English */
843 if ((p_ptr->lev / 10) == 1) /* nothing */;
844 else if (i == 1) p = "st";
845 else if (i == 2) p = "nd";
846 else if (i == 3) p = "rd";
848 /* Take account of "leading vowels" in numbers */
851 if ((i == 8) || (i == 11) || (i == 18)) q = "n";
853 /* Mention the dependance on the player's level */
854 hooked_roff(format(" for a%s %lu%s level character. ",
861 if ((flags2 & RF2_AURA_FIRE) && (flags2 & RF2_AURA_ELEC) && (flags3 & RF3_AURA_COLD))
864 hook_c_roff(TERM_VIOLET, format("%^s¤Ï±ê¤Èɹ¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
866 hook_c_roff(TERM_VIOLET, format("%^s is surrounded by flames and electricity. ", wd_he[msex]));
870 else if ((flags2 & RF2_AURA_FIRE) && (flags2 & RF2_AURA_ELEC))
873 hook_c_roff(TERM_L_RED, format("%^s¤Ï±ê¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
875 hook_c_roff(TERM_L_RED, format("%^s is surrounded by flames and electricity. ", wd_he[msex]));
879 else if ((flags2 & RF2_AURA_FIRE) && (flags3 & RF3_AURA_COLD))
882 hook_c_roff(TERM_BLUE, format("%^s¤Ï±ê¤Èɹ¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
884 hook_c_roff(TERM_BLUE, format("%^s is surrounded by flames and electricity. ", wd_he[msex]));
888 else if ((flags3 & RF3_AURA_COLD) && (flags2 & RF2_AURA_ELEC))
891 hook_c_roff(TERM_L_GREEN, format("%^s¤Ïɹ¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
893 hook_c_roff(TERM_L_GREEN, format("%^s is surrounded by ice and electricity. ", wd_he[msex]));
897 else if (flags2 & RF2_AURA_FIRE)
900 hook_c_roff(TERM_RED, format("%^s¤Ï±ê¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
902 hook_c_roff(TERM_RED, format("%^s is surrounded by flames. ", wd_he[msex]));
906 else if (flags3 & RF3_AURA_COLD)
909 hook_c_roff(TERM_BLUE, format("%^s¤Ïɹ¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
911 hook_c_roff(TERM_BLUE, format("%^s is surrounded by ice. ", wd_he[msex]));
915 else if (flags2 & RF2_AURA_ELEC)
918 hook_c_roff(TERM_L_BLUE, format("%^s¤Ï¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
920 hook_c_roff(TERM_L_BLUE, format("%^s is surrounded by electricity. ", wd_he[msex]));
925 if (flags2 & RF2_REFLECTING)
928 hooked_roff(format("%^s¤ÏÌð¤Î¼öʸ¤òÄ·¤ÍÊÖ¤¹¡£", wd_he[msex]));
930 hooked_roff(format("%^s reflects bolt spells. ", wd_he[msex]));
935 /* Describe escorts */
936 if ((flags1 & RF1_ESCORT) || (flags1 & RF1_ESCORTS))
939 hooked_roff(format("%^s¤ÏÄ̾ï¸î±Ò¤òȼ¤Ã¤Æ¸½¤ì¤ë¡£",
941 hooked_roff(format("%^s usually appears with escorts. ",
947 /* Describe friends */
948 else if (flags1 & RF1_FRIENDS)
951 hooked_roff(format("%^s¤ÏÄ̾クÃĤǸ½¤ì¤ë¡£",
953 hooked_roff(format("%^s usually appears in groups. ",
960 /* Collect inate attacks */
963 if (flags4 & RF4_SHRIEK) {vp[vn] = "ÈáÌĤǽõ¤±¤òµá¤á¤ë";color[vn++] = TERM_L_WHITE;}
965 if (flags4 & RF4_SHRIEK) {vp[vn] = "shriek for help";color[vn++] = TERM_L_WHITE;}
969 if (flags4 & RF4_ROCKET) {vp[vn] = "¥í¥±¥Ã¥È¤òȯ¼Í¤¹¤ë";color[vn++] = TERM_UMBER;}
971 if (flags4 & RF4_ROCKET) {vp[vn] = "shoot a rocket";color[vn++] = TERM_UMBER;}
975 if (flags4 & RF4_SHOOT) {vp[vn] = "¼Í·â¤ò¤¹¤ë";color[vn++] = TERM_UMBER;}
977 if (flags4 & RF4_SHOOT) {vp[vn] = "fire an arrow";color[vn++] = TERM_UMBER;}
981 if (flags6 & (RF6_SPECIAL)) {vp[vn] = "ÆÃÊ̤ʹÔÆ°¤ò¤¹¤ë";color[vn++] = TERM_VIOLET;}
983 if (flags6 & (RF6_SPECIAL)) {vp[vn] = "do something";color[vn++] = TERM_VIOLET;}
986 /* Describe inate attacks */
991 hooked_roff(format("%^s¤Ï", wd_he[msex]));
993 hooked_roff(format("%^s", wd_he[msex]));
998 for (n = 0; n < vn; n++)
1002 jverb(vp[n],jverb_buf,JVERB_OR);
1003 hook_c_roff(color[n], jverb_buf);
1004 hook_c_roff(color[n], "¤ê¡¢");
1006 else hook_c_roff(color[n], vp[n]);
1009 if (n == 0) hooked_roff(" may ");
1010 else if (n < vn-1) hooked_roff(", ");
1011 else hooked_roff(" or ");
1014 hook_c_roff(color[n], vp[n]);
1021 hooked_roff("¤³¤È¤¬¤¢¤ë¡£");
1029 /* Collect breaths */
1032 if (flags4 & (RF4_BR_ACID)) {vp[vn] = "»À";color[vn++] = TERM_GREEN;}
1034 if (flags4 & (RF4_BR_ACID)) {vp[vn] = "acid";color[vn++] = TERM_GREEN;}
1038 if (flags4 & (RF4_BR_ELEC)) {vp[vn] = "°ðºÊ";color[vn++] = TERM_BLUE;}
1040 if (flags4 & (RF4_BR_ELEC)) {vp[vn] = "lightning";color[vn++] = TERM_BLUE;}
1044 if (flags4 & (RF4_BR_FIRE)) {vp[vn] = "²Ð±ê";color[vn++] = TERM_RED;}
1046 if (flags4 & (RF4_BR_FIRE)) {vp[vn] = "fire";color[vn++] = TERM_RED;}
1050 if (flags4 & (RF4_BR_COLD)) {vp[vn] = "Î䵤";color[vn++] = TERM_L_WHITE;}
1052 if (flags4 & (RF4_BR_COLD)) {vp[vn] = "frost";color[vn++] = TERM_L_WHITE;}
1056 if (flags4 & (RF4_BR_POIS)) {vp[vn] = "ÆÇ";color[vn++] = TERM_L_GREEN;}
1058 if (flags4 & (RF4_BR_POIS)) {vp[vn] = "poison";color[vn++] = TERM_L_GREEN;}
1062 if (flags4 & (RF4_BR_NETH)) {vp[vn] = "ÃϹö";color[vn++] = TERM_L_DARK;}
1064 if (flags4 & (RF4_BR_NETH)) {vp[vn] = "nether";color[vn++] = TERM_L_DARK;}
1068 if (flags4 & (RF4_BR_LITE)) {vp[vn] = "Á®¸÷";color[vn++] = TERM_YELLOW;}
1070 if (flags4 & (RF4_BR_LITE)) {vp[vn] = "light";color[vn++] = TERM_YELLOW;}
1074 if (flags4 & (RF4_BR_DARK)) {vp[vn] = "°Å¹õ";color[vn++] = TERM_L_DARK;}
1076 if (flags4 & (RF4_BR_DARK)) {vp[vn] = "darkness";color[vn++] = TERM_L_DARK;}
1080 if (flags4 & (RF4_BR_CONF)) {vp[vn] = "º®Íð";color[vn++] = TERM_L_UMBER;}
1082 if (flags4 & (RF4_BR_CONF)) {vp[vn] = "confusion";color[vn++] = TERM_L_UMBER;}
1086 if (flags4 & (RF4_BR_SOUN)) {vp[vn] = "¹ì²»";color[vn++] = TERM_ORANGE;}
1088 if (flags4 & (RF4_BR_SOUN)) {vp[vn] = "sound";color[vn++] = TERM_ORANGE;}
1092 if (flags4 & (RF4_BR_CHAO)) {vp[vn] = "¥«¥ª¥¹";color[vn++] = TERM_VIOLET;}
1094 if (flags4 & (RF4_BR_CHAO)) {vp[vn] = "chaos";color[vn++] = TERM_VIOLET;}
1098 if (flags4 & (RF4_BR_DISE)) {vp[vn] = "Îô²½";color[vn++] = TERM_VIOLET;}
1100 if (flags4 & (RF4_BR_DISE)) {vp[vn] = "disenchantment";color[vn++] = TERM_VIOLET;}
1104 if (flags4 & (RF4_BR_NEXU)) {vp[vn] = "°ø²Ìº®Íð";color[vn++] = TERM_VIOLET;}
1106 if (flags4 & (RF4_BR_NEXU)) {vp[vn] = "nexus";color[vn++] = TERM_VIOLET;}
1110 if (flags4 & (RF4_BR_TIME)) {vp[vn] = "»þ´ÖµÕž";color[vn++] = TERM_L_BLUE;}
1112 if (flags4 & (RF4_BR_TIME)) {vp[vn] = "time";color[vn++] = TERM_L_BLUE;}
1116 if (flags4 & (RF4_BR_INER)) {vp[vn] = "ÃÙÆß";color[vn++] = TERM_SLATE;}
1118 if (flags4 & (RF4_BR_INER)) {vp[vn] = "inertia";color[vn++] = TERM_SLATE;}
1122 if (flags4 & (RF4_BR_GRAV)) {vp[vn] = "½ÅÎÏ";color[vn++] = TERM_SLATE;}
1124 if (flags4 & (RF4_BR_GRAV)) {vp[vn] = "gravity";color[vn++] = TERM_SLATE;}
1128 if (flags4 & (RF4_BR_SHAR)) {vp[vn] = "ÇËÊÒ";color[vn++] = TERM_L_UMBER;}
1130 if (flags4 & (RF4_BR_SHAR)) {vp[vn] = "shards";color[vn++] = TERM_L_UMBER;}
1134 if (flags4 & (RF4_BR_PLAS)) {vp[vn] = "¥×¥é¥º¥Þ";color[vn++] = TERM_L_RED;}
1136 if (flags4 & (RF4_BR_PLAS)) {vp[vn] = "plasma";color[vn++] = TERM_L_RED;}
1140 if (flags4 & (RF4_BR_WALL)) {vp[vn] = "¥Õ¥©¡¼¥¹";color[vn++] = TERM_UMBER;}
1142 if (flags4 & (RF4_BR_WALL)) {vp[vn] = "force";color[vn++] = TERM_UMBER;}
1146 if (flags4 & (RF4_BR_MANA)) {vp[vn] = "ËâÎÏ";color[vn++] = TERM_L_BLUE;}
1148 if (flags4 & (RF4_BR_MANA)) {vp[vn] = "mana";color[vn++] = TERM_L_BLUE;}
1152 if (flags4 & (RF4_BR_NUKE)) {vp[vn] = "Êü¼ÍÀÇÑ´þʪ";color[vn++] = TERM_L_GREEN;}
1154 if (flags4 & (RF4_BR_NUKE)) {vp[vn] = "toxic waste";color[vn++] = TERM_L_GREEN;}
1158 if (flags4 & (RF4_BR_DISI)) {vp[vn] = "ʬ²ò";color[vn++] = TERM_SLATE;}
1160 if (flags4 & (RF4_BR_DISI)) {vp[vn] = "disintegration";color[vn++] = TERM_SLATE;}
1164 /* Describe breaths */
1172 hooked_roff(format("%^s¤Ï", wd_he[msex]));
1174 hooked_roff(format("%^s", wd_he[msex]));
1179 for (n = 0; n < vn; n++)
1183 if ( n != 0 ) hooked_roff("¤ä");
1185 if (n == 0) hooked_roff(" may breathe ");
1186 else if (n < vn-1) hooked_roff(", ");
1187 else hooked_roff(" or ");
1192 hook_c_roff(color[n], vp[n]);
1195 hooked_roff("¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤¬¤¢¤ë");
1200 /* Collect spells */
1203 if (flags5 & (RF5_BA_ACID)) {vp[vn] = "¥¢¥·¥Ã¥É¡¦¥Ü¡¼¥ë";color[vn++] = TERM_GREEN;}
1205 if (flags5 & (RF5_BA_ACID)) {vp[vn] = "produce acid balls";color[vn++] = TERM_GREEN;}
1209 if (flags5 & (RF5_BA_ELEC)) {vp[vn] = "¥µ¥ó¥À¡¼¡¦¥Ü¡¼¥ë";color[vn++] = TERM_BLUE;}
1211 if (flags5 & (RF5_BA_ELEC)) {vp[vn] = "produce lightning balls";color[vn++] = TERM_BLUE;}
1215 if (flags5 & (RF5_BA_FIRE)) {vp[vn] = "¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë";color[vn++] = TERM_RED;}
1217 if (flags5 & (RF5_BA_FIRE)) {vp[vn] = "produce fire balls";color[vn++] = TERM_RED;}
1221 if (flags5 & (RF5_BA_COLD)) {vp[vn] = "¥¢¥¤¥¹¡¦¥Ü¡¼¥ë";color[vn++] = TERM_L_WHITE;}
1223 if (flags5 & (RF5_BA_COLD)) {vp[vn] = "produce frost balls";color[vn++] = TERM_L_WHITE;}
1227 if (flags5 & (RF5_BA_POIS)) {vp[vn] = "°½±À";color[vn++] = TERM_L_GREEN;}
1229 if (flags5 & (RF5_BA_POIS)) {vp[vn] = "produce poison balls";color[vn++] = TERM_L_GREEN;}
1233 if (flags5 & (RF5_BA_NETH)) {vp[vn] = "ÃϹöµå";color[vn++] = TERM_L_DARK;}
1235 if (flags5 & (RF5_BA_NETH)) {vp[vn] = "produce nether balls";color[vn++] = TERM_L_DARK;}
1239 if (flags5 & (RF5_BA_WATE)) {vp[vn] = "¥¦¥©¡¼¥¿¡¼¡¦¥Ü¡¼¥ë";color[vn++] = TERM_BLUE;}
1241 if (flags5 & (RF5_BA_WATE)) {vp[vn] = "produce water balls";color[vn++] = TERM_BLUE;}
1245 if (flags4 & (RF4_BA_NUKE)) {vp[vn] = "Êü¼Íǽµå";color[vn++] = TERM_L_GREEN;}
1247 if (flags4 & (RF4_BA_NUKE)) {vp[vn] = "produce balls of radiation";color[vn++] = TERM_L_GREEN;}
1251 if (flags5 & (RF5_BA_MANA)) {vp[vn] = "ËâÎϤÎÍò";color[vn++] = TERM_L_BLUE;}
1253 if (flags5 & (RF5_BA_MANA)) {vp[vn] = "invoke mana storms";color[vn++] = TERM_L_BLUE;}
1257 if (flags5 & (RF5_BA_DARK)) {vp[vn] = "°Å¹õ¤ÎÍò";color[vn++] = TERM_L_DARK;}
1259 if (flags5 & (RF5_BA_DARK)) {vp[vn] = "invoke darkness storms";color[vn++] = TERM_L_DARK;}
1263 if (flags5 & (RF5_BA_LITE)) {vp[vn] = "¥¹¥¿¡¼¥Ð¡¼¥¹¥È";color[vn++] = TERM_YELLOW;}
1265 if (flags5 & (RF5_BA_LITE)) {vp[vn] = "invoke starburst";color[vn++] = TERM_YELLOW;}
1269 if (flags4 & (RF4_BA_CHAO)) {vp[vn] = "½ã¥í¥°¥ë¥¹";color[vn++] = TERM_VIOLET;}
1271 if (flags4 & (RF4_BA_CHAO)) {vp[vn] = "invoke raw Logrus";color[vn++] = TERM_VIOLET;}
1275 if (flags6 & (RF6_HAND_DOOM)) {vp[vn] = "ÇËÌǤμê";color[vn++] = TERM_VIOLET;}
1277 if (flags6 & (RF6_HAND_DOOM)) {vp[vn] = "invoke the Hand of Doom";color[vn++] = TERM_VIOLET;}
1281 if (flags6 & (RF6_PSY_SPEAR)) {vp[vn] = "¸÷¤Î·õ";color[vn++] = TERM_YELLOW;}
1283 if (flags6 & (RF6_PSY_SPEAR)) {vp[vn] = "psycho-spear";color[vn++] = TERM_YELLOW;}
1287 if (flags5 & (RF5_DRAIN_MANA)) {vp[vn] = "ËâÎϵۼý";color[vn++] = TERM_SLATE;}
1289 if (flags5 & (RF5_DRAIN_MANA)) {vp[vn] = "drain mana";color[vn++] = TERM_SLATE;}
1293 if (flags5 & (RF5_MIND_BLAST)) {vp[vn] = "Àº¿À¹¶·â";color[vn++] = TERM_L_RED;}
1295 if (flags5 & (RF5_MIND_BLAST)) {vp[vn] = "cause mind blasting";color[vn++] = TERM_L_RED;}
1299 if (flags5 & (RF5_BRAIN_SMASH)) {vp[vn] = "Ǿ¹¶·â";color[vn++] = TERM_RED;}
1301 if (flags5 & (RF5_BRAIN_SMASH)) {vp[vn] = "cause brain smashing";color[vn++] = TERM_RED;}
1305 if (flags5 & (RF5_CAUSE_1)) {vp[vn] = "·Ú½ý¡Ü¼ö¤¤";color[vn++] = TERM_L_WHITE;}
1307 if (flags5 & (RF5_CAUSE_1)) {vp[vn] = "cause light wounds and cursing";color[vn++] = TERM_L_WHITE;}
1311 if (flags5 & (RF5_CAUSE_2)) {vp[vn] = "½Å½ý¡Ü¼ö¤¤";color[vn++] = TERM_L_WHITE;}
1313 if (flags5 & (RF5_CAUSE_2)) {vp[vn] = "cause serious wounds and cursing";color[vn++] = TERM_L_WHITE;}
1317 if (flags5 & (RF5_CAUSE_3)) {vp[vn] = "Ã×Ì¿½ý¡Ü¼ö¤¤";color[vn++] = TERM_L_WHITE;}
1319 if (flags5 & (RF5_CAUSE_3)) {vp[vn] = "cause critical wounds and cursing";color[vn++] = TERM_L_WHITE;}
1323 if (flags5 & (RF5_CAUSE_4)) {vp[vn] = "È빦¤òÆͤ¯";color[vn++] = TERM_L_WHITE;}
1325 if (flags5 & (RF5_CAUSE_4)) {vp[vn] = "cause mortal wounds";color[vn++] = TERM_L_WHITE;}
1329 if (flags5 & (RF5_BO_ACID)) {vp[vn] = "¥¢¥·¥Ã¥É¡¦¥Ü¥ë¥È";color[vn++] = TERM_GREEN;}
1331 if (flags5 & (RF5_BO_ACID)) {vp[vn] = "produce acid bolts";color[vn++] = TERM_GREEN;}
1335 if (flags5 & (RF5_BO_ELEC)) {vp[vn] = "¥µ¥ó¥À¡¼¡¦¥Ü¥ë¥È";color[vn++] = TERM_BLUE;}
1337 if (flags5 & (RF5_BO_ELEC)) {vp[vn] = "produce lightning bolts";color[vn++] = TERM_BLUE;}
1341 if (flags5 & (RF5_BO_FIRE)) {vp[vn] = "¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È";color[vn++] = TERM_RED;}
1343 if (flags5 & (RF5_BO_FIRE)) {vp[vn] = "produce fire bolts";color[vn++] = TERM_RED;}
1347 if (flags5 & (RF5_BO_COLD)) {vp[vn] = "¥¢¥¤¥¹¡¦¥Ü¥ë¥È";color[vn++] = TERM_L_WHITE;}
1349 if (flags5 & (RF5_BO_COLD)) {vp[vn] = "produce frost bolts";color[vn++] = TERM_L_WHITE;}
1353 if (flags5 & (RF5_BO_NETH)) {vp[vn] = "ÃϹö¤ÎÌð";color[vn++] = TERM_L_DARK;}
1355 if (flags5 & (RF5_BO_NETH)) {vp[vn] = "produce nether bolts";color[vn++] = TERM_L_DARK;}
1359 if (flags5 & (RF5_BO_WATE)) {vp[vn] = "¥¦¥©¡¼¥¿¡¼¡¦¥Ü¥ë¥È";color[vn++] = TERM_BLUE;}
1361 if (flags5 & (RF5_BO_WATE)) {vp[vn] = "produce water bolts";color[vn++] = TERM_BLUE;}
1365 if (flags5 & (RF5_BO_MANA)) {vp[vn] = "ËâÎϤÎÌð";color[vn++] = TERM_L_BLUE;}
1367 if (flags5 & (RF5_BO_MANA)) {vp[vn] = "produce mana bolts";color[vn++] = TERM_L_BLUE;}
1371 if (flags5 & (RF5_BO_PLAS)) {vp[vn] = "¥×¥é¥º¥Þ¡¦¥Ü¥ë¥È";color[vn++] = TERM_L_RED;}
1373 if (flags5 & (RF5_BO_PLAS)) {vp[vn] = "produce plasma bolts";color[vn++] = TERM_L_RED;}
1377 if (flags5 & (RF5_BO_ICEE)) {vp[vn] = "¶Ë´¨¤ÎÌð";color[vn++] = TERM_WHITE;}
1379 if (flags5 & (RF5_BO_ICEE)) {vp[vn] = "produce ice bolts";color[vn++] = TERM_WHITE;}
1383 if (flags5 & (RF5_MISSILE)) {vp[vn] = "¥Þ¥¸¥Ã¥¯¥ß¥µ¥¤¥ë";color[vn++] = TERM_SLATE;}
1385 if (flags5 & (RF5_MISSILE)) {vp[vn] = "produce magic missiles";color[vn++] = TERM_SLATE;}
1389 if (flags5 & (RF5_SCARE)) {vp[vn] = "¶²ÉÝ";color[vn++] = TERM_SLATE;}
1391 if (flags5 & (RF5_SCARE)) {vp[vn] = "terrify";color[vn++] = TERM_SLATE;}
1395 if (flags5 & (RF5_BLIND)) {vp[vn] = "Ìܤ¯¤é¤Þ¤·";color[vn++] = TERM_L_DARK;}
1397 if (flags5 & (RF5_BLIND)) {vp[vn] = "blind";color[vn++] = TERM_L_DARK;}
1401 if (flags5 & (RF5_CONF)) {vp[vn] = "º®Íð";color[vn++] = TERM_L_UMBER;}
1403 if (flags5 & (RF5_CONF)) {vp[vn] = "confuse";color[vn++] = TERM_L_UMBER;}
1407 if (flags5 & (RF5_SLOW)) {vp[vn] = "¸ºÂ®";color[vn++] = TERM_UMBER;}
1409 if (flags5 & (RF5_SLOW)) {vp[vn] = "slow";color[vn++] = TERM_UMBER;}
1413 if (flags5 & (RF5_HOLD)) {vp[vn] = "Ëãáã";color[vn++] = TERM_RED;}
1415 if (flags5 & (RF5_HOLD)) {vp[vn] = "paralyze";color[vn++] = TERM_RED;}
1419 if (flags6 & (RF6_HASTE)) {vp[vn] = "²Ã®";color[vn++] = TERM_L_GREEN;}
1421 if (flags6 & (RF6_HASTE)) {vp[vn] = "haste-self";color[vn++] = TERM_L_GREEN;}
1425 if (flags6 & (RF6_HEAL)) {vp[vn] = "¼£Ìþ";color[vn++] = TERM_WHITE;}
1427 if (flags6 & (RF6_HEAL)) {vp[vn] = "heal-self";color[vn++] = TERM_WHITE;}
1431 if (flags6 & (RF6_INVULNER)) {vp[vn] = "̵Ũ²½";color[vn++] = TERM_WHITE;}
1433 if (flags6 & (RF6_INVULNER)) {vp[vn] = "make invulnerable";color[vn++] = TERM_WHITE;}
1437 if (flags4 & RF4_DISPEL) {vp[vn] = "ËâÎϾõî";color[vn++] = TERM_L_WHITE;}
1439 if (flags4 & RF4_DISPEL) {vp[vn] = "dispel-magic";color[vn++] = TERM_L_WHITE;}
1443 if (flags6 & (RF6_BLINK)) {vp[vn] = "¥·¥ç¡¼¥È¥Æ¥ì¥Ý¡¼¥È";color[vn++] = TERM_UMBER;}
1445 if (flags6 & (RF6_BLINK)) {vp[vn] = "blink-self";color[vn++] = TERM_UMBER;}
1449 if (flags6 & (RF6_TPORT)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È";color[vn++] = TERM_ORANGE;}
1451 if (flags6 & (RF6_TPORT)) {vp[vn] = "teleport-self";color[vn++] = TERM_ORANGE;}
1455 if (flags6 & (RF6_WORLD)) {vp[vn] = "»þ¤ò»ß¤á¤ë";color[vn++] = TERM_L_BLUE;}
1457 if (flags6 & (RF6_WORLD)) {vp[vn] = "stop the time";color[vn++] = TERM_L_BLUE;}
1461 if (flags6 & (RF6_TELE_TO)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È¥Ð¥Ã¥¯";color[vn++] = TERM_L_UMBER;}
1463 if (flags6 & (RF6_TELE_TO)) {vp[vn] = "teleport to";color[vn++] = TERM_L_UMBER;}
1467 if (flags6 & (RF6_TELE_AWAY)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È¥¢¥¦¥§¥¤";color[vn++] = TERM_UMBER;}
1469 if (flags6 & (RF6_TELE_AWAY)) {vp[vn] = "teleport away";color[vn++] = TERM_UMBER;}
1473 if (flags6 & (RF6_TELE_LEVEL)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È¡¦¥ì¥Ù¥ë";color[vn++] = TERM_ORANGE;}
1475 if (flags6 & (RF6_TELE_LEVEL)) {vp[vn] = "teleport level";color[vn++] = TERM_ORANGE;}
1479 if (flags6 & (RF6_DARKNESS)) {if ((p_ptr->pclass != CLASS_NINJA) || (flags3 & (RF3_UNDEAD | RF3_HURT_LITE))) {vp[vn] = "°Å°Ç";color[vn++] = TERM_L_DARK;} else { vp[vn] = "Á®¸÷";color[vn++] = TERM_YELLOW;}}
1481 if (flags6 & (RF6_DARKNESS)) {vp[vn] = ((p_ptr->pclass != CLASS_NINJA) || (flags3 & (RF3_UNDEAD | RF3_HURT_LITE))) ? "create darkness" : "create light";color[vn++] = TERM_L_DARK;}
1485 if (flags6 & (RF6_TRAPS)) {vp[vn] = "¥È¥é¥Ã¥×";color[vn++] = TERM_BLUE;}
1487 if (flags6 & (RF6_TRAPS)) {vp[vn] = "create traps";color[vn++] = TERM_BLUE;}
1491 if (flags6 & (RF6_FORGET)) {vp[vn] = "µ²±¾Ãµî";color[vn++] = TERM_BLUE;}
1493 if (flags6 & (RF6_FORGET)) {vp[vn] = "cause amnesia";color[vn++] = TERM_BLUE;}
1497 if (flags6 & (RF6_RAISE_DEAD)) {vp[vn] = "»à¼ÔÉü³è";color[vn++] = TERM_RED;}
1499 if (flags6 & (RF6_RAISE_DEAD)) {vp[vn] = "raise dead";color[vn++] = TERM_RED;}
1503 if (flags6 & (RF6_S_MONSTER)) {vp[vn] = "¥â¥ó¥¹¥¿¡¼°ìÂξ¤´";color[vn++] = TERM_SLATE;}
1505 if (flags6 & (RF6_S_MONSTER)) {vp[vn] = "summon a monster";color[vn++] = TERM_SLATE;}
1509 if (flags6 & (RF6_S_MONSTERS)) {vp[vn] = "¥â¥ó¥¹¥¿¡¼Ê£¿ô¾¤´";color[vn++] = TERM_L_WHITE;}
1511 if (flags6 & (RF6_S_MONSTERS)) {vp[vn] = "summon monsters";color[vn++] = TERM_L_WHITE;}
1515 if (flags6 & (RF6_S_KIN)) {vp[vn] = "µß±ç¾¤´";color[vn++] = TERM_ORANGE;}
1517 if (flags6 & (RF6_S_KIN)) {vp[vn] = "summon aid";color[vn++] = TERM_ORANGE;}
1521 if (flags6 & (RF6_S_ANT)) {vp[vn] = "¥¢¥ê¾¤´";color[vn++] = TERM_RED;}
1523 if (flags6 & (RF6_S_ANT)) {vp[vn] = "summon ants";color[vn++] = TERM_RED;}
1527 if (flags6 & (RF6_S_SPIDER)) {vp[vn] = "¥¯¥â¾¤´";color[vn++] = TERM_L_DARK;}
1529 if (flags6 & (RF6_S_SPIDER)) {vp[vn] = "summon spiders";color[vn++] = TERM_L_DARK;}
1533 if (flags6 & (RF6_S_HOUND)) {vp[vn] = "¥Ï¥¦¥ó¥É¾¤´";color[vn++] = TERM_L_UMBER;}
1535 if (flags6 & (RF6_S_HOUND)) {vp[vn] = "summon hounds";color[vn++] = TERM_L_UMBER;}
1539 if (flags6 & (RF6_S_HYDRA)) {vp[vn] = "¥Ò¥É¥é¾¤´";color[vn++] = TERM_L_GREEN;}
1541 if (flags6 & (RF6_S_HYDRA)) {vp[vn] = "summon hydras";color[vn++] = TERM_L_GREEN;}
1545 if (flags6 & (RF6_S_ANGEL)) {vp[vn] = "Å·»È°ìÂξ¤´";color[vn++] = TERM_YELLOW;}
1547 if (flags6 & (RF6_S_ANGEL)) {vp[vn] = "summon an angel";color[vn++] = TERM_YELLOW;}
1551 if (flags6 & (RF6_S_DEMON)) {vp[vn] = "¥Ç¡¼¥â¥ó°ìÂξ¤´";color[vn++] = TERM_L_RED;}
1553 if (flags6 & (RF6_S_DEMON)) {vp[vn] = "summon a demon";color[vn++] = TERM_L_RED;}
1557 if (flags6 & (RF6_S_UNDEAD)) {vp[vn] = "¥¢¥ó¥Ç¥Ã¥É°ìÂξ¤´";color[vn++] = TERM_L_DARK;}
1559 if (flags6 & (RF6_S_UNDEAD)) {vp[vn] = "summon an undead";color[vn++] = TERM_L_DARK;}
1563 if (flags6 & (RF6_S_DRAGON)) {vp[vn] = "¥É¥é¥´¥ó°ìÂξ¤´";color[vn++] = TERM_ORANGE;}
1565 if (flags6 & (RF6_S_DRAGON)) {vp[vn] = "summon a dragon";color[vn++] = TERM_ORANGE;}
1569 if (flags6 & (RF6_S_HI_UNDEAD)) {vp[vn] = "¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¾¤´";color[vn++] = TERM_L_DARK;}
1571 if (flags6 & (RF6_S_HI_UNDEAD)) {vp[vn] = "summon Greater Undead";color[vn++] = TERM_L_DARK;}
1575 if (flags6 & (RF6_S_HI_DRAGON)) {vp[vn] = "¸ÅÂå¥É¥é¥´¥ó¾¤´";color[vn++] = TERM_ORANGE;}
1577 if (flags6 & (RF6_S_HI_DRAGON)) {vp[vn] = "summon Ancient Dragons";color[vn++] = TERM_ORANGE;}
1581 if (flags6 & (RF6_S_CYBER)) {vp[vn] = "¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¾¤´";color[vn++] = TERM_UMBER;}
1583 if (flags6 & (RF6_S_CYBER)) {vp[vn] = "summon Cyberdemons";color[vn++] = TERM_UMBER;}
1587 if (flags6 & (RF6_S_AMBERITES)) {vp[vn] = "¥¢¥ó¥Ð¡¼¤Î²¦Â²¾¤´";color[vn++] = TERM_VIOLET;}
1589 if (flags6 & (RF6_S_AMBERITES)) {vp[vn] = "summon Lords of Amber";color[vn++] = TERM_VIOLET;}
1593 if (flags6 & (RF6_S_UNIQUE)) {vp[vn] = "¥æ¥Ë¡¼¥¯¡¦¥â¥ó¥¹¥¿¡¼¾¤´";color[vn++] = TERM_VIOLET;}
1595 if (flags6 & (RF6_S_UNIQUE)) {vp[vn] = "summon Unique Monsters";color[vn++] = TERM_VIOLET;}
1599 /* Describe spells */
1609 hooked_roff("¡¢¤Ê¤ª¤«¤Ä");
1611 hooked_roff(", and is also");
1618 hooked_roff(format("%^s¤Ï", wd_he[msex]));
1620 hooked_roff(format("%^s is", wd_he[msex]));
1627 if (flags2 & (RF2_SMART)) hook_c_roff(TERM_YELLOW, "Ū³Î¤Ë");
1630 hooked_roff("ËâË¡¤ò»È¤¦¤³¤È¤¬¤Ç¤¡¢");
1633 hooked_roff(" magical, casting spells");
1636 if (flags2 & RF2_SMART) hook_c_roff(TERM_YELLOW, " intelligently");
1641 for (n = 0; n < vn; n++)
1645 if ( n != 0 ) hooked_roff("¡¢");
1647 if (n == 0) hooked_roff(" which ");
1648 else if (n < vn-1) hooked_roff(", ");
1649 else hooked_roff(" or ");
1654 hook_c_roff(color[n], vp[n]);
1657 hooked_roff("¤Î¼öʸ¤ò¾§¤¨¤ë¤³¤È¤¬¤¢¤ë");
1662 /* End the sentence about inate/other spells */
1663 if (breath || magic)
1666 m = r_ptr->r_cast_spell;
1668 /* Average frequency */
1669 n = r_ptr->freq_spell;
1671 /* Describe the spell frequency */
1672 if (m > 100 || know_everything)
1675 hooked_roff(format("(³ÎΨ:1/%d)", 100 / n));
1677 hooked_roff(format("; 1 time in %d", 100 / n));
1682 /* Guess at the frequency */
1685 n = ((n + 9) / 10) * 10;
1687 hooked_roff(format("(³ÎΨ:Ìó1/%d)", 100 / n));
1689 hooked_roff(format("; about 1 time in %d", 100 / n));
1694 /* End this sentence */
1703 /* Describe monster "toughness" */
1704 if (know_armour(r_idx))
1708 hooked_roff(format("%^s¤Ï AC%d ¤ÎËɸæÎϤÈ",
1710 hooked_roff(format("%^s has an armor rating of %d",
1713 wd_he[msex], r_ptr->ac));
1715 /* Maximized hitpoints */
1716 if (flags1 & RF1_FORCE_MAXHP)
1719 hooked_roff(format(" %d ¤ÎÂÎÎϤ¬¤¢¤ë¡£",
1721 hooked_roff(format(" and a life rating of %d. ",
1724 r_ptr->hdice * r_ptr->hside));
1727 /* Variable hitpoints */
1731 hooked_roff(format(" %dd%d ¤ÎÂÎÎϤ¬¤¢¤ë¡£",
1733 hooked_roff(format(" and a life rating of %dd%d. ",
1736 r_ptr->hdice, r_ptr->hside));
1742 /* Collect special abilities. */
1745 if (flags7 & (RF7_HAS_LITE_1 | RF7_HAS_LITE_2)) vp[vn++] = "¥À¥ó¥¸¥ç¥ó¤ò¾È¤é¤¹";
1747 if (flags7 & (RF7_HAS_LITE_1 | RF7_HAS_LITE_2)) vp[vn++] = "illuminate the dungeon";
1751 if (flags2 & RF2_OPEN_DOOR) vp[vn++] = "¥É¥¢¤ò³«¤±¤ë";
1753 if (flags2 & RF2_OPEN_DOOR) vp[vn++] = "open doors";
1757 if (flags2 & RF2_BASH_DOOR) vp[vn++] = "¥É¥¢¤òÂǤÁÇˤë";
1759 if (flags2 & RF2_BASH_DOOR) vp[vn++] = "bash down doors";
1763 if (flags2 & RF2_PASS_WALL) vp[vn++] = "Êɤò¤¹¤êÈ´¤±¤ë";
1765 if (flags2 & RF2_PASS_WALL) vp[vn++] = "pass through walls";
1769 if (flags2 & RF2_KILL_WALL) vp[vn++] = "Êɤò·¡¤ê¿Ê¤à";
1771 if (flags2 & RF2_KILL_WALL) vp[vn++] = "bore through walls";
1775 if (flags2 & RF2_MOVE_BODY) vp[vn++] = "¼å¤¤¥â¥ó¥¹¥¿¡¼¤ò²¡¤·¤Î¤±¤ë";
1777 if (flags2 & RF2_MOVE_BODY) vp[vn++] = "push past weaker monsters";
1781 if (flags2 & RF2_KILL_BODY) vp[vn++] = "¼å¤¤¥â¥ó¥¹¥¿¡¼¤òÅݤ¹";
1783 if (flags2 & RF2_KILL_BODY) vp[vn++] = "destroy weaker monsters";
1787 if (flags2 & RF2_TAKE_ITEM) vp[vn++] = "¥¢¥¤¥Æ¥à¤ò½¦¤¦";
1789 if (flags2 & RF2_TAKE_ITEM) vp[vn++] = "pick up objects";
1793 if (flags2 & RF2_KILL_ITEM) vp[vn++] = "¥¢¥¤¥Æ¥à¤ò²õ¤¹";
1795 if (flags2 & RF2_KILL_ITEM) vp[vn++] = "destroy objects";
1799 /* Describe special abilities. */
1804 hooked_roff(format("%^s¤Ï", wd_he[msex]));
1806 hooked_roff(format("%^s", wd_he[msex]));
1811 for (n = 0; n < vn; n++)
1816 jverb(vp[n],jverb_buf,JVERB_AND);
1817 hooked_roff(jverb_buf);
1820 else hooked_roff(vp[n]);
1822 if (n == 0) hooked_roff(" can ");
1823 else if (n < vn-1) hooked_roff(", ");
1824 else hooked_roff(" and ");
1834 hooked_roff("¤³¤È¤¬¤Ç¤¤ë¡£");
1842 /* Describe special abilities. */
1843 if (flags7 & (RF7_SELF_LITE_1 | RF7_SELF_LITE_2))
1846 hooked_roff(format("%^s¤Ï¸÷¤Ã¤Æ¤¤¤ë¡£", wd_he[msex]));
1848 hooked_roff(format("%^s illuminate the dungeon. ", wd_he[msex]));
1852 if (flags2 & RF2_INVISIBLE)
1855 hooked_roff(format("%^s¤ÏÆ©ÌÀ¤ÇÌܤ˸«¤¨¤Ê¤¤¡£", wd_he[msex]));
1857 hooked_roff(format("%^s is invisible. ", wd_he[msex]));
1861 if (flags2 & RF2_COLD_BLOOD)
1864 hooked_roff(format("%^s¤ÏÎä·ìưʪ¤Ç¤¢¤ë¡£", wd_he[msex]));
1866 hooked_roff(format("%^s is cold blooded. ", wd_he[msex]));
1870 if (flags2 & RF2_EMPTY_MIND)
1873 hooked_roff(format("%^s¤Ï¥Æ¥ì¥Ñ¥·¡¼¤Ç¤Ï´¶ÃΤǤ¤Ê¤¤¡£", wd_he[msex]));
1875 hooked_roff(format("%^s is not detected by telepathy. ", wd_he[msex]));
1879 else if (flags2 & RF2_WEIRD_MIND)
1882 hooked_roff(format("%^s¤Ï¤Þ¤ì¤Ë¥Æ¥ì¥Ñ¥·¡¼¤Ç´¶ÃΤǤ¤ë¡£", wd_he[msex]));
1884 hooked_roff(format("%^s is rarely detected by telepathy. ", wd_he[msex]));
1888 if (flags2 & RF2_MULTIPLY)
1891 hook_c_roff(TERM_L_UMBER, format("%^s¤ÏÇúȯŪ¤ËÁý¿£¤¹¤ë¡£", wd_he[msex]));
1893 hook_c_roff(TERM_L_UMBER, format("%^s breeds explosively. ", wd_he[msex]));
1897 if (flags2 & RF2_REGENERATE)
1900 hook_c_roff(TERM_L_WHITE, format("%^s¤ÏÁÇÁ᤯ÂÎÎϤò²óÉü¤¹¤ë¡£", wd_he[msex]));
1902 hook_c_roff(TERM_L_WHITE, format("%^s regenerates quickly. ", wd_he[msex]));
1906 if (flags7 & RF7_RIDING)
1909 hook_c_roff(TERM_SLATE, format("%^s¤Ë¾è¤ë¤³¤È¤¬¤Ç¤¤ë¡£", wd_he[msex]));
1911 hook_c_roff(TERM_SLATE, format("%^s is suitable for riding. ", wd_he[msex]));
1917 /* Collect susceptibilities */
1920 if (flags3 & RF3_HURT_ROCK) {vp[vn] = "´ä¤ò½üµî¤¹¤ë¤â¤Î";color[vn++] = TERM_UMBER;}
1922 if (flags3 & RF3_HURT_ROCK) {vp[vn] = "rock remover";color[vn++] = TERM_UMBER;}
1926 if (flags3 & RF3_HURT_LITE) {vp[vn] = "ÌÀ¤ë¤¤¸÷";color[vn++] = TERM_YELLOW;}
1928 if (flags3 & RF3_HURT_LITE) {vp[vn] = "bright light";color[vn++] = TERM_YELLOW;}
1932 if (flags3 & RF3_HURT_FIRE) {vp[vn] = "±ê";color[vn++] = TERM_RED;}
1934 if (flags3 & RF3_HURT_FIRE) {vp[vn] = "fire";color[vn++] = TERM_RED;}
1938 if (flags3 & RF3_HURT_COLD) {vp[vn] = "Î䵤";color[vn++] = TERM_L_WHITE;}
1940 if (flags3 & RF3_HURT_COLD) {vp[vn] = "cold";color[vn++] = TERM_L_WHITE;}
1944 /* Describe susceptibilities */
1949 hooked_roff(format("%^s¤Ë¤Ï", wd_he[msex]));
1951 hooked_roff(format("%^s", wd_he[msex]));
1956 for (n = 0; n < vn; n++)
1960 if ( n != 0 ) hooked_roff("¤ä");
1962 if (n == 0) hooked_roff(" is hurt by ");
1963 else if (n < vn-1) hooked_roff(", ");
1964 else hooked_roff(" and ");
1969 hook_c_roff(color[n], vp[n]);
1974 hooked_roff("¤Ç¥À¥á¡¼¥¸¤òÍ¿¤¨¤é¤ì¤ë¡£");
1982 /* Collect immunities */
1985 if (flags3 & RF3_IM_ACID) {vp[vn] = "»À";color[vn++] = TERM_GREEN;}
1987 if (flags3 & RF3_IM_ACID) {vp[vn] = "acid";color[vn++] = TERM_GREEN;}
1991 if (flags3 & RF3_IM_ELEC) {vp[vn] = "°ðºÊ";color[vn++] = TERM_BLUE;}
1993 if (flags3 & RF3_IM_ELEC) {vp[vn] = "lightning";color[vn++] = TERM_BLUE;}
1997 if (flags3 & RF3_IM_FIRE) {vp[vn] = "±ê";color[vn++] = TERM_RED;}
1999 if (flags3 & RF3_IM_FIRE) {vp[vn] = "fire";color[vn++] = TERM_RED;}
2003 if (flags3 & RF3_IM_COLD) {vp[vn] = "Î䵤";color[vn++] = TERM_L_WHITE;}
2005 if (flags3 & RF3_IM_COLD) {vp[vn] = "cold";color[vn++] = TERM_L_WHITE;}
2009 if (flags3 & RF3_IM_POIS) {vp[vn] = "ÆÇ";color[vn++] = TERM_L_GREEN;}
2011 if (flags3 & RF3_IM_POIS) {vp[vn] = "poison";color[vn++] = TERM_L_GREEN;}
2015 /* Describe immunities */
2020 hooked_roff(format("%^s¤Ï", wd_he[msex]));
2022 hooked_roff(format("%^s", wd_he[msex]));
2027 for (n = 0; n < vn; n++)
2031 if ( n != 0 ) hooked_roff("¤È");
2033 if (n == 0) hooked_roff(" resists ");
2034 else if (n < vn-1) hooked_roff(", ");
2035 else hooked_roff(" and ");
2040 hook_c_roff(color[n], vp[n]);
2045 hooked_roff("¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£");
2053 /* Collect resistances */
2056 if (flags4 & RF4_BR_LITE) {vp[vn] = "Á®¸÷";color[vn++] = TERM_YELLOW;}
2058 if (flags4 & RF4_BR_LITE) {vp[vn] = "light";color[vn++] = TERM_YELLOW;}
2062 if ((flags4 & RF4_BR_DARK) || (flags3 & RF3_ORC)) {vp[vn] = "°Å¹õ";color[vn++] = TERM_L_DARK;}
2064 if (flags4 & RF4_BR_DARK || (flags3 & RF3_ORC)) {vp[vn] = "dark";color[vn++] = TERM_L_DARK;}
2068 if (flags3 & RF3_RES_NETH) {vp[vn] = "ÃϹö";color[vn++] = TERM_L_DARK;}
2070 if (flags3 & RF3_RES_NETH) {vp[vn] = "nether";color[vn++] = TERM_L_DARK;}
2074 if (flags3 & RF3_RES_WATE) {vp[vn] = "¿å";color[vn++] = TERM_BLUE;}
2076 if (flags3 & RF3_RES_WATE) {vp[vn] = "water";color[vn++] = TERM_BLUE;}
2080 if (flags3 & RF3_RES_PLAS) {vp[vn] = "¥×¥é¥º¥Þ";color[vn++] = TERM_L_RED;}
2082 if (flags3 & RF3_RES_PLAS) {vp[vn] = "plasma";color[vn++] = TERM_L_RED;}
2086 if (flags4 & RF4_BR_SHAR) {vp[vn] = "ÇËÊÒ";color[vn++] = TERM_L_UMBER;}
2088 if (flags4 & RF4_BR_SHAR) {vp[vn] = "shards";color[vn++] = TERM_L_UMBER;}
2092 if (flags4 & RF4_BR_SOUN) {vp[vn] = "¹ì²»";color[vn++] = TERM_ORANGE;}
2094 if (flags4 & RF4_BR_SOUN) {vp[vn] = "sound";color[vn++] = TERM_ORANGE;}
2098 if (flags4 & RF4_BR_CONF) {vp[vn] = "º®Íð";color[vn++] = TERM_L_UMBER;}
2100 if (flags4 & RF4_BR_CONF) {vp[vn] = "conf";color[vn++] = TERM_L_UMBER;}
2104 if ((flags4 & RF4_BR_CHAO) || (r_idx == MON_STORMBRINGER)) {vp[vn] = "¥«¥ª¥¹";color[vn++] = TERM_VIOLET;}
2106 if ((flags4 & RF4_BR_CHAO) || (r_idx == MON_STORMBRINGER)) {vp[vn] = "chaos";color[vn++] = TERM_VIOLET;}
2110 if (flags3 & RF3_RES_NEXU) {vp[vn] = "°ø²Ìº®Íð";color[vn++] = TERM_VIOLET;}
2112 if (flags3 & RF3_RES_NEXU) {vp[vn] = "nexus";color[vn++] = TERM_VIOLET;}
2116 if (flags3 & RF3_RES_DISE) {vp[vn] = "Îô²½";color[vn++] = TERM_VIOLET;}
2118 if (flags3 & RF3_RES_DISE) {vp[vn] = "disenchantment";color[vn++] = TERM_VIOLET;}
2122 if (flags4 & RF4_BR_WALL) {vp[vn] = "¥Õ¥©¡¼¥¹";color[vn++] = TERM_UMBER;}
2124 if (flags4 & RF4_BR_WALL) {vp[vn] = "sound";color[vn++] = TERM_UMBER;}
2128 if (flags4 & RF4_BR_INER) {vp[vn] = "ÃÙÆß";color[vn++] = TERM_SLATE;}
2130 if (flags4 & RF4_BR_INER) {vp[vn] = "inertia";color[vn++] = TERM_SLATE;}
2134 if (flags4 & RF4_BR_TIME) {vp[vn] = "»þ´ÖµÕž";color[vn++] = TERM_L_BLUE;}
2136 if (flags4 & RF4_BR_TIME) {vp[vn] = "time";color[vn++] = TERM_L_BLUE;}
2140 if (flags4 & RF4_BR_GRAV) {vp[vn] = "½ÅÎÏ";color[vn++] = TERM_SLATE;}
2142 if (flags4 & RF4_BR_GRAV) {vp[vn] = "gravity";color[vn++] = TERM_SLATE;}
2146 if (flags3 & RF3_RES_ALL) {vp[vn] = "¤¢¤é¤æ¤ë¹¶·â";color[vn++] = TERM_YELLOW;}
2148 if (flags3 & RF3_RES_ALL) {vp[vn] = "all";color[vn++] = TERM_YELLOW;}
2152 if ((flags3 & RF3_RES_TELE) && !(r_ptr->flags1 & RF1_UNIQUE)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È";color[vn++] = TERM_ORANGE;}
2154 if ((flags3 & RF3_RES_TELE) && !(r_ptr->flags1 & RF1_UNIQUE)) {vp[vn] = "teleportation";color[vn++] = TERM_ORANGE;}
2158 /* Describe resistances */
2163 hooked_roff(format("%^s¤Ï", wd_he[msex]));
2165 hooked_roff(format("%^s", wd_he[msex]));
2170 for (n = 0; n < vn; n++)
2174 if ( n != 0 ) hooked_roff("¤È");
2176 if (n == 0) hooked_roff(" resists ");
2177 else if (n < vn-1) hooked_roff(", ");
2178 else hooked_roff(" and ");
2183 hook_c_roff(color[n], vp[n]);
2188 hooked_roff("¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£");
2196 if ((r_ptr->r_xtra1 & MR1_SINKA) || know_everything)
2198 if (r_ptr->next_r_idx)
2201 hooked_roff(format("%^s¤Ï·Ð¸³¤òÀѤà¤È¡¢", wd_he[msex]));
2203 hooked_roff(format("%^s will evolve into ", wd_he[msex]));
2205 hook_c_roff(TERM_YELLOW, format("%s", r_name+r_info[r_ptr->next_r_idx].name));
2207 hooked_roff(format("¤Ë¿Ê²½¤¹¤ë¡£"));
2209 hooked_roff(format(" when %s gets enugh experience. ", wd_he[msex]));
2212 else if (!(r_ptr->flags1 & RF1_UNIQUE))
2215 hooked_roff(format("%s¤Ï¿Ê²½¤·¤Ê¤¤¡£", wd_he[msex]));
2217 hooked_roff(format("%s won't evolve. ", wd_he[msex]));
2222 /* Collect non-effects */
2225 if (flags3 & RF3_NO_STUN) {vp[vn] = "Û¯Û°¤È¤·¤Ê¤¤";color[vn++] = TERM_ORANGE;}
2227 if (flags3 & RF3_NO_STUN) {vp[vn] = "stunned";color[vn++] = TERM_ORANGE;}
2231 if (flags3 & RF3_NO_FEAR) {vp[vn] = "¶²Éݤò´¶¤¸¤Ê¤¤";color[vn++] = TERM_SLATE;}
2233 if (flags3 & RF3_NO_FEAR) {vp[vn] = "frightened";color[vn++] = TERM_SLATE;}
2237 if (flags3 & RF3_NO_CONF) {vp[vn] = "º®Í𤷤ʤ¤";color[vn++] = TERM_L_UMBER;}
2239 if (flags3 & RF3_NO_CONF) {vp[vn] = "confused";color[vn++] = TERM_L_UMBER;}
2243 if (flags3 & RF3_NO_SLEEP) {vp[vn] = "̲¤é¤µ¤ì¤Ê¤¤";color[vn++] = TERM_BLUE;}
2245 if (flags3 & RF3_NO_SLEEP) {vp[vn] = "slept";color[vn++] = TERM_BLUE;}
2249 if ((flags3 & RF3_RES_TELE) && (r_ptr->flags1 & RF1_UNIQUE)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È¤µ¤ì¤Ê¤¤";color[vn++] = TERM_ORANGE;}
2251 if ((flags3 & RF3_RES_TELE) && (r_ptr->flags1 & RF1_UNIQUE)) {vp[vn] = "teleported";color[vn++] = TERM_ORANGE;}
2254 /* Describe non-effects */
2259 hooked_roff(format("%^s¤Ï", wd_he[msex]));
2261 hooked_roff(format("%^s", wd_he[msex]));
2266 for (n = 0; n < vn; n++)
2270 if ( n != 0 ) hooked_roff("¤·¡¢");
2272 if (n == 0) hooked_roff(" cannot be ");
2273 else if (n < vn - 1) hooked_roff(", ");
2274 else hooked_roff(" or ");
2279 hook_c_roff(color[n], vp[n]);
2292 /* Do we know how aware it is? */
2293 if ((((int)r_ptr->r_wake * (int)r_ptr->r_wake) > r_ptr->sleep) ||
2294 (r_ptr->r_ignore == MAX_UCHAR) ||
2295 (r_ptr->sleep == 0 && r_ptr->r_tkills >= 10) || know_everything)
2299 if (r_ptr->sleep > 200)
2302 act = "¤ò̵»ë¤·¤¬¤Á¤Ç¤¢¤ë¤¬";
2304 act = "prefers to ignore";
2308 else if (r_ptr->sleep > 95)
2311 act = "¤ËÂФ·¤Æ¤Û¤È¤ó¤ÉÃí°Õ¤òʧ¤ï¤Ê¤¤¤¬";
2313 act = "pays very little attention to";
2317 else if (r_ptr->sleep > 75)
2320 act = "¤ËÂФ·¤Æ¤¢¤Þ¤êÃí°Õ¤òʧ¤ï¤Ê¤¤¤¬";
2322 act = "pays little attention to";
2326 else if (r_ptr->sleep > 45)
2329 act = "¤ò¸«²á¤´¤·¤¬¤Á¤Ç¤¢¤ë¤¬";
2331 act = "tends to overlook";
2335 else if (r_ptr->sleep > 25)
2338 act = "¤ò¤Û¤ó¤Î¾¯¤·¤Ï¸«¤Æ¤ª¤ê";
2340 act = "takes quite a while to see";
2344 else if (r_ptr->sleep > 10)
2347 act = "¤ò¤·¤Ð¤é¤¯¤Ï¸«¤Æ¤ª¤ê";
2349 act = "takes a while to see";
2353 else if (r_ptr->sleep > 5)
2356 act = "¤ò´öʬÃí°Õ¿¼¤¯¸«¤Æ¤ª¤ê";
2358 act = "is fairly observant of";
2362 else if (r_ptr->sleep > 3)
2365 act = "¤òÃí°Õ¿¼¤¯¸«¤Æ¤ª¤ê";
2367 act = "is observant of";
2371 else if (r_ptr->sleep > 1)
2374 act = "¤ò¤«¤Ê¤êÃí°Õ¿¼¤¯¸«¤Æ¤ª¤ê";
2376 act = "is very observant of";
2380 else if (r_ptr->sleep > 0)
2383 act = "¤ò·Ù²ü¤·¤Æ¤ª¤ê";
2385 act = "is vigilant for";
2392 act = "¤ò¤«¤Ê¤ê·Ù²ü¤·¤Æ¤ª¤ê";
2394 act = "is ever vigilant for";
2400 hooked_roff(format("%^s¤Ï¿¯Æþ¼Ô%s¡¢ %d ¥Õ¥£¡¼¥ÈÀ褫¤é¿¯Æþ¼Ô¤Ëµ¤ÉÕ¤¯¤³¤È¤¬¤¢¤ë¡£",
2401 wd_he[msex], act, 10 * r_ptr->aaf));
2403 hooked_roff(format("%^s %s intruders, which %s may notice from %d feet. ",
2404 wd_he[msex], act, wd_he[msex], 10 * r_ptr->aaf));
2410 /* Drops gold and/or items */
2411 if (drop_gold || drop_item)
2418 hooked_roff(format("%^s¤Ï", wd_he[msex]));
2420 hooked_roff(format("%^s may carry", wd_he[msex]));
2424 /* Count maximum drop */
2425 n = MAX(drop_gold, drop_item);
2427 /* One drop (may need an "n") */
2431 hooked_roff("°ì¤Ä¤Î");
2443 hooked_roff("°ì¤Ä¤«Æó¤Ä¤Î");
2445 hooked_roff(" one or two");
2454 hooked_roff(format(" %d ¸Ä¤Þ¤Ç¤Î", n));
2456 hooked_roff(format(" up to %d", n));
2463 if (flags1 & RF1_DROP_GREAT)
2473 /* Good (no "n" needed) */
2474 else if (flags1 & RF1_DROP_GOOD)
2495 /* Handle singular "an" */
2497 if (sin) hooked_roff("n");
2501 /* Dump "object(s)" */
2502 if (p) hooked_roff(p);
2504 hooked_roff("¥¢¥¤¥Æ¥à");
2506 hooked_roff(" object");
2507 if (n != 1) hooked_roff("s");
2511 /* Conjunction replaces variety, if needed for "gold" below */
2524 if (!p) sin = FALSE;
2526 /* Handle singular "an" */
2528 if (sin) hooked_roff("n");
2532 /* Dump "treasure(s)" */
2533 if (p) hooked_roff(p);
2535 hooked_roff("ºâÊõ");
2537 hooked_roff(" treasure");
2538 if (n != 1) hooked_roff("s");
2543 /* End this sentence */
2545 hooked_roff("¤ò»ý¤Ã¤Æ¤¤¤ë¤³¤È¤¬¤¢¤ë¡£");
2553 /* Count the number of "known" attacks */
2554 for (n = 0, m = 0; m < 4; m++)
2556 /* Skip non-attacks */
2557 if (!r_ptr->blow[m].method) continue;
2558 if (r_ptr->blow[m].method == RBM_SHOOT) continue;
2560 /* Count known attacks */
2561 if (r_ptr->r_blows[m] || know_everything) n++;
2564 /* Examine (and count) the actual attacks */
2565 for (r = 0, m = 0; m < 4; m++)
2567 int method, effect, d1, d2;
2569 /* Skip non-attacks */
2570 if (!r_ptr->blow[m].method) continue;
2571 if (r_ptr->blow[m].method == RBM_SHOOT) continue;
2573 /* Skip unknown attacks */
2574 if (!r_ptr->r_blows[m] && !know_everything) continue;
2576 /* Extract the attack info */
2577 method = r_ptr->blow[m].method;
2578 effect = r_ptr->blow[m].effect;
2579 d1 = r_ptr->blow[m].d_dice;
2580 d2 = r_ptr->blow[m].d_side;
2585 /* Acquire the method */
2589 case RBM_HIT: p = "²¥¤ë"; break;
2591 case RBM_HIT: p = "hit"; break;
2595 case RBM_TOUCH: p = "¿¨¤ë"; break;
2597 case RBM_TOUCH: p = "touch"; break;
2601 case RBM_PUNCH: p = "¥Ñ¥ó¥Á¤¹¤ë"; break;
2603 case RBM_PUNCH: p = "punch"; break;
2607 case RBM_KICK: p = "½³¤ë"; break;
2609 case RBM_KICK: p = "kick"; break;
2613 case RBM_CLAW: p = "¤Ò¤Ã¤«¤¯"; break;
2615 case RBM_CLAW: p = "claw"; break;
2619 case RBM_BITE: p = "³ú¤à"; break;
2621 case RBM_BITE: p = "bite"; break;
2625 case RBM_STING: p = "»É¤¹"; break;
2627 case RBM_STING: p = "sting"; break;
2631 case RBM_SLASH: p = "»Â¤ë"; break;
2633 case RBM_SLASH: p = "slash"; break;
2637 case RBM_BUTT: p = "³Ñ¤ÇÆͤ¯"; break;
2639 case RBM_BUTT: p = "butt"; break;
2643 case RBM_CRUSH: p = "ÂÎÅö¤¿¤ê¤¹¤ë"; break;
2645 case RBM_CRUSH: p = "crush"; break;
2649 case RBM_ENGULF: p = "°û¤ß¹þ¤à"; break;
2651 case RBM_ENGULF: p = "engulf"; break;
2655 case RBM_CHARGE: p = "ÀÁµá½ñ¤ò¤è¤³¤¹"; break;
2657 case RBM_CHARGE: p = "charge"; break;
2661 case RBM_CRAWL: p = "ÂΤξå¤òÇ礤²ó¤ë"; break;
2663 case RBM_CRAWL: p = "crawl on you"; break;
2667 case RBM_DROOL: p = "¤è¤À¤ì¤ò¤¿¤é¤¹"; break;
2669 case RBM_DROOL: p = "drool on you"; break;
2673 case RBM_SPIT: p = "¤Ä¤Ð¤òÅǤ¯"; break;
2675 case RBM_SPIT: p = "spit"; break;
2679 case RBM_EXPLODE: p = "Çúȯ¤¹¤ë"; break;
2681 case RBM_EXPLODE: p = "explode"; break;
2685 case RBM_GAZE: p = "¤Ë¤é¤à"; break;
2687 case RBM_GAZE: p = "gaze"; break;
2691 case RBM_WAIL: p = "µã¤¶«¤Ö"; break;
2693 case RBM_WAIL: p = "wail"; break;
2697 case RBM_SPORE: p = "˦»Ò¤òÈô¤Ð¤¹"; break;
2699 case RBM_SPORE: p = "release spores"; break;
2702 case RBM_XXX4: break;
2704 case RBM_BEG: p = "¶â¤ò¤»¤¬¤à"; break;
2706 case RBM_BEG: p = "beg"; break;
2710 case RBM_INSULT: p = "Éî¿«¤¹¤ë"; break;
2712 case RBM_INSULT: p = "insult"; break;
2716 case RBM_MOAN: p = "¤¦¤á¤¯"; break;
2718 case RBM_MOAN: p = "moan"; break;
2722 case RBM_SHOW: p = "²Î¤¦"; break;
2724 case RBM_SHOW: p = "sing"; break;
2730 /* Default effect */
2733 /* Acquire the effect */
2738 case RBE_HURT: q = "¹¶·â¤¹¤ë"; break;
2741 case RBE_HURT: q = "attack"; break;
2745 case RBE_POISON: q = "ÆǤò¤¯¤é¤ï¤¹"; break;
2747 case RBE_POISON: q = "poison"; break;
2751 case RBE_UN_BONUS: q = "Îô²½¤µ¤»¤ë"; break;
2753 case RBE_UN_BONUS: q = "disenchant"; break;
2757 case RBE_UN_POWER: q = "ËâÎϤòµÛ¤¤¼è¤ë"; break;
2759 case RBE_UN_POWER: q = "drain charges"; break;
2763 case RBE_EAT_GOLD: q = "¶â¤òÅð¤à"; break;
2765 case RBE_EAT_GOLD: q = "steal gold"; break;
2769 case RBE_EAT_ITEM: q = "¥¢¥¤¥Æ¥à¤òÅð¤à"; break;
2771 case RBE_EAT_ITEM: q = "steal items"; break;
2775 case RBE_EAT_FOOD: q = "¤¢¤Ê¤¿¤Î¿©ÎÁ¤ò¿©¤Ù¤ë"; break;
2777 case RBE_EAT_FOOD: q = "eat your food"; break;
2781 case RBE_EAT_LITE: q = "ÌÀ¤«¤ê¤òµÛ¼ý¤¹¤ë"; break;
2783 case RBE_EAT_LITE: q = "absorb light"; break;
2787 case RBE_ACID: q = "»À¤òÈô¤Ð¤¹"; break;
2789 case RBE_ACID: q = "shoot acid"; break;
2793 case RBE_ELEC: q = "´¶ÅŤµ¤»¤ë"; break;
2795 case RBE_ELEC: q = "electrocute"; break;
2799 case RBE_FIRE: q = "dz¤ä¤¹"; break;
2801 case RBE_FIRE: q = "burn"; break;
2805 case RBE_COLD: q = "Åà¤é¤»¤ë"; break;
2807 case RBE_COLD: q = "freeze"; break;
2811 case RBE_BLIND: q = "ÌÕÌܤˤ¹¤ë"; break;
2813 case RBE_BLIND: q = "blind"; break;
2817 case RBE_CONFUSE: q = "º®Í𤵤»¤ë"; break;
2819 case RBE_CONFUSE: q = "confuse"; break;
2823 case RBE_TERRIFY: q = "¶²Éݤµ¤»¤ë"; break;
2825 case RBE_TERRIFY: q = "terrify"; break;
2829 case RBE_PARALYZE: q = "Ëãá㤵¤»¤ë"; break;
2831 case RBE_PARALYZE: q = "paralyze"; break;
2835 case RBE_LOSE_STR: q = "ÏÓÎϤò¸º¾¯¤µ¤»¤ë"; break;
2837 case RBE_LOSE_STR: q = "reduce strength"; break;
2841 case RBE_LOSE_INT: q = "ÃÎǽ¤ò¸º¾¯¤µ¤»¤ë"; break;
2843 case RBE_LOSE_INT: q = "reduce intelligence"; break;
2847 case RBE_LOSE_WIS: q = "¸¤µ¤ò¸º¾¯¤µ¤»¤ë"; break;
2849 case RBE_LOSE_WIS: q = "reduce wisdom"; break;
2853 case RBE_LOSE_DEX: q = "´ïÍѤµ¤ò¸º¾¯¤µ¤»¤ë"; break;
2855 case RBE_LOSE_DEX: q = "reduce dexterity"; break;
2859 case RBE_LOSE_CON: q = "Âѵ×ÎϤò¸º¾¯¤µ¤»¤ë"; break;
2861 case RBE_LOSE_CON: q = "reduce constitution"; break;
2865 case RBE_LOSE_CHR: q = "Ì¥ÎϤò¸º¾¯¤µ¤»¤ë"; break;
2867 case RBE_LOSE_CHR: q = "reduce charisma"; break;
2871 case RBE_LOSE_ALL: q = "Á´¥¹¥Æ¡¼¥¿¥¹¤ò¸º¾¯¤µ¤»¤ë"; break;
2873 case RBE_LOSE_ALL: q = "reduce all stats"; break;
2877 case RBE_SHATTER: q = "Ê´ºÕ¤¹¤ë"; break;
2879 case RBE_SHATTER: q = "shatter"; break;
2883 case RBE_EXP_10: q = "·Ð¸³Ãͤò¸º¾¯(10d6+)¤µ¤»¤ë"; break;
2885 case RBE_EXP_10: q = "lower experience (by 10d6+)"; break;
2889 case RBE_EXP_20: q = "·Ð¸³Ãͤò¸º¾¯(20d6+)¤µ¤»¤ë"; break;
2891 case RBE_EXP_20: q = "lower experience (by 20d6+)"; break;
2895 case RBE_EXP_40: q = "·Ð¸³Ãͤò¸º¾¯(40d6+)¤µ¤»¤ë"; break;
2897 case RBE_EXP_40: q = "lower experience (by 40d6+)"; break;
2901 case RBE_EXP_80: q = "·Ð¸³Ãͤò¸º¾¯(80d6+)¤µ¤»¤ë"; break;
2903 case RBE_EXP_80: q = "lower experience (by 80d6+)"; break;
2907 case RBE_DISEASE: q = "ɵ¤¤Ë¤¹¤ë"; break;
2909 case RBE_DISEASE: q = "disease"; break;
2913 case RBE_TIME: q = "»þ´Ö¤òµÕÌá¤ê¤µ¤»¤ë"; break;
2915 case RBE_TIME: q = "time"; break;
2919 case RBE_EXP_VAMP: q = "À¸Ì¿ÎϤòµÛ¼ý¤¹¤ë"; break;
2921 case RBE_EXP_VAMP: q = "drain life force"; break;
2925 case RBE_DR_MANA: q = "ËâÎϤòÃ¥¤¦"; break;
2927 case RBE_DR_MANA: q = "drain mana force"; break;
2934 if ( r == 0 ) hooked_roff( format("%^s¤Ï", wd_he[msex]) );
2936 /***¼ã´³É½¸½¤òÊѹ¹ ita ***/
2938 /* Describe damage (if known) */
2939 if (d1 && d2 && (know_everything || know_damage(r_idx, m)))
2942 /* Display the damage */
2943 hooked_roff(format(" %dd%d ", d1, d2));
2944 hooked_roff("¤Î¥À¥á¡¼¥¸¤Ç");
2946 /* Hack -- force a method */
2947 if (!p) p = "²¿¤«´ñ̯¤Ê¤³¤È¤ò¤¹¤ë";
2949 /* Describe the method */
2950 /* XX¤·¤ÆYY¤·/XX¤·¤ÆYY¤¹¤ë/XX¤·/XX¤¹¤ë */
2951 if(q) jverb( p ,jverb_buf, JVERB_TO);
2952 else if(r!=n-1) jverb( p ,jverb_buf, JVERB_AND);
2953 else strcpy(jverb_buf, p);
2955 hooked_roff(jverb_buf);
2957 /* Describe the effect (if any) */
2960 if(r!=n-1) jverb( q,jverb_buf, JVERB_AND);
2961 else strcpy(jverb_buf,q);
2962 hooked_roff(jverb_buf);
2964 if(r!=n-1) hooked_roff("¡¢");
2966 /* Introduce the attack description */
2969 hooked_roff(format("%^s can ", wd_he[msex]));
2977 hooked_roff(", and ");
2981 /* Hack -- force a method */
2982 if (!p) p = "do something weird";
2984 /* Describe the method */
2988 /* Describe the effect (if any) */
2991 /* Describe the attack type */
2992 hooked_roff(" to ");
2995 /* Describe damage (if known) */
2996 if (d1 && d2 && (know_everything || know_damage(r_idx, m)))
2998 /* Display the damage */
2999 hooked_roff(" with damage");
3000 hooked_roff(format(" %dd%d", d1, d2));
3007 /* Count the attacks as printed */
3011 /* Finish sentence above */
3022 /* Notice lack of attacks */
3023 else if (flags1 & RF1_NEVER_BLOW)
3026 hooked_roff(format("%^s¤ÏʪÍýŪ¤Ê¹¶·âÊýË¡¤ò»ý¤¿¤Ê¤¤¡£", wd_he[msex]));
3028 hooked_roff(format("%^s has no physical attacks. ", wd_he[msex]));
3033 /* Or describe the lack of knowledge */
3037 hooked_roff(format("%s¹¶·â¤Ë¤Ä¤¤¤Æ¤Ï²¿¤âÃΤé¤Ê¤¤¡£", wd_his[msex]));
3039 hooked_roff(format("Nothing is known about %s attack. ", wd_his[msex]));
3046 * Notice "Quest" monsters, but only if you
3047 * already encountered the monster.
3049 if ((flags1 & RF1_QUESTOR) && ((r_ptr->r_sights) && (r_ptr->max_num) && ((r_idx == MON_OBERON) || (r_idx == MON_SERPENT))))
3052 hook_c_roff(TERM_VIOLET, "¤¢¤Ê¤¿¤Ï¤³¤Î¥â¥ó¥¹¥¿¡¼¤ò»¦¤·¤¿¤¤¤È¤¤¤¦¶¯¤¤Íß˾¤ò´¶¤¸¤Æ¤¤¤ë...");
3054 hook_c_roff(TERM_VIOLET, "You feel an intense desire to kill this monster... ");
3059 else if (flags7 & RF7_GUARDIAN)
3062 hook_c_roff(TERM_L_RED, "¤³¤Î¥â¥ó¥¹¥¿¡¼¤Ï¥À¥ó¥¸¥ç¥ó¤Î¼ç¤Ç¤¢¤ë¡£");
3064 hook_c_roff(TERM_L_RED, "This monster is the master of a dungeon.");
3078 * Hack -- Display the "name" and "attr/chars" of a monster race
3080 void roff_top(int r_idx)
3082 monster_race *r_ptr = &r_info[r_idx];
3088 /* Access the chars */
3092 /* Access the attrs */
3097 /* Clear the top line */
3098 Term_erase(0, 0, 255);
3100 /* Reset the cursor */
3103 /* A title (use "The" for non-uniques) */
3107 if (!(r_ptr->flags1 & RF1_UNIQUE))
3111 Term_addstr(-1, TERM_WHITE, "The ");
3115 Term_addstr(-1, TERM_WHITE, (r_name + r_ptr->name));
3117 /* Append the "standard" attr/char info */
3118 Term_addstr(-1, TERM_WHITE, " ('");
3120 if (use_bigtile && (a1 & 0x80)) Term_addch(255, -1);
3121 Term_addstr(-1, TERM_WHITE, "')");
3123 /* Append the "optional" attr/char info */
3124 Term_addstr(-1, TERM_WHITE, "/('");
3126 if (use_bigtile && (a2 & 0x80)) Term_addch(255, -1);
3127 Term_addstr(-1, TERM_WHITE, "'):");
3129 /* Wizards get extra info */
3134 sprintf(buf, "%d", r_idx);
3136 Term_addstr(-1, TERM_WHITE, " (");
3137 Term_addstr(-1, TERM_L_BLUE, buf);
3138 Term_addch(TERM_WHITE, ')');
3145 * Hack -- describe the given monster race at the top of the screen
3147 void screen_roff(int r_idx, int mode)
3149 /* Flush messages */
3153 Term_erase(0, 1, 255);
3155 hook_c_roff = c_roff;
3157 /* Recall monster */
3158 roff_aux(r_idx, mode);
3160 /* Describe monster */
3168 * Hack -- describe the given monster race in the current "term" window
3170 void display_roff(int r_idx)
3174 /* Erase the window */
3175 for (y = 0; y < Term->hgt; y++)
3177 /* Erase the line */
3178 Term_erase(0, y, 255);
3184 hook_c_roff = c_roff;
3186 /* Recall monster */
3189 /* Describe monster */
3196 * Hack -- output description of the given monster race
3198 void output_monster_spoiler(int r_idx, void (*roff_func)(byte attr, cptr str))
3200 hook_c_roff = roff_func;
3202 /* Recall monster */
3203 roff_aux(r_idx, 0x03);
3207 bool monster_quest(int r_idx)
3209 monster_race *r_ptr = &r_info[r_idx];
3211 /* Random quests are in the dungeon */
3212 if (r_ptr->flags8 & RF8_WILD_ONLY) return FALSE;
3214 /* No random quests for aquatic monsters */
3215 if (r_ptr->flags7 & RF7_AQUATIC) return FALSE;
3217 /* No random quests for multiplying monsters */
3218 if (r_ptr->flags2 & RF2_MULTIPLY) return FALSE;
3220 /* No quests to kill friendly monsters */
3221 if (r_ptr->flags7 & RF7_FRIENDLY) return FALSE;
3227 bool monster_dungeon(int r_idx)
3229 monster_race *r_ptr = &r_info[r_idx];
3231 if (!(r_ptr->flags8 & RF8_WILD_ONLY))
3235 dungeon_info_type *d_ptr = &d_info[dungeon_type];
3236 if ((d_ptr->mflags8 & RF8_WILD_MOUNTAIN) &&
3237 (r_ptr->flags8 & RF8_WILD_MOUNTAIN)) return TRUE;
3243 bool monster_ocean(int r_idx)
3245 monster_race *r_ptr = &r_info[r_idx];
3247 if (r_ptr->flags8 & RF8_WILD_OCEAN)
3254 bool monster_shore(int r_idx)
3256 monster_race *r_ptr = &r_info[r_idx];
3258 if (r_ptr->flags8 & RF8_WILD_SHORE)
3265 static bool monster_waste(int r_idx)
3267 monster_race *r_ptr = &r_info[r_idx];
3269 if (r_ptr->flags8 & (RF8_WILD_WASTE | RF8_WILD_ALL))
3276 bool monster_town(int r_idx)
3278 monster_race *r_ptr = &r_info[r_idx];
3280 if (r_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL))
3287 bool monster_wood(int r_idx)
3289 monster_race *r_ptr = &r_info[r_idx];
3291 if (r_ptr->flags8 & (RF8_WILD_WOOD | RF8_WILD_ALL))
3298 bool monster_volcano(int r_idx)
3300 monster_race *r_ptr = &r_info[r_idx];
3302 if (r_ptr->flags8 & RF8_WILD_VOLCANO)
3309 bool monster_mountain(int r_idx)
3311 monster_race *r_ptr = &r_info[r_idx];
3313 if (r_ptr->flags8 & RF8_WILD_MOUNTAIN)
3320 bool monster_grass(int r_idx)
3322 monster_race *r_ptr = &r_info[r_idx];
3324 if (r_ptr->flags8 & (RF8_WILD_GRASS | RF8_WILD_ALL))
3331 bool monster_deep_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->flags7 & RF7_AQUATIC)
3344 bool monster_shallow_water(int r_idx)
3346 monster_race *r_ptr = &r_info[r_idx];
3348 if (!monster_dungeon(r_idx)) return FALSE;
3350 if (r_ptr->flags2 & RF2_AURA_FIRE)
3357 bool monster_lava(int r_idx)
3359 monster_race *r_ptr = &r_info[r_idx];
3361 if (!monster_dungeon(r_idx)) return FALSE;
3363 if (((r_ptr->flags3 & RF3_IM_FIRE) ||
3364 (r_ptr->flags7 & RF7_CAN_FLY)) &&
3365 !(r_ptr->flags3 & RF3_AURA_COLD))
3372 monster_hook_type get_monster_hook(void)
3374 if (!dun_level && !p_ptr->inside_quest)
3376 switch (wilderness[p_ptr->wilderness_y][p_ptr->wilderness_x].terrain)
3379 return (monster_hook_type)monster_town;
3380 case TERRAIN_DEEP_WATER:
3381 return (monster_hook_type)monster_ocean;
3382 case TERRAIN_SHALLOW_WATER:
3384 return (monster_hook_type)monster_shore;
3386 case TERRAIN_DESERT:
3387 return (monster_hook_type)monster_waste;
3389 return (monster_hook_type)monster_grass;
3391 return (monster_hook_type)monster_wood;
3392 case TERRAIN_SHALLOW_LAVA:
3393 case TERRAIN_DEEP_LAVA:
3394 return (monster_hook_type)monster_volcano;
3395 case TERRAIN_MOUNTAIN:
3396 return (monster_hook_type)monster_mountain;
3398 return (monster_hook_type)monster_dungeon;
3403 return (monster_hook_type)monster_dungeon;
3408 monster_hook_type get_monster_hook2(int y, int x)
3410 /* Set the monster list */
3411 switch (cave[y][x].feat)
3413 case FEAT_SHAL_WATER:
3414 return (monster_hook_type)monster_shallow_water;
3415 case FEAT_DEEP_WATER:
3416 return (monster_hook_type)monster_deep_water;
3417 case FEAT_DEEP_LAVA:
3418 case FEAT_SHAL_LAVA:
3419 return (monster_hook_type)monster_lava;
3426 void set_friendly(monster_type *m_ptr)
3428 m_ptr->smart |= SM_FRIENDLY;
3431 void set_pet(monster_type *m_ptr)
3433 /* Check for quest completion */
3434 check_quest_completion(m_ptr);
3436 m_ptr->smart |= SM_PET;
3437 if (!(r_info[m_ptr->r_idx].flags3 & (RF3_EVIL | RF3_GOOD)))
3438 m_ptr->sub_align = SUB_ALIGN_NEUTRAL;
3442 * Makes the monster hostile towards the player
3444 void set_hostile(monster_type *m_ptr)
3446 if (p_ptr->inside_battle) return;
3447 m_ptr->smart &= ~SM_PET;
3448 m_ptr->smart &= ~SM_FRIENDLY;
3455 void anger_monster(monster_type *m_ptr)
3457 if (p_ptr->inside_battle) return;
3458 if (is_friendly(m_ptr))
3462 monster_desc(m_name, m_ptr, 0);
3464 msg_format("%^s¤ÏÅܤä¿¡ª", m_name);
3466 msg_format("%^s gets angry!", m_name);
3471 chg_virtue(V_INDIVIDUALISM, 1);
3472 chg_virtue(V_HONOUR, -1);
3473 chg_virtue(V_JUSTICE, -1);
3474 chg_virtue(V_COMPASSION, -1);
3480 * Check if monster can cross terrain
3482 bool monster_can_cross_terrain(byte feat, monster_race *r_ptr)
3485 if (feat == FEAT_DARK_PIT)
3487 if (r_ptr->flags7 & RF7_CAN_FLY)
3493 if (feat == FEAT_DEEP_WATER)
3495 if ((r_ptr->flags7 & RF7_AQUATIC) ||
3496 (r_ptr->flags7 & RF7_CAN_FLY) ||
3497 (r_ptr->flags7 & RF7_CAN_SWIM))
3503 else if (feat == FEAT_SHAL_WATER)
3505 if (!(r_ptr->flags2 & RF2_AURA_FIRE) ||
3506 (r_ptr->flags7 & RF7_AQUATIC) ||
3507 (r_ptr->flags7 & RF7_CAN_FLY) ||
3508 (r_ptr->flags7 & RF7_CAN_SWIM))
3513 /* Aquatic monster */
3514 else if ((r_ptr->flags7 & RF7_AQUATIC) &&
3515 !(r_ptr->flags7 & RF7_CAN_FLY))
3520 else if ((feat == FEAT_SHAL_LAVA) ||
3521 (feat == FEAT_DEEP_LAVA))
3523 if ((r_ptr->flags3 & RF3_IM_FIRE) ||
3524 (r_ptr->flags7 & RF7_CAN_FLY))
3535 * Strictly check if monster can enter the grid
3537 bool monster_can_enter(int y, int x, monster_race *r_ptr)
3539 cave_type *c_ptr = &cave[y][x];
3540 byte feat = c_ptr->feat;
3542 /* Player or other monster */
3543 if ((y == py) && (x == px)) return FALSE;
3544 if (c_ptr->m_idx) return FALSE;
3546 /* Permanent wall */
3547 if ((c_ptr->feat >= FEAT_PERM_EXTRA) &&
3548 (c_ptr->feat <= FEAT_PERM_SOLID))
3551 /* Can fly over the Pattern */
3552 if ((c_ptr->feat >= FEAT_PATTERN_START) &&
3553 (c_ptr->feat <= FEAT_PATTERN_XTRA2))
3555 if (!(r_ptr->flags7 & RF7_CAN_FLY))
3561 /* Can fly over mountain on the surface */
3562 if (feat == FEAT_MOUNTAIN)
3565 ((r_ptr->flags7 & RF7_CAN_FLY) ||
3566 (r_ptr->flags8 & RF8_WILD_MOUNTAIN)))
3572 /* Cannot enter wall without pass wall ability */
3573 if (!cave_floor_grid(c_ptr) && !(r_ptr->flags2 & RF2_PASS_WALL))
3577 if (feat == FEAT_DARK_PIT)
3579 if (r_ptr->flags7 & RF7_CAN_FLY)
3585 if (feat == FEAT_DEEP_WATER)
3587 if ((r_ptr->flags7 & RF7_AQUATIC) ||
3588 (r_ptr->flags7 & RF7_CAN_FLY) ||
3589 (r_ptr->flags7 & RF7_CAN_SWIM))
3595 else if (feat == FEAT_SHAL_WATER)
3597 if (!(r_ptr->flags2 & RF2_AURA_FIRE) ||
3598 (r_ptr->flags7 & RF7_AQUATIC) ||
3599 (r_ptr->flags7 & RF7_CAN_FLY) ||
3600 (r_ptr->flags7 & RF7_CAN_SWIM))
3605 /* Aquatic monster */
3606 else if ((r_ptr->flags7 & RF7_AQUATIC) &&
3607 !(r_ptr->flags7 & RF7_CAN_FLY))
3612 else if ((feat == FEAT_SHAL_LAVA) ||
3613 (feat == FEAT_DEEP_LAVA))
3615 if ((r_ptr->flags3 & RF3_IM_FIRE) ||
3616 (r_ptr->flags7 & RF7_CAN_FLY))
3628 * Check if two monsters are enemies
3630 bool are_enemies(monster_type *m_ptr, monster_type *n_ptr)
3632 monster_race *r_ptr = &r_info[m_ptr->r_idx];
3633 monster_race *s_ptr = &r_info[n_ptr->r_idx];
3635 if (p_ptr->inside_battle)
3637 if (is_pet(m_ptr) || is_pet(n_ptr)) return FALSE;
3641 if ((r_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL))
3642 && (s_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL)))
3644 if (!is_pet(m_ptr) && !is_pet(n_ptr)) return FALSE;
3647 /* Friendly vs. opposite aligned normal or pet */
3648 if (m_ptr->sub_align != n_ptr->sub_align)
3650 if (((m_ptr->sub_align & SUB_ALIGN_EVIL) &&
3651 (n_ptr->sub_align & SUB_ALIGN_GOOD)) ||
3652 ((m_ptr->sub_align & SUB_ALIGN_GOOD) &&
3653 (n_ptr->sub_align & SUB_ALIGN_EVIL)))
3655 if (!(m_ptr->mflag2 & MFLAG_CHAMELEON) || !(n_ptr->mflag2 & MFLAG_CHAMELEON)) return TRUE;
3659 /* Hostile vs. non-hostile */
3660 if (is_hostile(m_ptr) != is_hostile(n_ptr))
3671 * Is the monster "alive"?
3673 * Used to determine the message to print for a killed monster.
3674 * ("dies", "destroyed")
3676 bool monster_living(monster_race *r_ptr)
3678 /* Non-living, undead, or demon */
3679 if (r_ptr->flags3 & (RF3_DEMON | RF3_UNDEAD | RF3_NONLIVING))