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 * 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 reserch_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 ¿ÍÁò¤Ã¤Æ¤¤¤ë",
271 hooked_roff(format("%^s has slain %d of your ancestors",
274 wd_he[msex], r_ptr->r_deaths));
276 /* But we've also killed it */
280 hooked_roff(format("¤¬¡¢¤¹¤Ç¤ËµØƤ¤Á¤Ï²Ì¤¿¤·¤Æ¤¤¤ë¡ª"));
282 hooked_roff(format(", but you have avenged %s! ",
283 plural(r_ptr->r_deaths, "him", "them")));
288 /* Unavenged (ever) */
292 hooked_roff(format("¤Î¤Ë¡¢¤Þ¤ÀµØƤ¤Á¤ò²Ì¤¿¤·¤Æ¤¤¤Ê¤¤¡£"));
294 hooked_roff(format(", who %s unavenged. ",
295 plural(r_ptr->r_deaths, "remains", "remain")));
301 /* Dead unique who never hurt us */
305 hooked_roff("¤¢¤Ê¤¿¤Ï¤³¤ÎµØŨ¤ò¤¹¤Ç¤ËÁò¤êµî¤Ã¤Æ¤¤¤ë¡£");
307 hooked_roff("You have slain this foe. ");
313 /* Not unique, but killed us */
314 else if (r_ptr->r_deaths)
318 hooked_roff(format("¤³¤Î¥â¥ó¥¹¥¿¡¼¤Ï¤¢¤Ê¤¿¤ÎÀèÁĤò %d ¿ÍÁò¤Ã¤Æ¤¤¤ë",
321 hooked_roff(format("%d of your ancestors %s been killed by this creature, ",
322 r_ptr->r_deaths, plural(r_ptr->r_deaths, "has", "have")));
326 /* Some kills this life */
330 hooked_roff(format("¤¬¡¢¤¢¤Ê¤¿¤Ï¤³¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¯¤Ê¤¯¤È¤â %d ÂΤÏÅݤ·¤Æ¤¤¤ë¡£",
332 hooked_roff(format("and you have exterminated at least %d of the creatures. ",
338 /* Some kills past lives */
339 else if (r_ptr->r_tkills)
342 hooked_roff(format("¤¬¡¢%s¤Ï¤³¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¯¤Ê¤¯¤È¤â %d ÂΤÏÅݤ·¤Æ¤¤¤ë¡£",
343 "¤¢¤Ê¤¿¤ÎÀèÁÄ", r_ptr->r_tkills));
345 hooked_roff(format("and %s have exterminated at least %d of the creatures. ",
346 "your ancestors", r_ptr->r_tkills));
355 hooked_roff(format("¤¬¡¢¤Þ¤À%s¤òÅݤ·¤¿¤³¤È¤Ï¤Ê¤¤¡£",
357 hooked_roff(format("and %s is not ever known to have been defeated. ",
364 /* Normal monsters */
367 /* Killed some this life */
371 hooked_roff(format("¤¢¤Ê¤¿¤Ï¤³¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¯¤Ê¤¯¤È¤â %d ÂΤϻ¦¤·¤Æ¤¤¤ë¡£",
373 hooked_roff(format("You have killed at least %d of these creatures. ",
379 /* Killed some last life */
380 else if (r_ptr->r_tkills)
383 hooked_roff(format("¤¢¤Ê¤¿¤ÎÀèÁĤϤ³¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¯¤Ê¤¯¤È¤â %d ÂΤϻ¦¤·¤Æ¤¤¤ë¡£",
385 hooked_roff(format("Your ancestors have killed at least %d of these creatures. ",
395 hooked_roff("¤³¤Î¥â¥ó¥¹¥¿¡¼¤òÅݤ·¤¿¤³¤È¤Ï¤Ê¤¤¡£");
397 hooked_roff("No battles to the death are recalled. ");
409 #ifdef DELAY_LOAD_R_TEXT
413 /* Build the filename */
415 path_build(buf, 1024, ANGBAND_DIR_DATA, "r_info_j.raw");
417 path_build(buf, 1024, ANGBAND_DIR_DATA, "r_info.raw");
421 /* Open the "raw" file */
422 fd = fd_open(buf, O_RDONLY);
429 /* Starting position */
432 /* Additional offsets */
433 pos += r_head->head_size;
434 pos += r_head->info_size;
435 pos += r_head->name_size;
438 (void)fd_seek(fd, pos);
440 /* Read a chunk of data */
441 (void)fd_read(fd, buf, 2048);
450 strcpy(buf, r_text + r_ptr->text);
461 if (r_idx == MON_KAGE)
472 /* Describe location */
473 if (r_ptr->level == 0)
476 hooked_roff(format("%^s¤ÏÄ®¤Ë½»¤ß", wd_he[msex]));
478 hooked_roff(format("%^s lives in the town", wd_he[msex]));
483 else if (r_ptr->r_tkills || know_everything)
488 hooked_roff(format("%^s¤ÏÄ̾ïÃϲ¼ %d ¥Õ¥£¡¼¥È¤Ç½Ð¸½¤·",
490 hooked_roff(format("%^s is normally found at depths of %d feet",
493 wd_he[msex], r_ptr->level * 50));
498 hooked_roff(format("%^s¤ÏÄ̾ïÃϲ¼ %d ³¬¤Ç½Ð¸½¤·",
500 hooked_roff(format("%^s is normally found on dungeon level %d",
503 wd_he[msex], r_ptr->level));
509 /* Describe movement */
510 if (r_idx == MON_CHAMELEON)
513 hooked_roff("¡¢Â¾¤Î¥â¥ó¥¹¥¿¡¼¤Ë²½¤±¤ë¡£");
515 hooked_roff("and can take the shape of other monster.");
527 hooked_roff(", and ");
534 hooked_roff(format("%^s¤Ï", wd_he[msex]));
536 hooked_roff(format("%^s ", wd_he[msex]));
542 hooked_roff("moves");
546 if ((flags1 & RF1_RAND_50) || (flags1 & RF1_RAND_25))
549 if ((flags1 & RF1_RAND_50) && (flags1 & RF1_RAND_25))
552 hooked_roff("¤«¤Ê¤ê");
554 hooked_roff(" extremely");
558 else if (flags1 & RF1_RAND_50)
563 hooked_roff(" somewhat");
567 else if (flags1 & RF1_RAND_25)
572 hooked_roff(" a bit");
579 hooked_roff("ÉÔµ¬Â§¤Ë");
581 hooked_roff(" erratically");
585 /* Hack -- Occasional conjunction */
587 if (speed != 110) hooked_roff("¡¢¤«¤Ä");
589 if (speed != 110) hooked_roff(", and");
598 if (speed > 139) hook_c_roff(TERM_RED, "¿®¤¸Æñ¤¤¤Û¤É");
599 else if (speed > 134) hook_c_roff(TERM_ORANGE, "ÌÔÎõ¤Ë");
600 else if (speed > 129) hook_c_roff(TERM_ORANGE, "Èó¾ï¤Ë");
601 else if (speed > 124) hook_c_roff(TERM_UMBER, "¤«¤Ê¤ê");
602 else if (speed < 120) hook_c_roff(TERM_L_UMBER, "¤ä¤ä");
603 hook_c_roff(TERM_L_RED, "ÁÇÁ᤯");
605 if (speed > 130) hooked_roff(" incredibly");
606 else if (speed > 120) hooked_roff(" very");
607 hooked_roff(" quickly");
611 else if (speed < 110)
614 if (speed < 90) hook_c_roff(TERM_L_GREEN, "¿®¤¸Æñ¤¤¤Û¤É");
615 else if (speed < 95) hook_c_roff(TERM_BLUE, "Èó¾ï¤Ë");
616 else if (speed < 100) hook_c_roff(TERM_BLUE, "¤«¤Ê¤ê");
617 else if (speed > 104) hook_c_roff(TERM_GREEN, "¤ä¤ä");
618 hook_c_roff(TERM_L_BLUE, "¤æ¤Ã¤¯¤ê¤È");
620 if (speed < 90) hooked_roff(" incredibly");
621 else if (speed < 100) hooked_roff(" very");
622 hooked_roff(" slowly");
629 hooked_roff("ÉáÄ̤ή¤µ¤Ç");
631 hooked_roff(" at normal speed");
636 hooked_roff("Æ°¤¤¤Æ¤¤¤ë");
640 /* The code above includes "attack speed" */
641 if (flags1 & RF1_NEVER_MOVE)
647 hooked_roff("¡¢¤·¤«¤·");
649 hooked_roff(", but ");
656 hooked_roff(format("%^s¤Ï", wd_he[msex]));
658 hooked_roff(format("%^s ", wd_he[msex]));
666 hooked_roff("¿¯Æþ¼Ô¤òÄÉÀפ·¤Ê¤¤");
668 hooked_roff("does not deign to chase intruders");
673 /* End this sentence */
686 /* Describe experience if known */
687 if (r_ptr->r_tkills || know_everything)
693 if (flags1 & RF1_UNIQUE)
695 hooked_roff("Killing this");
699 hooked_roff("A kill of this");
704 /* Describe the "quality" */
706 if (flags2 & RF2_ELDRITCH_HORROR) hook_c_roff(TERM_VIOLET, "¶¸µ¤¤òͶ¤¦");/*nuke me*/
708 if (flags2 & RF2_ELDRITCH_HORROR) hooked_roff(" sanity-blasting");
712 if (flags3 & RF3_ANIMAL) hook_c_roff(TERM_L_GREEN, "¼«Á³³¦¤Î");
714 if (flags3 & RF3_ANIMAL) hooked_roff(" natural");
718 if (flags3 & RF3_EVIL) hook_c_roff(TERM_L_DARK, "¼Ù°¤Ê¤ë");
720 if (flags3 & RF3_EVIL) hooked_roff(" evil");
724 if (flags3 & RF3_GOOD) hook_c_roff(TERM_YELLOW, "Á±ÎɤÊ");
726 if (flags3 & RF3_GOOD) hooked_roff(" good");
730 if (flags3 & RF3_UNDEAD) hook_c_roff(TERM_VIOLET, "¥¢¥ó¥Ç¥Ã¥É¤Î");
732 if (flags3 & RF3_UNDEAD) hooked_roff(" undead");
735 if (flags3 & RF3_AMBERITE) hook_c_roff(TERM_VIOLET, "¥¢¥ó¥Ð¡¼¤Î²¦Â²¤Î");
737 if (flags3 & RF3_AMBERITE) hooked_roff(" Amberite");
741 if ((flags3 & (RF3_DRAGON | RF3_DEMON | RF3_GIANT | RF3_TROLL | RF3_ORC)) || (flags2 & (RF2_QUANTUM | RF2_HUMAN)))
743 /* Describe the "race" */
745 if (flags3 & RF3_DRAGON) hook_c_roff(TERM_ORANGE, "¥É¥é¥´¥ó");
747 if (flags3 & RF3_DRAGON) hooked_roff(" dragon");
751 if (flags3 & RF3_DEMON) hook_c_roff(TERM_VIOLET, "¥Ç¡¼¥â¥ó");
753 if (flags3 & RF3_DEMON) hooked_roff(" demon");
757 if (flags3 & RF3_GIANT) hook_c_roff(TERM_L_UMBER, "¥¸¥ã¥¤¥¢¥ó¥È");
759 if (flags3 & RF3_GIANT) hooked_roff(" giant");
763 if (flags3 & RF3_TROLL) hook_c_roff(TERM_BLUE, "¥È¥í¥ë");
765 if (flags3 & RF3_TROLL) hooked_roff(" troll");
769 if (flags3 & RF3_ORC) hook_c_roff(TERM_UMBER, "¥ª¡¼¥¯");
771 if (flags3 & RF3_ORC) hooked_roff(" orc");
775 if (flags2 & RF2_HUMAN) hook_c_roff(TERM_L_WHITE, "¿Í´Ö");
777 if (flags2 & RF2_HUMAN) hooked_roff(" Human");
781 if (flags2 & RF2_QUANTUM) hook_c_roff(TERM_VIOLET, "ÎÌ»ÒÀ¸Êª");
783 if (flags2 & RF2_QUANTUM) hooked_roff(" quantum creature");
788 else hooked_roff("¥â¥ó¥¹¥¿¡¼");
790 else hooked_roff(" creature");
795 hooked_roff("¤òÅݤ¹¤³¤È¤Ï");
797 /* Group some variables */
804 hooked_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 hooked_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 hooked_roff(format(" is worth about %ld.%02ld point%s",
824 (((i == 1) && (j == 0)) ? "" : "s")));
826 /* Take account of annoying English */
829 if ((p_ptr->lev / 10) == 1) /* nothing */;
830 else if (i == 1) p = "st";
831 else if (i == 2) p = "nd";
832 else if (i == 3) p = "rd";
834 /* Take account of "leading vowels" in numbers */
837 if ((i == 8) || (i == 11) || (i == 18)) q = "n";
839 /* Mention the dependance on the player's level */
840 hooked_roff(format(" for a%s %lu%s level character. ",
847 if ((flags2 & RF2_AURA_FIRE) && (flags2 & RF2_AURA_ELEC) && (flags3 & RF3_AURA_COLD))
850 hook_c_roff(TERM_VIOLET, format("%^s¤Ï±ê¤Èɹ¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
852 hooked_roff(format("%^s is surrounded by flames and electricity. ", wd_he[msex]));
856 else if ((flags2 & RF2_AURA_FIRE) && (flags2 & RF2_AURA_ELEC))
859 hook_c_roff(TERM_L_RED, format("%^s¤Ï±ê¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
861 hooked_roff(format("%^s is surrounded by flames and electricity. ", wd_he[msex]));
865 else if ((flags2 & RF2_AURA_FIRE) && (flags3 & RF3_AURA_COLD))
868 hook_c_roff(TERM_BLUE, format("%^s¤Ï±ê¤Èɹ¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
870 hooked_roff(format("%^s is surrounded by flames and electricity. ", wd_he[msex]));
874 else if ((flags3 & RF3_AURA_COLD) && (flags2 & RF2_AURA_ELEC))
877 hook_c_roff(TERM_L_GREEN, format("%^s¤Ïɹ¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
879 hooked_roff(format("%^s is surrounded by ice and electricity. ", wd_he[msex]));
883 else if (flags2 & RF2_AURA_FIRE)
886 hook_c_roff(TERM_RED, format("%^s¤Ï±ê¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
888 hooked_roff(format("%^s is surrounded by flames. ", wd_he[msex]));
892 else if (flags3 & RF3_AURA_COLD)
895 hook_c_roff(TERM_BLUE, format("%^s¤Ïɹ¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
897 hooked_roff(format("%^s is surrounded by ice. ", wd_he[msex]));
901 else if (flags2 & RF2_AURA_ELEC)
904 hook_c_roff(TERM_L_BLUE, format("%^s¤Ï¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
906 hooked_roff(format("%^s is surrounded by electricity. ", wd_he[msex]));
911 if (flags2 & RF2_REFLECTING)
914 hooked_roff(format("%^s¤ÏÌð¤Î¼öʸ¤òÄ·¤ÍÊÖ¤¹¡£", wd_he[msex]));
916 hooked_roff(format("%^s reflects bolt spells. ", wd_he[msex]));
921 /* Describe escorts */
922 if ((flags1 & RF1_ESCORT) || (flags1 & RF1_ESCORTS))
925 hooked_roff(format("%^s¤ÏÄ̾ï¸î±Ò¤òȼ¤Ã¤Æ¸½¤ì¤ë¡£",
927 hooked_roff(format("%^s usually appears with escorts. ",
933 /* Describe friends */
934 else if (flags1 & RF1_FRIENDS)
937 hooked_roff(format("%^s¤ÏÄ̾クÃĤǸ½¤ì¤ë¡£",
939 hooked_roff(format("%^s usually appears in groups. ",
946 /* Collect inate attacks */
949 if (flags4 & RF4_SHRIEK) {vp[vn] = "ÈáÌĤǽõ¤±¤òµá¤á¤ë";color[vn++] = TERM_L_WHITE;}
951 if (flags4 & RF4_SHRIEK) {vp[vn] = "shriek for help";color[vn++] = TERM_L_WHITE;}
955 if (flags4 & RF4_ROCKET) {vp[vn] = "¥í¥±¥Ã¥È¤òȯ¼Í¤¹¤ë";color[vn++] = TERM_UMBER;}
957 if (flags4 & RF4_ROCKET) {vp[vn] = "shoot a rocket";color[vn++] = TERM_UMBER;}
961 if (flags4 & RF4_SHOOT) {vp[vn] = "¼Í·â¤ò¤¹¤ë";color[vn++] = TERM_UMBER;}
963 if (flags4 & RF4_SHOOT) {vp[vn] = "fire an arrow";color[vn++] = TERM_UMBER;}
967 if (flags6 & (RF6_SPECIAL)) {vp[vn] = "ÆÃÊ̤ʹÔÆ°¤ò¤¹¤ë";color[vn++] = TERM_VIOLET;}
969 if (flags6 & (RF6_SPECIAL)) {vp[vn] = "do something";color[vn++] = TERM_VIOLET;}
972 /* Describe inate attacks */
977 hooked_roff(format("%^s¤Ï", wd_he[msex]));
979 hooked_roff(format("%^s", wd_he[msex]));
984 for (n = 0; n < vn; n++)
988 jverb(vp[n],jverb_buf,JVERB_OR);
989 hook_c_roff(color[n], jverb_buf);
990 hook_c_roff(color[n], "¤ê¡¢");
992 else hook_c_roff(color[n], vp[n]);
995 if (n == 0) hooked_roff(" may ");
996 else if (n < vn-1) hooked_roff(", ");
997 else hooked_roff(" or ");
1007 hooked_roff("¤³¤È¤¬¤¢¤ë¡£");
1015 /* Collect breaths */
1018 if (flags4 & (RF4_BR_ACID)) {vp[vn] = "»À";color[vn++] = TERM_GREEN;}
1020 if (flags4 & (RF4_BR_ACID)) {vp[vn] = "acid";color[vn++] = TERM_GREEN;}
1024 if (flags4 & (RF4_BR_ELEC)) {vp[vn] = "°ðºÊ";color[vn++] = TERM_BLUE;}
1026 if (flags4 & (RF4_BR_ELEC)) {vp[vn] = "lightning";color[vn++] = TERM_BLUE;}
1030 if (flags4 & (RF4_BR_FIRE)) {vp[vn] = "²Ð±ê";color[vn++] = TERM_RED;}
1032 if (flags4 & (RF4_BR_FIRE)) {vp[vn] = "fire";color[vn++] = TERM_RED;}
1036 if (flags4 & (RF4_BR_COLD)) {vp[vn] = "Î䵤";color[vn++] = TERM_L_WHITE;}
1038 if (flags4 & (RF4_BR_COLD)) {vp[vn] = "frost";color[vn++] = TERM_L_WHITE;}
1042 if (flags4 & (RF4_BR_POIS)) {vp[vn] = "ÆÇ";color[vn++] = TERM_L_GREEN;}
1044 if (flags4 & (RF4_BR_POIS)) {vp[vn] = "poison";color[vn++] = TERM_L_GREEN;}
1048 if (flags4 & (RF4_BR_NETH)) {vp[vn] = "ÃϹö";color[vn++] = TERM_L_DARK;}
1050 if (flags4 & (RF4_BR_NETH)) {vp[vn] = "nether";color[vn++] = TERM_L_DARK;}
1054 if (flags4 & (RF4_BR_LITE)) {vp[vn] = "Á®¸÷";color[vn++] = TERM_YELLOW;}
1056 if (flags4 & (RF4_BR_LITE)) {vp[vn] = "light";color[vn++] = TERM_YELLOW;}
1060 if (flags4 & (RF4_BR_DARK)) {vp[vn] = "°Å¹õ";color[vn++] = TERM_L_DARK;}
1062 if (flags4 & (RF4_BR_DARK)) {vp[vn] = "darkness";color[vn++] = TERM_L_DARK;}
1066 if (flags4 & (RF4_BR_CONF)) {vp[vn] = "º®Íð";color[vn++] = TERM_L_UMBER;}
1068 if (flags4 & (RF4_BR_CONF)) {vp[vn] = "confusion";color[vn++] = TERM_L_UMBER;}
1072 if (flags4 & (RF4_BR_SOUN)) {vp[vn] = "¹ì²»";color[vn++] = TERM_ORANGE;}
1074 if (flags4 & (RF4_BR_SOUN)) {vp[vn] = "sound";color[vn++] = TERM_ORANGE;}
1078 if (flags4 & (RF4_BR_CHAO)) {vp[vn] = "¥«¥ª¥¹";color[vn++] = TERM_VIOLET;}
1080 if (flags4 & (RF4_BR_CHAO)) {vp[vn] = "chaos";color[vn++] = TERM_VIOLET;}
1084 if (flags4 & (RF4_BR_DISE)) {vp[vn] = "Îô²½";color[vn++] = TERM_VIOLET;}
1086 if (flags4 & (RF4_BR_DISE)) {vp[vn] = "disenchantment";color[vn++] = TERM_VIOLET;}
1090 if (flags4 & (RF4_BR_NEXU)) {vp[vn] = "°ø²Ìº®Íð";color[vn++] = TERM_VIOLET;}
1092 if (flags4 & (RF4_BR_NEXU)) {vp[vn] = "nexus";color[vn++] = TERM_VIOLET;}
1096 if (flags4 & (RF4_BR_TIME)) {vp[vn] = "»þ´ÖµÕž";color[vn++] = TERM_L_BLUE;}
1098 if (flags4 & (RF4_BR_TIME)) {vp[vn] = "time";color[vn++] = TERM_L_BLUE;}
1102 if (flags4 & (RF4_BR_INER)) {vp[vn] = "ÃÙÆß";color[vn++] = TERM_SLATE;}
1104 if (flags4 & (RF4_BR_INER)) {vp[vn] = "inertia";color[vn++] = TERM_SLATE;}
1108 if (flags4 & (RF4_BR_GRAV)) {vp[vn] = "½ÅÎÏ";color[vn++] = TERM_SLATE;}
1110 if (flags4 & (RF4_BR_GRAV)) {vp[vn] = "gravity";color[vn++] = TERM_SLATE;}
1114 if (flags4 & (RF4_BR_SHAR)) {vp[vn] = "ÇËÊÒ";color[vn++] = TERM_L_UMBER;}
1116 if (flags4 & (RF4_BR_SHAR)) {vp[vn] = "shards";color[vn++] = TERM_L_UMBER;}
1120 if (flags4 & (RF4_BR_PLAS)) {vp[vn] = "¥×¥é¥º¥Þ";color[vn++] = TERM_L_RED;}
1122 if (flags4 & (RF4_BR_PLAS)) {vp[vn] = "plasma";color[vn++] = TERM_L_RED;}
1126 if (flags4 & (RF4_BR_WALL)) {vp[vn] = "¥Õ¥©¡¼¥¹";color[vn++] = TERM_UMBER;}
1128 if (flags4 & (RF4_BR_WALL)) {vp[vn] = "force";color[vn++] = TERM_UMBER;}
1132 if (flags4 & (RF4_BR_MANA)) {vp[vn] = "ËâÎÏ";color[vn++] = TERM_L_BLUE;}
1134 if (flags4 & (RF4_BR_MANA)) {vp[vn] = "mana";color[vn++] = TERM_L_BLUE;}
1138 if (flags4 & (RF4_BR_NUKE)) {vp[vn] = "Êü¼ÍÀÇÑ´þʪ";color[vn++] = TERM_L_GREEN;}
1140 if (flags4 & (RF4_BR_NUKE)) {vp[vn] = "toxic waste";color[vn++] = TERM_L_GREEN;}
1144 if (flags4 & (RF4_BR_DISI)) {vp[vn] = "ʬ²ò";color[vn++] = TERM_SLATE;}
1146 if (flags4 & (RF4_BR_DISI)) {vp[vn] = "disintegration";color[vn++] = TERM_SLATE;}
1150 /* Describe breaths */
1158 hooked_roff(format("%^s¤Ï", wd_he[msex]));
1160 hooked_roff(format("%^s", wd_he[msex]));
1165 for (n = 0; n < vn; n++)
1169 if ( n != 0 ) hooked_roff("¤ä");
1171 if (n == 0) hooked_roff(" may breathe ");
1172 else if (n < vn-1) hooked_roff(", ");
1173 else hooked_roff(" or ");
1178 hook_c_roff(color[n], vp[n]);
1181 hooked_roff("¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤¬¤¢¤ë");
1186 /* Collect spells */
1189 if (flags5 & (RF5_BA_ACID)) {vp[vn] = "¥¢¥·¥Ã¥É¡¦¥Ü¡¼¥ë";color[vn++] = TERM_GREEN;}
1191 if (flags5 & (RF5_BA_ACID)) {vp[vn] = "produce acid balls";color[vn++] = TERM_GREEN;}
1195 if (flags5 & (RF5_BA_ELEC)) {vp[vn] = "¥µ¥ó¥À¡¼¡¦¥Ü¡¼¥ë";color[vn++] = TERM_BLUE;}
1197 if (flags5 & (RF5_BA_ELEC)) {vp[vn] = "produce lightning balls";color[vn++] = TERM_BLUE;}
1201 if (flags5 & (RF5_BA_FIRE)) {vp[vn] = "¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë";color[vn++] = TERM_RED;}
1203 if (flags5 & (RF5_BA_FIRE)) {vp[vn] = "produce fire balls";color[vn++] = TERM_RED;}
1207 if (flags5 & (RF5_BA_COLD)) {vp[vn] = "¥¢¥¤¥¹¡¦¥Ü¡¼¥ë";color[vn++] = TERM_L_WHITE;}
1209 if (flags5 & (RF5_BA_COLD)) {vp[vn] = "produce frost balls";color[vn++] = TERM_L_WHITE;}
1213 if (flags5 & (RF5_BA_POIS)) {vp[vn] = "°½±À";color[vn++] = TERM_L_GREEN;}
1215 if (flags5 & (RF5_BA_POIS)) {vp[vn] = "produce poison balls";color[vn++] = TERM_L_GREEN;}
1219 if (flags5 & (RF5_BA_NETH)) {vp[vn] = "ÃϹöµå";color[vn++] = TERM_L_DARK;}
1221 if (flags5 & (RF5_BA_NETH)) {vp[vn] = "produce nether balls";color[vn++] = TERM_L_DARK;}
1225 if (flags5 & (RF5_BA_WATE)) {vp[vn] = "¥¦¥©¡¼¥¿¡¼¡¦¥Ü¡¼¥ë";color[vn++] = TERM_BLUE;}
1227 if (flags5 & (RF5_BA_WATE)) {vp[vn] = "produce water balls";color[vn++] = TERM_BLUE;}
1231 if (flags4 & (RF4_BA_NUKE)) {vp[vn] = "Êü¼Íǽµå";color[vn++] = TERM_L_GREEN;}
1233 if (flags4 & (RF4_BA_NUKE)) {vp[vn] = "produce balls of radiation";color[vn++] = TERM_L_GREEN;}
1237 if (flags5 & (RF5_BA_MANA)) {vp[vn] = "ËâÎϤÎÍò";color[vn++] = TERM_L_BLUE;}
1239 if (flags5 & (RF5_BA_MANA)) {vp[vn] = "invoke mana storms";color[vn++] = TERM_L_BLUE;}
1243 if (flags5 & (RF5_BA_DARK)) {vp[vn] = "°Å¹õ¤ÎÍò";color[vn++] = TERM_L_DARK;}
1245 if (flags5 & (RF5_BA_DARK)) {vp[vn] = "invoke darkness storms";color[vn++] = TERM_L_DARK;}
1249 if (flags5 & (RF5_BA_LITE)) {vp[vn] = "¥¹¥¿¡¼¥Ð¡¼¥¹¥È";color[vn++] = TERM_YELLOW;}
1251 if (flags5 & (RF5_BA_LITE)) {vp[vn] = "invoke starburst";color[vn++] = TERM_YELLOW;}
1255 if (flags4 & (RF4_BA_CHAO)) {vp[vn] = "½ã¥í¥°¥ë¥¹";color[vn++] = TERM_VIOLET;}
1257 if (flags4 & (RF4_BA_CHAO)) {vp[vn] = "invoke raw Logrus";color[vn++] = TERM_VIOLET;}
1261 if (flags6 & (RF6_HAND_DOOM)) {vp[vn] = "ÇËÌǤμê";color[vn++] = TERM_VIOLET;}
1263 if (flags6 & (RF6_HAND_DOOM)) {vp[vn] = "invoke the Hand of Doom";color[vn++] = TERM_VIOLET;}
1267 if (flags6 & (RF6_PSY_SPEAR)) {vp[vn] = "¸÷¤Î·õ";color[vn++] = TERM_YELLOW;}
1269 if (flags6 & (RF6_PSY_SPEAR)) {vp[vn] = "psycho-spear";color[vn++] = TERM_YELLOW;}
1273 if (flags5 & (RF5_DRAIN_MANA)) {vp[vn] = "ËâÎϵۼý";color[vn++] = TERM_SLATE;}
1275 if (flags5 & (RF5_DRAIN_MANA)) {vp[vn] = "drain mana";color[vn++] = TERM_SLATE;}
1279 if (flags5 & (RF5_MIND_BLAST)) {vp[vn] = "Àº¿À¹¶·â";color[vn++] = TERM_L_RED;}
1281 if (flags5 & (RF5_MIND_BLAST)) {vp[vn] = "cause mind blasting";color[vn++] = TERM_L_RED;}
1285 if (flags5 & (RF5_BRAIN_SMASH)) {vp[vn] = "Ǿ¹¶·â";color[vn++] = TERM_RED;}
1287 if (flags5 & (RF5_BRAIN_SMASH)) {vp[vn] = "cause brain smashing";color[vn++] = TERM_RED;}
1291 if (flags5 & (RF5_CAUSE_1)) {vp[vn] = "·Ú½ý¡Ü¼ö¤¤";color[vn++] = TERM_L_WHITE;}
1293 if (flags5 & (RF5_CAUSE_1)) {vp[vn] = "cause light wounds and cursing";color[vn++] = TERM_L_WHITE;}
1297 if (flags5 & (RF5_CAUSE_2)) {vp[vn] = "½Å½ý¡Ü¼ö¤¤";color[vn++] = TERM_L_WHITE;}
1299 if (flags5 & (RF5_CAUSE_2)) {vp[vn] = "cause serious wounds and cursing";color[vn++] = TERM_L_WHITE;}
1303 if (flags5 & (RF5_CAUSE_3)) {vp[vn] = "Ã×Ì¿½ý¡Ü¼ö¤¤";color[vn++] = TERM_L_WHITE;}
1305 if (flags5 & (RF5_CAUSE_3)) {vp[vn] = "cause critical wounds and cursing";color[vn++] = TERM_L_WHITE;}
1309 if (flags5 & (RF5_CAUSE_4)) {vp[vn] = "È빦¤òÆͤ¯";color[vn++] = TERM_L_WHITE;}
1311 if (flags5 & (RF5_CAUSE_4)) {vp[vn] = "cause mortal wounds";color[vn++] = TERM_L_WHITE;}
1315 if (flags5 & (RF5_BO_ACID)) {vp[vn] = "¥¢¥·¥Ã¥É¡¦¥Ü¥ë¥È";color[vn++] = TERM_GREEN;}
1317 if (flags5 & (RF5_BO_ACID)) {vp[vn] = "produce acid bolts";color[vn++] = TERM_GREEN;}
1321 if (flags5 & (RF5_BO_ELEC)) {vp[vn] = "¥µ¥ó¥À¡¼¡¦¥Ü¥ë¥È";color[vn++] = TERM_BLUE;}
1323 if (flags5 & (RF5_BO_ELEC)) {vp[vn] = "produce lightning bolts";color[vn++] = TERM_BLUE;}
1327 if (flags5 & (RF5_BO_FIRE)) {vp[vn] = "¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È";color[vn++] = TERM_RED;}
1329 if (flags5 & (RF5_BO_FIRE)) {vp[vn] = "produce fire bolts";color[vn++] = TERM_RED;}
1333 if (flags5 & (RF5_BO_COLD)) {vp[vn] = "¥¢¥¤¥¹¡¦¥Ü¥ë¥È";color[vn++] = TERM_L_WHITE;}
1335 if (flags5 & (RF5_BO_COLD)) {vp[vn] = "produce frost bolts";color[vn++] = TERM_L_WHITE;}
1339 if (flags5 & (RF5_BO_NETH)) {vp[vn] = "ÃϹö¤ÎÌð";color[vn++] = TERM_L_DARK;}
1341 if (flags5 & (RF5_BO_NETH)) {vp[vn] = "produce nether bolts";color[vn++] = TERM_L_DARK;}
1345 if (flags5 & (RF5_BO_WATE)) {vp[vn] = "¥¦¥©¡¼¥¿¡¼¡¦¥Ü¥ë¥È";color[vn++] = TERM_BLUE;}
1347 if (flags5 & (RF5_BO_WATE)) {vp[vn] = "produce water bolts";color[vn++] = TERM_BLUE;}
1351 if (flags5 & (RF5_BO_MANA)) {vp[vn] = "ËâÎϤÎÌð";color[vn++] = TERM_L_BLUE;}
1353 if (flags5 & (RF5_BO_MANA)) {vp[vn] = "produce mana bolts";color[vn++] = TERM_L_BLUE;}
1357 if (flags5 & (RF5_BO_PLAS)) {vp[vn] = "¥×¥é¥º¥Þ¡¦¥Ü¥ë¥È";color[vn++] = TERM_L_RED;}
1359 if (flags5 & (RF5_BO_PLAS)) {vp[vn] = "produce plasma bolts";color[vn++] = TERM_L_RED;}
1363 if (flags5 & (RF5_BO_ICEE)) {vp[vn] = "¶Ë´¨¤ÎÌð";color[vn++] = TERM_WHITE;}
1365 if (flags5 & (RF5_BO_ICEE)) {vp[vn] = "produce ice bolts";color[vn++] = TERM_WHITE;}
1369 if (flags5 & (RF5_MISSILE)) {vp[vn] = "¥Þ¥¸¥Ã¥¯¥ß¥µ¥¤¥ë";color[vn++] = TERM_SLATE;}
1371 if (flags5 & (RF5_MISSILE)) {vp[vn] = "produce magic missiles";color[vn++] = TERM_SLATE;}
1375 if (flags5 & (RF5_SCARE)) {vp[vn] = "¶²ÉÝ";color[vn++] = TERM_SLATE;}
1377 if (flags5 & (RF5_SCARE)) {vp[vn] = "terrify";color[vn++] = TERM_SLATE;}
1381 if (flags5 & (RF5_BLIND)) {vp[vn] = "Ìܤ¯¤é¤Þ¤·";color[vn++] = TERM_L_DARK;}
1383 if (flags5 & (RF5_BLIND)) {vp[vn] = "blind";color[vn++] = TERM_L_DARK;}
1387 if (flags5 & (RF5_CONF)) {vp[vn] = "º®Íð";color[vn++] = TERM_L_UMBER;}
1389 if (flags5 & (RF5_CONF)) {vp[vn] = "confuse";color[vn++] = TERM_L_UMBER;}
1393 if (flags5 & (RF5_SLOW)) {vp[vn] = "¸ºÂ®";color[vn++] = TERM_UMBER;}
1395 if (flags5 & (RF5_SLOW)) {vp[vn] = "slow";color[vn++] = TERM_UMBER;}
1399 if (flags5 & (RF5_HOLD)) {vp[vn] = "Ëãáã";color[vn++] = TERM_RED;}
1401 if (flags5 & (RF5_HOLD)) {vp[vn] = "paralyze";color[vn++] = TERM_RED;}
1405 if (flags6 & (RF6_HASTE)) {vp[vn] = "²Ã®";color[vn++] = TERM_L_GREEN;}
1407 if (flags6 & (RF6_HASTE)) {vp[vn] = "haste-self";color[vn++] = TERM_L_GREEN;}
1411 if (flags6 & (RF6_HEAL)) {vp[vn] = "¼£Ìþ";color[vn++] = TERM_WHITE;}
1413 if (flags6 & (RF6_HEAL)) {vp[vn] = "heal-self";color[vn++] = TERM_WHITE;}
1417 if (flags6 & (RF6_INVULNER)) {vp[vn] = "̵Ũ²½";color[vn++] = TERM_WHITE;}
1419 if (flags6 & (RF6_INVULNER)) {vp[vn] = "make invulnerable";color[vn++] = TERM_WHITE;}
1423 if (flags4 & RF4_DISPEL) {vp[vn] = "ËâÎϾõî";color[vn++] = TERM_L_WHITE;}
1425 if (flags4 & RF4_DISPEL) {vp[vn] = "dispel-magic";color[vn++] = TERM_L_WHITE;}
1429 if (flags6 & (RF6_BLINK)) {vp[vn] = "¥·¥ç¡¼¥È¥Æ¥ì¥Ý¡¼¥È";color[vn++] = TERM_UMBER;}
1431 if (flags6 & (RF6_BLINK)) {vp[vn] = "blink-self";color[vn++] = TERM_UMBER;}
1435 if (flags6 & (RF6_TPORT)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È";color[vn++] = TERM_ORANGE;}
1437 if (flags6 & (RF6_TPORT)) {vp[vn] = "teleport-self";color[vn++] = TERM_ORANGE;}
1441 if (flags6 & (RF6_WORLD)) {vp[vn] = "»þ¤ò»ß¤á¤ë";color[vn++] = TERM_L_BLUE;}
1443 if (flags6 & (RF6_WORLD)) {vp[vn] = "stop the time";color[vn++] = TERM_L_BLUE;}
1447 if (flags6 & (RF6_TELE_TO)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È¥Ð¥Ã¥¯";color[vn++] = TERM_L_UMBER;}
1449 if (flags6 & (RF6_TELE_TO)) {vp[vn] = "teleport to";color[vn++] = TERM_L_UMBER;}
1453 if (flags6 & (RF6_TELE_AWAY)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È¥¢¥¦¥§¥¤";color[vn++] = TERM_UMBER;}
1455 if (flags6 & (RF6_TELE_AWAY)) {vp[vn] = "teleport away";color[vn++] = TERM_UMBER;}
1459 if (flags6 & (RF6_TELE_LEVEL)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È¡¦¥ì¥Ù¥ë";color[vn++] = TERM_ORANGE;}
1461 if (flags6 & (RF6_TELE_LEVEL)) {vp[vn] = "teleport level";color[vn++] = TERM_ORANGE;}
1465 if (flags6 & (RF6_DARKNESS)) {if ((p_ptr->pclass != CLASS_NINJA) || (flags3 & (RF3_UNDEAD | RF3_HURT_LITE))) {vp[vn] = "°Å°Ç";color[vn++] = TERM_L_DARK;} else { vp[vn] = "Á®¸÷";color[vn++] = TERM_YELLOW;}}
1467 if (flags6 & (RF6_DARKNESS)) {vp[vn] = ((p_ptr->pclass != CLASS_NINJA) || (flags3 & (RF3_UNDEAD | RF3_HURT_LITE))) ? "create darkness" : "create light";color[vn++] = TERM_L_DARK;}
1471 if (flags6 & (RF6_TRAPS)) {vp[vn] = "¥È¥é¥Ã¥×";color[vn++] = TERM_BLUE;}
1473 if (flags6 & (RF6_TRAPS)) {vp[vn] = "create traps";color[vn++] = TERM_BLUE;}
1477 if (flags6 & (RF6_FORGET)) {vp[vn] = "µ²±¾Ãµî";color[vn++] = TERM_BLUE;}
1479 if (flags6 & (RF6_FORGET)) {vp[vn] = "cause amnesia";color[vn++] = TERM_BLUE;}
1483 if (flags6 & (RF6_RAISE_DEAD)) {vp[vn] = "»à¼ÔÉü³è";color[vn++] = TERM_RED;}
1485 if (flags6 & (RF6_RAISE_DEAD)) {vp[vn] = "raise dead";color[vn++] = TERM_RED;}
1489 if (flags6 & (RF6_S_MONSTER)) {vp[vn] = "¥â¥ó¥¹¥¿¡¼°ìÂξ¤´";color[vn++] = TERM_SLATE;}
1491 if (flags6 & (RF6_S_MONSTER)) {vp[vn] = "summon a monster";color[vn++] = TERM_SLATE;}
1495 if (flags6 & (RF6_S_MONSTERS)) {vp[vn] = "¥â¥ó¥¹¥¿¡¼Ê£¿ô¾¤´";color[vn++] = TERM_L_WHITE;}
1497 if (flags6 & (RF6_S_MONSTERS)) {vp[vn] = "summon monsters";color[vn++] = TERM_L_WHITE;}
1501 if (flags6 & (RF6_S_KIN)) {vp[vn] = "µß±ç¾¤´";color[vn++] = TERM_ORANGE;}
1503 if (flags6 & (RF6_S_KIN)) {vp[vn] = "summon aid";color[vn++] = TERM_ORANGE;}
1507 if (flags6 & (RF6_S_ANT)) {vp[vn] = "¥¢¥ê¾¤´";color[vn++] = TERM_RED;}
1509 if (flags6 & (RF6_S_ANT)) {vp[vn] = "summon ants";color[vn++] = TERM_RED;}
1513 if (flags6 & (RF6_S_SPIDER)) {vp[vn] = "¥¯¥â¾¤´";color[vn++] = TERM_L_DARK;}
1515 if (flags6 & (RF6_S_SPIDER)) {vp[vn] = "summon spiders";color[vn++] = TERM_L_DARK;}
1519 if (flags6 & (RF6_S_HOUND)) {vp[vn] = "¥Ï¥¦¥ó¥É¾¤´";color[vn++] = TERM_L_UMBER;}
1521 if (flags6 & (RF6_S_HOUND)) {vp[vn] = "summon hounds";color[vn++] = TERM_L_UMBER;}
1525 if (flags6 & (RF6_S_HYDRA)) {vp[vn] = "¥Ò¥É¥é¾¤´";color[vn++] = TERM_L_GREEN;}
1527 if (flags6 & (RF6_S_HYDRA)) {vp[vn] = "summon hydras";color[vn++] = TERM_L_GREEN;}
1531 if (flags6 & (RF6_S_ANGEL)) {vp[vn] = "Å·»È°ìÂξ¤´";color[vn++] = TERM_YELLOW;}
1533 if (flags6 & (RF6_S_ANGEL)) {vp[vn] = "summon an angel";color[vn++] = TERM_YELLOW;}
1537 if (flags6 & (RF6_S_DEMON)) {vp[vn] = "¥Ç¡¼¥â¥ó°ìÂξ¤´";color[vn++] = TERM_L_RED;}
1539 if (flags6 & (RF6_S_DEMON)) {vp[vn] = "summon a demon";color[vn++] = TERM_L_RED;}
1543 if (flags6 & (RF6_S_UNDEAD)) {vp[vn] = "¥¢¥ó¥Ç¥Ã¥É°ìÂξ¤´";color[vn++] = TERM_L_DARK;}
1545 if (flags6 & (RF6_S_UNDEAD)) {vp[vn] = "summon an undead";color[vn++] = TERM_L_DARK;}
1549 if (flags6 & (RF6_S_DRAGON)) {vp[vn] = "¥É¥é¥´¥ó°ìÂξ¤´";color[vn++] = TERM_ORANGE;}
1551 if (flags6 & (RF6_S_DRAGON)) {vp[vn] = "summon a dragon";color[vn++] = TERM_ORANGE;}
1555 if (flags6 & (RF6_S_HI_UNDEAD)) {vp[vn] = "¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¾¤´";color[vn++] = TERM_L_DARK;}
1557 if (flags6 & (RF6_S_HI_UNDEAD)) {vp[vn] = "summon Greater Undead";color[vn++] = TERM_L_DARK;}
1561 if (flags6 & (RF6_S_HI_DRAGON)) {vp[vn] = "¸ÅÂå¥É¥é¥´¥ó¾¤´";color[vn++] = TERM_ORANGE;}
1563 if (flags6 & (RF6_S_HI_DRAGON)) {vp[vn] = "summon Ancient Dragons";color[vn++] = TERM_ORANGE;}
1567 if (flags6 & (RF6_S_CYBER)) {vp[vn] = "¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¾¤´";color[vn++] = TERM_UMBER;}
1569 if (flags6 & (RF6_S_CYBER)) {vp[vn] = "summon Cyberdemons";color[vn++] = TERM_UMBER;}
1573 if (flags6 & (RF6_S_AMBERITES)) {vp[vn] = "¥¢¥ó¥Ð¡¼¤Î²¦Â²¾¤´";color[vn++] = TERM_VIOLET;}
1575 if (flags6 & (RF6_S_AMBERITES)) {vp[vn] = "summon Lords of Amber";color[vn++] = TERM_VIOLET;}
1579 if (flags6 & (RF6_S_UNIQUE)) {vp[vn] = "¥æ¥Ë¡¼¥¯¡¦¥â¥ó¥¹¥¿¡¼¾¤´";color[vn++] = TERM_VIOLET;}
1581 if (flags6 & (RF6_S_UNIQUE)) {vp[vn] = "summon Unique Monsters";color[vn++] = TERM_VIOLET;}
1585 /* Describe spells */
1595 hooked_roff("¡¢¤Ê¤ª¤«¤Ä");
1597 hooked_roff(", and is also");
1604 hooked_roff(format("%^s¤Ï", wd_he[msex]));
1606 hooked_roff(format("%^s is", wd_he[msex]));
1613 if (flags2 & (RF2_SMART)) hook_c_roff(TERM_YELLOW, "Ū³Î¤Ë");
1616 hooked_roff("ËâË¡¤ò»È¤¦¤³¤È¤¬¤Ç¤¡¢");
1619 hooked_roff(" magical, casting spells");
1622 if (flags2 & RF2_SMART) hooked_roff(" intelligently");
1627 for (n = 0; n < vn; n++)
1631 if ( n != 0 ) hooked_roff("¡¢");
1633 if (n == 0) hooked_roff(" which ");
1634 else if (n < vn-1) hooked_roff(", ");
1635 else hooked_roff(" or ");
1640 hook_c_roff(color[n], vp[n]);
1643 hooked_roff("¤Î¼öʸ¤ò¾§¤¨¤ë¤³¤È¤¬¤¢¤ë");
1648 /* End the sentence about inate/other spells */
1649 if (breath || magic)
1652 m = r_ptr->r_cast_inate + r_ptr->r_cast_spell;
1654 /* Average frequency */
1655 n = (r_ptr->freq_inate + r_ptr->freq_spell) / 2;
1657 /* Describe the spell frequency */
1658 if (m > 100 || know_everything)
1661 hooked_roff(format("(³ÎΨ:1/%d)", 100 / n));
1663 hooked_roff(format("; 1 time in %d", 100 / n));
1668 /* Guess at the frequency */
1671 n = ((n + 9) / 10) * 10;
1673 hooked_roff(format("(³ÎΨ:Ìó1/%d)", 100 / n));
1675 hooked_roff(format("; about 1 time in %d", 100 / n));
1680 /* End this sentence */
1689 /* Describe monster "toughness" */
1690 if (know_armour(r_idx))
1694 hooked_roff(format("%^s¤Ï AC%d ¤ÎËɸæÎϤÈ",
1696 hooked_roff(format("%^s has an armor rating of %d",
1699 wd_he[msex], r_ptr->ac));
1701 /* Maximized hitpoints */
1702 if (flags1 & RF1_FORCE_MAXHP)
1705 hooked_roff(format(" %d ¤ÎÂÎÎϤ¬¤¢¤ë¡£",
1707 hooked_roff(format(" and a life rating of %d. ",
1710 r_ptr->hdice * r_ptr->hside));
1713 /* Variable hitpoints */
1717 hooked_roff(format(" %dd%d ¤ÎÂÎÎϤ¬¤¢¤ë¡£",
1719 hooked_roff(format(" and a life rating of %dd%d. ",
1722 r_ptr->hdice, r_ptr->hside));
1728 /* Collect special abilities. */
1731 if (flags7 & (RF7_HAS_LITE_1 | RF7_HAS_LITE_2)) vp[vn++] = "¥À¥ó¥¸¥ç¥ó¤ò¾È¤é¤¹";
1733 if (flags7 & (RF7_HAS_LITE_1 | RF7_HAS_LITE_2)) vp[vn++] = "illuminate the dungeon";
1737 if (flags2 & RF2_OPEN_DOOR) vp[vn++] = "¥É¥¢¤ò³«¤±¤ë";
1739 if (flags2 & RF2_OPEN_DOOR) vp[vn++] = "open doors";
1743 if (flags2 & RF2_BASH_DOOR) vp[vn++] = "¥É¥¢¤òÂǤÁÇˤë";
1745 if (flags2 & RF2_BASH_DOOR) vp[vn++] = "bash down doors";
1749 if (flags2 & RF2_PASS_WALL) vp[vn++] = "Êɤò¤¹¤êÈ´¤±¤ë";
1751 if (flags2 & RF2_PASS_WALL) vp[vn++] = "pass through walls";
1755 if (flags2 & RF2_KILL_WALL) vp[vn++] = "Êɤò·¡¤ê¿Ê¤à";
1757 if (flags2 & RF2_KILL_WALL) vp[vn++] = "bore through walls";
1761 if (flags2 & RF2_MOVE_BODY) vp[vn++] = "¼å¤¤¥â¥ó¥¹¥¿¡¼¤ò²¡¤·¤Î¤±¤ë";
1763 if (flags2 & RF2_MOVE_BODY) vp[vn++] = "push past weaker monsters";
1767 if (flags2 & RF2_KILL_BODY) vp[vn++] = "¼å¤¤¥â¥ó¥¹¥¿¡¼¤òÅݤ¹";
1769 if (flags2 & RF2_KILL_BODY) vp[vn++] = "destroy weaker monsters";
1773 if (flags2 & RF2_TAKE_ITEM) vp[vn++] = "¥¢¥¤¥Æ¥à¤ò½¦¤¦";
1775 if (flags2 & RF2_TAKE_ITEM) vp[vn++] = "pick up objects";
1779 if (flags2 & RF2_KILL_ITEM) vp[vn++] = "¥¢¥¤¥Æ¥à¤ò²õ¤¹";
1781 if (flags2 & RF2_KILL_ITEM) vp[vn++] = "destroy objects";
1785 /* Describe special abilities. */
1790 hooked_roff(format("%^s¤Ï", wd_he[msex]));
1792 hooked_roff(format("%^s", wd_he[msex]));
1797 for (n = 0; n < vn; n++)
1802 jverb(vp[n],jverb_buf,JVERB_AND);
1803 hooked_roff(jverb_buf);
1806 else hooked_roff(vp[n]);
1808 if (n == 0) hooked_roff(" can ");
1809 else if (n < vn-1) hooked_roff(", ");
1810 else hooked_roff(" and ");
1820 hooked_roff("¤³¤È¤¬¤Ç¤¤ë¡£");
1828 /* Describe special abilities. */
1829 if (flags7 & (RF7_SELF_LITE_1 | RF7_SELF_LITE_2))
1832 hooked_roff(format("%^s¤Ï¸÷¤Ã¤Æ¤¤¤ë¡£", wd_he[msex]));
1834 hooked_roff(format("%^s illuminate the dungeon. ", wd_he[msex]));
1838 if (flags2 & RF2_INVISIBLE)
1841 hooked_roff(format("%^s¤ÏÆ©ÌÀ¤ÇÌܤ˸«¤¨¤Ê¤¤¡£", wd_he[msex]));
1843 hooked_roff(format("%^s is invisible. ", wd_he[msex]));
1847 if (flags2 & RF2_COLD_BLOOD)
1850 hooked_roff(format("%^s¤ÏÎä·ìưʪ¤Ç¤¢¤ë¡£", wd_he[msex]));
1852 hooked_roff(format("%^s is cold blooded. ", wd_he[msex]));
1856 if (flags2 & RF2_EMPTY_MIND)
1859 hooked_roff(format("%^s¤Ï¥Æ¥ì¥Ñ¥·¡¼¤Ç¤Ï´¶ÃΤǤ¤Ê¤¤¡£", wd_he[msex]));
1861 hooked_roff(format("%^s is not detected by telepathy. ", wd_he[msex]));
1865 else if (flags2 & RF2_WEIRD_MIND)
1868 hooked_roff(format("%^s¤Ï¤Þ¤ì¤Ë¥Æ¥ì¥Ñ¥·¡¼¤Ç´¶ÃΤǤ¤ë¡£", wd_he[msex]));
1870 hooked_roff(format("%^s is rarely detected by telepathy. ", wd_he[msex]));
1874 if (flags2 & RF2_MULTIPLY)
1877 hook_c_roff(TERM_L_UMBER, format("%^s¤ÏÇúȯŪ¤ËÁý¿£¤¹¤ë¡£", wd_he[msex]));
1879 hook_c_roff(TERM_L_UMBER, format("%^s breeds explosively. ", wd_he[msex]));
1883 if (flags2 & RF2_REGENERATE)
1886 hook_c_roff(TERM_L_WHITE, format("%^s¤ÏÁÇÁ᤯ÂÎÎϤò²óÉü¤¹¤ë¡£", wd_he[msex]));
1888 hook_c_roff(TERM_L_WHITE, format("%^s regenerates quickly. ", wd_he[msex]));
1892 if (flags7 & RF7_RIDING)
1895 hook_c_roff(TERM_SLATE, format("%^s¤Ë¾è¤ë¤³¤È¤¬¤Ç¤¤ë¡£", wd_he[msex]));
1897 hook_c_roff(TERM_SLATE, format("%^s is suitable for riding. ", wd_he[msex]));
1903 /* Collect susceptibilities */
1906 if (flags3 & RF3_HURT_ROCK) {vp[vn] = "´ä¤ò½üµî¤¹¤ë¤â¤Î";color[vn++] = TERM_UMBER;}
1908 if (flags3 & RF3_HURT_ROCK) {vp[vn] = "rock remover";color[vn++] = TERM_UMBER;}
1912 if (flags3 & RF3_HURT_LITE) {vp[vn] = "ÌÀ¤ë¤¤¸÷";color[vn++] = TERM_YELLOW;}
1914 if (flags3 & RF3_HURT_LITE) {vp[vn] = "bright light";color[vn++] = TERM_YELLOW;}
1918 if (flags3 & RF3_HURT_FIRE) {vp[vn] = "±ê";color[vn++] = TERM_RED;}
1920 if (flags3 & RF3_HURT_FIRE) {vp[vn] = "fire";color[vn++] = TERM_RED;}
1924 if (flags3 & RF3_HURT_COLD) {vp[vn] = "Î䵤";color[vn++] = TERM_L_WHITE;}
1926 if (flags3 & RF3_HURT_COLD) {vp[vn] = "cold";color[vn++] = TERM_L_WHITE;}
1930 /* Describe susceptibilities */
1935 hooked_roff(format("%^s¤Ë¤Ï", wd_he[msex]));
1937 hooked_roff(format("%^s", wd_he[msex]));
1942 for (n = 0; n < vn; n++)
1946 if ( n != 0 ) hooked_roff("¤ä");
1948 if (n == 0) hooked_roff(" is hurt by ");
1949 else if (n < vn-1) hooked_roff(", ");
1950 else hooked_roff(" and ");
1955 hook_c_roff(color[n], vp[n]);
1960 hooked_roff("¤Ç¥À¥á¡¼¥¸¤òÍ¿¤¨¤é¤ì¤ë¡£");
1968 /* Collect immunities */
1971 if (flags3 & RF3_IM_ACID) {vp[vn] = "»À";color[vn++] = TERM_GREEN;}
1973 if (flags3 & RF3_IM_ACID) {vp[vn] = "acid";color[vn++] = TERM_GREEN;}
1977 if (flags3 & RF3_IM_ELEC) {vp[vn] = "°ðºÊ";color[vn++] = TERM_BLUE;}
1979 if (flags3 & RF3_IM_ELEC) {vp[vn] = "lightning";color[vn++] = TERM_BLUE;}
1983 if (flags3 & RF3_IM_FIRE) {vp[vn] = "±ê";color[vn++] = TERM_RED;}
1985 if (flags3 & RF3_IM_FIRE) {vp[vn] = "fire";color[vn++] = TERM_RED;}
1989 if (flags3 & RF3_IM_COLD) {vp[vn] = "Î䵤";color[vn++] = TERM_L_WHITE;}
1991 if (flags3 & RF3_IM_COLD) {vp[vn] = "cold";color[vn++] = TERM_L_WHITE;}
1995 if (flags3 & RF3_IM_POIS) {vp[vn] = "ÆÇ";color[vn++] = TERM_L_GREEN;}
1997 if (flags3 & RF3_IM_POIS) {vp[vn] = "poison";color[vn++] = TERM_L_GREEN;}
2001 /* Describe immunities */
2006 hooked_roff(format("%^s¤Ï", wd_he[msex]));
2008 hooked_roff(format("%^s", wd_he[msex]));
2013 for (n = 0; n < vn; n++)
2017 if ( n != 0 ) hooked_roff("¤È");
2019 if (n == 0) hooked_roff(" resists ");
2020 else if (n < vn-1) hooked_roff(", ");
2021 else hooked_roff(" and ");
2026 hook_c_roff(color[n], vp[n]);
2031 hooked_roff("¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£");
2039 /* Collect resistances */
2042 if (flags4 & RF4_BR_LITE) {vp[vn] = "Á®¸÷";color[vn++] = TERM_YELLOW;}
2044 if (flags4 & RF4_BR_LITE) {vp[vn] = "light";color[vn++] = TERM_YELLOW;}
2048 if ((flags4 & RF4_BR_DARK) || (flags3 & RF3_ORC)) {vp[vn] = "°Å¹õ";color[vn++] = TERM_L_DARK;}
2050 if (flags4 & RF4_BR_DARK || (flags3 & RF3_ORC)) {vp[vn] = "dark";color[vn++] = TERM_L_DARK;}
2054 if (flags3 & RF3_RES_NETH) {vp[vn] = "ÃϹö";color[vn++] = TERM_L_DARK;}
2056 if (flags3 & RF3_RES_NETH) {vp[vn] = "nether";color[vn++] = TERM_L_DARK;}
2060 if (flags3 & RF3_RES_WATE) {vp[vn] = "¿å";color[vn++] = TERM_BLUE;}
2062 if (flags3 & RF3_RES_WATE) {vp[vn] = "water";color[vn++] = TERM_BLUE;}
2066 if (flags3 & RF3_RES_PLAS) {vp[vn] = "¥×¥é¥º¥Þ";color[vn++] = TERM_L_RED;}
2068 if (flags3 & RF3_RES_PLAS) {vp[vn] = "plasma";color[vn++] = TERM_L_RED;}
2072 if (flags4 & RF4_BR_SHAR) {vp[vn] = "ÇËÊÒ";color[vn++] = TERM_L_UMBER;}
2074 if (flags4 & RF4_BR_SHAR) {vp[vn] = "shards";color[vn++] = TERM_L_UMBER;}
2078 if (flags4 & RF4_BR_SOUN) {vp[vn] = "¹ì²»";color[vn++] = TERM_ORANGE;}
2080 if (flags4 & RF4_BR_SOUN) {vp[vn] = "sound";color[vn++] = TERM_ORANGE;}
2084 if (flags4 & RF4_BR_CONF) {vp[vn] = "º®Íð";color[vn++] = TERM_L_UMBER;}
2086 if (flags4 & RF4_BR_CONF) {vp[vn] = "conf";color[vn++] = TERM_L_UMBER;}
2090 if ((flags4 & RF4_BR_CHAO) || (r_idx == MON_STORMBRINGER)) {vp[vn] = "¥«¥ª¥¹";color[vn++] = TERM_VIOLET;}
2092 if ((flags4 & RF4_BR_CHAO) || (r_idx == MON_STORMBRINGER)) {vp[vn] = "chaos";color[vn++] = TERM_VIOLET;}
2096 if (flags3 & RF3_RES_NEXU) {vp[vn] = "°ø²Ìº®Íð";color[vn++] = TERM_VIOLET;}
2098 if (flags3 & RF3_RES_NEXU) {vp[vn] = "nexus";color[vn++] = TERM_VIOLET;}
2102 if (flags3 & RF3_RES_DISE) {vp[vn] = "Îô²½";color[vn++] = TERM_VIOLET;}
2104 if (flags3 & RF3_RES_DISE) {vp[vn] = "disenchantment";color[vn++] = TERM_VIOLET;}
2108 if (flags4 & RF4_BR_WALL) {vp[vn] = "¥Õ¥©¡¼¥¹";color[vn++] = TERM_UMBER;}
2110 if (flags4 & RF4_BR_WALL) {vp[vn] = "sound";color[vn++] = TERM_UMBER;}
2114 if (flags4 & RF4_BR_INER) {vp[vn] = "ÃÙÆß";color[vn++] = TERM_SLATE;}
2116 if (flags4 & RF4_BR_INER) {vp[vn] = "inertia";color[vn++] = TERM_SLATE;}
2120 if (flags4 & RF4_BR_TIME) {vp[vn] = "»þ´ÖµÕž";color[vn++] = TERM_L_BLUE;}
2122 if (flags4 & RF4_BR_TIME) {vp[vn] = "time";color[vn++] = TERM_L_BLUE;}
2126 if (flags4 & RF4_BR_GRAV) {vp[vn] = "½ÅÎÏ";color[vn++] = TERM_SLATE;}
2128 if (flags4 & RF4_BR_GRAV) {vp[vn] = "gravity";color[vn++] = TERM_SLATE;}
2132 if (flags3 & RF3_RES_ALL) {vp[vn] = "¤¢¤é¤æ¤ë¹¶·â";color[vn++] = TERM_YELLOW;}
2134 if (flags3 & RF3_RES_ALL) {vp[vn] = "all";color[vn++] = TERM_YELLOW;}
2138 if ((flags3 & RF3_RES_TELE) && !(r_ptr->flags1 & RF1_UNIQUE)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È";color[vn++] = TERM_ORANGE;}
2140 if ((flags3 & RF3_RES_TELE) && !(r_ptr->flags1 & RF1_UNIQUE)) {vp[vn] = "teleportation";color[vn++] = TERM_ORANGE;}
2144 /* Describe resistances */
2149 hooked_roff(format("%^s¤Ï", wd_he[msex]));
2151 hooked_roff(format("%^s", wd_he[msex]));
2156 for (n = 0; n < vn; n++)
2160 if ( n != 0 ) hooked_roff("¤È");
2162 if (n == 0) hooked_roff(" resists ");
2163 else if (n < vn-1) hooked_roff(", ");
2164 else hooked_roff(" and ");
2169 hook_c_roff(color[n], vp[n]);
2174 hooked_roff("¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£");
2182 if ((r_ptr->r_xtra1 & MR1_SINKA) || know_everything)
2184 if (r_ptr->next_r_idx)
2187 hooked_roff(format("%^s¤Ï·Ð¸³¤òÀѤà¤È¡¢", wd_he[msex]));
2189 hooked_roff(format("%^s will evolve into ", wd_he[msex]));
2191 hook_c_roff(TERM_YELLOW, format("%s", r_name+r_info[r_ptr->next_r_idx].name));
2193 hooked_roff(format("¤Ë¿Ê²½¤¹¤ë¡£"));
2195 hooked_roff(format(" when %s gets enugh experience. ", wd_he[msex]));
2198 else if (!(r_ptr->flags1 & RF1_UNIQUE))
2201 hooked_roff(format("%s¤Ï¿Ê²½¤·¤Ê¤¤¡£", wd_he[msex]));
2203 hooked_roff(format("%s won't evolve. ", wd_he[msex]));
2208 /* Collect non-effects */
2211 if (flags3 & RF3_NO_STUN) {vp[vn] = "Û¯Û°¤È¤·¤Ê¤¤";color[vn++] = TERM_ORANGE;}
2213 if (flags3 & RF3_NO_STUN) {vp[vn] = "stunned";color[vn++] = TERM_ORANGE;}
2217 if (flags3 & RF3_NO_FEAR) {vp[vn] = "¶²Éݤò´¶¤¸¤Ê¤¤";color[vn++] = TERM_SLATE;}
2219 if (flags3 & RF3_NO_FEAR) {vp[vn] = "frightened";color[vn++] = TERM_SLATE;}
2223 if (flags3 & RF3_NO_CONF) {vp[vn] = "º®Í𤷤ʤ¤";color[vn++] = TERM_L_UMBER;}
2225 if (flags3 & RF3_NO_CONF) {vp[vn] = "confused";color[vn++] = TERM_L_UMBER;}
2229 if (flags3 & RF3_NO_SLEEP) {vp[vn] = "̲¤é¤µ¤ì¤Ê¤¤";color[vn++] = TERM_BLUE;}
2231 if (flags3 & RF3_NO_SLEEP) {vp[vn] = "slept";color[vn++] = TERM_BLUE;}
2235 if ((flags3 & RF3_RES_TELE) && (r_ptr->flags1 & RF1_UNIQUE)) {vp[vn] = "¥Æ¥ì¥Ý¡¼¥È¤µ¤ì¤Ê¤¤";color[vn++] = TERM_ORANGE;}
2237 if ((flags3 & RF3_RES_TELE) && (r_ptr->flags1 & RF1_UNIQUE)) {vp[vn] = "teleported";color[vn++] = TERM_ORANGE;}
2240 /* Describe non-effects */
2245 hooked_roff(format("%^s¤Ï", wd_he[msex]));
2247 hooked_roff(format("%^s", wd_he[msex]));
2252 for (n = 0; n < vn; n++)
2256 if ( n != 0 ) hooked_roff("¤·¡¢");
2258 if (n == 0) hooked_roff(" cannot be ");
2259 else if (n < vn - 1) hooked_roff(", ");
2260 else hooked_roff(" or ");
2265 hook_c_roff(color[n], vp[n]);
2278 /* Do we know how aware it is? */
2279 if ((((int)r_ptr->r_wake * (int)r_ptr->r_wake) > r_ptr->sleep) ||
2280 (r_ptr->r_ignore == MAX_UCHAR) ||
2281 (r_ptr->sleep == 0 && r_ptr->r_tkills >= 10) || know_everything)
2285 if (r_ptr->sleep > 200)
2288 act = "¤ò̵»ë¤·¤¬¤Á¤Ç¤¢¤ë¤¬";
2290 act = "prefers to ignore";
2294 else if (r_ptr->sleep > 95)
2297 act = "¤ËÂФ·¤Æ¤Û¤È¤ó¤ÉÃí°Õ¤òʧ¤ï¤Ê¤¤¤¬";
2299 act = "pays very little attention to";
2303 else if (r_ptr->sleep > 75)
2306 act = "¤ËÂФ·¤Æ¤¢¤Þ¤êÃí°Õ¤òʧ¤ï¤Ê¤¤¤¬";
2308 act = "pays little attention to";
2312 else if (r_ptr->sleep > 45)
2315 act = "¤ò¸«²á¤´¤·¤¬¤Á¤Ç¤¢¤ë¤¬";
2317 act = "tends to overlook";
2321 else if (r_ptr->sleep > 25)
2324 act = "¤ò¤Û¤ó¤Î¾¯¤·¤Ï¸«¤Æ¤ª¤ê";
2326 act = "takes quite a while to see";
2330 else if (r_ptr->sleep > 10)
2333 act = "¤ò¤·¤Ð¤é¤¯¤Ï¸«¤Æ¤ª¤ê";
2335 act = "takes a while to see";
2339 else if (r_ptr->sleep > 5)
2342 act = "¤ò´öʬÃí°Õ¿¼¤¯¸«¤Æ¤ª¤ê";
2344 act = "is fairly observant of";
2348 else if (r_ptr->sleep > 3)
2351 act = "¤òÃí°Õ¿¼¤¯¸«¤Æ¤ª¤ê";
2353 act = "is observant of";
2357 else if (r_ptr->sleep > 1)
2360 act = "¤ò¤«¤Ê¤êÃí°Õ¿¼¤¯¸«¤Æ¤ª¤ê";
2362 act = "is very observant of";
2366 else if (r_ptr->sleep > 0)
2369 act = "¤ò·Ù²ü¤·¤Æ¤ª¤ê";
2371 act = "is vigilant for";
2378 act = "¤ò¤«¤Ê¤ê·Ù²ü¤·¤Æ¤ª¤ê";
2380 act = "is ever vigilant for";
2386 hooked_roff(format("%^s¤Ï¿¯Æþ¼Ô%s¡¢ %d ¥Õ¥£¡¼¥ÈÀ褫¤é¿¯Æþ¼Ô¤Ëµ¤ÉÕ¤¯¤³¤È¤¬¤¢¤ë¡£",
2387 wd_he[msex], act, 10 * r_ptr->aaf));
2389 hooked_roff(format("%^s %s intruders, which %s may notice from %d feet. ",
2390 wd_he[msex], act, wd_he[msex], 10 * r_ptr->aaf));
2396 /* Drops gold and/or items */
2397 if (drop_gold || drop_item)
2404 hooked_roff(format("%^s¤Ï", wd_he[msex]));
2406 hooked_roff(format("%^s may carry", wd_he[msex]));
2410 /* Count maximum drop */
2411 n = MAX(drop_gold, drop_item);
2413 /* One drop (may need an "n") */
2417 hooked_roff("°ì¤Ä¤Î");
2429 hooked_roff("°ì¤Ä¤«Æó¤Ä¤Î");
2431 hooked_roff(" one or two");
2440 hooked_roff(format(" %d ¸Ä¤Þ¤Ç¤Î", n));
2442 hooked_roff(format(" up to %d", n));
2449 if (flags1 & RF1_DROP_GREAT)
2459 /* Good (no "n" needed) */
2460 else if (flags1 & RF1_DROP_GOOD)
2481 /* Handle singular "an" */
2483 if (sin) hooked_roff("n");
2487 /* Dump "object(s)" */
2488 if (p) hooked_roff(p);
2490 hooked_roff("¥¢¥¤¥Æ¥à");
2492 hooked_roff(" object");
2493 if (n != 1) hooked_roff("s");
2497 /* Conjunction replaces variety, if needed for "gold" below */
2510 if (!p) sin = FALSE;
2512 /* Handle singular "an" */
2514 if (sin) hooked_roff("n");
2518 /* Dump "treasure(s)" */
2519 if (p) hooked_roff(p);
2521 hooked_roff("ºâÊõ");
2523 hooked_roff(" treasure");
2524 if (n != 1) hooked_roff("s");
2529 /* End this sentence */
2531 hooked_roff("¤ò»ý¤Ã¤Æ¤¤¤ë¤³¤È¤¬¤¢¤ë¡£");
2539 /* Count the number of "known" attacks */
2540 for (n = 0, m = 0; m < 4; m++)
2542 /* Skip non-attacks */
2543 if (!r_ptr->blow[m].method) continue;
2544 if (r_ptr->blow[m].method == RBM_SHOOT) continue;
2546 /* Count known attacks */
2547 if (r_ptr->r_blows[m] || know_everything) n++;
2550 /* Examine (and count) the actual attacks */
2551 for (r = 0, m = 0; m < 4; m++)
2553 int method, effect, d1, d2;
2555 /* Skip non-attacks */
2556 if (!r_ptr->blow[m].method) continue;
2557 if (r_ptr->blow[m].method == RBM_SHOOT) continue;
2559 /* Skip unknown attacks */
2560 if (!r_ptr->r_blows[m] && !know_everything) continue;
2562 /* Extract the attack info */
2563 method = r_ptr->blow[m].method;
2564 effect = r_ptr->blow[m].effect;
2565 d1 = r_ptr->blow[m].d_dice;
2566 d2 = r_ptr->blow[m].d_side;
2571 /* Acquire the method */
2575 case RBM_HIT: p = "²¥¤ë"; break;
2577 case RBM_HIT: p = "hit"; break;
2581 case RBM_TOUCH: p = "¿¨¤ë"; break;
2583 case RBM_TOUCH: p = "touch"; break;
2587 case RBM_PUNCH: p = "¥Ñ¥ó¥Á¤¹¤ë"; break;
2589 case RBM_PUNCH: p = "punch"; break;
2593 case RBM_KICK: p = "½³¤ë"; break;
2595 case RBM_KICK: p = "kick"; break;
2599 case RBM_CLAW: p = "¤Ò¤Ã¤«¤¯"; break;
2601 case RBM_CLAW: p = "claw"; break;
2605 case RBM_BITE: p = "³ú¤à"; break;
2607 case RBM_BITE: p = "bite"; break;
2611 case RBM_STING: p = "»É¤¹"; break;
2613 case RBM_STING: p = "sting"; break;
2617 case RBM_SLASH: p = "»Â¤ë"; break;
2619 case RBM_SLASH: p = "slash"; break;
2623 case RBM_BUTT: p = "³Ñ¤ÇÆͤ¯"; break;
2625 case RBM_BUTT: p = "butt"; break;
2629 case RBM_CRUSH: p = "ÂÎÅö¤¿¤ê¤¹¤ë"; break;
2631 case RBM_CRUSH: p = "crush"; break;
2635 case RBM_ENGULF: p = "°û¤ß¹þ¤à"; break;
2637 case RBM_ENGULF: p = "engulf"; break;
2641 case RBM_CHARGE: p = "ÀÁµá½ñ¤ò¤è¤³¤¹"; break;
2643 case RBM_CHARGE: p = "charge"; break;
2647 case RBM_CRAWL: p = "ÂΤξå¤òÇ礤²ó¤ë"; break;
2649 case RBM_CRAWL: p = "crawl on you"; break;
2653 case RBM_DROOL: p = "¤è¤À¤ì¤ò¤¿¤é¤¹"; break;
2655 case RBM_DROOL: p = "drool on you"; break;
2659 case RBM_SPIT: p = "¤Ä¤Ð¤òÅǤ¯"; break;
2661 case RBM_SPIT: p = "spit"; break;
2665 case RBM_EXPLODE: p = "Çúȯ¤¹¤ë"; break;
2667 case RBM_EXPLODE: p = "explode"; break;
2671 case RBM_GAZE: p = "¤Ë¤é¤à"; break;
2673 case RBM_GAZE: p = "gaze"; break;
2677 case RBM_WAIL: p = "µã¤¶«¤Ö"; break;
2679 case RBM_WAIL: p = "wail"; break;
2683 case RBM_SPORE: p = "˦»Ò¤òÈô¤Ð¤¹"; break;
2685 case RBM_SPORE: p = "release spores"; break;
2688 case RBM_XXX4: break;
2690 case RBM_BEG: p = "¶â¤ò¤»¤¬¤à"; break;
2692 case RBM_BEG: p = "beg"; break;
2696 case RBM_INSULT: p = "Éî¿«¤¹¤ë"; break;
2698 case RBM_INSULT: p = "insult"; break;
2702 case RBM_MOAN: p = "¤¦¤á¤¯"; break;
2704 case RBM_MOAN: p = "moan"; break;
2708 case RBM_SHOW: p = "²Î¤¦"; break;
2710 case RBM_SHOW: p = "sing"; break;
2716 /* Default effect */
2719 /* Acquire the effect */
2724 case RBE_HURT: q = "¹¶·â¤¹¤ë"; break;
2727 case RBE_HURT: q = "attack"; break;
2731 case RBE_POISON: q = "ÆǤò¤¯¤é¤ï¤¹"; break;
2733 case RBE_POISON: q = "poison"; break;
2737 case RBE_UN_BONUS: q = "Îô²½¤µ¤»¤ë"; break;
2739 case RBE_UN_BONUS: q = "disenchant"; break;
2743 case RBE_UN_POWER: q = "ËâÎϤòµÛ¤¤¼è¤ë"; break;
2745 case RBE_UN_POWER: q = "drain charges"; break;
2749 case RBE_EAT_GOLD: q = "¶â¤òÅð¤à"; break;
2751 case RBE_EAT_GOLD: q = "steal gold"; break;
2755 case RBE_EAT_ITEM: q = "¥¢¥¤¥Æ¥à¤òÅð¤à"; break;
2757 case RBE_EAT_ITEM: q = "steal items"; break;
2761 case RBE_EAT_FOOD: q = "¤¢¤Ê¤¿¤Î¿©ÎÁ¤ò¿©¤Ù¤ë"; break;
2763 case RBE_EAT_FOOD: q = "eat your food"; break;
2767 case RBE_EAT_LITE: q = "ÌÀ¤«¤ê¤òµÛ¼ý¤¹¤ë"; break;
2769 case RBE_EAT_LITE: q = "absorb light"; break;
2773 case RBE_ACID: q = "»À¤òÈô¤Ð¤¹"; break;
2775 case RBE_ACID: q = "shoot acid"; break;
2779 case RBE_ELEC: q = "´¶ÅŤµ¤»¤ë"; break;
2781 case RBE_ELEC: q = "electrocute"; break;
2785 case RBE_FIRE: q = "dz¤ä¤¹"; break;
2787 case RBE_FIRE: q = "burn"; break;
2791 case RBE_COLD: q = "Åà¤é¤»¤ë"; break;
2793 case RBE_COLD: q = "freeze"; break;
2797 case RBE_BLIND: q = "ÌÕÌܤˤ¹¤ë"; break;
2799 case RBE_BLIND: q = "blind"; break;
2803 case RBE_CONFUSE: q = "º®Í𤵤»¤ë"; break;
2805 case RBE_CONFUSE: q = "confuse"; break;
2809 case RBE_TERRIFY: q = "¶²Éݤµ¤»¤ë"; break;
2811 case RBE_TERRIFY: q = "terrify"; break;
2815 case RBE_PARALYZE: q = "Ëãá㤵¤»¤ë"; break;
2817 case RBE_PARALYZE: q = "paralyze"; break;
2821 case RBE_LOSE_STR: q = "ÏÓÎϤò¸º¾¯¤µ¤»¤ë"; break;
2823 case RBE_LOSE_STR: q = "reduce strength"; break;
2827 case RBE_LOSE_INT: q = "ÃÎǽ¤ò¸º¾¯¤µ¤»¤ë"; break;
2829 case RBE_LOSE_INT: q = "reduce intelligence"; break;
2833 case RBE_LOSE_WIS: q = "¸¤µ¤ò¸º¾¯¤µ¤»¤ë"; break;
2835 case RBE_LOSE_WIS: q = "reduce wisdom"; break;
2839 case RBE_LOSE_DEX: q = "´ïÍѤµ¤ò¸º¾¯¤µ¤»¤ë"; break;
2841 case RBE_LOSE_DEX: q = "reduce dexterity"; break;
2845 case RBE_LOSE_CON: q = "Âѵ×ÎϤò¸º¾¯¤µ¤»¤ë"; break;
2847 case RBE_LOSE_CON: q = "reduce constitution"; break;
2851 case RBE_LOSE_CHR: q = "Ì¥ÎϤò¸º¾¯¤µ¤»¤ë"; break;
2853 case RBE_LOSE_CHR: q = "reduce charisma"; break;
2857 case RBE_LOSE_ALL: q = "Á´¥¹¥Æ¡¼¥¿¥¹¤ò¸º¾¯¤µ¤»¤ë"; break;
2859 case RBE_LOSE_ALL: q = "reduce all stats"; break;
2863 case RBE_SHATTER: q = "Ê´ºÕ¤¹¤ë"; break;
2865 case RBE_SHATTER: q = "shatter"; break;
2869 case RBE_EXP_10: q = "·Ð¸³Ãͤò¸º¾¯(10d6+)¤µ¤»¤ë"; break;
2871 case RBE_EXP_10: q = "lower experience (by 10d6+)"; break;
2875 case RBE_EXP_20: q = "·Ð¸³Ãͤò¸º¾¯(20d6+)¤µ¤»¤ë"; break;
2877 case RBE_EXP_20: q = "lower experience (by 20d6+)"; break;
2881 case RBE_EXP_40: q = "·Ð¸³Ãͤò¸º¾¯(40d6+)¤µ¤»¤ë"; break;
2883 case RBE_EXP_40: q = "lower experience (by 40d6+)"; break;
2887 case RBE_EXP_80: q = "·Ð¸³Ãͤò¸º¾¯(80d6+)¤µ¤»¤ë"; break;
2889 case RBE_EXP_80: q = "lower experience (by 80d6+)"; break;
2893 case RBE_DISEASE: q = "ɵ¤¤Ë¤¹¤ë"; break;
2895 case RBE_DISEASE: q = "disease"; break;
2899 case RBE_TIME: q = "»þ´Ö¤òµÕÌá¤ê¤µ¤»¤ë"; break;
2901 case RBE_TIME: q = "time"; break;
2905 case RBE_EXP_VAMP: q = "À¸Ì¿ÎϤòµÛ¼ý¤¹¤ë"; break;
2907 case RBE_EXP_VAMP: q = "drain life force"; break;
2911 case RBE_DR_MANA: q = "ËâÎϤòÃ¥¤¦"; break;
2913 case RBE_DR_MANA: q = "drain mana force"; break;
2920 if ( r == 0 ) hooked_roff( format("%^s¤Ï", wd_he[msex]) );
2922 /***¼ã´³É½¸½¤òÊѹ¹ ita ***/
2924 /* Describe damage (if known) */
2925 if (d1 && d2 && (know_everything || know_damage(r_idx, m)))
2928 /* Display the damage */
2929 hooked_roff(format(" %dd%d ", d1, d2));
2930 hooked_roff("¤Î¥À¥á¡¼¥¸¤Ç");
2932 /* Hack -- force a method */
2933 if (!p) p = "²¿¤«´ñ̯¤Ê¤³¤È¤ò¤¹¤ë";
2935 /* Describe the method */
2936 /* XX¤·¤ÆYY¤·/XX¤·¤ÆYY¤¹¤ë/XX¤·/XX¤¹¤ë */
2937 if(q) jverb( p ,jverb_buf, JVERB_TO);
2938 else if(r!=n-1) jverb( p ,jverb_buf, JVERB_AND);
2939 else strcpy(jverb_buf, p);
2941 hooked_roff(jverb_buf);
2943 /* Describe the effect (if any) */
2946 if(r!=n-1) jverb( q,jverb_buf, JVERB_AND);
2947 else strcpy(jverb_buf,q);
2948 hooked_roff(jverb_buf);
2950 if(r!=n-1) hooked_roff("¡¢");
2952 /* Introduce the attack description */
2955 hooked_roff(format("%^s can ", wd_he[msex]));
2963 hooked_roff(", and ");
2967 /* Hack -- force a method */
2968 if (!p) p = "do something weird";
2970 /* Describe the method */
2974 /* Describe the effect (if any) */
2977 /* Describe the attack type */
2978 hooked_roff(" to ");
2981 /* Describe damage (if known) */
2982 if (d1 && d2 && (know_everything || know_damage(r_idx, m)))
2984 /* Display the damage */
2985 hooked_roff(" with damage");
2986 hooked_roff(format(" %dd%d", d1, d2));
2993 /* Count the attacks as printed */
2997 /* Finish sentence above */
3008 /* Notice lack of attacks */
3009 else if (flags1 & RF1_NEVER_BLOW)
3012 hooked_roff(format("%^s¤ÏʪÍýŪ¤Ê¹¶·âÊýË¡¤ò»ý¤¿¤Ê¤¤¡£", wd_he[msex]));
3014 hooked_roff(format("%^s has no physical attacks. ", wd_he[msex]));
3019 /* Or describe the lack of knowledge */
3023 hooked_roff(format("%s¹¶·â¤Ë¤Ä¤¤¤Æ¤Ï²¿¤âÃΤé¤Ê¤¤¡£", wd_his[msex]));
3025 hooked_roff(format("Nothing is known about %s attack. ", wd_his[msex]));
3032 * Notice "Quest" monsters, but only if you
3033 * already encountered the monster.
3035 if ((flags1 & RF1_QUESTOR) && ((r_ptr->r_sights) && (r_ptr->max_num) && ((r_idx == MON_OBERON) || (r_idx == MON_SERPENT))))
3038 hook_c_roff(TERM_VIOLET, "¤¢¤Ê¤¿¤Ï¤³¤Î¥â¥ó¥¹¥¿¡¼¤ò»¦¤·¤¿¤¤¤È¤¤¤¦¶¯¤¤Íß˾¤ò´¶¤¸¤Æ¤¤¤ë...");
3040 hook_c_roff(TERM_VIOLET, "You feel an intense desire to kill this monster... ");
3045 else if (flags7 & RF7_GUARDIAN)
3048 hook_c_roff(TERM_L_RED, "¤³¤Î¥â¥ó¥¹¥¿¡¼¤Ï¥À¥ó¥¸¥ç¥ó¤Î¼ç¤Ç¤¢¤ë¡£");
3050 hook_c_roff(TERM_L_RED, "This monster is the master of a dungeon.");
3064 * Hack -- Display the "name" and "attr/chars" of a monster race
3066 void roff_top(int r_idx)
3068 monster_race *r_ptr = &r_info[r_idx];
3074 /* Access the chars */
3078 /* Access the attrs */
3083 /* Clear the top line */
3084 Term_erase(0, 0, 255);
3086 /* Reset the cursor */
3089 /* A title (use "The" for non-uniques) */
3093 if (!(r_ptr->flags1 & RF1_UNIQUE))
3097 Term_addstr(-1, TERM_WHITE, "The ");
3101 Term_addstr(-1, TERM_WHITE, (r_name + r_ptr->name));
3103 /* Append the "standard" attr/char info */
3104 Term_addstr(-1, TERM_WHITE, " ('");
3106 if (use_bigtile && (a1 & 0x80)) Term_addch(255, 255);
3107 Term_addstr(-1, TERM_WHITE, "')");
3109 /* Append the "optional" attr/char info */
3110 Term_addstr(-1, TERM_WHITE, "/('");
3112 if (use_bigtile && (a2 & 0x80)) Term_addch(255, 255);
3113 Term_addstr(-1, TERM_WHITE, "'):");
3115 /* Wizards get extra info */
3120 sprintf(buf, "%d", r_idx);
3122 Term_addstr(-1, TERM_WHITE, " (");
3123 Term_addstr(-1, TERM_L_BLUE, buf);
3124 Term_addch(TERM_WHITE, ')');
3131 * Hack -- describe the given monster race at the top of the screen
3133 void screen_roff(int r_idx, int mode)
3135 /* Flush messages */
3139 Term_erase(0, 1, 255);
3141 hook_c_roff = c_roff;
3143 /* Recall monster */
3144 roff_aux(r_idx, mode);
3146 /* Describe monster */
3154 * Hack -- describe the given monster race in the current "term" window
3156 void display_roff(int r_idx)
3160 /* Erase the window */
3161 for (y = 0; y < Term->hgt; y++)
3163 /* Erase the line */
3164 Term_erase(0, y, 255);
3170 hook_c_roff = c_roff;
3172 /* Recall monster */
3175 /* Describe monster */
3182 * Hack -- output description of the given monster race
3184 void output_monster_spoiler(int r_idx, void (*roff_func)(byte attr, cptr str))
3186 hook_c_roff = roff_func;
3188 /* Recall monster */
3189 roff_aux(r_idx, 0x03);
3193 bool monster_quest(int r_idx)
3195 monster_race *r_ptr = &r_info[r_idx];
3197 /* Random quests are in the dungeon */
3198 if (r_ptr->flags8 & RF8_WILD_ONLY) return FALSE;
3200 /* No random quests for aquatic monsters */
3201 if (r_ptr->flags7 & RF7_AQUATIC) return FALSE;
3203 /* No random quests for multiplying monsters */
3204 if (r_ptr->flags2 & RF2_MULTIPLY) return FALSE;
3206 /* No quests to kill friendly monsters */
3207 if (r_ptr->flags7 & RF7_FRIENDLY) return FALSE;
3213 bool monster_dungeon(int r_idx)
3215 monster_race *r_ptr = &r_info[r_idx];
3217 if (!(r_ptr->flags8 & RF8_WILD_ONLY))
3224 bool monster_ocean(int r_idx)
3226 monster_race *r_ptr = &r_info[r_idx];
3228 if (r_ptr->flags8 & RF8_WILD_OCEAN)
3235 bool monster_shore(int r_idx)
3237 monster_race *r_ptr = &r_info[r_idx];
3239 if (r_ptr->flags8 & RF8_WILD_SHORE)
3246 bool monster_waste(int r_idx)
3248 monster_race *r_ptr = &r_info[r_idx];
3250 if (r_ptr->flags8 & (RF8_WILD_WASTE | RF8_WILD_ALL))
3257 bool monster_town(int r_idx)
3259 monster_race *r_ptr = &r_info[r_idx];
3261 if (r_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL))
3268 bool monster_wood(int r_idx)
3270 monster_race *r_ptr = &r_info[r_idx];
3272 if (r_ptr->flags8 & (RF8_WILD_WOOD | RF8_WILD_ALL))
3279 bool monster_volcano(int r_idx)
3281 monster_race *r_ptr = &r_info[r_idx];
3283 if (r_ptr->flags8 & RF8_WILD_VOLCANO)
3290 bool monster_mountain(int r_idx)
3292 monster_race *r_ptr = &r_info[r_idx];
3294 if (r_ptr->flags8 & RF8_WILD_MOUNTAIN)
3301 bool monster_grass(int r_idx)
3303 monster_race *r_ptr = &r_info[r_idx];
3305 if (r_ptr->flags8 & (RF8_WILD_GRASS | RF8_WILD_ALL))
3312 bool monster_deep_water(int r_idx)
3314 monster_race *r_ptr = &r_info[r_idx];
3316 if (!monster_dungeon(r_idx)) return FALSE;
3318 if (r_ptr->flags7 & RF7_AQUATIC)
3325 bool monster_shallow_water(int r_idx)
3327 monster_race *r_ptr = &r_info[r_idx];
3329 if (!monster_dungeon(r_idx)) return FALSE;
3331 if (r_ptr->flags2 & RF2_AURA_FIRE)
3338 bool monster_lava(int r_idx)
3340 monster_race *r_ptr = &r_info[r_idx];
3342 if (!monster_dungeon(r_idx)) return FALSE;
3344 if (((r_ptr->flags3 & RF3_IM_FIRE) ||
3345 (r_ptr->flags7 & RF7_CAN_FLY)) &&
3346 !(r_ptr->flags3 & RF3_AURA_COLD))
3353 monster_hook_type get_monster_hook(void)
3355 if (!dun_level && !p_ptr->inside_quest)
3357 switch (wilderness[p_ptr->wilderness_y][p_ptr->wilderness_x].terrain)
3360 return (monster_hook_type)monster_town;
3361 case TERRAIN_DEEP_WATER:
3362 return (monster_hook_type)monster_ocean;
3363 case TERRAIN_SHALLOW_WATER:
3365 return (monster_hook_type)monster_shore;
3367 case TERRAIN_DESERT:
3368 return (monster_hook_type)monster_waste;
3370 return (monster_hook_type)monster_grass;
3372 return (monster_hook_type)monster_wood;
3373 case TERRAIN_SHALLOW_LAVA:
3374 case TERRAIN_DEEP_LAVA:
3375 return (monster_hook_type)monster_volcano;
3376 case TERRAIN_MOUNTAIN:
3377 return (monster_hook_type)monster_mountain;
3379 return (monster_hook_type)monster_dungeon;
3384 return (monster_hook_type)monster_dungeon;
3389 monster_hook_type get_monster_hook2(int y, int x)
3391 /* Set the monster list */
3392 switch (cave[y][x].feat)
3394 case FEAT_SHAL_WATER:
3395 return (monster_hook_type)monster_shallow_water;
3396 case FEAT_DEEP_WATER:
3397 return (monster_hook_type)monster_deep_water;
3398 case FEAT_DEEP_LAVA:
3399 case FEAT_SHAL_LAVA:
3400 return (monster_hook_type)monster_lava;
3407 void set_friendly(monster_type *m_ptr)
3409 m_ptr->smart |= SM_FRIENDLY;
3412 void set_pet(monster_type *m_ptr)
3414 /* Check for quest completion */
3415 check_quest_completion(m_ptr);
3417 m_ptr->smart |= SM_PET;
3421 * Makes the monster hostile towards the player
3423 void set_hostile(monster_type *m_ptr)
3425 if (p_ptr->inside_battle) return;
3426 m_ptr->smart &= ~SM_PET;
3427 m_ptr->smart &= ~SM_FRIENDLY;
3434 void anger_monster(monster_type *m_ptr)
3436 if (p_ptr->inside_battle) return;
3437 if (is_friendly(m_ptr))
3441 monster_desc(m_name, m_ptr, 0);
3443 msg_format("%^s¤ÏÅܤä¿¡ª", m_name);
3445 msg_format("%^s gets angry!", m_name);
3450 chg_virtue(V_INDIVIDUALISM, 1);
3451 chg_virtue(V_HONOUR, -1);
3452 chg_virtue(V_JUSTICE, -1);
3453 chg_virtue(V_COMPASSION, -1);
3459 * Check if monster can cross terrain
3461 bool monster_can_cross_terrain(byte feat, monster_race *r_ptr)
3464 if (feat == FEAT_DEEP_WATER)
3466 if ((r_ptr->flags7 & RF7_AQUATIC) ||
3467 (r_ptr->flags7 & RF7_CAN_FLY) ||
3468 (r_ptr->flags7 & RF7_CAN_SWIM))
3474 else if (feat == FEAT_SHAL_WATER)
3476 if (!(r_ptr->flags2 & RF2_AURA_FIRE) ||
3477 (r_ptr->flags7 & RF7_AQUATIC) ||
3478 (r_ptr->flags7 & RF7_CAN_FLY) ||
3479 (r_ptr->flags7 & RF7_CAN_SWIM))
3484 /* Aquatic monster */
3485 else if ((r_ptr->flags7 & RF7_AQUATIC) &&
3486 !(r_ptr->flags7 & RF7_CAN_FLY))
3491 else if ((feat == FEAT_SHAL_LAVA) ||
3492 (feat == FEAT_DEEP_LAVA))
3494 if ((r_ptr->flags3 & RF3_IM_FIRE) ||
3495 (r_ptr->flags7 & RF7_CAN_FLY))
3506 * Check if two monsters are enemies
3508 bool are_enemies(monster_type *m_ptr, monster_type *n_ptr)
3510 monster_race *r_ptr = &r_info[m_ptr->r_idx];
3511 monster_race *s_ptr = &r_info[n_ptr->r_idx];
3513 if (p_ptr->inside_battle)
3515 if (is_pet(m_ptr) || is_pet(n_ptr)) return FALSE;
3519 if ((r_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL))
3520 && (s_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL)))
3522 if (!is_pet(m_ptr) && !is_pet(n_ptr)) return FALSE;
3525 /* Friendly vs. opposite aligned normal or pet */
3526 if (((r_ptr->flags3 & RF3_EVIL) &&
3527 (s_ptr->flags3 & RF3_GOOD)) ||
3528 ((r_ptr->flags3 & RF3_GOOD) &&
3529 (s_ptr->flags3 & RF3_EVIL)))
3531 if (!(m_ptr->mflag2 & MFLAG_CHAMELEON) || !(n_ptr->mflag2 & MFLAG_CHAMELEON)) return TRUE;
3534 /* Hostile vs. non-hostile */
3535 if (is_hostile(m_ptr) != is_hostile(n_ptr))
3546 * Is the monster "alive"?
3548 * Used to determine the message to print for a killed monster.
3549 * ("dies", "destroyed")
3551 bool monster_living(monster_race *r_ptr)
3553 /* Non-living, undead, or demon */
3554 if (r_ptr->flags3 & (RF3_DEMON | RF3_UNDEAD | RF3_NONLIVING))
3563 static char *dwarf_syllable1[] =
3565 "B", "D", "F", "G", "Gl", "H", "K", "L", "M", "N", "R", "S", "T", "Th", "V",
3568 static char *dwarf_syllable2[] =
3570 "a", "e", "i", "o", "oi", "u",
3573 static char *dwarf_syllable3[] =
3575 "bur", "fur", "gan", "gnus", "gnar", "li", "lin", "lir", "mli", "nar",
3576 "nus", "rin", "ran", "sin", "sil", "sur",
3580 static char *elf_syllable1[] =
3582 "Al", "An", "Bal", "Bel", "Cal", "Cel", "El", "Elr", "Elv", "Eow", "F",
3583 "Fal", "Fel", "Fin", "G", "Gal", "Gel", "Gl", "Is", "Lan", "Leg", "N",
3584 "Nal", "Nel", "S", "Sal", "Sel", "T", "Tal", "Tel", "Thr", "Tin",
3587 static char *elf_syllable2[] =
3589 "a", "adrie", "ara", "e", "ebri", "ele", "ere", "i", "io", "ithra",
3590 "ilma", "il-Ga", "ili", "o", "orfi", "u", "y",
3593 static char *elf_syllable3[] =
3595 "l", "las", "lad", "ldor", "ldur", "linde", "lith", "mir", "n", "nd",
3596 "ndel", "ndil", "ndir", "nduil", "ng", "mbor", "r", "rith", "ril",
3597 "riand", "rion", "s", "thien", "viel", "wen", "wyn",
3601 static char *gnome_syllable1[] =
3603 "Aar", "An", "Ar", "As", "C", "H", "Han", "Har", "Hel", "Iir", "J",
3604 "Jan", "Jar", "K", "L", "M", "Mar", "N", "Nik", "Os", "Ol", "P", "R",
3605 "S", "Sam", "San", "T", "Ter", "Tom", "Ul", "V", "W", "Y",
3608 static char *gnome_syllable2[] =
3610 "a", "aa", "ai", "e", "ei", "i", "o", "uo", "u", "uu",
3613 static char *gnome_syllable3[] =
3615 "ron", "re", "la", "ki", "kseli", "ksi", "ku", "ja", "ta", "na",
3616 "namari", "neli", "nika", "nikki", "nu", "nukka", "ka", "ko", "li",
3617 "kki", "rik", "po", "to", "pekka", "rjaana", "rjatta", "rjukka", "la",
3618 "lla", "lli", "mo", "nni",
3622 static char *hobbit_syllable1[] =
3624 "B", "Ber", "Br", "D", "Der", "Dr", "F", "Fr", "G", "H", "L", "Ler",
3625 "M", "Mer", "N", "P", "Pr", "Per", "R", "S", "T", "W",
3628 static char *hobbit_syllable2[] =
3630 "a", "e", "i", "ia", "o", "oi", "u",
3633 static char *hobbit_syllable3[] =
3635 "bo", "ck", "decan", "degar", "do", "doc", "go", "grin", "lba", "lbo",
3636 "lda", "ldo", "lla", "ll", "lo", "m", "mwise", "nac", "noc", "nwise",
3637 "p", "ppin", "pper", "tho", "to",
3641 static char *human_syllable1[] =
3643 "Ab", "Ac", "Ad", "Af", "Agr", "Ast", "As", "Al", "Adw", "Adr", "Ar",
3644 "B", "Br", "C", "Cr", "Ch", "Cad", "D", "Dr", "Dw", "Ed", "Eth", "Et",
3645 "Er", "El", "Eow", "F", "Fr", "G", "Gr", "Gw", "Gal", "Gl", "H", "Ha",
3646 "Ib", "Jer", "K", "Ka", "Ked", "L", "Loth", "Lar", "Leg", "M", "Mir",
3647 "N", "Nyd", "Ol", "Oc", "On", "P", "Pr", "R", "Rh", "S", "Sev", "T",
3648 "Tr", "Th", "V", "Y", "Z", "W", "Wic",
3651 static char *human_syllable2[] =
3653 "a", "ae", "au", "ao", "are", "ale", "ali", "ay", "ardo", "e", "ei",
3654 "ea", "eri", "era", "ela", "eli", "enda", "erra", "i", "ia", "ie",
3655 "ire", "ira", "ila", "ili", "ira", "igo", "o", "oa", "oi", "oe",
3659 static char *human_syllable3[] =
3661 "a", "and", "b", "bwyn", "baen", "bard", "c", "ctred", "cred", "ch",
3662 "can", "d", "dan", "don", "der", "dric", "dfrid", "dus", "f", "g",
3663 "gord", "gan", "l", "li", "lgrin", "lin", "lith", "lath", "loth", "ld",
3664 "ldric", "ldan", "m", "mas", "mos", "mar", "mond", "n", "nydd", "nidd",
3665 "nnon", "nwan", "nyth", "nad", "nn", "nnor", "nd", "p", "r", "ron",
3666 "rd", "s", "sh", "seth", "sean", "t", "th", "tha", "tlan", "trem",
3667 "tram", "v", "vudd", "w", "wan", "win", "wyn", "wyr", "wyr", "wyth",
3671 static char *orc_syllable1[] =
3673 "B", "Er", "G", "Gr", "H", "P", "Pr", "R", "V", "Vr", "T", "Tr", "M", "Dr",
3676 static char *orc_syllable2[] =
3678 "a", "i", "o", "oo", "u", "ui",
3681 static char *orc_syllable3[] =
3683 "dash", "dish", "dush", "gar", "gor", "gdush", "lo", "gdish", "k",
3684 "lg", "nak", "rag", "rbag", "rg", "rk", "ng", "nk", "rt", "ol", "urk",
3685 "shnak", "mog", "mak", "rak",
3690 * Random Name Generator
3691 * based on a Javascript by Michael Hensley
3692 * "http://geocities.com/timessquare/castle/6274/"
3694 void create_name(int type, char *name)
3699 /* Select the monster type */
3702 /* Create the monster name */
3704 strcpy(name, dwarf_syllable1[randint0(sizeof(dwarf_syllable1) / sizeof(char*))]);
3705 strcat(name, dwarf_syllable2[randint0(sizeof(dwarf_syllable2) / sizeof(char*))]);
3706 strcat(name, dwarf_syllable3[randint0(sizeof(dwarf_syllable3) / sizeof(char*))]);
3709 strcpy(name, elf_syllable1[randint0(sizeof(elf_syllable1) / sizeof(char*))]);
3710 strcat(name, elf_syllable2[randint0(sizeof(elf_syllable2) / sizeof(char*))]);
3711 strcat(name, elf_syllable3[randint0(sizeof(elf_syllable3) / sizeof(char*))]);
3714 strcpy(name, gnome_syllable1[randint0(sizeof(gnome_syllable1) / sizeof(char*))]);
3715 strcat(name, gnome_syllable2[randint0(sizeof(gnome_syllable2) / sizeof(char*))]);
3716 strcat(name, gnome_syllable3[randint0(sizeof(gnome_syllable3) / sizeof(char*))]);
3719 strcpy(name, hobbit_syllable1[randint0(sizeof(hobbit_syllable1) / sizeof(char*))]);
3720 strcat(name, hobbit_syllable2[randint0(sizeof(hobbit_syllable2) / sizeof(char*))]);
3721 strcat(name, hobbit_syllable3[randint0(sizeof(hobbit_syllable3) / sizeof(char*))]);
3724 strcpy(name, human_syllable1[randint0(sizeof(human_syllable1) / sizeof(char*))]);
3725 strcat(name, human_syllable2[randint0(sizeof(human_syllable2) / sizeof(char*))]);
3726 strcat(name, human_syllable3[randint0(sizeof(human_syllable3) / sizeof(char*))]);
3729 strcpy(name, orc_syllable1[randint0(sizeof(orc_syllable1) / sizeof(char*))]);
3730 strcat(name, orc_syllable2[randint0(sizeof(orc_syllable2) / sizeof(char*))]);
3731 strcat(name, orc_syllable3[randint0(sizeof(orc_syllable3) / sizeof(char*))]);
3733 /* Create an empty name */