4 * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke
6 * This software may be copied and distributed for educational, research,
7 * and not for profit purposes provided that this copyright and statement
8 * are included in all such copies. Other copyrights may also apply.
11 /* Purpose: Spell code (part 2) */
18 * self-knowledge... idea from nethack. Useful for determining powers and
19 * resistences of items. It saves the screen, clears it, then starts listing
20 * attributes, a screenful at a time. (There are a LOT of attributes to
21 * list. It will probably take 2 or 3 screens for a powerful character whose
22 * using several artifacts...) -CFT
24 * It is now a lot more efficient. -BEN-
26 * See also "identify_fully()".
28 * XXX XXX XXX Use the "show_file()" method, perhaps.
30 void self_knowledge(void)
35 char v_string [8] [128];
36 char s_string [6] [128];
38 u32b flgs[TR_FLAG_SIZE];
47 int plev = p_ptr->lev;
51 for (j = 0; j < TR_FLAG_SIZE; j++)
54 p_ptr->knowledge |= (KNOW_STAT | KNOW_HPRATE);
58 percent = (int)(((long)p_ptr->player_hp[PY_MAX_LEVEL - 1] * 200L) /
60 ((PY_MAX_LEVEL - 1+3) * (p_ptr->hitdie + 1))));
63 sprintf(Dummy, "¸½ºß¤ÎÂÎÎÏ¥é¥ó¥¯ : %d/100", percent);
65 sprintf(Dummy, "Your current Life Rating is %d/100.", percent);
68 strcpy(buf[0], Dummy);
72 chg_virtue(V_KNOWLEDGE, 1);
73 chg_virtue(V_ENLIGHTEN, 1);
75 /* Acquire item flags from equipment */
76 for (k = INVEN_RARM; k < INVEN_TOTAL; k++)
78 u32b tflgs[TR_FLAG_SIZE];
80 o_ptr = &inventory[k];
82 /* Skip non-objects */
83 if (!o_ptr->k_idx) continue;
85 /* Extract the flags */
86 object_flags(o_ptr, tflgs);
89 for (j = 0; j < TR_FLAG_SIZE; j++)
94 info[i++] = "ǽÎϤκÇÂçÃÍ";
96 info[i++] = "Limits of maximum stats";
99 for (v_nr = 0; v_nr < 6; v_nr++)
103 sprintf(stat_desc, "%s 18/%d", stat_names[v_nr], p_ptr->stat_max_max[v_nr]-18);
105 strcpy(s_string[v_nr], stat_desc);
107 info[i++] = s_string[v_nr];
112 sprintf(Dummy, "¸½ºß¤Î°À : %s(%ld)", your_alignment(), (long int)p_ptr->align);
114 sprintf(Dummy, "Your alighnment : %s(%ld)", your_alignment(), (long int)p_ptr->align);
116 strcpy(buf[1], Dummy);
118 for (v_nr = 0; v_nr < 8; v_nr++)
122 int tester = p_ptr->virtues[v_nr];
124 strcpy(v_name, virtue[(p_ptr->vir_types[v_nr])-1]);
127 sprintf(vir_desc, "¤ª¤Ã¤È¡£%s¤Î¾ðÊó¤Ê¤·¡£", v_name);
129 sprintf(vir_desc, "Oops. No info about %s.", v_name);
133 sprintf(vir_desc, "[%s]¤ÎÂÐ¶Ë (%d)",
135 sprintf(vir_desc, "You are the polar opposite of %s (%d).",
138 else if (tester < -80)
140 sprintf(vir_desc, "[%s]¤ÎÂçŨ (%d)",
142 sprintf(vir_desc, "You are an arch-enemy of %s (%d).",
145 else if (tester < -60)
147 sprintf(vir_desc, "[%s]¤Î¶¯Å¨ (%d)",
149 sprintf(vir_desc, "You are a bitter enemy of %s (%d).",
152 else if (tester < -40)
154 sprintf(vir_desc, "[%s]¤ÎŨ (%d)",
156 sprintf(vir_desc, "You are an enemy of %s (%d).",
159 else if (tester < -20)
161 sprintf(vir_desc, "[%s]¤Îºá¼Ô (%d)",
163 sprintf(vir_desc, "You have sinned against %s (%d).",
168 sprintf(vir_desc, "[%s]¤ÎÌÂÆ»¼Ô (%d)",
170 sprintf(vir_desc, "You have strayed from the path of %s (%d).",
173 else if (tester == 0)
175 sprintf(vir_desc, "[%s]¤ÎÃæΩ¼Ô (%d)",
177 sprintf(vir_desc,"You are neutral to %s (%d).",
180 else if (tester < 20)
182 sprintf(vir_desc, "[%s]¤Î¾®ÆÁ¼Ô (%d)",
184 sprintf(vir_desc,"You are somewhat virtuous in %s (%d).",
187 else if (tester < 40)
189 sprintf(vir_desc, "[%s]¤ÎÃæÆÁ¼Ô (%d)",
191 sprintf(vir_desc,"You are virtuous in %s (%d).",
194 else if (tester < 60)
196 sprintf(vir_desc, "[%s]¤Î¹âÆÁ¼Ô (%d)",
198 sprintf(vir_desc,"You are very virtuous in %s (%d).",
201 else if (tester < 80)
203 sprintf(vir_desc, "[%s]¤ÎÇÆ¼Ô (%d)",
205 sprintf(vir_desc,"You are a champion of %s (%d).",
208 else if (tester < 100)
210 sprintf(vir_desc, "[%s]¤Î°ÎÂç¤ÊÇÆ¼Ô (%d)",
212 sprintf(vir_desc,"You are a great champion of %s (%d).",
217 sprintf(vir_desc, "[%s]¤Î¶ñ¸½¼Ô (%d)",
219 sprintf(vir_desc,"You are the living embodiment of %s (%d).",
223 strcpy(v_string[v_nr], vir_desc);
225 info[i++] = v_string[v_nr];
229 /* Racial powers... */
230 if (p_ptr->mimic_form)
232 switch (p_ptr->mimic_form)
235 case MIMIC_DEMON_LORD:
237 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤ÎÃϹö¤«²Ð±ê¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤¬¤Ç¤¤ë¡£(%d MP)", 3 * plev, 10+plev/3);
239 sprintf(Dummy, "You can nether breathe, dam. %d (cost %d).", 3 * plev, 10+plev/3);
248 sprintf(Dummy, "¤¢¤Ê¤¿¤ÏŨ¤«¤é %d-%d HP ¤ÎÀ¸Ì¿ÎϤòµÛ¼ý¤Ç¤¤ë¡£(%d MP)",
250 sprintf(Dummy, "You can steal life from a foe, dam. %d-%d (cost %d).",
253 plev + MAX(1, plev / 10), plev + plev * MAX(1, plev / 10), 1 + (plev / 3));
261 switch (p_ptr->prace)
267 info[i++] = "¤¢¤Ê¤¿¤Ï櫤ȥɥ¢¤È³¬Ãʤò´¶ÃΤǤ¤ë¡£(5 MP)";
269 info[i++] = "You can find traps, doors and stairs (cost 5).";
277 info[i++] = "¤¢¤Ê¤¿¤Ï¿©ÎÁ¤òÀ¸À®¤Ç¤¤ë¡£(10 MP)";
279 info[i++] = "You can produce food (cost 10).";
288 sprintf(Dummy, "¤¢¤Ê¤¿¤ÏÈÏ°Ï %d °ÊÆâ¤Ë¥Æ¥ì¥Ý¡¼¥È¤Ç¤¤ë¡£(%d MP)",
290 sprintf(Dummy, "You can teleport, range %d (cost %d).",
293 (1 + plev), (5 + (plev / 5)));
300 info[i++] = "¤¢¤Ê¤¿¤Ï¶²Éݤò½üµî¤Ç¤¤ë¡£(5 MP)";
302 info[i++] = "You can remove fear (cost 5).";
306 case RACE_HALF_TROLL:
309 info[i++] = "¤¢¤Ê¤¿¤Ï¶¸Ë½²½¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(12 MP) ";
311 info[i++] = "You enter berserk fury (cost 12).";
318 info[i++] = "¤¢¤Ê¤¿¤Ï¥·¥ã¥É¥¦¥·¥Õ¥È¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(50 MP)";
320 info[i++] = "You can Shift Shadows (cost 50).";
325 info[i++] = "¤¢¤Ê¤¿¤Ï¡Ö¥Ñ¥¿¡¼¥ó¡×¤ò¿´¤ËÉÁ¤¤¤ÆÊ⤯¤³¤È¤¬¤Ç¤¤ë¡£(75 MP)";
327 info[i++] = "You can mentally Walk the Pattern (cost 75).";
334 info[i++] = "¤¢¤Ê¤¿¤Ï¶¸Ë½²½¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(10 MP) ";
336 info[i++] = "You can enter berserk fury (cost 10).";
343 info[i++] = "¤¢¤Ê¤¿¤ÏÇúȯ¤Î¥ë¡¼¥ó¤ò»Å³Ý¤±¤ë¤³¤È¤¬¤Ç¤¤ë¡£(35 MP)";
345 info[i++] = "You can set an Explosive Rune (cost 35).";
349 case RACE_HALF_GIANT:
352 info[i++] = "¤¢¤Ê¤¿¤ÏÀФÎÊɤò²õ¤¹¤³¤È¤¬¤Ç¤¤ë¡£(10 MP)";
354 info[i++] = "You can break stone walls (cost 10).";
358 case RACE_HALF_TITAN:
361 info[i++] = "¤¢¤Ê¤¿¤Ï¥â¥ó¥¹¥¿¡¼¤ò¥¹¥¥ã¥ó¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(20 MP)";
363 info[i++] = "You can probe monsters (cost 20).";
371 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î´äÀФòÅꤲ¤ë¤³¤È¤¬¤Ç¤¤ë¡£(15 MP)",
373 sprintf(Dummy, "You can throw a boulder, dam. %d (cost 15).",
383 info[i++] = "¤¢¤Ê¤¿¤Ï¶²Éݤò¸Æ¤Óµ¯¤³¤¹¶«¤ÓÀ¼¤òȯ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(15 MP)";
385 info[i++] = "You can make a terrifying scream (cost 15).";
393 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î»À¤ò¿á¤¤«¤±¤ë¤³¤È¤¬¤Ç¤¤ë¡£(9 MP)", plev);
395 sprintf(Dummy, "You can spit acid, dam. %d (cost 9).", plev);
406 "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤ÎÆÇÌð¤òÅꤲ¤ë¤³¤È¤¬¤Ç¤¤ë¡£(8 MP)", plev);
408 "You can throw a dart of poison, dam. %d (cost 8).", plev);
418 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Þ¥¸¥Ã¥¯¡¦¥ß¥µ¥¤¥ë¤Î¼öʸ¤ò»È¤¨¤ë¡£(2 MP)",
420 sprintf(Dummy, "You can cast a Magic Missile, dam %d (cost 2).",
423 (3 + ((plev-1) / 5)));
429 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤¬¤Ç¤¤ë¡£(%d MP)", 2 * plev, plev);
431 sprintf(Dummy, "You can breathe, dam. %d (cost %d).", 2 * plev, plev);
436 case RACE_MIND_FLAYER:
439 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤ÎÀº¿À¹¶·â¤ò¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(12 MP)", plev);
441 sprintf(Dummy, "You can mind blast your enemies, dam %d (cost 12).", plev);
450 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò»È¤¨¤ë¡£(15 MP)", plev);
452 sprintf(Dummy, "You can cast a Fire Ball, dam. %d (cost 15).", plev);
460 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò»È¤¨¤ë¡£(15 MP)", plev);
462 sprintf(Dummy, "You can cast a Fire Bolt, dam. %d (cost 15).", plev);
471 info[i++] = "¤¢¤Ê¤¿¤Ï d20+30 ¥¿¡¼¥ó¤Î´ÖÈ©¤òÀФËÊѲ½¤µ¤»¤é¤ì¤ë¡£(15 MP)";
473 info[i++] = "You can turn your skin to stone, dur d20+30 (cost 15).";
481 info[i++] = "¤¢¤Ê¤¿¤Ï¼º¤Ã¤¿À¸Ì¿ÎϤò²óÉü¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(30 MP)";
483 info[i++] = "You can restore lost life forces (cost 30).";
491 sprintf(Dummy, "¤¢¤Ê¤¿¤ÏŨ¤«¤é %d-%d HP ¤ÎÀ¸Ì¿ÎϤòµÛ¼ý¤Ç¤¤ë¡£(%d MP)",
493 sprintf(Dummy, "You can steal life from a foe, dam. %d-%d (cost %d).",
496 plev + MAX(1, plev / 10), plev + plev * MAX(1, plev / 10), 1 + (plev / 3));
504 info[i++] = "¤¢¤Ê¤¿¤Ïµã¤¶«¤ó¤ÇŨ¤ò¶²Éݤµ¤»¤ë¤³¤È¤¬¤Ç¤¤ë¡£(3 MP)";
506 info[i++] = "You can wail to terrify your enemies (cost 3).";
515 info[i++] = "¤¢¤Ê¤¿¤ÏŨ¤ò̲¤é¤»¤ëËâË¡¤ÎÊ´¤òÅꤲ¤ë¤³¤È¤¬¤Ç¤¤ë¡£(12 MP)";
517 info[i++] = "You can throw magical dust which induces sleep (cost 12).";
524 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤ÎÃϹö¤«²Ð±ê¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤¬¤Ç¤¤ë¡£(%d MP)", 3 * plev, 10+plev/3);
526 sprintf(Dummy, "You can breathe nether, dam. %d (cost %d).", 3 * plev, 10+plev/3);
534 info[i++] = "¤¢¤Ê¤¿¤Ï d20+30 ¥¿¡¼¥ó¤Î´Ö²£¤Ë¿¤Ó¤ë¤³¤È¤¬¤Ç¤¤ë¡£(15 MP)";
536 info[i++] = "You can expand horizontally, dur d20+30 (cost 15).";
543 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥ì¥¤¥¬¥ó¤ò·â¤Ä¤³¤È¤¬¤Ç¤¤ë¡£(7 MP)", (plev + 1) / 2);
545 sprintf(Dummy, "You can fire a ray gun with damage %d (cost 7).", (plev+1)/2);
549 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Ö¥é¥¹¥¿¡¼¤ò·â¤Ä¤³¤È¤¬¤Ç¤¤ë¡£(13 MP)", plev);
551 sprintf(Dummy, "You can fire a blaster with damage %d (cost 13).", plev);
555 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Ð¥º¡¼¥«¤ò·â¤Ä¤³¤È¤¬¤Ç¤¤ë¡£(26 MP)", plev * 2);
557 sprintf(Dummy, "You can fire a bazooka with damage %d (cost 26).", plev * 2);
561 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Ó¡¼¥à¥¥ã¥Î¥ó¤ò·â¤Ä¤³¤È¤¬¤Ç¤¤ë¡£(40 MP)", plev * 2);
563 sprintf(Dummy, "You can fire a beam cannon with damage %d (cost 40).", plev * 2);
567 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥í¥±¥Ã¥È¤ò·â¤Ä¤³¤È¤¬¤Ç¤¤ë¡£(60 MP)", plev * 5);
569 sprintf(Dummy, "You can fire a rocket with damage %d (cost 60).", plev * 5);
579 switch(p_ptr->pclass)
585 info[i++] = "¤¢¤Ê¤¿¤Ï¥é¥ó¥À¥à¤ÊÊý¸þ¤ËÂФ·¤Æ¿ô²ó¹¶·â¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(75 MP)";
587 info[i++] = "You can attack some random directions at a time (cost 75).";
591 case CLASS_HIGH_MAGE:
592 if (p_ptr->realm1 == REALM_HEX) break;
598 info[i++] = "¤¢¤Ê¤¿¤Ï¥¢¥¤¥Æ¥à¤ÎËâÎϤòµÛ¼ý¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(1 MP)";
600 info[i++] = "You can absorb charges from an item (cost 1).";
605 if (is_good_realm(p_ptr->realm1))
610 info[i++] = "¤¢¤Ê¤¿¤ÏÉð´ï¤ò½ËÊ¡¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(70 MP)";
612 info[i++] = "You can bless a weapon (cost 70).";
621 info[i++] = "¤¢¤Ê¤¿¤Ï¼þ¤ê¤Î¤¹¤Ù¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¹¶·â¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(40 MP)";
623 info[i++] = "You can damages all monsters in sight (cost 40).";
632 info[i++] = "¤¢¤Ê¤¿¤Ï¹¶·â¤·¤Æ¨ºÂ¤Ëƨ¤²¤ë¤³¤È¤¬¤Ç¤¤ë¡£(12 MP)";
634 info[i++] = "You can hit a monster and teleport at a time (cost 12).";
642 info[i++] = "¤¢¤Ê¤¿¤Ï²øʪ¤òÄ´ºº¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(20 MP)";
644 info[i++] = "You can prove monsters (cost 20).";
649 if (is_good_realm(p_ptr->realm1))
654 info[i++] = "¤¢¤Ê¤¿¤ÏÀ»¤Ê¤ëÁä¤òÊü¤Ä¤³¤È¤¬¤Ç¤¤ë¡£(30 MP)";
656 info[i++] = "You can fires a holy spear (cost 30).";
665 info[i++] = "¤¢¤Ê¤¿¤ÏÀ¸Ì¿ÎϤò¸º¾¯¤µ¤»¤ëÁä¤òÊü¤Ä¤³¤È¤¬¤Ç¤¤ë¡£(30 MP)";
667 info[i++] = "You can fires a spear which drains vitality (cost 30).";
672 case CLASS_WARRIOR_MAGE:
676 info[i++] = "¤¢¤Ê¤¿¤Ï£È£Ð¤ò£Í£Ð¤ËÊÑ´¹¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(0 MP)";
678 info[i++] = "You can convert HP to SP (cost 0).";
681 info[i++] = "¤¢¤Ê¤¿¤Ï£Í£Ð¤ò£È£Ð¤ËÊÑ´¹¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(0 MP)";
683 info[i++] = "You can convert SP to HP (cost 0).";
687 case CLASS_CHAOS_WARRIOR:
691 info[i++] = "¤¢¤Ê¤¿¤Ï¼þ°Ï¤Ë²øʪ¤òÏǤ魯¸÷¤òȯÀ¸¤µ¤»¤ë¤³¤È¤¬¤Ç¤¤ë¡£(50 MP)";
693 info[i++] = "You can radiate light which confuses nearby monsters (cost 50).";
701 info[i++] = "¤¢¤Ê¤¿¤Ï¹½¤¨¤ë¤³¤È¤¬¤Ç¤¤ë¡£(0 MP)";
703 info[i++] = "You can assume a posture of special form (cost 0).";
709 info[i++] = "¤¢¤Ê¤¿¤ÏÄ̾ï¤Î2Çܤι¶·â¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤¤ë¡£(30 MP)";
711 info[i++] = "You can perform double attacks in a time (cost 30).";
715 case CLASS_MINDCRAFTER:
716 case CLASS_FORCETRAINER:
720 info[i++] = "¤¢¤Ê¤¿¤ÏÀº¿À¤ò½¸Ã椷¤Æ£Í£Ð¤ò²óÉü¤µ¤»¤ë¤³¤È¤¬¤Ç¤¤ë¡£(0 MP)";
722 info[i++] = "You can concentrate to regenerate your mana (cost 0).";
728 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ì¿¿¤ò»£±Æ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(0 MP)";
730 info[i++] = "You can take a photograph (cost 0).";
735 info[i++] = "¤¢¤Ê¤¿¤Ï¥¢¥¤¥Æ¥à¤ò´°Á´¤Ë´ÕÄꤹ¤ë¤³¤È¤¬¤Ç¤¤ë¡£(20 MP)";
737 info[i++] = "You can *identify* items (cost 20).";
745 info[i++] = "¤¢¤Ê¤¿¤Ï²øʪ¤ÎÆü칶·â¤ò¥À¥á¡¼¥¸2ÇܤǤޤͤ뤳¤È¤¬¤Ç¤¤ë¡£(100 MP)";
747 info[i++] = "You can imitate monster's special attacks with double damage (cost 100).";
751 case CLASS_BEASTMASTER:
753 info[i++] = "¤¢¤Ê¤¿¤Ï1ÂΤÎÀ¸Ì¿¤Î¤¢¤ë¥â¥ó¥¹¥¿¡¼¤ò»ÙÇÛ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(¥ì¥Ù¥ë/4 MP)";
755 info[i++] = "You can dominate a monster (cost level/4).";
760 info[i++] = "¤¢¤Ê¤¿¤Ï»ë³¦Æâ¤ÎÀ¸Ì¿¤Î¤¢¤ë¥â¥ó¥¹¥¿¡¼¤ò»ÙÇÛ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£((¥ì¥Ù¥ë+20)/2 MP)";
762 info[i++] = "You can dominate living monsters in sight (cost (level+20)/4).";
766 case CLASS_MAGIC_EATER:
768 info[i++] = "¤¢¤Ê¤¿¤Ï¾ó/ËâË¡ËÀ/¥í¥Ã¥É¤ÎËâÎϤò¼«Ê¬¤Î¤â¤Î¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
770 info[i++] = "You can absorb a staff, wand or rod itself.";
777 info[i++] = "¤¢¤Ê¤¿¤Ï1¥¿¡¼¥ó¤Ë2²óËâË¡¤ò¾§¤¨¤ë¤³¤È¤¬¤Ç¤¤ë¡£(20 MP)";
779 info[i++] = "You can cast two spells in one time (cost 20).";
786 info[i++] = "¤¢¤Ê¤¿¤ÏÀº¿À¤ò½¸Ã椷¤Æµ¤¹ç¤¤¤òί¤á¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
788 info[i++] = "You can concentrate to regenerate your mana.";
794 info[i++] = "¤¢¤Ê¤¿¤ÏÆüì¤Ê·¿¤Ç¹½¤¨¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
796 info[i++] = "You can assume a posture of special form.";
800 case CLASS_BLUE_MAGE:
802 info[i++] = "¤¢¤Ê¤¿¤ÏÁê¼ê¤Ë»È¤ï¤ì¤¿ËâË¡¤ò³Ø¤Ö¤³¤È¤¬¤Ç¤¤ë¡£";
804 info[i++] = "You can study spells which your enemy casts on you.";
811 info[i++] = "¤¢¤Ê¤¿¤Ï¥â¥ó¥¹¥¿¡¼¤Ë¾è¤Ã¤Æ̵ÍýÌðÍý¥Ú¥Ã¥È¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
813 info[i++] = "You can ride on a hostile monster forcibly to turn it into pet.";
817 case CLASS_BERSERKER:
821 info[i++] = "¤¢¤Ê¤¿¤Ï³¹¤È¥À¥ó¥¸¥ç¥ó¤Î´Ö¤ò¹Ô¤Í褹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
823 info[i++] = "You can travel between town and the depths.";
827 case CLASS_MIRROR_MASTER:
829 info[i++] = "¤¢¤Ê¤¿¤Ï¶À¤òºî¤ê½Ð¤¹¤³¤È¤¬¤Ç¤¤ë¡£(2 MP)";
831 info[i++] = "You can create a Mirror (cost 2).";
834 info[i++] = "¤¢¤Ê¤¿¤Ï¶À¤ò³ä¤ë¤³¤È¤¬¤Ç¤¤ë¡£(0 MP)";
836 info[i++] = "You can break distant Mirrors (cost 0).";
843 info[i++] = "¤¢¤Ê¤¿¤ÏÁÇÁ᤯°ÜÆ°¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
845 info[i++] = "You can walk extremery fast.";
853 if (p_ptr->muta1 & MUT1_SPIT_ACID)
856 info[i++] = "¤¢¤Ê¤¿¤Ï»À¤ò¿á¤¤«¤±¤ë¤³¤È¤¬¤Ç¤¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX1)";
858 info[i++] = "You can spit acid (dam lvl).";
862 if (p_ptr->muta1 & MUT1_BR_FIRE)
865 info[i++] = "¤¢¤Ê¤¿¤Ï±ê¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤¬¤Ç¤¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX2)";
867 info[i++] = "You can breathe fire (dam lvl * 2).";
871 if (p_ptr->muta1 & MUT1_HYPN_GAZE)
874 info[i++] = "¤¢¤Ê¤¿¤ÎâˤߤϺÅ̲¸ú²Ì¤ò¤â¤Ä¡£";
876 info[i++] = "Your gaze is hypnotic.";
880 if (p_ptr->muta1 & MUT1_TELEKINES)
883 info[i++] = "¤¢¤Ê¤¿¤ÏÇ°Æ°ÎϤò¤â¤Ã¤Æ¤¤¤ë¡£";
885 info[i++] = "You are telekinetic.";
889 if (p_ptr->muta1 & MUT1_VTELEPORT)
892 info[i++] = "¤¢¤Ê¤¿¤Ï¼«Ê¬¤Î°Õ»×¤Ç¥Æ¥ì¥Ý¡¼¥È¤Ç¤¤ë¡£";
894 info[i++] = "You can teleport at will.";
898 if (p_ptr->muta1 & MUT1_MIND_BLST)
901 info[i++] = "¤¢¤Ê¤¿¤ÏÀº¿À¹¶·â¤ò¹Ô¤¨¤ë¡£(¥À¥á¡¼¥¸ 3¡Á12d3)";
903 info[i++] = "You can Mind Blast your enemies (3 to 12d3 dam).";
907 if (p_ptr->muta1 & MUT1_RADIATION)
910 info[i++] = "¤¢¤Ê¤¿¤Ï¼«Ê¬¤Î°Õ»×¤Ç¶¯¤¤Êü¼ÍÀþ¤òȯÀ¸¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX2)";
912 info[i++] = "You can emit hard radiation at will (dam lvl * 2).";
916 if (p_ptr->muta1 & MUT1_VAMPIRISM)
919 info[i++] = "¤¢¤Ê¤¿¤ÏµÛ·ìµ´¤Î¤è¤¦¤ËŨ¤«¤éÀ¸Ì¿ÎϤòµÛ¼ý¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX2)";
921 info[i++] = "You can drain life from a foe like a vampire (dam lvl * 2).";
925 if (p_ptr->muta1 & MUT1_SMELL_MET)
928 info[i++] = "¤¢¤Ê¤¿¤Ï¶á¤¯¤Ë¤¢¤ëµ®¶â°¤ò¤«¤®Ê¬¤±¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
930 info[i++] = "You can smell nearby precious metal.";
934 if (p_ptr->muta1 & MUT1_SMELL_MON)
937 info[i++] = "¤¢¤Ê¤¿¤Ï¶á¤¯¤Î¥â¥ó¥¹¥¿¡¼¤Î¸ºß¤ò¤«¤®Ê¬¤±¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
939 info[i++] = "You can smell nearby monsters.";
943 if (p_ptr->muta1 & MUT1_BLINK)
946 info[i++] = "¤¢¤Ê¤¿¤Ïû¤¤µ÷Î¥¤ò¥Æ¥ì¥Ý¡¼¥È¤Ç¤¤ë¡£";
948 info[i++] = "You can teleport yourself short distances.";
952 if (p_ptr->muta1 & MUT1_EAT_ROCK)
955 info[i++] = "¤¢¤Ê¤¿¤Ï¹Å¤¤´ä¤ò¿©¤Ù¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
957 info[i++] = "You can consume solid rock.";
961 if (p_ptr->muta1 & MUT1_SWAP_POS)
964 info[i++] = "¤¢¤Ê¤¿¤Ï¾¤Î¼Ô¤È¾ì½ê¤òÆþ¤ìÂؤï¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
966 info[i++] = "You can switch locations with another being.";
970 if (p_ptr->muta1 & MUT1_SHRIEK)
973 info[i++] = "¤¢¤Ê¤¿¤Ï¿È¤ÎÌÓ¤â¤è¤À¤Ä¶«¤ÓÀ¼¤òȯ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX2)";
975 info[i++] = "You can emit a horrible shriek (dam 2 * lvl).";
979 if (p_ptr->muta1 & MUT1_ILLUMINE)
982 info[i++] = "¤¢¤Ê¤¿¤ÏÌÀ¤ë¤¤¸÷¤òÊü¤Ä¤³¤È¤¬¤Ç¤¤ë¡£";
984 info[i++] = "You can emit bright light.";
988 if (p_ptr->muta1 & MUT1_DET_CURSE)
991 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°¤ÊËâË¡¤Î´í¸±¤ò´¶¤¸¤È¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
993 info[i++] = "You can feel the danger of evil magic.";
997 if (p_ptr->muta1 & MUT1_BERSERK)
1000 info[i++] = "¤¢¤Ê¤¿¤Ï¼«Ê¬¤Î°Õ»×¤Ç¶¸ÍðÀïÆ®¾õÂ֤ˤʤ뤳¤È¤¬¤Ç¤¤ë¡£";
1002 info[i++] = "You can drive yourself into a berserk frenzy.";
1006 if (p_ptr->muta1 & MUT1_POLYMORPH)
1009 info[i++] = "¤¢¤Ê¤¿¤Ï¼«Ê¬¤Î°Õ»Ö¤ÇÊѲ½¤Ç¤¤ë¡£";
1011 info[i++] = "You can polymorph yourself at will.";
1015 if (p_ptr->muta1 & MUT1_MIDAS_TCH)
1018 info[i++] = "¤¢¤Ê¤¿¤ÏÄ̾異¥¤¥Æ¥à¤ò¶â¤ËÊѤ¨¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
1020 info[i++] = "You can turn ordinary items to gold.";
1024 if (p_ptr->muta1 & MUT1_GROW_MOLD)
1027 info[i++] = "¤¢¤Ê¤¿¤Ï¼þ°Ï¤Ë¥¥Î¥³¤òÀ¸¤ä¤¹¤³¤È¤¬¤Ç¤¤ë¡£";
1029 info[i++] = "You can cause mold to grow near you.";
1033 if (p_ptr->muta1 & MUT1_RESIST)
1036 info[i++] = "¤¢¤Ê¤¿¤Ï¸µÁǤι¶·â¤ËÂФ·¤Æ¿È¤ò¹Å¤¯¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
1038 info[i++] = "You can harden yourself to the ravages of the elements.";
1042 if (p_ptr->muta1 & MUT1_EARTHQUAKE)
1045 info[i++] = "¤¢¤Ê¤¿¤Ï¼þ°Ï¤Î¥À¥ó¥¸¥ç¥ó¤òÊø²õ¤µ¤»¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
1047 info[i++] = "You can bring down the dungeon around your ears.";
1051 if (p_ptr->muta1 & MUT1_EAT_MAGIC)
1054 info[i++] = "¤¢¤Ê¤¿¤ÏËâË¡¤Î¥¨¥Í¥ë¥®¡¼¤ò¼«Ê¬¤Îʪ¤È¤·¤Æ»ÈÍѤǤ¤ë¡£";
1056 info[i++] = "You can consume magic energy for your own use.";
1060 if (p_ptr->muta1 & MUT1_WEIGH_MAG)
1063 info[i++] = "¤¢¤Ê¤¿¤Ï¼«Ê¬¤Ë±Æ¶Á¤òÍ¿¤¨¤ëËâË¡¤ÎÎϤò´¶¤¸¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
1065 info[i++] = "You can feel the strength of the magics affecting you.";
1069 if (p_ptr->muta1 & MUT1_STERILITY)
1072 info[i++] = "¤¢¤Ê¤¿¤Ï½¸ÃÄŪÀ¸¿£ÉÔǽ¤òµ¯¤³¤¹¤³¤È¤¬¤Ç¤¤ë¡£";
1074 info[i++] = "You can cause mass impotence.";
1078 if (p_ptr->muta1 & MUT1_PANIC_HIT)
1081 info[i++] = "¤¢¤Ê¤¿¤Ï¹¶·â¤·¤¿¸å¿È¤ò¼é¤ë¤¿¤áƨ¤²¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
1083 info[i++] = "You can run for your life after hitting something.";
1087 if (p_ptr->muta1 & MUT1_DAZZLE)
1090 info[i++] = "¤¢¤Ê¤¿¤Ïº®Íð¤ÈÌÕÌܤò°ú¤µ¯¤³¤¹Êü¼Íǽ¤òȯÀ¸¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£ ";
1092 info[i++] = "You can emit confusing, blinding radiation.";
1096 if (p_ptr->muta1 & MUT1_LASER_EYE)
1099 info[i++] = "¤¢¤Ê¤¿¤ÏÌܤ«¤é¥ì¡¼¥¶¡¼¸÷Àþ¤òȯ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX2)";
1101 info[i++] = "Your eyes can fire laser beams (dam 2 * lvl).";
1105 if (p_ptr->muta1 & MUT1_RECALL)
1108 info[i++] = "¤¢¤Ê¤¿¤Ï³¹¤È¥À¥ó¥¸¥ç¥ó¤Î´Ö¤ò¹Ô¤Í褹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
1110 info[i++] = "You can travel between town and the depths.";
1114 if (p_ptr->muta1 & MUT1_BANISH)
1117 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°¤Ê¥â¥ó¥¹¥¿¡¼¤òÃϹö¤ËÍî¤È¤¹¤³¤È¤¬¤Ç¤¤ë¡£";
1119 info[i++] = "You can send evil creatures directly to Hell.";
1123 if (p_ptr->muta1 & MUT1_COLD_TOUCH)
1126 info[i++] = "¤¢¤Ê¤¿¤ÏŨ¤ò¿¨¤Ã¤ÆÅà¤é¤»¤ë¤³¤È¤¬¤Ç¤¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX3)";
1128 info[i++] = "You can freeze things with a touch (dam 3 * lvl).";
1132 if (p_ptr->muta1 & MUT1_LAUNCHER)
1135 info[i++] = "¤¢¤Ê¤¿¤Ï¥¢¥¤¥Æ¥à¤òÎ϶¯¤¯Åꤲ¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
1137 info[i++] = "You can hurl objects with great force.";
1145 if (p_ptr->muta2 & MUT2_BERS_RAGE)
1148 info[i++] = "¤¢¤Ê¤¿¤Ï¶¸Àï»Î²½¤Îȯºî¤òµ¯¤³¤¹¡£";
1150 info[i++] = "You are subject to berserker fits.";
1154 if (p_ptr->muta2 & MUT2_COWARDICE)
1157 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹²²É¤ˤʤ롣";
1159 info[i++] = "You are subject to cowardice.";
1163 if (p_ptr->muta2 & MUT2_RTELEPORT)
1166 info[i++] = "¤¢¤Ê¤¿¤Ï¥é¥ó¥À¥à¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ë¡£";
1168 info[i++] = "You are teleporting randomly.";
1172 if (p_ptr->muta2 & MUT2_ALCOHOL)
1175 info[i++] = "¤¢¤Ê¤¿¤ÎÂΤϥ¢¥ë¥³¡¼¥ë¤òʬÈ礹¤ë¡£";
1177 info[i++] = "Your body produces alcohol.";
1181 if (p_ptr->muta2 & MUT2_HALLU)
1184 info[i++] = "¤¢¤Ê¤¿¤Ï¸¸³Ð¤ò°ú¤µ¯¤³¤¹Àº¿ÀºøÍð¤Ë¿¯¤µ¤ì¤Æ¤¤¤ë¡£";
1186 info[i++] = "You have a hallucinatory insanity.";
1190 if (p_ptr->muta2 & MUT2_FLATULENT)
1193 info[i++] = "¤¢¤Ê¤¿¤ÏÀ©¸æ¤Ç¤¤Ê¤¤¶¯Îõ¤ÊÕû¤ò¤³¤¯¡£";
1195 info[i++] = "You are subject to uncontrollable flatulence.";
1199 if (p_ptr->muta2 & MUT2_PROD_MANA)
1202 info[i++] = "¤¢¤Ê¤¿¤ÏÀ©¸æÉÔǽ¤ÊËâË¡¤Î¥¨¥Í¥ë¥®¡¼¤òȯ¤·¤Æ¤¤¤ë¡£";
1204 info[i++] = "You are producing magical energy uncontrollably.";
1208 if (p_ptr->muta2 & MUT2_ATT_DEMON)
1211 info[i++] = "¤¢¤Ê¤¿¤Ï¥Ç¡¼¥â¥ó¤ò°ú¤¤Ä¤±¤ë¡£";
1213 info[i++] = "You attract demons.";
1217 if (p_ptr->muta2 & MUT2_SCOR_TAIL)
1220 info[i++] = "¤¢¤Ê¤¿¤Ï¥µ¥½¥ê¤Î¿¬Èø¤¬À¸¤¨¤Æ¤¤¤ë¡£(ÆÇ¡¢¥À¥á¡¼¥¸ 3d7)";
1222 info[i++] = "You have a scorpion tail (poison, 3d7).";
1226 if (p_ptr->muta2 & MUT2_HORNS)
1229 info[i++] = "¤¢¤Ê¤¿¤Ï³Ñ¤¬À¸¤¨¤Æ¤¤¤ë¡£(¥À¥á¡¼¥¸ 2d6)";
1231 info[i++] = "You have horns (dam. 2d6).";
1235 if (p_ptr->muta2 & MUT2_BEAK)
1238 info[i++] = "¤¢¤Ê¤¿¤Ï¥¯¥Á¥Ð¥·¤¬À¸¤¨¤Æ¤¤¤ë¡£(¥À¥á¡¼¥¸ 2d4)";
1240 info[i++] = "You have a beak (dam. 2d4).";
1244 if (p_ptr->muta2 & MUT2_SPEED_FLUX)
1247 info[i++] = "¤¢¤Ê¤¿¤Ï¥é¥ó¥À¥à¤ËÁ᤯ư¤¤¤¿¤êÃÙ¤¯Æ°¤¤¤¿¤ê¤¹¤ë¡£";
1249 info[i++] = "You move faster or slower randomly.";
1253 if (p_ptr->muta2 & MUT2_BANISH_ALL)
1256 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹¶á¤¯¤Î¥â¥ó¥¹¥¿¡¼¤ò¾ÃÌǤµ¤»¤ë¡£";
1258 info[i++] = "You sometimes cause nearby creatures to vanish.";
1262 if (p_ptr->muta2 & MUT2_EAT_LIGHT)
1265 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹¼þ°Ï¤Î¸÷¤òµÛ¼ý¤·¤Æ±ÉÍܤˤ¹¤ë¡£";
1267 info[i++] = "You sometimes feed off of the light around you.";
1271 if (p_ptr->muta2 & MUT2_TRUNK)
1274 info[i++] = "¤¢¤Ê¤¿¤Ï¾Ý¤Î¤è¤¦¤ÊÉ¡¤ò»ý¤Ã¤Æ¤¤¤ë¡£(¥À¥á¡¼¥¸ 1d4)";
1276 info[i++] = "You have an elephantine trunk (dam 1d4).";
1280 if (p_ptr->muta2 & MUT2_ATT_ANIMAL)
1283 info[i++] = "¤¢¤Ê¤¿¤Ïưʪ¤ò°ú¤¤Ä¤±¤ë¡£";
1285 info[i++] = "You attract animals.";
1289 if (p_ptr->muta2 & MUT2_TENTACLES)
1292 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°¤Ê¿¨¼ê¤ò»ý¤Ã¤Æ¤¤¤ë¡£(¥À¥á¡¼¥¸ 2d5)";
1294 info[i++] = "You have evil looking tentacles (dam 2d5).";
1298 if (p_ptr->muta2 & MUT2_RAW_CHAOS)
1301 info[i++] = "¤¢¤Ê¤¿¤Ï¤·¤Ð¤·¤Ð½ã¥«¥ª¥¹¤ËÊñ¤Þ¤ì¤ë¡£";
1303 info[i++] = "You occasionally are surrounded with raw chaos.";
1307 if (p_ptr->muta2 & MUT2_NORMALITY)
1310 info[i++] = "¤¢¤Ê¤¿¤ÏÊÑ°Û¤·¤Æ¤¤¤¿¤¬¡¢²óÉü¤·¤Æ¤¤Æ¤¤¤ë¡£";
1312 info[i++] = "You may be mutated, but you're recovering.";
1316 if (p_ptr->muta2 & MUT2_WRAITH)
1319 info[i++] = "¤¢¤Ê¤¿¤ÎÆùÂΤÏÍ©Â⽤·¤¿¤ê¼ÂÂ⽤·¤¿¤ê¤¹¤ë¡£";
1321 info[i++] = "You fade in and out of physical reality.";
1325 if (p_ptr->muta2 & MUT2_POLY_WOUND)
1328 info[i++] = "¤¢¤Ê¤¿¤Î·ò¹¯¤Ï¥«¥ª¥¹¤ÎÎϤ˱ƶÁ¤ò¼õ¤±¤ë¡£";
1330 info[i++] = "Your health is subject to chaotic forces.";
1334 if (p_ptr->muta2 & MUT2_WASTING)
1337 info[i++] = "¤¢¤Ê¤¿¤Ï¿ê¼å¤¹¤ë¶²¤í¤·¤¤Éµ¤¤Ë¤«¤«¤Ã¤Æ¤¤¤ë¡£";
1339 info[i++] = "You have a horrible wasting disease.";
1343 if (p_ptr->muta2 & MUT2_ATT_DRAGON)
1346 info[i++] = "¤¢¤Ê¤¿¤Ï¥É¥é¥´¥ó¤ò°ú¤¤Ä¤±¤ë¡£";
1348 info[i++] = "You attract dragons.";
1352 if (p_ptr->muta2 & MUT2_WEIRD_MIND)
1355 info[i++] = "¤¢¤Ê¤¿¤ÎÀº¿À¤Ï¥é¥ó¥À¥à¤Ë³ÈÂ礷¤¿¤ê½Ì¾®¤·¤¿¤ê¤·¤Æ¤¤¤ë¡£";
1357 info[i++] = "Your mind randomly expands and contracts.";
1361 if (p_ptr->muta2 & MUT2_NAUSEA)
1364 info[i++] = "¤¢¤Ê¤¿¤Î°ß¤ÏÈó¾ï¤ËÍî¤ÁÃ夤¬¤Ê¤¤¡£";
1366 info[i++] = "You have a seriously upset stomach.";
1370 if (p_ptr->muta2 & MUT2_CHAOS_GIFT)
1373 info[i++] = "¤¢¤Ê¤¿¤Ï¥«¥ª¥¹¤Î¼é¸î°Ë⤫¤éË«Èþ¤ò¤¦¤±¤È¤ë¡£";
1375 info[i++] = "Chaos deities give you gifts.";
1379 if (p_ptr->muta2 & MUT2_WALK_SHAD)
1382 info[i++] = "¤¢¤Ê¤¿¤Ï¤·¤Ð¤·¤Ð¾¤Î¡Ö±Æ¡×¤Ë̤¤¹þ¤à¡£";
1384 info[i++] = "You occasionally stumble into other shadows.";
1388 if (p_ptr->muta2 & MUT2_WARNING)
1391 info[i++] = "¤¢¤Ê¤¿¤ÏŨ¤Ë´Ø¤¹¤ë·Ù¹ð¤ò´¶¤¸¤ë¡£";
1393 info[i++] = "You receive warnings about your foes.";
1397 if (p_ptr->muta2 & MUT2_INVULN)
1400 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹É餱ÃΤ餺¤Êµ¤Ê¬¤Ë¤Ê¤ë¡£";
1402 info[i++] = "You occasionally feel invincible.";
1406 if (p_ptr->muta2 & MUT2_SP_TO_HP)
1409 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹·ì¤¬¶ÚÆù¤Ë¤É¤Ã¤Èή¤ì¤ë¡£";
1411 info[i++] = "Your blood sometimes rushes to your muscles.";
1415 if (p_ptr->muta2 & MUT2_HP_TO_SP)
1418 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹Æ¬¤Ë·ì¤¬¤É¤Ã¤Èή¤ì¤ë¡£";
1420 info[i++] = "Your blood sometimes rushes to your head.";
1424 if (p_ptr->muta2 & MUT2_DISARM)
1427 info[i++] = "¤¢¤Ê¤¿¤Ï¤è¤¯¤Ä¤Þ¤Å¤¤¤Æʪ¤òÍî¤È¤¹¡£";
1429 info[i++] = "You occasionally stumble and drop things.";
1437 if (p_ptr->muta3 & MUT3_HYPER_STR)
1440 info[i++] = "¤¢¤Ê¤¿¤ÏĶ¿ÍŪ¤Ë¶¯¤¤¡£(ÏÓÎÏ+4)";
1442 info[i++] = "You are superhumanly strong (+4 STR).";
1446 if (p_ptr->muta3 & MUT3_PUNY)
1449 info[i++] = "¤¢¤Ê¤¿¤Ïµõ¼å¤À¡£(ÏÓÎÏ-4)";
1451 info[i++] = "You are puny (-4 STR).";
1455 if (p_ptr->muta3 & MUT3_HYPER_INT)
1458 info[i++] = "¤¢¤Ê¤¿¤ÎǾ¤ÏÀ¸ÂÎ¥³¥ó¥Ô¥å¡¼¥¿¤À¡£(ÃÎǽ¡õ¸¤µ+4)";
1460 info[i++] = "Your brain is a living computer (+4 INT/WIS).";
1464 if (p_ptr->muta3 & MUT3_MORONIC)
1467 info[i++] = "¤¢¤Ê¤¿¤ÏÀº¿ÀÇö¼å¤À¡£(ÃÎǽ¡õ¸¤µ-4)";
1469 info[i++] = "You are moronic (-4 INT/WIS).";
1473 if (p_ptr->muta3 & MUT3_RESILIENT)
1476 info[i++] = "¤¢¤Ê¤¿¤ÏÈó¾ï¤Ë¥¿¥Õ¤À¡£(Âѵ×+4)";
1478 info[i++] = "You are very resilient (+4 CON).";
1482 if (p_ptr->muta3 & MUT3_XTRA_FAT)
1485 info[i++] = "¤¢¤Ê¤¿¤Ï¶Ëü¤ËÂÀ¤Ã¤Æ¤¤¤ë¡£(Âѵ×+2,¥¹¥Ô¡¼¥É-2)";
1487 info[i++] = "You are extremely fat (+2 CON, -2 speed).";
1491 if (p_ptr->muta3 & MUT3_ALBINO)
1494 info[i++] = "¤¢¤Ê¤¿¤Ï¥¢¥ë¥Ó¥Î¤À¡£(Âѵ×-4)";
1496 info[i++] = "You are albino (-4 CON).";
1500 if (p_ptr->muta3 & MUT3_FLESH_ROT)
1503 info[i++] = "¤¢¤Ê¤¿¤ÎÆùÂΤÏÉåÇÔ¤·¤Æ¤¤¤ë¡£(Âѵ×-2,Ì¥ÎÏ-1)";
1505 info[i++] = "Your flesh is rotting (-2 CON, -1 CHR).";
1509 if (p_ptr->muta3 & MUT3_SILLY_VOI)
1512 info[i++] = "¤¢¤Ê¤¿¤ÎÀ¼¤Ï´ÖÈ´¤±¤Ê¥¡¼¥¡¼À¼¤À¡£(Ì¥ÎÏ-4)";
1514 info[i++] = "Your voice is a silly squeak (-4 CHR).";
1518 if (p_ptr->muta3 & MUT3_BLANK_FAC)
1521 info[i++] = "¤¢¤Ê¤¿¤Ï¤Î¤Ã¤Ú¤é¤Ü¤¦¤À¡£(Ì¥ÎÏ-1)";
1523 info[i++] = "Your face is featureless (-1 CHR).";
1527 if (p_ptr->muta3 & MUT3_ILL_NORM)
1530 info[i++] = "¤¢¤Ê¤¿¤Ï¸¸±Æ¤Ëʤ¤ï¤ì¤Æ¤¤¤ë¡£";
1532 info[i++] = "Your appearance is masked with illusion.";
1536 if (p_ptr->muta3 & MUT3_XTRA_EYES)
1539 info[i++] = "¤¢¤Ê¤¿¤Ï;ʬ¤ËÆó¤Ä¤ÎÌܤò»ý¤Ã¤Æ¤¤¤ë¡£(õº÷+15)";
1541 info[i++] = "You have an extra pair of eyes (+15 search).";
1545 if (p_ptr->muta3 & MUT3_MAGIC_RES)
1548 info[i++] = "¤¢¤Ê¤¿¤ÏËâË¡¤Ø¤ÎÂÑÀ¤ò¤â¤Ã¤Æ¤¤¤ë¡£";
1550 info[i++] = "You are resistant to magic.";
1554 if (p_ptr->muta3 & MUT3_XTRA_NOIS)
1557 info[i++] = "¤¢¤Ê¤¿¤ÏÊѤʲ»¤òȯ¤·¤Æ¤¤¤ë¡£(±£Ì©-3)";
1559 info[i++] = "You make a lot of strange noise (-3 stealth).";
1563 if (p_ptr->muta3 & MUT3_INFRAVIS)
1566 info[i++] = "¤¢¤Ê¤¿¤ÏÁÇÀ²¤é¤·¤¤ÀÖ³°Àþ»ëÎϤò»ý¤Ã¤Æ¤¤¤ë¡£(+3)";
1568 info[i++] = "You have remarkable infravision (+3).";
1572 if (p_ptr->muta3 & MUT3_XTRA_LEGS)
1575 info[i++] = "¤¢¤Ê¤¿¤Ï;ʬ¤ËÆóËܤΤ¬À¸¤¨¤Æ¤¤¤ë¡£(²Ã®+3)";
1577 info[i++] = "You have an extra pair of legs (+3 speed).";
1581 if (p_ptr->muta3 & MUT3_SHORT_LEG)
1584 info[i++] = "¤¢¤Ê¤¿¤Î¤Ïû¤¤Æ͵¯¤À¡£(²Ã®-3)";
1586 info[i++] = "Your legs are short stubs (-3 speed).";
1590 if (p_ptr->muta3 & MUT3_ELEC_TOUC)
1593 info[i++] = "¤¢¤Ê¤¿¤Î·ì´É¤Ë¤ÏÅÅή¤¬Î®¤ì¤Æ¤¤¤ë¡£";
1595 info[i++] = "Electricity is running through your veins.";
1599 if (p_ptr->muta3 & MUT3_FIRE_BODY)
1602 info[i++] = "¤¢¤Ê¤¿¤ÎÂΤϱê¤Ë¤Ä¤Ä¤Þ¤ì¤Æ¤¤¤ë¡£";
1604 info[i++] = "Your body is enveloped in flames.";
1607 if (p_ptr->muta3 & MUT3_WART_SKIN)
1610 info[i++] = "¤¢¤Ê¤¿¤ÎÈ©¤Ï¥¤¥Ü¤ËÈï¤ï¤ì¤Æ¤¤¤ë¡£(Ì¥ÎÏ-2, AC+5)";
1612 info[i++] = "Your skin is covered with warts (-2 CHR, +5 AC).";
1616 if (p_ptr->muta3 & MUT3_SCALES)
1619 info[i++] = "¤¢¤Ê¤¿¤ÎÈ©¤ÏÎڤˤʤäƤ¤¤ë¡£(Ì¥ÎÏ-1, AC+10)";
1621 info[i++] = "Your skin has turned into scales (-1 CHR, +10 AC).";
1625 if (p_ptr->muta3 & MUT3_IRON_SKIN)
1628 info[i++] = "¤¢¤Ê¤¿¤ÎÈ©¤ÏÅ´¤Ç¤Ç¤¤Æ¤¤¤ë¡£(´ïÍÑ-1, AC+25)";
1630 info[i++] = "Your skin is made of steel (-1 DEX, +25 AC).";
1634 if (p_ptr->muta3 & MUT3_WINGS)
1637 info[i++] = "¤¢¤Ê¤¿¤Ï±©¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
1639 info[i++] = "You have wings.";
1643 if (p_ptr->muta3 & MUT3_FEARLESS)
1647 if (p_ptr->muta3 & MUT3_REGEN)
1651 if (p_ptr->muta3 & MUT3_ESP)
1655 if (p_ptr->muta3 & MUT3_LIMBER)
1658 info[i++] = "¤¢¤Ê¤¿¤ÎÂΤÏÈó¾ï¤Ë¤·¤Ê¤ä¤«¤À¡£(´ïÍÑ+3)";
1660 info[i++] = "Your body is very limber (+3 DEX).";
1664 if (p_ptr->muta3 & MUT3_ARTHRITIS)
1667 info[i++] = "¤¢¤Ê¤¿¤Ï¤¤¤Ä¤â´ØÀá¤ËÄˤߤò´¶¤¸¤Æ¤¤¤ë¡£(´ïÍÑ-3)";
1669 info[i++] = "Your joints ache constantly (-3 DEX).";
1673 if (p_ptr->muta3 & MUT3_VULN_ELEM)
1676 info[i++] = "¤¢¤Ê¤¿¤Ï¸µÁǤι¶·â¤Ë¼å¤¤¡£";
1678 info[i++] = "You are susceptible to damage from the elements.";
1682 if (p_ptr->muta3 & MUT3_MOTION)
1685 info[i++] = "¤¢¤Ê¤¿¤ÎÆ°ºî¤ÏÀµ³Î¤ÇÎ϶¯¤¤¡£(±£Ì©+1)";
1687 info[i++] = "Your movements are precise and forceful (+1 STL).";
1691 if (p_ptr->muta3 & MUT3_GOOD_LUCK)
1694 info[i++] = "¤¢¤Ê¤¿¤ÏÇò¤¤¥ª¡¼¥é¤Ë¤Ä¤Ä¤Þ¤ì¤Æ¤¤¤ë¡£";
1696 info[i++] = "There is a white aura surrounding you.";
1699 if (p_ptr->muta3 & MUT3_BAD_LUCK)
1702 info[i++] = "¤¢¤Ê¤¿¤Ï¹õ¤¤¥ª¡¼¥é¤Ë¤Ä¤Ä¤Þ¤ì¤Æ¤¤¤ë¡£";
1704 info[i++] = "There is a black aura surrounding you.";
1712 info[i++] = "¤¢¤Ê¤¿¤ÏÌܤ¬¸«¤¨¤Ê¤¤¡£";
1714 info[i++] = "You cannot see.";
1718 if (p_ptr->confused)
1721 info[i++] = "¤¢¤Ê¤¿¤Ïº®Í𤷤Ƥ¤¤ë¡£";
1723 info[i++] = "You are confused.";
1730 info[i++] = "¤¢¤Ê¤¿¤Ï¶²Éݤ˿¯¤µ¤ì¤Æ¤¤¤ë¡£";
1732 info[i++] = "You are terrified.";
1739 info[i++] = "¤¢¤Ê¤¿¤Ï½Ð·ì¤·¤Æ¤¤¤ë¡£";
1741 info[i++] = "You are bleeding.";
1748 info[i++] = "¤¢¤Ê¤¿¤Ï¤â¤¦¤í¤¦¤È¤·¤Æ¤¤¤ë¡£";
1750 info[i++] = "You are stunned.";
1754 if (p_ptr->poisoned)
1757 info[i++] = "¤¢¤Ê¤¿¤ÏÆǤ˿¯¤µ¤ì¤Æ¤¤¤ë¡£";
1759 info[i++] = "You are poisoned.";
1766 info[i++] = "¤¢¤Ê¤¿¤Ï¸¸³Ð¤ò¸«¤Æ¤¤¤ë¡£";
1768 info[i++] = "You are hallucinating.";
1772 if (p_ptr->cursed & TRC_TY_CURSE)
1774 info[i++] = _("¤¢¤Ê¤¿¤Ï¼Ù°¤Ê±åÇ°¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", "You carry an ancient foul curse.");
1776 if (p_ptr->cursed & TRC_AGGRAVATE)
1778 info[i++] = _("¤¢¤Ê¤¿¤Ï¥â¥ó¥¹¥¿¡¼¤òÅܤ餻¤Æ¤¤¤ë¡£", "You aggravate monsters.");
1780 if (p_ptr->cursed & TRC_DRAIN_EXP)
1782 info[i++] = _("¤¢¤Ê¤¿¤Ï·Ð¸³ÃͤòµÛ¤ï¤ì¤Æ¤¤¤ë¡£", "You are drained.");
1784 if (p_ptr->cursed & TRC_SLOW_REGEN)
1786 info[i++] = _("¤¢¤Ê¤¿¤Î²óÉüÎϤÏÈó¾ï¤ËÃÙ¤¤¡£", "You regenerate slowly.");
1788 if (p_ptr->cursed & TRC_ADD_L_CURSE)
1790 info[i++] = _("¤¢¤Ê¤¿¤Î¼å¤¤¼ö¤¤¤ÏÁý¤¨¤ë¡£","Your weak curses multiply."); /* »ÃÄêŪ -- henkma */
1792 if (p_ptr->cursed & TRC_ADD_H_CURSE)
1794 info[i++] = _("¤¢¤Ê¤¿¤Î¶¯¤¤¼ö¤¤¤ÏÁý¤¨¤ë¡£","Your heavy curses multiply."); /* »ÃÄêŪ -- henkma */
1796 if (p_ptr->cursed & TRC_CALL_ANIMAL)
1798 info[i++] = _("¤¢¤Ê¤¿¤Ïưʪ¤ËÁÀ¤ï¤ì¤Æ¤¤¤ë¡£", "You attract animals.");
1800 if (p_ptr->cursed & TRC_CALL_DEMON)
1802 info[i++] = _("¤¢¤Ê¤¿¤Ï°Ëâ¤ËÁÀ¤ï¤ì¤Æ¤¤¤ë¡£", "You attract demons.");
1804 if (p_ptr->cursed & TRC_CALL_DRAGON)
1806 info[i++] = _("¤¢¤Ê¤¿¤Ï¥É¥é¥´¥ó¤ËÁÀ¤ï¤ì¤Æ¤¤¤ë¡£", "You attract dragons.");
1808 if (p_ptr->cursed & TRC_COWARDICE)
1810 info[i++] = _("¤¢¤Ê¤¿¤Ï»þ¡¹²²É¤ˤʤ롣", "You are subject to cowardice.");
1812 if (p_ptr->cursed & TRC_TELEPORT)
1814 info[i++] = _("¤¢¤Ê¤¿¤Î°ÌÃ֤ϤҤ¸¤ç¤¦¤ËÉÔ°ÂÄê¤À¡£", "Your position is very uncertain.");
1816 if (p_ptr->cursed & TRC_LOW_MELEE)
1818 info[i++] = _("¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¹¶·â¤ò³°¤·¤ä¤¹¤¤¡£", "Your weapon causes you to miss blows.");
1820 if (p_ptr->cursed & TRC_LOW_AC)
1822 info[i++] = _("¤¢¤Ê¤¿¤Ï¹¶·â¤ò¼õ¤±¤ä¤¹¤¤¡£", "You are subject to be hit.");
1824 if (p_ptr->cursed & TRC_LOW_MAGIC)
1826 info[i++] = _("¤¢¤Ê¤¿¤ÏËâË¡¤ò¼ºÇÔ¤·¤ä¤¹¤¤¡£", "You are subject to fail spellcasting.");
1828 if (p_ptr->cursed & TRC_FAST_DIGEST)
1830 info[i++] = _("¤¢¤Ê¤¿¤Ï¤¹¤°¤ªÊ¢¤¬¤Ø¤ë¡£", "You have a good appetite.");
1832 if (p_ptr->cursed & TRC_DRAIN_HP)
1834 info[i++] = _("¤¢¤Ê¤¿¤ÏÂÎÎϤòµÛ¤ï¤ì¤Æ¤¤¤ë¡£", "You are drained.");
1836 if (p_ptr->cursed & TRC_DRAIN_MANA)
1838 info[i++] = _("¤¢¤Ê¤¿¤ÏËâÎϤòµÛ¤ï¤ì¤Æ¤¤¤ë¡£", "You brain is drained.");
1842 info[i++] = _("¤¢¤Ê¤¿¤Ï¹â·é¤µ¤ò´¶¤¸¤Æ¤¤¤ë¡£", "You feel rightous.");
1846 info[i++] = _("¤¢¤Ê¤¿¤Ï¥Ò¡¼¥í¡¼µ¤Ê¬¤À¡£", "You feel heroic.");
1850 info[i++] = _("¤¢¤Ê¤¿¤ÏÀïÆ®¶¸¤À¡£", "You are in a battle rage.");
1852 if (p_ptr->protevil)
1854 info[i++] = _("¤¢¤Ê¤¿¤Ï¼Ù°¤Ê¤ë¸ºß¤«¤é¼é¤é¤ì¤Æ¤¤¤ë¡£", "You are protected from evil.");
1858 info[i++] = _("¤¢¤Ê¤¿¤Ï¿ÀÈë¤Î¥·¡¼¥ë¥É¤Ç¼é¤é¤ì¤Æ¤¤¤ë¡£", "You are protected by a mystic shield.");
1862 info[i++] = _("¤¢¤Ê¤¿¤Ï¸½ºß½ý¤Ä¤«¤Ê¤¤¡£", "You are temporarily invulnerable.");
1864 if (p_ptr->wraith_form)
1866 info[i++] = _("¤¢¤Ê¤¿¤Ï°ì»þŪ¤ËÍ©Â⽤·¤Æ¤¤¤ë¡£", "You are temporarily incorporeal.");
1868 if (p_ptr->special_attack & ATTACK_CONFUSE)
1870 info[i++] = _("¤¢¤Ê¤¿¤Î¼ê¤ÏÀÖ¤¯µ±¤¤¤Æ¤¤¤ë¡£", "Your hands are glowing dull red.");
1872 if (p_ptr->special_attack & ATTACK_FIRE)
1874 info[i++] = _("¤¢¤Ê¤¿¤Î¼ê¤Ï²Ð±ê¤Ëʤ¤ï¤ì¤Æ¤¤¤ë¡£", "You can strike the enemy with flame.");
1876 if (p_ptr->special_attack & ATTACK_COLD)
1878 info[i++] = _("¤¢¤Ê¤¿¤Î¼ê¤ÏÎ䵤¤Ëʤ¤ï¤ì¤Æ¤¤¤ë¡£", "You can strike the enemy with cold.");
1880 if (p_ptr->special_attack & ATTACK_ACID)
1882 info[i++] = _("¤¢¤Ê¤¿¤Î¼ê¤Ï»À¤Ëʤ¤ï¤ì¤Æ¤¤¤ë¡£", "You can strike the enemy with acid.");
1884 if (p_ptr->special_attack & ATTACK_ELEC)
1886 info[i++] = _("¤¢¤Ê¤¿¤Î¼ê¤ÏÅÅ·â¤Ëʤ¤ï¤ì¤Æ¤¤¤ë¡£", "You can strike the enemy with electoric shock.");
1888 if (p_ptr->special_attack & ATTACK_POIS)
1890 info[i++] = _("¤¢¤Ê¤¿¤Î¼ê¤ÏÆǤËʤ¤ï¤ì¤Æ¤¤¤ë¡£", "You can strike the enemy with poison.");
1892 switch (p_ptr->action)
1895 info[i++] = _("¤¢¤Ê¤¿¤Ï¤Ò¤¸¤ç¤¦¤ËÃí°Õ¿¼¤¯¼þ°Ï¤ò¸«ÅϤ·¤Æ¤¤¤ë¡£", "You are looking around very carefully.");
1898 if (p_ptr->new_spells)
1900 info[i++] = _("¤¢¤Ê¤¿¤Ï¼öʸ¤äµ§¤ê¤ò³Ø¤Ö¤³¤È¤¬¤Ç¤¤ë¡£", "You can learn some spells/prayers.");
1902 if (p_ptr->word_recall)
1904 info[i++] = _("¤¢¤Ê¤¿¤Ï¤¹¤°¤Ëµ¢´Ô¤¹¤ë¤À¤í¤¦¡£", "You will soon be recalled.");
1906 if (p_ptr->alter_reality)
1908 info[i++] = _("¤¢¤Ê¤¿¤Ï¤¹¤°¤Ë¤³¤ÎÀ¤³¦¤òÎ¥¤ì¤ë¤À¤í¤¦¡£", "You will soon be altered.");
1910 if (p_ptr->see_infra)
1912 info[i++] = _("¤¢¤Ê¤¿¤ÎÆ·¤ÏÀÖ³°Àþ¤ËÉÒ´¶¤Ç¤¢¤ë¡£", "Your eyes are sensitive to infrared light.");
1916 info[i++] = _("¤¢¤Ê¤¿¤ÏÆ©ÌÀ¤Ê¥â¥ó¥¹¥¿¡¼¤ò¸«¤ë¤³¤È¤¬¤Ç¤¤ë¡£", "You can see invisible creatures.");
1918 if (p_ptr->levitation)
1920 info[i++] = _("¤¢¤Ê¤¿¤ÏÈô¤Ö¤³¤È¤¬¤Ç¤¤ë¡£", "You can fly.");
1922 if (p_ptr->free_act)
1924 info[i++] = _("¤¢¤Ê¤¿¤ÏËãáãÃΤ餺¤Î¸ú²Ì¤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You have free action.");
1926 if (p_ptr->regenerate)
1928 info[i++] = _("¤¢¤Ê¤¿¤ÏÁÇÁ᤯ÂÎÎϤò²óÉü¤¹¤ë¡£", "You regenerate quickly.");
1930 if (p_ptr->slow_digest)
1932 info[i++] = _("¤¢¤Ê¤¿¤Ï¿©Íߤ¬¾¯¤Ê¤¤¡£", "Your appetite is small.");
1934 if (p_ptr->telepathy)
1936 info[i++] = _("¤¢¤Ê¤¿¤Ï¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤò»ý¤Ã¤Æ¤¤¤ë¡£", "You have ESP.");
1938 if (p_ptr->esp_animal)
1940 info[i++] = _("¤¢¤Ê¤¿¤Ï¼«Á³³¦¤ÎÀ¸Êª¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£", "You sense natural creatures.");
1942 if (p_ptr->esp_undead)
1944 info[i++] = _("¤¢¤Ê¤¿¤Ï¥¢¥ó¥Ç¥Ã¥É¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£", "You sense undead.");
1946 if (p_ptr->esp_demon)
1948 info[i++] = _("¤¢¤Ê¤¿¤Ï°Ëâ¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£", "You sense demons.");
1952 info[i++] = _("¤¢¤Ê¤¿¤Ï¥ª¡¼¥¯¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£", "You sense orcs.");
1954 if (p_ptr->esp_troll)
1956 info[i++] = _("¤¢¤Ê¤¿¤Ï¥È¥í¥ë¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£", "You sense trolls.");
1958 if (p_ptr->esp_giant)
1960 info[i++] = _("¤¢¤Ê¤¿¤Ïµð¿Í¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£", "You sense giants.");
1962 if (p_ptr->esp_dragon)
1964 info[i++] = _("¤¢¤Ê¤¿¤Ï¥É¥é¥´¥ó¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£", "You sense dragons.");
1966 if (p_ptr->esp_human)
1968 info[i++] = _("¤¢¤Ê¤¿¤Ï¿Í´Ö¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£", "You sense humans.");
1970 if (p_ptr->esp_evil)
1972 info[i++] = _("¤¢¤Ê¤¿¤Ï¼Ù°¤ÊÀ¸¤Êª¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£", "You sense evil creatures.");
1974 if (p_ptr->esp_good)
1976 info[i++] = _("¤¢¤Ê¤¿¤ÏÁ±ÎɤÊÀ¸¤Êª¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£", "You sense good creatures.");
1978 if (p_ptr->esp_nonliving)
1980 info[i++] = _("¤¢¤Ê¤¿¤Ï³èÆ°¤¹¤ë̵À¸ÊªÂΤθºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£", "You sense non-living creatures.");
1982 if (p_ptr->esp_unique)
1984 info[i++] = _("¤¢¤Ê¤¿¤ÏÆÃÊ̤ʶ¯Å¨¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£", "You sense unique monsters.");
1986 if (p_ptr->hold_life)
1988 info[i++] = _("¤¢¤Ê¤¿¤Ï¼«¸Ê¤ÎÀ¸Ì¿ÎϤò¤·¤Ã¤«¤ê¤È°Ý»ý¤¹¤ë¡£", "You have a firm hold on your life force.");
1992 info[i++] = _("¤¢¤Ê¤¿¤ÏÌð¤Î¼öʸ¤òÈ¿¼Í¤¹¤ë¡£", "You reflect bolt spells.");
1996 info[i++] = _("¤¢¤Ê¤¿¤Ï±ê¤Î¥ª¡¼¥é¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", "You are surrounded with a fiery aura.");
2000 info[i++] = _("¤¢¤Ê¤¿¤ÏÅŵ¤¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", "You are surrounded with electricity.");
2004 info[i++] = _("¤¢¤Ê¤¿¤ÏÎ䵤¤Î¥ª¡¼¥é¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", "You are surrounded with an aura of coldness.");
2006 if (p_ptr->tim_sh_holy)
2008 info[i++] = _("¤¢¤Ê¤¿¤ÏÀ»¤Ê¤ë¥ª¡¼¥é¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", "You are surrounded with a holy aura.");
2010 if (p_ptr->tim_sh_touki)
2012 info[i++] = _("¤¢¤Ê¤¿¤ÏÆ®µ¤¤Î¥ª¡¼¥é¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", "You are surrounded with a energy aura.");
2014 if (p_ptr->anti_magic)
2016 info[i++] = _("¤¢¤Ê¤¿¤ÏÈ¿ËâË¡¥·¡¼¥ë¥É¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", "You are surrounded by an anti-magic shell.");
2018 if (p_ptr->anti_tele)
2020 info[i++] = _("¤¢¤Ê¤¿¤Ï¥Æ¥ì¥Ý¡¼¥È¤Ç¤¤Ê¤¤¡£", "You cannot teleport.");
2024 info[i++] = _("¤¢¤Ê¤¿¤Î¿ÈÂΤϸ÷¤Ã¤Æ¤¤¤ë¡£", "You are carrying a permanent light.");
2028 info[i++] = _("¤¢¤Ê¤¿¤Ï¹ÔÆ°¤ÎÁ°¤Ë´í¸±¤ò»¡ÃΤ¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£", "You will be warned before dangerous actions.");
2030 if (p_ptr->dec_mana)
2032 info[i++] = _("¤¢¤Ê¤¿¤Ï¾¯¤Ê¤¤¾ÃÈñËâÎϤÇËâË¡¤ò¾§¤¨¤ë¤³¤È¤¬¤Ç¤¤ë¡£", "You can cast spells with fewer mana points.");
2034 if (p_ptr->easy_spell)
2036 info[i++] = _("¤¢¤Ê¤¿¤ÏÄ㤤¼ºÇÔΨ¤ÇËâË¡¤ò¾§¤¨¤ë¤³¤È¤¬¤Ç¤¤ë¡£", "Fail rate of your magic is decreased.");
2038 if (p_ptr->heavy_spell)
2040 info[i++] = _("¤¢¤Ê¤¿¤Ï¹â¤¤¼ºÇÔΨ¤ÇËâË¡¤ò¾§¤¨¤Ê¤±¤ì¤Ð¤¤¤±¤Ê¤¤¡£", "Fail rate of your magic is increased.");
2042 if (p_ptr->mighty_throw)
2044 info[i++] = _("¤¢¤Ê¤¿¤Ï¶¯¤¯Êª¤òÅꤲ¤ë¡£", "You can throw objects powerfully.");
2047 if (p_ptr->immune_acid)
2049 info[i++] = _("¤¢¤Ê¤¿¤Ï»À¤ËÂФ¹¤ë´°Á´¤Ê¤ëÌȱ֤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You are completely immune to acid.");
2051 else if (p_ptr->resist_acid && IS_OPPOSE_ACID())
2053 info[i++] = _("¤¢¤Ê¤¿¤Ï»À¤Ø¤Î¶¯ÎϤÊÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You resist acid exceptionally well.");
2055 else if (p_ptr->resist_acid || IS_OPPOSE_ACID())
2057 info[i++] = _("¤¢¤Ê¤¿¤Ï»À¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You are resistant to acid.");
2060 if (p_ptr->immune_elec)
2062 info[i++] = _("¤¢¤Ê¤¿¤ÏÅÅ·â¤ËÂФ¹¤ë´°Á´¤Ê¤ëÌȱ֤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You are completely immune to lightning.");
2064 else if (p_ptr->resist_elec && IS_OPPOSE_ELEC())
2066 info[i++] = _("¤¢¤Ê¤¿¤ÏÅÅ·â¤Ø¤Î¶¯ÎϤÊÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You resist lightning exceptionally well.");
2068 else if (p_ptr->resist_elec || IS_OPPOSE_ELEC())
2070 info[i++] = _("¤¢¤Ê¤¿¤ÏÅÅ·â¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You are resistant to lightning.");
2073 if (prace_is_(RACE_ANDROID) && !p_ptr->immune_elec)
2075 info[i++] = _("¤¢¤Ê¤¿¤ÏÅÅ·â¤Ë¼å¤¤¡£", "You are susceptible to damage from lightning.");
2078 if (p_ptr->immune_fire)
2080 info[i++] = _("¤¢¤Ê¤¿¤Ï²Ð¤ËÂФ¹¤ë´°Á´¤Ê¤ëÌȱ֤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You are completely immune to fire.");
2082 else if (p_ptr->resist_fire && IS_OPPOSE_FIRE())
2084 info[i++] = _("¤¢¤Ê¤¿¤Ï²Ð¤Ø¤Î¶¯ÎϤÊÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You resist fire exceptionally well.");
2086 else if (p_ptr->resist_fire || IS_OPPOSE_FIRE())
2088 info[i++] = _("¤¢¤Ê¤¿¤Ï²Ð¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You are resistant to fire.");
2091 if (prace_is_(RACE_ENT) && !p_ptr->immune_fire)
2093 info[i++] = _("¤¢¤Ê¤¿¤Ï²Ð¤Ë¼å¤¤¡£", "You are susceptible to damage from fire.");
2096 if (p_ptr->immune_cold)
2098 info[i++] = _("¤¢¤Ê¤¿¤ÏÎ䵤¤ËÂФ¹¤ë´°Á´¤Ê¤ëÌȱ֤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You are completely immune to cold.");
2100 else if (p_ptr->resist_cold && IS_OPPOSE_COLD())
2102 info[i++] = _("¤¢¤Ê¤¿¤ÏÎ䵤¤Ø¤Î¶¯ÎϤÊÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You resist cold exceptionally well.");
2104 else if (p_ptr->resist_cold || IS_OPPOSE_COLD())
2106 info[i++] = _("¤¢¤Ê¤¿¤ÏÎ䵤¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You are resistant to cold.");
2109 if (p_ptr->resist_pois && IS_OPPOSE_POIS())
2111 info[i++] = _("¤¢¤Ê¤¿¤ÏÆǤؤζ¯ÎϤÊÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You resist poison exceptionally well.");
2113 else if (p_ptr->resist_pois || IS_OPPOSE_POIS())
2115 info[i++] = _("¤¢¤Ê¤¿¤ÏÆǤؤÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You are resistant to poison.");
2118 if (p_ptr->resist_lite)
2120 info[i++] = _("¤¢¤Ê¤¿¤ÏÁ®¸÷¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You are resistant to bright light.");
2123 if (prace_is_(RACE_VAMPIRE) || prace_is_(RACE_S_FAIRY) || (p_ptr->mimic_form == MIMIC_VAMPIRE))
2125 info[i++] = _("¤¢¤Ê¤¿¤ÏÁ®¸÷¤Ë¼å¤¤¡£", "You are susceptible to damage from bright light.");
2128 if (prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE) || p_ptr->wraith_form)
2130 info[i++] = _("¤¢¤Ê¤¿¤Ï°Å¹õ¤ËÂФ¹¤ë´°Á´¤Ê¤ëÌȱ֤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You are completely immune to darkness.");
2133 else if (p_ptr->resist_dark)
2135 info[i++] = _("¤¢¤Ê¤¿¤Ï°Å¹õ¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You are resistant to darkness.");
2137 if (p_ptr->resist_conf)
2139 info[i++] = _("¤¢¤Ê¤¿¤Ïº®Íð¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You are resistant to confusion.");
2141 if (p_ptr->resist_sound)
2143 info[i++] = _("¤¢¤Ê¤¿¤Ï²»ÇȤξ׷â¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You are resistant to sonic attacks.");
2145 if (p_ptr->resist_disen)
2147 info[i++] = _("¤¢¤Ê¤¿¤ÏÎô²½¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You are resistant to disenchantment.");
2149 if (p_ptr->resist_chaos)
2151 info[i++] = _("¤¢¤Ê¤¿¤Ï¥«¥ª¥¹¤ÎÎϤؤÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You are resistant to chaos.");
2153 if (p_ptr->resist_shard)
2155 info[i++] = _("¤¢¤Ê¤¿¤ÏÇËÊҤι¶·â¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You are resistant to blasts of shards.");
2157 if (p_ptr->resist_nexus)
2159 info[i++] = _("¤¢¤Ê¤¿¤Ï°ø²Ìº®Íð¤Î¹¶·â¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You are resistant to nexus attacks.");
2162 if (prace_is_(RACE_SPECTRE))
2164 info[i++] = _("¤¢¤Ê¤¿¤ÏÃϹö¤ÎÎϤòµÛ¼ý¤Ç¤¤ë¡£", "You can drain nether forces.");
2166 else if (p_ptr->resist_neth)
2168 info[i++] = _("¤¢¤Ê¤¿¤ÏÃϹö¤ÎÎϤؤÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You are resistant to nether forces.");
2170 if (p_ptr->resist_fear)
2172 info[i++] = _("¤¢¤Ê¤¿¤ÏÁ´¤¯¶²Éݤò´¶¤¸¤Ê¤¤¡£", "You are completely fearless.");
2174 if (p_ptr->resist_blind)
2176 info[i++] = _("¤¢¤Ê¤¿¤ÎÌܤÏÌÕÌܤؤÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£", "Your eyes are resistant to blindness.");
2178 if (p_ptr->resist_time)
2180 info[i++] = _("¤¢¤Ê¤¿¤Ï»þ´ÖµÕž¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£", "You are resistant to time.");
2183 if (p_ptr->sustain_str)
2186 info[i++] = "¤¢¤Ê¤¿¤ÎÏÓÎϤϰݻý¤µ¤ì¤Æ¤¤¤ë¡£";
2188 info[i++] = "Your strength is sustained.";
2192 if (p_ptr->sustain_int)
2195 info[i++] = "¤¢¤Ê¤¿¤ÎÃÎǽ¤Ï°Ý»ý¤µ¤ì¤Æ¤¤¤ë¡£";
2197 info[i++] = "Your intelligence is sustained.";
2201 if (p_ptr->sustain_wis)
2204 info[i++] = "¤¢¤Ê¤¿¤Î¸¤µ¤Ï°Ý»ý¤µ¤ì¤Æ¤¤¤ë¡£";
2206 info[i++] = "Your wisdom is sustained.";
2210 if (p_ptr->sustain_con)
2213 info[i++] = "¤¢¤Ê¤¿¤ÎÂѵ×ÎϤϰݻý¤µ¤ì¤Æ¤¤¤ë¡£";
2215 info[i++] = "Your constitution is sustained.";
2219 if (p_ptr->sustain_dex)
2222 info[i++] = "¤¢¤Ê¤¿¤Î´ïÍѤµ¤Ï°Ý»ý¤µ¤ì¤Æ¤¤¤ë¡£";
2224 info[i++] = "Your dexterity is sustained.";
2228 if (p_ptr->sustain_chr)
2231 info[i++] = "¤¢¤Ê¤¿¤ÎÌ¥ÎϤϰݻý¤µ¤ì¤Æ¤¤¤ë¡£";
2233 info[i++] = "Your charisma is sustained.";
2238 if (have_flag(flgs, TR_STR))
2241 info[i++] = "¤¢¤Ê¤¿¤ÎÏÓÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2243 info[i++] = "Your strength is affected by your equipment.";
2247 if (have_flag(flgs, TR_INT))
2250 info[i++] = "¤¢¤Ê¤¿¤ÎÃÎǽ¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2252 info[i++] = "Your intelligence is affected by your equipment.";
2256 if (have_flag(flgs, TR_WIS))
2259 info[i++] = "¤¢¤Ê¤¿¤Î¸¤µ¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2261 info[i++] = "Your wisdom is affected by your equipment.";
2265 if (have_flag(flgs, TR_DEX))
2268 info[i++] = "¤¢¤Ê¤¿¤Î´ïÍѤµ¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2270 info[i++] = "Your dexterity is affected by your equipment.";
2274 if (have_flag(flgs, TR_CON))
2277 info[i++] = "¤¢¤Ê¤¿¤ÎÂѵ×ÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2279 info[i++] = "Your constitution is affected by your equipment.";
2283 if (have_flag(flgs, TR_CHR))
2286 info[i++] = "¤¢¤Ê¤¿¤ÎÌ¥ÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2288 info[i++] = "Your charisma is affected by your equipment.";
2293 if (have_flag(flgs, TR_STEALTH))
2296 info[i++] = "¤¢¤Ê¤¿¤Î±£Ì©¹ÔưǽÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2298 info[i++] = "Your stealth is affected by your equipment.";
2302 if (have_flag(flgs, TR_SEARCH))
2305 info[i++] = "¤¢¤Ê¤¿¤Îõº÷ǽÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2307 info[i++] = "Your searching ability is affected by your equipment.";
2311 if (have_flag(flgs, TR_INFRA))
2314 info[i++] = "¤¢¤Ê¤¿¤ÎÀÖ³°Àþ»ëÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2316 info[i++] = "Your infravision is affected by your equipment.";
2320 if (have_flag(flgs, TR_TUNNEL))
2323 info[i++] = "¤¢¤Ê¤¿¤ÎºÎ·¡Ç½ÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2325 info[i++] = "Your digging ability is affected by your equipment.";
2329 if (have_flag(flgs, TR_SPEED))
2332 info[i++] = "¤¢¤Ê¤¿¤Î¥¹¥Ô¡¼¥É¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2334 info[i++] = "Your speed is affected by your equipment.";
2338 if (have_flag(flgs, TR_BLOWS))
2341 info[i++] = "¤¢¤Ê¤¿¤Î¹¶·â®ÅÙ¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2343 info[i++] = "Your attack speed is affected by your equipment.";
2349 /* Access the current weapon */
2350 o_ptr = &inventory[INVEN_RARM];
2352 /* Analyze the weapon */
2355 /* Indicate Blessing */
2356 if (have_flag(flgs, TR_BLESSED))
2359 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¿À¤Î½ËÊ¡¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2361 info[i++] = "Your weapon has been blessed by the gods.";
2366 if (have_flag(flgs, TR_CHAOTIC))
2369 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥í¥°¥ë¥¹¤Îħ¤Î°À¤ò¤â¤Ä¡£";
2371 info[i++] = "Your weapon is branded with the Sign of Logrus.";
2377 if (have_flag(flgs, TR_IMPACT))
2380 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏÂÇ·â¤ÇÃϿ̤òȯÀ¸¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
2382 info[i++] = "The impact of your weapon can cause earthquakes.";
2387 if (have_flag(flgs, TR_VORPAL))
2390 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏÈó¾ï¤Ë±Ô¤¤¡£";
2392 info[i++] = "Your weapon is very sharp.";
2397 if (have_flag(flgs, TR_VAMPIRIC))
2400 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤«¤éÀ¸Ì¿ÎϤòµÛ¼ý¤¹¤ë¡£";
2402 info[i++] = "Your weapon drains life from your foes.";
2407 /* Special "Attack Bonuses" */
2408 if (have_flag(flgs, TR_BRAND_ACID))
2411 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤òÍϤ«¤¹¡£";
2413 info[i++] = "Your weapon melts your foes.";
2417 if (have_flag(flgs, TR_BRAND_ELEC))
2420 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤ò´¶ÅŤµ¤»¤ë¡£";
2422 info[i++] = "Your weapon shocks your foes.";
2426 if (have_flag(flgs, TR_BRAND_FIRE))
2429 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤òdz¤ä¤¹¡£";
2431 info[i++] = "Your weapon burns your foes.";
2435 if (have_flag(flgs, TR_BRAND_COLD))
2438 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤òÅà¤é¤»¤ë¡£";
2440 info[i++] = "Your weapon freezes your foes.";
2444 if (have_flag(flgs, TR_BRAND_POIS))
2447 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤òÆǤǿ¯¤¹¡£";
2449 info[i++] = "Your weapon poisons your foes.";
2454 /* Special "slay" flags */
2455 if (have_flag(flgs, TR_KILL_ANIMAL))
2458 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ïưʪ¤ÎŷŨ¤Ç¤¢¤ë¡£";
2460 info[i++] = "Your weapon is a great bane of animals.";
2464 else if (have_flag(flgs, TR_SLAY_ANIMAL))
2467 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ïưʪ¤ËÂФ·¤Æ¶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
2469 info[i++] = "Your weapon strikes at animals with extra force.";
2473 if (have_flag(flgs, TR_KILL_EVIL))
2476 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¼Ù°¤Ê¤ë¸ºß¤ÎŷŨ¤Ç¤¢¤ë¡£";
2478 info[i++] = "Your weapon is a great bane of evil.";
2482 else if (have_flag(flgs, TR_SLAY_EVIL))
2485 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¼Ù°¤Ê¤ë¸ºß¤ËÂФ·¤Æ¶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
2487 info[i++] = "Your weapon strikes at evil with extra force.";
2491 if (have_flag(flgs, TR_KILL_HUMAN))
2494 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¿Í´Ö¤ÎŷŨ¤Ç¤¢¤ë¡£";
2496 info[i++] = "Your weapon is a great bane of humans.";
2500 else if (have_flag(flgs, TR_SLAY_HUMAN))
2503 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¿Í´Ö¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
2505 info[i++] = "Your weapon is especially deadly against humans.";
2509 if (have_flag(flgs, TR_KILL_UNDEAD))
2512 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥¢¥ó¥Ç¥Ã¥É¤ÎŷŨ¤Ç¤¢¤ë¡£";
2514 info[i++] = "Your weapon is a great bane of undead.";
2518 else if (have_flag(flgs, TR_SLAY_UNDEAD))
2521 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥¢¥ó¥Ç¥Ã¥É¤ËÂФ·¤Æ¿ÀÀ»¤Ê¤ëÎϤòȯ´ø¤¹¤ë¡£";
2523 info[i++] = "Your weapon strikes at undead with holy wrath.";
2527 if (have_flag(flgs, TR_KILL_DEMON))
2530 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥Ç¡¼¥â¥ó¤ÎŷŨ¤Ç¤¢¤ë¡£";
2532 info[i++] = "Your weapon is a great bane of demons.";
2536 else if (have_flag(flgs, TR_SLAY_DEMON))
2539 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥Ç¡¼¥â¥ó¤ËÂФ·¤Æ¿ÀÀ»¤Ê¤ëÎϤòȯ´ø¤¹¤ë¡£";
2541 info[i++] = "Your weapon strikes at demons with holy wrath.";
2545 if (have_flag(flgs, TR_KILL_ORC))
2548 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥ª¡¼¥¯¤ÎŷŨ¤Ç¤¢¤ë¡£";
2550 info[i++] = "Your weapon is a great bane of orcs.";
2554 else if (have_flag(flgs, TR_SLAY_ORC))
2557 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥ª¡¼¥¯¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
2559 info[i++] = "Your weapon is especially deadly against orcs.";
2563 if (have_flag(flgs, TR_KILL_TROLL))
2566 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥È¥í¥ë¤ÎŷŨ¤Ç¤¢¤ë¡£";
2568 info[i++] = "Your weapon is a great bane of trolls.";
2572 else if (have_flag(flgs, TR_SLAY_TROLL))
2575 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥È¥í¥ë¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
2577 info[i++] = "Your weapon is especially deadly against trolls.";
2581 if (have_flag(flgs, TR_KILL_GIANT))
2584 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥¸¥ã¥¤¥¢¥ó¥È¤ÎŷŨ¤Ç¤¢¤ë¡£";
2586 info[i++] = "Your weapon is a great bane of giants.";
2590 else if (have_flag(flgs, TR_SLAY_GIANT))
2593 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥¸¥ã¥¤¥¢¥ó¥È¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
2595 info[i++] = "Your weapon is especially deadly against giants.";
2599 /* Special "kill" flags */
2600 if (have_flag(flgs, TR_KILL_DRAGON))
2603 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥É¥é¥´¥ó¤ÎŷŨ¤Ç¤¢¤ë¡£";
2605 info[i++] = "Your weapon is a great bane of dragons.";
2609 else if (have_flag(flgs, TR_SLAY_DRAGON))
2612 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥É¥é¥´¥ó¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
2614 info[i++] = "Your weapon is especially deadly against dragons.";
2619 if (have_flag(flgs, TR_FORCE_WEAPON))
2622 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏMP¤ò»È¤Ã¤Æ¹¶·â¤¹¤ë¡£";
2624 info[i++] = "Your weapon causes greate damages using your MP.";
2628 if (have_flag(flgs, TR_THROW))
2631 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏÅꤲ¤ä¤¹¤¤¡£";
2633 info[i++] = "Your weapon can be thrown well.";
2639 /* Save the screen */
2642 /* Erase the screen */
2643 for (k = 1; k < 24; k++) prt("", k, 13);
2645 /* Label the information */
2647 prt(" ¤¢¤Ê¤¿¤Î¾õÂÖ:", 1, 15);
2649 prt(" Your Attributes:", 1, 15);
2653 /* We will print on top of the map (column 13) */
2654 for (k = 2, j = 0; j < i; j++)
2657 prt(info[j], k++, 15);
2659 /* Every 20 entries (lines 2 to 21), start over */
2660 if ((k == 22) && (j+1 < i))
2663 prt("-- ³¤¯ --", k, 15);
2665 prt("-- more --", k, 15);
2669 for (; k > 2; k--) prt("", k, 15);
2675 prt("[²¿¤«¥¡¼¤ò²¡¤¹¤È¥²¡¼¥à¤ËÌá¤ê¤Þ¤¹]", k, 13);
2677 prt("[Press any key to continue]", k, 13);
2682 /* Restore the screen */
2687 static int report_magics_aux(int dur)
2705 else if (dur <= 100)
2709 else if (dur <= 200)
2719 static cptr report_magic_durations[] =
2728 "¿®¤¸Æñ¤¤¤Û¤ÉŤ¤´Ö",
2729 "¥â¥ó¥¹¥¿¡¼¤ò¹¶·â¤¹¤ë¤Þ¤Ç"
2732 "for a little while",
2736 "for a very long time",
2737 "for an incredibly long time",
2738 "until you hit a monster"
2745 * Report all currently active magical effects.
2747 void report_magics(void)
2757 info2[i] = report_magics_aux(p_ptr->blind);
2759 info[i++] = "¤¢¤Ê¤¿¤ÏÌܤ¬¸«¤¨¤Ê¤¤";
2761 info[i++] = "You cannot see";
2765 if (p_ptr->confused)
2767 info2[i] = report_magics_aux(p_ptr->confused);
2769 info[i++] = "¤¢¤Ê¤¿¤Ïº®Í𤷤Ƥ¤¤ë";
2771 info[i++] = "You are confused";
2777 info2[i] = report_magics_aux(p_ptr->afraid);
2779 info[i++] = "¤¢¤Ê¤¿¤Ï¶²Éݤ˿¯¤µ¤ì¤Æ¤¤¤ë";
2781 info[i++] = "You are terrified";
2785 if (p_ptr->poisoned)
2787 info2[i] = report_magics_aux(p_ptr->poisoned);
2789 info[i++] = "¤¢¤Ê¤¿¤ÏÆǤ˿¯¤µ¤ì¤Æ¤¤¤ë";
2791 info[i++] = "You are poisoned";
2797 info2[i] = report_magics_aux(p_ptr->image);
2799 info[i++] = "¤¢¤Ê¤¿¤Ï¸¸³Ð¤ò¸«¤Æ¤¤¤ë";
2801 info[i++] = "You are hallucinating";
2807 info2[i] = report_magics_aux(p_ptr->blessed);
2809 info[i++] = "¤¢¤Ê¤¿¤Ï¹â·é¤µ¤ò´¶¤¸¤Æ¤¤¤ë";
2811 info[i++] = "You feel rightous";
2817 info2[i] = report_magics_aux(p_ptr->hero);
2819 info[i++] = "¤¢¤Ê¤¿¤Ï¥Ò¡¼¥í¡¼µ¤Ê¬¤À";
2821 info[i++] = "You feel heroic";
2827 info2[i] = report_magics_aux(p_ptr->shero);
2829 info[i++] = "¤¢¤Ê¤¿¤ÏÀïÆ®¶¸¤À";
2831 info[i++] = "You are in a battle rage";
2835 if (p_ptr->protevil)
2837 info2[i] = report_magics_aux(p_ptr->protevil);
2839 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°¤Ê¤ë¸ºß¤«¤é¼é¤é¤ì¤Æ¤¤¤ë";
2841 info[i++] = "You are protected from evil";
2847 info2[i] = report_magics_aux(p_ptr->shield);
2849 info[i++] = "¤¢¤Ê¤¿¤Ï¿ÀÈë¤Î¥·¡¼¥ë¥É¤Ç¼é¤é¤ì¤Æ¤¤¤ë";
2851 info[i++] = "You are protected by a mystic shield";
2857 info2[i] = report_magics_aux(p_ptr->invuln);
2859 info[i++] = "¤¢¤Ê¤¿¤Ï̵Ũ¤À";
2861 info[i++] = "You are invulnerable";
2865 if (p_ptr->wraith_form)
2867 info2[i] = report_magics_aux(p_ptr->wraith_form);
2869 info[i++] = "¤¢¤Ê¤¿¤ÏÍ©Â⽤·¤Æ¤¤¤ë";
2871 info[i++] = "You are incorporeal";
2875 if (p_ptr->special_attack & ATTACK_CONFUSE)
2879 info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤ÏÀÖ¤¯µ±¤¤¤Æ¤¤¤ë";
2881 info[i++] = "Your hands are glowing dull red.";
2885 if (p_ptr->word_recall)
2887 info2[i] = report_magics_aux(p_ptr->word_recall);
2889 info[i++] = "¤³¤Î¸åµ¢´Ô¤Î¾Û¤¬È¯Æ°¤¹¤ë";
2891 info[i++] = "You are waiting to be recalled";
2895 if (p_ptr->alter_reality)
2897 info2[i] = report_magics_aux(p_ptr->alter_reality);
2899 info[i++] = "¤³¤Î¸å¸½¼ÂÊÑÍƤ¬È¯Æ°¤¹¤ë";
2901 info[i++] = "You waiting to be altered";
2905 if (p_ptr->oppose_acid)
2907 info2[i] = report_magics_aux(p_ptr->oppose_acid);
2909 info[i++] = "¤¢¤Ê¤¿¤Ï»À¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë";
2911 info[i++] = "You are resistant to acid";
2915 if (p_ptr->oppose_elec)
2917 info2[i] = report_magics_aux(p_ptr->oppose_elec);
2919 info[i++] = "¤¢¤Ê¤¿¤ÏÅÅ·â¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë";
2921 info[i++] = "You are resistant to lightning";
2925 if (p_ptr->oppose_fire)
2927 info2[i] = report_magics_aux(p_ptr->oppose_fire);
2929 info[i++] = "¤¢¤Ê¤¿¤Ï²Ð¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë";
2931 info[i++] = "You are resistant to fire";
2935 if (p_ptr->oppose_cold)
2937 info2[i] = report_magics_aux(p_ptr->oppose_cold);
2939 info[i++] = "¤¢¤Ê¤¿¤ÏÎ䵤¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë";
2941 info[i++] = "You are resistant to cold";
2945 if (p_ptr->oppose_pois)
2947 info2[i] = report_magics_aux(p_ptr->oppose_pois);
2949 info[i++] = "¤¢¤Ê¤¿¤ÏÆǤؤÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë";
2951 info[i++] = "You are resistant to poison";
2956 /* Save the screen */
2959 /* Erase the screen */
2960 for (k = 1; k < 24; k++) prt("", k, 13);
2962 /* Label the information */
2964 prt(" ¸½ºß¤«¤«¤Ã¤Æ¤¤¤ëËâË¡ :", 1, 15);
2966 prt(" Your Current Magic:", 1, 15);
2970 /* We will print on top of the map (column 13) */
2971 for (k = 2, j = 0; j < i; j++)
2975 sprintf(Dummy, "%-28s : ´ü´Ö - %s ", info[j],
2977 sprintf(Dummy, "%s %s.", info[j],
2980 report_magic_durations[info2[j]]);
2981 prt(Dummy, k++, 15);
2983 /* Every 20 entries (lines 2 to 21), start over */
2984 if ((k == 22) && (j + 1 < i))
2987 prt("-- ³¤¯ --", k, 15);
2989 prt("-- more --", k, 15);
2993 for (; k > 2; k--) prt("", k, 15);
2999 prt("[²¿¤«¥¡¼¤ò²¡¤¹¤È¥²¡¼¥à¤ËÌá¤ê¤Þ¤¹]", k, 13);
3001 prt("[Press any key to continue]", k, 13);
3006 /* Restore the screen */
3011 static bool detect_feat_flag(int range, int flag, bool known)
3014 bool detect = FALSE;
3017 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3019 /* Scan the current panel */
3020 for (y = 1; y < cur_hgt - 1; y++)
3022 for (x = 1; x <= cur_wid - 1; x++)
3024 int dist = distance(py, px, y, x);
3025 if (dist > range) continue;
3027 /* Access the grid */
3028 c_ptr = &cave[y][x];
3031 if (flag == FF_TRAP)
3033 /* Mark as detected */
3034 if (dist <= range && known)
3036 if (dist <= range - 1) c_ptr->info |= (CAVE_IN_DETECT);
3038 c_ptr->info &= ~(CAVE_UNSAFE);
3046 if (cave_have_flag_grid(c_ptr, flag))
3048 /* Detect secrets */
3049 disclose_grid(y, x);
3051 /* Hack -- Memorize */
3052 c_ptr->info |= (CAVE_MARK);
3069 * Detect all traps on current panel
3071 bool detect_traps(int range, bool known)
3073 bool detect = detect_feat_flag(range, FF_TRAP, known);
3075 if (known) p_ptr->dtrap = TRUE;
3077 if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 0) detect = FALSE;
3083 msg_print("¥È¥é¥Ã¥×¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3085 msg_print("You sense the presence of traps!");
3095 * Detect all doors on current panel
3097 bool detect_doors(int range)
3099 bool detect = detect_feat_flag(range, FF_DOOR, TRUE);
3101 if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 0) detect = FALSE;
3107 msg_print("¥É¥¢¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3109 msg_print("You sense the presence of doors!");
3119 * Detect all stairs on current panel
3121 bool detect_stairs(int range)
3123 bool detect = detect_feat_flag(range, FF_STAIRS, TRUE);
3125 if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 0) detect = FALSE;
3131 msg_print("³¬Ãʤθºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3133 msg_print("You sense the presence of stairs!");
3143 * Detect any treasure on the current panel
3145 bool detect_treasure(int range)
3147 bool detect = detect_feat_flag(range, FF_HAS_GOLD, TRUE);
3149 if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 6) detect = FALSE;
3155 msg_print("Ë䢤µ¤ì¤¿ºâÊõ¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3157 msg_print("You sense the presence of buried treasure!");
3167 * Detect all "gold" objects on the current panel
3169 bool detect_objects_gold(int range)
3174 bool detect = FALSE;
3176 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range2 /= 3;
3179 for (i = 1; i < o_max; i++)
3181 object_type *o_ptr = &o_list[i];
3183 /* Skip dead objects */
3184 if (!o_ptr->k_idx) continue;
3186 /* Skip held objects */
3187 if (o_ptr->held_m_idx) continue;
3193 /* Only detect nearby objects */
3194 if (distance(py, px, y, x) > range2) continue;
3196 /* Detect "gold" objects */
3197 if (o_ptr->tval == TV_GOLD)
3199 /* Hack -- memorize it */
3200 o_ptr->marked |= OM_FOUND;
3210 if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 6) detect = FALSE;
3216 msg_print("ºâÊõ¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3218 msg_print("You sense the presence of treasure!");
3223 if (detect_monsters_string(range, "$"))
3234 * Detect all "normal" objects on the current panel
3236 bool detect_objects_normal(int range)
3241 bool detect = FALSE;
3243 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range2 /= 3;
3246 for (i = 1; i < o_max; i++)
3248 object_type *o_ptr = &o_list[i];
3250 /* Skip dead objects */
3251 if (!o_ptr->k_idx) continue;
3253 /* Skip held objects */
3254 if (o_ptr->held_m_idx) continue;
3260 /* Only detect nearby objects */
3261 if (distance(py, px, y, x) > range2) continue;
3263 /* Detect "real" objects */
3264 if (o_ptr->tval != TV_GOLD)
3266 /* Hack -- memorize it */
3267 o_ptr->marked |= OM_FOUND;
3277 if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 6) detect = FALSE;
3283 msg_print("¥¢¥¤¥Æ¥à¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3285 msg_print("You sense the presence of objects!");
3290 if (detect_monsters_string(range, "!=?|/`"))
3301 * Detect all "magic" objects on the current panel.
3303 * This will light up all spaces with "magic" items, including artifacts,
3304 * ego-items, potions, scrolls, books, rods, wands, staves, amulets, rings,
3305 * and "enchanted" items of the "good" variety.
3307 * It can probably be argued that this function is now too powerful.
3309 bool detect_objects_magic(int range)
3313 bool detect = FALSE;
3315 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3317 /* Scan all objects */
3318 for (i = 1; i < o_max; i++)
3320 object_type *o_ptr = &o_list[i];
3322 /* Skip dead objects */
3323 if (!o_ptr->k_idx) continue;
3325 /* Skip held objects */
3326 if (o_ptr->held_m_idx) continue;
3332 /* Only detect nearby objects */
3333 if (distance(py, px, y, x) > range) continue;
3335 /* Examine the tval */
3338 /* Artifacts, misc magic items, or enchanted wearables */
3339 if (object_is_artifact(o_ptr) ||
3340 object_is_ego(o_ptr) ||
3341 (tv == TV_WHISTLE) ||
3342 (tv == TV_AMULET) ||
3347 (tv == TV_SCROLL) ||
3348 (tv == TV_POTION) ||
3349 (tv == TV_LIFE_BOOK) ||
3350 (tv == TV_SORCERY_BOOK) ||
3351 (tv == TV_NATURE_BOOK) ||
3352 (tv == TV_CHAOS_BOOK) ||
3353 (tv == TV_DEATH_BOOK) ||
3354 (tv == TV_TRUMP_BOOK) ||
3355 (tv == TV_ARCANE_BOOK) ||
3356 (tv == TV_CRAFT_BOOK) ||
3357 (tv == TV_DAEMON_BOOK) ||
3358 (tv == TV_CRUSADE_BOOK) ||
3359 (tv == TV_MUSIC_BOOK) ||
3360 (tv == TV_HISSATSU_BOOK) ||
3361 (tv == TV_HEX_BOOK) ||
3362 ((o_ptr->to_a > 0) || (o_ptr->to_h + o_ptr->to_d > 0)))
3364 /* Memorize the item */
3365 o_ptr->marked |= OM_FOUND;
3379 msg_print("ËâË¡¤Î¥¢¥¤¥Æ¥à¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3381 msg_print("You sense the presence of magic objects!");
3392 * Detect all "normal" monsters on the current panel
3394 bool detect_monsters_normal(int range)
3400 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3403 for (i = 1; i < m_max; i++)
3405 monster_type *m_ptr = &m_list[i];
3406 monster_race *r_ptr = &r_info[m_ptr->r_idx];
3408 /* Skip dead monsters */
3409 if (!m_ptr->r_idx) continue;
3415 /* Only detect nearby monsters */
3416 if (distance(py, px, y, x) > range) continue;
3418 /* Detect all non-invisible monsters */
3419 if (!(r_ptr->flags2 & RF2_INVISIBLE) || p_ptr->see_inv)
3421 /* Repair visibility later */
3422 repair_monsters = TRUE;
3424 /* Hack -- Detect monster */
3425 m_ptr->mflag2 |= (MFLAG2_MARK | MFLAG2_SHOW);
3427 /* Update the monster */
3428 update_mon(i, FALSE);
3435 if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 3) flag = FALSE;
3440 /* Describe result */
3442 msg_print("¥â¥ó¥¹¥¿¡¼¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3444 msg_print("You sense the presence of monsters!");
3455 * Detect all "invisible" monsters around the player
3457 bool detect_monsters_invis(int range)
3462 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3465 for (i = 1; i < m_max; i++)
3467 monster_type *m_ptr = &m_list[i];
3468 monster_race *r_ptr = &r_info[m_ptr->r_idx];
3470 /* Skip dead monsters */
3471 if (!m_ptr->r_idx) continue;
3477 /* Only detect nearby monsters */
3478 if (distance(py, px, y, x) > range) continue;
3480 /* Detect invisible monsters */
3481 if (r_ptr->flags2 & RF2_INVISIBLE)
3483 /* Update monster recall window */
3484 if (p_ptr->monster_race_idx == m_ptr->r_idx)
3487 p_ptr->window |= (PW_MONSTER);
3490 /* Repair visibility later */
3491 repair_monsters = TRUE;
3493 /* Hack -- Detect monster */
3494 m_ptr->mflag2 |= (MFLAG2_MARK | MFLAG2_SHOW);
3496 /* Update the monster */
3497 update_mon(i, FALSE);
3504 if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 3) flag = FALSE;
3509 /* Describe result */
3511 msg_print("Æ©ÌÀ¤ÊÀ¸Êª¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3513 msg_print("You sense the presence of invisible creatures!");
3525 * Detect all "evil" monsters on current panel
3527 bool detect_monsters_evil(int range)
3532 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3535 for (i = 1; i < m_max; i++)
3537 monster_type *m_ptr = &m_list[i];
3538 monster_race *r_ptr = &r_info[m_ptr->r_idx];
3540 /* Skip dead monsters */
3541 if (!m_ptr->r_idx) continue;
3547 /* Only detect nearby monsters */
3548 if (distance(py, px, y, x) > range) continue;
3550 /* Detect evil monsters */
3551 if (r_ptr->flags3 & RF3_EVIL)
3553 if (is_original_ap(m_ptr))
3555 /* Take note that they are evil */
3556 r_ptr->r_flags3 |= (RF3_EVIL);
3558 /* Update monster recall window */
3559 if (p_ptr->monster_race_idx == m_ptr->r_idx)
3562 p_ptr->window |= (PW_MONSTER);
3566 /* Repair visibility later */
3567 repair_monsters = TRUE;
3569 /* Hack -- Detect monster */
3570 m_ptr->mflag2 |= (MFLAG2_MARK | MFLAG2_SHOW);
3572 /* Update the monster */
3573 update_mon(i, FALSE);
3583 /* Describe result */
3585 msg_print("¼Ù°¤Ê¤ëÀ¸Êª¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3587 msg_print("You sense the presence of evil creatures!");
3600 * Detect all "nonliving", "undead" or "demonic" monsters on current panel
3602 bool detect_monsters_nonliving(int range)
3607 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3610 for (i = 1; i < m_max; i++)
3612 monster_type *m_ptr = &m_list[i];
3613 monster_race *r_ptr = &r_info[m_ptr->r_idx];
3615 /* Skip dead monsters */
3616 if (!m_ptr->r_idx) continue;
3622 /* Only detect nearby monsters */
3623 if (distance(py, px, y, x) > range) continue;
3625 /* Detect non-living monsters */
3626 if (!monster_living(r_ptr))
3628 /* Update monster recall window */
3629 if (p_ptr->monster_race_idx == m_ptr->r_idx)
3632 p_ptr->window |= (PW_MONSTER);
3635 /* Repair visibility later */
3636 repair_monsters = TRUE;
3638 /* Hack -- Detect monster */
3639 m_ptr->mflag2 |= (MFLAG2_MARK | MFLAG2_SHOW);
3641 /* Update the monster */
3642 update_mon(i, FALSE);
3652 /* Describe result */
3654 msg_print("¼«Á³¤Ç¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤Î¸ºß¤ò´¶¤¸¤¿¡ª");
3656 msg_print("You sense the presence of unnatural beings!");
3667 * Detect all monsters it has mind on current panel
3669 bool detect_monsters_mind(int range)
3674 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3677 for (i = 1; i < m_max; i++)
3679 monster_type *m_ptr = &m_list[i];
3680 monster_race *r_ptr = &r_info[m_ptr->r_idx];
3682 /* Skip dead monsters */
3683 if (!m_ptr->r_idx) continue;
3689 /* Only detect nearby monsters */
3690 if (distance(py, px, y, x) > range) continue;
3692 /* Detect non-living monsters */
3693 if (!(r_ptr->flags2 & RF2_EMPTY_MIND))
3695 /* Update monster recall window */
3696 if (p_ptr->monster_race_idx == m_ptr->r_idx)
3699 p_ptr->window |= (PW_MONSTER);
3702 /* Repair visibility later */
3703 repair_monsters = TRUE;
3705 /* Hack -- Detect monster */
3706 m_ptr->mflag2 |= (MFLAG2_MARK | MFLAG2_SHOW);
3708 /* Update the monster */
3709 update_mon(i, FALSE);
3719 /* Describe result */
3721 msg_print("»¦µ¤¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3723 msg_print("You sense the presence of someone's mind!");
3734 * Detect all (string) monsters on current panel
3736 bool detect_monsters_string(int range, cptr Match)
3741 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3744 for (i = 1; i < m_max; i++)
3746 monster_type *m_ptr = &m_list[i];
3747 monster_race *r_ptr = &r_info[m_ptr->r_idx];
3749 /* Skip dead monsters */
3750 if (!m_ptr->r_idx) continue;
3756 /* Only detect nearby monsters */
3757 if (distance(py, px, y, x) > range) continue;
3759 /* Detect monsters with the same symbol */
3760 if (my_strchr(Match, r_ptr->d_char))
3762 /* Update monster recall window */
3763 if (p_ptr->monster_race_idx == m_ptr->r_idx)
3766 p_ptr->window |= (PW_MONSTER);
3769 /* Repair visibility later */
3770 repair_monsters = TRUE;
3772 /* Hack -- Detect monster */
3773 m_ptr->mflag2 |= (MFLAG2_MARK | MFLAG2_SHOW);
3775 /* Update the monster */
3776 update_mon(i, FALSE);
3783 if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 3) flag = FALSE;
3788 /* Describe result */
3790 msg_print("¥â¥ó¥¹¥¿¡¼¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3792 msg_print("You sense the presence of monsters!");
3803 * A "generic" detect monsters routine, tagged to flags3
3805 bool detect_monsters_xxx(int range, u32b match_flag)
3810 cptr desc_monsters = "ÊѤʥâ¥ó¥¹¥¿¡¼";
3812 cptr desc_monsters = "weird monsters";
3815 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3818 for (i = 1; i < m_max; i++)
3820 monster_type *m_ptr = &m_list[i];
3821 monster_race *r_ptr = &r_info[m_ptr->r_idx];
3823 /* Skip dead monsters */
3824 if (!m_ptr->r_idx) continue;
3830 /* Only detect nearby monsters */
3831 if (distance(py, px, y, x) > range) continue;
3833 /* Detect evil monsters */
3834 if (r_ptr->flags3 & (match_flag))
3836 if (is_original_ap(m_ptr))
3838 /* Take note that they are something */
3839 r_ptr->r_flags3 |= (match_flag);
3841 /* Update monster recall window */
3842 if (p_ptr->monster_race_idx == m_ptr->r_idx)
3845 p_ptr->window |= (PW_MONSTER);
3849 /* Repair visibility later */
3850 repair_monsters = TRUE;
3852 /* Hack -- Detect monster */
3853 m_ptr->mflag2 |= (MFLAG2_MARK | MFLAG2_SHOW);
3855 /* Update the monster */
3856 update_mon(i, FALSE);
3870 desc_monsters = "¥Ç¡¼¥â¥ó";
3872 desc_monsters = "demons";
3878 desc_monsters = "¥¢¥ó¥Ç¥Ã¥É";
3880 desc_monsters = "the undead";
3886 /* Describe result */
3888 msg_format("%s¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª", desc_monsters);
3890 msg_format("You sense the presence of %s!", desc_monsters);
3904 bool detect_all(int range)
3906 bool detect = FALSE;
3908 /* Detect everything */
3909 if (detect_traps(range, TRUE)) detect = TRUE;
3910 if (detect_doors(range)) detect = TRUE;
3911 if (detect_stairs(range)) detect = TRUE;
3913 /* There are too many hidden treasure. So... */
3914 /* if (detect_treasure(range)) detect = TRUE; */
3916 if (detect_objects_gold(range)) detect = TRUE;
3917 if (detect_objects_normal(range)) detect = TRUE;
3918 if (detect_monsters_invis(range)) detect = TRUE;
3919 if (detect_monsters_normal(range)) detect = TRUE;
3927 * Apply a "project()" directly to all viewable monsters
3929 * Note that affected monsters are NOT auto-tracked by this usage.
3931 * To avoid misbehavior when monster deaths have side-effects,
3932 * this is done in two passes. -- JDL
3934 bool project_hack(int typ, int dam)
3937 int flg = PROJECT_JUMP | PROJECT_KILL | PROJECT_HIDE;
3938 bool obvious = FALSE;
3941 /* Mark all (nearby) monsters */
3942 for (i = 1; i < m_max; i++)
3944 monster_type *m_ptr = &m_list[i];
3946 /* Paranoia -- Skip dead monsters */
3947 if (!m_ptr->r_idx) continue;
3953 /* Require line of sight */
3954 if (!player_has_los_bold(y, x) || !projectable(py, px, y, x)) continue;
3956 /* Mark the monster */
3957 m_ptr->mflag |= (MFLAG_TEMP);
3960 /* Affect all marked monsters */
3961 for (i = 1; i < m_max; i++)
3963 monster_type *m_ptr = &m_list[i];
3965 /* Skip unmarked monsters */
3966 if (!(m_ptr->mflag & (MFLAG_TEMP))) continue;
3969 m_ptr->mflag &= ~(MFLAG_TEMP);
3975 /* Jump directly to the target monster */
3976 if (project(0, 0, y, x, dam, typ, flg, -1)) obvious = TRUE;
3987 bool speed_monsters(void)
3989 return (project_hack(GF_OLD_SPEED, p_ptr->lev));
3995 bool slow_monsters(int power)
3997 return (project_hack(GF_OLD_SLOW, power));
4003 bool sleep_monsters(int power)
4005 return (project_hack(GF_OLD_SLEEP, power));
4010 * Banish evil monsters
4012 bool banish_evil(int dist)
4014 return (project_hack(GF_AWAY_EVIL, dist));
4021 bool turn_undead(void)
4023 bool tester = (project_hack(GF_TURN_UNDEAD, p_ptr->lev));
4025 chg_virtue(V_UNLIFE, -1);
4031 * Dispel undead monsters
4033 bool dispel_undead(int dam)
4035 bool tester = (project_hack(GF_DISP_UNDEAD, dam));
4037 chg_virtue(V_UNLIFE, -2);
4042 * Dispel evil monsters
4044 bool dispel_evil(int dam)
4046 return (project_hack(GF_DISP_EVIL, dam));
4050 * Dispel good monsters
4052 bool dispel_good(int dam)
4054 return (project_hack(GF_DISP_GOOD, dam));
4058 * Dispel all monsters
4060 bool dispel_monsters(int dam)
4062 return (project_hack(GF_DISP_ALL, dam));
4066 * Dispel 'living' monsters
4068 bool dispel_living(int dam)
4070 return (project_hack(GF_DISP_LIVING, dam));
4076 bool dispel_demons(int dam)
4078 return (project_hack(GF_DISP_DEMON, dam));
4087 return (project_hack(GF_CRUSADE, p_ptr->lev*4));
4092 * Wake up all monsters, and speed up "los" monsters.
4094 void aggravate_monsters(int who)
4101 /* Aggravate everyone nearby */
4102 for (i = 1; i < m_max; i++)
4104 monster_type *m_ptr = &m_list[i];
4105 /* monster_race *r_ptr = &r_info[m_ptr->r_idx]; */
4107 /* Paranoia -- Skip dead monsters */
4108 if (!m_ptr->r_idx) continue;
4110 /* Skip aggravating monster (or player) */
4111 if (i == who) continue;
4113 /* Wake up nearby sleeping monsters */
4114 if (m_ptr->cdis < MAX_SIGHT * 2)
4117 if (MON_CSLEEP(m_ptr))
4119 (void)set_monster_csleep(i, 0);
4122 if (!is_pet(m_ptr)) m_ptr->mflag2 |= MFLAG2_NOPET;
4125 /* Speed up monsters in line of sight */
4126 if (player_has_los_bold(m_ptr->fy, m_ptr->fx))
4130 (void)set_monster_fast(i, MON_FAST(m_ptr) + 100);
4138 if (speed) msg_print("ÉÕ¶á¤Ç²¿¤«¤¬ÆÍÇ¡¶½Ê³¤·¤¿¤è¤¦¤Ê´¶¤¸¤ò¼õ¤±¤¿¡ª");
4139 else if (sleep) msg_print("²¿¤«¤¬ÆÍÇ¡¶½Ê³¤·¤¿¤è¤¦¤ÊÁû¡¹¤·¤¤²»¤¬±ó¤¯¤Ëʹ¤³¤¨¤¿¡ª");
4141 if (speed) msg_print("You feel a sudden stirring nearby!");
4142 else if (sleep) msg_print("You hear a sudden stirring in the distance!");
4144 if (p_ptr->riding) p_ptr->update |= PU_BONUS;
4149 * Delete a non-unique/non-quest monster
4151 bool genocide_aux(int m_idx, int power, bool player_cast, int dam_side, cptr spell_name)
4153 int msec = delay_factor * delay_factor * delay_factor;
4154 monster_type *m_ptr = &m_list[m_idx];
4155 monster_race *r_ptr = &r_info[m_ptr->r_idx];
4156 bool resist = FALSE;
4158 if (is_pet(m_ptr) && !player_cast) return FALSE;
4160 /* Hack -- Skip Unique Monsters or Quest Monsters */
4161 if (r_ptr->flags1 & (RF1_UNIQUE | RF1_QUESTOR)) resist = TRUE;
4163 else if (r_ptr->flags7 & RF7_UNIQUE2) resist = TRUE;
4165 else if (m_idx == p_ptr->riding) resist = TRUE;
4167 else if ((p_ptr->inside_quest && !random_quest_number(dun_level)) || p_ptr->inside_arena || p_ptr->inside_battle) resist = TRUE;
4169 else if (player_cast && (r_ptr->level > randint0(power))) resist = TRUE;
4171 else if (player_cast && (m_ptr->mflag2 & MFLAG2_NOGENO)) resist = TRUE;
4173 /* Delete the monster */
4176 if (record_named_pet && is_pet(m_ptr) && m_ptr->nickname)
4180 monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE);
4181 do_cmd_write_nikki(NIKKI_NAMED_PET, RECORD_NAMED_PET_GENOCIDE, m_name);
4184 delete_monster_idx(m_idx);
4187 if (resist && player_cast)
4189 bool see_m = is_seen(m_ptr);
4192 monster_desc(m_name, m_ptr, 0);
4196 msg_format("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", m_name);
4198 msg_format("%^s is unaffected.", m_name);
4201 if (MON_CSLEEP(m_ptr))
4203 (void)set_monster_csleep(m_idx, 0);
4207 msg_format("%^s¤¬Ìܤò³Ð¤Þ¤·¤¿¡£", m_name);
4209 msg_format("%^s wakes up.", m_name);
4213 if (is_friendly(m_ptr) && !is_pet(m_ptr))
4218 msg_format("%s¤ÏÅܤä¿¡ª", m_name);
4220 msg_format("%^s gets angry!", m_name);
4225 if (one_in_(13)) m_ptr->mflag2 |= MFLAG2_NOGENO;
4232 take_hit(DAMAGE_GENO, randint1(dam_side), format("%^s¤Î¼öʸ¤ò¾§¤¨¤¿ÈèÏ«", spell_name), -1);
4234 take_hit(DAMAGE_GENO, randint1(dam_side), format("the strain of casting %^s", spell_name), -1);
4238 /* Visual feedback */
4239 move_cursor_relative(py, px);
4242 p_ptr->redraw |= (PR_HP);
4245 p_ptr->window |= (PW_PLAYER);
4254 Term_xtra(TERM_XTRA_DELAY, msec);
4261 * Delete all non-unique/non-quest monsters of a given "type" from the level
4263 bool symbol_genocide(int power, bool player_cast)
4267 bool result = FALSE;
4269 /* Prevent genocide in quest levels */
4270 if ((p_ptr->inside_quest && !random_quest_number(dun_level)) || p_ptr->inside_arena || p_ptr->inside_battle)
4275 /* Mega-Hack -- Get a monster symbol */
4277 while (!get_com("¤É¤Î¼ïÎà(ʸ»ú)¤Î¥â¥ó¥¹¥¿¡¼¤òËõ»¦¤·¤Þ¤¹¤«: ", &typ, FALSE)) ;
4279 while (!get_com("Choose a monster race (by symbol) to genocide: ", &typ, FALSE)) ;
4282 /* Delete the monsters of that "type" */
4283 for (i = 1; i < m_max; i++)
4285 monster_type *m_ptr = &m_list[i];
4286 monster_race *r_ptr = &r_info[m_ptr->r_idx];
4288 /* Paranoia -- Skip dead monsters */
4289 if (!m_ptr->r_idx) continue;
4291 /* Skip "wrong" monsters */
4292 if (r_ptr->d_char != typ) continue;
4296 result |= genocide_aux(i, power, player_cast, 4, "Ëõ»¦");
4298 result |= genocide_aux(i, power, player_cast, 4, "Genocide");
4304 chg_virtue(V_VITALITY, -2);
4305 chg_virtue(V_CHANCE, -1);
4313 * Delete all nearby (non-unique) monsters
4315 bool mass_genocide(int power, bool player_cast)
4318 bool result = FALSE;
4320 /* Prevent mass genocide in quest levels */
4321 if ((p_ptr->inside_quest && !random_quest_number(dun_level)) || p_ptr->inside_arena || p_ptr->inside_battle)
4326 /* Delete the (nearby) monsters */
4327 for (i = 1; i < m_max; i++)
4329 monster_type *m_ptr = &m_list[i];
4331 /* Paranoia -- Skip dead monsters */
4332 if (!m_ptr->r_idx) continue;
4334 /* Skip distant monsters */
4335 if (m_ptr->cdis > MAX_SIGHT) continue;
4339 result |= genocide_aux(i, power, player_cast, 3, "¼þÊÕËõ»¦");
4341 result |= genocide_aux(i, power, player_cast, 3, "Mass Genocide");
4347 chg_virtue(V_VITALITY, -2);
4348 chg_virtue(V_CHANCE, -1);
4357 * Delete all nearby (non-unique) undead
4359 bool mass_genocide_undead(int power, bool player_cast)
4362 bool result = FALSE;
4364 /* Prevent mass genocide in quest levels */
4365 if ((p_ptr->inside_quest && !random_quest_number(dun_level)) || p_ptr->inside_arena || p_ptr->inside_battle)
4370 /* Delete the (nearby) monsters */
4371 for (i = 1; i < m_max; i++)
4373 monster_type *m_ptr = &m_list[i];
4374 monster_race *r_ptr = &r_info[m_ptr->r_idx];
4376 /* Paranoia -- Skip dead monsters */
4377 if (!m_ptr->r_idx) continue;
4379 if (!(r_ptr->flags3 & RF3_UNDEAD)) continue;
4381 /* Skip distant monsters */
4382 if (m_ptr->cdis > MAX_SIGHT) continue;
4386 result |= genocide_aux(i, power, player_cast, 3, "¥¢¥ó¥Ç¥Ã¥É¾ÃÌÇ");
4388 result |= genocide_aux(i, power, player_cast, 3, "Annihilate Undead");
4394 chg_virtue(V_UNLIFE, -2);
4395 chg_virtue(V_CHANCE, -1);
4404 * Probe nearby monsters
4419 /* Probe all (nearby) monsters */
4420 for (i = 1; i < m_max; i++)
4422 monster_type *m_ptr = &m_list[i];
4423 monster_race *r_ptr = &r_info[m_ptr->r_idx];
4425 /* Paranoia -- Skip dead monsters */
4426 if (!m_ptr->r_idx) continue;
4428 /* Require line of sight */
4429 if (!player_has_los_bold(m_ptr->fy, m_ptr->fx)) continue;
4431 /* Probe visible monsters */
4436 /* Start the message */
4440 msg_print("Ä´ººÃæ...");
4442 msg_print("Probing...");
4448 if (!is_original_ap(m_ptr))
4450 if (m_ptr->mflag2 & MFLAG2_KAGE)
4451 m_ptr->mflag2 &= ~(MFLAG2_KAGE);
4453 m_ptr->ap_r_idx = m_ptr->r_idx;
4454 lite_spot(m_ptr->fy, m_ptr->fx);
4456 /* Get "the monster" or "something" */
4457 monster_desc(m_name, m_ptr, MD_IGNORE_HALLU | MD_INDEF_HIDDEN);
4459 speed = m_ptr->mspeed - 110;
4460 if (MON_FAST(m_ptr)) speed += 10;
4461 if (MON_SLOW(m_ptr)) speed -= 10;
4463 /* Get the monster's alignment */
4465 if ((r_ptr->flags3 & (RF3_EVIL | RF3_GOOD)) == (RF3_EVIL | RF3_GOOD)) align = "籡";
4466 else if (r_ptr->flags3 & RF3_EVIL) align = "¼Ù°";
4467 else if (r_ptr->flags3 & RF3_GOOD) align = "Á±ÎÉ";
4468 else if ((m_ptr->sub_align & (SUB_ALIGN_EVIL | SUB_ALIGN_GOOD)) == (SUB_ALIGN_EVIL | SUB_ALIGN_GOOD)) align = "ÃæΩ(Á±°)";
4469 else if (m_ptr->sub_align & SUB_ALIGN_EVIL) align = "ÃæΩ(¼Ù°)";
4470 else if (m_ptr->sub_align & SUB_ALIGN_GOOD) align = "ÃæΩ(Á±ÎÉ)";
4471 else align = "ÃæΩ";
4473 if ((r_ptr->flags3 & (RF3_EVIL | RF3_GOOD)) == (RF3_EVIL | RF3_GOOD)) align = "good&evil";
4474 else if (r_ptr->flags3 & RF3_EVIL) align = "evil";
4475 else if (r_ptr->flags3 & RF3_GOOD) align = "good";
4476 else if ((m_ptr->sub_align & (SUB_ALIGN_EVIL | SUB_ALIGN_GOOD)) == (SUB_ALIGN_EVIL | SUB_ALIGN_GOOD)) align = "neutral(good&evil)";
4477 else if (m_ptr->sub_align & SUB_ALIGN_EVIL) align = "neutral(evil)";
4478 else if (m_ptr->sub_align & SUB_ALIGN_GOOD) align = "neutral(good)";
4479 else align = "neutral";
4482 /* Describe the monster */
4484 sprintf(buf,"%s ... °À:%s HP:%d/%d AC:%d ®ÅÙ:%s%d ·Ð¸³:", m_name, align, m_ptr->hp, m_ptr->maxhp, r_ptr->ac, (speed > 0) ? "+" : "", speed);
4486 sprintf(buf, "%s ... align:%s HP:%d/%d AC:%d speed:%s%d exp:", m_name, align, m_ptr->hp, m_ptr->maxhp, r_ptr->ac, (speed > 0) ? "+" : "", speed);
4488 if (r_ptr->next_r_idx)
4490 strcat(buf, format("%d/%d ", m_ptr->exp, r_ptr->next_exp));
4494 strcat(buf, "xxx ");
4498 if (MON_CSLEEP(m_ptr)) strcat(buf,"¿ç̲ ");
4499 if (MON_STUNNED(m_ptr)) strcat(buf,"ۯ۰ ");
4500 if (MON_MONFEAR(m_ptr)) strcat(buf,"¶²ÉÝ ");
4501 if (MON_CONFUSED(m_ptr)) strcat(buf,"º®Íð ");
4502 if (MON_INVULNER(m_ptr)) strcat(buf,"̵Ũ ");
4504 if (MON_CSLEEP(m_ptr)) strcat(buf,"sleeping ");
4505 if (MON_STUNNED(m_ptr)) strcat(buf,"stunned ");
4506 if (MON_MONFEAR(m_ptr)) strcat(buf,"scared ");
4507 if (MON_CONFUSED(m_ptr)) strcat(buf,"confused ");
4508 if (MON_INVULNER(m_ptr)) strcat(buf,"invulnerable ");
4510 buf[strlen(buf)-1] = '\0';
4513 /* HACK : Add the line to message buffer */
4515 p_ptr->window |= (PW_MESSAGE);
4518 if (m_ptr->ml) move_cursor_relative(m_ptr->fy, m_ptr->fx);
4521 Term_erase(0, 0, 255);
4523 /* Learn everything about this monster */
4524 if (lore_do_probe(m_ptr->r_idx))
4528 /* Get base name of monster */
4529 strcpy(buf, (r_name + r_ptr->name));
4532 /* Note that we learnt some new flags -Mogami- */
4533 msg_format("%s¤Ë¤Ä¤¤¤Æ¤µ¤é¤Ë¾Ü¤·¤¯¤Ê¤Ã¤¿µ¤¤¬¤¹¤ë¡£", buf);
4538 /* Note that we learnt some new flags -Mogami- */
4539 msg_format("You now know more about %s.", buf);
4541 /* Clear -more- prompt */
4557 chg_virtue(V_KNOWLEDGE, 1);
4560 msg_print("¤³¤ì¤ÇÁ´Éô¤Ç¤¹¡£");
4562 msg_print("That's all.");
4574 * The spell of destruction
4576 * This spell "deletes" monsters (instead of "killing" them).
4578 * Later we may use one function for both "destruction" and
4579 * "earthquake" by using the "full" to select "destruction".
4581 bool destroy_area(int y1, int x1, int r, bool in_generate)
4587 /* Prevent destruction of quest levels and town */
4588 if ((p_ptr->inside_quest && is_fixed_quest_idx(p_ptr->inside_quest)) || !dun_level)
4593 /* Lose monster light */
4594 if (!in_generate) clear_mon_lite();
4596 /* Big area of affect */
4597 for (y = (y1 - r); y <= (y1 + r); y++)
4599 for (x = (x1 - r); x <= (x1 + r); x++)
4601 /* Skip illegal grids */
4602 if (!in_bounds(y, x)) continue;
4604 /* Extract the distance */
4605 k = distance(y1, x1, y, x);
4607 /* Stay in the circle of death */
4608 if (k > r) continue;
4610 /* Access the grid */
4611 c_ptr = &cave[y][x];
4613 /* Lose room and vault */
4614 c_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY);
4616 /* Lose light and knowledge */
4617 c_ptr->info &= ~(CAVE_MARK | CAVE_GLOW | CAVE_KNOWN);
4619 if (!in_generate) /* Normal */
4622 c_ptr->info &= ~(CAVE_UNSAFE);
4624 /* Hack -- Notice player affect */
4625 if (player_bold(y, x))
4627 /* Hurt the player later */
4630 /* Do not hurt this grid */
4635 /* Hack -- Skip the epicenter */
4636 if ((y == y1) && (x == x1)) continue;
4640 monster_type *m_ptr = &m_list[c_ptr->m_idx];
4641 monster_race *r_ptr = &r_info[m_ptr->r_idx];
4643 if (in_generate) /* In generation */
4645 /* Delete the monster (if any) */
4646 delete_monster(y, x);
4648 else if (r_ptr->flags1 & RF1_QUESTOR)
4650 /* Heal the monster */
4651 m_ptr->hp = m_ptr->maxhp;
4653 /* Try to teleport away quest monsters */
4654 if (!teleport_away(c_ptr->m_idx, (r * 2) + 1, TELEPORT_DEC_VALOUR)) continue;
4658 if (record_named_pet && is_pet(m_ptr) && m_ptr->nickname)
4662 monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE);
4663 do_cmd_write_nikki(NIKKI_NAMED_PET, RECORD_NAMED_PET_DESTROY, m_name);
4666 /* Delete the monster (if any) */
4667 delete_monster(y, x);
4671 /* During generation, destroyed artifacts are "preserved" */
4672 if (preserve_mode || in_generate)
4674 s16b this_o_idx, next_o_idx = 0;
4676 /* Scan all objects in the grid */
4677 for (this_o_idx = c_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx)
4681 /* Acquire object */
4682 o_ptr = &o_list[this_o_idx];
4684 /* Acquire next object */
4685 next_o_idx = o_ptr->next_o_idx;
4687 /* Hack -- Preserve unknown artifacts */
4688 if (object_is_fixed_artifact(o_ptr) && (!object_is_known(o_ptr) || in_generate))
4690 /* Mega-Hack -- Preserve the artifact */
4691 a_info[o_ptr->name1].cur_num = 0;
4693 if (in_generate && cheat_peek)
4695 char o_name[MAX_NLEN];
4696 object_desc(o_name, o_ptr, (OD_NAME_ONLY | OD_STORE));
4698 msg_format("ÅÁÀâ¤Î¥¢¥¤¥Æ¥à (%s) ¤ÏÀ¸À®Ãæ¤Ë*Ç˲õ*¤µ¤ì¤¿¡£", o_name);
4700 msg_format("Artifact (%s) was *destroyed* during generation.", o_name);
4704 else if (in_generate && cheat_peek && o_ptr->art_name)
4707 msg_print("¥é¥ó¥À¥à¡¦¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Î1¤Ä¤ÏÀ¸À®Ãæ¤Ë*Ç˲õ*¤µ¤ì¤¿¡£");
4709 msg_print("One of the random artifacts was *destroyed* during generation.");
4715 /* Delete objects */
4716 delete_object(y, x);
4718 /* Destroy "non-permanent" grids */
4719 if (!cave_perma_grid(c_ptr))
4721 /* Wall (or floor) type */
4724 if (!in_generate) /* Normal */
4728 /* Create granite wall */
4729 cave_set_feat(y, x, feat_granite);
4733 /* Create quartz vein */
4734 cave_set_feat(y, x, feat_quartz_vein);
4738 /* Create magma vein */
4739 cave_set_feat(y, x, feat_magma_vein);
4744 cave_set_feat(y, x, floor_type[randint0(100)]);
4747 else /* In generation */
4751 /* Create granite wall */
4752 place_extra_grid(c_ptr);
4756 /* Create quartz vein */
4757 c_ptr->feat = feat_quartz_vein;
4761 /* Create magma vein */
4762 c_ptr->feat = feat_magma_vein;
4767 place_floor_grid(c_ptr);
4770 /* Clear garbage of hidden trap or door */
4779 /* Process "re-glowing" */
4780 for (y = (y1 - r); y <= (y1 + r); y++)
4782 for (x = (x1 - r); x <= (x1 + r); x++)
4784 /* Skip illegal grids */
4785 if (!in_bounds(y, x)) continue;
4787 /* Extract the distance */
4788 k = distance(y1, x1, y, x);
4790 /* Stay in the circle of death */
4791 if (k > r) continue;
4793 /* Access the grid */
4794 c_ptr = &cave[y][x];
4796 if (is_mirror_grid(c_ptr)) c_ptr->info |= CAVE_GLOW;
4797 else if (!(d_info[dungeon_type].flags1 & DF1_DARKNESS))
4802 for (i = 0; i < 9; i++)
4804 yy = y + ddy_ddd[i];
4805 xx = x + ddx_ddd[i];
4806 if (!in_bounds2(yy, xx)) continue;
4807 cc_ptr = &cave[yy][xx];
4808 if (have_flag(f_info[get_feat_mimic(cc_ptr)].flags, FF_GLOW))
4810 c_ptr->info |= CAVE_GLOW;
4818 /* Hack -- Affect player */
4823 msg_print("dz¤¨¤ë¤è¤¦¤ÊÁ®¸÷¤¬È¯À¸¤·¤¿¡ª");
4825 msg_print("There is a searing blast of light!");
4828 /* Blind the player */
4829 if (!p_ptr->resist_blind && !p_ptr->resist_lite)
4832 (void)set_blind(p_ptr->blind + 10 + randint1(10));
4838 /* Mega-Hack -- Forget the view and lite */
4839 p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE);
4842 p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MON_LITE | PU_MONSTERS);
4845 p_ptr->redraw |= (PR_MAP);
4848 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
4850 if (p_ptr->special_defense & NINJA_S_STEALTH)
4852 if (cave[py][px].info & CAVE_GLOW) set_superstealth(FALSE);
4862 * Induce an "earthquake" of the given radius at the given location.
4864 * This will turn some walls into floors and some floors into walls.
4866 * The player will take damage and "jump" into a safe grid if possible,
4867 * otherwise, he will "tunnel" through the rubble instantaneously.
4869 * Monsters will take damage, and "jump" into a safe grid if possible,
4870 * otherwise they will be "buried" in the rubble, disappearing from
4871 * the level in the same way that they do when genocided.
4873 * Note that thus the player and monsters (except eaters of walls and
4874 * passers through walls) will never occupy the same grid as a wall.
4875 * Note that as of now (2.7.8) no monster may occupy a "wall" grid, even
4876 * for a single turn, unless that monster can pass_walls or kill_walls.
4877 * This has allowed massive simplification of the "monster" code.
4879 bool earthquake_aux(int cy, int cx, int r, int m_idx)
4881 int i, t, y, x, yy, xx, dy, dx;
4883 int sn = 0, sy = 0, sx = 0;
4889 /* Prevent destruction of quest levels and town */
4890 if ((p_ptr->inside_quest && is_fixed_quest_idx(p_ptr->inside_quest)) || !dun_level)
4895 /* Paranoia -- Enforce maximum range */
4898 /* Clear the "maximal blast" area */
4899 for (y = 0; y < 32; y++)
4901 for (x = 0; x < 32; x++)
4907 /* Check around the epicenter */
4908 for (dy = -r; dy <= r; dy++)
4910 for (dx = -r; dx <= r; dx++)
4912 /* Extract the location */
4916 /* Skip illegal grids */
4917 if (!in_bounds(yy, xx)) continue;
4919 /* Skip distant grids */
4920 if (distance(cy, cx, yy, xx) > r) continue;
4922 /* Access the grid */
4923 c_ptr = &cave[yy][xx];
4925 /* Lose room and vault */
4926 c_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY | CAVE_UNSAFE);
4928 /* Lose light and knowledge */
4929 c_ptr->info &= ~(CAVE_GLOW | CAVE_MARK | CAVE_KNOWN);
4931 /* Skip the epicenter */
4932 if (!dx && !dy) continue;
4934 /* Skip most grids */
4935 if (randint0(100) < 85) continue;
4937 /* Damage this grid */
4938 map[16+yy-cy][16+xx-cx] = TRUE;
4940 /* Hack -- Take note of player damage */
4941 if (player_bold(yy, xx)) hurt = TRUE;
4945 /* First, affect the player (if necessary) */
4946 if (hurt && !p_ptr->pass_wall && !p_ptr->kill_wall)
4948 /* Check around the player */
4949 for (i = 0; i < 8; i++)
4951 /* Access the location */
4952 y = py + ddy_ddd[i];
4953 x = px + ddx_ddd[i];
4955 /* Skip non-empty grids */
4956 if (!cave_empty_bold(y, x)) continue;
4958 /* Important -- Skip "quake" grids */
4959 if (map[16+y-cy][16+x-cx]) continue;
4961 if (cave[y][x].m_idx) continue;
4963 /* Count "safe" grids */
4966 /* Randomize choice */
4967 if (randint0(sn) > 0) continue;
4969 /* Save the safe location */
4973 /* Random message */
4974 switch (randint1(3))
4979 msg_print("¥À¥ó¥¸¥ç¥ó¤ÎÊɤ¬Êø¤ì¤¿¡ª");
4981 msg_print("The cave ceiling collapses!");
4988 msg_print("¥À¥ó¥¸¥ç¥ó¤Î¾²¤¬ÉÔ¼«Á³¤Ë¤Í¤¸¶Ê¤¬¤Ã¤¿¡ª");
4990 msg_print("The cave floor twists in an unnatural way!");
4997 msg_print("¥À¥ó¥¸¥ç¥ó¤¬Íɤ줿¡ªÊø¤ì¤¿´ä¤¬Æ¬¤Ë¹ß¤Ã¤Æ¤¤¿¡ª");
4999 msg_print("The cave quakes! You are pummeled with debris!");
5005 /* Hurt the player a lot */
5008 /* Message and damage */
5010 msg_print("¤¢¤Ê¤¿¤Ï¤Ò¤É¤¤²ø²æ¤òÉé¤Ã¤¿¡ª");
5012 msg_print("You are severely crushed!");
5017 /* Destroy the grid, and push the player to safety */
5020 /* Calculate results */
5021 switch (randint1(3))
5026 msg_print("¹ß¤êÃí¤°´ä¤ò¤¦¤Þ¤¯Èò¤±¤¿¡ª");
5028 msg_print("You nimbly dodge the blast!");
5036 msg_print("´äÀФ¬¤¢¤Ê¤¿¤Ëľ·â¤·¤¿!");
5038 msg_print("You are bashed by rubble!");
5040 damage = damroll(10, 4);
5041 (void)set_stun(p_ptr->stun + randint1(50));
5047 msg_print("¤¢¤Ê¤¿¤Ï¾²¤ÈÊɤȤδ֤˶´¤Þ¤ì¤Æ¤·¤Þ¤Ã¤¿¡ª");
5049 msg_print("You are crushed between the floor and ceiling!");
5051 damage = damroll(10, 4);
5052 (void)set_stun(p_ptr->stun + randint1(50));
5057 /* Move the player to the safe location */
5058 (void)move_player_effect(sy, sx, MPE_DONT_PICKUP);
5061 /* Important -- no wall on player */
5062 map[16+py-cy][16+px-cx] = FALSE;
5064 /* Take some damage */
5072 monster_type *m_ptr = &m_list[m_idx];
5074 /* Get the monster's real name */
5075 monster_desc(m_name, m_ptr, MD_IGNORE_HALLU | MD_ASSUME_VISIBLE | MD_INDEF_VISIBLE);
5078 killer = format("%s¤Îµ¯¤³¤·¤¿ÃÏ¿Ì", m_name);
5080 killer = format("an earthquake caused by %s", m_name);
5088 killer = "an earthquake";
5092 take_hit(DAMAGE_ATTACK, damage, killer, -1);
5096 /* Examine the quaked region */
5097 for (dy = -r; dy <= r; dy++)
5099 for (dx = -r; dx <= r; dx++)
5101 /* Extract the location */
5105 /* Skip unaffected grids */
5106 if (!map[16+yy-cy][16+xx-cx]) continue;
5108 /* Access the grid */
5109 c_ptr = &cave[yy][xx];
5111 if (c_ptr->m_idx == p_ptr->riding) continue;
5113 /* Process monsters */
5116 monster_type *m_ptr = &m_list[c_ptr->m_idx];
5117 monster_race *r_ptr = &r_info[m_ptr->r_idx];
5119 /* Quest monsters */
5120 if (r_ptr->flags1 & RF1_QUESTOR)
5122 /* No wall on quest monsters */
5123 map[16+yy-cy][16+xx-cx] = FALSE;
5128 /* Most monsters cannot co-exist with rock */
5129 if (!(r_ptr->flags2 & (RF2_KILL_WALL)) &&
5130 !(r_ptr->flags2 & (RF2_PASS_WALL)))
5134 /* Assume not safe */
5137 /* Monster can move to escape the wall */
5138 if (!(r_ptr->flags1 & (RF1_NEVER_MOVE)))
5140 /* Look for safety */
5141 for (i = 0; i < 8; i++)
5143 /* Access the grid */
5144 y = yy + ddy_ddd[i];
5145 x = xx + ddx_ddd[i];
5147 /* Skip non-empty grids */
5148 if (!cave_empty_bold(y, x)) continue;
5150 /* Hack -- no safety on glyph of warding */
5151 if (is_glyph_grid(&cave[y][x])) continue;
5152 if (is_explosive_rune_grid(&cave[y][x])) continue;
5154 /* ... nor on the Pattern */
5155 if (pattern_tile(y, x)) continue;
5157 /* Important -- Skip "quake" grids */
5158 if (map[16+y-cy][16+x-cx]) continue;
5160 if (cave[y][x].m_idx) continue;
5161 if (player_bold(y, x)) continue;
5163 /* Count "safe" grids */
5166 /* Randomize choice */
5167 if (randint0(sn) > 0) continue;
5169 /* Save the safe grid */
5174 /* Describe the monster */
5175 monster_desc(m_name, m_ptr, 0);
5177 /* Scream in pain */
5179 if (!ignore_unview || is_seen(m_ptr)) msg_format("%^s¤Ï¶ìÄˤǵ㤤ï¤á¤¤¤¿¡ª", m_name);
5181 if (!ignore_unview || is_seen(m_ptr)) msg_format("%^s wails out in pain!", m_name);
5184 /* Take damage from the quake */
5185 damage = (sn ? damroll(4, 8) : (m_ptr->hp + 1));
5187 /* Monster is certainly awake */
5188 (void)set_monster_csleep(c_ptr->m_idx, 0);
5190 /* Apply damage directly */
5191 m_ptr->hp -= damage;
5193 /* Delete (not kill) "dead" monsters */
5198 if (!ignore_unview || is_seen(m_ptr)) msg_format("%^s¤Ï´äÀФËËä¤â¤ì¤Æ¤·¤Þ¤Ã¤¿¡ª", m_name);
5200 if (!ignore_unview || is_seen(m_ptr)) msg_format("%^s is embedded in the rock!", m_name);
5205 if (record_named_pet && is_pet(&m_list[c_ptr->m_idx]) && m_list[c_ptr->m_idx].nickname)
5209 monster_desc(m2_name, m_ptr, MD_INDEF_VISIBLE);
5210 do_cmd_write_nikki(NIKKI_NAMED_PET, RECORD_NAMED_PET_EARTHQUAKE, m2_name);
5214 /* Delete the monster */
5215 delete_monster(yy, xx);
5217 /* No longer safe */
5221 /* Hack -- Escape from the rock */
5224 int m_idx = cave[yy][xx].m_idx;
5226 /* Update the old location */
5227 cave[yy][xx].m_idx = 0;
5229 /* Update the new location */
5230 cave[sy][sx].m_idx = m_idx;
5232 /* Move the monster */
5236 /* Update the monster (new location) */
5237 update_mon(m_idx, TRUE);
5239 /* Redraw the old grid */
5242 /* Redraw the new grid */
5250 /* Lose monster light */
5253 /* Examine the quaked region */
5254 for (dy = -r; dy <= r; dy++)
5256 for (dx = -r; dx <= r; dx++)
5258 /* Extract the location */
5262 /* Skip unaffected grids */
5263 if (!map[16+yy-cy][16+xx-cx]) continue;
5265 /* Access the cave grid */
5266 c_ptr = &cave[yy][xx];
5268 /* Paranoia -- never affect player */
5269 /* if (player_bold(yy, xx)) continue; */
5271 /* Destroy location (if valid) */
5272 if (cave_valid_bold(yy, xx))
5274 /* Delete objects */
5275 delete_object(yy, xx);
5277 /* Wall (or floor) type */
5278 t = cave_have_flag_bold(yy, xx, FF_PROJECT) ? randint0(100) : 200;
5283 /* Create granite wall */
5284 cave_set_feat(yy, xx, feat_granite);
5290 /* Create quartz vein */
5291 cave_set_feat(yy, xx, feat_quartz_vein);
5297 /* Create magma vein */
5298 cave_set_feat(yy, xx, feat_magma_vein);
5305 cave_set_feat(yy, xx, floor_type[randint0(100)]);
5312 /* Process "re-glowing" */
5313 for (dy = -r; dy <= r; dy++)
5315 for (dx = -r; dx <= r; dx++)
5317 /* Extract the location */
5321 /* Skip illegal grids */
5322 if (!in_bounds(yy, xx)) continue;
5324 /* Skip distant grids */
5325 if (distance(cy, cx, yy, xx) > r) continue;
5327 /* Access the grid */
5328 c_ptr = &cave[yy][xx];
5330 if (is_mirror_grid(c_ptr)) c_ptr->info |= CAVE_GLOW;
5331 else if (!(d_info[dungeon_type].flags1 & DF1_DARKNESS))
5336 for (ii = 0; ii < 9; ii++)
5338 yyy = yy + ddy_ddd[ii];
5339 xxx = xx + ddx_ddd[ii];
5340 if (!in_bounds2(yyy, xxx)) continue;
5341 cc_ptr = &cave[yyy][xxx];
5342 if (have_flag(f_info[get_feat_mimic(cc_ptr)].flags, FF_GLOW))
5344 c_ptr->info |= CAVE_GLOW;
5353 /* Mega-Hack -- Forget the view and lite */
5354 p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE);
5357 p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MON_LITE | PU_MONSTERS);
5359 /* Update the health bar */
5360 p_ptr->redraw |= (PR_HEALTH | PR_UHEALTH);
5363 p_ptr->redraw |= (PR_MAP);
5366 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
5368 if (p_ptr->special_defense & NINJA_S_STEALTH)
5370 if (cave[py][px].info & CAVE_GLOW) set_superstealth(FALSE);
5377 bool earthquake(int cy, int cx, int r)
5379 return earthquake_aux(cy, cx, r, 0);
5383 void discharge_minion(void)
5388 for (i = 1; i < m_max; i++)
5390 monster_type *m_ptr = &m_list[i];
5391 if (!m_ptr->r_idx || !is_pet(m_ptr)) continue;
5392 if (m_ptr->nickname) okay = FALSE;
5394 if (!okay || p_ptr->riding)
5397 if (!get_check("ËÜÅö¤ËÁ´¥Ú¥Ã¥È¤òÇúÇˤ·¤Þ¤¹¤«¡©"))
5399 if (!get_check("You will blast all pets. Are you sure? "))
5403 for (i = 1; i < m_max; i++)
5406 monster_type *m_ptr = &m_list[i];
5407 monster_race *r_ptr;
5409 if (!m_ptr->r_idx || !is_pet(m_ptr)) continue;
5410 r_ptr = &r_info[m_ptr->r_idx];
5412 /* Uniques resist discharging */
5413 if (r_ptr->flags1 & RF1_UNIQUE)
5416 monster_desc(m_name, m_ptr, 0x00);
5418 msg_format("%s¤ÏÇúÇˤµ¤ì¤ë¤Î¤ò·ù¤¬¤ê¡¢¾¡¼ê¤Ë¼«Ê¬¤ÎÀ¤³¦¤Ø¤Èµ¢¤Ã¤¿¡£", m_name);
5420 msg_format("%^s resists to be blasted, and run away.", m_name);
5422 delete_monster_idx(i);
5425 dam = m_ptr->maxhp / 2;
5426 if (dam > 100) dam = (dam-100)/2 + 100;
5427 if (dam > 400) dam = (dam-400)/2 + 400;
5428 if (dam > 800) dam = 800;
5429 project(i, 2+(r_ptr->level/20), m_ptr->fy,
5430 m_ptr->fx, dam, GF_PLASMA,
5431 PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL, -1);
5433 if (record_named_pet && m_ptr->nickname)
5437 monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE);
5438 do_cmd_write_nikki(NIKKI_NAMED_PET, RECORD_NAMED_PET_BLAST, m_name);
5441 delete_monster_idx(i);
5447 * This routine clears the entire "temp" set.
5449 * This routine will Perma-Lite all "temp" grids.
5451 * This routine is used (only) by "lite_room()"
5453 * Dark grids are illuminated.
5455 * Also, process all affected monsters.
5457 * SMART monsters always wake up when illuminated
5458 * NORMAL monsters wake up 1/4 the time when illuminated
5459 * STUPID monsters wake up 1/10 the time when illuminated
5461 static void cave_temp_room_lite(void)
5465 /* Clear them all */
5466 for (i = 0; i < temp_n; i++)
5471 cave_type *c_ptr = &cave[y][x];
5473 /* No longer in the array */
5474 c_ptr->info &= ~(CAVE_TEMP);
5476 /* Update only non-CAVE_GLOW grids */
5477 /* if (c_ptr->info & (CAVE_GLOW)) continue; */
5480 c_ptr->info |= (CAVE_GLOW);
5482 /* Process affected monsters */
5487 monster_type *m_ptr = &m_list[c_ptr->m_idx];
5489 monster_race *r_ptr = &r_info[m_ptr->r_idx];
5491 /* Update the monster */
5492 update_mon(c_ptr->m_idx, FALSE);
5494 /* Stupid monsters rarely wake up */
5495 if (r_ptr->flags2 & (RF2_STUPID)) chance = 10;
5497 /* Smart monsters always wake up */
5498 if (r_ptr->flags2 & (RF2_SMART)) chance = 100;
5500 /* Sometimes monsters wake up */
5501 if (MON_CSLEEP(m_ptr) && (randint0(100) < chance))
5504 (void)set_monster_csleep(c_ptr->m_idx, 0);
5506 /* Notice the "waking up" */
5511 /* Acquire the monster name */
5512 monster_desc(m_name, m_ptr, 0);
5514 /* Dump a message */
5516 msg_format("%^s¤¬Ìܤò³Ð¤Þ¤·¤¿¡£", m_name);
5518 msg_format("%^s wakes up.", m_name);
5530 update_local_illumination(y, x);
5540 * This routine clears the entire "temp" set.
5542 * This routine will "darken" all "temp" grids.
5544 * In addition, some of these grids will be "unmarked".
5546 * This routine is used (only) by "unlite_room()"
5548 * Also, process all affected monsters
5550 static void cave_temp_room_unlite(void)
5554 /* Clear them all */
5555 for (i = 0; i < temp_n; i++)
5561 cave_type *c_ptr = &cave[y][x];
5562 bool do_dark = !is_mirror_grid(c_ptr);
5564 /* No longer in the array */
5565 c_ptr->info &= ~(CAVE_TEMP);
5567 /* Darken the grid */
5570 if (dun_level || !is_daytime())
5572 for (j = 0; j < 9; j++)
5574 int by = y + ddy_ddd[j];
5575 int bx = x + ddx_ddd[j];
5577 if (in_bounds2(by, bx))
5579 cave_type *cc_ptr = &cave[by][bx];
5581 if (have_flag(f_info[get_feat_mimic(cc_ptr)].flags, FF_GLOW))
5589 if (!do_dark) continue;
5592 c_ptr->info &= ~(CAVE_GLOW);
5594 /* Hack -- Forget "boring" grids */
5595 if (!have_flag(f_info[get_feat_mimic(c_ptr)].flags, FF_REMEMBER))
5597 /* Forget the grid */
5598 if (!view_torch_grids) c_ptr->info &= ~(CAVE_MARK);
5604 /* Process affected monsters */
5607 /* Update the monster */
5608 update_mon(c_ptr->m_idx, FALSE);
5614 update_local_illumination(y, x);
5624 * Determine how much contiguous open space this grid is next to
5626 static int next_to_open(int cy, int cx, bool (*pass_bold)(int, int))
5635 for (i = 0; i < 16; i++)
5637 y = cy + ddy_cdd[i % 8];
5638 x = cx + ddx_cdd[i % 8];
5640 /* Found a wall, break the length */
5641 if (!pass_bold(y, x))
5643 /* Track best length */
5657 return (MAX(len, blen));
5661 static int next_to_walls_adj(int cy, int cx, bool (*pass_bold)(int, int))
5669 for (i = 0; i < 8; i++)
5671 y = cy + ddy_ddd[i];
5672 x = cx + ddx_ddd[i];
5674 if (!pass_bold(y, x)) c++;
5682 * Aux function -- see below
5684 static void cave_temp_room_aux(int y, int x, bool only_room, bool (*pass_bold)(int, int))
5689 c_ptr = &cave[y][x];
5691 /* Avoid infinite recursion */
5692 if (c_ptr->info & (CAVE_TEMP)) return;
5694 /* Do not "leave" the current room */
5695 if (!(c_ptr->info & (CAVE_ROOM)))
5697 if (only_room) return;
5700 if (!in_bounds2(y, x)) return;
5702 /* Do not exceed the maximum spell range */
5703 if (distance(py, px, y, x) > MAX_RANGE) return;
5705 /* Verify this grid */
5707 * The reason why it is ==6 instead of >5 is that 8 is impossible
5708 * due to the check for cave_bold above.
5709 * 7 lights dead-end corridors (you need to do this for the
5710 * checkboard interesting rooms, so that the boundary is lit
5712 * This leaves only a check for 6 bounding walls!
5714 if (in_bounds(y, x) && pass_bold(y, x) &&
5715 (next_to_walls_adj(y, x, pass_bold) == 6) && (next_to_open(y, x, pass_bold) <= 1)) return;
5718 /* Paranoia -- verify space */
5719 if (temp_n == TEMP_MAX) return;
5721 /* Mark the grid as "seen" */
5722 c_ptr->info |= (CAVE_TEMP);
5724 /* Add it to the "seen" set */
5731 * Aux function -- see below
5733 static bool cave_pass_lite_bold(int y, int x)
5735 return cave_los_bold(y, x);
5739 * Aux function -- see below
5741 static void cave_temp_lite_room_aux(int y, int x)
5743 cave_temp_room_aux(y, x, FALSE, cave_pass_lite_bold);
5747 * Aux function -- see below
5749 static bool cave_pass_dark_bold(int y, int x)
5751 return cave_have_flag_bold(y, x, FF_PROJECT);
5755 * Aux function -- see below
5757 static void cave_temp_unlite_room_aux(int y, int x)
5759 cave_temp_room_aux(y, x, TRUE, cave_pass_dark_bold);
5766 * Illuminate any room containing the given location.
5768 void lite_room(int y1, int x1)
5772 /* Add the initial grid */
5773 cave_temp_lite_room_aux(y1, x1);
5775 /* While grids are in the queue, add their neighbors */
5776 for (i = 0; i < temp_n; i++)
5778 x = temp_x[i], y = temp_y[i];
5780 /* Walls get lit, but stop light */
5781 if (!cave_pass_lite_bold(y, x)) continue;
5783 /* Spread adjacent */
5784 cave_temp_lite_room_aux(y + 1, x);
5785 cave_temp_lite_room_aux(y - 1, x);
5786 cave_temp_lite_room_aux(y, x + 1);
5787 cave_temp_lite_room_aux(y, x - 1);
5789 /* Spread diagonal */
5790 cave_temp_lite_room_aux(y + 1, x + 1);
5791 cave_temp_lite_room_aux(y - 1, x - 1);
5792 cave_temp_lite_room_aux(y - 1, x + 1);
5793 cave_temp_lite_room_aux(y + 1, x - 1);
5796 /* Now, lite them all up at once */
5797 cave_temp_room_lite();
5799 if (p_ptr->special_defense & NINJA_S_STEALTH)
5801 if (cave[py][px].info & CAVE_GLOW) set_superstealth(FALSE);
5807 * Darken all rooms containing the given location
5809 void unlite_room(int y1, int x1)
5813 /* Add the initial grid */
5814 cave_temp_unlite_room_aux(y1, x1);
5816 /* Spread, breadth first */
5817 for (i = 0; i < temp_n; i++)
5819 x = temp_x[i], y = temp_y[i];
5821 /* Walls get dark, but stop darkness */
5822 if (!cave_pass_dark_bold(y, x)) continue;
5824 /* Spread adjacent */
5825 cave_temp_unlite_room_aux(y + 1, x);
5826 cave_temp_unlite_room_aux(y - 1, x);
5827 cave_temp_unlite_room_aux(y, x + 1);
5828 cave_temp_unlite_room_aux(y, x - 1);
5830 /* Spread diagonal */
5831 cave_temp_unlite_room_aux(y + 1, x + 1);
5832 cave_temp_unlite_room_aux(y - 1, x - 1);
5833 cave_temp_unlite_room_aux(y - 1, x + 1);
5834 cave_temp_unlite_room_aux(y + 1, x - 1);
5837 /* Now, darken them all at once */
5838 cave_temp_room_unlite();
5844 * Hack -- call light around the player
5845 * Affect all monsters in the projection radius
5847 bool lite_area(int dam, int rad)
5849 int flg = PROJECT_GRID | PROJECT_KILL;
5851 if (d_info[dungeon_type].flags1 & DF1_DARKNESS)
5854 msg_print("¥À¥ó¥¸¥ç¥ó¤¬¸÷¤òµÛ¼ý¤·¤¿¡£");
5856 msg_print("The darkness of this dungeon absorb your light.");
5861 /* Hack -- Message */
5865 msg_print("Çò¤¤¸÷¤¬ÊÕ¤ê¤òʤ¤Ã¤¿¡£");
5867 msg_print("You are surrounded by a white light.");
5872 /* Hook into the "project()" function */
5873 (void)project(0, rad, py, px, dam, GF_LITE_WEAK, flg, -1);
5875 /* Lite up the room */
5884 * Hack -- call darkness around the player
5885 * Affect all monsters in the projection radius
5887 bool unlite_area(int dam, int rad)
5889 int flg = PROJECT_GRID | PROJECT_KILL;
5891 /* Hack -- Message */
5895 msg_print("°Å°Ç¤¬ÊÕ¤ê¤òʤ¤Ã¤¿¡£");
5897 msg_print("Darkness surrounds you.");
5902 /* Hook into the "project()" function */
5903 (void)project(0, rad, py, px, dam, GF_DARK_WEAK, flg, -1);
5905 /* Lite up the room */
5906 unlite_room(py, px);
5916 * Stop if we hit a monster, act as a "ball"
5917 * Allow "target" mode to pass over monsters
5918 * Affect grids, objects, and monsters
5920 bool fire_ball(int typ, int dir, int dam, int rad)
5924 int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
5926 if (typ == GF_CONTROL_LIVING) flg|= PROJECT_HIDE;
5927 /* Use the given direction */
5928 tx = px + 99 * ddx[dir];
5929 ty = py + 99 * ddy[dir];
5931 /* Hack -- Use an actual "target" */
5932 if ((dir == 5) && target_okay())
5934 flg &= ~(PROJECT_STOP);
5939 /* Analyze the "dir" and the "target". Hurt items on floor. */
5940 return (project(0, rad, ty, tx, dam, typ, flg, -1));
5946 * Stop if we hit a monster, act as a "ball"
5947 * Allow "target" mode to pass over monsters
5948 * Affect grids, objects, and monsters
5950 bool fire_rocket(int typ, int dir, int dam, int rad)
5954 int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
5956 /* Use the given direction */
5957 tx = px + 99 * ddx[dir];
5958 ty = py + 99 * ddy[dir];
5960 /* Hack -- Use an actual "target" */
5961 if ((dir == 5) && target_okay())
5967 /* Analyze the "dir" and the "target". Hurt items on floor. */
5968 return (project(0, rad, ty, tx, dam, typ, flg, -1));
5974 * Stop if we hit a monster, act as a "ball"
5975 * Allow "target" mode to pass over monsters
5976 * Affect grids, objects, and monsters
5978 bool fire_ball_hide(int typ, int dir, int dam, int rad)
5982 int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_HIDE;
5984 /* Use the given direction */
5985 tx = px + 99 * ddx[dir];
5986 ty = py + 99 * ddy[dir];
5988 /* Hack -- Use an actual "target" */
5989 if ((dir == 5) && target_okay())
5991 flg &= ~(PROJECT_STOP);
5996 /* Analyze the "dir" and the "target". Hurt items on floor. */
5997 return (project(0, rad, ty, tx, dam, typ, flg, -1));
6002 * Cast a meteor spell, defined as a ball spell cast by an arbitary monster,
6003 * player, or outside source, that starts out at an arbitrary location, and
6004 * leaving no trail from the "caster" to the target. This function is
6005 * especially useful for bombardments and similar. -LM-
6007 * Option to hurt the player.
6009 bool fire_meteor(int who, int typ, int y, int x, int dam, int rad)
6011 int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
6013 /* Analyze the "target" and the caster. */
6014 return (project(who, rad, y, x, dam, typ, flg, -1));
6018 bool fire_blast(int typ, int dir, int dd, int ds, int num, int dev)
6024 int flg = PROJECT_FAST | PROJECT_THRU | PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE | PROJECT_GRID;
6029 /* Use the given direction */
6032 ly = ty = py + 20 * ddy[dir];
6033 lx = tx = px + 20 * ddx[dir];
6036 /* Use an actual "target" */
6037 else /* if (dir == 5) */
6042 lx = 20 * (tx - px) + px;
6043 ly = 20 * (ty - py) + py;
6046 ld = distance(py, px, ly, lx);
6049 for (i = 0; i < num; i++)
6053 /* Get targets for some bolts */
6054 y = rand_spread(ly, ld * dev / 20);
6055 x = rand_spread(lx, ld * dev / 20);
6057 if (distance(ly, lx, y, x) <= ld * dev / 20) break;
6060 /* Analyze the "dir" and the "target". */
6061 if (!project(0, 0, y, x, damroll(dd, ds), typ, flg, -1))
6072 * Switch position with a monster.
6074 bool teleport_swap(int dir)
6078 monster_type * m_ptr;
6079 monster_race * r_ptr;
6081 if ((dir == 5) && target_okay())
6091 c_ptr = &cave[ty][tx];
6093 if (p_ptr->anti_tele)
6096 msg_print("ÉԻ׵ĤÊÎϤ¬¥Æ¥ì¥Ý¡¼¥È¤òËɤ¤¤À¡ª");
6098 msg_print("A mysterious force prevents you from teleporting!");
6104 if (!c_ptr->m_idx || (c_ptr->m_idx == p_ptr->riding))
6107 msg_print("¤½¤ì¤È¤Ï¾ì½ê¤ò¸ò´¹¤Ç¤¤Þ¤»¤ó¡£");
6109 msg_print("You can't trade places with that!");
6117 if ((c_ptr->info & CAVE_ICKY) || (distance(ty, tx, py, px) > p_ptr->lev * 3 / 2 + 10))
6120 msg_print("¼ºÇÔ¤·¤¿¡£");
6122 msg_print("Failed to swap.");
6130 m_ptr = &m_list[c_ptr->m_idx];
6131 r_ptr = &r_info[m_ptr->r_idx];
6133 (void)set_monster_csleep(c_ptr->m_idx, 0);
6135 if (r_ptr->flagsr & RFR_RES_TELE)
6138 msg_print("¥Æ¥ì¥Ý¡¼¥È¤ò¼ÙË⤵¤ì¤¿¡ª");
6140 msg_print("Your teleportation is blocked!");
6143 if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE;
6149 sound(SOUND_TELEPORT);
6151 /* Swap the player and monster */
6152 (void)move_player_effect(ty, tx, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP);
6160 * Hack -- apply a "projection()" in a direction (or at the target)
6162 bool project_hook(int typ, int dir, int dam, int flg)
6166 /* Pass through the target if needed */
6167 flg |= (PROJECT_THRU);
6169 /* Use the given direction */
6173 /* Hack -- Use an actual "target" */
6174 if ((dir == 5) && target_okay())
6180 /* Analyze the "dir" and the "target", do NOT explode */
6181 return (project(0, 0, ty, tx, dam, typ, flg, -1));
6186 * Cast a bolt spell.
6187 * Stop if we hit a monster, as a "bolt".
6188 * Affect monsters and grids (not objects).
6190 bool fire_bolt(int typ, int dir, int dam)
6192 int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_GRID;
6193 if (typ != GF_ARROW) flg |= PROJECT_REFLECTABLE;
6194 return (project_hook(typ, dir, dam, flg));
6199 * Cast a beam spell.
6200 * Pass through monsters, as a "beam".
6201 * Affect monsters, grids and objects.
6203 bool fire_beam(int typ, int dir, int dam)
6205 int flg = PROJECT_BEAM | PROJECT_KILL | PROJECT_GRID | PROJECT_ITEM;
6206 return (project_hook(typ, dir, dam, flg));
6211 * Cast a bolt spell, or rarely, a beam spell
6213 bool fire_bolt_or_beam(int prob, int typ, int dir, int dam)
6215 if (randint0(100) < prob)
6217 return (fire_beam(typ, dir, dam));
6221 return (fire_bolt(typ, dir, dam));
6227 * Some of the old functions
6229 bool lite_line(int dir, int dam)
6231 int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_KILL;
6232 return (project_hook(GF_LITE_WEAK, dir, dam, flg));
6236 bool drain_life(int dir, int dam)
6238 int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
6239 return (project_hook(GF_OLD_DRAIN, dir, dam, flg));
6243 bool wall_to_mud(int dir, int dam)
6245 int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
6246 return (project_hook(GF_KILL_WALL, dir, dam, flg));
6250 bool wizard_lock(int dir)
6252 int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
6253 return (project_hook(GF_JAM_DOOR, dir, 20 + randint1(30), flg));
6257 bool destroy_door(int dir)
6259 int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM;
6260 return (project_hook(GF_KILL_DOOR, dir, 0, flg));
6264 bool disarm_trap(int dir)
6266 int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM;
6267 return (project_hook(GF_KILL_TRAP, dir, 0, flg));
6271 bool heal_monster(int dir, int dam)
6273 int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
6274 return (project_hook(GF_OLD_HEAL, dir, dam, flg));
6278 bool speed_monster(int dir, int power)
6280 int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
6281 return (project_hook(GF_OLD_SPEED, dir, power, flg));
6285 bool slow_monster(int dir, int power)
6287 int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
6288 return (project_hook(GF_OLD_SLOW, dir, power, flg));
6292 bool sleep_monster(int dir, int power)
6294 int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
6295 return (project_hook(GF_OLD_SLEEP, dir, power, flg));
6299 bool stasis_monster(int dir)
6301 return (fire_ball_hide(GF_STASIS, dir, p_ptr->lev*2, 0));
6305 bool stasis_evil(int dir)
6307 return (fire_ball_hide(GF_STASIS_EVIL, dir, p_ptr->lev*2, 0));
6311 bool confuse_monster(int dir, int plev)
6313 int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
6314 return (project_hook(GF_OLD_CONF, dir, plev, flg));
6318 bool stun_monster(int dir, int plev)
6320 int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
6321 return (project_hook(GF_STUN, dir, plev, flg));
6325 bool poly_monster(int dir, int power)
6327 int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
6328 bool tester = (project_hook(GF_OLD_POLY, dir, power, flg));
6330 chg_virtue(V_CHANCE, 1);
6335 bool clone_monster(int dir)
6337 int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
6338 return (project_hook(GF_OLD_CLONE, dir, 0, flg));
6342 bool fear_monster(int dir, int plev)
6344 int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
6345 return (project_hook(GF_TURN_ALL, dir, plev, flg));
6349 bool death_ray(int dir, int plev)
6351 int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
6352 return (project_hook(GF_DEATH_RAY, dir, plev * 200, flg));
6356 bool teleport_monster(int dir, int distance)
6358 int flg = PROJECT_BEAM | PROJECT_KILL;
6359 return (project_hook(GF_AWAY_ALL, dir, distance, flg));
6363 * Hooks -- affect adjacent grids (radius 1 ball attack)
6365 bool door_creation(void)
6367 int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
6368 return (project(0, 1, py, px, 0, GF_MAKE_DOOR, flg, -1));
6372 bool trap_creation(int y, int x)
6374 int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
6375 return (project(0, 1, y, x, 0, GF_MAKE_TRAP, flg, -1));
6379 bool tree_creation(void)
6381 int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
6382 return (project(0, 1, py, px, 0, GF_MAKE_TREE, flg, -1));
6386 bool glyph_creation(void)
6388 int flg = PROJECT_GRID | PROJECT_ITEM;
6389 return (project(0, 1, py, px, 0, GF_MAKE_GLYPH, flg, -1));
6393 bool wall_stone(void)
6395 int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
6397 bool dummy = (project(0, 1, py, px, 0, GF_STONE_WALL, flg, -1));
6400 p_ptr->update |= (PU_FLOW);
6403 p_ptr->redraw |= (PR_MAP);
6409 bool destroy_doors_touch(void)
6411 int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
6412 return (project(0, 1, py, px, 0, GF_KILL_DOOR, flg, -1));
6415 bool disarm_traps_touch(void)
6417 int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
6418 return (project(0, 1, py, px, 0, GF_KILL_TRAP, flg, -1));
6421 bool sleep_monsters_touch(void)
6423 int flg = PROJECT_KILL | PROJECT_HIDE;
6424 return (project(0, 1, py, px, p_ptr->lev, GF_OLD_SLEEP, flg, -1));
6428 bool animate_dead(int who, int y, int x)
6430 int flg = PROJECT_ITEM | PROJECT_HIDE;
6431 return (project(who, 5, y, x, 0, GF_ANIM_DEAD, flg, -1));
6435 void call_chaos(void)
6437 int Chaos_type, dummy, dir;
6438 int plev = p_ptr->lev;
6439 bool line_chaos = FALSE;
6441 int hurt_types[31] =
6443 GF_ELEC, GF_POIS, GF_ACID, GF_COLD,
6444 GF_FIRE, GF_MISSILE, GF_ARROW, GF_PLASMA,
6445 GF_HOLY_FIRE, GF_WATER, GF_LITE, GF_DARK,
6446 GF_FORCE, GF_INERTIA, GF_MANA, GF_METEOR,
6447 GF_ICE, GF_CHAOS, GF_NETHER, GF_DISENCHANT,
6448 GF_SHARDS, GF_SOUND, GF_NEXUS, GF_CONFUSION,
6449 GF_TIME, GF_GRAVITY, GF_ROCKET, GF_NUKE,
6450 GF_HELL_FIRE, GF_DISINTEGRATE, GF_PSY_SPEAR
6453 Chaos_type = hurt_types[randint0(31)];
6454 if (one_in_(4)) line_chaos = TRUE;
6458 for (dummy = 1; dummy < 10; dummy++)
6463 fire_beam(Chaos_type, dummy, 150);
6465 fire_ball(Chaos_type, dummy, 150, 2);
6469 else if (one_in_(3))
6471 fire_ball(Chaos_type, 0, 500, 8);
6475 if (!get_aim_dir(&dir)) return;
6477 fire_beam(Chaos_type, dir, 250);
6479 fire_ball(Chaos_type, dir, 250, 3 + (plev / 35));
6485 * Activate the evil Topi Ylinen curse
6486 * rr9: Stop the nasty things when a Cyberdemon is summoned
6487 * or the player gets paralyzed.
6489 bool activate_ty_curse(bool stop_ty, int *count)
6493 int flg = (PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_JUMP);
6497 switch (randint1(34))
6503 msg_print("ÃÏÌ̤¬Íɤ줿...");
6505 msg_print("The ground trembles...");
6508 earthquake(py, px, 5 + randint0(10));
6509 if (!one_in_(6)) break;
6514 int dam = damroll(10, 10);
6516 msg_print("½ã¿è¤ÊËâÎϤμ¡¸µ¤Ø¤ÎÈ⤬³«¤¤¤¿¡ª");
6518 msg_print("A portal opens to a plane of raw mana!");
6521 project(0, 8, py, px, dam, GF_MANA, flg, -1);
6523 take_hit(DAMAGE_NOESCAPE, dam, "½ã¿è¤ÊËâÎϤβòÊü", -1);
6525 take_hit(DAMAGE_NOESCAPE, dam, "released pure mana", -1);
6527 if (!one_in_(6)) break;
6533 msg_print("¼þ°Ï¤Î¶õ´Ö¤¬ÏĤó¤À¡ª");
6535 msg_print("Space warps about you!");
6538 teleport_player(damroll(10, 10), TELEPORT_PASSIVE);
6539 if (randint0(13)) (*count) += activate_hi_summon(py, px, FALSE);
6540 if (!one_in_(6)) break;
6544 msg_print("¥¨¥Í¥ë¥®¡¼¤Î¤¦¤Í¤ê¤ò´¶¤¸¤¿¡ª");
6546 msg_print("You feel a surge of energy!");
6552 project(0, 7, py, px, 50, GF_KILL_WALL, flg, -1);
6554 take_hit(DAMAGE_NOESCAPE, 50, "¥¨¥Í¥ë¥®¡¼¤Î¤¦¤Í¤ê", -1);
6556 take_hit(DAMAGE_NOESCAPE, 50, "surge of energy", -1);
6559 if (!one_in_(6)) break;
6560 case 1: case 2: case 3: case 16: case 17:
6561 aggravate_monsters(0);
6562 if (!one_in_(6)) break;
6563 case 4: case 5: case 6:
6564 (*count) += activate_hi_summon(py, px, FALSE);
6565 if (!one_in_(6)) break;
6566 case 7: case 8: case 9: case 18:
6567 (*count) += summon_specific(0, py, px, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
6568 if (!one_in_(6)) break;
6569 case 10: case 11: case 12:
6571 msg_print("À¸Ì¿ÎϤ¬ÂΤ«¤éµÛ¤¤¼è¤é¤ì¤¿µ¤¤¬¤¹¤ë¡ª");
6573 msg_print("You feel your life draining away...");
6576 lose_exp(p_ptr->exp / 16);
6577 if (!one_in_(6)) break;
6578 case 13: case 14: case 15: case 19: case 20:
6579 if (stop_ty || (p_ptr->free_act && (randint1(125) < p_ptr->skill_sav)) || (p_ptr->pclass == CLASS_BERSERKER))
6586 msg_print("ĦÁü¤Ë¤Ê¤Ã¤¿µ¤Ê¬¤À¡ª");
6588 msg_print("You feel like a statue!");
6591 if (p_ptr->free_act)
6592 set_paralyzed(p_ptr->paralyzed + randint1(3));
6594 set_paralyzed(p_ptr->paralyzed + randint1(13));
6597 if (!one_in_(6)) break;
6598 case 21: case 22: case 23:
6599 (void)do_dec_stat(randint0(6));
6600 if (!one_in_(6)) break;
6603 msg_print("¤Û¤¨¡©»ä¤Ïï¡©¤³¤³¤Ç²¿¤·¤Æ¤ë¡©");
6605 msg_print("Huh? Who am I? What am I doing here?");
6609 if (!one_in_(6)) break;
6612 * Only summon Cyberdemons deep in the dungeon.
6614 if ((dun_level > 65) && !stop_ty)
6616 (*count) += summon_cyber(-1, py, px);
6620 if (!one_in_(6)) break;
6626 (void)do_dec_stat(i);
6634 while (one_in_(3) && !stop_ty);
6640 int activate_hi_summon(int y, int x, bool can_pet)
6645 u32b mode = PM_ALLOW_GROUP;
6652 mode |= PM_FORCE_FRIENDLY;
6656 mode |= PM_FORCE_PET;
6661 if (!pet) mode |= PM_NO_PET;
6663 summon_lev = (pet ? p_ptr->lev * 2 / 3 + randint1(p_ptr->lev / 2) : dun_level);
6665 for (i = 0; i < (randint1(7) + (dun_level / 40)); i++)
6667 switch (randint1(25) + (dun_level / 20))
6670 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_ANT, mode);
6673 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_SPIDER, mode);
6676 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HOUND, mode);
6679 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HYDRA, mode);
6682 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_ANGEL, mode);
6685 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_UNDEAD, mode);
6688 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_DRAGON, mode);
6691 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_DEMON, mode);
6695 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_AMBERITES, (mode | PM_ALLOW_UNIQUE));
6699 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_UNIQUE, (mode | PM_ALLOW_UNIQUE));
6702 if (!can_pet) mode |= PM_ALLOW_UNIQUE;
6703 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HI_UNDEAD, mode);
6706 if (!can_pet) mode |= PM_ALLOW_UNIQUE;
6707 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HI_DRAGON, mode);
6710 count += summon_specific((pet ? -1 : 0), y, x, 100, SUMMON_CYBER, mode);
6713 if (!can_pet) mode |= PM_ALLOW_UNIQUE;
6714 count += summon_specific((pet ? -1 : 0), y, x,pet ? summon_lev : (((summon_lev * 3) / 2) + 5), 0, mode);
6723 int summon_cyber(int who, int y, int x)
6726 int max_cyber = (easy_band ? 1 : (dun_level / 50) + randint1(2));
6728 u32b mode = PM_ALLOW_GROUP;
6730 /* Summoned by a monster */
6733 monster_type *m_ptr = &m_list[who];
6734 if (is_pet(m_ptr)) mode |= PM_FORCE_PET;
6737 if (max_cyber > 4) max_cyber = 4;
6739 for (i = 0; i < max_cyber; i++)
6741 count += summon_specific(who, y, x, 100, SUMMON_CYBER, mode);
6748 void wall_breaker(void)
6752 int attempts = 1000;
6754 if (randint1(80 + p_ptr->lev) < 70)
6758 scatter(&y, &x, py, px, 4, 0);
6760 if (!cave_have_flag_bold(y, x, FF_PROJECT)) continue;
6762 if (!player_bold(y, x)) break;
6765 project(0, 0, y, x, 20 + randint1(30), GF_KILL_WALL,
6766 (PROJECT_BEAM | PROJECT_THRU | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL), -1);
6768 else if (randint1(100) > 30)
6770 earthquake(py, px, 1);
6774 int num = damroll(5, 3);
6776 for (i = 0; i < num; i++)
6780 scatter(&y, &x, py, px, 10, 0);
6782 if (!player_bold(y, x)) break;
6785 project(0, 0, y, x, 20 + randint1(30), GF_KILL_WALL,
6786 (PROJECT_BEAM | PROJECT_THRU | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL), -1);
6795 bool confuse_monsters(int dam)
6797 return (project_hack(GF_OLD_CONF, dam));
6804 bool charm_monsters(int dam)
6806 return (project_hack(GF_CHARM, dam));
6813 bool charm_animals(int dam)
6815 return (project_hack(GF_CONTROL_ANIMAL, dam));
6822 bool stun_monsters(int dam)
6824 return (project_hack(GF_STUN, dam));
6831 bool stasis_monsters(int dam)
6833 return (project_hack(GF_STASIS, dam));
6838 * Mindblast monsters
6840 bool mindblast_monsters(int dam)
6842 return (project_hack(GF_PSI, dam));
6847 * Banish all monsters
6849 bool banish_monsters(int dist)
6851 return (project_hack(GF_AWAY_ALL, dist));
6858 bool turn_evil(int dam)
6860 return (project_hack(GF_TURN_EVIL, dam));
6867 bool turn_monsters(int dam)
6869 return (project_hack(GF_TURN_ALL, dam));
6874 * Death-ray all monsters (note: OBSCENELY powerful)
6876 bool deathray_monsters(void)
6878 return (project_hack(GF_DEATH_RAY, p_ptr->lev * 200));
6882 bool charm_monster(int dir, int plev)
6884 int flg = PROJECT_STOP | PROJECT_KILL;
6885 return (project_hook(GF_CHARM, dir, plev, flg));
6889 bool control_one_undead(int dir, int plev)
6891 int flg = PROJECT_STOP | PROJECT_KILL;
6892 return (project_hook(GF_CONTROL_UNDEAD, dir, plev, flg));
6896 bool control_one_demon(int dir, int plev)
6898 int flg = PROJECT_STOP | PROJECT_KILL;
6899 return (project_hook(GF_CONTROL_DEMON, dir, plev, flg));
6903 bool charm_animal(int dir, int plev)
6905 int flg = PROJECT_STOP | PROJECT_KILL;
6906 return (project_hook(GF_CONTROL_ANIMAL, dir, plev, flg));
6910 bool charm_living(int dir, int plev)
6912 int flg = PROJECT_STOP | PROJECT_KILL;
6913 return (project_hook(GF_CONTROL_LIVING, dir, plev, flg));
6917 bool kawarimi(bool success)
6920 object_type *q_ptr = &forge;
6923 if (p_ptr->is_dead) return FALSE;
6924 if (p_ptr->confused || p_ptr->blind || p_ptr->paralyzed || p_ptr->image) return FALSE;
6925 if (randint0(200) < p_ptr->stun) return FALSE;
6927 if (!success && one_in_(3))
6930 msg_print("¼ºÇÔ¡ªÆ¨¤²¤é¤ì¤Ê¤«¤Ã¤¿¡£");
6932 msg_print("Failed! You couldn't run away.");
6934 p_ptr->special_defense &= ~(NINJA_KAWARIMI);
6935 p_ptr->redraw |= (PR_STATUS);
6942 teleport_player(10 + randint1(90), 0L);
6946 object_prep(q_ptr, lookup_kind(TV_STATUE, SV_WOODEN_STATUE));
6948 q_ptr->pval = MON_NINJA;
6950 /* Drop it in the dungeon */
6951 (void)drop_near(q_ptr, -1, y, x);
6954 if (success) msg_print("¹¶·â¤ò¼õ¤±¤ëÁ°¤ËÁÇÁ᤯¿È¤ò¤Ò¤ë¤¬¤¨¤·¤¿¡£");
6955 else msg_print("¼ºÇÔ¡ª¹¶·â¤ò¼õ¤±¤Æ¤·¤Þ¤Ã¤¿¡£");
6957 if (success) msg_print("You have turned around just before the attack hit you.");
6958 else msg_print("Failed! You are hit by the attack.");
6961 p_ptr->special_defense &= ~(NINJA_KAWARIMI);
6962 p_ptr->redraw |= (PR_STATUS);
6970 * "Rush Attack" routine for Samurai or Ninja
6971 * Return value is for checking "done"
6973 bool rush_attack(bool *mdeath)
6980 bool tmp_mdeath = FALSE;
6983 if (mdeath) *mdeath = FALSE;
6986 if (!get_aim_dir(&dir)) return FALSE;
6988 /* Use the given direction */
6989 tx = px + project_length * ddx[dir];
6990 ty = py + project_length * ddy[dir];
6992 /* Hack -- Use an actual "target" */
6993 if ((dir == 5) && target_okay())
6999 if (in_bounds(ty, tx)) tm_idx = cave[ty][tx].m_idx;
7001 path_n = project_path(path_g, project_length, py, px, ty, tx, PROJECT_STOP | PROJECT_KILL);
7004 /* No need to move */
7005 if (!path_n) return TRUE;
7007 /* Use ty and tx as to-move point */
7011 /* Project along the path */
7012 for (i = 0; i < path_n; i++)
7014 monster_type *m_ptr;
7016 int ny = GRID_Y(path_g[i]);
7017 int nx = GRID_X(path_g[i]);
7019 if (cave_empty_bold(ny, nx) && player_can_enter(cave[ny][nx].feat, 0))
7024 /* Go to next grid */
7028 if (!cave[ny][nx].m_idx)
7033 msg_print("¼ºÇÔ¡ª");
7035 msg_print("Failed!");
7041 msg_print("¤³¤³¤Ë¤ÏÆþ¿È¤Ç¤ÏÆþ¤ì¤Ê¤¤¡£");
7043 msg_print("You can't move to that place.");
7051 /* Move player before updating the monster */
7052 if (!player_bold(ty, tx)) teleport_player_to(ty, tx, TELEPORT_NONMAGICAL);
7054 /* Update the monster */
7055 update_mon(cave[ny][nx].m_idx, TRUE);
7057 /* Found a monster */
7058 m_ptr = &m_list[cave[ny][nx].m_idx];
7060 if (tm_idx != cave[ny][nx].m_idx)
7063 msg_format("%s%s¤¬Î©¤Á¤Õ¤µ¤¬¤Ã¤Æ¤¤¤ë¡ª", tm_idx ? "Ê̤Î" : "",
7064 m_ptr->ml ? "¥â¥ó¥¹¥¿¡¼" : "²¿¤«");
7066 msg_format("There is %s in the way!", m_ptr->ml ? (tm_idx ? "another monster" : "a monster") : "someone");
7069 else if (!player_bold(ty, tx))
7071 /* Hold the monster name */
7074 /* Get the monster name (BEFORE polymorphing) */
7075 monster_desc(m_name, m_ptr, 0);
7077 msg_format("ÁÇÁ᤯%s¤Î²û¤ËÆþ¤ê¹þ¤ó¤À¡ª", m_name);
7079 msg_format("You quickly jump in and attack %s!", m_name);
7083 if (!player_bold(ty, tx)) teleport_player_to(ty, tx, TELEPORT_NONMAGICAL);
7085 tmp_mdeath = py_attack(ny, nx, HISSATSU_NYUSIN);
7090 if (!moved && !player_bold(ty, tx)) teleport_player_to(ty, tx, TELEPORT_NONMAGICAL);
7092 if (mdeath) *mdeath = tmp_mdeath;
7098 * Remove all mirrors in this floor
7100 void remove_all_mirrors(bool explode)
7104 for (x = 0; x < cur_wid; x++)
7106 for (y = 0; y < cur_hgt; y++)
7108 if (is_mirror_grid(&cave[y][x]))
7110 remove_mirror(y, x);
7112 project(0, 2, y, x, p_ptr->lev / 2 + 5, GF_SHARDS,
7113 (PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_JUMP | PROJECT_NO_HANGEKI), -1);