3 * @brief ¥â¥ó¥¹¥¿¡¼¾ðÊó¤Îµ½Ò / describe monsters (using monster memory)
6 * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke
7 * This software may be copied and distributed for educational, research,
8 * and not for profit purposes provided that this copyright and statement
9 * are included in all such copies. Other copyrights may also apply.
10 * 2014 Deskull rearranged comment for Doxygen.
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))
44 * @brief ¥â¥ó¥¹¥¿¡¼¤ÎAC¾ðÊó¤òÆÀ¤ë¤³¤È¤¬¤Ç¤¤ë¤«¤òÊÖ¤¹ / Determine if the "armor" is known
45 * @param r_idx ¥â¥ó¥¹¥¿¡¼¤Î¼ï²ID
46 * @return Ũ¤ÎAC¤òÃΤë¾ò·ï¤¬Ëþ¤¿¤µ¤ì¤Æ¤¤¤ë¤Ê¤éTRUE¤òÊÖ¤¹
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 * @brief ¥â¥ó¥¹¥¿¡¼¤ÎÂÇ·â°ÒÎϤòÃΤ뤳¤È¤¬¤Ç¤¤ë¤«¤É¤¦¤«¤òÊÖ¤¹
76 * Determine if the "damage" of the given attack is known
77 * @param r_idx ¥â¥ó¥¹¥¿¡¼¤Î¼ï²ID
78 * @param i ³Îǧ¤·¤¿¤¤¹¶·â¼êÈÖ
79 * @return Ũ¤Î¥À¥á¡¼¥¸¥À¥¤¥¹¤òÃΤë¾ò·ï¤¬Ëþ¤¿¤µ¤ì¤Æ¤¤¤ë¤Ê¤éTRUE¤òÊÖ¤¹
82 * the higher the level of the monster, the fewer the attacks you need,
83 * the more damage an attack does, the more attacks you need
86 static bool know_damage(int r_idx, int i)
88 monster_race *r_ptr = &r_info[r_idx];
90 s32b level = r_ptr->level;
92 s32b a = r_ptr->r_blows[i];
94 s32b d1 = r_ptr->blow[i].d_dice;
95 s32b d2 = r_ptr->blow[i].d_side;
99 if (d >= ((4+level)*MAX_UCHAR)/80) d = ((4+level)*MAX_UCHAR-1)/80;
101 /* Normal monsters */
102 if ((4 + level) * a > 80 * d) return (TRUE);
104 /* Skip non-uniques */
105 if (!(r_ptr->flags1 & RF1_UNIQUE)) return (FALSE);
107 /* Unique monsters */
108 if ((4 + level) * (2 * a) > 80 * d) return (TRUE);
116 * Prepare hook for c_roff(). It will be changed for spoiler generation in wizard1.c.
118 void (*hook_c_roff)(byte attr, cptr str) = c_roff;
121 * @brief ¥â¥ó¥¹¥¿¡¼¤Î»×¤¤½Ð¥á¥Ã¥»¡¼¥¸¤ò¤¢¤é¤«¤¸¤á»ØÄꤵ¤ì¤¿´Ø¿ô¥Ý¥¤¥ó¥¿¤Ë´ð¤Å¤½ÐÎϤ¹¤ë
122 * @param str ½ÐÎÏʸ»úÎó
125 static void hooked_roff(cptr str)
128 hook_c_roff(TERM_WHITE, str);
133 * @brief ¥â¥ó¥¹¥¿¡¼¤Î»×¤¤½Ð¾ðÊó¤òɽ¼¨¤¹¤ë
134 * Hack -- display monster information using "hooked_roff()"
135 * @param r_idx ¥â¥ó¥¹¥¿¡¼¤Î¼ï²ID
136 * @param mode ɽ¼¨¥ª¥×¥·¥ç¥ó
139 * This function should only be called with the cursor placed at the
140 * left edge of the screen, on a cleared line, in which the recall is
141 * to take place. One extra blank line is left after the recall.
143 static void roff_aux(int r_idx, int mode)
145 monster_race *r_ptr = &r_info[r_idx];
160 bool nightmare = ironman_nightmare && !(mode & 0x02);
161 int speed = nightmare ? r_ptr->speed + 5 : r_ptr->speed;
165 bool reinforce = FALSE;
176 byte drop_gold, drop_item;
182 bool know_everything = FALSE;
184 /* Obtain a copy of the "known" number of drops */
185 drop_gold = r_ptr->r_drop_gold;
186 drop_item = r_ptr->r_drop_item;
188 /* Obtain a copy of the "known" flags */
189 flags1 = (r_ptr->flags1 & r_ptr->r_flags1);
190 flags2 = (r_ptr->flags2 & r_ptr->r_flags2);
191 flags3 = (r_ptr->flags3 & r_ptr->r_flags3);
192 flags4 = (r_ptr->flags4 & r_ptr->r_flags4);
193 flags5 = (r_ptr->flags5 & r_ptr->r_flags5);
194 flags6 = (r_ptr->flags6 & r_ptr->r_flags6);
195 flags7 = (r_ptr->flags7 & r_ptr->flags7);
196 flagsr = (r_ptr->flagsr & r_ptr->r_flagsr);
198 for(n = 0; n < 6; n++)
200 if(r_ptr->reinforce_id[n] > 0) reinforce = TRUE;
203 /* cheat_know or research_mon() */
204 if (cheat_know || (mode & 0x01))
205 know_everything = TRUE;
207 /* Cheat -- Know everything */
210 /* Hack -- maximal drops */
211 drop_gold = drop_item =
212 (((r_ptr->flags1 & RF1_DROP_4D2) ? 8 : 0) +
213 ((r_ptr->flags1 & RF1_DROP_3D2) ? 6 : 0) +
214 ((r_ptr->flags1 & RF1_DROP_2D2) ? 4 : 0) +
215 ((r_ptr->flags1 & RF1_DROP_1D2) ? 2 : 0) +
216 ((r_ptr->flags1 & RF1_DROP_90) ? 1 : 0) +
217 ((r_ptr->flags1 & RF1_DROP_60) ? 1 : 0));
219 /* Hack -- but only "valid" drops */
220 if (r_ptr->flags1 & RF1_ONLY_GOLD) drop_item = 0;
221 if (r_ptr->flags1 & RF1_ONLY_ITEM) drop_gold = 0;
223 /* Hack -- know all the flags */
224 flags1 = r_ptr->flags1;
225 flags2 = r_ptr->flags2;
226 flags3 = r_ptr->flags3;
227 flags4 = r_ptr->flags4;
228 flags5 = r_ptr->flags5;
229 flags6 = r_ptr->flags6;
230 flagsr = r_ptr->flagsr;
234 /* Extract a gender (if applicable) */
235 if (r_ptr->flags1 & RF1_FEMALE) msex = 2;
236 else if (r_ptr->flags1 & RF1_MALE) msex = 1;
238 /* Assume some "obvious" flags */
239 if (r_ptr->flags1 & RF1_UNIQUE) flags1 |= (RF1_UNIQUE);
240 if (r_ptr->flags1 & RF1_QUESTOR) flags1 |= (RF1_QUESTOR);
241 if (r_ptr->flags1 & RF1_MALE) flags1 |= (RF1_MALE);
242 if (r_ptr->flags1 & RF1_FEMALE) flags1 |= (RF1_FEMALE);
244 /* Assume some "creation" flags */
245 if (r_ptr->flags1 & RF1_FRIENDS) flags1 |= (RF1_FRIENDS);
246 if (r_ptr->flags1 & RF1_ESCORT) flags1 |= (RF1_ESCORT);
247 if (r_ptr->flags1 & RF1_ESCORTS) flags1 |= (RF1_ESCORTS);
249 /* Killing a monster reveals some properties */
250 if (r_ptr->r_tkills || know_everything)
252 /* Know "race" flags */
253 if (r_ptr->flags3 & RF3_ORC) flags3 |= (RF3_ORC);
254 if (r_ptr->flags3 & RF3_TROLL) flags3 |= (RF3_TROLL);
255 if (r_ptr->flags3 & RF3_GIANT) flags3 |= (RF3_GIANT);
256 if (r_ptr->flags3 & RF3_DRAGON) flags3 |= (RF3_DRAGON);
257 if (r_ptr->flags3 & RF3_DEMON) flags3 |= (RF3_DEMON);
258 if (r_ptr->flags3 & RF3_UNDEAD) flags3 |= (RF3_UNDEAD);
259 if (r_ptr->flags3 & RF3_EVIL) flags3 |= (RF3_EVIL);
260 if (r_ptr->flags3 & RF3_GOOD) flags3 |= (RF3_GOOD);
261 if (r_ptr->flags3 & RF3_ANIMAL) flags3 |= (RF3_ANIMAL);
262 if (r_ptr->flags3 & RF3_AMBERITE) flags3 |= (RF3_AMBERITE);
263 if (r_ptr->flags2 & RF2_HUMAN) flags2 |= (RF2_HUMAN);
265 /* Know 'quantum' flag */
266 if (r_ptr->flags2 & RF2_QUANTUM) flags2 |= (RF2_QUANTUM);
268 /* Know "forced" flags */
269 if (r_ptr->flags1 & RF1_FORCE_DEPTH) flags1 |= (RF1_FORCE_DEPTH);
270 if (r_ptr->flags1 & RF1_FORCE_MAXHP) flags1 |= (RF1_FORCE_MAXHP);
273 /* For output_monster_spoiler() */
280 /* Treat uniques differently */
281 if (flags1 & RF1_UNIQUE)
283 /* Hack -- Determine if the unique is "dead" */
284 bool dead = (r_ptr->max_num == 0) ? TRUE : FALSE;
286 /* We've been killed... */
289 /* Killed ancestors */
290 hooked_roff(format(_("%^s¤Ï¤¢¤Ê¤¿¤ÎÀèÁĤò %d ¿ÍÁò¤Ã¤Æ¤¤¤ë", "%^s has slain %d of your ancestors"),
291 wd_he[msex], r_ptr->r_deaths));
293 /* But we've also killed it */
297 _("¤¬¡¢¤¹¤Ç¤ËµØƤ¤Á¤Ï²Ì¤¿¤·¤Æ¤¤¤ë¡ª",
298 (", but you have avenged %s! ", plural(r_ptr->r_deaths, "him", "them")))));
301 /* Unavenged (ever) */
305 _("¤Î¤Ë¡¢¤Þ¤ÀµØƤ¤Á¤ò²Ì¤¿¤·¤Æ¤¤¤Ê¤¤¡£",
306 (", who %s unavenged. ", plural(r_ptr->r_deaths, "remains", "remain")))));
309 /* Start a new line */
313 /* Dead unique who never hurt us */
316 hooked_roff(_("¤¢¤Ê¤¿¤Ï¤³¤ÎµØŨ¤ò¤¹¤Ç¤ËÁò¤êµî¤Ã¤Æ¤¤¤ë¡£", "You have slain this foe. "));
318 /* Start a new line */
323 /* Not unique, but killed us */
324 else if (r_ptr->r_deaths)
328 _(format("¤³¤Î¥â¥ó¥¹¥¿¡¼¤Ï¤¢¤Ê¤¿¤ÎÀèÁĤò %d ¿ÍÁò¤Ã¤Æ¤¤¤ë", r_ptr->r_deaths),
329 format("%d of your ancestors %s been killed by this creature, ", r_ptr->r_deaths, plural(r_ptr->r_deaths, "has", "have"))));
331 /* Some kills this life */
335 _("¤¬¡¢¤¢¤Ê¤¿¤Ï¤³¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¯¤Ê¤¯¤È¤â %d ÂΤÏÅݤ·¤Æ¤¤¤ë¡£",
336 "and you have exterminated at least %d of the creatures. "), r_ptr->r_pkills));
339 /* Some kills past lives */
340 else if (r_ptr->r_tkills)
343 _("¤¬¡¢¤¢¤Ê¤¿¤ÎÀèÁĤϤ³¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¯¤Ê¤¯¤È¤â %d ÂΤÏÅݤ·¤Æ¤¤¤ë¡£",
344 "and your ancestors have exterminated at least %d of the creatures. "), r_ptr->r_tkills));
351 _("¤¬¡¢¤Þ¤À%s¤òÅݤ·¤¿¤³¤È¤Ï¤Ê¤¤¡£",
352 "and %s is not ever known to have been defeated. "), wd_he[msex]));
355 /* Start a new line */
359 /* Normal monsters */
362 /* Killed some this life */
366 _("¤¢¤Ê¤¿¤Ï¤³¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¯¤Ê¤¯¤È¤â %d ÂΤϻ¦¤·¤Æ¤¤¤ë¡£",
367 "You have killed at least %d of these creatures. "), r_ptr->r_pkills));
370 /* Killed some last life */
371 else if (r_ptr->r_tkills)
374 _("¤¢¤Ê¤¿¤ÎÀèÁĤϤ³¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¯¤Ê¤¯¤È¤â %d ÂΤϻ¦¤·¤Æ¤¤¤ë¡£",
375 "Your ancestors have killed at least %d of these creatures. "), r_ptr->r_tkills));
381 hooked_roff(_("¤³¤Î¥â¥ó¥¹¥¿¡¼¤òÅݤ·¤¿¤³¤È¤Ï¤Ê¤¤¡£", "No battles to the death are recalled. "));
384 /* Start a new line */
390 cptr tmp = r_text + r_ptr->text;
397 /* Start a new line */
402 if (r_idx == MON_KAGE)
413 /* Describe location */
414 if (r_ptr->level == 0)
416 hooked_roff(format(_("%^s¤ÏÄ®¤Ë½»¤ß", "%^s lives in the town"), wd_he[msex]));
419 else if (r_ptr->r_tkills || know_everything)
424 _("%^s¤ÏÄ̾ïÃϲ¼ %d ¥Õ¥£¡¼¥È¤Ç½Ð¸½¤·", "%^s is normally found at depths of %d feet"),
425 wd_he[msex], r_ptr->level * 50));
430 _("%^s¤ÏÄ̾ïÃϲ¼ %d ³¬¤Ç½Ð¸½¤·", "%^s is normally found on dungeon level %d"),
431 wd_he[msex], r_ptr->level));
437 /* Describe movement */
438 if (r_idx == MON_CHAMELEON)
440 hooked_roff(_("¡¢Â¾¤Î¥â¥ó¥¹¥¿¡¼¤Ë²½¤±¤ë¡£", "and can take the shape of other monster."));
448 hooked_roff(_("¡¢", ", and "));
452 hooked_roff(format(_("%^s¤Ï", "%^s "), wd_he[msex]));
456 hooked_roff("moves");
460 if ((flags1 & RF1_RAND_50) || (flags1 & RF1_RAND_25))
463 if ((flags1 & RF1_RAND_50) && (flags1 & RF1_RAND_25))
465 hooked_roff(_("¤«¤Ê¤ê", " extremely"));
467 else if (flags1 & RF1_RAND_50)
469 hooked_roff(_("´öʬ", " somewhat"));
471 else if (flags1 & RF1_RAND_25)
473 hooked_roff(_("¾¯¡¹", " a bit"));
477 hooked_roff(_("ÉÔµ¬Â§¤Ë", " erratically"));
479 /* Hack -- Occasional conjunction */
480 if (speed != 110) hooked_roff(_("¡¢¤«¤Ä", ", and"));
486 if (speed > 139) hook_c_roff(TERM_RED, _("¿®¤¸Æñ¤¤¤Û¤É", " incredibly"));
487 else if (speed > 134) hook_c_roff(TERM_ORANGE, _("ÌÔÎõ¤Ë", " extremely"));
488 else if (speed > 129) hook_c_roff(TERM_ORANGE, _("Èó¾ï¤Ë", " very"));
489 else if (speed > 124) hook_c_roff(TERM_UMBER, _("¤«¤Ê¤ê", " fairly"));
490 else if (speed < 120) hook_c_roff(TERM_L_UMBER, _("¤ä¤ä", " somewhat"));
491 hook_c_roff(TERM_L_RED, _("ÁÇÁ᤯", " quickly"));
493 else if (speed < 110)
495 if (speed < 90) hook_c_roff(TERM_L_GREEN, _("¿®¤¸Æñ¤¤¤Û¤É", " incredibly"));
496 else if (speed < 95) hook_c_roff(TERM_BLUE, _("Èó¾ï¤Ë", " very"));
497 else if (speed < 100) hook_c_roff(TERM_BLUE, _("¤«¤Ê¤ê", " fairly"));
498 else if (speed > 104) hook_c_roff(TERM_GREEN, _("¤ä¤ä", " somewhat"));
499 hook_c_roff(TERM_L_BLUE, _("¤æ¤Ã¤¯¤ê¤È", " slowly"));
503 hooked_roff(_("ÉáÄ̤ή¤µ¤Ç", " at normal speed"));
506 hooked_roff("Æ°¤¤¤Æ¤¤¤ë");
510 /* The code above includes "attack speed" */
511 if (flags1 & RF1_NEVER_MOVE)
516 hooked_roff(_("¡¢¤·¤«¤·", ", but "));
520 hooked_roff(format(_("%^s¤Ï", "%^s "), wd_he[msex]));
525 hooked_roff(_("¿¯Æþ¼Ô¤òÄÉÀפ·¤Ê¤¤", "does not deign to chase intruders"));
528 /* End this sentence */
531 hooked_roff(_("¡£", ". "));
536 /* Describe experience if known */
537 if (r_ptr->r_tkills || know_everything)
543 if (flags1 & RF1_UNIQUE)
545 hooked_roff("Killing this");
549 hooked_roff("A kill of this");
554 /* Describe the "quality" */
555 if (flags2 & RF2_ELDRITCH_HORROR) hook_c_roff(TERM_VIOLET, _("¶¸µ¤¤òͶ¤¦", " sanity-blasting"));/*nuke me*/
556 if (flags3 & RF3_ANIMAL) hook_c_roff(TERM_L_GREEN, _("¼«Á³³¦¤Î", " natural"));
557 if (flags3 & RF3_EVIL) hook_c_roff(TERM_L_DARK, _("¼Ù°¤Ê¤ë", " evil"));
558 if (flags3 & RF3_GOOD) hook_c_roff(TERM_YELLOW, _("Á±ÎɤÊ", " good"));
559 if (flags3 & RF3_UNDEAD) hook_c_roff(TERM_VIOLET, _("¥¢¥ó¥Ç¥Ã¥É¤Î", " undead"));
560 if (flags3 & RF3_AMBERITE) hook_c_roff(TERM_VIOLET, _("¥¢¥ó¥Ð¡¼¤Î²¦Â²¤Î", " Amberite"));
562 if ((flags3 & (RF3_DRAGON | RF3_DEMON | RF3_GIANT | RF3_TROLL | RF3_ORC)) || (flags2 & (RF2_QUANTUM | RF2_HUMAN)))
564 /* Describe the "race" */
565 if (flags3 & RF3_DRAGON) hook_c_roff(TERM_ORANGE, _("¥É¥é¥´¥ó", " dragon"));
566 if (flags3 & RF3_DEMON) hook_c_roff(TERM_VIOLET, _("¥Ç¡¼¥â¥ó", " demon"));
567 if (flags3 & RF3_GIANT) hook_c_roff(TERM_L_UMBER, _("¥¸¥ã¥¤¥¢¥ó¥È", " giant"));
568 if (flags3 & RF3_TROLL) hook_c_roff(TERM_BLUE, _("¥È¥í¥ë", " troll"));
569 if (flags3 & RF3_ORC) hook_c_roff(TERM_UMBER, _("¥ª¡¼¥¯", " orc"));
570 if (flags2 & RF2_HUMAN) hook_c_roff(TERM_L_WHITE, _("¿Í´Ö", " human"));
571 if (flags2 & RF2_QUANTUM) hook_c_roff(TERM_VIOLET, _("ÎÌ»ÒÀ¸Êª", " quantum creature"));
575 hooked_roff(_("¥â¥ó¥¹¥¿¡¼", " creature"));
579 hooked_roff("¤òÅݤ¹¤³¤È¤Ï");
581 /* Group some variables */
587 hooked_roff(format(" %lu ¥ì¥Ù¥ë¤Î¥¥ã¥é¥¯¥¿¤Ë¤È¤Ã¤Æ", (long)i));
589 i = (long)r_ptr->mexp * r_ptr->level / (p_ptr->max_plv+2);
590 j = ((((long)r_ptr->mexp * r_ptr->level % (p_ptr->max_plv+2)) *
591 (long)1000 / (p_ptr->max_plv+2) + 5) / 10);
593 hooked_roff(format(" Ìó%ld.%02ld ¥Ý¥¤¥ó¥È¤Î·Ð¸³¤È¤Ê¤ë¡£",
596 /* calculate the integer exp part */
597 i = (long)r_ptr->mexp * r_ptr->level / (p_ptr->max_plv+2);
599 /* calculate the fractional exp part scaled by 100, */
600 /* must use long arithmetic to avoid overflow */
601 j = ((((long)r_ptr->mexp * r_ptr->level % (p_ptr->max_plv+2)) *
602 (long)1000 / (p_ptr->max_plv+2) + 5) / 10);
604 /* Mention the experience */
605 hooked_roff(format(" is worth about %ld.%02ld point%s",
607 (((i == 1) && (j == 0)) ? "" : "s")));
609 /* Take account of annoying English */
612 if ((p_ptr->lev / 10) == 1) /* nothing */;
613 else if (i == 1) p = "st";
614 else if (i == 2) p = "nd";
615 else if (i == 3) p = "rd";
617 /* Take account of "leading vowels" in numbers */
620 if ((i == 8) || (i == 11) || (i == 18)) q = "n";
622 /* Mention the dependance on the player's level */
623 hooked_roff(format(" for a%s %lu%s level character. ",
630 if ((flags2 & RF2_AURA_FIRE) && (flags2 & RF2_AURA_ELEC) && (flags3 & RF3_AURA_COLD))
632 hook_c_roff(TERM_VIOLET, format(
633 _("%^s¤Ï±ê¤Èɹ¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", "%^s is surrounded by flames, ice and electricity. "), wd_he[msex]));
635 else if ((flags2 & RF2_AURA_FIRE) && (flags2 & RF2_AURA_ELEC))
637 hook_c_roff(TERM_L_RED, format(
638 _("%^s¤Ï±ê¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", "%^s is surrounded by flames and electricity. "), wd_he[msex]));
640 else if ((flags2 & RF2_AURA_FIRE) && (flags3 & RF3_AURA_COLD))
642 hook_c_roff(TERM_BLUE, format(
643 _("%^s¤Ï±ê¤Èɹ¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", "%^s is surrounded by flames and ice. "), wd_he[msex]));
645 else if ((flags3 & RF3_AURA_COLD) && (flags2 & RF2_AURA_ELEC))
647 hook_c_roff(TERM_L_GREEN, format(
648 _("%^s¤Ïɹ¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", "%^s is surrounded by ice and electricity. "), wd_he[msex]));
650 else if (flags2 & RF2_AURA_FIRE)
652 hook_c_roff(TERM_RED, format(
653 _("%^s¤Ï±ê¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", "%^s is surrounded by flames. "), wd_he[msex]));
655 else if (flags3 & RF3_AURA_COLD)
657 hook_c_roff(TERM_BLUE, format(
658 _("%^s¤Ïɹ¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", "%^s is surrounded by ice. "), wd_he[msex]));
660 else if (flags2 & RF2_AURA_ELEC)
662 hook_c_roff(TERM_L_BLUE, format(
663 _("%^s¤Ï¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", "%^s is surrounded by electricity. "), wd_he[msex]));
666 if (flags2 & RF2_REFLECTING)
667 hooked_roff(format(_("%^s¤ÏÌð¤Î¼öʸ¤òÄ·¤ÍÊÖ¤¹¡£", "%^s reflects bolt spells. "), wd_he[msex]));
669 /* Describe escorts */
670 if ((flags1 & RF1_ESCORT) || (flags1 & RF1_ESCORTS) || reinforce)
673 _("%^s¤ÏÄ̾ï¸î±Ò¤òȼ¤Ã¤Æ¸½¤ì¤ë¡£", "%^s usually appears with escorts. "), wd_he[msex]));
677 hooked_roff(_("¸î±Ò¤Î¹½À®¤Ï", "These escorts"));
678 if((flags1 & RF1_ESCORT) || (flags1 & RF1_ESCORTS))
680 hooked_roff(_("¾¯¤Ê¤¯¤È¤â", " at the least"));
683 hooked_roff(" contain ");
685 for(n = 0; n < 6; n++)
687 if(r_ptr->reinforce_id[n] && r_ptr->reinforce_dd[n] && r_ptr->reinforce_ds[n])
689 monster_race *rf_ptr = &r_info[r_ptr->reinforce_id[n]];
690 if(rf_ptr->flags1 & RF1_UNIQUE)
692 hooked_roff(format(_("¡¢%s", ", %s"), r_name + rf_ptr->name));
697 hooked_roff(format("¡¢ %dd%d ÂΤÎ%s", r_ptr->reinforce_dd[n], r_ptr->reinforce_ds[n],
698 r_name + rf_ptr->name));
700 bool plural = (r_ptr->reinforce_dd[n] * r_ptr->reinforce_ds[n] > 1);
702 strcpy(name, r_name + rf_ptr->name);
703 if(plural) plural_aux(name);
704 hooked_roff(format(",%dd%d %s", r_ptr->reinforce_dd[n], r_ptr->reinforce_ds[n], name));
709 hooked_roff(_("¤ÇÀ®¤êΩ¤Ã¤Æ¤¤¤ë¡£", "."));
713 /* Describe friends */
714 else if (flags1 & RF1_FRIENDS)
716 hooked_roff(format(_("%^s¤ÏÄ̾クÃĤǸ½¤ì¤ë¡£", "%^s usually appears in groups. "), wd_he[msex]));
720 /* Collect inate attacks */
722 if (flags4 & RF4_SHRIEK) { vp[vn] = _("ÈáÌĤǽõ¤±¤òµá¤á¤ë", "shriek for help"); color[vn++] = TERM_L_WHITE; }
723 if (flags4 & RF4_ROCKET) { vp[vn] = _("¥í¥±¥Ã¥È¤òȯ¼Í¤¹¤ë", "shoot a rocket"); color[vn++] = TERM_UMBER; }
724 if (flags4 & RF4_SHOOT) { vp[vn] = _("¼Í·â¤ò¤¹¤ë", "fire an arrow"); color[vn++] = TERM_UMBER; }
725 if (flags6 & (RF6_SPECIAL)) { vp[vn] = _("ÆÃÊ̤ʹÔÆ°¤ò¤¹¤ë", "do something"); color[vn++] = TERM_VIOLET; }
727 /* Describe inate attacks */
731 hooked_roff(format(_("%^s¤Ï", "%^s"), wd_he[msex]));
735 for (n = 0; n < vn; n++)
740 jverb(vp[n], jverb_buf, JVERB_OR);
741 hook_c_roff(color[n], jverb_buf);
742 hook_c_roff(color[n], "¤ê");
745 else hook_c_roff(color[n], vp[n]);
748 if (n == 0) hooked_roff(" may ");
749 else if (n < vn - 1) hooked_roff(", ");
750 else hooked_roff(" or ");
753 hook_c_roff(color[n], vp[n]);
759 hooked_roff(_("¤³¤È¤¬¤¢¤ë¡£", ". "));
763 /* Collect breaths */
765 if (flags4 & (RF4_BR_ACID)) { vp[vn] = _("»À", "acid"); color[vn++] = TERM_GREEN; }
766 if (flags4 & (RF4_BR_ELEC)) { vp[vn] = _("°ðºÊ", "lightning"); color[vn++] = TERM_BLUE; }
767 if (flags4 & (RF4_BR_FIRE)) { vp[vn] = _("²Ð±ê", "fire"); color[vn++] = TERM_RED; }
768 if (flags4 & (RF4_BR_COLD)) { vp[vn] = _("Î䵤", "frost"); color[vn++] = TERM_L_WHITE; }
769 if (flags4 & (RF4_BR_POIS)) { vp[vn] = _("ÆÇ", "poison"); color[vn++] = TERM_L_GREEN; }
770 if (flags4 & (RF4_BR_NETH)) { vp[vn] = _("ÃϹö", "nether"); color[vn++] = TERM_L_DARK; }
771 if (flags4 & (RF4_BR_LITE)) { vp[vn] = _("Á®¸÷", "light"); color[vn++] = TERM_YELLOW; }
772 if (flags4 & (RF4_BR_DARK)) { vp[vn] = _("°Å¹õ", "darkness"); color[vn++] = TERM_L_DARK; }
773 if (flags4 & (RF4_BR_CONF)) { vp[vn] = _("º®Íð", "confusion"); color[vn++] = TERM_L_UMBER; }
774 if (flags4 & (RF4_BR_SOUN)) { vp[vn] = _("¹ì²»", "sound"); color[vn++] = TERM_ORANGE; }
775 if (flags4 & (RF4_BR_CHAO)) { vp[vn] = _("¥«¥ª¥¹", "chaos"); color[vn++] = TERM_VIOLET; }
776 if (flags4 & (RF4_BR_DISE)) { vp[vn] = _("Îô²½", "disenchantment"); color[vn++] = TERM_VIOLET; }
777 if (flags4 & (RF4_BR_NEXU)) { vp[vn] = _("°ø²Ìº®Íð", "nexus"); color[vn++] = TERM_VIOLET; }
778 if (flags4 & (RF4_BR_TIME)) { vp[vn] = _("»þ´ÖµÕž", "time"); color[vn++] = TERM_L_BLUE; }
779 if (flags4 & (RF4_BR_INER)) { vp[vn] = _("ÃÙÆß", "inertia"); color[vn++] = TERM_SLATE; }
780 if (flags4 & (RF4_BR_GRAV)) { vp[vn] = _("½ÅÎÏ", "gravity"); color[vn++] = TERM_SLATE; }
781 if (flags4 & (RF4_BR_SHAR)) { vp[vn] = _("ÇËÊÒ", "shards"); color[vn++] = TERM_L_UMBER; }
782 if (flags4 & (RF4_BR_PLAS)) { vp[vn] = _("¥×¥é¥º¥Þ", "plasma"); color[vn++] = TERM_L_RED; }
783 if (flags4 & (RF4_BR_WALL)) { vp[vn] = _("¥Õ¥©¡¼¥¹", "force"); color[vn++] = TERM_UMBER; }
784 if (flags4 & (RF4_BR_MANA)) { vp[vn] = _("ËâÎÏ", "mana"); color[vn++] = TERM_L_BLUE; }
785 if (flags4 & (RF4_BR_NUKE)) { vp[vn] = _("Êü¼ÍÀÇÑ´þʪ", "toxic waste"); color[vn++] = TERM_L_GREEN; }
786 if (flags4 & (RF4_BR_DISI)) { vp[vn] = _("ʬ²ò", "disintegration"); color[vn++] = TERM_SLATE; }
788 /* Describe breaths */
795 hooked_roff(format(_("%^s¤Ï", "%^s"), wd_he[msex]));
798 for (n = 0; n < vn; n++)
802 if ( n != 0 ) hooked_roff("¤ä");
804 if (n == 0) hooked_roff(" may breathe ");
805 else if (n < vn-1) hooked_roff(", ");
806 else hooked_roff(" or ");
811 hook_c_roff(color[n], vp[n]);
814 hooked_roff("¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤¬¤¢¤ë");
821 if (flags5 & (RF5_BA_ACID)) { vp[vn] = _("¥¢¥·¥Ã¥É¡¦¥Ü¡¼¥ë", "produce acid balls"); color[vn++] = TERM_GREEN; }
822 if (flags5 & (RF5_BA_ELEC)) { vp[vn] = _("¥µ¥ó¥À¡¼¡¦¥Ü¡¼¥ë", "produce lightning balls"); color[vn++] = TERM_BLUE; }
823 if (flags5 & (RF5_BA_FIRE)) { vp[vn] = _("¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë", "produce fire balls"); color[vn++] = TERM_RED; }
824 if (flags5 & (RF5_BA_COLD)) { vp[vn] = _("¥¢¥¤¥¹¡¦¥Ü¡¼¥ë", "produce frost balls"); color[vn++] = TERM_L_WHITE; }
825 if (flags5 & (RF5_BA_POIS)) { vp[vn] = _("°½±À", "produce poison balls"); color[vn++] = TERM_L_GREEN; }
826 if (flags5 & (RF5_BA_NETH)) { vp[vn] = _("ÃϹöµå", "produce nether balls"); color[vn++] = TERM_L_DARK; }
827 if (flags5 & (RF5_BA_WATE)) { vp[vn] = _("¥¦¥©¡¼¥¿¡¼¡¦¥Ü¡¼¥ë", "produce water balls"); color[vn++] = TERM_BLUE; }
828 if (flags4 & (RF4_BA_NUKE)) { vp[vn] = _("Êü¼Íǽµå", "produce balls of radiation"); color[vn++] = TERM_L_GREEN; }
829 if (flags5 & (RF5_BA_MANA)) { vp[vn] = _("ËâÎϤÎÍò", "invoke mana storms"); color[vn++] = TERM_L_BLUE; }
830 if (flags5 & (RF5_BA_DARK)) { vp[vn] = _("°Å¹õ¤ÎÍò", "invoke darkness storms"); color[vn++] = TERM_L_DARK; }
831 if (flags5 & (RF5_BA_LITE)) { vp[vn] = _("¥¹¥¿¡¼¥Ð¡¼¥¹¥È", "invoke starburst"); color[vn++] = TERM_YELLOW; }
832 if (flags4 & (RF4_BA_CHAO)) { vp[vn] = _("½ã¥í¥°¥ë¥¹", "invoke raw Logrus"); color[vn++] = TERM_VIOLET; }
833 if (flags6 & (RF6_HAND_DOOM)) { vp[vn] = _("ÇËÌǤμê", "invoke the Hand of Doom"); color[vn++] = TERM_VIOLET; }
834 if (flags6 & (RF6_PSY_SPEAR)) { vp[vn] = _("¸÷¤Î·õ", "psycho-spear"); color[vn++] = TERM_YELLOW; }
835 if (flags5 & (RF5_DRAIN_MANA)) { vp[vn] = _("ËâÎϵۼý", "drain mana"); color[vn++] = TERM_SLATE; }
836 if (flags5 & (RF5_MIND_BLAST)) { vp[vn] = _("Àº¿À¹¶·â", "cause mind blasting"); color[vn++] = TERM_L_RED; }
837 if (flags5 & (RF5_BRAIN_SMASH)) { vp[vn] = _("Ǿ¹¶·â", "cause brain smashing"); color[vn++] = TERM_RED; }
838 if (flags5 & (RF5_CAUSE_1)) { vp[vn] = _("·Ú½ý¡Ü¼ö¤¤", "cause light wounds and cursing"); color[vn++] = TERM_L_WHITE; }
839 if (flags5 & (RF5_CAUSE_2)) { vp[vn] = _("½Å½ý¡Ü¼ö¤¤", "cause serious wounds and cursing"); color[vn++] = TERM_L_WHITE; }
840 if (flags5 & (RF5_CAUSE_3)) { vp[vn] = _("Ã×Ì¿½ý¡Ü¼ö¤¤", "cause critical wounds and cursing"); color[vn++] = TERM_L_WHITE; }
841 if (flags5 & (RF5_CAUSE_4)) { vp[vn] = _("È빦¤òÆͤ¯", "cause mortal wounds"); color[vn++] = TERM_L_WHITE; }
842 if (flags5 & (RF5_BO_ACID)) { vp[vn] = _("¥¢¥·¥Ã¥É¡¦¥Ü¥ë¥È", "produce acid bolts"); color[vn++] = TERM_GREEN; }
843 if (flags5 & (RF5_BO_ELEC)) { vp[vn] = _("¥µ¥ó¥À¡¼¡¦¥Ü¥ë¥È", "produce lightning bolts"); color[vn++] = TERM_BLUE; }
844 if (flags5 & (RF5_BO_FIRE)) { vp[vn] = _("¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È", "produce fire bolts"); color[vn++] = TERM_RED; }
845 if (flags5 & (RF5_BO_COLD)) { vp[vn] = _("¥¢¥¤¥¹¡¦¥Ü¥ë¥È", "produce frost bolts"); color[vn++] = TERM_L_WHITE; }
846 if (flags5 & (RF5_BO_NETH)) { vp[vn] = _("ÃϹö¤ÎÌð", "produce nether bolts"); color[vn++] = TERM_L_DARK; }
847 if (flags5 & (RF5_BO_WATE)) { vp[vn] = _("¥¦¥©¡¼¥¿¡¼¡¦¥Ü¥ë¥È", "produce water bolts"); color[vn++] = TERM_BLUE; }
848 if (flags5 & (RF5_BO_MANA)) { vp[vn] = _("ËâÎϤÎÌð", "produce mana bolts"); color[vn++] = TERM_L_BLUE; }
849 if (flags5 & (RF5_BO_PLAS)) { vp[vn] = _("¥×¥é¥º¥Þ¡¦¥Ü¥ë¥È", "produce plasma bolts"); color[vn++] = TERM_L_RED; }
850 if (flags5 & (RF5_BO_ICEE)) { vp[vn] = _("¶Ë´¨¤ÎÌð", "produce ice bolts"); color[vn++] = TERM_WHITE; }
851 if (flags5 & (RF5_MISSILE)) { vp[vn] = _("¥Þ¥¸¥Ã¥¯¥ß¥µ¥¤¥ë", "produce magic missiles"); color[vn++] = TERM_SLATE; }
852 if (flags5 & (RF5_SCARE)) { vp[vn] = _("¶²ÉÝ", "terrify"); color[vn++] = TERM_SLATE; }
853 if (flags5 & (RF5_BLIND)) { vp[vn] = _("Ìܤ¯¤é¤Þ¤·", "blind"); color[vn++] = TERM_L_DARK; }
854 if (flags5 & (RF5_CONF)) { vp[vn] = _("º®Íð", "confuse"); color[vn++] = TERM_L_UMBER; }
855 if (flags5 & (RF5_SLOW)) { vp[vn] = _("¸ºÂ®", "slow"); color[vn++] = TERM_UMBER; }
856 if (flags5 & (RF5_HOLD)) { vp[vn] = _("Ëãáã", "paralyze"); color[vn++] = TERM_RED; }
857 if (flags6 & (RF6_HASTE)) { vp[vn] = _("²Ã®", "haste-self"); color[vn++] = TERM_L_GREEN; }
858 if (flags6 & (RF6_HEAL)) { vp[vn] = _("¼£Ìþ", "heal-self"); color[vn++] = TERM_WHITE; }
859 if (flags6 & (RF6_INVULNER)) { vp[vn] = _("̵Ũ²½", "make invulnerable"); color[vn++] = TERM_WHITE; }
860 if (flags4 & RF4_DISPEL) { vp[vn] = _("ËâÎϾõî", "dispel-magic"); color[vn++] = TERM_L_WHITE; }
861 if (flags6 & (RF6_BLINK)) { vp[vn] = _("¥·¥ç¡¼¥È¥Æ¥ì¥Ý¡¼¥È", "blink-self"); color[vn++] = TERM_UMBER; }
862 if (flags6 & (RF6_TPORT)) { vp[vn] = _("¥Æ¥ì¥Ý¡¼¥È", "teleport-self"); color[vn++] = TERM_ORANGE; }
863 if (flags6 & (RF6_WORLD)) { vp[vn] = _("»þ¤ò»ß¤á¤ë", "stop the time"); color[vn++] = TERM_L_BLUE; }
864 if (flags6 & (RF6_TELE_TO)) { vp[vn] = _("¥Æ¥ì¥Ý¡¼¥È¥Ð¥Ã¥¯", "teleport to"); color[vn++] = TERM_L_UMBER; }
865 if (flags6 & (RF6_TELE_AWAY)) { vp[vn] = _("¥Æ¥ì¥Ý¡¼¥È¥¢¥¦¥§¥¤", "teleport away"); color[vn++] = TERM_UMBER; }
866 if (flags6 & (RF6_TELE_LEVEL)) { vp[vn] = _("¥Æ¥ì¥Ý¡¼¥È¡¦¥ì¥Ù¥ë", "teleport level"); color[vn++] = TERM_ORANGE; }
868 if (flags6 & (RF6_DARKNESS))
870 if ((p_ptr->pclass != CLASS_NINJA) || (r_ptr->flags3 & (RF3_UNDEAD | RF3_HURT_LITE)) || (r_ptr->flags7 & RF7_DARK_MASK))
872 vp[vn] = _("°Å°Ç", "create darkness"); color[vn++] = TERM_L_DARK;
876 vp[vn] = _("Á®¸÷", "create light"); color[vn++] = TERM_YELLOW;
880 if (flags6 & (RF6_TRAPS)) { vp[vn] = _("¥È¥é¥Ã¥×", "create traps"); color[vn++] = TERM_BLUE; }
881 if (flags6 & (RF6_FORGET)) { vp[vn] = _("µ²±¾Ãµî", "cause amnesia"); color[vn++] = TERM_BLUE; }
882 if (flags6 & (RF6_RAISE_DEAD)) { vp[vn] = _("»à¼ÔÉü³è", "raise dead"); color[vn++] = TERM_RED; }
883 if (flags6 & (RF6_S_MONSTER)) { vp[vn] = _("¥â¥ó¥¹¥¿¡¼°ìÂξ¤´", "summon a monster"); color[vn++] = TERM_SLATE; }
884 if (flags6 & (RF6_S_MONSTERS)) { vp[vn] = _("¥â¥ó¥¹¥¿¡¼Ê£¿ô¾¤´", "summon monsters"); color[vn++] = TERM_L_WHITE; }
885 if (flags6 & (RF6_S_KIN)) { vp[vn] = _("µß±ç¾¤´", "summon aid"); color[vn++] = TERM_ORANGE; }
886 if (flags6 & (RF6_S_ANT)) { vp[vn] = _("¥¢¥ê¾¤´", "summon ants"); color[vn++] = TERM_RED; }
887 if (flags6 & (RF6_S_SPIDER)) { vp[vn] = _("¥¯¥â¾¤´", "summon spiders"); color[vn++] = TERM_L_DARK; }
888 if (flags6 & (RF6_S_HOUND)) { vp[vn] = _("¥Ï¥¦¥ó¥É¾¤´", "summon hounds"); color[vn++] = TERM_L_UMBER; }
889 if (flags6 & (RF6_S_HYDRA)) { vp[vn] = _("¥Ò¥É¥é¾¤´", "summon hydras"); color[vn++] = TERM_L_GREEN; }
890 if (flags6 & (RF6_S_ANGEL)) { vp[vn] = _("Å·»È°ìÂξ¤´", "summon an angel"); color[vn++] = TERM_YELLOW; }
891 if (flags6 & (RF6_S_DEMON)) { vp[vn] = _("¥Ç¡¼¥â¥ó°ìÂξ¤´", "summon a demon"); color[vn++] = TERM_L_RED; }
892 if (flags6 & (RF6_S_UNDEAD)) { vp[vn] = _("¥¢¥ó¥Ç¥Ã¥É°ìÂξ¤´", "summon an undead"); color[vn++] = TERM_L_DARK; }
893 if (flags6 & (RF6_S_DRAGON)) { vp[vn] = _("¥É¥é¥´¥ó°ìÂξ¤´", "summon a dragon"); color[vn++] = TERM_ORANGE; }
894 if (flags6 & (RF6_S_HI_UNDEAD)) { vp[vn] = _("¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¾¤´", "summon Greater Undead"); color[vn++] = TERM_L_DARK; }
895 if (flags6 & (RF6_S_HI_DRAGON)) { vp[vn] = _("¸ÅÂå¥É¥é¥´¥ó¾¤´", "summon Ancient Dragons"); color[vn++] = TERM_ORANGE; }
896 if (flags6 & (RF6_S_CYBER)) { vp[vn] = _("¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¾¤´", "summon Cyberdemons"); color[vn++] = TERM_UMBER; }
897 if (flags6 & (RF6_S_AMBERITES)) { vp[vn] = _("¥¢¥ó¥Ð¡¼¤Î²¦Â²¾¤´", "summon Lords of Amber"); color[vn++] = TERM_VIOLET; }
898 if (flags6 & (RF6_S_UNIQUE)) { vp[vn] = _("¥æ¥Ë¡¼¥¯¡¦¥â¥ó¥¹¥¿¡¼¾¤´", "summon Unique Monsters"); color[vn++] = TERM_VIOLET; }
901 /* Describe spells */
910 hooked_roff(_("¡¢¤Ê¤ª¤«¤Ä", ", and is also"));
914 hooked_roff(format(_("%^s¤Ï", "%^s is"), wd_he[msex]));
919 if (flags2 & (RF2_SMART)) hook_c_roff(TERM_YELLOW, "Ū³Î¤Ë");
922 hooked_roff("ËâË¡¤ò»È¤¦¤³¤È¤¬¤Ç¤¡¢");
925 hooked_roff(" magical, casting spells");
928 if (flags2 & RF2_SMART) hook_c_roff(TERM_YELLOW, " intelligently");
933 for (n = 0; n < vn; n++)
937 if ( n != 0 ) hooked_roff("¡¢");
939 if (n == 0) hooked_roff(" which ");
940 else if (n < vn-1) hooked_roff(", ");
941 else hooked_roff(" or ");
946 hook_c_roff(color[n], vp[n]);
949 hooked_roff("¤Î¼öʸ¤ò¾§¤¨¤ë¤³¤È¤¬¤¢¤ë");
954 /* End the sentence about inate/other spells */
958 m = r_ptr->r_cast_spell;
960 /* Average frequency */
961 n = r_ptr->freq_spell;
963 /* Describe the spell frequency */
964 if (m > 100 || know_everything)
967 _("(³ÎΨ:1/%d)", "; 1 time in %d"), 100 / n));
970 /* Guess at the frequency */
973 n = ((n + 9) / 10) * 10;
975 _("(³ÎΨ:Ìó1/%d)", "; about 1 time in %d"), 100 / n));
978 /* End this sentence */
979 hooked_roff(_("¡£", ". "));
982 /* Describe monster "toughness" */
983 if (know_armour(r_idx))
987 _("%^s¤Ï AC%d ¤ÎËɸæÎϤÈ", "%^s has an armor rating of %d"),
988 wd_he[msex], r_ptr->ac));
990 /* Maximized hitpoints */
991 if ((flags1 & RF1_FORCE_MAXHP) || (r_ptr->hside == 1))
993 u32b hp = r_ptr->hdice * (nightmare ? 2 : 1) * r_ptr->hside;
995 _(" %d ¤ÎÂÎÎϤ¬¤¢¤ë¡£", " and a life rating of %d. "),
996 (s16b)MIN(30000, hp)));
999 /* Variable hitpoints */
1003 _(" %dd%d ¤ÎÂÎÎϤ¬¤¢¤ë¡£", " and a life rating of %dd%d. "),
1004 r_ptr->hdice * (nightmare ? 2 : 1), r_ptr->hside));
1010 /* Collect special abilities. */
1012 if (flags7 & (RF7_HAS_LITE_1 | RF7_HAS_LITE_2)) { vp[vn] = _("¥À¥ó¥¸¥ç¥ó¤ò¾È¤é¤¹", "illuminate the dungeon"); color[vn++] = TERM_WHITE; }
1013 if (flags7 & (RF7_HAS_DARK_1 | RF7_HAS_DARK_2)) { vp[vn] = _("¥À¥ó¥¸¥ç¥ó¤ò°Å¤¯¤¹¤ë", "darken the dungeon"); color[vn++] = TERM_L_DARK; }
1014 if (flags2 & RF2_OPEN_DOOR) { vp[vn] = _("¥É¥¢¤ò³«¤±¤ë", "open doors"); color[vn++] = TERM_WHITE; }
1015 if (flags2 & RF2_BASH_DOOR) { vp[vn] = _("¥É¥¢¤òÂǤÁÇˤë", "bash down doors"); color[vn++] = TERM_WHITE; }
1016 if (flags7 & RF7_CAN_FLY) { vp[vn] = _("¶õ¤òÈô¤Ö", "fly"); color[vn++] = TERM_WHITE; }
1017 if (flags7 & RF7_CAN_SWIM) { vp[vn] = _("¿å¤òÅϤë", "swim"); color[vn++] = TERM_WHITE; }
1018 if (flags2 & RF2_PASS_WALL) { vp[vn] = _("Êɤò¤¹¤êÈ´¤±¤ë", "pass through walls"); color[vn++] = TERM_WHITE; }
1019 if (flags2 & RF2_KILL_WALL) { vp[vn] = _("Êɤò·¡¤ê¿Ê¤à", "bore through walls"); color[vn++] = TERM_WHITE; }
1020 if (flags2 & RF2_MOVE_BODY) { vp[vn] = _("¼å¤¤¥â¥ó¥¹¥¿¡¼¤ò²¡¤·¤Î¤±¤ë", "push past weaker monsters"); color[vn++] = TERM_WHITE; }
1021 if (flags2 & RF2_KILL_BODY) { vp[vn] = _("¼å¤¤¥â¥ó¥¹¥¿¡¼¤òÅݤ¹", "destroy weaker monsters"); color[vn++] = TERM_WHITE; }
1022 if (flags2 & RF2_TAKE_ITEM) { vp[vn] = _("¥¢¥¤¥Æ¥à¤ò½¦¤¦", "pick up objects"); color[vn++] = TERM_WHITE; }
1023 if (flags2 & RF2_KILL_ITEM) { vp[vn] = _("¥¢¥¤¥Æ¥à¤ò²õ¤¹", "destroy objects"); color[vn++] = TERM_WHITE; }
1026 /* Describe special abilities. */
1030 hooked_roff(format(_("%^s¤Ï", "%^s"), wd_he[msex]));
1033 for (n = 0; n < vn; n++)
1039 jverb(vp[n], jverb_buf, JVERB_AND);
1040 hook_c_roff(color[n], jverb_buf);
1043 else hook_c_roff(color[n], vp[n]);
1045 if (n == 0) hooked_roff(" can ");
1046 else if (n < vn - 1) hooked_roff(", ");
1047 else hooked_roff(" and ");
1050 hook_c_roff(color[n], vp[n]);
1056 hooked_roff(_("¤³¤È¤¬¤Ç¤¤ë¡£", ". "));
1061 if (flags7 & RF7_AQUATIC)
1063 hooked_roff(format(_("%^s¤Ï¿åÃæ¤ËÀ³¤ó¤Ç¤¤¤ë¡£", "%^s lives in water. "), wd_he[msex]));
1066 /* Describe special abilities. */
1067 if (flags7 & (RF7_SELF_LITE_1 | RF7_SELF_LITE_2))
1069 hooked_roff(format(_("%^s¤Ï¸÷¤Ã¤Æ¤¤¤ë¡£", "%^s is shining. "), wd_he[msex]));
1071 if (flags7 & (RF7_SELF_DARK_1 | RF7_SELF_DARK_2))
1073 hook_c_roff(TERM_L_DARK, format(_("%^s¤Ï°Å¹õ¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", "%^s is surrounded by darkness. "), wd_he[msex]));
1075 if (flags2 & RF2_INVISIBLE)
1077 hooked_roff(format(_("%^s¤ÏÆ©ÌÀ¤ÇÌܤ˸«¤¨¤Ê¤¤¡£", "%^s is invisible. "), wd_he[msex]));
1079 if (flags2 & RF2_COLD_BLOOD)
1081 hooked_roff(format(_("%^s¤ÏÎä·ìưʪ¤Ç¤¢¤ë¡£", "%^s is cold blooded. "), wd_he[msex]));
1083 if (flags2 & RF2_EMPTY_MIND)
1085 hooked_roff(format(_("%^s¤Ï¥Æ¥ì¥Ñ¥·¡¼¤Ç¤Ï´¶ÃΤǤ¤Ê¤¤¡£", "%^s is not detected by telepathy. "), wd_he[msex]));
1087 else if (flags2 & RF2_WEIRD_MIND)
1089 hooked_roff(format(_("%^s¤Ï¤Þ¤ì¤Ë¥Æ¥ì¥Ñ¥·¡¼¤Ç´¶ÃΤǤ¤ë¡£", "%^s is rarely detected by telepathy. "), wd_he[msex]));
1091 if (flags2 & RF2_MULTIPLY)
1093 hook_c_roff(TERM_L_UMBER, format(_("%^s¤ÏÇúȯŪ¤ËÁý¿£¤¹¤ë¡£", "%^s breeds explosively. "), wd_he[msex]));
1095 if (flags2 & RF2_REGENERATE)
1097 hook_c_roff(TERM_L_WHITE, format(_("%^s¤ÏÁÇÁ᤯ÂÎÎϤò²óÉü¤¹¤ë¡£", "%^s regenerates quickly. "), wd_he[msex]));
1099 if (flags7 & RF7_RIDING)
1101 hook_c_roff(TERM_SLATE, format(_("%^s¤Ë¾è¤ë¤³¤È¤¬¤Ç¤¤ë¡£", "%^s is suitable for riding. "), wd_he[msex]));
1105 /* Collect susceptibilities */
1107 if (flags3 & RF3_HURT_ROCK) { vp[vn] = _("´ä¤ò½üµî¤¹¤ë¤â¤Î", "rock remover"); color[vn++] = TERM_UMBER; }
1108 if (flags3 & RF3_HURT_LITE) { vp[vn] = _("ÌÀ¤ë¤¤¸÷", "bright light"); color[vn++] = TERM_YELLOW; }
1109 if (flags3 & RF3_HURT_FIRE) { vp[vn] = _("±ê", "fire"); color[vn++] = TERM_RED; }
1110 if (flags3 & RF3_HURT_COLD) { vp[vn] = _("Î䵤", "cold"); color[vn++] = TERM_L_WHITE; }
1113 /* Describe susceptibilities */
1117 hooked_roff(format(_("%^s¤Ë¤Ï", "%^s"), wd_he[msex]));
1120 for (n = 0; n < vn; n++)
1124 if ( n != 0 ) hooked_roff("¤ä");
1126 if (n == 0) hooked_roff(" is hurt by ");
1127 else if (n < vn-1) hooked_roff(", ");
1128 else hooked_roff(" and ");
1133 hook_c_roff(color[n], vp[n]);
1137 hooked_roff(_("¤Ç¥À¥á¡¼¥¸¤òÍ¿¤¨¤é¤ì¤ë¡£", ". "));
1141 /* Collect immunities */
1143 if (flagsr & RFR_IM_ACID) { vp[vn] = _("»À", "acid"); color[vn++] = TERM_GREEN; }
1144 if (flagsr & RFR_IM_ELEC) { vp[vn] = _("°ðºÊ", "lightning"); color[vn++] = TERM_BLUE; }
1145 if (flagsr & RFR_IM_FIRE) { vp[vn] = _("±ê", "fire"); color[vn++] = TERM_RED; }
1146 if (flagsr & RFR_IM_COLD) { vp[vn] = _("Î䵤", "cold"); color[vn++] = TERM_L_WHITE; }
1147 if (flagsr & RFR_IM_POIS) { vp[vn] = _("ÆÇ", "poison"); color[vn++] = TERM_L_GREEN; }
1150 /* Collect resistances */
1151 if (flagsr & RFR_RES_LITE) { vp[vn] = _("Á®¸÷", "light"); color[vn++] = TERM_YELLOW; }
1152 if (flagsr & RFR_RES_DARK) { vp[vn] = _("°Å¹õ", "dark"); color[vn++] = TERM_L_DARK; }
1153 if (flagsr & RFR_RES_NETH) { vp[vn] = _("ÃϹö", "nether"); color[vn++] = TERM_L_DARK; }
1154 if (flagsr & RFR_RES_WATE) { vp[vn] = _("¿å", "water"); color[vn++] = TERM_BLUE; }
1155 if (flagsr & RFR_RES_PLAS) { vp[vn] = _("¥×¥é¥º¥Þ", "plasma"); color[vn++] = TERM_L_RED; }
1156 if (flagsr & RFR_RES_SHAR) { vp[vn] = _("ÇËÊÒ", "shards"); color[vn++] = TERM_L_UMBER; }
1157 if (flagsr & RFR_RES_SOUN) { vp[vn] = _("¹ì²»", "sound"); color[vn++] = TERM_ORANGE; }
1158 if (flagsr & RFR_RES_CHAO) { vp[vn] = _("¥«¥ª¥¹", "chaos"); color[vn++] = TERM_VIOLET; }
1159 if (flagsr & RFR_RES_NEXU) { vp[vn] = _("°ø²Ìº®Íð", "nexus"); color[vn++] = TERM_VIOLET; }
1160 if (flagsr & RFR_RES_DISE) { vp[vn] = _("Îô²½", "disenchantment"); color[vn++] = TERM_VIOLET; }
1161 if (flagsr & RFR_RES_WALL) { vp[vn] = _("¥Õ¥©¡¼¥¹", "force"); color[vn++] = TERM_UMBER; }
1162 if (flagsr & RFR_RES_INER) { vp[vn] = _("ÃÙÆß", "inertia"); color[vn++] = TERM_SLATE; }
1163 if (flagsr & RFR_RES_TIME) { vp[vn] = _("»þ´ÖµÕž", "time"); color[vn++] = TERM_L_BLUE; }
1164 if (flagsr & RFR_RES_GRAV) { vp[vn] = _("½ÅÎÏ", "gravity"); color[vn++] = TERM_SLATE; }
1165 if (flagsr & RFR_RES_ALL) { vp[vn] = _("¤¢¤é¤æ¤ë¹¶·â", "all"); color[vn++] = TERM_YELLOW; }
1166 if ((flagsr & RFR_RES_TELE) && !(r_ptr->flags1 & RF1_UNIQUE)) { vp[vn] = _("¥Æ¥ì¥Ý¡¼¥È", "teleportation"); color[vn++] = TERM_ORANGE; }
1168 /* Describe immunities and resistances */
1172 hooked_roff(format(_("%^s¤Ï", "%^s"), wd_he[msex]));
1175 for (n = 0; n < vn; n++)
1179 if ( n != 0 ) hooked_roff("¤È");
1181 if (n == 0) hooked_roff(" resists ");
1182 else if (n < vn-1) hooked_roff(", ");
1183 else hooked_roff(" and ");
1188 hook_c_roff(color[n], vp[n]);
1192 hooked_roff(_("¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£", ". "));
1196 if ((r_ptr->r_xtra1 & MR1_SINKA) || know_everything)
1198 if (r_ptr->next_r_idx)
1200 hooked_roff(format(_("%^s¤Ï·Ð¸³¤òÀѤà¤È¡¢", "%^s will evolve into "), wd_he[msex]));
1201 hook_c_roff(TERM_YELLOW, format("%s", r_name+r_info[r_ptr->next_r_idx].name));
1204 (" when %s gets enugh experience. ", wd_he[msex]))));
1206 else if (!(r_ptr->flags1 & RF1_UNIQUE))
1208 hooked_roff(format(_("%s¤Ï¿Ê²½¤·¤Ê¤¤¡£", "%s won't evolve. "), wd_he[msex]));
1212 /* Collect non-effects */
1214 if (flags3 & RF3_NO_STUN) { vp[vn] = _("Û¯Û°¤È¤·¤Ê¤¤", "stunned"); color[vn++] = TERM_ORANGE; }
1215 if (flags3 & RF3_NO_FEAR) { vp[vn] = _("¶²Éݤò´¶¤¸¤Ê¤¤", "frightened"); color[vn++] = TERM_SLATE; }
1216 if (flags3 & RF3_NO_CONF) { vp[vn] = _("º®Í𤷤ʤ¤", "confused"); color[vn++] = TERM_L_UMBER; }
1217 if (flags3 & RF3_NO_SLEEP) { vp[vn] = _("̲¤é¤µ¤ì¤Ê¤¤", "slept"); color[vn++] = TERM_BLUE; }
1218 if ((flagsr & RFR_RES_TELE) && (r_ptr->flags1 & RF1_UNIQUE)) { vp[vn] = _("¥Æ¥ì¥Ý¡¼¥È¤µ¤ì¤Ê¤¤", "teleported"); color[vn++] = TERM_ORANGE; }
1220 /* Describe non-effects */
1225 _("%^s¤Ï", "%^s"), wd_he[msex]));
1228 for (n = 0; n < vn; n++)
1232 if ( n != 0 ) hooked_roff("¤·¡¢");
1234 if (n == 0) hooked_roff(" cannot be ");
1235 else if (n < vn - 1) hooked_roff(", ");
1236 else hooked_roff(" or ");
1241 hook_c_roff(color[n], vp[n]);
1245 hooked_roff(_("¡£", ". "));
1249 /* Do we know how aware it is? */
1250 if ((((int)r_ptr->r_wake * (int)r_ptr->r_wake) > r_ptr->sleep) ||
1251 (r_ptr->r_ignore == MAX_UCHAR) ||
1252 (r_ptr->sleep == 0 && r_ptr->r_tkills >= 10) || know_everything)
1256 if (r_ptr->sleep > 200)
1258 act = _("¤ò̵»ë¤·¤¬¤Á¤Ç¤¢¤ë¤¬", "prefers to ignore");
1260 else if (r_ptr->sleep > 95)
1262 act = _("¤ËÂФ·¤Æ¤Û¤È¤ó¤ÉÃí°Õ¤òʧ¤ï¤Ê¤¤¤¬", "pays very little attention to");
1264 else if (r_ptr->sleep > 75)
1266 act = _("¤ËÂФ·¤Æ¤¢¤Þ¤êÃí°Õ¤òʧ¤ï¤Ê¤¤¤¬", "pays little attention to");
1268 else if (r_ptr->sleep > 45)
1270 act = _("¤ò¸«²á¤´¤·¤¬¤Á¤Ç¤¢¤ë¤¬", "tends to overlook");
1272 else if (r_ptr->sleep > 25)
1274 act = _("¤ò¤Û¤ó¤Î¾¯¤·¤Ï¸«¤Æ¤ª¤ê", "takes quite a while to see");
1276 else if (r_ptr->sleep > 10)
1278 act = _("¤ò¤·¤Ð¤é¤¯¤Ï¸«¤Æ¤ª¤ê", "takes a while to see");
1280 else if (r_ptr->sleep > 5)
1282 act = _("¤ò´öʬÃí°Õ¿¼¤¯¸«¤Æ¤ª¤ê", "is fairly observant of");
1284 else if (r_ptr->sleep > 3)
1286 act = _("¤òÃí°Õ¿¼¤¯¸«¤Æ¤ª¤ê", "is observant of");
1288 else if (r_ptr->sleep > 1)
1290 act = _("¤ò¤«¤Ê¤êÃí°Õ¿¼¤¯¸«¤Æ¤ª¤ê", "is very observant of");
1292 else if (r_ptr->sleep > 0)
1294 act = _("¤ò·Ù²ü¤·¤Æ¤ª¤ê", "is vigilant for");
1298 act = _("¤ò¤«¤Ê¤ê·Ù²ü¤·¤Æ¤ª¤ê", "is ever vigilant for");
1302 _(format("%^s¤Ï¿¯Æþ¼Ô%s¡¢ %d ¥Õ¥£¡¼¥ÈÀ褫¤é¿¯Æþ¼Ô¤Ëµ¤ÉÕ¤¯¤³¤È¤¬¤¢¤ë¡£", wd_he[msex], act, 10 * r_ptr->aaf),
1303 format("%^s %s intruders, which %s may notice from %d feet. ", wd_he[msex], act, wd_he[msex], 10 * r_ptr->aaf)));
1307 /* Drops gold and/or items */
1308 if (drop_gold || drop_item)
1312 _("%^s¤Ï", "%^s may carry"), wd_he[msex]));
1319 /* Count maximum drop */
1320 n = MAX(drop_gold, drop_item);
1322 /* One drop (may need an "n") */
1325 hooked_roff(_("°ì¤Ä¤Î", " a"));
1335 _("°ì¤Ä¤«Æó¤Ä¤Î", " one or two"));
1342 _(" %d ¸Ä¤Þ¤Ç¤Î", " up to %d"), n));
1347 if (flags1 & RF1_DROP_GREAT)
1349 p = _("ÆÃÊ̤Ê", " exceptional");
1352 /* Good (no "n" needed) */
1353 else if (flags1 & RF1_DROP_GOOD)
1355 p = _("¾å¼Á¤Ê", " good");
1371 /* Handle singular "an" */
1373 if (sin) hooked_roff("n");
1377 /* Dump "object(s)" */
1378 if (p) hooked_roff(p);
1380 _("¥¢¥¤¥Æ¥à", " object"));
1383 if (n != 1) hooked_roff("s");
1386 /* Conjunction replaces variety, if needed for "gold" below */
1395 if (!p) sin = FALSE;
1397 /* Handle singular "an" */
1398 if (sin) hooked_roff("n");
1402 /* Dump "treasure(s)" */
1403 if (p) hooked_roff(p);
1404 hooked_roff(_("ºâÊõ", " treasure"));
1406 if (n != 1) hooked_roff("s");
1411 /* End this sentence */
1412 hooked_roff(_("¤ò»ý¤Ã¤Æ¤¤¤ë¤³¤È¤¬¤¢¤ë¡£", ". "));
1416 /* Count the number of "known" attacks */
1417 for (n = 0, m = 0; m < 4; m++)
1419 /* Skip non-attacks */
1420 if (!r_ptr->blow[m].method) continue;
1421 if (r_ptr->blow[m].method == RBM_SHOOT) continue;
1423 /* Count known attacks */
1424 if (r_ptr->r_blows[m] || know_everything) n++;
1427 /* Examine (and count) the actual attacks */
1428 for (r = 0, m = 0; m < 4; m++)
1430 int method, effect, d1, d2;
1432 /* Skip non-attacks */
1433 if (!r_ptr->blow[m].method) continue;
1434 if (r_ptr->blow[m].method == RBM_SHOOT) continue;
1436 /* Skip unknown attacks */
1437 if (!r_ptr->r_blows[m] && !know_everything) continue;
1439 /* Extract the attack info */
1440 method = r_ptr->blow[m].method;
1441 effect = r_ptr->blow[m].effect;
1442 d1 = r_ptr->blow[m].d_dice;
1443 d2 = r_ptr->blow[m].d_side;
1448 /* Acquire the method */
1451 case RBM_HIT: p = _("²¥¤ë", "hit"); break;
1452 case RBM_TOUCH: p = _("¿¨¤ë", "touch"); break;
1453 case RBM_PUNCH: p = _("¥Ñ¥ó¥Á¤¹¤ë", "punch"); break;
1454 case RBM_KICK: p = _("½³¤ë", "kick"); break;
1455 case RBM_CLAW: p = _("¤Ò¤Ã¤«¤¯", "claw"); break;
1456 case RBM_BITE: p = _("³ú¤à", "bite"); break;
1457 case RBM_STING: p = _("»É¤¹", "sting"); break;
1458 case RBM_SLASH: p = _("»Â¤ë", "slash"); break;
1459 case RBM_BUTT: p = _("³Ñ¤ÇÆͤ¯", "butt"); break;
1460 case RBM_CRUSH: p = _("ÂÎÅö¤¿¤ê¤¹¤ë", "crush"); break;
1461 case RBM_ENGULF: p = _("°û¤ß¹þ¤à", "engulf"); break;
1462 case RBM_CHARGE: p = _("ÀÁµá½ñ¤ò¤è¤³¤¹", "charge"); break;
1463 case RBM_CRAWL: p = _("ÂΤξå¤òÇ礤²ó¤ë", "crawl on you"); break;
1464 case RBM_DROOL: p = _("¤è¤À¤ì¤ò¤¿¤é¤¹", "drool on you"); break;
1465 case RBM_SPIT: p = _("¤Ä¤Ð¤òÅǤ¯", "spit"); break;
1466 case RBM_EXPLODE: p = _("Çúȯ¤¹¤ë", "explode"); break;
1467 case RBM_GAZE: p = _("¤Ë¤é¤à", "gaze"); break;
1468 case RBM_WAIL: p = _("µã¤¶«¤Ö", "wail"); break;
1469 case RBM_SPORE: p = _("˦»Ò¤òÈô¤Ð¤¹", "release spores"); break;
1470 case RBM_XXX4: break;
1471 case RBM_BEG: p = _("¶â¤ò¤»¤¬¤à", "beg"); break;
1472 case RBM_INSULT: p = _("Éî¿«¤¹¤ë", "insult"); break;
1473 case RBM_MOAN: p = _("¤¦¤á¤¯", "moan"); break;
1474 case RBM_SHOW: p = _("²Î¤¦", "sing"); break;
1478 /* Default effect */
1481 /* Acquire the effect */
1485 case RBE_HURT: q = _("¹¶·â¤¹¤ë", "attack"); break;
1486 case RBE_POISON: q = _("ÆǤò¤¯¤é¤ï¤¹", "poison"); break;
1487 case RBE_UN_BONUS: q = _("Îô²½¤µ¤»¤ë", "disenchant"); break;
1488 case RBE_UN_POWER: q = _("½¼Å¶ËâÎϤòµÛ¼ý¤¹¤ë", "drain charges"); break;
1489 case RBE_EAT_GOLD: q = _("¶â¤òÅð¤à", "steal gold"); break;
1490 case RBE_EAT_ITEM: q = _("¥¢¥¤¥Æ¥à¤òÅð¤à", "steal items"); break;
1491 case RBE_EAT_FOOD: q = _("¤¢¤Ê¤¿¤Î¿©ÎÁ¤ò¿©¤Ù¤ë", "eat your food"); break;
1492 case RBE_EAT_LITE: q = _("ÌÀ¤«¤ê¤òµÛ¼ý¤¹¤ë", "absorb light"); break;
1493 case RBE_ACID: q = _("»À¤òÈô¤Ð¤¹", "shoot acid"); break;
1494 case RBE_ELEC: q = _("´¶ÅŤµ¤»¤ë", "electrocute"); break;
1495 case RBE_FIRE: q = _("dz¤ä¤¹", "burn"); break;
1496 case RBE_COLD: q = _("Åà¤é¤»¤ë", "freeze"); break;
1497 case RBE_BLIND: q = _("ÌÕÌܤˤ¹¤ë", "blind"); break;
1498 case RBE_CONFUSE: q = _("º®Í𤵤»¤ë", "confuse"); break;
1499 case RBE_TERRIFY: q = _("¶²Éݤµ¤»¤ë", "terrify"); break;
1500 case RBE_PARALYZE: q = _("Ëãá㤵¤»¤ë", "paralyze"); break;
1501 case RBE_LOSE_STR: q = _("ÏÓÎϤò¸º¾¯¤µ¤»¤ë", "reduce strength"); break;
1502 case RBE_LOSE_INT: q = _("ÃÎǽ¤ò¸º¾¯¤µ¤»¤ë", "reduce intelligence"); break;
1503 case RBE_LOSE_WIS: q = _("¸¤µ¤ò¸º¾¯¤µ¤»¤ë", "reduce wisdom"); break;
1504 case RBE_LOSE_DEX: q = _("´ïÍѤµ¤ò¸º¾¯¤µ¤»¤ë", "reduce dexterity"); break;
1505 case RBE_LOSE_CON: q = _("Âѵ×ÎϤò¸º¾¯¤µ¤»¤ë", "reduce constitution"); break;
1506 case RBE_LOSE_CHR: q = _("Ì¥ÎϤò¸º¾¯¤µ¤»¤ë", "reduce charisma"); break;
1507 case RBE_LOSE_ALL: q = _("Á´¥¹¥Æ¡¼¥¿¥¹¤ò¸º¾¯¤µ¤»¤ë", "reduce all stats"); break;
1508 case RBE_SHATTER: q = _("Ê´ºÕ¤¹¤ë", "shatter"); break;
1509 case RBE_EXP_10: q = _("·Ð¸³Ãͤò¸º¾¯(10d6+)¤µ¤»¤ë", "lower experience (by 10d6+)"); break;
1510 case RBE_EXP_20: q = _("·Ð¸³Ãͤò¸º¾¯(20d6+)¤µ¤»¤ë", "lower experience (by 20d6+)"); break;
1511 case RBE_EXP_40: q = _("·Ð¸³Ãͤò¸º¾¯(40d6+)¤µ¤»¤ë", "lower experience (by 40d6+)"); break;
1512 case RBE_EXP_80: q = _("·Ð¸³Ãͤò¸º¾¯(80d6+)¤µ¤»¤ë", "lower experience (by 80d6+)"); break;
1513 case RBE_DISEASE: q = _("ɵ¤¤Ë¤¹¤ë", "disease"); break;
1514 case RBE_TIME: q = _("»þ´Ö¤òµÕÌá¤ê¤µ¤»¤ë", "time"); break;
1515 case RBE_DR_LIFE: q = _("À¸Ì¿ÎϤòµÛ¼ý¤¹¤ë", "drain life"); break;
1516 case RBE_DR_MANA: q = _("ËâÎϤòÃ¥¤¦", "drain mana force"); break;
1517 case RBE_INERTIA: q = _("¸ºÂ®¤µ¤»¤ë", "slow"); break;
1518 case RBE_STUN: q = _("Û¯Û°¤È¤µ¤»¤ë", "stun"); break;
1523 if ( r == 0 ) hooked_roff( format("%^s¤Ï", wd_he[msex]) );
1525 /***¼ã´³É½¸½¤òÊѹ¹ ita ***/
1527 /* Describe damage (if known) */
1528 if (d1 && d2 && (know_everything || know_damage(r_idx, m)))
1531 /* Display the damage */
1532 hooked_roff(format(" %dd%d ", d1, d2));
1533 hooked_roff("¤Î¥À¥á¡¼¥¸¤Ç");
1535 /* Hack -- force a method */
1536 if (!p) p = "²¿¤«´ñ̯¤Ê¤³¤È¤ò¤¹¤ë";
1538 /* Describe the method */
1539 /* XX¤·¤ÆYY¤·/XX¤·¤ÆYY¤¹¤ë/XX¤·/XX¤¹¤ë */
1540 if(q) jverb( p ,jverb_buf, JVERB_TO);
1541 else if(r!=n-1) jverb( p ,jverb_buf, JVERB_AND);
1542 else strcpy(jverb_buf, p);
1544 hooked_roff(jverb_buf);
1546 /* Describe the effect (if any) */
1549 if(r!=n-1) jverb( q,jverb_buf, JVERB_AND);
1550 else strcpy(jverb_buf,q);
1551 hooked_roff(jverb_buf);
1553 if(r!=n-1) hooked_roff("¡¢");
1555 /* Introduce the attack description */
1558 hooked_roff(format("%^s can ", wd_he[msex]));
1566 hooked_roff(", and ");
1570 /* Hack -- force a method */
1571 if (!p) p = "do something weird";
1573 /* Describe the method */
1577 /* Describe the effect (if any) */
1580 /* Describe the attack type */
1581 hooked_roff(" to ");
1584 /* Describe damage (if known) */
1585 if (d1 && d2 && (know_everything || know_damage(r_idx, m)))
1587 /* Display the damage */
1588 hooked_roff(" with damage");
1589 hooked_roff(format(" %dd%d", d1, d2));
1596 /* Count the attacks as printed */
1600 /* Finish sentence above */
1603 hooked_roff(_("¡£", ". "));
1606 /* Notice lack of attacks */
1607 else if (flags1 & RF1_NEVER_BLOW)
1610 _("%^s¤ÏʪÍýŪ¤Ê¹¶·âÊýË¡¤ò»ý¤¿¤Ê¤¤¡£",
1611 "%^s has no physical attacks. "), wd_he[msex]));
1614 /* Or describe the lack of knowledge */
1618 _("%s¹¶·â¤Ë¤Ä¤¤¤Æ¤Ï²¿¤âÃΤé¤Ê¤¤¡£",
1619 "Nothing is known about %s attack. "), wd_his[msex]));
1624 * Notice "Quest" monsters, but only if you
1625 * already encountered the monster.
1627 if ((flags1 & RF1_QUESTOR) && ((r_ptr->r_sights) && (r_ptr->max_num) && ((r_idx == MON_OBERON) || (r_idx == MON_SERPENT))))
1629 hook_c_roff(TERM_VIOLET,
1630 _("¤¢¤Ê¤¿¤Ï¤³¤Î¥â¥ó¥¹¥¿¡¼¤ò»¦¤·¤¿¤¤¤È¤¤¤¦¶¯¤¤Íß˾¤ò´¶¤¸¤Æ¤¤¤ë...",
1631 "You feel an intense desire to kill this monster... "));
1634 else if (flags7 & RF7_GUARDIAN)
1636 hook_c_roff(TERM_L_RED,
1637 _("¤³¤Î¥â¥ó¥¹¥¿¡¼¤Ï¥À¥ó¥¸¥ç¥ó¤Î¼ç¤Ç¤¢¤ë¡£",
1638 "This monster is the master of a dungeon."));
1649 * @brief ¥â¥ó¥¹¥¿¡¼¾ðÊó¤Î¥Ø¥Ã¥À¤òµ½Ò¤¹¤ë
1650 * Hack -- Display the "name" and "attr/chars" of a monster race
1651 * @param r_idx ¥â¥ó¥¹¥¿¡¼¤Î¼ï²ID
1654 void roff_top(int r_idx)
1656 monster_race *r_ptr = &r_info[r_idx];
1662 /* Access the chars */
1666 /* Access the attrs */
1671 /* Clear the top line */
1672 Term_erase(0, 0, 255);
1674 /* Reset the cursor */
1678 /* A title (use "The" for non-uniques) */
1679 if (!(r_ptr->flags1 & RF1_UNIQUE))
1681 Term_addstr(-1, TERM_WHITE, "The ");
1686 Term_addstr(-1, TERM_WHITE, (r_name + r_ptr->name));
1688 /* Append the "standard" attr/char info */
1689 Term_addstr(-1, TERM_WHITE, " ('");
1690 Term_add_bigch(a1, c1);
1691 Term_addstr(-1, TERM_WHITE, "')");
1693 /* Append the "optional" attr/char info */
1694 Term_addstr(-1, TERM_WHITE, "/('");
1695 Term_add_bigch(a2, c2);
1696 Term_addstr(-1, TERM_WHITE, "'):");
1698 /* Wizards get extra info */
1703 sprintf(buf, "%d", r_idx);
1705 Term_addstr(-1, TERM_WHITE, " (");
1706 Term_addstr(-1, TERM_L_BLUE, buf);
1707 Term_addch(TERM_WHITE, ')');
1714 * @brief ¥â¥ó¥¹¥¿¡¼¾ðÊó¤Îɽ¼¨¤È¶¦¤Ë²èÌ̤ò°ì»þ¾Ãµî¤¹¤ë¥µ¥Ö¥ë¡¼¥Á¥ó /
1715 * Hack -- describe the given monster race at the top of the screen
1716 * @param r_idx ¥â¥ó¥¹¥¿¡¼¤Î¼ï²ID
1717 * @param mode ɽ¼¨¥ª¥×¥·¥ç¥ó
1720 void screen_roff(int r_idx, int mode)
1722 /* Flush messages */
1726 Term_erase(0, 1, 255);
1728 hook_c_roff = c_roff;
1730 /* Recall monster */
1731 roff_aux(r_idx, mode);
1733 /* Describe monster */
1741 * @brief ¥â¥ó¥¹¥¿¡¼¾ðÊó¤Î¸½ºß¤Î¥¦¥£¥ó¥É¥¦¤Ëɽ¼¨¤¹¤ë /
1742 * Hack -- describe the given monster race in the current "term" window
1743 * @param r_idx ¥â¥ó¥¹¥¿¡¼¤Î¼ï²ID
1746 void display_roff(int r_idx)
1750 /* Erase the window */
1751 for (y = 0; y < Term->hgt; y++)
1753 /* Erase the line */
1754 Term_erase(0, y, 255);
1760 hook_c_roff = c_roff;
1762 /* Recall monster */
1765 /* Describe monster */
1771 * @brief ¥â¥ó¥¹¥¿¡¼¾ÜºÙ¾ðÊó¤ò¼«Æ°¥¹¥Ý¥¤¥é¡¼¸þ¤±¤Ë½ÐÎϤ¹¤ë /
1772 * Hack -- output description of the given monster race
1773 * @param r_idx ¥â¥ó¥¹¥¿¡¼¤Î¼ï²ID
1774 * @param roff_func ½ÐÎϽèÍý¤ò¹Ô¤¦´Ø¿ô¥Ý¥¤¥ó¥¿
1777 void output_monster_spoiler(int r_idx, void (*roff_func)(byte attr, cptr str))
1779 hook_c_roff = roff_func;
1781 /* Recall monster */
1782 roff_aux(r_idx, 0x03);
1787 * @brief ¥â¥ó¥¹¥¿¡¼¤¬¥À¥ó¥¸¥ç¥ó¤Ë½Ð¸½¤¹¤ë¤«¤É¤¦¤«¤òÊÖ¤¹
1788 * @param r_idx ȽÄꤹ¤ë¥â¥ó¥¹¥¿¡¼¤Î¼ï²ID
1789 * @return ¥À¥ó¥¸¥ç¥ó¤Ë½Ð¸½¤¹¤ë¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
1791 bool mon_hook_dungeon(int r_idx)
1793 monster_race *r_ptr = &r_info[r_idx];
1795 if (!(r_ptr->flags8 & RF8_WILD_ONLY))
1799 dungeon_info_type *d_ptr = &d_info[dungeon_type];
1800 if ((d_ptr->mflags8 & RF8_WILD_MOUNTAIN) &&
1801 (r_ptr->flags8 & RF8_WILD_MOUNTAIN)) return TRUE;
1808 * @brief ¥â¥ó¥¹¥¿¡¼¤¬³¤ÍΤ˽и½¤¹¤ë¤«¤É¤¦¤«¤òÊÖ¤¹
1809 * @param r_idx ȽÄꤹ¤ë¥â¥ó¥¹¥¿¡¼¤Î¼ï²ID
1810 * @return ³¤ÍΤ˽и½¤¹¤ë¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
1812 static bool mon_hook_ocean(int r_idx)
1814 monster_race *r_ptr = &r_info[r_idx];
1816 if (r_ptr->flags8 & RF8_WILD_OCEAN)
1824 * @brief ¥â¥ó¥¹¥¿¡¼¤¬³¤´ß¤Ë½Ð¸½¤¹¤ë¤«¤É¤¦¤«¤òÊÖ¤¹
1825 * @param r_idx ȽÄꤹ¤ë¥â¥ó¥¹¥¿¡¼¤Î¼ï²ID
1826 * @return ³¤´ß¤Ë½Ð¸½¤¹¤ë¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
1828 static bool mon_hook_shore(int r_idx)
1830 monster_race *r_ptr = &r_info[r_idx];
1832 if (r_ptr->flags8 & RF8_WILD_SHORE)
1840 * @brief ¥â¥ó¥¹¥¿¡¼¤¬¹ÓÃϤ˽и½¤¹¤ë¤«¤É¤¦¤«¤òÊÖ¤¹
1841 * @param r_idx ȽÄꤹ¤ë¥â¥ó¥¹¥¿¡¼¤Î¼ï²ID
1842 * @return ¹ÓÃϤ˽и½¤¹¤ë¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
1844 static bool mon_hook_waste(int r_idx)
1846 monster_race *r_ptr = &r_info[r_idx];
1848 if (r_ptr->flags8 & (RF8_WILD_WASTE | RF8_WILD_ALL))
1856 * @brief ¥â¥ó¥¹¥¿¡¼¤¬Ä®¤Ë½Ð¸½¤¹¤ë¤«¤É¤¦¤«¤òÊÖ¤¹
1857 * @param r_idx ȽÄꤹ¤ë¥â¥ó¥¹¥¿¡¼¤Î¼ï²ID
1858 * @return ¹ÓÃϤ˽и½¤¹¤ë¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
1860 static bool mon_hook_town(int r_idx)
1862 monster_race *r_ptr = &r_info[r_idx];
1864 if (r_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL))
1872 * @brief ¥â¥ó¥¹¥¿¡¼¤¬¿¹ÎӤ˽и½¤¹¤ë¤«¤É¤¦¤«¤òÊÖ¤¹
1873 * @param r_idx ȽÄꤹ¤ë¥â¥ó¥¹¥¿¡¼¤Î¼ï²ID
1874 * @return ¿¹ÎӤ˽и½¤¹¤ë¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
1876 static bool mon_hook_wood(int r_idx)
1878 monster_race *r_ptr = &r_info[r_idx];
1880 if (r_ptr->flags8 & (RF8_WILD_WOOD | RF8_WILD_ALL))
1888 * @brief ¥â¥ó¥¹¥¿¡¼¤¬²Ð»³¤Ë½Ð¸½¤¹¤ë¤«¤É¤¦¤«¤òÊÖ¤¹
1889 * @param r_idx ȽÄꤹ¤ë¥â¥ó¥¹¥¿¡¼¤Î¼ï²ID
1890 * @return ²Ð»³¤Ë½Ð¸½¤¹¤ë¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
1892 static bool mon_hook_volcano(int r_idx)
1894 monster_race *r_ptr = &r_info[r_idx];
1896 if (r_ptr->flags8 & RF8_WILD_VOLCANO)
1903 * @brief ¥â¥ó¥¹¥¿¡¼¤¬»³ÃϤ˽и½¤¹¤ë¤«¤É¤¦¤«¤òÊÖ¤¹
1904 * @param r_idx ȽÄꤹ¤ë¥â¥ó¥¹¥¿¡¼¤Î¼ï²ID
1905 * @return »³ÃϤ˽и½¤¹¤ë¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
1907 static bool mon_hook_mountain(int r_idx)
1909 monster_race *r_ptr = &r_info[r_idx];
1911 if (r_ptr->flags8 & RF8_WILD_MOUNTAIN)
1919 * @brief ¥â¥ó¥¹¥¿¡¼¤¬Á𸶤˽и½¤¹¤ë¤«¤É¤¦¤«¤òÊÖ¤¹
1920 * @param r_idx ȽÄꤹ¤ë¥â¥ó¥¹¥¿¡¼¤Î¼ï²ID
1921 * @return ¿¹ÎӤ˽и½¤¹¤ë¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
1923 static bool mon_hook_grass(int r_idx)
1925 monster_race *r_ptr = &r_info[r_idx];
1927 if (r_ptr->flags8 & (RF8_WILD_GRASS | RF8_WILD_ALL))
1934 * @brief ¥â¥ó¥¹¥¿¡¼¤¬¿¼¤¤¿åÃÏ·Á¤Ë½Ð¸½¤¹¤ë¤«¤É¤¦¤«¤òÊÖ¤¹
1935 * @param r_idx ȽÄꤹ¤ë¥â¥ó¥¹¥¿¡¼¤Î¼ï²ID
1936 * @return ¿¼¤¤¿åÃÏ·Á¤Ë½Ð¸½¤¹¤ë¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
1938 static bool mon_hook_deep_water(int r_idx)
1940 monster_race *r_ptr = &r_info[r_idx];
1942 if (!mon_hook_dungeon(r_idx)) return FALSE;
1944 if (r_ptr->flags7 & RF7_AQUATIC)
1952 * @brief ¥â¥ó¥¹¥¿¡¼¤¬Àõ¤¤¿åÃÏ·Á¤Ë½Ð¸½¤¹¤ë¤«¤É¤¦¤«¤òÊÖ¤¹
1953 * @param r_idx ȽÄꤹ¤ë¥â¥ó¥¹¥¿¡¼¤Î¼ï²ID
1954 * @return Àõ¤¤¿åÃÏ·Á¤Ë½Ð¸½¤¹¤ë¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
1956 static bool mon_hook_shallow_water(int r_idx)
1958 monster_race *r_ptr = &r_info[r_idx];
1960 if (!mon_hook_dungeon(r_idx)) return FALSE;
1962 if (r_ptr->flags2 & RF2_AURA_FIRE)
1970 * @brief ¥â¥ó¥¹¥¿¡¼¤¬ÍÏ´äÃÏ·Á¤Ë½Ð¸½¤¹¤ë¤«¤É¤¦¤«¤òÊÖ¤¹
1971 * @param r_idx ȽÄꤹ¤ë¥â¥ó¥¹¥¿¡¼¤Î¼ï²ID
1972 * @return ÍÏ´äÃÏ·Á¤Ë½Ð¸½¤¹¤ë¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
1974 static bool mon_hook_lava(int r_idx)
1976 monster_race *r_ptr = &r_info[r_idx];
1978 if (!mon_hook_dungeon(r_idx)) return FALSE;
1980 if (((r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK) ||
1981 (r_ptr->flags7 & RF7_CAN_FLY)) &&
1982 !(r_ptr->flags3 & RF3_AURA_COLD))
1990 * @brief ¥â¥ó¥¹¥¿¡¼¤¬Ä̾ï¤Î¾²ÃÏ·Á¤Ë½Ð¸½¤¹¤ë¤«¤É¤¦¤«¤òÊÖ¤¹
1991 * @param r_idx ȽÄꤹ¤ë¥â¥ó¥¹¥¿¡¼¤Î¼ï²ID
1992 * @return Ä̾ï¤Î¾²ÃÏ·Á¤Ë½Ð¸½¤¹¤ë¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
1994 static bool mon_hook_floor(int r_idx)
1996 monster_race *r_ptr = &r_info[r_idx];
1998 if (!(r_ptr->flags7 & RF7_AQUATIC) ||
1999 (r_ptr->flags7 & RF7_CAN_FLY))
2007 * @brief ¥×¥ì¥¤¥ä¡¼¤Î¸½ºß¤Î¹°è¥Þ¥Ã¥×ºÂɸ¤«¤éÆÀ¤¿ÃÏÀª¤ò¸µ¤Ë¥â¥ó¥¹¥¿¡¼¤ÎÀ¸À®¾ò·ï´Ø¿ô¤òÊÖ¤¹
2008 * @return ÃÏÀª¤Ë¤¢¤Ã¤¿¥â¥ó¥¹¥¿¡¼¤ÎÀ¸À®¾ò·ï´Ø¿ô
2010 monster_hook_type get_monster_hook(void)
2012 if (!dun_level && !p_ptr->inside_quest)
2014 switch (wilderness[p_ptr->wilderness_y][p_ptr->wilderness_x].terrain)
2017 return (monster_hook_type)mon_hook_town;
2018 case TERRAIN_DEEP_WATER:
2019 return (monster_hook_type)mon_hook_ocean;
2020 case TERRAIN_SHALLOW_WATER:
2022 return (monster_hook_type)mon_hook_shore;
2024 case TERRAIN_DESERT:
2025 return (monster_hook_type)mon_hook_waste;
2027 return (monster_hook_type)mon_hook_grass;
2029 return (monster_hook_type)mon_hook_wood;
2030 case TERRAIN_SHALLOW_LAVA:
2031 case TERRAIN_DEEP_LAVA:
2032 return (monster_hook_type)mon_hook_volcano;
2033 case TERRAIN_MOUNTAIN:
2034 return (monster_hook_type)mon_hook_mountain;
2036 return (monster_hook_type)mon_hook_dungeon;
2041 return (monster_hook_type)mon_hook_dungeon;
2046 * @brief »ØÄꤵ¤ì¤¿¹°è¥Þ¥Ã¥×ºÂɸ¤ÎÃÏÀª¤ò¸µ¤Ë¥â¥ó¥¹¥¿¡¼¤ÎÀ¸À®¾ò·ï´Ø¿ô¤òÊÖ¤¹
2047 * @return ÃÏÀª¤Ë¤¢¤Ã¤¿¥â¥ó¥¹¥¿¡¼¤ÎÀ¸À®¾ò·ï´Ø¿ô
2049 monster_hook_type get_monster_hook2(int y, int x)
2051 feature_type *f_ptr = &f_info[cave[y][x].feat];
2053 /* Set the monster list */
2056 if (have_flag(f_ptr->flags, FF_WATER))
2059 if (have_flag(f_ptr->flags, FF_DEEP))
2061 return (monster_hook_type)mon_hook_deep_water;
2067 return (monster_hook_type)mon_hook_shallow_water;
2072 else if (have_flag(f_ptr->flags, FF_LAVA))
2074 return (monster_hook_type)mon_hook_lava;
2077 else return (monster_hook_type)mon_hook_floor;
2081 * @brief ¥â¥ó¥¹¥¿¡¼¤òͧ¹¥Åª¤Ë¤¹¤ë
2082 * @param m_ptr ¥â¥ó¥¹¥¿¡¼¾ðÊó¹½Â¤ÂΤλ²¾È¥Ý¥¤¥ó¥¿
2085 void set_friendly(monster_type *m_ptr)
2087 m_ptr->smart |= SM_FRIENDLY;
2091 * @brief ¥â¥ó¥¹¥¿¡¼¤ò¥Ú¥Ã¥È¤Ë¤¹¤ë
2092 * @param m_ptr ¥â¥ó¥¹¥¿¡¼¾ðÊó¹½Â¤ÂΤλ²¾È¥Ý¥¤¥ó¥¿
2095 void set_pet(monster_type *m_ptr)
2097 if (!is_pet(m_ptr)) check_pets_num_and_align(m_ptr, TRUE);
2099 /* Check for quest completion */
2100 check_quest_completion(m_ptr);
2102 m_ptr->smart |= SM_PET;
2103 if (!(r_info[m_ptr->r_idx].flags3 & (RF3_EVIL | RF3_GOOD)))
2104 m_ptr->sub_align = SUB_ALIGN_NEUTRAL;
2108 * @brief ¥â¥ó¥¹¥¿¡¼¤òŨ¤Ë²ó¤¹
2109 * Makes the monster hostile towards the player
2110 * @param m_ptr ¥â¥ó¥¹¥¿¡¼¾ðÊó¹½Â¤ÂΤλ²¾È¥Ý¥¤¥ó¥¿
2113 void set_hostile(monster_type *m_ptr)
2115 if (p_ptr->inside_battle) return;
2117 if (is_pet(m_ptr)) check_pets_num_and_align(m_ptr, FALSE);
2119 m_ptr->smart &= ~SM_PET;
2120 m_ptr->smart &= ~SM_FRIENDLY;
2125 * @brief ¥â¥ó¥¹¥¿¡¼¤òÅܤ餻¤ë
2127 * @param m_ptr ¥â¥ó¥¹¥¿¡¼¾ðÊó¹½Â¤ÂΤλ²¾È¥Ý¥¤¥ó¥¿
2130 void anger_monster(monster_type *m_ptr)
2132 if (p_ptr->inside_battle) return;
2133 if (is_friendly(m_ptr))
2137 monster_desc(m_name, m_ptr, 0);
2139 msg_format("%^s¤ÏÅܤä¿¡ª", m_name);
2141 msg_format("%^s gets angry!", m_name);
2146 chg_virtue(V_INDIVIDUALISM, 1);
2147 chg_virtue(V_HONOUR, -1);
2148 chg_virtue(V_JUSTICE, -1);
2149 chg_virtue(V_COMPASSION, -1);
2155 * @brief ¥â¥ó¥¹¥¿¡¼¤¬ÃÏ·Á¤òƧÇˤǤ¤ë¤«¤É¤¦¤«¤òÊÖ¤¹
2156 * Check if monster can cross terrain
2157 * @param feat ÃÏ·ÁID
2158 * @param r_ptr ¥â¥ó¥¹¥¿¡¼¼ï²¹½Â¤ÂΤλ²¾È¥Ý¥¤¥ó¥¿
2159 * @param mode ¥ª¥×¥·¥ç¥ó
2160 * @return ƧÇ˲Äǽ¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
2162 bool monster_can_cross_terrain(s16b feat, monster_race *r_ptr, u16b mode)
2164 feature_type *f_ptr = &f_info[feat];
2167 if (have_flag(f_ptr->flags, FF_PATTERN))
2169 if (!(mode & CEM_RIDING))
2171 if (!(r_ptr->flags7 & RF7_CAN_FLY)) return FALSE;
2175 if (!(mode & CEM_P_CAN_ENTER_PATTERN)) return FALSE;
2180 if (have_flag(f_ptr->flags, FF_CAN_FLY) && (r_ptr->flags7 & RF7_CAN_FLY)) return TRUE;
2181 if (have_flag(f_ptr->flags, FF_CAN_SWIM) && (r_ptr->flags7 & RF7_CAN_SWIM)) return TRUE;
2182 if (have_flag(f_ptr->flags, FF_CAN_PASS))
2184 if ((r_ptr->flags2 & RF2_PASS_WALL) && (!(mode & CEM_RIDING) || p_ptr->pass_wall)) return TRUE;
2187 if (!have_flag(f_ptr->flags, FF_MOVE)) return FALSE;
2189 /* Some monsters can walk on mountains */
2190 if (have_flag(f_ptr->flags, FF_MOUNTAIN) && (r_ptr->flags8 & RF8_WILD_MOUNTAIN)) return TRUE;
2193 if (have_flag(f_ptr->flags, FF_WATER))
2195 if (!(r_ptr->flags7 & RF7_AQUATIC))
2198 if (have_flag(f_ptr->flags, FF_DEEP)) return FALSE;
2201 else if (r_ptr->flags2 & RF2_AURA_FIRE) return FALSE;
2205 /* Aquatic monster into non-water? */
2206 else if (r_ptr->flags7 & RF7_AQUATIC) return FALSE;
2209 if (have_flag(f_ptr->flags, FF_LAVA))
2211 if (!(r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK)) return FALSE;
2219 * @brief »ØÄꤵ¤ì¤¿ºÂɸ¤ÎÃÏ·Á¤ò¥â¥ó¥¹¥¿¡¼¤¬Æ§ÇˤǤ¤ë¤«¤É¤¦¤«¤òÊÖ¤¹
2220 * Strictly check if monster can enter the grid
2221 * @param y ÃÏ·Á¤ÎYºÂɸ
2222 * @param x ÃÏ·Á¤ÎXºÂɸ
2223 * @param r_ptr ¥â¥ó¥¹¥¿¡¼¼ï²¹½Â¤ÂΤλ²¾È¥Ý¥¤¥ó¥¿
2224 * @param mode ¥ª¥×¥·¥ç¥ó
2225 * @return ƧÇ˲Äǽ¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
2227 bool monster_can_enter(int y, int x, monster_race *r_ptr, u16b mode)
2229 cave_type *c_ptr = &cave[y][x];
2231 /* Player or other monster */
2232 if (player_bold(y, x)) return FALSE;
2233 if (c_ptr->m_idx) return FALSE;
2235 return monster_can_cross_terrain(c_ptr->feat, r_ptr, mode);
2240 * @brief ¥â¥ó¥¹¥¿¡¼¤Î°À¤Î´ð¤Å¤¤¤¿Å¨Âдط¸¤ÎÍ̵¤òÊÖ¤¹¡Ê¥µ¥Ö¥ë¡¼¥Á¥ó¡Ë
2241 * Check if this monster has "hostile" alignment (aux)
2242 * @param sub_align1 ¥â¥ó¥¹¥¿¡¼1¤Î¥µ¥Ö¥Õ¥é¥°
2243 * @param sub_align2 ¥â¥ó¥¹¥¿¡¼2¤Î¥µ¥Ö¥Õ¥é¥°
2244 * @return ŨÂдط¸¤Ë¤¢¤ë¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
2246 static bool check_hostile_align(byte sub_align1, byte sub_align2)
2248 if (sub_align1 != sub_align2)
2250 if (((sub_align1 & SUB_ALIGN_EVIL) && (sub_align2 & SUB_ALIGN_GOOD)) ||
2251 ((sub_align1 & SUB_ALIGN_GOOD) && (sub_align2 & SUB_ALIGN_EVIL)))
2255 /* Non-hostile alignment */
2261 * @brief ¥â¥ó¥¹¥¿¡¼¤Î°À¤Î´ð¤Å¤¤¤¿Å¨Âдط¸¤ÎÍ̵¤òÊÖ¤¹
2262 * Check if two monsters are enemies
2263 * @param m_ptr ¥â¥ó¥¹¥¿¡¼1¤Î¹½Â¤Âλ²¾È¥Ý¥¤¥ó¥¿
2264 * @param n_ptr ¥â¥ó¥¹¥¿¡¼2¤Î¹½Â¤Âλ²¾È¥Ý¥¤¥ó¥¿
2265 * @return ŨÂдط¸¤Ë¤¢¤ë¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
2267 bool are_enemies(monster_type *m_ptr, monster_type *n_ptr)
2269 monster_race *r_ptr = &r_info[m_ptr->r_idx];
2270 monster_race *s_ptr = &r_info[n_ptr->r_idx];
2272 if (p_ptr->inside_battle)
2274 if (is_pet(m_ptr) || is_pet(n_ptr)) return FALSE;
2278 if ((r_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL))
2279 && (s_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL)))
2281 if (!is_pet(m_ptr) && !is_pet(n_ptr)) return FALSE;
2284 /* Friendly vs. opposite aligned normal or pet */
2285 if (check_hostile_align(m_ptr->sub_align, n_ptr->sub_align))
2287 if (!(m_ptr->mflag2 & MFLAG2_CHAMELEON) || !(n_ptr->mflag2 & MFLAG2_CHAMELEON)) return TRUE;
2290 /* Hostile vs. non-hostile */
2291 if (is_hostile(m_ptr) != is_hostile(n_ptr))
2302 * @brief ¥â¥ó¥¹¥¿¡¼¤¬¥×¥ì¥¤¥ä¡¼¤ËÂФ·¤ÆŨ°Õ¤òÊú¤¯¤«¤É¤¦¤«¤òÊÖ¤¹
2303 * Check if this monster race has "hostile" alignment
2304 * @param m_ptr ¥â¥ó¥¹¥¿¡¼¾ðÊó¹½Â¤ÂΤλ²¾È¥Ý¥¤¥ó¥¿
2305 * @param pa_good ¥×¥ì¥¤¥ä¡¼¤ÎÁ±·¹¸þÃÍ
2306 * @param pa_evil ¥×¥ì¥¤¥ä¡¼¤Î°·¹¸þÃÍ
2307 * @param r_ptr ¥â¥ó¥¹¥¿¡¼¼ï²¾ðÊó¤Î¹½Â¤Âλ²¾È¥Ý¥¤¥ó¥¿
2308 * @return ¥×¥ì¥¤¥ä¡¼¤ËŨ°Õ¤ò»ý¤Ä¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
2310 * If user is player, m_ptr == NULL.
2312 bool monster_has_hostile_align(monster_type *m_ptr, int pa_good, int pa_evil, monster_race *r_ptr)
2314 byte sub_align1 = SUB_ALIGN_NEUTRAL;
2315 byte sub_align2 = SUB_ALIGN_NEUTRAL;
2317 if (m_ptr) /* For a monster */
2319 sub_align1 = m_ptr->sub_align;
2321 else /* For player */
2323 if (p_ptr->align >= pa_good) sub_align1 |= SUB_ALIGN_GOOD;
2324 if (p_ptr->align <= pa_evil) sub_align1 |= SUB_ALIGN_EVIL;
2327 /* Racial alignment flags */
2328 if (r_ptr->flags3 & RF3_EVIL) sub_align2 |= SUB_ALIGN_EVIL;
2329 if (r_ptr->flags3 & RF3_GOOD) sub_align2 |= SUB_ALIGN_GOOD;
2331 if (check_hostile_align(sub_align1, sub_align2)) return TRUE;
2333 /* Non-hostile alignment */
2339 * @brief ¥â¥ó¥¹¥¿¡¼¤¬À¸Ì¿ÂΤ«¤É¤¦¤«¤òÊÖ¤¹
2340 * Is the monster "alive"?
2341 * @param r_ptr ȽÄꤹ¤ë¥â¥ó¥¹¥¿¡¼¤Î¼ï²¾ðÊó¹½Â¤Âλ²¾È¥Ý¥¤¥ó¥¿
2342 * @return À¸Ì¿ÂΤʤé¤ÐTRUE¤òÊÖ¤¹
2344 * Used to determine the message to print for a killed monster.
2345 * ("dies", "destroyed")
2347 bool monster_living(monster_race *r_ptr)
2349 /* Non-living, undead, or demon */
2350 if (r_ptr->flags3 & (RF3_DEMON | RF3_UNDEAD | RF3_NONLIVING))
2358 * @brief ¥â¥ó¥¹¥¿¡¼¤¬ÆüìǽÎϾ塢¾Þ¶â¼ó¤«¤éÇÓ½ü¤¹¤ëɬÍפ¬¤¢¤ë¤«¤É¤¦¤«¤òÊÖ¤¹¡£
2359 * Is the monster "alive"? / Is this monster declined to be questor or bounty?
2360 * @param r_idx ¥â¥ó¥¹¥¿¡¼¤Î¼ï²ID
2361 * @return ¾Þ¶â¼ó¤Ë²Ã¤¨¤é¤ì¤Ê¤¤¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
2363 * ¼Â¼Á¥Ð¡¼¥Î¡¼¥ë¡á¥ë¥Ñ¡¼¥ÈÍÑ¡£
2365 bool no_questor_or_bounty_uniques(int r_idx)
2370 * Decline them to be questor or bounty because they use
2371 * special motion "split and combine"
2373 case MON_BANORLUPART: