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) */
17 * self-knowledge... idea from nethack. Useful for determining powers and
18 * resistences of items. It saves the screen, clears it, then starts listing
19 * attributes, a screenful at a time. (There are a LOT of attributes to
20 * list. It will probably take 2 or 3 screens for a powerful character whose
21 * using several artifacts...) -CFT
23 * It is now a lot more efficient. -BEN-
25 * See also "identify_fully()".
27 * XXX XXX XXX Use the "show_file()" method, perhaps.
29 void self_knowledge(void)
34 char v_string [8] [128];
35 char s_string [6] [128];
37 u32b flgs[TR_FLAG_SIZE];
46 int plev = p_ptr->lev;
50 for (j = 0; j < TR_FLAG_SIZE; j++)
53 p_ptr->knowledge |= (KNOW_STAT | KNOW_HPRATE);
57 percent = (int)(((long)p_ptr->player_hp[PY_MAX_LEVEL - 1] * 200L) /
59 ((PY_MAX_LEVEL - 1+3) * (p_ptr->hitdie + 1))));
62 sprintf(Dummy, "¸½ºß¤ÎÂÎÎÏ¥é¥ó¥¯ : %d/100", percent);
64 sprintf(Dummy, "Your current Life Rating is %d/100.", percent);
67 strcpy(buf[0], Dummy);
71 chg_virtue(V_KNOWLEDGE, 1);
72 chg_virtue(V_ENLIGHTEN, 1);
74 /* Acquire item flags from equipment */
75 for (k = INVEN_RARM; k < INVEN_TOTAL; k++)
77 u32b tflgs[TR_FLAG_SIZE];
79 o_ptr = &inventory[k];
81 /* Skip non-objects */
82 if (!o_ptr->k_idx) continue;
84 /* Extract the flags */
85 object_flags(o_ptr, tflgs);
88 for (j = 0; j < TR_FLAG_SIZE; j++)
93 info[i++] = "ǽÎϤκÇÂçÃÍ";
95 info[i++] = "Limits of maximum stats";
98 for (v_nr = 0; v_nr < 6; v_nr++)
102 sprintf(stat_desc, "%s 18/%d", stat_names[v_nr], p_ptr->stat_max_max[v_nr]-18);
104 strcpy(s_string[v_nr], stat_desc);
106 info[i++] = s_string[v_nr];
111 sprintf(Dummy, "¸½ºß¤Î°À : %s(%ld)", your_alignment(), p_ptr->align);
113 sprintf(Dummy, "Your alighnment : %s(%ld)", your_alignment(), p_ptr->align);
115 strcpy(buf[1], Dummy);
117 for (v_nr = 0; v_nr < 8; v_nr++)
121 int tester = p_ptr->virtues[v_nr];
123 strcpy(v_name, virtue[(p_ptr->vir_types[v_nr])-1]);
126 sprintf(vir_desc, "¤ª¤Ã¤È¡£%s¤Î¾ðÊó¤Ê¤·¡£", v_name);
128 sprintf(vir_desc, "Oops. No info about %s.", v_name);
132 sprintf(vir_desc, "[%s]¤ÎÂÐ¶Ë (%d)",
134 sprintf(vir_desc, "You are the polar opposite of %s (%d).",
137 else if (tester < -80)
139 sprintf(vir_desc, "[%s]¤ÎÂçŨ (%d)",
141 sprintf(vir_desc, "You are an arch-enemy of %s (%d).",
144 else if (tester < -60)
146 sprintf(vir_desc, "[%s]¤Î¶¯Å¨ (%d)",
148 sprintf(vir_desc, "You are a bitter enemy of %s (%d).",
151 else if (tester < -40)
153 sprintf(vir_desc, "[%s]¤ÎŨ (%d)",
155 sprintf(vir_desc, "You are an enemy of %s (%d).",
158 else if (tester < -20)
160 sprintf(vir_desc, "[%s]¤Îºá¼Ô (%d)",
162 sprintf(vir_desc, "You have sinned against %s (%d).",
167 sprintf(vir_desc, "[%s]¤ÎÌÂÆ»¼Ô (%d)",
169 sprintf(vir_desc, "You have strayed from the path of %s (%d).",
172 else if (tester == 0)
174 sprintf(vir_desc, "[%s]¤ÎÃæΩ¼Ô (%d)",
176 sprintf(vir_desc,"You are neutral to %s (%d).",
179 else if (tester < 20)
181 sprintf(vir_desc, "[%s]¤Î¾®ÆÁ¼Ô (%d)",
183 sprintf(vir_desc,"You are somewhat virtuous in %s (%d).",
186 else if (tester < 40)
188 sprintf(vir_desc, "[%s]¤ÎÃæÆÁ¼Ô (%d)",
190 sprintf(vir_desc,"You are virtuous in %s (%d).",
193 else if (tester < 60)
195 sprintf(vir_desc, "[%s]¤Î¹âÆÁ¼Ô (%d)",
197 sprintf(vir_desc,"You are very virtuous in %s (%d).",
200 else if (tester < 80)
202 sprintf(vir_desc, "[%s]¤ÎÇÆ¼Ô (%d)",
204 sprintf(vir_desc,"You are a champion of %s (%d).",
207 else if (tester < 100)
209 sprintf(vir_desc, "[%s]¤Î°ÎÂç¤ÊÇÆ¼Ô (%d)",
211 sprintf(vir_desc,"You are a great champion of %s (%d).",
216 sprintf(vir_desc, "[%s]¤Î¶ñ¸½¼Ô (%d)",
218 sprintf(vir_desc,"You are the living embodiment of %s (%d).",
222 strcpy(v_string[v_nr], vir_desc);
224 info[i++] = v_string[v_nr];
228 /* Racial powers... */
229 if (p_ptr->mimic_form)
231 switch (p_ptr->mimic_form)
234 case MIMIC_DEMON_LORD:
236 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤ÎÃϹö¤«²Ð±ê¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤¬¤Ç¤¤ë¡£(%d MP)", 3 * plev, 10+plev/3);
238 sprintf(Dummy, "You can nether breathe, dam. %d (cost %d).", 3 * plev, 10+plev/3);
247 sprintf(Dummy, "¤¢¤Ê¤¿¤ÏŨ¤«¤é %d-%d HP ¤ÎÀ¸Ì¿ÎϤòµÛ¼ý¤Ç¤¤ë¡£(%d MP)",
249 sprintf(Dummy, "You can steal life from a foe, dam. %d-%d (cost %d).",
252 plev + MAX(1, plev / 10), plev + plev * MAX(1, plev / 10), 1 + (plev / 3));
260 switch (p_ptr->prace)
266 info[i++] = "¤¢¤Ê¤¿¤Ï櫤ȥɥ¢¤È³¬Ãʤò´¶ÃΤǤ¤ë¡£(5 MP)";
268 info[i++] = "You can find traps, doors and stairs (cost 5).";
276 info[i++] = "¤¢¤Ê¤¿¤Ï¿©ÎÁ¤òÀ¸À®¤Ç¤¤ë¡£(10 MP)";
278 info[i++] = "You can produce food (cost 10).";
287 sprintf(Dummy, "¤¢¤Ê¤¿¤ÏÈÏ°Ï %d °ÊÆâ¤Ë¥Æ¥ì¥Ý¡¼¥È¤Ç¤¤ë¡£(%d MP)",
289 sprintf(Dummy, "You can teleport, range %d (cost %d).",
292 (1 + plev), (5 + (plev / 5)));
299 info[i++] = "¤¢¤Ê¤¿¤Ï¶²Éݤò½üµî¤Ç¤¤ë¡£(5 MP)";
301 info[i++] = "You can remove fear (cost 5).";
305 case RACE_HALF_TROLL:
308 info[i++] = "¤¢¤Ê¤¿¤Ï¶¸Ë½²½¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(12 MP) ";
310 info[i++] = "You enter berserk fury (cost 12).";
317 info[i++] = "¤¢¤Ê¤¿¤Ï¥·¥ã¥É¥¦¥·¥Õ¥È¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(50 MP)";
319 info[i++] = "You can Shift Shadows (cost 50).";
324 info[i++] = "¤¢¤Ê¤¿¤Ï¡Ö¥Ñ¥¿¡¼¥ó¡×¤ò¿´¤ËÉÁ¤¤¤ÆÊ⤯¤³¤È¤¬¤Ç¤¤ë¡£(75 MP)";
326 info[i++] = "You can mentally Walk the Pattern (cost 75).";
333 info[i++] = "¤¢¤Ê¤¿¤Ï¶¸Ë½²½¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(10 MP) ";
335 info[i++] = "You can enter berserk fury (cost 10).";
342 info[i++] = "¤¢¤Ê¤¿¤ÏÇúȯ¤Î¥ë¡¼¥ó¤ò»Å³Ý¤±¤ë¤³¤È¤¬¤Ç¤¤ë¡£(35 MP)";
344 info[i++] = "You can set an Explosive Rune (cost 35).";
348 case RACE_HALF_GIANT:
351 info[i++] = "¤¢¤Ê¤¿¤ÏÀФÎÊɤò²õ¤¹¤³¤È¤¬¤Ç¤¤ë¡£(10 MP)";
353 info[i++] = "You can break stone walls (cost 10).";
357 case RACE_HALF_TITAN:
360 info[i++] = "¤¢¤Ê¤¿¤Ï¥â¥ó¥¹¥¿¡¼¤ò¥¹¥¥ã¥ó¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(20 MP)";
362 info[i++] = "You can probe monsters (cost 20).";
370 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î´äÀФòÅꤲ¤ë¤³¤È¤¬¤Ç¤¤ë¡£(15 MP)",
372 sprintf(Dummy, "You can throw a boulder, dam. %d (cost 15).",
382 info[i++] = "¤¢¤Ê¤¿¤Ï¶²Éݤò¸Æ¤Óµ¯¤³¤¹¶«¤ÓÀ¼¤òȯ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(15 MP)";
384 info[i++] = "You can make a terrifying scream (cost 15).";
392 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î»À¤ò¿á¤¤«¤±¤ë¤³¤È¤¬¤Ç¤¤ë¡£(9 MP)", plev);
394 sprintf(Dummy, "You can spit acid, dam. %d (cost 9).", plev);
405 "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤ÎÆÇÌð¤òÅꤲ¤ë¤³¤È¤¬¤Ç¤¤ë¡£(8 MP)", plev);
407 "You can throw a dart of poison, dam. %d (cost 8).", plev);
417 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Þ¥¸¥Ã¥¯¡¦¥ß¥µ¥¤¥ë¤Î¼öʸ¤ò»È¤¨¤ë¡£(2 MP)",
419 sprintf(Dummy, "You can cast a Magic Missile, dam %d (cost 2).",
422 (3 + ((plev-1) / 5)));
428 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤¬¤Ç¤¤ë¡£(%d MP)", 2 * plev, plev);
430 sprintf(Dummy, "You can breathe, dam. %d (cost %d).", 2 * plev, plev);
435 case RACE_MIND_FLAYER:
438 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤ÎÀº¿À¹¶·â¤ò¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(12 MP)", plev);
440 sprintf(Dummy, "You can mind blast your enemies, dam %d (cost 12).", plev);
449 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò»È¤¨¤ë¡£(15 MP)", plev);
451 sprintf(Dummy, "You can cast a Fire Ball, dam. %d (cost 15).", plev);
459 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò»È¤¨¤ë¡£(15 MP)", plev);
461 sprintf(Dummy, "You can cast a Fire Bolt, dam. %d (cost 15).", plev);
470 info[i++] = "¤¢¤Ê¤¿¤Ï d20+30 ¥¿¡¼¥ó¤Î´ÖÈ©¤òÀФËÊѲ½¤µ¤»¤é¤ì¤ë¡£(15 MP)";
472 info[i++] = "You can turn your skin to stone, dur d20+30 (cost 15).";
480 info[i++] = "¤¢¤Ê¤¿¤Ï¼º¤Ã¤¿À¸Ì¿ÎϤò²óÉü¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(30 MP)";
482 info[i++] = "You can restore lost life forces (cost 30).";
490 sprintf(Dummy, "¤¢¤Ê¤¿¤ÏŨ¤«¤é %d-%d HP ¤ÎÀ¸Ì¿ÎϤòµÛ¼ý¤Ç¤¤ë¡£(%d MP)",
492 sprintf(Dummy, "You can steal life from a foe, dam. %d-%d (cost %d).",
495 plev + MAX(1, plev / 10), plev + plev * MAX(1, plev / 10), 1 + (plev / 3));
503 info[i++] = "¤¢¤Ê¤¿¤Ïµã¤¶«¤ó¤ÇŨ¤ò¶²Éݤµ¤»¤ë¤³¤È¤¬¤Ç¤¤ë¡£(3 MP)";
505 info[i++] = "You can wail to terrify your enemies (cost 3).";
514 info[i++] = "¤¢¤Ê¤¿¤ÏŨ¤ò̲¤é¤»¤ëËâË¡¤ÎÊ´¤òÅꤲ¤ë¤³¤È¤¬¤Ç¤¤ë¡£(12 MP)";
516 info[i++] = "You can throw magical dust which induces sleep (cost 12).";
523 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤ÎÃϹö¤«²Ð±ê¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤¬¤Ç¤¤ë¡£(%d MP)", 3 * plev, 10+plev/3);
525 sprintf(Dummy, "You can breathe nether, dam. %d (cost %d).", 3 * plev, 10+plev/3);
533 info[i++] = "¤¢¤Ê¤¿¤Ï d20+30 ¥¿¡¼¥ó¤Î´Ö²£¤Ë¿¤Ó¤ë¤³¤È¤¬¤Ç¤¤ë¡£(15 MP)";
535 info[i++] = "You can expand horizontally, dur d20+30 (cost 15).";
542 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥ì¥¤¥¬¥ó¤ò·â¤Ä¤³¤È¤¬¤Ç¤¤ë¡£(7 MP)", (plev + 1) / 2);
544 sprintf(Dummy, "You can fire a ray gun with damage %d (cost 7).", (plev+1)/2);
548 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Ö¥é¥¹¥¿¡¼¤ò·â¤Ä¤³¤È¤¬¤Ç¤¤ë¡£(13 MP)", plev);
550 sprintf(Dummy, "You can fire a blaster with damage %d (cost 13).", plev);
554 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Ð¥º¡¼¥«¤ò·â¤Ä¤³¤È¤¬¤Ç¤¤ë¡£(26 MP)", plev * 2);
556 sprintf(Dummy, "You can fire a bazooka with damage %d (cost 26).", plev * 2);
560 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Ó¡¼¥à¥¥ã¥Î¥ó¤ò·â¤Ä¤³¤È¤¬¤Ç¤¤ë¡£(40 MP)", plev * 2);
562 sprintf(Dummy, "You can fire a beam cannon with damage %d (cost 40).", plev * 2);
566 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥í¥±¥Ã¥È¤ò·â¤Ä¤³¤È¤¬¤Ç¤¤ë¡£(60 MP)", plev * 5);
568 sprintf(Dummy, "You can fire a rocket with damage %d (cost 60).", plev * 5);
578 switch(p_ptr->pclass)
584 info[i++] = "¤¢¤Ê¤¿¤Ï¥é¥ó¥À¥à¤ÊÊý¸þ¤ËÂФ·¤Æ¿ô²ó¹¶·â¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(75 MP)";
586 info[i++] = "You can attack some random directions at a time (cost 75).";
591 case CLASS_HIGH_MAGE:
596 info[i++] = "¤¢¤Ê¤¿¤Ï¥¢¥¤¥Æ¥à¤ÎËâÎϤòµÛ¼ý¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(1 MP)";
598 info[i++] = "You can absorb charges from an item (cost 1).";
603 if (is_good_realm(p_ptr->realm1))
608 info[i++] = "¤¢¤Ê¤¿¤ÏÉð´ï¤ò½ËÊ¡¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(70 MP)";
610 info[i++] = "You can bless a weapon (cost 70).";
619 info[i++] = "¤¢¤Ê¤¿¤Ï¼þ¤ê¤Î¤¹¤Ù¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¹¶·â¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(40 MP)";
621 info[i++] = "You can damages all monsters in sight (cost 40).";
630 info[i++] = "¤¢¤Ê¤¿¤Ï¹¶·â¤·¤Æ¨ºÂ¤Ëƨ¤²¤ë¤³¤È¤¬¤Ç¤¤ë¡£(12 MP)";
632 info[i++] = "You can hit a monster and teleport at a time (cost 12).";
640 info[i++] = "¤¢¤Ê¤¿¤Ï²øʪ¤òÄ´ºº¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(20 MP)";
642 info[i++] = "You can prove monsters (cost 20).";
647 if (is_good_realm(p_ptr->realm1))
652 info[i++] = "¤¢¤Ê¤¿¤ÏÀ»¤Ê¤ëÁä¤òÊü¤Ä¤³¤È¤¬¤Ç¤¤ë¡£(30 MP)";
654 info[i++] = "You can fires a holy spear (cost 30).";
663 info[i++] = "¤¢¤Ê¤¿¤ÏÀ¸Ì¿ÎϤò¸º¾¯¤µ¤»¤ëÁä¤òÊü¤Ä¤³¤È¤¬¤Ç¤¤ë¡£(30 MP)";
665 info[i++] = "You can fires a spear which drains vitality (cost 30).";
670 case CLASS_WARRIOR_MAGE:
674 info[i++] = "¤¢¤Ê¤¿¤Ï£È£Ð¤ò£Í£Ð¤ËÊÑ´¹¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(0 MP)";
676 info[i++] = "You can convert HP to SP (cost 0).";
679 info[i++] = "¤¢¤Ê¤¿¤Ï£Í£Ð¤ò£È£Ð¤ËÊÑ´¹¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(0 MP)";
681 info[i++] = "You can convert SP to HP (cost 0).";
685 case CLASS_CHAOS_WARRIOR:
689 info[i++] = "¤¢¤Ê¤¿¤Ï¼þ°Ï¤Ë²øʪ¤òÏǤ魯¸÷¤òȯÀ¸¤µ¤»¤ë¤³¤È¤¬¤Ç¤¤ë¡£(50 MP)";
691 info[i++] = "You can radiate light which confuses nearby monsters (cost 50).";
699 info[i++] = "¤¢¤Ê¤¿¤Ï¹½¤¨¤ë¤³¤È¤¬¤Ç¤¤ë¡£(0 MP)";
701 info[i++] = "You can assume a posture of special form (cost 0).";
707 info[i++] = "¤¢¤Ê¤¿¤ÏÄ̾ï¤Î2Çܤι¶·â¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤¤ë¡£(30 MP)";
709 info[i++] = "You can perform double attacks in a time (cost 30).";
713 case CLASS_MINDCRAFTER:
714 case CLASS_FORCETRAINER:
718 info[i++] = "¤¢¤Ê¤¿¤ÏÀº¿À¤ò½¸Ã椷¤Æ£Í£Ð¤ò²óÉü¤µ¤»¤ë¤³¤È¤¬¤Ç¤¤ë¡£(0 MP)";
720 info[i++] = "You can concentrate to regenerate your mana (cost 0).";
726 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ì¿¿¤ò»£±Æ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(0 MP)";
728 info[i++] = "You can take a photograph (cost 0).";
733 info[i++] = "¤¢¤Ê¤¿¤Ï¥¢¥¤¥Æ¥à¤ò´°Á´¤Ë´ÕÄꤹ¤ë¤³¤È¤¬¤Ç¤¤ë¡£(20 MP)";
735 info[i++] = "You can *identify* items (cost 20).";
743 info[i++] = "¤¢¤Ê¤¿¤Ï²øʪ¤ÎÆü칶·â¤ò¥À¥á¡¼¥¸2ÇܤǤޤͤ뤳¤È¤¬¤Ç¤¤ë¡£(100 MP)";
745 info[i++] = "You can imitate monster's special attacks with double damage (cost 100).";
749 case CLASS_BEASTMASTER:
751 info[i++] = "¤¢¤Ê¤¿¤Ï1ɤ¤ÎÀ¸Ì¿¤Î¤¢¤ë¥â¥ó¥¹¥¿¡¼¤ò»ÙÇÛ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(¥ì¥Ù¥ë/4 MP)";
753 info[i++] = "You can dominate a monster (cost level/4).";
758 info[i++] = "¤¢¤Ê¤¿¤Ï»ë³¦Æâ¤ÎÀ¸Ì¿¤Î¤¢¤ë¥â¥ó¥¹¥¿¡¼¤ò»ÙÇÛ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£((¥ì¥Ù¥ë+20)/2 MP)";
760 info[i++] = "You can dominate living monsters in sight (cost (level+20)/4).";
764 case CLASS_MAGIC_EATER:
766 info[i++] = "¤¢¤Ê¤¿¤Ï¾ó/ËâË¡ËÀ/¥í¥Ã¥É¤ÎËâÎϤò¼«Ê¬¤Î¤â¤Î¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
768 info[i++] = "You can absorb a staff, wand or rod itself.";
775 info[i++] = "¤¢¤Ê¤¿¤Ï1¥¿¡¼¥ó¤Ë2²óËâË¡¤ò¾§¤¨¤ë¤³¤È¤¬¤Ç¤¤ë¡£(77 MP)";
777 info[i++] = "You can cast two spells in one time (cost 77).";
784 info[i++] = "¤¢¤Ê¤¿¤ÏÀº¿À¤ò½¸Ã椷¤Æµ¤¹ç¤¤¤òί¤á¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
786 info[i++] = "You can concentrate to regenerate your mana.";
792 info[i++] = "¤¢¤Ê¤¿¤ÏÆüì¤Ê·¿¤Ç¹½¤¨¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
794 info[i++] = "You can assume a posture of special form.";
798 case CLASS_BLUE_MAGE:
800 info[i++] = "¤¢¤Ê¤¿¤ÏÁê¼ê¤Ë»È¤ï¤ì¤¿ËâË¡¤ò³Ø¤Ö¤³¤È¤¬¤Ç¤¤ë¡£";
802 info[i++] = "You can study spells which your enemy casts on you.";
809 info[i++] = "¤¢¤Ê¤¿¤Ï¥â¥ó¥¹¥¿¡¼¤Ë¾è¤Ã¤Æ̵ÍýÌðÍý¥Ú¥Ã¥È¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
811 info[i++] = "You can ride on a hostile monster forcibly to turn it into pet.";
815 case CLASS_BERSERKER:
819 info[i++] = "¤¢¤Ê¤¿¤Ï³¹¤È¥À¥ó¥¸¥ç¥ó¤Î´Ö¤ò¹Ô¤Í褹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
821 info[i++] = "You can travel between town and the depths.";
825 case CLASS_MIRROR_MASTER:
827 info[i++] = "¤¢¤Ê¤¿¤Ï¶À¤òºî¤ê½Ð¤¹¤³¤È¤¬¤Ç¤¤ë¡£(2 MP)";
829 info[i++] = "You can create a Mirror (cost 2).";
832 info[i++] = "¤¢¤Ê¤¿¤Ï¶À¤ò³ä¤ë¤³¤È¤¬¤Ç¤¤ë¡£(0 MP)";
834 info[i++] = "You can break distant Mirrors (cost 0).";
841 info[i++] = "¤¢¤Ê¤¿¤ÏÁÇÁ᤯°ÜÆ°¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
843 info[i++] = "You can walk extremery fast.";
851 if (p_ptr->muta1 & MUT1_SPIT_ACID)
854 info[i++] = "¤¢¤Ê¤¿¤Ï»À¤ò¿á¤¤«¤±¤ë¤³¤È¤¬¤Ç¤¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX1)";
856 info[i++] = "You can spit acid (dam lvl).";
860 if (p_ptr->muta1 & MUT1_BR_FIRE)
863 info[i++] = "¤¢¤Ê¤¿¤Ï±ê¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤¬¤Ç¤¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX2)";
865 info[i++] = "You can breathe fire (dam lvl * 2).";
869 if (p_ptr->muta1 & MUT1_HYPN_GAZE)
872 info[i++] = "¤¢¤Ê¤¿¤ÎâˤߤϺÅ̲¸ú²Ì¤ò¤â¤Ä¡£";
874 info[i++] = "Your gaze is hypnotic.";
878 if (p_ptr->muta1 & MUT1_TELEKINES)
881 info[i++] = "¤¢¤Ê¤¿¤ÏÇ°Æ°ÎϤò¤â¤Ã¤Æ¤¤¤ë¡£";
883 info[i++] = "You are telekinetic.";
887 if (p_ptr->muta1 & MUT1_VTELEPORT)
890 info[i++] = "¤¢¤Ê¤¿¤Ï¼«Ê¬¤Î°Õ»×¤Ç¥Æ¥ì¥Ý¡¼¥È¤Ç¤¤ë¡£";
892 info[i++] = "You can teleport at will.";
896 if (p_ptr->muta1 & MUT1_MIND_BLST)
899 info[i++] = "¤¢¤Ê¤¿¤ÏÀº¿À¹¶·â¤ò¹Ô¤¨¤ë¡£(¥À¥á¡¼¥¸ 3¡Á12d3)";
901 info[i++] = "You can Mind Blast your enemies (3 to 12d3 dam).";
905 if (p_ptr->muta1 & MUT1_RADIATION)
908 info[i++] = "¤¢¤Ê¤¿¤Ï¼«Ê¬¤Î°Õ»×¤Ç¶¯¤¤Êü¼ÍÀþ¤òȯÀ¸¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX2)";
910 info[i++] = "You can emit hard radiation at will (dam lvl * 2).";
914 if (p_ptr->muta1 & MUT1_VAMPIRISM)
917 info[i++] = "¤¢¤Ê¤¿¤ÏµÛ·ìµ´¤Î¤è¤¦¤ËŨ¤«¤éÀ¸Ì¿ÎϤòµÛ¼ý¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX2)";
919 info[i++] = "You can drain life from a foe like a vampire (dam lvl * 2).";
923 if (p_ptr->muta1 & MUT1_SMELL_MET)
926 info[i++] = "¤¢¤Ê¤¿¤Ï¶á¤¯¤Ë¤¢¤ëµ®¶â°¤ò¤«¤®Ê¬¤±¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
928 info[i++] = "You can smell nearby precious metal.";
932 if (p_ptr->muta1 & MUT1_SMELL_MON)
935 info[i++] = "¤¢¤Ê¤¿¤Ï¶á¤¯¤Î¥â¥ó¥¹¥¿¡¼¤Î¸ºß¤ò¤«¤®Ê¬¤±¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
937 info[i++] = "You can smell nearby monsters.";
941 if (p_ptr->muta1 & MUT1_BLINK)
944 info[i++] = "¤¢¤Ê¤¿¤Ïû¤¤µ÷Î¥¤ò¥Æ¥ì¥Ý¡¼¥È¤Ç¤¤ë¡£";
946 info[i++] = "You can teleport yourself short distances.";
950 if (p_ptr->muta1 & MUT1_EAT_ROCK)
953 info[i++] = "¤¢¤Ê¤¿¤Ï¹Å¤¤´ä¤ò¿©¤Ù¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
955 info[i++] = "You can consume solid rock.";
959 if (p_ptr->muta1 & MUT1_SWAP_POS)
962 info[i++] = "¤¢¤Ê¤¿¤Ï¾¤Î¼Ô¤È¾ì½ê¤òÆþ¤ìÂؤï¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
964 info[i++] = "You can switch locations with another being.";
968 if (p_ptr->muta1 & MUT1_SHRIEK)
971 info[i++] = "¤¢¤Ê¤¿¤Ï¿È¤ÎÌÓ¤â¤è¤À¤Ä¶«¤ÓÀ¼¤òȯ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX2)";
973 info[i++] = "You can emit a horrible shriek (dam 2 * lvl).";
977 if (p_ptr->muta1 & MUT1_ILLUMINE)
980 info[i++] = "¤¢¤Ê¤¿¤ÏÌÀ¤ë¤¤¸÷¤òÊü¤Ä¤³¤È¤¬¤Ç¤¤ë¡£";
982 info[i++] = "You can emit bright light.";
986 if (p_ptr->muta1 & MUT1_DET_CURSE)
989 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°¤ÊËâË¡¤Î´í¸±¤ò´¶¤¸¤È¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
991 info[i++] = "You can feel the danger of evil magic.";
995 if (p_ptr->muta1 & MUT1_BERSERK)
998 info[i++] = "¤¢¤Ê¤¿¤Ï¼«Ê¬¤Î°Õ»×¤Ç¶¸ÍðÀïÆ®¾õÂ֤ˤʤ뤳¤È¤¬¤Ç¤¤ë¡£";
1000 info[i++] = "You can drive yourself into a berserk frenzy.";
1004 if (p_ptr->muta1 & MUT1_POLYMORPH)
1007 info[i++] = "¤¢¤Ê¤¿¤Ï¼«Ê¬¤Î°Õ»Ö¤ÇÊѲ½¤Ç¤¤ë¡£";
1009 info[i++] = "You can polymorph yourself at will.";
1013 if (p_ptr->muta1 & MUT1_MIDAS_TCH)
1016 info[i++] = "¤¢¤Ê¤¿¤ÏÄ̾異¥¤¥Æ¥à¤ò¶â¤ËÊѤ¨¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
1018 info[i++] = "You can turn ordinary items to gold.";
1022 if (p_ptr->muta1 & MUT1_GROW_MOLD)
1025 info[i++] = "¤¢¤Ê¤¿¤Ï¼þ°Ï¤Ë¥¥Î¥³¤òÀ¸¤ä¤¹¤³¤È¤¬¤Ç¤¤ë¡£";
1027 info[i++] = "You can cause mold to grow near you.";
1031 if (p_ptr->muta1 & MUT1_RESIST)
1034 info[i++] = "¤¢¤Ê¤¿¤Ï¸µÁǤι¶·â¤ËÂФ·¤Æ¿È¤ò¹Å¤¯¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
1036 info[i++] = "You can harden yourself to the ravages of the elements.";
1040 if (p_ptr->muta1 & MUT1_EARTHQUAKE)
1043 info[i++] = "¤¢¤Ê¤¿¤Ï¼þ°Ï¤Î¥À¥ó¥¸¥ç¥ó¤òÊø²õ¤µ¤»¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
1045 info[i++] = "You can bring down the dungeon around your ears.";
1049 if (p_ptr->muta1 & MUT1_EAT_MAGIC)
1052 info[i++] = "¤¢¤Ê¤¿¤ÏËâË¡¤Î¥¨¥Í¥ë¥®¡¼¤ò¼«Ê¬¤Îʪ¤È¤·¤Æ»ÈÍѤǤ¤ë¡£";
1054 info[i++] = "You can consume magic energy for your own use.";
1058 if (p_ptr->muta1 & MUT1_WEIGH_MAG)
1061 info[i++] = "¤¢¤Ê¤¿¤Ï¼«Ê¬¤Ë±Æ¶Á¤òÍ¿¤¨¤ëËâË¡¤ÎÎϤò´¶¤¸¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
1063 info[i++] = "You can feel the strength of the magics affecting you.";
1067 if (p_ptr->muta1 & MUT1_STERILITY)
1070 info[i++] = "¤¢¤Ê¤¿¤Ï½¸ÃÄŪÀ¸¿£ÉÔǽ¤òµ¯¤³¤¹¤³¤È¤¬¤Ç¤¤ë¡£";
1072 info[i++] = "You can cause mass impotence.";
1076 if (p_ptr->muta1 & MUT1_PANIC_HIT)
1079 info[i++] = "¤¢¤Ê¤¿¤Ï¹¶·â¤·¤¿¸å¿È¤ò¼é¤ë¤¿¤áƨ¤²¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
1081 info[i++] = "You can run for your life after hitting something.";
1085 if (p_ptr->muta1 & MUT1_DAZZLE)
1088 info[i++] = "¤¢¤Ê¤¿¤Ïº®Íð¤ÈÌÕÌܤò°ú¤µ¯¤³¤¹Êü¼Íǽ¤òȯÀ¸¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£ ";
1090 info[i++] = "You can emit confusing, blinding radiation.";
1094 if (p_ptr->muta1 & MUT1_LASER_EYE)
1097 info[i++] = "¤¢¤Ê¤¿¤ÏÌܤ«¤é¥ì¡¼¥¶¡¼¸÷Àþ¤òȯ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX2)";
1099 info[i++] = "Your eyes can fire laser beams (dam 2 * lvl).";
1103 if (p_ptr->muta1 & MUT1_RECALL)
1106 info[i++] = "¤¢¤Ê¤¿¤Ï³¹¤È¥À¥ó¥¸¥ç¥ó¤Î´Ö¤ò¹Ô¤Í褹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
1108 info[i++] = "You can travel between town and the depths.";
1112 if (p_ptr->muta1 & MUT1_BANISH)
1115 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°¤Ê¥â¥ó¥¹¥¿¡¼¤òÃϹö¤ËÍî¤È¤¹¤³¤È¤¬¤Ç¤¤ë¡£";
1117 info[i++] = "You can send evil creatures directly to Hell.";
1121 if (p_ptr->muta1 & MUT1_COLD_TOUCH)
1124 info[i++] = "¤¢¤Ê¤¿¤ÏŨ¤ò¿¨¤Ã¤ÆÅà¤é¤»¤ë¤³¤È¤¬¤Ç¤¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX3)";
1126 info[i++] = "You can freeze things with a touch (dam 3 * lvl).";
1130 if (p_ptr->muta1 & MUT1_LAUNCHER)
1133 info[i++] = "¤¢¤Ê¤¿¤Ï¥¢¥¤¥Æ¥à¤òÎ϶¯¤¯Åꤲ¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
1135 info[i++] = "You can hurl objects with great force.";
1143 if (p_ptr->muta2 & MUT2_BERS_RAGE)
1146 info[i++] = "¤¢¤Ê¤¿¤Ï¶¸Àï»Î²½¤Îȯºî¤òµ¯¤³¤¹¡£";
1148 info[i++] = "You are subject to berserker fits.";
1152 if (p_ptr->muta2 & MUT2_COWARDICE)
1155 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹²²É¤ˤʤ롣";
1157 info[i++] = "You are subject to cowardice.";
1161 if (p_ptr->muta2 & MUT2_RTELEPORT)
1164 info[i++] = "¤¢¤Ê¤¿¤Ï¥é¥ó¥À¥à¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ë¡£";
1166 info[i++] = "You are teleporting randomly.";
1170 if (p_ptr->muta2 & MUT2_ALCOHOL)
1173 info[i++] = "¤¢¤Ê¤¿¤ÎÂΤϥ¢¥ë¥³¡¼¥ë¤òʬÈ礹¤ë¡£";
1175 info[i++] = "Your body produces alcohol.";
1179 if (p_ptr->muta2 & MUT2_HALLU)
1182 info[i++] = "¤¢¤Ê¤¿¤Ï¸¸³Ð¤ò°ú¤µ¯¤³¤¹Àº¿ÀºøÍð¤Ë¿¯¤µ¤ì¤Æ¤¤¤ë¡£";
1184 info[i++] = "You have a hallucinatory insanity.";
1188 if (p_ptr->muta2 & MUT2_FLATULENT)
1191 info[i++] = "¤¢¤Ê¤¿¤ÏÀ©¸æ¤Ç¤¤Ê¤¤¶¯Îõ¤ÊÕû¤ò¤³¤¯¡£";
1193 info[i++] = "You are subject to uncontrollable flatulence.";
1197 if (p_ptr->muta2 & MUT2_PROD_MANA)
1200 info[i++] = "¤¢¤Ê¤¿¤ÏÀ©¸æÉÔǽ¤ÊËâË¡¤Î¥¨¥Í¥ë¥®¡¼¤òȯ¤·¤Æ¤¤¤ë¡£";
1202 info[i++] = "You are producing magical energy uncontrollably.";
1206 if (p_ptr->muta2 & MUT2_ATT_DEMON)
1209 info[i++] = "¤¢¤Ê¤¿¤Ï¥Ç¡¼¥â¥ó¤ò°ú¤¤Ä¤±¤ë¡£";
1211 info[i++] = "You attract demons.";
1215 if (p_ptr->muta2 & MUT2_SCOR_TAIL)
1218 info[i++] = "¤¢¤Ê¤¿¤Ï¥µ¥½¥ê¤Î¿¬Èø¤¬À¸¤¨¤Æ¤¤¤ë¡£(ÆÇ¡¢¥À¥á¡¼¥¸ 3d7)";
1220 info[i++] = "You have a scorpion tail (poison, 3d7).";
1224 if (p_ptr->muta2 & MUT2_HORNS)
1227 info[i++] = "¤¢¤Ê¤¿¤Ï³Ñ¤¬À¸¤¨¤Æ¤¤¤ë¡£(¥À¥á¡¼¥¸ 2d6)";
1229 info[i++] = "You have horns (dam. 2d6).";
1233 if (p_ptr->muta2 & MUT2_BEAK)
1236 info[i++] = "¤¢¤Ê¤¿¤Ï¥¯¥Á¥Ð¥·¤¬À¸¤¨¤Æ¤¤¤ë¡£(¥À¥á¡¼¥¸ 2d4)";
1238 info[i++] = "You have a beak (dam. 2d4).";
1242 if (p_ptr->muta2 & MUT2_SPEED_FLUX)
1245 info[i++] = "¤¢¤Ê¤¿¤Ï¥é¥ó¥À¥à¤ËÁ᤯ư¤¤¤¿¤êÃÙ¤¯Æ°¤¤¤¿¤ê¤¹¤ë¡£";
1247 info[i++] = "You move faster or slower randomly.";
1251 if (p_ptr->muta2 & MUT2_BANISH_ALL)
1254 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹¶á¤¯¤Î¥â¥ó¥¹¥¿¡¼¤ò¾ÃÌǤµ¤»¤ë¡£";
1256 info[i++] = "You sometimes cause nearby creatures to vanish.";
1260 if (p_ptr->muta2 & MUT2_EAT_LIGHT)
1263 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹¼þ°Ï¤Î¸÷¤òµÛ¼ý¤·¤Æ±ÉÍܤˤ¹¤ë¡£";
1265 info[i++] = "You sometimes feed off of the light around you.";
1269 if (p_ptr->muta2 & MUT2_TRUNK)
1272 info[i++] = "¤¢¤Ê¤¿¤Ï¾Ý¤Î¤è¤¦¤ÊÉ¡¤ò»ý¤Ã¤Æ¤¤¤ë¡£(¥À¥á¡¼¥¸ 1d4)";
1274 info[i++] = "You have an elephantine trunk (dam 1d4).";
1278 if (p_ptr->muta2 & MUT2_ATT_ANIMAL)
1281 info[i++] = "¤¢¤Ê¤¿¤Ïưʪ¤ò°ú¤¤Ä¤±¤ë¡£";
1283 info[i++] = "You attract animals.";
1287 if (p_ptr->muta2 & MUT2_TENTACLES)
1290 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°¤Ê¿¨¼ê¤ò»ý¤Ã¤Æ¤¤¤ë¡£(¥À¥á¡¼¥¸ 2d5)";
1292 info[i++] = "You have evil looking tentacles (dam 2d5).";
1296 if (p_ptr->muta2 & MUT2_RAW_CHAOS)
1299 info[i++] = "¤¢¤Ê¤¿¤Ï¤·¤Ð¤·¤Ð½ã¥«¥ª¥¹¤ËÊñ¤Þ¤ì¤ë¡£";
1301 info[i++] = "You occasionally are surrounded with raw chaos.";
1305 if (p_ptr->muta2 & MUT2_NORMALITY)
1308 info[i++] = "¤¢¤Ê¤¿¤ÏÊÑ°Û¤·¤Æ¤¤¤¿¤¬¡¢²óÉü¤·¤Æ¤¤Æ¤¤¤ë¡£";
1310 info[i++] = "You may be mutated, but you're recovering.";
1314 if (p_ptr->muta2 & MUT2_WRAITH)
1317 info[i++] = "¤¢¤Ê¤¿¤ÎÆùÂΤÏÍ©Â⽤·¤¿¤ê¼ÂÂ⽤·¤¿¤ê¤¹¤ë¡£";
1319 info[i++] = "You fade in and out of physical reality.";
1323 if (p_ptr->muta2 & MUT2_POLY_WOUND)
1326 info[i++] = "¤¢¤Ê¤¿¤Î·ò¹¯¤Ï¥«¥ª¥¹¤ÎÎϤ˱ƶÁ¤ò¼õ¤±¤ë¡£";
1328 info[i++] = "Your health is subject to chaotic forces.";
1332 if (p_ptr->muta2 & MUT2_WASTING)
1335 info[i++] = "¤¢¤Ê¤¿¤Ï¿ê¼å¤¹¤ë¶²¤í¤·¤¤Éµ¤¤Ë¤«¤«¤Ã¤Æ¤¤¤ë¡£";
1337 info[i++] = "You have a horrible wasting disease.";
1341 if (p_ptr->muta2 & MUT2_ATT_DRAGON)
1344 info[i++] = "¤¢¤Ê¤¿¤Ï¥É¥é¥´¥ó¤ò°ú¤¤Ä¤±¤ë¡£";
1346 info[i++] = "You attract dragons.";
1350 if (p_ptr->muta2 & MUT2_WEIRD_MIND)
1353 info[i++] = "¤¢¤Ê¤¿¤ÎÀº¿À¤Ï¥é¥ó¥À¥à¤Ë³ÈÂ礷¤¿¤ê½Ì¾®¤·¤¿¤ê¤·¤Æ¤¤¤ë¡£";
1355 info[i++] = "Your mind randomly expands and contracts.";
1359 if (p_ptr->muta2 & MUT2_NAUSEA)
1362 info[i++] = "¤¢¤Ê¤¿¤Î°ß¤ÏÈó¾ï¤ËÍî¤ÁÃ夤¬¤Ê¤¤¡£";
1364 info[i++] = "You have a seriously upset stomach.";
1368 if (p_ptr->muta2 & MUT2_CHAOS_GIFT)
1371 info[i++] = "¤¢¤Ê¤¿¤Ï¥«¥ª¥¹¤Î¼é¸î°Ë⤫¤éË«Èþ¤ò¤¦¤±¤È¤ë¡£";
1373 info[i++] = "Chaos deities give you gifts.";
1377 if (p_ptr->muta2 & MUT2_WALK_SHAD)
1380 info[i++] = "¤¢¤Ê¤¿¤Ï¤·¤Ð¤·¤Ð¾¤Î¡Ö±Æ¡×¤Ë̤¤¹þ¤à¡£";
1382 info[i++] = "You occasionally stumble into other shadows.";
1386 if (p_ptr->muta2 & MUT2_WARNING)
1389 info[i++] = "¤¢¤Ê¤¿¤ÏŨ¤Ë´Ø¤¹¤ë·Ù¹ð¤ò´¶¤¸¤ë¡£";
1391 info[i++] = "You receive warnings about your foes.";
1395 if (p_ptr->muta2 & MUT2_INVULN)
1398 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹É餱ÃΤ餺¤Êµ¤Ê¬¤Ë¤Ê¤ë¡£";
1400 info[i++] = "You occasionally feel invincible.";
1404 if (p_ptr->muta2 & MUT2_SP_TO_HP)
1407 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹·ì¤¬¶ÚÆù¤Ë¤É¤Ã¤Èή¤ì¤ë¡£";
1409 info[i++] = "Your blood sometimes rushes to your muscles.";
1413 if (p_ptr->muta2 & MUT2_HP_TO_SP)
1416 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹Æ¬¤Ë·ì¤¬¤É¤Ã¤Èή¤ì¤ë¡£";
1418 info[i++] = "Your blood sometimes rushes to your head.";
1422 if (p_ptr->muta2 & MUT2_DISARM)
1425 info[i++] = "¤¢¤Ê¤¿¤Ï¤è¤¯¤Ä¤Þ¤Å¤¤¤Æʪ¤òÍî¤È¤¹¡£";
1427 info[i++] = "You occasionally stumble and drop things.";
1435 if (p_ptr->muta3 & MUT3_HYPER_STR)
1438 info[i++] = "¤¢¤Ê¤¿¤ÏĶ¿ÍŪ¤Ë¶¯¤¤¡£(ÏÓÎÏ+4)";
1440 info[i++] = "You are superhumanly strong (+4 STR).";
1444 if (p_ptr->muta3 & MUT3_PUNY)
1447 info[i++] = "¤¢¤Ê¤¿¤Ïµõ¼å¤À¡£(ÏÓÎÏ-4)";
1449 info[i++] = "You are puny (-4 STR).";
1453 if (p_ptr->muta3 & MUT3_HYPER_INT)
1456 info[i++] = "¤¢¤Ê¤¿¤ÎǾ¤ÏÀ¸ÂÎ¥³¥ó¥Ô¥å¡¼¥¿¤À¡£(ÃÎǽ¡õ¸¤µ+4)";
1458 info[i++] = "Your brain is a living computer (+4 INT/WIS).";
1462 if (p_ptr->muta3 & MUT3_MORONIC)
1465 info[i++] = "¤¢¤Ê¤¿¤ÏÀº¿ÀÇö¼å¤À¡£(ÃÎǽ¡õ¸¤µ-4)";
1467 info[i++] = "You are moronic (-4 INT/WIS).";
1471 if (p_ptr->muta3 & MUT3_RESILIENT)
1474 info[i++] = "¤¢¤Ê¤¿¤ÏÈó¾ï¤Ë¥¿¥Õ¤À¡£(Âѵ×+4)";
1476 info[i++] = "You are very resilient (+4 CON).";
1480 if (p_ptr->muta3 & MUT3_XTRA_FAT)
1483 info[i++] = "¤¢¤Ê¤¿¤Ï¶Ëü¤ËÂÀ¤Ã¤Æ¤¤¤ë¡£(Âѵ×+2,¥¹¥Ô¡¼¥É-2)";
1485 info[i++] = "You are extremely fat (+2 CON, -2 speed).";
1489 if (p_ptr->muta3 & MUT3_ALBINO)
1492 info[i++] = "¤¢¤Ê¤¿¤Ï¥¢¥ë¥Ó¥Î¤À¡£(Âѵ×-4)";
1494 info[i++] = "You are albino (-4 CON).";
1498 if (p_ptr->muta3 & MUT3_FLESH_ROT)
1501 info[i++] = "¤¢¤Ê¤¿¤ÎÆùÂΤÏÉåÇÔ¤·¤Æ¤¤¤ë¡£(Âѵ×-2,Ì¥ÎÏ-1)";
1503 info[i++] = "Your flesh is rotting (-2 CON, -1 CHR).";
1507 if (p_ptr->muta3 & MUT3_SILLY_VOI)
1510 info[i++] = "¤¢¤Ê¤¿¤ÎÀ¼¤Ï´ÖÈ´¤±¤Ê¥¡¼¥¡¼À¼¤À¡£(Ì¥ÎÏ-4)";
1512 info[i++] = "Your voice is a silly squeak (-4 CHR).";
1516 if (p_ptr->muta3 & MUT3_BLANK_FAC)
1519 info[i++] = "¤¢¤Ê¤¿¤Ï¤Î¤Ã¤Ú¤é¤Ü¤¦¤À¡£(Ì¥ÎÏ-1)";
1521 info[i++] = "Your face is featureless (-1 CHR).";
1525 if (p_ptr->muta3 & MUT3_ILL_NORM)
1528 info[i++] = "¤¢¤Ê¤¿¤Ï¸¸±Æ¤Ëʤ¤ï¤ì¤Æ¤¤¤ë¡£";
1530 info[i++] = "Your appearance is masked with illusion.";
1534 if (p_ptr->muta3 & MUT3_XTRA_EYES)
1537 info[i++] = "¤¢¤Ê¤¿¤Ï;ʬ¤ËÆó¤Ä¤ÎÌܤò»ý¤Ã¤Æ¤¤¤ë¡£(õº÷+15)";
1539 info[i++] = "You have an extra pair of eyes (+15 search).";
1543 if (p_ptr->muta3 & MUT3_MAGIC_RES)
1546 info[i++] = "¤¢¤Ê¤¿¤ÏËâË¡¤Ø¤ÎÂÑÀ¤ò¤â¤Ã¤Æ¤¤¤ë¡£";
1548 info[i++] = "You are resistant to magic.";
1552 if (p_ptr->muta3 & MUT3_XTRA_NOIS)
1555 info[i++] = "¤¢¤Ê¤¿¤ÏÊѤʲ»¤òȯ¤·¤Æ¤¤¤ë¡£(±£Ì©-3)";
1557 info[i++] = "You make a lot of strange noise (-3 stealth).";
1561 if (p_ptr->muta3 & MUT3_INFRAVIS)
1564 info[i++] = "¤¢¤Ê¤¿¤ÏÁÇÀ²¤é¤·¤¤ÀÖ³°Àþ»ëÎϤò»ý¤Ã¤Æ¤¤¤ë¡£(+3)";
1566 info[i++] = "You have remarkable infravision (+3).";
1570 if (p_ptr->muta3 & MUT3_XTRA_LEGS)
1573 info[i++] = "¤¢¤Ê¤¿¤Ï;ʬ¤ËÆóËܤΤ¬À¸¤¨¤Æ¤¤¤ë¡£(²Ã®+3)";
1575 info[i++] = "You have an extra pair of legs (+3 speed).";
1579 if (p_ptr->muta3 & MUT3_SHORT_LEG)
1582 info[i++] = "¤¢¤Ê¤¿¤Î¤Ïû¤¤Æ͵¯¤À¡£(²Ã®-3)";
1584 info[i++] = "Your legs are short stubs (-3 speed).";
1588 if (p_ptr->muta3 & MUT3_ELEC_TOUC)
1591 info[i++] = "¤¢¤Ê¤¿¤Î·ì´É¤Ë¤ÏÅÅή¤¬Î®¤ì¤Æ¤¤¤ë¡£";
1593 info[i++] = "Electricity is running through your veins.";
1597 if (p_ptr->muta3 & MUT3_FIRE_BODY)
1600 info[i++] = "¤¢¤Ê¤¿¤ÎÂΤϱê¤Ë¤Ä¤Ä¤Þ¤ì¤Æ¤¤¤ë¡£";
1602 info[i++] = "Your body is enveloped in flames.";
1605 if (p_ptr->muta3 & MUT3_WART_SKIN)
1608 info[i++] = "¤¢¤Ê¤¿¤ÎÈ©¤Ï¥¤¥Ü¤ËÈï¤ï¤ì¤Æ¤¤¤ë¡£(Ì¥ÎÏ-2, AC+5)";
1610 info[i++] = "Your skin is covered with warts (-2 CHR, +5 AC).";
1614 if (p_ptr->muta3 & MUT3_SCALES)
1617 info[i++] = "¤¢¤Ê¤¿¤ÎÈ©¤ÏÎڤˤʤäƤ¤¤ë¡£(Ì¥ÎÏ-1, AC+10)";
1619 info[i++] = "Your skin has turned into scales (-1 CHR, +10 AC).";
1623 if (p_ptr->muta3 & MUT3_IRON_SKIN)
1626 info[i++] = "¤¢¤Ê¤¿¤ÎÈ©¤ÏÅ´¤Ç¤Ç¤¤Æ¤¤¤ë¡£(´ïÍÑ-1, AC+25)";
1628 info[i++] = "Your skin is made of steel (-1 DEX, +25 AC).";
1632 if (p_ptr->muta3 & MUT3_WINGS)
1635 info[i++] = "¤¢¤Ê¤¿¤Ï±©¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
1637 info[i++] = "You have wings.";
1641 if (p_ptr->muta3 & MUT3_FEARLESS)
1645 if (p_ptr->muta3 & MUT3_REGEN)
1649 if (p_ptr->muta3 & MUT3_ESP)
1653 if (p_ptr->muta3 & MUT3_LIMBER)
1656 info[i++] = "¤¢¤Ê¤¿¤ÎÂΤÏÈó¾ï¤Ë¤·¤Ê¤ä¤«¤À¡£(´ïÍÑ+3)";
1658 info[i++] = "Your body is very limber (+3 DEX).";
1662 if (p_ptr->muta3 & MUT3_ARTHRITIS)
1665 info[i++] = "¤¢¤Ê¤¿¤Ï¤¤¤Ä¤â´ØÀá¤ËÄˤߤò´¶¤¸¤Æ¤¤¤ë¡£(´ïÍÑ-3)";
1667 info[i++] = "Your joints ache constantly (-3 DEX).";
1671 if (p_ptr->muta3 & MUT3_VULN_ELEM)
1674 info[i++] = "¤¢¤Ê¤¿¤Ï¸µÁǤι¶·â¤Ë¼å¤¤¡£";
1676 info[i++] = "You are susceptible to damage from the elements.";
1680 if (p_ptr->muta3 & MUT3_MOTION)
1683 info[i++] = "¤¢¤Ê¤¿¤ÎÆ°ºî¤ÏÀµ³Î¤ÇÎ϶¯¤¤¡£(±£Ì©+1)";
1685 info[i++] = "Your movements are precise and forceful (+1 STL).";
1689 if (p_ptr->muta3 & MUT3_GOOD_LUCK)
1692 info[i++] = "¤¢¤Ê¤¿¤ÏÇò¤¤¥ª¡¼¥é¤Ë¤Ä¤Ä¤Þ¤ì¤Æ¤¤¤ë¡£";
1694 info[i++] = "There is a white aura surrounding you.";
1697 if (p_ptr->muta3 & MUT3_BAD_LUCK)
1700 info[i++] = "¤¢¤Ê¤¿¤Ï¹õ¤¤¥ª¡¼¥é¤Ë¤Ä¤Ä¤Þ¤ì¤Æ¤¤¤ë¡£";
1702 info[i++] = "There is a black aura surrounding you.";
1710 info[i++] = "¤¢¤Ê¤¿¤ÏÌܤ¬¸«¤¨¤Ê¤¤¡£";
1712 info[i++] = "You cannot see.";
1716 if (p_ptr->confused)
1719 info[i++] = "¤¢¤Ê¤¿¤Ïº®Í𤷤Ƥ¤¤ë¡£";
1721 info[i++] = "You are confused.";
1728 info[i++] = "¤¢¤Ê¤¿¤Ï¶²Éݤ˿¯¤µ¤ì¤Æ¤¤¤ë¡£";
1730 info[i++] = "You are terrified.";
1737 info[i++] = "¤¢¤Ê¤¿¤Ï½Ð·ì¤·¤Æ¤¤¤ë¡£";
1739 info[i++] = "You are bleeding.";
1746 info[i++] = "¤¢¤Ê¤¿¤Ï¤â¤¦¤í¤¦¤È¤·¤Æ¤¤¤ë¡£";
1748 info[i++] = "You are stunned.";
1752 if (p_ptr->poisoned)
1755 info[i++] = "¤¢¤Ê¤¿¤ÏÆǤ˿¯¤µ¤ì¤Æ¤¤¤ë¡£";
1757 info[i++] = "You are poisoned.";
1764 info[i++] = "¤¢¤Ê¤¿¤Ï¸¸³Ð¤ò¸«¤Æ¤¤¤ë¡£";
1766 info[i++] = "You are hallucinating.";
1770 if (p_ptr->cursed & TRC_TY_CURSE)
1773 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°¤Ê±åÇ°¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£";
1775 info[i++] = "You carry an ancient foul curse.";
1779 if (p_ptr->cursed & TRC_AGGRAVATE)
1782 info[i++] = "¤¢¤Ê¤¿¤Ï¥â¥ó¥¹¥¿¡¼¤òÅܤ餻¤Æ¤¤¤ë¡£";
1784 info[i++] = "You aggravate monsters.";
1788 if (p_ptr->cursed & TRC_DRAIN_EXP)
1791 info[i++] = "¤¢¤Ê¤¿¤Ï·Ð¸³ÃͤòµÛ¤ï¤ì¤Æ¤¤¤ë¡£";
1793 info[i++] = "You are drained.";
1797 if (p_ptr->cursed & TRC_SLOW_REGEN)
1800 info[i++] = "¤¢¤Ê¤¿¤Î²óÉüÎϤÏÈó¾ï¤ËÃÙ¤¤¡£";
1802 info[i++] = "You regenerate slowly.";
1806 if (p_ptr->cursed & TRC_ADD_L_CURSE)
1809 info[i++] = "¤¢¤Ê¤¿¤Î¼å¤¤¼ö¤¤¤ÏÁý¤¨¤ë¡£"; /* »ÃÄêŪ -- henkma */
1811 info[i++] = "Your weak curses multiply.";
1815 if (p_ptr->cursed & TRC_ADD_H_CURSE)
1818 info[i++] = "¤¢¤Ê¤¿¤Î¶¯¤¤¼ö¤¤¤ÏÁý¤¨¤ë¡£"; /* »ÃÄêŪ -- henkma */
1820 info[i++] = "Your heavy curses multiply.";
1824 if (p_ptr->cursed & TRC_CALL_ANIMAL)
1827 info[i++] = "¤¢¤Ê¤¿¤Ïưʪ¤ËÁÀ¤ï¤ì¤Æ¤¤¤ë¡£";
1829 info[i++] = "You attract animals.";
1833 if (p_ptr->cursed & TRC_CALL_DEMON)
1836 info[i++] = "¤¢¤Ê¤¿¤Ï°Ëâ¤ËÁÀ¤ï¤ì¤Æ¤¤¤ë¡£";
1838 info[i++] = "You attract demons.";
1842 if (p_ptr->cursed & TRC_CALL_DRAGON)
1845 info[i++] = "¤¢¤Ê¤¿¤Ï¥É¥é¥´¥ó¤ËÁÀ¤ï¤ì¤Æ¤¤¤ë¡£";
1847 info[i++] = "You attract dragons.";
1851 if (p_ptr->cursed & TRC_COWARDICE)
1854 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹²²É¤ˤʤ롣";
1856 info[i++] = "You are subject to cowardice.";
1860 if (p_ptr->cursed & TRC_TELEPORT)
1863 info[i++] = "¤¢¤Ê¤¿¤Î°ÌÃ֤ϤҤ¸¤ç¤¦¤ËÉÔ°ÂÄê¤À¡£";
1865 info[i++] = "Your position is very uncertain.";
1869 if (p_ptr->cursed & TRC_LOW_MELEE)
1872 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¹¶·â¤ò³°¤·¤ä¤¹¤¤¡£";
1874 info[i++] = "Your weapon causes you to miss blows.";
1878 if (p_ptr->cursed & TRC_LOW_AC)
1881 info[i++] = "¤¢¤Ê¤¿¤Ï¹¶·â¤ò¼õ¤±¤ä¤¹¤¤¡£";
1883 info[i++] = "You are subject to be hit.";
1887 if (p_ptr->cursed & TRC_LOW_MAGIC)
1890 info[i++] = "¤¢¤Ê¤¿¤ÏËâË¡¤ò¼ºÇÔ¤·¤ä¤¹¤¤¡£";
1892 info[i++] = "You are subject to fail spellcasting.";
1896 if (p_ptr->cursed & TRC_FAST_DIGEST)
1899 info[i++] = "¤¢¤Ê¤¿¤Ï¤¹¤°¤ªÊ¢¤¬¤Ø¤ë¡£";
1901 info[i++] = "You have a good appetite.";
1905 if (p_ptr->cursed & TRC_DRAIN_HP)
1908 info[i++] = "¤¢¤Ê¤¿¤ÏÂÎÎϤòµÛ¤ï¤ì¤Æ¤¤¤ë¡£";
1910 info[i++] = "You are drained.";
1914 if (p_ptr->cursed & TRC_DRAIN_MANA)
1917 info[i++] = "¤¢¤Ê¤¿¤ÏËâÎϤòµÛ¤ï¤ì¤Æ¤¤¤ë¡£";
1919 info[i++] = "You brain is drained.";
1926 info[i++] = "¤¢¤Ê¤¿¤Ï¸øÀµ¤µ¤ò´¶¤¸¤Æ¤¤¤ë¡£";
1928 info[i++] = "You feel rightous.";
1935 info[i++] = "¤¢¤Ê¤¿¤Ï¥Ò¡¼¥í¡¼µ¤Ê¬¤À¡£";
1937 info[i++] = "You feel heroic.";
1944 info[i++] = "¤¢¤Ê¤¿¤ÏÀïÆ®¶¸¤À¡£";
1946 info[i++] = "You are in a battle rage.";
1950 if (p_ptr->protevil)
1953 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°¤Ê¤ë¸ºß¤«¤é¼é¤é¤ì¤Æ¤¤¤ë¡£";
1955 info[i++] = "You are protected from evil.";
1962 info[i++] = "¤¢¤Ê¤¿¤Ï¿ÀÈë¤Î¥·¡¼¥ë¥É¤Ç¼é¤é¤ì¤Æ¤¤¤ë¡£";
1964 info[i++] = "You are protected by a mystic shield.";
1971 info[i++] = "¤¢¤Ê¤¿¤Ï¸½ºß½ý¤Ä¤«¤Ê¤¤¡£";
1973 info[i++] = "You are temporarily invulnerable.";
1977 if (p_ptr->wraith_form)
1980 info[i++] = "¤¢¤Ê¤¿¤Ï°ì»þŪ¤ËÍ©Â⽤·¤Æ¤¤¤ë¡£";
1982 info[i++] = "You are temporarily incorporeal.";
1986 if (p_ptr->special_attack & ATTACK_CONFUSE)
1989 info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤ÏÀÖ¤¯µ±¤¤¤Æ¤¤¤ë¡£";
1991 info[i++] = "Your hands are glowing dull red.";
1995 if (p_ptr->special_attack & ATTACK_FIRE)
1998 info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤Ï²Ð±ê¤Ëʤ¤ï¤ì¤Æ¤¤¤ë¡£";
2000 info[i++] = "You can strike the enemy with flame.";
2004 if (p_ptr->special_attack & ATTACK_COLD)
2007 info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤ÏÎ䵤¤Ëʤ¤ï¤ì¤Æ¤¤¤ë¡£";
2009 info[i++] = "You can strike the enemy with cold.";
2013 if (p_ptr->special_attack & ATTACK_ACID)
2016 info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤Ï»À¤Ëʤ¤ï¤ì¤Æ¤¤¤ë¡£";
2018 info[i++] = "You can strike the enemy with acid.";
2022 if (p_ptr->special_attack & ATTACK_ELEC)
2025 info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤ÏÅÅ·â¤Ëʤ¤ï¤ì¤Æ¤¤¤ë¡£";
2027 info[i++] = "You can strike the enemy with electoric shock.";
2031 if (p_ptr->special_attack & ATTACK_POIS)
2034 info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤ÏÆǤËʤ¤ï¤ì¤Æ¤¤¤ë¡£";
2036 info[i++] = "You can strike the enemy with poison.";
2040 switch (p_ptr->action)
2044 info[i++] = "¤¢¤Ê¤¿¤Ï¤Ò¤¸¤ç¤¦¤ËÃí°Õ¿¼¤¯¼þ°Ï¤ò¸«ÅϤ·¤Æ¤¤¤ë¡£";
2046 info[i++] = "You are looking around very carefully.";
2050 if (p_ptr->new_spells)
2053 info[i++] = "¤¢¤Ê¤¿¤Ï¼öʸ¤äµ§¤ê¤ò³Ø¤Ö¤³¤È¤¬¤Ç¤¤ë¡£";
2055 info[i++] = "You can learn some spells/prayers.";
2059 if (p_ptr->word_recall)
2062 info[i++] = "¤¢¤Ê¤¿¤Ï¤¹¤°¤Ëµ¢´Ô¤¹¤ë¤À¤í¤¦¡£";
2064 info[i++] = "You will soon be recalled.";
2068 if (p_ptr->alter_reality)
2071 info[i++] = "¤¢¤Ê¤¿¤Ï¤¹¤°¤Ë¤³¤ÎÀ¤³¦¤òÎ¥¤ì¤ë¤À¤í¤¦¡£";
2073 info[i++] = "You will soon be altered.";
2077 if (p_ptr->see_infra)
2080 info[i++] = "¤¢¤Ê¤¿¤ÎÆ·¤ÏÀÖ³°Àþ¤ËÉÒ´¶¤Ç¤¢¤ë¡£";
2082 info[i++] = "Your eyes are sensitive to infrared light.";
2089 info[i++] = "¤¢¤Ê¤¿¤ÏÆ©ÌÀ¤Ê¥â¥ó¥¹¥¿¡¼¤ò¸«¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
2091 info[i++] = "You can see invisible creatures.";
2098 info[i++] = "¤¢¤Ê¤¿¤ÏÈô¤Ö¤³¤È¤¬¤Ç¤¤ë¡£";
2100 info[i++] = "You can fly.";
2104 if (p_ptr->free_act)
2107 info[i++] = "¤¢¤Ê¤¿¤ÏËãáãÃΤ餺¤Î¸ú²Ì¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2109 info[i++] = "You have free action.";
2113 if (p_ptr->regenerate)
2116 info[i++] = "¤¢¤Ê¤¿¤ÏÁÇÁ᤯ÂÎÎϤò²óÉü¤¹¤ë¡£";
2118 info[i++] = "You regenerate quickly.";
2122 if (p_ptr->slow_digest)
2125 info[i++] = "¤¢¤Ê¤¿¤Ï¿©Íߤ¬¾¯¤Ê¤¤¡£";
2127 info[i++] = "Your appetite is small.";
2131 if (p_ptr->telepathy)
2134 info[i++] = "¤¢¤Ê¤¿¤Ï¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
2136 info[i++] = "You have ESP.";
2140 if (p_ptr->esp_animal)
2143 info[i++] = "¤¢¤Ê¤¿¤Ï¼«Á³³¦¤ÎÀ¸Êª¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
2145 info[i++] = "You sense natural creatures.";
2149 if (p_ptr->esp_undead)
2152 info[i++] = "¤¢¤Ê¤¿¤Ï¥¢¥ó¥Ç¥Ã¥É¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
2154 info[i++] = "You sense undead.";
2158 if (p_ptr->esp_demon)
2161 info[i++] = "¤¢¤Ê¤¿¤Ï°Ëâ¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
2163 info[i++] = "You sense demons.";
2170 info[i++] = "¤¢¤Ê¤¿¤Ï¥ª¡¼¥¯¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
2172 info[i++] = "You sense orcs.";
2176 if (p_ptr->esp_troll)
2179 info[i++] = "¤¢¤Ê¤¿¤Ï¥È¥í¥ë¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
2181 info[i++] = "You sense trolls.";
2185 if (p_ptr->esp_giant)
2188 info[i++] = "¤¢¤Ê¤¿¤Ïµð¿Í¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
2190 info[i++] = "You sense giants.";
2194 if (p_ptr->esp_dragon)
2197 info[i++] = "¤¢¤Ê¤¿¤Ï¥É¥é¥´¥ó¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
2199 info[i++] = "You sense dragons.";
2203 if (p_ptr->esp_human)
2206 info[i++] = "¤¢¤Ê¤¿¤Ï¿Í´Ö¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
2208 info[i++] = "You sense humans.";
2212 if (p_ptr->esp_evil)
2215 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°¤ÊÀ¸¤Êª¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
2217 info[i++] = "You sense evil creatures.";
2221 if (p_ptr->esp_good)
2224 info[i++] = "¤¢¤Ê¤¿¤ÏÁ±ÎɤÊÀ¸¤Êª¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
2226 info[i++] = "You sense good creatures.";
2230 if (p_ptr->esp_nonliving)
2233 info[i++] = "¤¢¤Ê¤¿¤Ï³èÆ°¤¹¤ë̵À¸ÊªÂΤθºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
2235 info[i++] = "You sense non-living creatures.";
2239 if (p_ptr->esp_unique)
2242 info[i++] = "¤¢¤Ê¤¿¤ÏÆÃÊ̤ʶ¯Å¨¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
2244 info[i++] = "You sense unique monsters.";
2248 if (p_ptr->hold_life)
2251 info[i++] = "¤¢¤Ê¤¿¤Ï¼«¸Ê¤ÎÀ¸Ì¿ÎϤò¤·¤Ã¤«¤ê¤È°Ý»ý¤¹¤ë¡£";
2253 info[i++] = "You have a firm hold on your life force.";
2260 info[i++] = "¤¢¤Ê¤¿¤ÏÌð¤ä¥Ü¥ë¥È¤òÈ¿¼Í¤¹¤ë¡£";
2262 info[i++] = "You reflect arrows and bolts.";
2269 info[i++] = "¤¢¤Ê¤¿¤Ï±ê¤Î¥ª¡¼¥é¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£";
2271 info[i++] = "You are surrounded with a fiery aura.";
2278 info[i++] = "¤¢¤Ê¤¿¤ÏÅŵ¤¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£";
2280 info[i++] = "You are surrounded with electricity.";
2287 info[i++] = "¤¢¤Ê¤¿¤ÏÎ䵤¤Î¥ª¡¼¥é¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£";
2289 info[i++] = "You are surrounded with an aura of coldness.";
2293 if (p_ptr->tim_sh_holy)
2296 info[i++] = "¤¢¤Ê¤¿¤ÏÀ»¤Ê¤ë¥ª¡¼¥é¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£";
2298 info[i++] = "You are surrounded with a holy aura.";
2302 if (p_ptr->tim_sh_touki)
2305 info[i++] = "¤¢¤Ê¤¿¤ÏÆ®µ¤¤Î¥ª¡¼¥é¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£";
2307 info[i++] = "You are surrounded with a energy aura.";
2311 if (p_ptr->anti_magic)
2314 info[i++] = "¤¢¤Ê¤¿¤ÏÈ¿ËâË¡¥·¡¼¥ë¥É¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£";
2316 info[i++] = "You are surrounded by an anti-magic shell.";
2320 if (p_ptr->anti_tele)
2323 info[i++] = "¤¢¤Ê¤¿¤Ï¥Æ¥ì¥Ý¡¼¥È¤Ç¤¤Ê¤¤¡£";
2325 info[i++] = "You cannot teleport.";
2332 info[i++] = "¤¢¤Ê¤¿¤Î¿ÈÂΤϸ÷¤Ã¤Æ¤¤¤ë¡£";
2334 info[i++] = "You are carrying a permanent light.";
2341 info[i++] = "¤¢¤Ê¤¿¤Ï¹ÔÆ°¤ÎÁ°¤Ë´í¸±¤ò»¡ÃΤ¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
2343 info[i++] = "You will be warned before dangerous actions.";
2347 if (p_ptr->dec_mana)
2350 info[i++] = "¤¢¤Ê¤¿¤Ï¾¯¤Ê¤¤¾ÃÈñËâÎϤÇËâË¡¤ò¾§¤¨¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
2352 info[i++] = "You can cast spells with fewer mana points.";
2356 if (p_ptr->easy_spell)
2359 info[i++] = "¤¢¤Ê¤¿¤ÏÄ㤤¼ºÇÔΨ¤ÇËâË¡¤ò¾§¤¨¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
2361 info[i++] = "Fail rate of your magic is decreased.";
2365 if (p_ptr->heavy_spell)
2368 info[i++] = "¤¢¤Ê¤¿¤Ï¹â¤¤¼ºÇÔΨ¤ÇËâË¡¤ò¾§¤¨¤Ê¤±¤ì¤Ð¤¤¤±¤Ê¤¤¡£";
2370 info[i++] = "Fail rate of your magic is increased.";
2374 if (p_ptr->mighty_throw)
2377 info[i++] = "¤¢¤Ê¤¿¤Ï¶¯¤¯Êª¤òÅꤲ¤ë¡£";
2379 info[i++] = "You can throw objects powerfully.";
2384 if (p_ptr->immune_acid)
2387 info[i++] = "¤¢¤Ê¤¿¤Ï»À¤ËÂФ¹¤ë´°Á´¤Ê¤ëÌȱ֤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2389 info[i++] = "You are completely immune to acid.";
2393 else if ((p_ptr->resist_acid) && (p_ptr->oppose_acid))
2396 info[i++] = "¤¢¤Ê¤¿¤Ï»À¤Ø¤Î¶¯ÎϤÊÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2398 info[i++] = "You resist acid exceptionally well.";
2402 else if ((p_ptr->resist_acid) || (p_ptr->oppose_acid))
2405 info[i++] = "¤¢¤Ê¤¿¤Ï»À¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2407 info[i++] = "You are resistant to acid.";
2412 if (p_ptr->immune_elec)
2415 info[i++] = "¤¢¤Ê¤¿¤ÏÅÅ·â¤ËÂФ¹¤ë´°Á´¤Ê¤ëÌȱ֤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2417 info[i++] = "You are completely immune to lightning.";
2421 else if ((p_ptr->resist_elec) && (p_ptr->oppose_elec))
2424 info[i++] = "¤¢¤Ê¤¿¤ÏÅÅ·â¤Ø¤Î¶¯ÎϤÊÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2426 info[i++] = "You resist lightning exceptionally well.";
2430 else if ((p_ptr->resist_elec) || (p_ptr->oppose_elec))
2433 info[i++] = "¤¢¤Ê¤¿¤ÏÅÅ·â¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2435 info[i++] = "You are resistant to lightning.";
2440 if (prace_is_(RACE_ANDROID) && !p_ptr->immune_elec)
2443 info[i++] = "¤¢¤Ê¤¿¤ÏÅÅ·â¤Ë¼å¤¤¡£";
2445 info[i++] = "You are susceptible to damage from lightning.";
2450 if (p_ptr->immune_fire)
2453 info[i++] = "¤¢¤Ê¤¿¤Ï²Ð¤ËÂФ¹¤ë´°Á´¤Ê¤ëÌȱ֤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2455 info[i++] = "You are completely immune to fire.";
2459 else if ((p_ptr->resist_fire) && (p_ptr->oppose_fire))
2462 info[i++] = "¤¢¤Ê¤¿¤Ï²Ð¤Ø¤Î¶¯ÎϤÊÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2464 info[i++] = "You resist fire exceptionally well.";
2468 else if ((p_ptr->resist_fire) || (p_ptr->oppose_fire))
2471 info[i++] = "¤¢¤Ê¤¿¤Ï²Ð¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2473 info[i++] = "You are resistant to fire.";
2478 if (prace_is_(RACE_ENT) && !p_ptr->immune_fire)
2481 info[i++] = "¤¢¤Ê¤¿¤Ï²Ð¤Ë¼å¤¤¡£";
2483 info[i++] = "You are susceptible to damage from fire.";
2488 if (p_ptr->immune_cold)
2491 info[i++] = "¤¢¤Ê¤¿¤ÏÎ䵤¤ËÂФ¹¤ë´°Á´¤Ê¤ëÌȱ֤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2493 info[i++] = "You are completely immune to cold.";
2497 else if ((p_ptr->resist_cold) && (p_ptr->oppose_cold))
2500 info[i++] = "¤¢¤Ê¤¿¤ÏÎ䵤¤Ø¤Î¶¯ÎϤÊÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2502 info[i++] = "You resist cold exceptionally well.";
2506 else if ((p_ptr->resist_cold) || (p_ptr->oppose_cold))
2509 info[i++] = "¤¢¤Ê¤¿¤ÏÎ䵤¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2511 info[i++] = "You are resistant to cold.";
2516 if ((p_ptr->resist_pois) && (p_ptr->oppose_pois))
2519 info[i++] = "¤¢¤Ê¤¿¤ÏÆǤؤζ¯ÎϤÊÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2521 info[i++] = "You resist poison exceptionally well.";
2525 else if ((p_ptr->resist_pois) || (p_ptr->oppose_pois))
2528 info[i++] = "¤¢¤Ê¤¿¤ÏÆǤؤÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2530 info[i++] = "You are resistant to poison.";
2535 if (p_ptr->resist_lite)
2538 info[i++] = "¤¢¤Ê¤¿¤ÏÁ®¸÷¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2540 info[i++] = "You are resistant to bright light.";
2545 if (prace_is_(RACE_VAMPIRE) || prace_is_(RACE_S_FAIRY) || (p_ptr->mimic_form == MIMIC_VAMPIRE))
2548 info[i++] = "¤¢¤Ê¤¿¤ÏÁ®¸÷¤Ë¼å¤¤¡£";
2550 info[i++] = "You are susceptible to damage from bright light.";
2555 if (prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE) || p_ptr->wraith_form)
2558 info[i++] = "¤¢¤Ê¤¿¤Ï°Å¹õ¤ËÂФ¹¤ë´°Á´¤Ê¤ëÌȱ֤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2560 info[i++] = "You are completely immune to darkness.";
2564 else if (p_ptr->resist_dark)
2567 info[i++] = "¤¢¤Ê¤¿¤Ï°Å¹õ¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2569 info[i++] = "You are resistant to darkness.";
2573 if (p_ptr->resist_conf)
2576 info[i++] = "¤¢¤Ê¤¿¤Ïº®Íð¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2578 info[i++] = "You are resistant to confusion.";
2582 if (p_ptr->resist_sound)
2585 info[i++] = "¤¢¤Ê¤¿¤Ï²»ÇȤξ׷â¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2587 info[i++] = "You are resistant to sonic attacks.";
2591 if (p_ptr->resist_disen)
2594 info[i++] = "¤¢¤Ê¤¿¤ÏÎô²½¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2596 info[i++] = "You are resistant to disenchantment.";
2600 if (p_ptr->resist_chaos)
2603 info[i++] = "¤¢¤Ê¤¿¤Ï¥«¥ª¥¹¤ÎÎϤؤÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2605 info[i++] = "You are resistant to chaos.";
2609 if (p_ptr->resist_shard)
2612 info[i++] = "¤¢¤Ê¤¿¤ÏÇËÊҤι¶·â¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2614 info[i++] = "You are resistant to blasts of shards.";
2618 if (p_ptr->resist_nexus)
2621 info[i++] = "¤¢¤Ê¤¿¤Ï°ø²Ìº®Íð¤Î¹¶·â¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2623 info[i++] = "You are resistant to nexus attacks.";
2628 if (prace_is_(RACE_SPECTRE))
2631 info[i++] = "¤¢¤Ê¤¿¤ÏÃϹö¤ÎÎϤòµÛ¼ý¤Ç¤¤ë¡£";
2633 info[i++] = "You can drain nether forces.";
2637 else if (p_ptr->resist_neth)
2640 info[i++] = "¤¢¤Ê¤¿¤ÏÃϹö¤ÎÎϤؤÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2642 info[i++] = "You are resistant to nether forces.";
2646 if (p_ptr->resist_fear)
2649 info[i++] = "¤¢¤Ê¤¿¤ÏÁ´¤¯¶²Éݤò´¶¤¸¤Ê¤¤¡£";
2651 info[i++] = "You are completely fearless.";
2655 if (p_ptr->resist_blind)
2658 info[i++] = "¤¢¤Ê¤¿¤ÎÌܤÏÌÕÌܤؤÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2660 info[i++] = "Your eyes are resistant to blindness.";
2664 if (p_ptr->resist_time)
2667 info[i++] = "¤¢¤Ê¤¿¤Ï»þ´ÖµÕž¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2669 info[i++] = "You are resistant to time.";
2674 if (p_ptr->sustain_str)
2677 info[i++] = "¤¢¤Ê¤¿¤ÎÏÓÎϤϰݻý¤µ¤ì¤Æ¤¤¤ë¡£";
2679 info[i++] = "Your strength is sustained.";
2683 if (p_ptr->sustain_int)
2686 info[i++] = "¤¢¤Ê¤¿¤ÎÃÎǽ¤Ï°Ý»ý¤µ¤ì¤Æ¤¤¤ë¡£";
2688 info[i++] = "Your intelligence is sustained.";
2692 if (p_ptr->sustain_wis)
2695 info[i++] = "¤¢¤Ê¤¿¤Î¸¤µ¤Ï°Ý»ý¤µ¤ì¤Æ¤¤¤ë¡£";
2697 info[i++] = "Your wisdom is sustained.";
2701 if (p_ptr->sustain_con)
2704 info[i++] = "¤¢¤Ê¤¿¤ÎÂѵ×ÎϤϰݻý¤µ¤ì¤Æ¤¤¤ë¡£";
2706 info[i++] = "Your constitution is sustained.";
2710 if (p_ptr->sustain_dex)
2713 info[i++] = "¤¢¤Ê¤¿¤Î´ïÍѤµ¤Ï°Ý»ý¤µ¤ì¤Æ¤¤¤ë¡£";
2715 info[i++] = "Your dexterity is sustained.";
2719 if (p_ptr->sustain_chr)
2722 info[i++] = "¤¢¤Ê¤¿¤ÎÌ¥ÎϤϰݻý¤µ¤ì¤Æ¤¤¤ë¡£";
2724 info[i++] = "Your charisma is sustained.";
2729 if (have_flag(flgs, TR_STR))
2732 info[i++] = "¤¢¤Ê¤¿¤ÎÏÓÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2734 info[i++] = "Your strength is affected by your equipment.";
2738 if (have_flag(flgs, TR_INT))
2741 info[i++] = "¤¢¤Ê¤¿¤ÎÃÎǽ¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2743 info[i++] = "Your intelligence is affected by your equipment.";
2747 if (have_flag(flgs, TR_WIS))
2750 info[i++] = "¤¢¤Ê¤¿¤Î¸¤µ¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2752 info[i++] = "Your wisdom is affected by your equipment.";
2756 if (have_flag(flgs, TR_DEX))
2759 info[i++] = "¤¢¤Ê¤¿¤Î´ïÍѤµ¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2761 info[i++] = "Your dexterity is affected by your equipment.";
2765 if (have_flag(flgs, TR_CON))
2768 info[i++] = "¤¢¤Ê¤¿¤ÎÂѵ×ÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2770 info[i++] = "Your constitution is affected by your equipment.";
2774 if (have_flag(flgs, TR_CHR))
2777 info[i++] = "¤¢¤Ê¤¿¤ÎÌ¥ÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2779 info[i++] = "Your charisma is affected by your equipment.";
2784 if (have_flag(flgs, TR_STEALTH))
2787 info[i++] = "¤¢¤Ê¤¿¤Î±£Ì©¹ÔưǽÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2789 info[i++] = "Your stealth is affected by your equipment.";
2793 if (have_flag(flgs, TR_SEARCH))
2796 info[i++] = "¤¢¤Ê¤¿¤Îõº÷ǽÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2798 info[i++] = "Your searching ability is affected by your equipment.";
2802 if (have_flag(flgs, TR_INFRA))
2805 info[i++] = "¤¢¤Ê¤¿¤ÎÀÖ³°Àþ»ëÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2807 info[i++] = "Your infravision is affected by your equipment.";
2811 if (have_flag(flgs, TR_TUNNEL))
2814 info[i++] = "¤¢¤Ê¤¿¤ÎºÎ·¡Ç½ÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2816 info[i++] = "Your digging ability is affected by your equipment.";
2820 if (have_flag(flgs, TR_SPEED))
2823 info[i++] = "¤¢¤Ê¤¿¤Î¥¹¥Ô¡¼¥É¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2825 info[i++] = "Your speed is affected by your equipment.";
2829 if (have_flag(flgs, TR_BLOWS))
2832 info[i++] = "¤¢¤Ê¤¿¤Î¹¶·â®ÅÙ¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2834 info[i++] = "Your attack speed is affected by your equipment.";
2840 /* Access the current weapon */
2841 o_ptr = &inventory[INVEN_RARM];
2843 /* Analyze the weapon */
2846 /* Indicate Blessing */
2847 if (have_flag(flgs, TR_BLESSED))
2850 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¿À¤Î½ËÊ¡¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2852 info[i++] = "Your weapon has been blessed by the gods.";
2857 if (have_flag(flgs, TR_CHAOTIC))
2860 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥í¥°¥ë¥¹¤Îħ¤Î°À¤ò¤â¤Ä¡£";
2862 info[i++] = "Your weapon is branded with the Sign of Logrus.";
2868 if (have_flag(flgs, TR_IMPACT))
2871 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏÂÇ·â¤ÇÃϿ̤òȯÀ¸¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
2873 info[i++] = "The impact of your weapon can cause earthquakes.";
2878 if (have_flag(flgs, TR_VORPAL))
2881 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏÈó¾ï¤Ë±Ô¤¤¡£";
2883 info[i++] = "Your weapon is very sharp.";
2888 if (have_flag(flgs, TR_VAMPIRIC))
2891 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤«¤éÀ¸Ì¿ÎϤòµÛ¼ý¤¹¤ë¡£";
2893 info[i++] = "Your weapon drains life from your foes.";
2898 /* Special "Attack Bonuses" */
2899 if (have_flag(flgs, TR_BRAND_ACID))
2902 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤òÍϤ«¤¹¡£";
2904 info[i++] = "Your weapon melts your foes.";
2908 if (have_flag(flgs, TR_BRAND_ELEC))
2911 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤ò´¶ÅŤµ¤»¤ë¡£";
2913 info[i++] = "Your weapon shocks your foes.";
2917 if (have_flag(flgs, TR_BRAND_FIRE))
2920 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤òdz¤ä¤¹¡£";
2922 info[i++] = "Your weapon burns your foes.";
2926 if (have_flag(flgs, TR_BRAND_COLD))
2929 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤òÅà¤é¤»¤ë¡£";
2931 info[i++] = "Your weapon freezes your foes.";
2935 if (have_flag(flgs, TR_BRAND_POIS))
2938 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤òÆǤǿ¯¤¹¡£";
2940 info[i++] = "Your weapon poisons your foes.";
2945 /* Special "slay" flags */
2946 if (have_flag(flgs, TR_KILL_ANIMAL))
2949 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ïưʪ¤ÎŷŨ¤Ç¤¢¤ë¡£";
2951 info[i++] = "Your weapon is a great bane of animals.";
2955 else if (have_flag(flgs, TR_SLAY_ANIMAL))
2958 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ïưʪ¤ËÂФ·¤Æ¶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
2960 info[i++] = "Your weapon strikes at animals with extra force.";
2964 if (have_flag(flgs, TR_KILL_EVIL))
2967 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¼Ù°¤Ê¤ë¸ºß¤ÎŷŨ¤Ç¤¢¤ë¡£";
2969 info[i++] = "Your weapon is a great bane of evil.";
2973 else if (have_flag(flgs, TR_SLAY_EVIL))
2976 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¼Ù°¤Ê¤ë¸ºß¤ËÂФ·¤Æ¶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
2978 info[i++] = "Your weapon strikes at evil with extra force.";
2982 if (have_flag(flgs, TR_KILL_HUMAN))
2985 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¿Í´Ö¤ÎŷŨ¤Ç¤¢¤ë¡£";
2987 info[i++] = "Your weapon is a great bane of humans.";
2991 else if (have_flag(flgs, TR_SLAY_HUMAN))
2994 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¿Í´Ö¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
2996 info[i++] = "Your weapon is especially deadly against humans.";
3000 if (have_flag(flgs, TR_KILL_UNDEAD))
3003 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥¢¥ó¥Ç¥Ã¥É¤ÎŷŨ¤Ç¤¢¤ë¡£";
3005 info[i++] = "Your weapon is a great bane of undead.";
3009 else if (have_flag(flgs, TR_SLAY_UNDEAD))
3012 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥¢¥ó¥Ç¥Ã¥É¤ËÂФ·¤Æ¿ÀÀ»¤Ê¤ëÎϤòȯ´ø¤¹¤ë¡£";
3014 info[i++] = "Your weapon strikes at undead with holy wrath.";
3018 if (have_flag(flgs, TR_KILL_DEMON))
3021 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥Ç¡¼¥â¥ó¤ÎŷŨ¤Ç¤¢¤ë¡£";
3023 info[i++] = "Your weapon is a great bane of demons.";
3027 else if (have_flag(flgs, TR_SLAY_DEMON))
3030 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥Ç¡¼¥â¥ó¤ËÂФ·¤Æ¿ÀÀ»¤Ê¤ëÎϤòȯ´ø¤¹¤ë¡£";
3032 info[i++] = "Your weapon strikes at demons with holy wrath.";
3036 if (have_flag(flgs, TR_KILL_ORC))
3039 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥ª¡¼¥¯¤ÎŷŨ¤Ç¤¢¤ë¡£";
3041 info[i++] = "Your weapon is a great bane of orcs.";
3045 else if (have_flag(flgs, TR_SLAY_ORC))
3048 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥ª¡¼¥¯¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
3050 info[i++] = "Your weapon is especially deadly against orcs.";
3054 if (have_flag(flgs, TR_KILL_TROLL))
3057 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥È¥í¥ë¤ÎŷŨ¤Ç¤¢¤ë¡£";
3059 info[i++] = "Your weapon is a great bane of trolls.";
3063 else if (have_flag(flgs, TR_SLAY_TROLL))
3066 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥È¥í¥ë¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
3068 info[i++] = "Your weapon is especially deadly against trolls.";
3072 if (have_flag(flgs, TR_KILL_GIANT))
3075 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥¸¥ã¥¤¥¢¥ó¥È¤ÎŷŨ¤Ç¤¢¤ë¡£";
3077 info[i++] = "Your weapon is a great bane of giants.";
3081 else if (have_flag(flgs, TR_SLAY_GIANT))
3084 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥¸¥ã¥¤¥¢¥ó¥È¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
3086 info[i++] = "Your weapon is especially deadly against giants.";
3090 /* Special "kill" flags */
3091 if (have_flag(flgs, TR_KILL_DRAGON))
3094 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥É¥é¥´¥ó¤ÎŷŨ¤Ç¤¢¤ë¡£";
3096 info[i++] = "Your weapon is a great bane of dragons.";
3100 else if (have_flag(flgs, TR_SLAY_DRAGON))
3103 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥É¥é¥´¥ó¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
3105 info[i++] = "Your weapon is especially deadly against dragons.";
3110 if (have_flag(flgs, TR_FORCE_WEAPON))
3113 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏMP¤ò»È¤Ã¤Æ¹¶·â¤¹¤ë¡£";
3115 info[i++] = "Your weapon causes greate damages using your MP.";
3119 if (have_flag(flgs, TR_THROW))
3122 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏÅꤲ¤ä¤¹¤¤¡£";
3124 info[i++] = "Your weapon can be thrown well.";
3130 /* Save the screen */
3133 /* Erase the screen */
3134 for (k = 1; k < 24; k++) prt("", k, 13);
3136 /* Label the information */
3138 prt(" ¤¢¤Ê¤¿¤Î¾õÂÖ:", 1, 15);
3140 prt(" Your Attributes:", 1, 15);
3144 /* We will print on top of the map (column 13) */
3145 for (k = 2, j = 0; j < i; j++)
3148 prt(info[j], k++, 15);
3150 /* Every 20 entries (lines 2 to 21), start over */
3151 if ((k == 22) && (j+1 < i))
3154 prt("-- ³¤¯ --", k, 15);
3156 prt("-- more --", k, 15);
3160 for (; k > 2; k--) prt("", k, 15);
3166 prt("[²¿¤«¥¡¼¤ò²¡¤¹¤È¥²¡¼¥à¤ËÌá¤ê¤Þ¤¹]", k, 13);
3168 prt("[Press any key to continue]", k, 13);
3173 /* Restore the screen */
3178 static int report_magics_aux(int dur)
3196 else if (dur <= 100)
3200 else if (dur <= 200)
3210 static cptr report_magic_durations[] =
3219 "¿®¤¸Æñ¤¤¤Û¤ÉŤ¤´Ö",
3220 "¥â¥ó¥¹¥¿¡¼¤ò¹¶·â¤¹¤ë¤Þ¤Ç"
3223 "for a little while",
3227 "for a very long time",
3228 "for an incredibly long time",
3229 "until you hit a monster"
3236 * Report all currently active magical effects.
3238 void report_magics(void)
3248 info2[i] = report_magics_aux(p_ptr->blind);
3250 info[i++] = "¤¢¤Ê¤¿¤ÏÌܤ¬¸«¤¨¤Ê¤¤¡£";
3252 info[i++] = "You cannot see";
3256 if (p_ptr->confused)
3258 info2[i] = report_magics_aux(p_ptr->confused);
3260 info[i++] = "¤¢¤Ê¤¿¤Ïº®Í𤷤Ƥ¤¤ë¡£";
3262 info[i++] = "You are confused";
3268 info2[i] = report_magics_aux(p_ptr->afraid);
3270 info[i++] = "¤¢¤Ê¤¿¤Ï¶²Éݤ˿¯¤µ¤ì¤Æ¤¤¤ë¡£";
3272 info[i++] = "You are terrified";
3276 if (p_ptr->poisoned)
3278 info2[i] = report_magics_aux(p_ptr->poisoned);
3280 info[i++] = "¤¢¤Ê¤¿¤ÏÆǤ˿¯¤µ¤ì¤Æ¤¤¤ë¡£";
3282 info[i++] = "You are poisoned";
3288 info2[i] = report_magics_aux(p_ptr->image);
3290 info[i++] = "¤¢¤Ê¤¿¤Ï¸¸³Ð¤ò¸«¤Æ¤¤¤ë¡£";
3292 info[i++] = "You are hallucinating";
3298 info2[i] = report_magics_aux(p_ptr->blessed);
3300 info[i++] = "¤¢¤Ê¤¿¤Ï¸øÀµ¤µ¤ò´¶¤¸¤Æ¤¤¤ë¡£";
3302 info[i++] = "You feel rightous";
3308 info2[i] = report_magics_aux(p_ptr->hero);
3310 info[i++] = "¤¢¤Ê¤¿¤Ï¥Ò¡¼¥í¡¼µ¤Ê¬¤À¡£";
3312 info[i++] = "You feel heroic";
3318 info2[i] = report_magics_aux(p_ptr->shero);
3320 info[i++] = "¤¢¤Ê¤¿¤ÏÀïÆ®¶¸¤À¡£";
3322 info[i++] = "You are in a battle rage";
3326 if (p_ptr->protevil)
3328 info2[i] = report_magics_aux(p_ptr->protevil);
3330 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°¤Ê¤ë¸ºß¤«¤é¼é¤é¤ì¤Æ¤¤¤ë¡£";
3332 info[i++] = "You are protected from evil";
3338 info2[i] = report_magics_aux(p_ptr->shield);
3340 info[i++] = "¤¢¤Ê¤¿¤Ï¿ÀÈë¤Î¥·¡¼¥ë¥É¤Ç¼é¤é¤ì¤Æ¤¤¤ë¡£";
3342 info[i++] = "You are protected by a mystic shield";
3348 info2[i] = report_magics_aux(p_ptr->invuln);
3350 info[i++] = "̵Ũ¤Ç¤¤¤é¤ì¤ë¡£";
3352 info[i++] = "You are invulnerable";
3356 if (p_ptr->wraith_form)
3358 info2[i] = report_magics_aux(p_ptr->wraith_form);
3360 info[i++] = "Í©Âβ½¤Ç¤¤ë¡£";
3362 info[i++] = "You are incorporeal";
3366 if (p_ptr->special_attack & ATTACK_CONFUSE)
3370 info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤ÏÀÖ¤¯µ±¤¤¤Æ¤¤¤ë¡£";
3372 info[i++] = "Your hands are glowing dull red.";
3376 if (p_ptr->word_recall)
3378 info2[i] = report_magics_aux(p_ptr->word_recall);
3380 info[i++] = "¤³¤Î¸åµ¢´Ô¤Î¾Û¤òȯư¤¹¤ë¡£";
3382 info[i++] = "You are waiting to be recalled";
3386 if (p_ptr->alter_reality)
3388 info2[i] = report_magics_aux(p_ptr->alter_reality);
3390 info[i++] = "¤³¤Î¸å¸½¼ÂÊÑÍƤ¬È¯Æ°¤¹¤ë¡£";
3392 info[i++] = "You waiting to be altered";
3396 if (p_ptr->oppose_acid)
3398 info2[i] = report_magics_aux(p_ptr->oppose_acid);
3400 info[i++] = "¤¢¤Ê¤¿¤Ï»À¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
3402 info[i++] = "You are resistant to acid";
3406 if (p_ptr->oppose_elec)
3408 info2[i] = report_magics_aux(p_ptr->oppose_elec);
3410 info[i++] = "¤¢¤Ê¤¿¤ÏÅÅ·â¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
3412 info[i++] = "You are resistant to lightning";
3416 if (p_ptr->oppose_fire)
3418 info2[i] = report_magics_aux(p_ptr->oppose_fire);
3420 info[i++] = "¤¢¤Ê¤¿¤Ï²Ð¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
3422 info[i++] = "You are resistant to fire";
3426 if (p_ptr->oppose_cold)
3428 info2[i] = report_magics_aux(p_ptr->oppose_cold);
3430 info[i++] = "¤¢¤Ê¤¿¤ÏÎ䵤¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
3432 info[i++] = "You are resistant to cold";
3436 if (p_ptr->oppose_pois)
3438 info2[i] = report_magics_aux(p_ptr->oppose_pois);
3440 info[i++] = "¤¢¤Ê¤¿¤ÏÆǤؤÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
3442 info[i++] = "You are resistant to poison";
3447 /* Save the screen */
3450 /* Erase the screen */
3451 for (k = 1; k < 24; k++) prt("", k, 13);
3453 /* Label the information */
3455 prt(" ËâË¡ :", 1, 15);
3457 prt(" Your Current Magic:", 1, 15);
3461 /* We will print on top of the map (column 13) */
3462 for (k = 2, j = 0; j < i; j++)
3466 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï%s%s", info[j],
3468 sprintf(Dummy, "%s %s.", info[j],
3471 report_magic_durations[info2[j]]);
3472 prt(Dummy, k++, 15);
3474 /* Every 20 entries (lines 2 to 21), start over */
3475 if ((k == 22) && (j + 1 < i))
3478 prt("-- ³¤¯ --", k, 15);
3480 prt("-- more --", k, 15);
3484 for (; k > 2; k--) prt("", k, 15);
3490 prt("[²¿¤«¥¡¼¤ò²¡¤¹¤È¥²¡¼¥à¤ËÌá¤ê¤Þ¤¹]", k, 13);
3492 prt("[Press any key to continue]", k, 13);
3497 /* Restore the screen */
3503 * Detect all traps on current panel
3505 bool detect_traps(int range, bool known)
3508 bool detect = FALSE;
3512 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3514 /* Scan the current panel */
3515 for (y = 1; y < cur_hgt - 1; y++)
3517 for (x = 1; x <= cur_wid - 1; x++)
3519 int dist = distance(py, px, y, x);
3520 if (dist > range) continue;
3522 /* Access the grid */
3523 c_ptr = &cave[y][x];
3525 /* Mark as detected */
3526 if (dist <= range && known)
3528 if (dist <= range - 1)
3529 c_ptr->info |= (CAVE_IN_DETECT);
3531 c_ptr->info &= ~(CAVE_UNSAFE);
3538 if (is_trap(c_ptr->feat))
3540 /* Hack -- Memorize */
3541 c_ptr->info |= (CAVE_MARK);
3545 /* Disclose a hidden trap */
3546 disclose_grid(y, x);
3560 if (known) p_ptr->dtrap = TRUE;
3562 if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT)) detect = FALSE;
3568 msg_print("¥È¥é¥Ã¥×¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3570 msg_print("You sense the presence of traps!");
3582 * Detect all doors on current panel
3584 bool detect_doors(int range)
3588 bool detect = FALSE;
3592 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3594 /* Scan the panel */
3595 for (y = 1; y < cur_hgt - 1; y++)
3597 for (x = 1; x < cur_wid - 1; x++)
3599 if (distance(py, px, y, x) > range) continue;
3601 c_ptr = &cave[y][x];
3603 /* Detect secret doors */
3604 if (is_hidden_door(c_ptr))
3607 disclose_grid(y, x);
3611 if (((c_ptr->feat >= FEAT_DOOR_HEAD) &&
3612 (c_ptr->feat <= FEAT_DOOR_TAIL)) ||
3613 ((c_ptr->feat == FEAT_OPEN) ||
3614 (c_ptr->feat == FEAT_BROKEN)))
3616 /* Hack -- Memorize */
3617 c_ptr->info |= (CAVE_MARK);
3628 if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT)) detect = FALSE;
3634 msg_print("¥É¥¢¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3636 msg_print("You sense the presence of doors!");
3647 * Detect all stairs on current panel
3649 bool detect_stairs(int range)
3653 bool detect = FALSE;
3657 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3659 /* Scan the panel */
3660 for (y = 1; y < cur_hgt - 1; y++)
3662 for (x = 1; x < cur_wid - 1; x++)
3664 if (distance(py, px, y, x) > range) continue;
3666 c_ptr = &cave[y][x];
3669 if ((c_ptr->feat == FEAT_LESS) ||
3670 (c_ptr->feat == FEAT_LESS_LESS) ||
3671 (c_ptr->feat == FEAT_MORE) ||
3672 (c_ptr->feat == FEAT_MORE_MORE) ||
3673 (c_ptr->feat == FEAT_ENTRANCE))
3675 /* Hack -- Memorize */
3676 c_ptr->info |= (CAVE_MARK);
3687 if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT)) detect = FALSE;
3693 msg_print("³¬Ãʤθºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3695 msg_print("You sense the presence of stairs!");
3706 * Detect any treasure on the current panel
3708 bool detect_treasure(int range)
3712 bool detect = FALSE;
3716 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3718 /* Scan the current panel */
3719 for (y = 1; y < cur_hgt; y++)
3721 for (x = 1; x < cur_wid; x++)
3723 if (distance(py, px, y, x) > range) continue;
3725 c_ptr = &cave[y][x];
3727 /* Notice embedded gold */
3728 if ((c_ptr->feat == FEAT_MAGMA_H) ||
3729 (c_ptr->feat == FEAT_QUARTZ_H))
3731 /* Expose the gold */
3732 c_ptr->feat += 0x02;
3735 /* Magma/Quartz + Known Gold */
3736 if ((c_ptr->feat == FEAT_MAGMA_K) ||
3737 (c_ptr->feat == FEAT_QUARTZ_K))
3739 /* Hack -- Memorize */
3740 c_ptr->info |= (CAVE_MARK);
3751 if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT+6)) detect = FALSE;
3757 msg_print("Ë䢤µ¤ì¤¿ºâÊõ¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3759 msg_print("You sense the presence of buried treasure!");
3772 * Detect all "gold" objects on the current panel
3774 bool detect_objects_gold(int range)
3779 bool detect = FALSE;
3781 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range2 /= 3;
3784 for (i = 1; i < o_max; i++)
3786 object_type *o_ptr = &o_list[i];
3788 /* Skip dead objects */
3789 if (!o_ptr->k_idx) continue;
3791 /* Skip held objects */
3792 if (o_ptr->held_m_idx) continue;
3798 /* Only detect nearby objects */
3799 if (distance(py, px, y, x) > range2) continue;
3801 /* Detect "gold" objects */
3802 if (o_ptr->tval == TV_GOLD)
3804 /* Hack -- memorize it */
3805 o_ptr->marked |= OM_FOUND;
3815 if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT+6)) detect = FALSE;
3821 msg_print("ºâÊõ¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3823 msg_print("You sense the presence of treasure!");
3828 if (detect_monsters_string(range, "$"))
3839 * Detect all "normal" objects on the current panel
3841 bool detect_objects_normal(int range)
3846 bool detect = FALSE;
3848 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range2 /= 3;
3851 for (i = 1; i < o_max; i++)
3853 object_type *o_ptr = &o_list[i];
3855 /* Skip dead objects */
3856 if (!o_ptr->k_idx) continue;
3858 /* Skip held objects */
3859 if (o_ptr->held_m_idx) continue;
3865 /* Only detect nearby objects */
3866 if (distance(py, px, y, x) > range2) continue;
3868 /* Detect "real" objects */
3869 if (o_ptr->tval != TV_GOLD)
3871 /* Hack -- memorize it */
3872 o_ptr->marked |= OM_FOUND;
3882 if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT+6)) detect = FALSE;
3888 msg_print("¥¢¥¤¥Æ¥à¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3890 msg_print("You sense the presence of objects!");
3895 if (detect_monsters_string(range, "!=?|/`"))
3906 * Detect all "magic" objects on the current panel.
3908 * This will light up all spaces with "magic" items, including artifacts,
3909 * ego-items, potions, scrolls, books, rods, wands, staves, amulets, rings,
3910 * and "enchanted" items of the "good" variety.
3912 * It can probably be argued that this function is now too powerful.
3914 bool detect_objects_magic(int range)
3918 bool detect = FALSE;
3920 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3922 /* Scan all objects */
3923 for (i = 1; i < o_max; i++)
3925 object_type *o_ptr = &o_list[i];
3927 /* Skip dead objects */
3928 if (!o_ptr->k_idx) continue;
3930 /* Skip held objects */
3931 if (o_ptr->held_m_idx) continue;
3937 /* Only detect nearby objects */
3938 if (distance(py, px, y, x) > range) continue;
3940 /* Examine the tval */
3943 /* Artifacts, misc magic items, or enchanted wearables */
3944 if (artifact_p(o_ptr) ||
3945 ego_item_p(o_ptr) ||
3947 (tv == TV_WHISTLE) ||
3948 (tv == TV_AMULET) ||
3953 (tv == TV_SCROLL) ||
3954 (tv == TV_POTION) ||
3955 (tv == TV_LIFE_BOOK) ||
3956 (tv == TV_SORCERY_BOOK) ||
3957 (tv == TV_NATURE_BOOK) ||
3958 (tv == TV_CHAOS_BOOK) ||
3959 (tv == TV_DEATH_BOOK) ||
3960 (tv == TV_TRUMP_BOOK) ||
3961 (tv == TV_ARCANE_BOOK) ||
3962 (tv == TV_ENCHANT_BOOK) ||
3963 (tv == TV_DAEMON_BOOK) ||
3964 (tv == TV_CRUSADE_BOOK) ||
3965 (tv == TV_MUSIC_BOOK) ||
3966 (tv == TV_HISSATSU_BOOK) ||
3967 ((o_ptr->to_a > 0) || (o_ptr->to_h + o_ptr->to_d > 0)))
3969 /* Memorize the item */
3970 o_ptr->marked |= OM_FOUND;
3984 msg_print("ËâË¡¤Î¥¢¥¤¥Æ¥à¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3986 msg_print("You sense the presence of magic objects!");
3997 * Detect all "normal" monsters on the current panel
3999 bool detect_monsters_normal(int range)
4005 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
4008 for (i = 1; i < m_max; i++)
4010 monster_type *m_ptr = &m_list[i];
4011 monster_race *r_ptr = &r_info[m_ptr->r_idx];
4013 /* Skip dead monsters */
4014 if (!m_ptr->r_idx) continue;
4020 /* Only detect nearby monsters */
4021 if (distance(py, px, y, x) > range) continue;
4023 /* Detect all non-invisible monsters */
4024 if ((!(r_ptr->flags2 & RF2_INVISIBLE)) ||
4025 p_ptr->see_inv || p_ptr->tim_invis)
4027 /* Repair visibility later */
4028 repair_monsters = TRUE;
4030 /* Hack -- Detect monster */
4031 m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
4033 /* Update the monster */
4034 update_mon(i, FALSE);
4041 if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT+3)) flag = FALSE;
4046 /* Describe result */
4048 msg_print("¥â¥ó¥¹¥¿¡¼¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
4050 msg_print("You sense the presence of monsters!");
4061 * Detect all "invisible" monsters around the player
4063 bool detect_monsters_invis(int range)
4068 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
4071 for (i = 1; i < m_max; i++)
4073 monster_type *m_ptr = &m_list[i];
4074 monster_race *r_ptr = &r_info[m_ptr->r_idx];
4076 /* Skip dead monsters */
4077 if (!m_ptr->r_idx) continue;
4083 /* Only detect nearby monsters */
4084 if (distance(py, px, y, x) > range) continue;
4086 /* Detect invisible monsters */
4087 if (r_ptr->flags2 & RF2_INVISIBLE)
4089 /* Update monster recall window */
4090 if (p_ptr->monster_race_idx == m_ptr->r_idx)
4093 p_ptr->window |= (PW_MONSTER);
4096 /* Repair visibility later */
4097 repair_monsters = TRUE;
4099 /* Hack -- Detect monster */
4100 m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
4102 /* Update the monster */
4103 update_mon(i, FALSE);
4110 if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT+3)) flag = FALSE;
4115 /* Describe result */
4117 msg_print("Æ©ÌÀ¤ÊÀ¸Êª¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
4119 msg_print("You sense the presence of invisible creatures!");
4131 * Detect all "evil" monsters on current panel
4133 bool detect_monsters_evil(int range)
4138 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
4141 for (i = 1; i < m_max; i++)
4143 monster_type *m_ptr = &m_list[i];
4144 monster_race *r_ptr = &r_info[m_ptr->r_idx];
4146 /* Skip dead monsters */
4147 if (!m_ptr->r_idx) continue;
4153 /* Only detect nearby monsters */
4154 if (distance(py, px, y, x) > range) continue;
4156 /* Detect evil monsters */
4157 if (r_ptr->flags3 & RF3_EVIL)
4159 /* Take note that they are evil */
4160 r_ptr->r_flags3 |= (RF3_EVIL);
4162 /* Update monster recall window */
4163 if (p_ptr->monster_race_idx == m_ptr->r_idx)
4166 p_ptr->window |= (PW_MONSTER);
4169 /* Repair visibility later */
4170 repair_monsters = TRUE;
4172 /* Hack -- Detect monster */
4173 m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
4175 /* Update the monster */
4176 update_mon(i, FALSE);
4186 /* Describe result */
4188 msg_print("¼Ù°¤Ê¤ëÀ¸Êª¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
4190 msg_print("You sense the presence of evil creatures!");
4203 * Detect all "nonliving", "undead" or "demonic" monsters on current panel
4205 bool detect_monsters_nonliving(int range)
4210 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
4213 for (i = 1; i < m_max; i++)
4215 monster_type *m_ptr = &m_list[i];
4216 monster_race *r_ptr = &r_info[m_ptr->r_idx];
4218 /* Skip dead monsters */
4219 if (!m_ptr->r_idx) continue;
4225 /* Only detect nearby monsters */
4226 if (distance(py, px, y, x) > range) continue;
4228 /* Detect non-living monsters */
4229 if (!monster_living(r_ptr))
4231 /* Update monster recall window */
4232 if (p_ptr->monster_race_idx == m_ptr->r_idx)
4235 p_ptr->window |= (PW_MONSTER);
4238 /* Repair visibility later */
4239 repair_monsters = TRUE;
4241 /* Hack -- Detect monster */
4242 m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
4244 /* Update the monster */
4245 update_mon(i, FALSE);
4255 /* Describe result */
4257 msg_print("¼«Á³¤Ç¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤Î¸ºß¤ò´¶¤¸¤¿¡ª");
4259 msg_print("You sense the presence of unnatural beings!");
4270 * Detect all monsters it has mind on current panel
4272 bool detect_monsters_mind(int range)
4277 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
4280 for (i = 1; i < m_max; i++)
4282 monster_type *m_ptr = &m_list[i];
4283 monster_race *r_ptr = &r_info[m_ptr->r_idx];
4285 /* Skip dead monsters */
4286 if (!m_ptr->r_idx) continue;
4292 /* Only detect nearby monsters */
4293 if (distance(py, px, y, x) > range) continue;
4295 /* Detect non-living monsters */
4296 if (!(r_ptr->flags2 & RF2_EMPTY_MIND))
4298 /* Update monster recall window */
4299 if (p_ptr->monster_race_idx == m_ptr->r_idx)
4302 p_ptr->window |= (PW_MONSTER);
4305 /* Repair visibility later */
4306 repair_monsters = TRUE;
4308 /* Hack -- Detect monster */
4309 m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
4311 /* Update the monster */
4312 update_mon(i, FALSE);
4322 /* Describe result */
4324 msg_print("»¦µ¤¤ò´¶¤¸¤È¤Ã¤¿¡ª");
4326 msg_print("You sense the presence of someone's mind!");
4337 * Detect all (string) monsters on current panel
4339 bool detect_monsters_string(int range, cptr Match)
4344 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
4347 for (i = 1; i < m_max; i++)
4349 monster_type *m_ptr = &m_list[i];
4350 monster_race *r_ptr = &r_info[m_ptr->r_idx];
4352 /* Skip dead monsters */
4353 if (!m_ptr->r_idx) continue;
4359 /* Only detect nearby monsters */
4360 if (distance(py, px, y, x) > range) continue;
4362 /* Detect monsters with the same symbol */
4363 if (strchr(Match, r_ptr->d_char))
4365 /* Update monster recall window */
4366 if (p_ptr->monster_race_idx == m_ptr->r_idx)
4369 p_ptr->window |= (PW_MONSTER);
4372 /* Repair visibility later */
4373 repair_monsters = TRUE;
4375 /* Hack -- Detect monster */
4376 m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
4378 /* Update the monster */
4379 update_mon(i, FALSE);
4386 if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT+3)) flag = FALSE;
4391 /* Describe result */
4393 msg_print("¥â¥ó¥¹¥¿¡¼¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
4395 msg_print("You sense the presence of monsters!");
4406 * A "generic" detect monsters routine, tagged to flags3
4408 bool detect_monsters_xxx(int range, u32b match_flag)
4413 cptr desc_monsters = "ÊѤʥâ¥ó¥¹¥¿¡¼";
4415 cptr desc_monsters = "weird monsters";
4418 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
4421 for (i = 1; i < m_max; i++)
4423 monster_type *m_ptr = &m_list[i];
4424 monster_race *r_ptr = &r_info[m_ptr->r_idx];
4426 /* Skip dead monsters */
4427 if (!m_ptr->r_idx) continue;
4433 /* Only detect nearby monsters */
4434 if (distance(py, px, y, x) > range) continue;
4436 /* Detect evil monsters */
4437 if (r_ptr->flags3 & (match_flag))
4439 /* Take note that they are something */
4440 r_ptr->r_flags3 |= (match_flag);
4442 /* Update monster recall window */
4443 if (p_ptr->monster_race_idx == m_ptr->r_idx)
4446 p_ptr->window |= (PW_MONSTER);
4449 /* Repair visibility later */
4450 repair_monsters = TRUE;
4452 /* Hack -- Detect monster */
4453 m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
4455 /* Update the monster */
4456 update_mon(i, FALSE);
4470 desc_monsters = "¥Ç¡¼¥â¥ó";
4472 desc_monsters = "demons";
4478 desc_monsters = "¥¢¥ó¥Ç¥Ã¥É";
4480 desc_monsters = "the undead";
4486 /* Describe result */
4488 msg_format("%s¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª", desc_monsters);
4490 msg_format("You sense the presence of %s!", desc_monsters);
4504 bool detect_all(int range)
4506 bool detect = FALSE;
4508 /* Detect everything */
4509 if (detect_traps(range, TRUE)) detect = TRUE;
4510 if (detect_doors(range)) detect = TRUE;
4511 if (detect_stairs(range)) detect = TRUE;
4513 /* There are too many hidden treasure. So... */
4514 /* if (detect_treasure(range)) detect = TRUE; */
4516 if (detect_objects_gold(range)) detect = TRUE;
4517 if (detect_objects_normal(range)) detect = TRUE;
4518 if (detect_monsters_invis(range)) detect = TRUE;
4519 if (detect_monsters_normal(range)) detect = TRUE;
4527 * Apply a "project()" directly to all viewable monsters
4529 * Note that affected monsters are NOT auto-tracked by this usage.
4531 * To avoid misbehavior when monster deaths have side-effects,
4532 * this is done in two passes. -- JDL
4534 bool project_hack(int typ, int dam)
4537 int flg = PROJECT_JUMP | PROJECT_KILL | PROJECT_HIDE;
4538 bool obvious = FALSE;
4541 /* Mark all (nearby) monsters */
4542 for (i = 1; i < m_max; i++)
4544 monster_type *m_ptr = &m_list[i];
4546 /* Paranoia -- Skip dead monsters */
4547 if (!m_ptr->r_idx) continue;
4553 /* Require line of sight */
4554 if (!player_has_los_bold(y, x)) continue;
4556 /* Mark the monster */
4557 m_ptr->mflag |= (MFLAG_TEMP);
4560 /* Affect all marked monsters */
4561 for (i = 1; i < m_max; i++)
4563 monster_type *m_ptr = &m_list[i];
4565 /* Skip unmarked monsters */
4566 if (!(m_ptr->mflag & (MFLAG_TEMP))) continue;
4569 m_ptr->mflag &= ~(MFLAG_TEMP);
4575 /* Jump directly to the target monster */
4576 if (project(0, 0, y, x, dam, typ, flg, -1)) obvious = TRUE;
4587 bool speed_monsters(void)
4589 return (project_hack(GF_OLD_SPEED, p_ptr->lev));
4595 bool slow_monsters(void)
4597 return (project_hack(GF_OLD_SLOW, p_ptr->lev));
4603 bool sleep_monsters(void)
4605 return (project_hack(GF_OLD_SLEEP, p_ptr->lev));
4610 * Banish evil monsters
4612 bool banish_evil(int dist)
4614 return (project_hack(GF_AWAY_EVIL, dist));
4621 bool turn_undead(void)
4623 bool tester = (project_hack(GF_TURN_UNDEAD, p_ptr->lev));
4625 chg_virtue(V_UNLIFE, -1);
4631 * Dispel undead monsters
4633 bool dispel_undead(int dam)
4635 bool tester = (project_hack(GF_DISP_UNDEAD, dam));
4637 chg_virtue(V_UNLIFE, -2);
4642 * Dispel evil monsters
4644 bool dispel_evil(int dam)
4646 return (project_hack(GF_DISP_EVIL, dam));
4650 * Dispel good monsters
4652 bool dispel_good(int dam)
4654 return (project_hack(GF_DISP_GOOD, dam));
4658 * Dispel all monsters
4660 bool dispel_monsters(int dam)
4662 return (project_hack(GF_DISP_ALL, dam));
4666 * Dispel 'living' monsters
4668 bool dispel_living(int dam)
4670 return (project_hack(GF_DISP_LIVING, dam));
4676 bool dispel_demons(int dam)
4678 return (project_hack(GF_DISP_DEMON, dam));
4687 return (project_hack(GF_CRUSADE, p_ptr->lev*4));
4692 * Wake up all monsters, and speed up "los" monsters.
4694 void aggravate_monsters(int who)
4701 /* Aggravate everyone nearby */
4702 for (i = 1; i < m_max; i++)
4704 monster_type *m_ptr = &m_list[i];
4705 /* monster_race *r_ptr = &r_info[m_ptr->r_idx]; */
4707 /* Paranoia -- Skip dead monsters */
4708 if (!m_ptr->r_idx) continue;
4710 /* Skip aggravating monster (or player) */
4711 if (i == who) continue;
4713 /* Wake up nearby sleeping monsters */
4714 if (m_ptr->cdis < MAX_SIGHT * 2)
4723 if (!is_pet(m_ptr)) m_ptr->mflag2 |= MFLAG2_NOPET;
4726 /* Speed up monsters in line of sight */
4727 if (player_has_los_bold(m_ptr->fy, m_ptr->fx))
4731 m_ptr->fast = MIN(200, m_ptr->fast + 100);
4739 if (speed) msg_print("ÉÕ¶á¤Ç²¿¤«¤¬ÆÍÇ¡¶½Ê³¤·¤¿¤è¤¦¤Ê´¶¤¸¤ò¼õ¤±¤¿¡ª");
4740 else if (sleep) msg_print("²¿¤«¤¬ÆÍÇ¡¶½Ê³¤·¤¿¤è¤¦¤ÊÁû¡¹¤·¤¤²»¤¬±ó¤¯¤Ëʹ¤³¤¨¤¿¡ª");
4742 if (speed) msg_print("You feel a sudden stirring nearby!");
4743 else if (sleep) msg_print("You hear a sudden stirring in the distance!");
4745 if (p_ptr->riding) p_ptr->update |= PU_BONUS;
4751 * Delete all non-unique/non-quest monsters of a given "type" from the level
4753 bool symbol_genocide(int power, int player_cast)
4757 bool result = FALSE;
4758 int msec = delay_factor * delay_factor * delay_factor;
4760 /* Prevent genocide in quest levels */
4761 if (p_ptr->inside_quest && !random_quest_number(dun_level))
4766 /* Mega-Hack -- Get a monster symbol */
4768 while(!get_com("¤É¤Î¼ïÎà(ʸ»ú)¤Î¥â¥ó¥¹¥¿¡¼¤òËõ»¦¤·¤Þ¤¹¤«: ", &typ, FALSE));
4770 while(!get_com("Choose a monster race (by symbol) to genocide: ", &typ, FALSE));
4774 /* Delete the monsters of that "type" */
4775 for (i = 1; i < m_max; i++)
4777 monster_type *m_ptr = &m_list[i];
4778 monster_race *r_ptr = &r_info[m_ptr->r_idx];
4782 /* Paranoia -- Skip dead monsters */
4783 if (!m_ptr->r_idx) continue;
4785 /* Skip "wrong" monsters */
4786 if (r_ptr->d_char != typ) continue;
4788 if (is_pet(m_ptr) && !player_cast) continue;
4790 /* Hack -- Skip Unique Monsters */
4791 if (r_ptr->flags1 & (RF1_UNIQUE)) angry = TRUE;
4793 /* Hack -- Skip Quest Monsters */
4794 else if (r_ptr->flags1 & RF1_QUESTOR) angry = TRUE;
4796 else if (r_ptr->flags7 & RF7_UNIQUE2) angry = TRUE;
4798 else if (i == p_ptr->riding) angry = TRUE;
4800 else if (player_cast && (r_ptr->level > randint0(power))) angry = TRUE;
4802 else if (player_cast && (m_ptr->mflag2 & MFLAG2_NOGENO)) angry = TRUE;
4804 /* Delete the monster */
4805 else delete_monster_idx(i);
4807 if (angry && player_cast)
4809 monster_desc(m_name, m_ptr, 0);
4810 if (m_ptr->ml && !p_ptr->blind)
4813 msg_format("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", m_name);
4815 msg_format("%^s is unaffected.", m_name);
4821 if (m_ptr->ml && !p_ptr->blind)
4824 msg_format("%^s¤¬Ìܤò³Ð¤Þ¤·¤¿¡£", m_name);
4826 msg_format("%^s wakes up.", m_name);
4830 if (is_friendly(m_ptr) && !is_pet(m_ptr))
4832 if (m_ptr->ml && !p_ptr->blind)
4835 msg_format("%s¤ÏÅܤä¿¡ª", m_name);
4837 msg_format("%^s gets angry!", m_name);
4842 if (one_in_(13)) m_ptr->mflag2 |= MFLAG2_NOGENO;
4849 take_hit(DAMAGE_GENO, randint1(4), "Ëõ»¦¤Î¼öʸ¤ò¾§¤¨¤¿ÈèÏ«", -1);
4851 take_hit(DAMAGE_GENO, randint1(4), "the strain of casting Genocide", -1);
4856 /* Visual feedback */
4857 move_cursor_relative(py, px);
4860 p_ptr->redraw |= (PR_HP);
4863 p_ptr->window |= (PW_PLAYER);
4872 Term_xtra(TERM_XTRA_DELAY, msec);
4879 chg_virtue(V_VITALITY, -2);
4880 chg_virtue(V_CHANCE, -1);
4888 * Delete all nearby (non-unique) monsters
4890 bool mass_genocide(int power, int player_cast)
4893 bool result = FALSE;
4894 int msec = delay_factor * delay_factor * delay_factor;
4897 /* Prevent mass genocide in quest levels */
4898 if (p_ptr->inside_quest && !random_quest_number(dun_level))
4903 /* Delete the (nearby) monsters */
4904 for (i = 1; i < m_max; i++)
4906 monster_type *m_ptr = &m_list[i];
4907 monster_race *r_ptr = &r_info[m_ptr->r_idx];
4911 /* Paranoia -- Skip dead monsters */
4912 if (!m_ptr->r_idx) continue;
4914 /* Skip distant monsters */
4915 if (m_ptr->cdis > MAX_SIGHT) continue;
4917 if (is_pet(m_ptr) && !player_cast) continue;
4919 /* Hack -- Skip unique monsters */
4920 if (r_ptr->flags1 & (RF1_UNIQUE)) angry = TRUE;
4922 /* Hack -- Skip Quest Monsters */
4923 else if (r_ptr->flags1 & RF1_QUESTOR) angry = TRUE;
4925 else if (r_ptr->flags7 & RF7_UNIQUE2) angry = TRUE;
4927 else if (i == p_ptr->riding) angry = TRUE;
4929 else if (player_cast && (r_ptr->level > randint0(power))) angry = TRUE;
4931 else if (player_cast && (m_ptr->mflag2 & MFLAG2_NOGENO)) angry = TRUE;
4933 /* Delete the monster */
4934 else delete_monster_idx(i);
4936 if (angry && player_cast)
4938 monster_desc(m_name, m_ptr, 0);
4939 if (m_ptr->ml && !p_ptr->blind)
4942 msg_format("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", m_name);
4944 msg_format("%^s is unaffected.", m_name);
4950 if (m_ptr->ml && !p_ptr->blind)
4953 msg_format("%^s¤¬Ìܤò³Ð¤Þ¤·¤¿¡£", m_name);
4955 msg_format("%^s wakes up.", m_name);
4959 if (is_friendly(m_ptr) && !is_pet(m_ptr))
4961 if (m_ptr->ml && !p_ptr->blind)
4964 msg_format("%s¤ÏÅܤä¿¡ª", m_name);
4966 msg_format("%^s gets angry!", m_name);
4971 if (one_in_(13)) m_ptr->mflag2 |= MFLAG2_NOGENO;
4976 /* Hack -- visual feedback */
4978 take_hit(DAMAGE_GENO, randint1(3), "¼þÊÕËõ»¦¤Î¼öʸ¤ò¾§¤¨¤¿ÈèÏ«", -1);
4980 take_hit(DAMAGE_GENO, randint1(3), "the strain of casting Mass Genocide", -1);
4985 move_cursor_relative(py, px);
4988 p_ptr->redraw |= (PR_HP);
4991 p_ptr->window |= (PW_PLAYER);
5000 Term_xtra(TERM_XTRA_DELAY, msec);
5008 chg_virtue(V_VITALITY, -2);
5009 chg_virtue(V_CHANCE, -1);
5018 * Delete all nearby (non-unique) undead
5020 bool mass_genocide_undead(int power, int player_cast)
5023 bool result = FALSE;
5024 int msec = delay_factor * delay_factor * delay_factor;
5027 /* Prevent mass genocide in quest levels */
5028 if (p_ptr->inside_quest && !random_quest_number(dun_level))
5033 /* Delete the (nearby) monsters */
5034 for (i = 1; i < m_max; i++)
5036 monster_type *m_ptr = &m_list[i];
5037 monster_race *r_ptr = &r_info[m_ptr->r_idx];
5041 /* Paranoia -- Skip dead monsters */
5042 if (!m_ptr->r_idx) continue;
5044 if (!(r_ptr->flags3 & RF3_UNDEAD)) continue;
5046 /* Skip distant monsters */
5047 if (m_ptr->cdis > MAX_SIGHT) continue;
5049 if (is_pet(m_ptr) && !player_cast) continue;
5051 /* Hack -- Skip unique monsters */
5052 if (r_ptr->flags1 & (RF1_UNIQUE)) angry = TRUE;
5054 /* Hack -- Skip Quest Monsters */
5055 else if (r_ptr->flags1 & RF1_QUESTOR) angry = TRUE;
5057 else if (r_ptr->flags7 & RF7_UNIQUE2) angry = TRUE;
5059 else if (i == p_ptr->riding) angry = TRUE;
5061 else if (player_cast && (r_ptr->level > randint0(power))) angry = TRUE;
5063 else if (player_cast && (m_ptr->mflag2 & MFLAG2_NOGENO)) angry = TRUE;
5065 /* Delete the monster */
5066 else delete_monster_idx(i);
5068 if (angry && player_cast)
5070 monster_desc(m_name, m_ptr, 0);
5071 if (m_ptr->ml && !p_ptr->blind)
5074 msg_format("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", m_name);
5076 msg_format("%^s is unaffected.", m_name);
5082 if (m_ptr->ml && !p_ptr->blind)
5085 msg_format("%^s¤¬Ìܤò³Ð¤Þ¤·¤¿¡£", m_name);
5087 msg_format("%^s wakes up.", m_name);
5091 if (is_friendly(m_ptr) && !is_pet(m_ptr))
5093 if (m_ptr->ml && !p_ptr->blind)
5096 msg_format("%s¤ÏÅܤä¿¡ª", m_name);
5098 msg_format("%^s gets angry!", m_name);
5103 if (one_in_(13)) m_ptr->mflag2 |= MFLAG2_NOGENO;
5108 /* Hack -- visual feedback */
5110 take_hit(DAMAGE_GENO, randint1(3), "¥¢¥ó¥Ç¥Ã¥É¾ÃÌǤμöʸ¤ò¾§¤¨¤¿ÈèÏ«", -1);
5112 take_hit(DAMAGE_GENO, randint1(3), "the strain of casting Mass Genocide", -1);
5117 move_cursor_relative(py, px);
5120 p_ptr->redraw |= (PR_HP);
5123 p_ptr->window |= (PW_PLAYER);
5132 Term_xtra(TERM_XTRA_DELAY, msec);
5140 chg_virtue(V_UNLIFE, -2);
5141 chg_virtue(V_CHANCE, -1);
5150 * Probe nearby monsters
5165 /* Probe all (nearby) monsters */
5166 for (i = 1; i < m_max; i++)
5168 monster_type *m_ptr = &m_list[i];
5169 monster_race *r_ptr = &r_info[m_ptr->r_idx];
5171 /* Paranoia -- Skip dead monsters */
5172 if (!m_ptr->r_idx) continue;
5174 /* Require line of sight */
5175 if (!player_has_los_bold(m_ptr->fy, m_ptr->fx)) continue;
5177 /* Probe visible monsters */
5182 /* Start the message */
5186 msg_print("Ä´ººÃæ...");
5188 msg_print("Probing...");
5194 if (m_ptr->ap_r_idx != m_ptr->r_idx)
5196 if (m_ptr->mflag2 & MFLAG2_KAGE)
5197 m_ptr->mflag2 &= ~(MFLAG2_KAGE);
5199 m_ptr->ap_r_idx = m_ptr->r_idx;
5200 lite_spot(m_ptr->fy, m_ptr->fx);
5202 /* Get "the monster" or "something" */
5203 monster_desc(m_name, m_ptr, 0x204);
5205 speed = m_ptr->mspeed - 110;
5206 if(m_ptr->fast) speed += 10;
5207 if(m_ptr->slow) speed -= 10;
5209 /* Get the monster's alignment */
5211 if ((r_ptr->flags3 & RF3_EVIL) && (r_ptr->flags3 & RF3_GOOD)) align = "籡";
5212 else if (r_ptr->flags3 & RF3_EVIL) align = "¼Ù°";
5213 else if (r_ptr->flags3 & RF3_GOOD) align = "Á±ÎÉ";
5214 else if ((m_ptr->sub_align & SUB_ALIGN_EVIL) && (m_ptr->sub_align & SUB_ALIGN_GOOD)) align = "ÃæΩ(Á±°)";
5215 else if (m_ptr->sub_align & SUB_ALIGN_EVIL) align = "ÃæΩ(¼Ù°)";
5216 else if (m_ptr->sub_align & SUB_ALIGN_GOOD) align = "ÃæΩ(Á±ÎÉ)";
5217 else align = "ÃæΩ";
5219 if ((r_ptr->flags3 & RF3_EVIL) && (r_ptr->flags3 & RF3_GOOD)) align = "good&evil";
5220 else if (r_ptr->flags3 & RF3_EVIL) align = "evil";
5221 else if (r_ptr->flags3 & RF3_GOOD) align = "good";
5222 else if ((m_ptr->sub_align & SUB_ALIGN_EVIL) && (m_ptr->sub_align & SUB_ALIGN_GOOD)) align = "neutral(good&evil)";
5223 else if (m_ptr->sub_align & SUB_ALIGN_EVIL) align = "neutral(evil)";
5224 else if (m_ptr->sub_align & SUB_ALIGN_GOOD) align = "neutral(good)";
5225 else align = "neutral";
5228 /* Describe the monster */
5230 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);
5232 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);
5234 if (r_ptr->next_r_idx)
5236 strcat(buf, format("%d/%d ", m_ptr->exp, r_ptr->next_exp));
5240 strcat(buf, "xxx ");
5244 if (m_ptr->csleep) strcat(buf,"¿ç̲ ");
5245 if (m_ptr->stunned) strcat(buf,"ۯ۰ ");
5246 if (m_ptr->monfear) strcat(buf,"¶²ÉÝ ");
5247 if (m_ptr->confused) strcat(buf,"º®Íð ");
5248 if (m_ptr->invulner) strcat(buf,"̵Ũ ");
5250 if (m_ptr->csleep) strcat(buf,"sleeping ");
5251 if (m_ptr->stunned) strcat(buf,"stunned ");
5252 if (m_ptr->monfear) strcat(buf,"scared ");
5253 if (m_ptr->confused) strcat(buf,"confused ");
5254 if (m_ptr->invulner) strcat(buf,"invulnerable ");
5256 buf[strlen(buf)-1] = '\0';
5259 /* HACK : Add the line to message buffer */
5261 p_ptr->window |= (PW_MESSAGE);
5264 if (m_ptr->ml) move_cursor_relative(m_ptr->fy, m_ptr->fx);
5267 Term_erase(0, 0, 255);
5269 /* Learn everything about this monster */
5270 if (lore_do_probe(m_ptr->r_idx))
5273 /* Note that we learnt some new flags -Mogami- */
5274 msg_format("%s¤Ë¤Ä¤¤¤Æ¤µ¤é¤Ë¾Ü¤·¤¯¤Ê¤Ã¤¿µ¤¤¬¤¹¤ë¡£", m_name);
5278 /* Get base name of monster */
5279 strcpy(buf, (r_name + r_ptr->name));
5284 /* Note that we learnt some new flags -Mogami- */
5285 msg_format("You now know more about %s.", buf);
5287 /* Clear -more- prompt */
5303 chg_virtue(V_KNOWLEDGE, 1);
5306 msg_print("¤³¤ì¤ÇÁ´Éô¤Ç¤¹¡£");
5308 msg_print("That's all.");
5320 * The spell of destruction
5322 * This spell "deletes" monsters (instead of "killing" them).
5324 * Later we may use one function for both "destruction" and
5325 * "earthquake" by using the "full" to select "destruction".
5327 bool destroy_area(int y1, int x1, int r)
5334 /* Prevent destruction of quest levels and town */
5335 if ((p_ptr->inside_quest && (p_ptr->inside_quest < MIN_RANDOM_QUEST)) || !dun_level)
5340 /* Big area of affect */
5341 for (y = (y1 - r); y <= (y1 + r); y++)
5343 for (x = (x1 - r); x <= (x1 + r); x++)
5345 monster_type *m_ptr;
5346 monster_race *r_ptr;
5348 /* Skip illegal grids */
5349 if (!in_bounds(y, x)) continue;
5351 /* Extract the distance */
5352 k = distance(y1, x1, y, x);
5354 /* Stay in the circle of death */
5355 if (k > r) continue;
5357 /* Access the grid */
5358 c_ptr = &cave[y][x];
5359 m_ptr = &m_list[c_ptr->m_idx];
5360 r_ptr = &r_info[m_ptr->r_idx];
5362 /* Lose room and vault */
5363 c_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY | CAVE_UNSAFE | CAVE_OBJECT);
5365 /* Lose light and knowledge */
5366 c_ptr->info &= ~(CAVE_MARK | CAVE_GLOW);
5368 /* Hack -- Notice player affect */
5369 if ((x == px) && (y == py))
5371 /* Hurt the player later */
5374 /* Do not hurt this grid */
5378 /* Hack -- Skip the epicenter */
5379 if ((y == y1) && (x == x1)) continue;
5381 if ((r_ptr->flags1 & RF1_QUESTOR))
5383 /* Heal the monster */
5384 m_list[c_ptr->m_idx].hp = m_list[c_ptr->m_idx].maxhp;
5386 /* Try to teleport away quest monsters */
5387 if (!teleport_away(c_ptr->m_idx, (r * 2) + 1, TRUE)) continue;
5393 if (record_named_pet && is_pet(&m_list[c_ptr->m_idx]) && m_list[c_ptr->m_idx].nickname)
5397 monster_desc(m_name, &m_list[c_ptr->m_idx], 0x08);
5398 do_cmd_write_nikki(NIKKI_NAMED_PET, 6, m_name);
5401 /* Delete the monster (if any) */
5402 delete_monster(y, x);
5407 s16b this_o_idx, next_o_idx = 0;
5409 /* Scan all objects in the grid */
5410 for (this_o_idx = c_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx)
5414 /* Acquire object */
5415 o_ptr = &o_list[this_o_idx];
5417 /* Acquire next object */
5418 next_o_idx = o_ptr->next_o_idx;
5420 /* Hack -- Preserve unknown artifacts */
5421 if (artifact_p(o_ptr) && !object_known_p(o_ptr))
5423 /* Mega-Hack -- Preserve the artifact */
5424 a_info[o_ptr->name1].cur_num = 0;
5428 delete_object(y, x);
5430 /* Destroy "valid" grids */
5431 if (!cave_perma_bold(y, x))
5433 /* Wall (or floor) type */
5439 /* Create granite wall */
5440 cave_set_feat(y, x, FEAT_WALL_EXTRA);
5446 /* Create quartz vein */
5447 cave_set_feat(y, x, FEAT_QUARTZ);
5453 /* Create magma vein */
5454 cave_set_feat(y, x, FEAT_MAGMA);
5461 cave_set_feat(y, x, floor_type[randint0(100)]);
5468 /* Hack -- Affect player */
5473 msg_print("dz¤¨¤ë¤è¤¦¤ÊÁ®¸÷¤¬È¯À¸¤·¤¿¡ª");
5475 msg_print("There is a searing blast of light!");
5479 /* Blind the player */
5480 if (!p_ptr->resist_blind && !p_ptr->resist_lite)
5483 (void)set_blind(p_ptr->blind + 10 + randint1(10));
5489 /* Mega-Hack -- Forget the view and lite */
5490 p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE);
5493 p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MON_LITE);
5495 /* Update the monsters */
5496 p_ptr->update |= (PU_MONSTERS);
5499 p_ptr->redraw |= (PR_MAP);
5502 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
5510 * Induce an "earthquake" of the given radius at the given location.
5512 * This will turn some walls into floors and some floors into walls.
5514 * The player will take damage and "jump" into a safe grid if possible,
5515 * otherwise, he will "tunnel" through the rubble instantaneously.
5517 * Monsters will take damage, and "jump" into a safe grid if possible,
5518 * otherwise they will be "buried" in the rubble, disappearing from
5519 * the level in the same way that they do when genocided.
5521 * Note that thus the player and monsters (except eaters of walls and
5522 * passers through walls) will never occupy the same grid as a wall.
5523 * Note that as of now (2.7.8) no monster may occupy a "wall" grid, even
5524 * for a single turn, unless that monster can pass_walls or kill_walls.
5525 * This has allowed massive simplification of the "monster" code.
5527 bool earthquake(int cy, int cx, int r)
5529 int i, t, y, x, yy, xx, dy, dx, oy, ox;
5531 int sn = 0, sy = 0, sx = 0;
5537 /* Prevent destruction of quest levels and town */
5538 if ((p_ptr->inside_quest && (p_ptr->inside_quest < MIN_RANDOM_QUEST)) || !dun_level)
5543 /* Paranoia -- Enforce maximum range */
5546 /* Clear the "maximal blast" area */
5547 for (y = 0; y < 32; y++)
5549 for (x = 0; x < 32; x++)
5555 /* Check around the epicenter */
5556 for (dy = -r; dy <= r; dy++)
5558 for (dx = -r; dx <= r; dx++)
5560 /* Extract the location */
5564 /* Skip illegal grids */
5565 if (!in_bounds(yy, xx)) continue;
5567 /* Skip distant grids */
5568 if (distance(cy, cx, yy, xx) > r) continue;
5570 /* Access the grid */
5571 c_ptr = &cave[yy][xx];
5573 /* Lose room and vault */
5574 c_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY | CAVE_UNSAFE);
5576 /* Lose light and knowledge */
5577 c_ptr->info &= ~(CAVE_GLOW | CAVE_MARK);
5579 /* Skip the epicenter */
5580 if (!dx && !dy) continue;
5582 /* Skip most grids */
5583 if (randint0(100) < 85) continue;
5585 /* Damage this grid */
5586 map[16+yy-cy][16+xx-cx] = TRUE;
5588 /* Hack -- Take note of player damage */
5589 if ((yy == py) && (xx == px)) hurt = TRUE;
5593 /* First, affect the player (if necessary) */
5594 if (hurt && !prace_is_(RACE_SPECTRE) && !p_ptr->wraith_form && !p_ptr->kabenuke)
5596 /* Check around the player */
5597 for (i = 0; i < 8; i++)
5599 /* Access the location */
5600 y = py + ddy_ddd[i];
5601 x = px + ddx_ddd[i];
5603 /* Skip non-empty grids */
5604 if (!cave_empty_bold(y, x)) continue;
5606 /* Important -- Skip "quake" grids */
5607 if (map[16+y-cy][16+x-cx]) continue;
5609 if (cave[y][x].m_idx) continue;
5611 /* Count "safe" grids */
5614 /* Randomize choice */
5615 if (randint0(sn) > 0) continue;
5617 /* Save the safe location */
5621 /* Random message */
5622 switch (randint1(3))
5627 msg_print("¥À¥ó¥¸¥ç¥ó¤ÎÊɤ¬Êø¤ì¤¿¡ª");
5629 msg_print("The cave ceiling collapses!");
5637 msg_print("¥À¥ó¥¸¥ç¥ó¤Î¾²¤¬ÉÔ¼«Á³¤Ë¤Í¤¸¶Ê¤¬¤Ã¤¿¡ª");
5639 msg_print("The cave floor twists in an unnatural way!");
5647 msg_print("¥À¥ó¥¸¥ç¥ó¤¬Íɤ줿¡ªÊø¤ì¤¿´ä¤¬Æ¬¤Ë¹ß¤Ã¤Æ¤¤¿¡ª");
5649 msg_print("The cave quakes! You are pummeled with debris!");
5656 /* Hurt the player a lot */
5659 /* Message and damage */
5661 msg_print("¤¢¤Ê¤¿¤Ï¤Ò¤É¤¤²ø²æ¤òÉé¤Ã¤¿¡ª");
5663 msg_print("You are severely crushed!");
5669 /* Destroy the grid, and push the player to safety */
5672 /* Calculate results */
5673 switch (randint1(3))
5678 msg_print("¹ß¤êÃí¤°´ä¤ò¤¦¤Þ¤¯Èò¤±¤¿¡ª");
5680 msg_print("You nimbly dodge the blast!");
5689 msg_print("´äÀФ¬¤¢¤Ê¤¿¤Ëľ·â¤·¤¿!");
5691 msg_print("You are bashed by rubble!");
5694 damage = damroll(10, 4);
5695 (void)set_stun(p_ptr->stun + randint1(50));
5701 msg_print("¤¢¤Ê¤¿¤Ï¾²¤ÈÊɤȤδ֤˶´¤Þ¤ì¤Æ¤·¤Þ¤Ã¤¿¡ª");
5703 msg_print("You are crushed between the floor and ceiling!");
5706 damage = damroll(10, 4);
5707 (void)set_stun(p_ptr->stun + randint1(50));
5712 /* Save the old location */
5716 /* Move the player to the safe location */
5723 tmp = cave[py][px].m_idx;
5724 cave[py][px].m_idx = cave[oy][ox].m_idx;
5725 cave[oy][ox].m_idx = tmp;
5726 m_list[p_ptr->riding].fy = py;
5727 m_list[p_ptr->riding].fx = px;
5728 update_mon(cave[py][px].m_idx, TRUE);
5731 /* Redraw the old spot */
5734 /* Redraw the new spot */
5737 /* Check for new panel */
5741 /* Important -- no wall on player */
5742 map[16+py-cy][16+px-cx] = FALSE;
5744 /* Take some damage */
5746 if (damage) take_hit(DAMAGE_ATTACK, damage, "ÃÏ¿Ì", -1);
5748 if (damage) take_hit(DAMAGE_ATTACK, damage, "an earthquake", -1);
5754 /* Examine the quaked region */
5755 for (dy = -r; dy <= r; dy++)
5757 for (dx = -r; dx <= r; dx++)
5759 /* Extract the location */
5763 /* Skip unaffected grids */
5764 if (!map[16+yy-cy][16+xx-cx]) continue;
5766 /* Access the grid */
5767 c_ptr = &cave[yy][xx];
5769 if (c_ptr->m_idx == p_ptr->riding) continue;
5771 /* Process monsters */
5774 monster_type *m_ptr = &m_list[c_ptr->m_idx];
5775 monster_race *r_ptr = &r_info[m_ptr->r_idx];
5777 /* Quest monsters */
5778 if (r_ptr->flags1 & RF1_QUESTOR)
5780 /* No wall on quest monsters */
5781 map[16+yy-cy][16+xx-cx] = FALSE;
5786 /* Most monsters cannot co-exist with rock */
5787 if (!(r_ptr->flags2 & (RF2_KILL_WALL)) &&
5788 !(r_ptr->flags2 & (RF2_PASS_WALL)))
5792 /* Assume not safe */
5795 /* Monster can move to escape the wall */
5796 if (!(r_ptr->flags1 & (RF1_NEVER_MOVE)))
5798 /* Look for safety */
5799 for (i = 0; i < 8; i++)
5801 /* Access the grid */
5802 y = yy + ddy_ddd[i];
5803 x = xx + ddx_ddd[i];
5805 /* Skip non-empty grids */
5806 if (!cave_empty_bold(y, x)) continue;
5808 /* Hack -- no safety on glyph of warding */
5809 if (is_glyph_grid(&cave[y][x])) continue;
5810 if (is_explosive_rune_grid(&cave[y][x])) continue;
5812 /* ... nor on the Pattern */
5813 if ((cave[y][x].feat <= FEAT_PATTERN_XTRA2) &&
5814 (cave[y][x].feat >= FEAT_PATTERN_START))
5817 /* Important -- Skip "quake" grids */
5818 if (map[16+y-cy][16+x-cx]) continue;
5820 if (cave[y][x].m_idx) continue;
5821 if ((y == py) && (x == px)) continue;
5823 /* Count "safe" grids */
5826 /* Randomize choice */
5827 if (randint0(sn) > 0) continue;
5829 /* Save the safe grid */
5834 /* Describe the monster */
5835 monster_desc(m_name, m_ptr, 0);
5837 /* Scream in pain */
5839 msg_format("%^s¤Ï¶ìÄˤǵ㤤ï¤á¤¤¤¿¡ª", m_name);
5841 msg_format("%^s wails out in pain!", m_name);
5845 /* Take damage from the quake */
5846 damage = (sn ? damroll(4, 8) : (m_ptr->hp + 1));
5848 /* Monster is certainly awake */
5851 /* Apply damage directly */
5852 m_ptr->hp -= damage;
5854 /* Delete (not kill) "dead" monsters */
5859 msg_format("%^s¤Ï´äÀФËËä¤â¤ì¤Æ¤·¤Þ¤Ã¤¿¡ª", m_name);
5861 msg_format("%^s is embedded in the rock!", m_name);
5866 if (record_named_pet && is_pet(&m_list[c_ptr->m_idx]) && m_list[c_ptr->m_idx].nickname)
5870 monster_desc(m2_name, m_ptr, 0x08);
5871 do_cmd_write_nikki(NIKKI_NAMED_PET, 7, m2_name);
5875 /* Delete the monster */
5876 delete_monster(yy, xx);
5878 /* No longer safe */
5882 /* Hack -- Escape from the rock */
5885 int m_idx = cave[yy][xx].m_idx;
5887 /* Update the new location */
5888 cave[sy][sx].m_idx = m_idx;
5890 /* Update the old location */
5891 cave[yy][xx].m_idx = 0;
5893 /* Move the monster */
5897 /* Update the monster (new location) */
5898 update_mon(m_idx, TRUE);
5900 /* Redraw the old grid */
5903 /* Redraw the new grid */
5912 /* Examine the quaked region */
5913 for (dy = -r; dy <= r; dy++)
5915 for (dx = -r; dx <= r; dx++)
5917 /* Extract the location */
5921 /* Skip unaffected grids */
5922 if (!map[16+yy-cy][16+xx-cx]) continue;
5924 /* Access the cave grid */
5925 c_ptr = &cave[yy][xx];
5927 /* Paranoia -- never affect player */
5928 /* if ((yy == py) && (xx == px)) continue; */
5930 /* Destroy location (if valid) */
5931 if (cave_valid_bold(yy, xx))
5933 bool floor = cave_floor_bold(yy, xx);
5935 /* Delete objects */
5936 delete_object(yy, xx);
5938 /* Clear mirror, runes flag */
5939 c_ptr->info &= ~CAVE_OBJECT;
5941 /* Wall (or floor) type */
5942 t = (floor ? randint0(100) : 200);
5947 /* Create granite wall */
5948 cave_set_feat(yy, xx, FEAT_WALL_EXTRA);
5954 /* Create quartz vein */
5955 cave_set_feat(yy, xx, FEAT_QUARTZ);
5961 /* Create magma vein */
5962 cave_set_feat(yy, xx, FEAT_MAGMA);
5969 cave_set_feat(yy, xx, floor_type[randint0(100)]);
5976 /* Mega-Hack -- Forget the view and lite */
5977 p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE);
5980 p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MON_LITE);
5982 /* Update the monsters */
5983 p_ptr->update |= (PU_DISTANCE);
5985 /* Update the health bar */
5986 p_ptr->redraw |= (PR_HEALTH | PR_UHEALTH);
5989 p_ptr->redraw |= (PR_MAP);
5992 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
5999 void discharge_minion(void)
6004 for (i = 1; i < m_max; i++)
6006 monster_type *m_ptr = &m_list[i];
6007 if (!m_ptr->r_idx || !is_pet(m_ptr)) continue;
6008 if (m_ptr->nickname) okay = FALSE;
6010 if (!okay || p_ptr->riding)
6013 if (!get_check("ËÜÅö¤ËÁ´¥Ú¥Ã¥È¤òÇúÇˤ·¤Þ¤¹¤«¡©"))
6015 if (!get_check("You will blast all pets. Are you sure? "))
6019 for (i = 1; i < m_max; i++)
6022 monster_type *m_ptr = &m_list[i];
6023 monster_race *r_ptr;
6025 if (!m_ptr->r_idx || !is_pet(m_ptr)) continue;
6026 r_ptr = &r_info[m_ptr->r_idx];
6028 /* Uniques resist discharging */
6029 if (r_ptr->flags1 & RF1_UNIQUE)
6032 monster_desc(m_name, m_ptr, 0x00);
6034 msg_format("%s¤ÏÇúÇˤµ¤ì¤ë¤Î¤ò·ù¤¬¤ê¡¢¾¡¼ê¤Ë¼«Ê¬¤ÎÀ¤³¦¤Ø¤Èµ¢¤Ã¤¿¡£", m_name);
6036 msg_format("%^s resists to be blasted, and run away.", m_name);
6038 delete_monster_idx(i);
6041 dam = m_ptr->hp / 2;
6042 if (dam > 100) dam = (dam-100)/2 + 100;
6043 if (dam > 400) dam = (dam-400)/2 + 400;
6044 if (dam > 800) dam = 800;
6045 project(i, 2+(r_ptr->level/20), m_ptr->fy,
6046 m_ptr->fx, dam, GF_PLASMA,
6047 PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_MONSTER, -1);
6048 delete_monster_idx(i);
6054 * This routine clears the entire "temp" set.
6056 * This routine will Perma-Lite all "temp" grids.
6058 * This routine is used (only) by "lite_room()"
6060 * Dark grids are illuminated.
6062 * Also, process all affected monsters.
6064 * SMART monsters always wake up when illuminated
6065 * NORMAL monsters wake up 1/4 the time when illuminated
6066 * STUPID monsters wake up 1/10 the time when illuminated
6068 static void cave_temp_room_lite(void)
6072 /* Clear them all */
6073 for (i = 0; i < temp_n; i++)
6078 cave_type *c_ptr = &cave[y][x];
6080 /* No longer in the array */
6081 c_ptr->info &= ~(CAVE_TEMP);
6083 /* Update only non-CAVE_GLOW grids */
6084 /* if (c_ptr->info & (CAVE_GLOW)) continue; */
6087 c_ptr->info |= (CAVE_GLOW);
6089 /* Process affected monsters */
6094 monster_type *m_ptr = &m_list[c_ptr->m_idx];
6096 monster_race *r_ptr = &r_info[m_ptr->r_idx];
6098 /* Update the monster */
6099 update_mon(c_ptr->m_idx, FALSE);
6101 /* Stupid monsters rarely wake up */
6102 if (r_ptr->flags2 & (RF2_STUPID)) chance = 10;
6104 /* Smart monsters always wake up */
6105 if (r_ptr->flags2 & (RF2_SMART)) chance = 100;
6107 /* Sometimes monsters wake up */
6108 if (m_ptr->csleep && (randint0(100) < chance))
6113 /* Notice the "waking up" */
6118 /* Acquire the monster name */
6119 monster_desc(m_name, m_ptr, 0);
6121 /* Dump a message */
6123 msg_format("%^s¤¬Ìܤò³Ð¤Þ¤·¤¿¡£", m_name);
6125 msg_format("%^s wakes up.", m_name);
6127 /* Redraw the health bar */
6128 if (p_ptr->health_who == c_ptr->m_idx)
6129 p_ptr->redraw |= (PR_HEALTH);
6149 * This routine clears the entire "temp" set.
6151 * This routine will "darken" all "temp" grids.
6153 * In addition, some of these grids will be "unmarked".
6155 * This routine is used (only) by "unlite_room()"
6157 * Also, process all affected monsters
6159 static void cave_temp_room_unlite(void)
6163 /* Clear them all */
6164 for (i = 0; i < temp_n; i++)
6169 cave_type *c_ptr = &cave[y][x];
6171 /* No longer in the array */
6172 c_ptr->info &= ~(CAVE_TEMP);
6174 /* Darken the grid */
6175 if (!is_mirror_grid(c_ptr)) c_ptr->info &= ~(CAVE_GLOW);
6177 /* Hack -- Forget "boring" grids */
6178 if ((c_ptr->feat <= FEAT_INVIS) || (c_ptr->feat == FEAT_DIRT) || (c_ptr->feat == FEAT_GRASS))
6180 /* Forget the grid */
6181 if (!view_torch_grids) c_ptr->info &= ~(CAVE_MARK);
6187 /* Process affected monsters */
6190 /* Update the monster */
6191 update_mon(c_ptr->m_idx, FALSE);
6205 * Determine how much contiguous open space this grid is next to
6207 static int next_to_open(int cy, int cx)
6216 for (i = 0; i < 16; i++)
6218 y = cy + ddy_cdd[i % 8];
6219 x = cx + ddx_cdd[i % 8];
6221 /* Found a wall, break the length */
6222 if (!cave_floor_bold(y, x))
6224 /* Track best length */
6238 return (MAX(len, blen));
6242 static int next_to_walls_adj(int cy, int cx)
6250 for (i = 0; i < 8; i++)
6252 y = cy + ddy_ddd[i];
6253 x = cx + ddx_ddd[i];
6255 if (!cave_floor_bold(y, x)) c++;
6263 * Aux function -- see below
6265 static void cave_temp_room_aux(int y, int x, bool only_room)
6270 c_ptr = &cave[y][x];
6272 /* Avoid infinite recursion */
6273 if (c_ptr->info & (CAVE_TEMP)) return;
6275 /* Do not "leave" the current room */
6276 if (!(c_ptr->info & (CAVE_ROOM)))
6278 if (only_room) return;
6281 if (!in_bounds2(y, x)) return;
6283 /* Do not exceed the maximum spell range */
6284 if (distance(py, px, y, x) > MAX_RANGE) return;
6286 /* Verify this grid */
6288 * The reason why it is ==6 instead of >5 is that 8 is impossible
6289 * due to the check for cave_bold above.
6290 * 7 lights dead-end corridors (you need to do this for the
6291 * checkboard interesting rooms, so that the boundary is lit
6293 * This leaves only a check for 6 bounding walls!
6295 if (in_bounds(y, x) && cave_floor_bold(y, x) &&
6296 (next_to_walls_adj(y, x) == 6) && (next_to_open(y, x) <= 1)) return;
6299 /* Paranoia -- verify space */
6300 if (temp_n == TEMP_MAX) return;
6302 /* Mark the grid as "seen" */
6303 c_ptr->info |= (CAVE_TEMP);
6305 /* Add it to the "seen" set */
6312 * Aux function -- see below
6314 static void cave_temp_lite_room_aux(int y, int x)
6316 cave_temp_room_aux(y, x, FALSE);
6320 * Aux function -- see below
6322 static void cave_temp_unlite_room_aux(int y, int x)
6324 cave_temp_room_aux(y, x, TRUE);
6331 * Illuminate any room containing the given location.
6333 void lite_room(int y1, int x1)
6337 /* Add the initial grid */
6338 cave_temp_lite_room_aux(y1, x1);
6340 /* While grids are in the queue, add their neighbors */
6341 for (i = 0; i < temp_n; i++)
6343 x = temp_x[i], y = temp_y[i];
6345 /* Walls get lit, but stop light */
6346 if (!cave_floor_bold(y, x)) continue;
6348 /* Spread adjacent */
6349 cave_temp_lite_room_aux(y + 1, x);
6350 cave_temp_lite_room_aux(y - 1, x);
6351 cave_temp_lite_room_aux(y, x + 1);
6352 cave_temp_lite_room_aux(y, x - 1);
6354 /* Spread diagonal */
6355 cave_temp_lite_room_aux(y + 1, x + 1);
6356 cave_temp_lite_room_aux(y - 1, x - 1);
6357 cave_temp_lite_room_aux(y - 1, x + 1);
6358 cave_temp_lite_room_aux(y + 1, x - 1);
6361 /* Now, lite them all up at once */
6362 cave_temp_room_lite();
6367 * Darken all rooms containing the given location
6369 void unlite_room(int y1, int x1)
6373 /* Add the initial grid */
6374 cave_temp_unlite_room_aux(y1, x1);
6376 /* Spread, breadth first */
6377 for (i = 0; i < temp_n; i++)
6379 x = temp_x[i], y = temp_y[i];
6381 /* Walls get dark, but stop darkness */
6382 if (!cave_floor_bold(y, x)) continue;
6384 /* Spread adjacent */
6385 cave_temp_unlite_room_aux(y + 1, x);
6386 cave_temp_unlite_room_aux(y - 1, x);
6387 cave_temp_unlite_room_aux(y, x + 1);
6388 cave_temp_unlite_room_aux(y, x - 1);
6390 /* Spread diagonal */
6391 cave_temp_unlite_room_aux(y + 1, x + 1);
6392 cave_temp_unlite_room_aux(y - 1, x - 1);
6393 cave_temp_unlite_room_aux(y - 1, x + 1);
6394 cave_temp_unlite_room_aux(y + 1, x - 1);
6397 /* Now, darken them all at once */
6398 cave_temp_room_unlite();
6404 * Hack -- call light around the player
6405 * Affect all monsters in the projection radius
6407 bool lite_area(int dam, int rad)
6409 int flg = PROJECT_GRID | PROJECT_KILL;
6411 if (d_info[dungeon_type].flags1 & DF1_DARKNESS)
6414 msg_print("¥À¥ó¥¸¥ç¥ó¤¬¸÷¤òµÛ¼ý¤·¤¿¡£");
6416 msg_print("The darkness of this dungeon absorb your light.");
6421 /* Hack -- Message */
6425 msg_print("Çò¤¤¸÷¤¬ÊÕ¤ê¤òʤ¤Ã¤¿¡£");
6427 msg_print("You are surrounded by a white light.");
6432 /* Hook into the "project()" function */
6433 (void)project(0, rad, py, px, dam, GF_LITE_WEAK, flg, -1);
6435 /* Lite up the room */
6438 if (p_ptr->special_defense & NINJA_S_STEALTH)
6440 set_superstealth(FALSE);
6449 * Hack -- call darkness around the player
6450 * Affect all monsters in the projection radius
6452 bool unlite_area(int dam, int rad)
6454 int flg = PROJECT_GRID | PROJECT_KILL;
6456 /* Hack -- Message */
6460 msg_print("°Å°Ç¤¬ÊÕ¤ê¤òʤ¤Ã¤¿¡£");
6462 msg_print("Darkness surrounds you.");
6467 /* Hook into the "project()" function */
6468 (void)project(0, rad, py, px, dam, GF_DARK_WEAK, flg, -1);
6470 /* Lite up the room */
6471 unlite_room(py, px);
6481 * Stop if we hit a monster, act as a "ball"
6482 * Allow "target" mode to pass over monsters
6483 * Affect grids, objects, and monsters
6485 bool fire_ball(int typ, int dir, int dam, int rad)
6489 int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
6491 if (typ == GF_CONTROL_LIVING) flg|= PROJECT_HIDE;
6492 /* Use the given direction */
6493 tx = px + 99 * ddx[dir];
6494 ty = py + 99 * ddy[dir];
6496 /* Hack -- Use an actual "target" */
6497 if ((dir == 5) && target_okay())
6499 flg &= ~(PROJECT_STOP);
6504 /* Analyze the "dir" and the "target". Hurt items on floor. */
6505 return (project(0, rad, ty, tx, dam, typ, flg, -1));
6511 * Stop if we hit a monster, act as a "ball"
6512 * Allow "target" mode to pass over monsters
6513 * Affect grids, objects, and monsters
6515 bool fire_rocket(int typ, int dir, int dam, int rad)
6519 int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
6521 /* Use the given direction */
6522 tx = px + 99 * ddx[dir];
6523 ty = py + 99 * ddy[dir];
6525 /* Hack -- Use an actual "target" */
6526 if ((dir == 5) && target_okay())
6532 /* Analyze the "dir" and the "target". Hurt items on floor. */
6533 return (project(0, rad, ty, tx, dam, typ, flg, -1));
6539 * Stop if we hit a monster, act as a "ball"
6540 * Allow "target" mode to pass over monsters
6541 * Affect grids, objects, and monsters
6543 bool fire_ball_hide(int typ, int dir, int dam, int rad)
6547 int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_HIDE;
6549 /* Use the given direction */
6550 tx = px + 99 * ddx[dir];
6551 ty = py + 99 * ddy[dir];
6553 /* Hack -- Use an actual "target" */
6554 if ((dir == 5) && target_okay())
6556 flg &= ~(PROJECT_STOP);
6561 /* Analyze the "dir" and the "target". Hurt items on floor. */
6562 return (project(0, rad, ty, tx, dam, typ, flg, -1));
6567 * Cast a meteor spell, defined as a ball spell cast by an arbitary monster,
6568 * player, or outside source, that starts out at an arbitrary location, and
6569 * leaving no trail from the "caster" to the target. This function is
6570 * especially useful for bombardments and similar. -LM-
6572 * Option to hurt the player.
6574 bool fire_meteor(int who, int typ, int y, int x, int dam, int rad)
6576 int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
6578 /* Analyze the "target" and the caster. */
6579 return (project(who, rad, y, x, dam, typ, flg, -1));
6583 bool fire_blast(int typ, int dir, int dd, int ds, int num, int dev)
6589 int flg = PROJECT_FAST | PROJECT_THRU | PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE | PROJECT_GRID;
6594 /* Use the given direction */
6597 ly = ty = py + 20 * ddy[dir];
6598 lx = tx = px + 20 * ddx[dir];
6601 /* Use an actual "target" */
6607 lx = 20 * (tx - px) + px;
6608 ly = 20 * (ty - py) + py;
6611 ld = distance(py, px, ly, lx);
6614 for (i = 0; i < num; i++)
6618 /* Get targets for some bolts */
6619 y = rand_spread(ly, ld * dev / 20);
6620 x = rand_spread(lx, ld * dev / 20);
6622 if (distance(ly, lx, y, x) <= ld * dev / 20) break;
6625 /* Analyze the "dir" and the "target". */
6626 if (!project(0, 0, y, x, damroll(dd, ds), typ, flg, -1))
6637 * Switch position with a monster.
6639 bool teleport_swap(int dir)
6643 monster_type * m_ptr;
6644 monster_race * r_ptr;
6646 if ((dir == 5) && target_okay())
6656 c_ptr = &cave[ty][tx];
6658 if (p_ptr->anti_tele)
6661 msg_print("ÉԻ׵ĤÊÎϤ¬¥Æ¥ì¥Ý¡¼¥È¤òËɤ¤¤À¡ª");
6663 msg_print("A mysterious force prevents you from teleporting!");
6669 if (!c_ptr->m_idx || (c_ptr->m_idx == p_ptr->riding))
6672 msg_print("¤½¤ì¤È¤Ï¾ì½ê¤ò¸ò´¹¤Ç¤¤Þ¤»¤ó¡£");
6674 msg_print("You can't trade places with that!");
6682 if ((c_ptr->info & CAVE_ICKY) || (distance(ty, tx, py, px) > p_ptr->lev * 3 / 2 + 10))
6685 msg_print("¼ºÇÔ¤·¤¿¡£");
6687 msg_print("Failed to swap.");
6695 m_ptr = &m_list[c_ptr->m_idx];
6696 r_ptr = &r_info[m_ptr->r_idx];
6698 if (r_ptr->flags3 & RF3_RES_TELE)
6701 msg_print("¥Æ¥ì¥Ý¡¼¥È¤ò¼ÙË⤵¤ì¤¿¡ª");
6703 msg_print("Your teleportation is blocked!");
6711 sound(SOUND_TELEPORT);
6713 cave[py][px].m_idx = c_ptr->m_idx;
6715 /* Update the old location */
6716 c_ptr->m_idx = p_ptr->riding;
6718 /* Move the monster */
6722 /* Move the player */
6728 m_list[p_ptr->riding].fy = ty;
6729 m_list[p_ptr->riding].fx = tx;
6731 /* Update the monster (new location) */
6732 update_mon(cave[ty][tx].m_idx, TRUE);
6740 /* Update the monster (new location) */
6741 update_mon(cave[ty][tx].m_idx, TRUE);
6743 /* Redraw the old grid */
6746 /* Redraw the new grid */
6749 /* Check for new panel (redraw map) */
6753 p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW);
6755 /* Notice changes in view */
6756 if (r_ptr->flags7 & (RF7_HAS_LITE_1 | RF7_HAS_LITE_2 | RF7_SELF_LITE_1 | RF7_SELF_LITE_2))
6758 /* Update some things */
6759 p_ptr->update |= (PU_MON_LITE);
6762 /* Update the monsters */
6763 p_ptr->update |= (PU_DISTANCE);
6766 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
6768 /* Redraw the health bar */
6769 if (p_ptr->health_who == cave[ty][tx].m_idx)
6770 p_ptr->redraw |= (PR_HEALTH);
6772 /* Handle stuff XXX XXX XXX */
6781 * Hack -- apply a "projection()" in a direction (or at the target)
6783 bool project_hook(int typ, int dir, int dam, int flg)
6787 /* Pass through the target if needed */
6788 flg |= (PROJECT_THRU);
6790 /* Use the given direction */
6794 /* Hack -- Use an actual "target" */
6795 if ((dir == 5) && target_okay())
6801 /* Analyze the "dir" and the "target", do NOT explode */
6802 return (project(0, 0, ty, tx, dam, typ, flg, -1));
6808 * Stop if we hit a monster, as a "bolt"
6809 * Affect monsters (not grids or objects)
6811 bool fire_bolt(int typ, int dir, int dam)
6813 int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE | PROJECT_GRID;
6814 return (project_hook(typ, dir, dam, flg));
6820 * Pass through monsters, as a "beam"
6821 * Affect monsters (not grids or objects)
6823 bool fire_beam(int typ, int dir, int dam)
6825 int flg = PROJECT_BEAM | PROJECT_KILL | PROJECT_GRID | PROJECT_ITEM;
6826 return (project_hook(typ, dir, dam, flg));
6831 * Cast a bolt spell, or rarely, a beam spell
6833 bool fire_bolt_or_beam(int prob, int typ, int dir, int dam)
6835 if (randint0(100) < prob)
6837 return (fire_beam(typ, dir, dam));
6841 return (fire_bolt(typ, dir, dam));
6847 * Some of the old functions
6849 bool lite_line(int dir)
6851 int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_KILL;
6852 return (project_hook(GF_LITE_WEAK, dir, damroll(6, 8), flg));
6856 bool drain_life(int dir, int dam)
6858 int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
6859 return (project_hook(GF_OLD_DRAIN, dir, dam, flg));
6863 bool wall_to_mud(int dir)
6865 int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
6866 return (project_hook(GF_KILL_WALL, dir, 20 + randint1(30), flg));
6870 bool wizard_lock(int dir)
6872 int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
6873 return (project_hook(GF_JAM_DOOR, dir, 20 + randint1(30), flg));
6877 bool destroy_door(int dir)
6879 int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM;
6880 return (project_hook(GF_KILL_DOOR, dir, 0, flg));
6884 bool disarm_trap(int dir)
6886 int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM;
6887 return (project_hook(GF_KILL_TRAP, dir, 0, flg));
6891 bool heal_monster(int dir, int dam)
6893 int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
6894 return (project_hook(GF_OLD_HEAL, dir, dam, flg));
6898 bool speed_monster(int dir)
6900 int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
6901 return (project_hook(GF_OLD_SPEED, dir, p_ptr->lev, flg));
6905 bool slow_monster(int dir)
6907 int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
6908 return (project_hook(GF_OLD_SLOW, dir, p_ptr->lev, flg));
6912 bool sleep_monster(int dir)
6914 int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
6915 return (project_hook(GF_OLD_SLEEP, dir, p_ptr->lev, flg));
6919 bool stasis_monster(int dir)
6921 return (fire_ball_hide(GF_STASIS, dir, p_ptr->lev*2, 0));
6925 bool stasis_evil(int dir)
6927 return (fire_ball_hide(GF_STASIS_EVIL, dir, p_ptr->lev*2, 0));
6931 bool confuse_monster(int dir, int plev)
6933 int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
6934 return (project_hook(GF_OLD_CONF, dir, plev, flg));
6938 bool stun_monster(int dir, int plev)
6940 int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
6941 return (project_hook(GF_STUN, dir, plev, flg));
6945 bool poly_monster(int dir)
6947 int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
6948 bool tester = (project_hook(GF_OLD_POLY, dir, p_ptr->lev, flg));
6950 chg_virtue(V_CHANCE, 1);
6955 bool clone_monster(int dir)
6957 int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
6958 return (project_hook(GF_OLD_CLONE, dir, 0, flg));
6962 bool fear_monster(int dir, int plev)
6964 int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
6965 return (project_hook(GF_TURN_ALL, dir, plev, flg));
6969 bool death_ray(int dir, int plev)
6971 int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
6972 return (project_hook(GF_DEATH_RAY, dir, plev * 200, flg));
6976 bool teleport_monster(int dir)
6978 int flg = PROJECT_BEAM | PROJECT_KILL;
6979 return (project_hook(GF_AWAY_ALL, dir, MAX_SIGHT * 5, flg));
6983 * Hooks -- affect adjacent grids (radius 1 ball attack)
6985 bool door_creation(void)
6987 int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
6988 return (project(0, 1, py, px, 0, GF_MAKE_DOOR, flg, -1));
6992 bool trap_creation(int y, int x)
6994 int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
6995 return (project(0, 1, y, x, 0, GF_MAKE_TRAP, flg, -1));
6999 bool tree_creation(void)
7001 int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
7002 return (project(0, 1, py, px, 0, GF_MAKE_TREE, flg, -1));
7006 bool glyph_creation(void)
7008 int flg = PROJECT_GRID | PROJECT_ITEM;
7009 return (project(0, 1, py, px, 0, GF_MAKE_GLYPH, flg, -1));
7013 bool wall_stone(void)
7015 int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
7017 bool dummy = (project(0, 1, py, px, 0, GF_STONE_WALL, flg, -1));
7020 p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW);
7022 /* Update the monsters */
7023 p_ptr->update |= (PU_MONSTERS);
7026 p_ptr->redraw |= (PR_MAP);
7029 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
7035 bool destroy_doors_touch(void)
7037 int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
7038 return (project(0, 1, py, px, 0, GF_KILL_DOOR, flg, -1));
7042 bool sleep_monsters_touch(void)
7044 int flg = PROJECT_KILL | PROJECT_HIDE;
7045 return (project(0, 1, py, px, p_ptr->lev, GF_OLD_SLEEP, flg, -1));
7049 bool animate_dead(int who, int y, int x)
7051 int flg = PROJECT_ITEM | PROJECT_HIDE;
7052 return (project(who, 5, y, x, 0, GF_ANIM_DEAD, flg, -1));
7056 void call_chaos(void)
7058 int Chaos_type, dummy, dir;
7059 int plev = p_ptr->lev;
7060 bool line_chaos = FALSE;
7062 int hurt_types[31] =
7064 GF_ELEC, GF_POIS, GF_ACID, GF_COLD,
7065 GF_FIRE, GF_MISSILE, GF_ARROW, GF_PLASMA,
7066 GF_HOLY_FIRE, GF_WATER, GF_LITE, GF_DARK,
7067 GF_FORCE, GF_INERTIA, GF_MANA, GF_METEOR,
7068 GF_ICE, GF_CHAOS, GF_NETHER, GF_DISENCHANT,
7069 GF_SHARDS, GF_SOUND, GF_NEXUS, GF_CONFUSION,
7070 GF_TIME, GF_GRAVITY, GF_ROCKET, GF_NUKE,
7071 GF_HELL_FIRE, GF_DISINTEGRATE, GF_PSY_SPEAR
7074 Chaos_type = hurt_types[randint0(31)];
7075 if (one_in_(4)) line_chaos = TRUE;
7079 for (dummy = 1; dummy < 10; dummy++)
7084 fire_beam(Chaos_type, dummy, 150);
7086 fire_ball(Chaos_type, dummy, 150, 2);
7090 else if (one_in_(3))
7092 fire_ball(Chaos_type, 0, 500, 8);
7096 if (!get_aim_dir(&dir)) return;
7098 fire_beam(Chaos_type, dir, 250);
7100 fire_ball(Chaos_type, dir, 250, 3 + (plev / 35));
7106 * Activate the evil Topi Ylinen curse
7107 * rr9: Stop the nasty things when a Cyberdemon is summoned
7108 * or the player gets paralyzed.
7110 bool activate_ty_curse(bool stop_ty, int *count)
7114 int flg = (PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_JUMP);
7118 switch (randint1(34))
7124 msg_print("ÃÏÌ̤¬Íɤ줿...");
7126 msg_print("The ground trembles...");
7129 earthquake(py, px, 5 + randint0(10));
7130 if (!one_in_(6)) break;
7135 int dam = damroll(10, 10);
7137 msg_print("½ã¿è¤ÊËâÎϤμ¡¸µ¤Ø¤ÎÈ⤬³«¤¤¤¿¡ª");
7139 msg_print("A portal opens to a plane of raw mana!");
7142 project(0, 8, py, px, dam, GF_MANA, flg, -1);
7144 take_hit(DAMAGE_NOESCAPE, dam, "½ã¿è¤ÊËâÎϤβòÊü", -1);
7146 take_hit(DAMAGE_NOESCAPE, dam, "released pure mana", -1);
7148 if (!one_in_(6)) break;
7154 msg_print("¼þ°Ï¤Î¶õ´Ö¤¬ÏĤó¤À¡ª");
7156 msg_print("Space warps about you!");
7159 teleport_player(damroll(10, 10));
7160 if (randint0(13)) (*count) += activate_hi_summon(py, px, FALSE);
7161 if (!one_in_(6)) break;
7165 msg_print("¥¨¥Í¥ë¥®¡¼¤Î¤¦¤Í¤ê¤ò´¶¤¸¤¿¡ª");
7167 msg_print("You feel a surge of energy!");
7173 project(0, 7, py, px, 50, GF_KILL_WALL, flg, -1);
7175 take_hit(DAMAGE_NOESCAPE, 50, "¥¨¥Í¥ë¥®¡¼¤Î¤¦¤Í¤ê", -1);
7177 take_hit(DAMAGE_NOESCAPE, 50, "surge of energy", -1);
7180 if (!one_in_(6)) break;
7181 case 1: case 2: case 3: case 16: case 17:
7182 aggravate_monsters(0);
7183 if (!one_in_(6)) break;
7184 case 4: case 5: case 6:
7185 (*count) += activate_hi_summon(py, px, FALSE);
7186 if (!one_in_(6)) break;
7187 case 7: case 8: case 9: case 18:
7188 (*count) += summon_specific(0, py, px, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
7189 if (!one_in_(6)) break;
7190 case 10: case 11: case 12:
7192 msg_print("À¸Ì¿ÎϤ¬ÂΤ«¤éµÛ¤¤¼è¤é¤ì¤¿µ¤¤¬¤¹¤ë¡ª");
7194 msg_print("You feel your life draining away...");
7197 lose_exp(p_ptr->exp / 16);
7198 if (!one_in_(6)) break;
7199 case 13: case 14: case 15: case 19: case 20:
7200 if (stop_ty || (p_ptr->free_act && (randint1(125) < p_ptr->skill_sav)) || (p_ptr->pclass == CLASS_BERSERKER))
7207 msg_print("ĦÁü¤Ë¤Ê¤Ã¤¿µ¤Ê¬¤À¡ª");
7209 msg_print("You feel like a statue!");
7212 if (p_ptr->free_act)
7213 set_paralyzed(p_ptr->paralyzed + randint1(3));
7215 set_paralyzed(p_ptr->paralyzed + randint1(13));
7218 if (!one_in_(6)) break;
7219 case 21: case 22: case 23:
7220 (void)do_dec_stat(randint0(6));
7221 if (!one_in_(6)) break;
7224 msg_print("¤Û¤¨¡©»ä¤Ïï¡©¤³¤³¤Ç²¿¤·¤Æ¤ë¡©");
7226 msg_print("Huh? Who am I? What am I doing here?");
7230 if (!one_in_(6)) break;
7233 * Only summon Cyberdemons deep in the dungeon.
7235 if ((dun_level > 65) && !stop_ty)
7237 (*count) += summon_cyber(-1, py, px);
7241 if (!one_in_(6)) break;
7247 (void)do_dec_stat(i);
7255 while (one_in_(3) && !stop_ty);
7261 int activate_hi_summon(int y, int x, bool can_pet)
7266 u32b mode = PM_ALLOW_GROUP;
7273 mode |= PM_FORCE_FRIENDLY;
7277 mode |= PM_FORCE_PET;
7282 if (!pet) mode |= PM_NO_PET;
7284 summon_lev = (pet ? p_ptr->lev * 2 / 3 + randint1(p_ptr->lev / 2) : dun_level);
7286 for (i = 0; i < (randint1(7) + (dun_level / 40)); i++)
7288 switch (randint1(25) + (dun_level / 20))
7291 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_ANT, mode);
7294 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_SPIDER, mode);
7297 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HOUND, mode);
7300 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HYDRA, mode);
7303 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_ANGEL, mode);
7306 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_UNDEAD, mode);
7309 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_DRAGON, mode);
7312 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_DEMON, mode);
7316 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_AMBERITES, (mode | PM_ALLOW_UNIQUE));
7320 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_UNIQUE, (mode | PM_ALLOW_UNIQUE));
7323 if (!can_pet) mode |= PM_ALLOW_UNIQUE;
7324 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HI_UNDEAD, mode);
7327 if (!can_pet) mode |= PM_ALLOW_UNIQUE;
7328 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HI_DRAGON, mode);
7331 count += summon_specific((pet ? -1 : 0), y, x, 100, SUMMON_CYBER, mode);
7334 if (!can_pet) mode |= PM_ALLOW_UNIQUE;
7335 count += summon_specific((pet ? -1 : 0), y, x,pet ? summon_lev : (((summon_lev * 3) / 2) + 5), 0, mode);
7344 int summon_cyber(int who, int y, int x)
7347 int max_cyber = (easy_band ? 1 : (dun_level / 50) + randint1(2));
7349 u32b mode = PM_ALLOW_GROUP;
7351 /* Summoned by a monster */
7354 monster_type *m_ptr = &m_list[who];
7355 if (is_pet(m_ptr)) mode |= PM_FORCE_PET;
7358 if (max_cyber > 4) max_cyber = 4;
7360 for (i = 0; i < max_cyber; i++)
7362 count += summon_specific(who, y, x, 100, SUMMON_CYBER, mode);
7369 void wall_breaker(void)
7373 int attempts = 1000;
7375 if (randint1(80 + p_ptr->lev) < 70)
7379 scatter(&y, &x, py, px, 4, 0);
7381 if (!cave_floor_bold(y, x)) continue;
7383 if ((y != py) || (x != px)) break;
7386 project(0, 0, y, x, 20 + randint1(30), GF_KILL_WALL,
7387 (PROJECT_BEAM | PROJECT_THRU | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL), -1);
7389 else if (randint1(100) > 30)
7391 earthquake(py, px, 1);
7395 int num = damroll(5, 3);
7397 for (i = 0; i < num; i++)
7401 scatter(&y, &x, py, px, 10, 0);
7403 if ((y != py) && (x != px)) break;
7406 project(0, 0, y, x, 20 + randint1(30), GF_KILL_WALL,
7407 (PROJECT_BEAM | PROJECT_THRU | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL), -1);
7416 bool confuse_monsters(int dam)
7418 return (project_hack(GF_OLD_CONF, dam));
7425 bool charm_monsters(int dam)
7427 return (project_hack(GF_CHARM, dam));
7434 bool charm_animals(int dam)
7436 return (project_hack(GF_CONTROL_ANIMAL, dam));
7443 bool stun_monsters(int dam)
7445 return (project_hack(GF_STUN, dam));
7452 bool stasis_monsters(int dam)
7454 return (project_hack(GF_STASIS, dam));
7459 * Mindblast monsters
7461 bool mindblast_monsters(int dam)
7463 return (project_hack(GF_PSI, dam));
7468 * Banish all monsters
7470 bool banish_monsters(int dist)
7472 return (project_hack(GF_AWAY_ALL, dist));
7479 bool turn_evil(int dam)
7481 return (project_hack(GF_TURN_EVIL, dam));
7488 bool turn_monsters(int dam)
7490 return (project_hack(GF_TURN_ALL, dam));
7495 * Death-ray all monsters (note: OBSCENELY powerful)
7497 bool deathray_monsters(void)
7499 return (project_hack(GF_DEATH_RAY, p_ptr->lev * 200));
7503 bool charm_monster(int dir, int plev)
7505 int flg = PROJECT_STOP | PROJECT_KILL;
7506 return (project_hook(GF_CHARM, dir, plev, flg));
7510 bool control_one_undead(int dir, int plev)
7512 int flg = PROJECT_STOP | PROJECT_KILL;
7513 return (project_hook(GF_CONTROL_UNDEAD, dir, plev, flg));
7517 bool control_one_demon(int dir, int plev)
7519 int flg = PROJECT_STOP | PROJECT_KILL;
7520 return (project_hook(GF_CONTROL_DEMON, dir, plev, flg));
7524 bool charm_animal(int dir, int plev)
7526 int flg = PROJECT_STOP | PROJECT_KILL;
7527 return (project_hook(GF_CONTROL_ANIMAL, dir, plev, flg));
7531 bool charm_living(int dir, int plev)
7533 int flg = PROJECT_STOP | PROJECT_KILL;
7534 return (project_hook(GF_CONTROL_LIVING, dir, plev, flg));
7538 void kawarimi(bool success)
7541 object_type *q_ptr = &forge;
7544 if (p_ptr->confused || p_ptr->blind || p_ptr->paralyzed || p_ptr->image) return;
7545 if (randint0(200) < p_ptr->stun) return;
7547 if (!success && one_in_(3))
7550 msg_print("¼ºÇÔ¡ªÆ¨¤²¤é¤ì¤Ê¤«¤Ã¤¿¡£");
7552 msg_print("Failed! You couldn't run away.");
7554 p_ptr->special_defense &= ~(NINJA_KAWARIMI);
7555 p_ptr->redraw |= (PR_STATUS);
7562 teleport_player(10+randint1(90));
7566 object_prep(q_ptr, lookup_kind(TV_STATUE, SV_WOODEN_STATUE));
7568 q_ptr->pval = MON_NINJA;
7570 /* Drop it in the dungeon */
7571 (void)drop_near(q_ptr, -1, y, x);
7574 if (success) msg_print("¹¶·â¤ò¼õ¤±¤ëÁ°¤ËÁÇÁ᤯¿È¤ò¤Ò¤ë¤¬¤¨¤·¤¿¡£");
7575 else msg_print("¼ºÇÔ¡ª¹¶·â¤ò¼õ¤±¤Æ¤·¤Þ¤Ã¤¿¡£");
7577 if (success) msg_print("You have turned around just before the attack hit you.");
7578 else msg_print("Failed! You are hit by the attack.");
7581 p_ptr->special_defense &= ~(NINJA_KAWARIMI);
7582 p_ptr->redraw |= (PR_STATUS);