3 /* Purpose: Spell code (part 2) */
6 * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke
8 * This software may be copied and distributed for educational, research, and
9 * not for profit purposes provided that this copyright and statement are
10 * included in all such copies.
17 * 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 f1 = 0L, f2 = 0L, f3 = 0L;
46 int plev = p_ptr->lev;
50 p_ptr->knowledge |= (KNOW_STAT | KNOW_HPRATE);
54 percent = (int)(((long)p_ptr->player_hp[PY_MAX_LEVEL - 1] * 200L) /
56 ((PY_MAX_LEVEL - 1+3) * (p_ptr->hitdie + 1))));
59 sprintf(Dummy, "¸½ºß¤ÎÂÎÎÏ¥é¥ó¥¯ : %d/100", percent);
61 sprintf(Dummy, "Your current Life Rating is %d/100.", percent);
64 strcpy(buf[0], Dummy);
68 chg_virtue(V_KNOWLEDGE, 1);
69 chg_virtue(V_ENLIGHTEN, 1);
71 /* Acquire item flags from equipment */
72 for (k = INVEN_RARM; k < INVEN_TOTAL; k++)
76 o_ptr = &inventory[k];
78 /* Skip non-objects */
79 if (!o_ptr->k_idx) continue;
81 /* Extract the flags */
82 object_flags(o_ptr, &t1, &t2, &t3);
91 info[i++] = "ǽÎϤκÇÂçÃÍ";
93 info[i++] = "Limits of maximum stats";
96 for (v_nr = 0; v_nr < 6; v_nr++)
100 sprintf(stat_desc, "%s 18/%d", stat_names[v_nr], p_ptr->stat_max_max[v_nr]-18);
102 strcpy(s_string[v_nr], stat_desc);
104 info[i++] = s_string[v_nr];
109 sprintf(Dummy, "¸½ºß¤Î°À : %s(%ld)", your_alignment(), p_ptr->align);
111 sprintf(Dummy, "Your alighnment : %s(%ld)", your_alignment(), p_ptr->align);
113 strcpy(buf[1], Dummy);
115 for (v_nr = 0; v_nr < 8; v_nr++)
119 int tester = p_ptr->virtues[v_nr];
121 strcpy(v_name, virtue[(p_ptr->vir_types[v_nr])-1]);
124 sprintf(vir_desc, "¤ª¤Ã¤È¡£%s¤Î¾ðÊó¤Ê¤·¡£", v_name);
126 sprintf(vir_desc, "Oops. No info about %s.", v_name);
130 sprintf(vir_desc, "[%s]¤ÎÂÐ¶Ë (%d)",
132 sprintf(vir_desc, "You are the polar opposite of %s (%d).",
135 else if (tester < -80)
137 sprintf(vir_desc, "[%s]¤ÎÂçŨ (%d)",
139 sprintf(vir_desc, "You are an arch-enemy of %s (%d).",
142 else if (tester < -60)
144 sprintf(vir_desc, "[%s]¤Î¶¯Å¨ (%d)",
146 sprintf(vir_desc, "You are a bitter enemy of %s (%d).",
149 else if (tester < -40)
151 sprintf(vir_desc, "[%s]¤ÎŨ (%d)",
153 sprintf(vir_desc, "You are an enemy of %s (%d).",
156 else if (tester < -20)
158 sprintf(vir_desc, "[%s]¤Îºá¼Ô (%d)",
160 sprintf(vir_desc, "You have sinned against %s (%d).",
165 sprintf(vir_desc, "[%s]¤ÎÌÂÆ»¼Ô (%d)",
167 sprintf(vir_desc, "You have strayed from the path of %s (%d).",
170 else if (tester == 0)
172 sprintf(vir_desc, "[%s]¤ÎÃæΩ¼Ô (%d)",
174 sprintf(vir_desc,"You are neutral to %s (%d).",
177 else if (tester < 20)
179 sprintf(vir_desc, "[%s]¤Î¾®ÆÁ¼Ô (%d)",
181 sprintf(vir_desc,"You are somewhat virtuous in %s (%d).",
184 else if (tester < 40)
186 sprintf(vir_desc, "[%s]¤ÎÃæÆÁ¼Ô (%d)",
188 sprintf(vir_desc,"You are virtuous in %s (%d).",
191 else if (tester < 60)
193 sprintf(vir_desc, "[%s]¤Î¹âÆÁ¼Ô (%d)",
195 sprintf(vir_desc,"You are very virtuous in %s (%d).",
198 else if (tester < 80)
200 sprintf(vir_desc, "[%s]¤ÎÇÆ¼Ô (%d)",
202 sprintf(vir_desc,"You are a champion of %s (%d).",
205 else if (tester < 100)
207 sprintf(vir_desc, "[%s]¤Î°ÎÂç¤ÊÇÆ¼Ô (%d)",
209 sprintf(vir_desc,"You are a great champion of %s (%d).",
214 sprintf(vir_desc, "[%s]¤Î¶ñ¸½¼Ô (%d)",
216 sprintf(vir_desc,"You are the living embodiment of %s (%d).",
220 strcpy(v_string[v_nr], vir_desc);
222 info[i++] = v_string[v_nr];
226 /* Racial powers... */
227 if (p_ptr->mimic_form)
229 switch (p_ptr->mimic_form)
232 case MIMIC_DEMON_LORD:
234 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤ÎÃϹö¤«²Ð±ê¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤¬¤Ç¤¤ë¡£(%d MP)", 3 * plev, 10+plev/3);
236 sprintf(Dummy, "You can nether breathe, dam. %d (cost %d).", 3 * plev, 10+plev/3);
245 sprintf(Dummy, "¤¢¤Ê¤¿¤ÏŨ¤«¤é %d-%d HP ¤ÎÀ¸Ì¿ÎϤòµÛ¼ý¤Ç¤¤ë¡£(%d MP)",
247 sprintf(Dummy, "You can steal life from a foe, dam. %d-%d (cost %d).",
250 plev + MAX(1, plev / 10), plev + plev * MAX(1, plev / 10), 1 + (plev / 3));
258 switch (p_ptr->prace)
264 info[i++] = "¤¢¤Ê¤¿¤Ï櫤ȥɥ¢¤È³¬Ãʤò´¶ÃΤǤ¤ë¡£(5 MP)";
266 info[i++] = "You can find traps, doors and stairs (cost 5).";
274 info[i++] = "¤¢¤Ê¤¿¤Ï¿©ÎÁ¤òÀ¸À®¤Ç¤¤ë¡£(10 MP)";
276 info[i++] = "You can produce food (cost 10).";
285 sprintf(Dummy, "¤¢¤Ê¤¿¤ÏÈÏ°Ï %d °ÊÆâ¤Ë¥Æ¥ì¥Ý¡¼¥È¤Ç¤¤ë¡£(%d MP)",
287 sprintf(Dummy, "You can teleport, range %d (cost %d).",
290 (1 + plev), (5 + (plev / 5)));
297 info[i++] = "¤¢¤Ê¤¿¤Ï¶²Éݤò½üµî¤Ç¤¤ë¡£(5 MP)";
299 info[i++] = "You can remove fear (cost 5).";
303 case RACE_HALF_TROLL:
306 info[i++] = "¤¢¤Ê¤¿¤Ï¶¸Ë½²½¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(12 MP) ";
308 info[i++] = "You enter berserk fury (cost 12).";
315 info[i++] = "¤¢¤Ê¤¿¤Ï¥·¥ã¥É¥¦¥·¥Õ¥È¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(50 MP)";
317 info[i++] = "You can Shift Shadows (cost 50).";
322 info[i++] = "¤¢¤Ê¤¿¤Ï¡Ö¥Ñ¥¿¡¼¥ó¡×¤ò¿´¤ËÉÁ¤¤¤ÆÊ⤯¤³¤È¤¬¤Ç¤¤ë¡£(75 MP)";
324 info[i++] = "You can mentally Walk the Pattern (cost 75).";
331 info[i++] = "¤¢¤Ê¤¿¤Ï¶¸Ë½²½¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(10 MP) ";
333 info[i++] = "You can enter berserk fury (cost 10).";
340 info[i++] = "¤¢¤Ê¤¿¤ÏÇúȯ¤Î¥ë¡¼¥ó¤ò»Å³Ý¤±¤ë¤³¤È¤¬¤Ç¤¤ë¡£(35 MP)";
342 info[i++] = "You can set an Explosive Rune (cost 35).";
346 case RACE_HALF_GIANT:
349 info[i++] = "¤¢¤Ê¤¿¤ÏÀФÎÊɤò²õ¤¹¤³¤È¤¬¤Ç¤¤ë¡£(10 MP)";
351 info[i++] = "You can break stone walls (cost 10).";
355 case RACE_HALF_TITAN:
358 info[i++] = "¤¢¤Ê¤¿¤Ï¥â¥ó¥¹¥¿¡¼¤ò¥¹¥¥ã¥ó¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(20 MP)";
360 info[i++] = "You can probe monsters (cost 20).";
368 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î´äÀФòÅꤲ¤ë¤³¤È¤¬¤Ç¤¤ë¡£(15 MP)",
370 sprintf(Dummy, "You can throw a boulder, dam. %d (cost 15).",
380 info[i++] = "¤¢¤Ê¤¿¤Ï¶²Éݤò¸Æ¤Óµ¯¤³¤¹¶«¤ÓÀ¼¤òȯ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(15 MP)";
382 info[i++] = "You can make a terrifying scream (cost 15).";
390 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î»À¤ò¿á¤¤«¤±¤ë¤³¤È¤¬¤Ç¤¤ë¡£(9 MP)", plev);
392 sprintf(Dummy, "You can spit acid, dam. %d (cost 9).", plev);
403 "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤ÎÆÇÌð¤òÅꤲ¤ë¤³¤È¤¬¤Ç¤¤ë¡£(8 MP)", plev);
405 "You can throw a dart of poison, dam. %d (cost 8).", plev);
415 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Þ¥¸¥Ã¥¯¡¦¥ß¥µ¥¤¥ë¤Î¼öʸ¤ò»È¤¨¤ë¡£(2 MP)",
417 sprintf(Dummy, "You can cast a Magic Missile, dam %d (cost 2).",
420 (3 + ((plev-1) / 5)));
426 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤¬¤Ç¤¤ë¡£(%d MP)", 2 * plev, plev);
428 sprintf(Dummy, "You can breathe, dam. %d (cost %d).", 2 * plev, plev);
433 case RACE_MIND_FLAYER:
436 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤ÎÀº¿À¹¶·â¤ò¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(12 MP)", plev);
438 sprintf(Dummy, "You can mind blast your enemies, dam %d (cost 12).", plev);
447 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò»È¤¨¤ë¡£(15 MP)", plev);
449 sprintf(Dummy, "You can cast a Fire Ball, dam. %d (cost 15).", plev);
457 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò»È¤¨¤ë¡£(15 MP)", plev);
459 sprintf(Dummy, "You can cast a Fire Bolt, dam. %d (cost 15).", plev);
468 info[i++] = "¤¢¤Ê¤¿¤Ï d20+30 ¥¿¡¼¥ó¤Î´ÖÈ©¤òÀФËÊѲ½¤µ¤»¤é¤ì¤ë¡£(15 MP)";
470 info[i++] = "You can turn your skin to stone, dur d20+30 (cost 15).";
478 info[i++] = "¤¢¤Ê¤¿¤Ï¼º¤Ã¤¿À¸Ì¿ÎϤò²óÉü¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(30 MP)";
480 info[i++] = "You can restore lost life forces (cost 30).";
488 sprintf(Dummy, "¤¢¤Ê¤¿¤ÏŨ¤«¤é %d-%d HP ¤ÎÀ¸Ì¿ÎϤòµÛ¼ý¤Ç¤¤ë¡£(%d MP)",
490 sprintf(Dummy, "You can steal life from a foe, dam. %d-%d (cost %d).",
493 plev + MAX(1, plev / 10), plev + plev * MAX(1, plev / 10), 1 + (plev / 3));
501 info[i++] = "¤¢¤Ê¤¿¤Ïµã¤¶«¤ó¤ÇŨ¤ò¶²Éݤµ¤»¤ë¤³¤È¤¬¤Ç¤¤ë¡£(3 MP)";
503 info[i++] = "You can wail to terrify your enemies (cost 3).";
512 info[i++] = "¤¢¤Ê¤¿¤ÏŨ¤ò̲¤é¤»¤ëËâË¡¤ÎÊ´¤òÅꤲ¤ë¤³¤È¤¬¤Ç¤¤ë¡£(12 MP)";
514 info[i++] = "You can throw magical dust which induces sleep (cost 12).";
521 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤ÎÃϹö¤«²Ð±ê¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤¬¤Ç¤¤ë¡£(%d MP)", 3 * plev, 10+plev/3);
523 sprintf(Dummy, "You can breathe nether, dam. %d (cost %d).", 3 * plev, 10+plev/3);
531 info[i++] = "¤¢¤Ê¤¿¤Ï d20+30 ¥¿¡¼¥ó¤Î´Ö²£¤Ë¿¤Ó¤ë¤³¤È¤¬¤Ç¤¤ë¡£(15 MP)";
533 info[i++] = "You can expand horizontally, dur d20+30 (cost 15).";
540 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥ì¥¤¥¬¥ó¤ò·â¤Ä¤³¤È¤¬¤Ç¤¤ë¡£(7 MP)", (plev + 1) / 2);
542 sprintf(Dummy, "You can fire a ray gun with damage %d (cost 7).", (plev+1)/2);
546 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Ö¥é¥¹¥¿¡¼¤ò·â¤Ä¤³¤È¤¬¤Ç¤¤ë¡£(13 MP)", plev);
548 sprintf(Dummy, "You can fire a blaster with damage %d (cost 13).", plev);
552 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Ð¥º¡¼¥«¤ò·â¤Ä¤³¤È¤¬¤Ç¤¤ë¡£(26 MP)", plev * 2);
554 sprintf(Dummy, "You can fire a bazooka with damage %d (cost 26).", plev * 2);
558 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Ó¡¼¥à¥¥ã¥Î¥ó¤ò·â¤Ä¤³¤È¤¬¤Ç¤¤ë¡£(40 MP)", plev * 2);
560 sprintf(Dummy, "You can fire a beam cannon with damage %d (cost 40).", plev * 2);
564 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥í¥±¥Ã¥È¤ò·â¤Ä¤³¤È¤¬¤Ç¤¤ë¡£(60 MP)", plev * 5);
566 sprintf(Dummy, "You can fire a rocket with damage %d (cost 60).", plev * 5);
576 switch(p_ptr->pclass)
582 info[i++] = "¤¢¤Ê¤¿¤Ï¥é¥ó¥À¥à¤ÊÊý¸þ¤ËÂФ·¤Æ¿ô²ó¹¶·â¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(75 MP)";
584 info[i++] = "You can attack some random directions at a time (cost 75).";
589 case CLASS_HIGH_MAGE:
594 info[i++] = "¤¢¤Ê¤¿¤Ï¥¢¥¤¥Æ¥à¤ÎËâÎϤòµÛ¼ý¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(1 MP)";
596 info[i++] = "You can absorb charges from an item (cost 1).";
601 if (is_good_realm(p_ptr->realm1))
606 info[i++] = "¤¢¤Ê¤¿¤ÏÉð´ï¤ò½ËÊ¡¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(70 MP)";
608 info[i++] = "You can bless a weapon (cost 70).";
617 info[i++] = "¤¢¤Ê¤¿¤Ï¼þ¤ê¤Î¤¹¤Ù¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¹¶·â¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(40 MP)";
619 info[i++] = "You can damages all monsters in sight (cost 40).";
628 info[i++] = "¤¢¤Ê¤¿¤Ï¹¶·â¤·¤Æ¨ºÂ¤Ëƨ¤²¤ë¤³¤È¤¬¤Ç¤¤ë¡£(12 MP)";
630 info[i++] = "You can hit a monster and teleport at a time (cost 12).";
638 info[i++] = "¤¢¤Ê¤¿¤Ï²øʪ¤òÄ´ºº¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(20 MP)";
640 info[i++] = "You can prove monsters (cost 20).";
645 if (is_good_realm(p_ptr->realm1))
650 info[i++] = "¤¢¤Ê¤¿¤ÏÀ»¤Ê¤ëÁä¤òÊü¤Ä¤³¤È¤¬¤Ç¤¤ë¡£(30 MP)";
652 info[i++] = "You can fires a holy spear (cost 30).";
661 info[i++] = "¤¢¤Ê¤¿¤ÏÀ¸Ì¿ÎϤò¸º¾¯¤µ¤»¤ëÁä¤òÊü¤Ä¤³¤È¤¬¤Ç¤¤ë¡£(30 MP)";
663 info[i++] = "You can fires a spear which drains vitality (cost 30).";
668 case CLASS_WARRIOR_MAGE:
672 info[i++] = "¤¢¤Ê¤¿¤Ï£È£Ð¤ò£Í£Ð¤ËÊÑ´¹¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(0 MP)";
674 info[i++] = "You can convert HP to SP (cost 0).";
677 info[i++] = "¤¢¤Ê¤¿¤Ï£Í£Ð¤ò£È£Ð¤ËÊÑ´¹¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(0 MP)";
679 info[i++] = "You can convert SP to HP (cost 0).";
683 case CLASS_CHAOS_WARRIOR:
687 info[i++] = "¤¢¤Ê¤¿¤Ï¼þ°Ï¤Ë²øʪ¤òÏǤ魯¸÷¤òȯÀ¸¤µ¤»¤ë¤³¤È¤¬¤Ç¤¤ë¡£(50 MP)";
689 info[i++] = "You can radiate light which confuses nearby monsters (cost 50).";
697 info[i++] = "¤¢¤Ê¤¿¤Ï¹½¤¨¤ë¤³¤È¤¬¤Ç¤¤ë¡£(0 MP)";
699 info[i++] = "You can assume a posture of special form (cost 0).";
705 info[i++] = "¤¢¤Ê¤¿¤ÏÄ̾ï¤Î2Çܤι¶·â¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤¤ë¡£(30 MP)";
707 info[i++] = "You can perform double attacks in a time (cost 30).";
711 case CLASS_MINDCRAFTER:
712 case CLASS_FORCETRAINER:
716 info[i++] = "¤¢¤Ê¤¿¤ÏÀº¿À¤ò½¸Ã椷¤Æ£Í£Ð¤ò²óÉü¤µ¤»¤ë¤³¤È¤¬¤Ç¤¤ë¡£(0 MP)";
718 info[i++] = "You can concentrate to regenerate your mana (cost 0).";
724 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ì¿¿¤ò»£±Æ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(0 MP)";
726 info[i++] = "You can take a photograph (cost 0).";
731 info[i++] = "¤¢¤Ê¤¿¤Ï¥¢¥¤¥Æ¥à¤ò´°Á´¤Ë´ÕÄꤹ¤ë¤³¤È¤¬¤Ç¤¤ë¡£(20 MP)";
733 info[i++] = "You can *identify* items (cost 20).";
741 info[i++] = "¤¢¤Ê¤¿¤Ï²øʪ¤ÎÆü칶·â¤ò¥À¥á¡¼¥¸2ÇܤǤޤͤ뤳¤È¤¬¤Ç¤¤ë¡£(100 MP)";
743 info[i++] = "You can imitate monster's special attacks with double damage (cost 100).";
747 case CLASS_BEASTMASTER:
749 info[i++] = "¤¢¤Ê¤¿¤Ï1ɤ¤ÎÀ¸Ì¿¤Î¤¢¤ë¥â¥ó¥¹¥¿¡¼¤ò»ÙÇÛ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(¥ì¥Ù¥ë/4 MP)";
751 info[i++] = "You can dominate a monster (cost level/4).";
756 info[i++] = "¤¢¤Ê¤¿¤Ï»ë³¦Æâ¤ÎÀ¸Ì¿¤Î¤¢¤ë¥â¥ó¥¹¥¿¡¼¤ò»ÙÇÛ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£((¥ì¥Ù¥ë+20)/2 MP)";
758 info[i++] = "You can dominate living monsters in sight (cost (level+20)/4).";
762 case CLASS_MAGIC_EATER:
764 info[i++] = "¤¢¤Ê¤¿¤Ï¾ó/ËâË¡ËÀ/¥í¥Ã¥É¤ÎËâÎϤò¼«Ê¬¤Î¤â¤Î¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
766 info[i++] = "You can absorb a staff, wand or rod itself.";
773 info[i++] = "¤¢¤Ê¤¿¤Ï1¥¿¡¼¥ó¤Ë2²óËâË¡¤ò¾§¤¨¤ë¤³¤È¤¬¤Ç¤¤ë¡£(77 MP)";
775 info[i++] = "You can cast two spells in one time (cost 77).";
782 info[i++] = "¤¢¤Ê¤¿¤ÏÀº¿À¤ò½¸Ã椷¤Æµ¤¹ç¤¤¤òί¤á¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
784 info[i++] = "You can concentrate to regenerate your mana.";
790 info[i++] = "¤¢¤Ê¤¿¤ÏÆüì¤Ê·¿¤Ç¹½¤¨¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
792 info[i++] = "You can assume a posture of special form.";
796 case CLASS_BLUE_MAGE:
798 info[i++] = "¤¢¤Ê¤¿¤ÏÁê¼ê¤Ë»È¤ï¤ì¤¿ËâË¡¤ò³Ø¤Ö¤³¤È¤¬¤Ç¤¤ë¡£";
800 info[i++] = "You can study spells which your enemy casts on you.";
807 info[i++] = "¤¢¤Ê¤¿¤Ï¥â¥ó¥¹¥¿¡¼¤Ë¾è¤Ã¤Æ̵ÍýÌðÍý¥Ú¥Ã¥È¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
809 info[i++] = "You can ride on a hostile monster forcibly to turn it into pet.";
813 case CLASS_BERSERKER:
817 info[i++] = "¤¢¤Ê¤¿¤Ï¼«Ê¬¤Ç¶õÊ¢¤òËþ¤¿¤¹¤³¤È¤¬¤Ç¤¤ë¡£";
819 info[i++] = "You can satisfy hunger.";
825 info[i++] = "¤¢¤Ê¤¿¤Ï³¹¤È¥À¥ó¥¸¥ç¥ó¤Î´Ö¤ò¹Ô¤Í褹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
827 info[i++] = "You can travel between town and the depths.";
831 case CLASS_MIRROR_MASTER:
833 info[i++] = "¤¢¤Ê¤¿¤Ï¶À¤òºî¤ê½Ð¤¹¤³¤È¤¬¤Ç¤¤ë¡£(2 MP)";
835 info[i++] = "You can create a Mirror (cost 2).";
838 info[i++] = "¤¢¤Ê¤¿¤Ï¶À¤ò³ä¤ë¤³¤È¤¬¤Ç¤¤ë¡£(0 MP)";
840 info[i++] = "You can break distant Mirrors (cost 0).";
847 info[i++] = "¤¢¤Ê¤¿¤ÏÁÇÁ᤯°ÜÆ°¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
849 info[i++] = "You can walk extremery fast.";
857 if (p_ptr->muta1 & MUT1_SPIT_ACID)
860 info[i++] = "¤¢¤Ê¤¿¤Ï»À¤ò¿á¤¤«¤±¤ë¤³¤È¤¬¤Ç¤¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX1)";
862 info[i++] = "You can spit acid (dam lvl).";
866 if (p_ptr->muta1 & MUT1_BR_FIRE)
869 info[i++] = "¤¢¤Ê¤¿¤Ï±ê¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤¬¤Ç¤¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX2)";
871 info[i++] = "You can breathe fire (dam lvl * 2).";
875 if (p_ptr->muta1 & MUT1_HYPN_GAZE)
878 info[i++] = "¤¢¤Ê¤¿¤ÎâˤߤϺÅ̲¸ú²Ì¤ò¤â¤Ä¡£";
880 info[i++] = "Your gaze is hypnotic.";
884 if (p_ptr->muta1 & MUT1_TELEKINES)
887 info[i++] = "¤¢¤Ê¤¿¤ÏÇ°Æ°ÎϤò¤â¤Ã¤Æ¤¤¤ë¡£";
889 info[i++] = "You are telekinetic.";
893 if (p_ptr->muta1 & MUT1_VTELEPORT)
896 info[i++] = "¤¢¤Ê¤¿¤Ï¼«Ê¬¤Î°Õ»×¤Ç¥Æ¥ì¥Ý¡¼¥È¤Ç¤¤ë¡£";
898 info[i++] = "You can teleport at will.";
902 if (p_ptr->muta1 & MUT1_MIND_BLST)
905 info[i++] = "¤¢¤Ê¤¿¤ÏÀº¿À¹¶·â¤ò¹Ô¤¨¤ë¡£(¥À¥á¡¼¥¸ 3¡Á12d3)";
907 info[i++] = "You can Mind Blast your enemies (3 to 12d3 dam).";
911 if (p_ptr->muta1 & MUT1_RADIATION)
914 info[i++] = "¤¢¤Ê¤¿¤Ï¼«Ê¬¤Î°Õ»×¤Ç¶¯¤¤Êü¼ÍÀþ¤òȯÀ¸¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX2)";
916 info[i++] = "You can emit hard radiation at will (dam lvl * 2).";
920 if (p_ptr->muta1 & MUT1_VAMPIRISM)
923 info[i++] = "¤¢¤Ê¤¿¤ÏµÛ·ìµ´¤Î¤è¤¦¤ËŨ¤«¤éÀ¸Ì¿ÎϤòµÛ¼ý¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX2)";
925 info[i++] = "You can drain life from a foe like a vampire (dam lvl * 2).";
929 if (p_ptr->muta1 & MUT1_SMELL_MET)
932 info[i++] = "¤¢¤Ê¤¿¤Ï¶á¤¯¤Ë¤¢¤ëµ®¶â°¤ò¤«¤®Ê¬¤±¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
934 info[i++] = "You can smell nearby precious metal.";
938 if (p_ptr->muta1 & MUT1_SMELL_MON)
941 info[i++] = "¤¢¤Ê¤¿¤Ï¶á¤¯¤Î¥â¥ó¥¹¥¿¡¼¤Î¸ºß¤ò¤«¤®Ê¬¤±¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
943 info[i++] = "You can smell nearby monsters.";
947 if (p_ptr->muta1 & MUT1_BLINK)
950 info[i++] = "¤¢¤Ê¤¿¤Ïû¤¤µ÷Î¥¤ò¥Æ¥ì¥Ý¡¼¥È¤Ç¤¤ë¡£";
952 info[i++] = "You can teleport yourself short distances.";
956 if (p_ptr->muta1 & MUT1_EAT_ROCK)
959 info[i++] = "¤¢¤Ê¤¿¤Ï¹Å¤¤´ä¤ò¿©¤Ù¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
961 info[i++] = "You can consume solid rock.";
965 if (p_ptr->muta1 & MUT1_SWAP_POS)
968 info[i++] = "¤¢¤Ê¤¿¤Ï¾¤Î¼Ô¤È¾ì½ê¤òÆþ¤ìÂؤï¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
970 info[i++] = "You can switch locations with another being.";
974 if (p_ptr->muta1 & MUT1_SHRIEK)
977 info[i++] = "¤¢¤Ê¤¿¤Ï¿È¤ÎÌÓ¤â¤è¤À¤Ä¶«¤ÓÀ¼¤òȯ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX2)";
979 info[i++] = "You can emit a horrible shriek (dam 2 * lvl).";
983 if (p_ptr->muta1 & MUT1_ILLUMINE)
986 info[i++] = "¤¢¤Ê¤¿¤ÏÌÀ¤ë¤¤¸÷¤òÊü¤Ä¤³¤È¤¬¤Ç¤¤ë¡£";
988 info[i++] = "You can emit bright light.";
992 if (p_ptr->muta1 & MUT1_DET_CURSE)
995 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°¤ÊËâË¡¤Î´í¸±¤ò´¶¤¸¤È¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
997 info[i++] = "You can feel the danger of evil magic.";
1001 if (p_ptr->muta1 & MUT1_BERSERK)
1004 info[i++] = "¤¢¤Ê¤¿¤Ï¼«Ê¬¤Î°Õ»×¤Ç¶¸ÍðÀïÆ®¾õÂ֤ˤʤ뤳¤È¤¬¤Ç¤¤ë¡£";
1006 info[i++] = "You can drive yourself into a berserk frenzy.";
1010 if (p_ptr->muta1 & MUT1_POLYMORPH)
1013 info[i++] = "¤¢¤Ê¤¿¤Ï¼«Ê¬¤Î°Õ»Ö¤ÇÊѲ½¤Ç¤¤ë¡£";
1015 info[i++] = "You can polymorph yourself at will.";
1019 if (p_ptr->muta1 & MUT1_MIDAS_TCH)
1022 info[i++] = "¤¢¤Ê¤¿¤ÏÄ̾異¥¤¥Æ¥à¤ò¶â¤ËÊѤ¨¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
1024 info[i++] = "You can turn ordinary items to gold.";
1028 if (p_ptr->muta1 & MUT1_GROW_MOLD)
1031 info[i++] = "¤¢¤Ê¤¿¤Ï¼þ°Ï¤Ë¥¥Î¥³¤òÀ¸¤ä¤¹¤³¤È¤¬¤Ç¤¤ë¡£";
1033 info[i++] = "You can cause mold to grow near you.";
1037 if (p_ptr->muta1 & MUT1_RESIST)
1040 info[i++] = "¤¢¤Ê¤¿¤Ï¸µÁǤι¶·â¤ËÂФ·¤Æ¿È¤ò¹Å¤¯¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
1042 info[i++] = "You can harden yourself to the ravages of the elements.";
1046 if (p_ptr->muta1 & MUT1_EARTHQUAKE)
1049 info[i++] = "¤¢¤Ê¤¿¤Ï¼þ°Ï¤Î¥À¥ó¥¸¥ç¥ó¤òÊø²õ¤µ¤»¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
1051 info[i++] = "You can bring down the dungeon around your ears.";
1055 if (p_ptr->muta1 & MUT1_EAT_MAGIC)
1058 info[i++] = "¤¢¤Ê¤¿¤ÏËâË¡¤Î¥¨¥Í¥ë¥®¡¼¤ò¼«Ê¬¤Îʪ¤È¤·¤Æ»ÈÍѤǤ¤ë¡£";
1060 info[i++] = "You can consume magic energy for your own use.";
1064 if (p_ptr->muta1 & MUT1_WEIGH_MAG)
1067 info[i++] = "¤¢¤Ê¤¿¤Ï¼«Ê¬¤Ë±Æ¶Á¤òÍ¿¤¨¤ëËâË¡¤ÎÎϤò´¶¤¸¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
1069 info[i++] = "You can feel the strength of the magics affecting you.";
1073 if (p_ptr->muta1 & MUT1_STERILITY)
1076 info[i++] = "¤¢¤Ê¤¿¤Ï½¸ÃÄŪÀ¸¿£ÉÔǽ¤òµ¯¤³¤¹¤³¤È¤¬¤Ç¤¤ë¡£";
1078 info[i++] = "You can cause mass impotence.";
1082 if (p_ptr->muta1 & MUT1_PANIC_HIT)
1085 info[i++] = "¤¢¤Ê¤¿¤Ï¹¶·â¤·¤¿¸å¿È¤ò¼é¤ë¤¿¤áƨ¤²¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
1087 info[i++] = "You can run for your life after hitting something.";
1091 if (p_ptr->muta1 & MUT1_DAZZLE)
1094 info[i++] = "¤¢¤Ê¤¿¤Ïº®Íð¤ÈÌÕÌܤò°ú¤µ¯¤³¤¹Êü¼Íǽ¤òȯÀ¸¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£ ";
1096 info[i++] = "You can emit confusing, blinding radiation.";
1100 if (p_ptr->muta1 & MUT1_LASER_EYE)
1103 info[i++] = "¤¢¤Ê¤¿¤ÏÌܤ«¤é¥ì¡¼¥¶¡¼¸÷Àþ¤òȯ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX2)";
1105 info[i++] = "Your eyes can fire laser beams (dam 2 * lvl).";
1109 if (p_ptr->muta1 & MUT1_RECALL)
1112 info[i++] = "¤¢¤Ê¤¿¤Ï³¹¤È¥À¥ó¥¸¥ç¥ó¤Î´Ö¤ò¹Ô¤Í褹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
1114 info[i++] = "You can travel between town and the depths.";
1118 if (p_ptr->muta1 & MUT1_BANISH)
1121 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°¤Ê¥â¥ó¥¹¥¿¡¼¤òÃϹö¤ËÍî¤È¤¹¤³¤È¤¬¤Ç¤¤ë¡£";
1123 info[i++] = "You can send evil creatures directly to Hell.";
1127 if (p_ptr->muta1 & MUT1_COLD_TOUCH)
1130 info[i++] = "¤¢¤Ê¤¿¤ÏŨ¤ò¿¨¤Ã¤ÆÅà¤é¤»¤ë¤³¤È¤¬¤Ç¤¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX3)";
1132 info[i++] = "You can freeze things with a touch (dam 3 * lvl).";
1136 if (p_ptr->muta1 & MUT1_LAUNCHER)
1139 info[i++] = "¤¢¤Ê¤¿¤Ï¥¢¥¤¥Æ¥à¤òÎ϶¯¤¯Åꤲ¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
1141 info[i++] = "You can hurl objects with great force.";
1149 if (p_ptr->muta2 & MUT2_BERS_RAGE)
1152 info[i++] = "¤¢¤Ê¤¿¤Ï¶¸Àï»Î²½¤Îȯºî¤òµ¯¤³¤¹¡£";
1154 info[i++] = "You are subject to berserker fits.";
1158 if (p_ptr->muta2 & MUT2_COWARDICE)
1161 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹²²É¤ˤʤ롣";
1163 info[i++] = "You are subject to cowardice.";
1167 if (p_ptr->muta2 & MUT2_RTELEPORT)
1170 info[i++] = "¤¢¤Ê¤¿¤Ï¥é¥ó¥À¥à¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ë¡£";
1172 info[i++] = "You are teleporting randomly.";
1176 if (p_ptr->muta2 & MUT2_ALCOHOL)
1179 info[i++] = "¤¢¤Ê¤¿¤ÎÂΤϥ¢¥ë¥³¡¼¥ë¤òʬÈ礹¤ë¡£";
1181 info[i++] = "Your body produces alcohol.";
1185 if (p_ptr->muta2 & MUT2_HALLU)
1188 info[i++] = "¤¢¤Ê¤¿¤Ï¸¸³Ð¤ò°ú¤µ¯¤³¤¹Àº¿ÀºøÍð¤Ë¿¯¤µ¤ì¤Æ¤¤¤ë¡£";
1190 info[i++] = "You have a hallucinatory insanity.";
1194 if (p_ptr->muta2 & MUT2_FLATULENT)
1197 info[i++] = "¤¢¤Ê¤¿¤ÏÀ©¸æ¤Ç¤¤Ê¤¤¶¯Îõ¤ÊÕû¤ò¤³¤¯¡£";
1199 info[i++] = "You are subject to uncontrollable flatulence.";
1203 if (p_ptr->muta2 & MUT2_PROD_MANA)
1206 info[i++] = "¤¢¤Ê¤¿¤ÏÀ©¸æÉÔǽ¤ÊËâË¡¤Î¥¨¥Í¥ë¥®¡¼¤òȯ¤·¤Æ¤¤¤ë¡£";
1208 info[i++] = "You are producing magical energy uncontrollably.";
1212 if (p_ptr->muta2 & MUT2_ATT_DEMON)
1215 info[i++] = "¤¢¤Ê¤¿¤Ï¥Ç¡¼¥â¥ó¤ò°ú¤¤Ä¤±¤ë¡£";
1217 info[i++] = "You attract demons.";
1221 if (p_ptr->muta2 & MUT2_SCOR_TAIL)
1224 info[i++] = "¤¢¤Ê¤¿¤Ï¥µ¥½¥ê¤Î¿¬Èø¤¬À¸¤¨¤Æ¤¤¤ë¡£(ÆÇ¡¢¥À¥á¡¼¥¸ 3d7)";
1226 info[i++] = "You have a scorpion tail (poison, 3d7).";
1230 if (p_ptr->muta2 & MUT2_HORNS)
1233 info[i++] = "¤¢¤Ê¤¿¤Ï³Ñ¤¬À¸¤¨¤Æ¤¤¤ë¡£(¥À¥á¡¼¥¸ 2d6)";
1235 info[i++] = "You have horns (dam. 2d6).";
1239 if (p_ptr->muta2 & MUT2_BEAK)
1242 info[i++] = "¤¢¤Ê¤¿¤Ï¥¯¥Á¥Ð¥·¤¬À¸¤¨¤Æ¤¤¤ë¡£(¥À¥á¡¼¥¸ 2d4)";
1244 info[i++] = "You have a beak (dam. 2d4).";
1248 if (p_ptr->muta2 & MUT2_SPEED_FLUX)
1251 info[i++] = "¤¢¤Ê¤¿¤Ï¥é¥ó¥À¥à¤ËÁ᤯ư¤¤¤¿¤êÃÙ¤¯Æ°¤¤¤¿¤ê¤¹¤ë¡£";
1253 info[i++] = "You move faster or slower randomly.";
1257 if (p_ptr->muta2 & MUT2_BANISH_ALL)
1260 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹¶á¤¯¤Î¥â¥ó¥¹¥¿¡¼¤ò¾ÃÌǤµ¤»¤ë¡£";
1262 info[i++] = "You sometimes cause nearby creatures to vanish.";
1266 if (p_ptr->muta2 & MUT2_EAT_LIGHT)
1269 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹¼þ°Ï¤Î¸÷¤òµÛ¼ý¤·¤Æ±ÉÍܤˤ¹¤ë¡£";
1271 info[i++] = "You sometimes feed off of the light around you.";
1275 if (p_ptr->muta2 & MUT2_TRUNK)
1278 info[i++] = "¤¢¤Ê¤¿¤Ï¾Ý¤Î¤è¤¦¤ÊÉ¡¤ò»ý¤Ã¤Æ¤¤¤ë¡£(¥À¥á¡¼¥¸ 1d4)";
1280 info[i++] = "You have an elephantine trunk (dam 1d4).";
1284 if (p_ptr->muta2 & MUT2_ATT_ANIMAL)
1287 info[i++] = "¤¢¤Ê¤¿¤Ïưʪ¤ò°ú¤¤Ä¤±¤ë¡£";
1289 info[i++] = "You attract animals.";
1293 if (p_ptr->muta2 & MUT2_TENTACLES)
1296 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°¤Ê¿¨¼ê¤ò»ý¤Ã¤Æ¤¤¤ë¡£(¥À¥á¡¼¥¸ 2d5)";
1298 info[i++] = "You have evil looking tentacles (dam 2d5).";
1302 if (p_ptr->muta2 & MUT2_RAW_CHAOS)
1305 info[i++] = "¤¢¤Ê¤¿¤Ï¤·¤Ð¤·¤Ð½ã¥«¥ª¥¹¤ËÊñ¤Þ¤ì¤ë¡£";
1307 info[i++] = "You occasionally are surrounded with raw chaos.";
1311 if (p_ptr->muta2 & MUT2_NORMALITY)
1314 info[i++] = "¤¢¤Ê¤¿¤ÏÊÑ°Û¤·¤Æ¤¤¤¿¤¬¡¢²óÉü¤·¤Æ¤¤Æ¤¤¤ë¡£";
1316 info[i++] = "You may be mutated, but you're recovering.";
1320 if (p_ptr->muta2 & MUT2_WRAITH)
1323 info[i++] = "¤¢¤Ê¤¿¤ÎÆùÂΤÏÍ©Â⽤·¤¿¤ê¼ÂÂ⽤·¤¿¤ê¤¹¤ë¡£";
1325 info[i++] = "You fade in and out of physical reality.";
1329 if (p_ptr->muta2 & MUT2_POLY_WOUND)
1332 info[i++] = "¤¢¤Ê¤¿¤Î·ò¹¯¤Ï¥«¥ª¥¹¤ÎÎϤ˱ƶÁ¤ò¼õ¤±¤ë¡£";
1334 info[i++] = "Your health is subject to chaotic forces.";
1338 if (p_ptr->muta2 & MUT2_WASTING)
1341 info[i++] = "¤¢¤Ê¤¿¤Ï¿ê¼å¤¹¤ë¶²¤í¤·¤¤Éµ¤¤Ë¤«¤«¤Ã¤Æ¤¤¤ë¡£";
1343 info[i++] = "You have a horrible wasting disease.";
1347 if (p_ptr->muta2 & MUT2_ATT_DRAGON)
1350 info[i++] = "¤¢¤Ê¤¿¤Ï¥É¥é¥´¥ó¤ò°ú¤¤Ä¤±¤ë¡£";
1352 info[i++] = "You attract dragons.";
1356 if (p_ptr->muta2 & MUT2_WEIRD_MIND)
1359 info[i++] = "¤¢¤Ê¤¿¤ÎÀº¿À¤Ï¥é¥ó¥À¥à¤Ë³ÈÂ礷¤¿¤ê½Ì¾®¤·¤¿¤ê¤·¤Æ¤¤¤ë¡£";
1361 info[i++] = "Your mind randomly expands and contracts.";
1365 if (p_ptr->muta2 & MUT2_NAUSEA)
1368 info[i++] = "¤¢¤Ê¤¿¤Î°ß¤ÏÈó¾ï¤ËÍî¤ÁÃ夤¬¤Ê¤¤¡£";
1370 info[i++] = "You have a seriously upset stomach.";
1374 if (p_ptr->muta2 & MUT2_CHAOS_GIFT)
1377 info[i++] = "¤¢¤Ê¤¿¤Ï¥«¥ª¥¹¤Î¼é¸î°Ë⤫¤éË«Èþ¤ò¤¦¤±¤È¤ë¡£";
1379 info[i++] = "Chaos deities give you gifts.";
1383 if (p_ptr->muta2 & MUT2_WALK_SHAD)
1386 info[i++] = "¤¢¤Ê¤¿¤Ï¤·¤Ð¤·¤Ð¾¤Î¡Ö±Æ¡×¤Ë̤¤¹þ¤à¡£";
1388 info[i++] = "You occasionally stumble into other shadows.";
1392 if (p_ptr->muta2 & MUT2_WARNING)
1395 info[i++] = "¤¢¤Ê¤¿¤ÏŨ¤Ë´Ø¤¹¤ë·Ù¹ð¤ò´¶¤¸¤ë¡£";
1397 info[i++] = "You receive warnings about your foes.";
1401 if (p_ptr->muta2 & MUT2_INVULN)
1404 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹É餱ÃΤ餺¤Êµ¤Ê¬¤Ë¤Ê¤ë¡£";
1406 info[i++] = "You occasionally feel invincible.";
1410 if (p_ptr->muta2 & MUT2_SP_TO_HP)
1413 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹·ì¤¬¶ÚÆù¤Ë¤É¤Ã¤Èή¤ì¤ë¡£";
1415 info[i++] = "Your blood sometimes rushes to your muscles.";
1419 if (p_ptr->muta2 & MUT2_HP_TO_SP)
1422 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹Æ¬¤Ë·ì¤¬¤É¤Ã¤Èή¤ì¤ë¡£";
1424 info[i++] = "Your blood sometimes rushes to your head.";
1428 if (p_ptr->muta2 & MUT2_DISARM)
1431 info[i++] = "¤¢¤Ê¤¿¤Ï¤è¤¯¤Ä¤Þ¤Å¤¤¤Æʪ¤òÍî¤È¤¹¡£";
1433 info[i++] = "You occasionally stumble and drop things.";
1441 if (p_ptr->muta3 & MUT3_HYPER_STR)
1444 info[i++] = "¤¢¤Ê¤¿¤ÏĶ¿ÍŪ¤Ë¶¯¤¤¡£(ÏÓÎÏ+4)";
1446 info[i++] = "You are superhumanly strong (+4 STR).";
1450 if (p_ptr->muta3 & MUT3_PUNY)
1453 info[i++] = "¤¢¤Ê¤¿¤Ïµõ¼å¤À¡£(ÏÓÎÏ-4)";
1455 info[i++] = "You are puny (-4 STR).";
1459 if (p_ptr->muta3 & MUT3_HYPER_INT)
1462 info[i++] = "¤¢¤Ê¤¿¤ÎǾ¤ÏÀ¸ÂÎ¥³¥ó¥Ô¥å¡¼¥¿¤À¡£(ÃÎǽ¡õ¸¤µ+4)";
1464 info[i++] = "Your brain is a living computer (+4 INT/WIS).";
1468 if (p_ptr->muta3 & MUT3_MORONIC)
1471 info[i++] = "¤¢¤Ê¤¿¤ÏÀº¿ÀÇö¼å¤À¡£(ÃÎǽ¡õ¸¤µ-4)";
1473 info[i++] = "You are moronic (-4 INT/WIS).";
1477 if (p_ptr->muta3 & MUT3_RESILIENT)
1480 info[i++] = "¤¢¤Ê¤¿¤ÏÈó¾ï¤Ë¥¿¥Õ¤À¡£(Âѵ×+4)";
1482 info[i++] = "You are very resilient (+4 CON).";
1486 if (p_ptr->muta3 & MUT3_XTRA_FAT)
1489 info[i++] = "¤¢¤Ê¤¿¤Ï¶Ëü¤ËÂÀ¤Ã¤Æ¤¤¤ë¡£(Âѵ×+2,¥¹¥Ô¡¼¥É-2)";
1491 info[i++] = "You are extremely fat (+2 CON, -2 speed).";
1495 if (p_ptr->muta3 & MUT3_ALBINO)
1498 info[i++] = "¤¢¤Ê¤¿¤Ï¥¢¥ë¥Ó¥Î¤À¡£(Âѵ×-4)";
1500 info[i++] = "You are albino (-4 CON).";
1504 if (p_ptr->muta3 & MUT3_FLESH_ROT)
1507 info[i++] = "¤¢¤Ê¤¿¤ÎÆùÂΤÏÉåÇÔ¤·¤Æ¤¤¤ë¡£(Âѵ×-2,Ì¥ÎÏ-1)";
1509 info[i++] = "Your flesh is rotting (-2 CON, -1 CHR).";
1513 if (p_ptr->muta3 & MUT3_SILLY_VOI)
1516 info[i++] = "¤¢¤Ê¤¿¤ÎÀ¼¤Ï´ÖÈ´¤±¤Ê¥¡¼¥¡¼À¼¤À¡£(Ì¥ÎÏ-4)";
1518 info[i++] = "Your voice is a silly squeak (-4 CHR).";
1522 if (p_ptr->muta3 & MUT3_BLANK_FAC)
1525 info[i++] = "¤¢¤Ê¤¿¤Ï¤Î¤Ã¤Ú¤é¤Ü¤¦¤À¡£(Ì¥ÎÏ-1)";
1527 info[i++] = "Your face is featureless (-1 CHR).";
1531 if (p_ptr->muta3 & MUT3_ILL_NORM)
1534 info[i++] = "¤¢¤Ê¤¿¤Ï¸¸±Æ¤Ëʤ¤ï¤ì¤Æ¤¤¤ë¡£";
1536 info[i++] = "Your appearance is masked with illusion.";
1540 if (p_ptr->muta3 & MUT3_XTRA_EYES)
1543 info[i++] = "¤¢¤Ê¤¿¤Ï;ʬ¤ËÆó¤Ä¤ÎÌܤò»ý¤Ã¤Æ¤¤¤ë¡£(õº÷+15)";
1545 info[i++] = "You have an extra pair of eyes (+15 search).";
1549 if (p_ptr->muta3 & MUT3_MAGIC_RES)
1552 info[i++] = "¤¢¤Ê¤¿¤ÏËâË¡¤Ø¤ÎÂÑÀ¤ò¤â¤Ã¤Æ¤¤¤ë¡£";
1554 info[i++] = "You are resistant to magic.";
1558 if (p_ptr->muta3 & MUT3_XTRA_NOIS)
1561 info[i++] = "¤¢¤Ê¤¿¤ÏÊѤʲ»¤òȯ¤·¤Æ¤¤¤ë¡£(±£Ì©-3)";
1563 info[i++] = "You make a lot of strange noise (-3 stealth).";
1567 if (p_ptr->muta3 & MUT3_INFRAVIS)
1570 info[i++] = "¤¢¤Ê¤¿¤ÏÁÇÀ²¤é¤·¤¤ÀÖ³°Àþ»ëÎϤò»ý¤Ã¤Æ¤¤¤ë¡£(+3)";
1572 info[i++] = "You have remarkable infravision (+3).";
1576 if (p_ptr->muta3 & MUT3_XTRA_LEGS)
1579 info[i++] = "¤¢¤Ê¤¿¤Ï;ʬ¤ËÆóËܤΤ¬À¸¤¨¤Æ¤¤¤ë¡£(²Ã®+3)";
1581 info[i++] = "You have an extra pair of legs (+3 speed).";
1585 if (p_ptr->muta3 & MUT3_SHORT_LEG)
1588 info[i++] = "¤¢¤Ê¤¿¤Î¤Ïû¤¤Æ͵¯¤À¡£(²Ã®-3)";
1590 info[i++] = "Your legs are short stubs (-3 speed).";
1594 if (p_ptr->muta3 & MUT3_ELEC_TOUC)
1597 info[i++] = "¤¢¤Ê¤¿¤Î·ì´É¤Ë¤ÏÅÅή¤¬Î®¤ì¤Æ¤¤¤ë¡£";
1599 info[i++] = "Electricity is running through your veins.";
1603 if (p_ptr->muta3 & MUT3_FIRE_BODY)
1606 info[i++] = "¤¢¤Ê¤¿¤ÎÂΤϱê¤Ë¤Ä¤Ä¤Þ¤ì¤Æ¤¤¤ë¡£";
1608 info[i++] = "Your body is enveloped in flames.";
1611 if (p_ptr->muta3 & MUT3_WART_SKIN)
1614 info[i++] = "¤¢¤Ê¤¿¤ÎÈ©¤Ï¥¤¥Ü¤ËÈï¤ï¤ì¤Æ¤¤¤ë¡£(Ì¥ÎÏ-2, AC+5)";
1616 info[i++] = "Your skin is covered with warts (-2 CHR, +5 AC).";
1620 if (p_ptr->muta3 & MUT3_SCALES)
1623 info[i++] = "¤¢¤Ê¤¿¤ÎÈ©¤ÏÎڤˤʤäƤ¤¤ë¡£(Ì¥ÎÏ-1, AC+10)";
1625 info[i++] = "Your skin has turned into scales (-1 CHR, +10 AC).";
1629 if (p_ptr->muta3 & MUT3_IRON_SKIN)
1632 info[i++] = "¤¢¤Ê¤¿¤ÎÈ©¤ÏÅ´¤Ç¤Ç¤¤Æ¤¤¤ë¡£(´ïÍÑ-1, AC+25)";
1634 info[i++] = "Your skin is made of steel (-1 DEX, +25 AC).";
1638 if (p_ptr->muta3 & MUT3_WINGS)
1641 info[i++] = "¤¢¤Ê¤¿¤Ï±©¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
1643 info[i++] = "You have wings.";
1647 if (p_ptr->muta3 & MUT3_FEARLESS)
1651 if (p_ptr->muta3 & MUT3_REGEN)
1655 if (p_ptr->muta3 & MUT3_ESP)
1659 if (p_ptr->muta3 & MUT3_LIMBER)
1662 info[i++] = "¤¢¤Ê¤¿¤ÎÂΤÏÈó¾ï¤Ë¤·¤Ê¤ä¤«¤À¡£(´ïÍÑ+3)";
1664 info[i++] = "Your body is very limber (+3 DEX).";
1668 if (p_ptr->muta3 & MUT3_ARTHRITIS)
1671 info[i++] = "¤¢¤Ê¤¿¤Ï¤¤¤Ä¤â´ØÀá¤ËÄˤߤò´¶¤¸¤Æ¤¤¤ë¡£(´ïÍÑ-3)";
1673 info[i++] = "Your joints ache constantly (-3 DEX).";
1677 if (p_ptr->muta3 & MUT3_VULN_ELEM)
1680 info[i++] = "¤¢¤Ê¤¿¤Ï¸µÁǤι¶·â¤Ë¼å¤¤¡£";
1682 info[i++] = "You are susceptible to damage from the elements.";
1686 if (p_ptr->muta3 & MUT3_MOTION)
1689 info[i++] = "¤¢¤Ê¤¿¤ÎÆ°ºî¤ÏÀµ³Î¤ÇÎ϶¯¤¤¡£(±£Ì©+1)";
1691 info[i++] = "Your movements are precise and forceful (+1 STL).";
1695 if (p_ptr->muta3 & MUT3_GOOD_LUCK)
1698 info[i++] = "¤¢¤Ê¤¿¤ÏÇò¤¤¥ª¡¼¥é¤Ë¤Ä¤Ä¤Þ¤ì¤Æ¤¤¤ë¡£";
1700 info[i++] = "There is a white aura surrounding you.";
1703 if (p_ptr->muta3 & MUT3_BAD_LUCK)
1706 info[i++] = "¤¢¤Ê¤¿¤Ï¹õ¤¤¥ª¡¼¥é¤Ë¤Ä¤Ä¤Þ¤ì¤Æ¤¤¤ë¡£";
1708 info[i++] = "There is a black aura surrounding you.";
1716 info[i++] = "¤¢¤Ê¤¿¤ÏÌܤ¬¸«¤¨¤Ê¤¤¡£";
1718 info[i++] = "You cannot see.";
1722 if (p_ptr->confused)
1725 info[i++] = "¤¢¤Ê¤¿¤Ïº®Í𤷤Ƥ¤¤ë¡£";
1727 info[i++] = "You are confused.";
1734 info[i++] = "¤¢¤Ê¤¿¤Ï¶²Éݤ˿¯¤µ¤ì¤Æ¤¤¤ë¡£";
1736 info[i++] = "You are terrified.";
1743 info[i++] = "¤¢¤Ê¤¿¤Ï½Ð·ì¤·¤Æ¤¤¤ë¡£";
1745 info[i++] = "You are bleeding.";
1752 info[i++] = "¤¢¤Ê¤¿¤Ï¤â¤¦¤í¤¦¤È¤·¤Æ¤¤¤ë¡£";
1754 info[i++] = "You are stunned.";
1758 if (p_ptr->poisoned)
1761 info[i++] = "¤¢¤Ê¤¿¤ÏÆǤ˿¯¤µ¤ì¤Æ¤¤¤ë¡£";
1763 info[i++] = "You are poisoned.";
1770 info[i++] = "¤¢¤Ê¤¿¤Ï¸¸³Ð¤ò¸«¤Æ¤¤¤ë¡£";
1772 info[i++] = "You are hallucinating.";
1776 if (p_ptr->cursed & TRC_TY_CURSE)
1779 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°¤Ê±åÇ°¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£";
1781 info[i++] = "You carry an ancient foul curse.";
1785 if (p_ptr->cursed & TRC_AGGRAVATE)
1788 info[i++] = "¤¢¤Ê¤¿¤Ï¥â¥ó¥¹¥¿¡¼¤òÅܤ餻¤Æ¤¤¤ë¡£";
1790 info[i++] = "You aggravate monsters.";
1794 if (p_ptr->cursed & TRC_DRAIN_EXP)
1797 info[i++] = "¤¢¤Ê¤¿¤Ï·Ð¸³ÃͤòµÛ¤ï¤ì¤Æ¤¤¤ë¡£";
1799 info[i++] = "You are drained.";
1803 if (p_ptr->cursed & TRC_SLOW_REGEN)
1806 info[i++] = "¤¢¤Ê¤¿¤Î²óÉüÎϤÏÈó¾ï¤ËÃÙ¤¤¡£";
1808 info[i++] = "You regenerate slowly.";
1812 if (p_ptr->cursed & TRC_ADD_L_CURSE)
1815 info[i++] = "¤¢¤Ê¤¿¤Î¼å¤¤¼ö¤¤¤ÏÁý¤¨¤ë¡£"; /* »ÃÄêŪ -- henkma */
1817 info[i++] = "Your weak curses multiply.";
1821 if (p_ptr->cursed & TRC_ADD_H_CURSE)
1824 info[i++] = "¤¢¤Ê¤¿¤Î¶¯¤¤¼ö¤¤¤ÏÁý¤¨¤ë¡£"; /* »ÃÄêŪ -- henkma */
1826 info[i++] = "Your heavy curses multiply.";
1830 if (p_ptr->cursed & TRC_CALL_ANIMAL)
1833 info[i++] = "¤¢¤Ê¤¿¤Ïưʪ¤ËÁÀ¤ï¤ì¤Æ¤¤¤ë¡£";
1835 info[i++] = "You attract animals.";
1839 if (p_ptr->cursed & TRC_CALL_DEMON)
1842 info[i++] = "¤¢¤Ê¤¿¤Ï°Ëâ¤ËÁÀ¤ï¤ì¤Æ¤¤¤ë¡£";
1844 info[i++] = "You attract demons.";
1848 if (p_ptr->cursed & TRC_CALL_DRAGON)
1851 info[i++] = "¤¢¤Ê¤¿¤Ï¥É¥é¥´¥ó¤ËÁÀ¤ï¤ì¤Æ¤¤¤ë¡£";
1853 info[i++] = "You attract dragons.";
1857 if (p_ptr->cursed & TRC_COWARDICE)
1860 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹²²É¤ˤʤ롣";
1862 info[i++] = "You are subject to cowardice.";
1866 if (p_ptr->cursed & TRC_TELEPORT)
1869 info[i++] = "¤¢¤Ê¤¿¤Î°ÌÃ֤ϤҤ¸¤ç¤¦¤ËÉÔ°ÂÄê¤À¡£";
1871 info[i++] = "Your position is very uncertain.";
1875 if (p_ptr->cursed & TRC_LOW_MELEE)
1878 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¹¶·â¤ò³°¤·¤ä¤¹¤¤¡£";
1880 info[i++] = "Your weapon causes you miss blows.";
1884 if (p_ptr->cursed & TRC_LOW_AC)
1887 info[i++] = "¤¢¤Ê¤¿¤Ï¹¶·â¤ò¼õ¤±¤ä¤¹¤¤¡£";
1889 info[i++] = "You are subject to be hit.";
1893 if (p_ptr->cursed & TRC_LOW_MAGIC)
1896 info[i++] = "¤¢¤Ê¤¿¤ÏËâË¡¤ò¼ºÇÔ¤·¤ä¤¹¤¤¡£";
1898 info[i++] = "You are subject to fail spellcasting.";
1902 if (p_ptr->cursed & TRC_FAST_DIGEST)
1905 info[i++] = "¤¢¤Ê¤¿¤Ï¤¹¤°¤ªÊ¢¤¬¤Ø¤ë¡£";
1907 info[i++] = "You have a good appetite.";
1911 if (p_ptr->cursed & TRC_DRAIN_HP)
1914 info[i++] = "¤¢¤Ê¤¿¤ÏÂÎÎϤòµÛ¤ï¤ì¤Æ¤¤¤ë¡£";
1916 info[i++] = "You are drained.";
1920 if (p_ptr->cursed & TRC_DRAIN_MANA)
1923 info[i++] = "¤¢¤Ê¤¿¤ÏËâÎϤòµÛ¤ï¤ì¤Æ¤¤¤ë¡£";
1925 info[i++] = "You brain is drained.";
1932 info[i++] = "¤¢¤Ê¤¿¤Ï¸øÀµ¤µ¤ò´¶¤¸¤Æ¤¤¤ë¡£";
1934 info[i++] = "You feel rightous.";
1941 info[i++] = "¤¢¤Ê¤¿¤Ï¥Ò¡¼¥í¡¼µ¤Ê¬¤À¡£";
1943 info[i++] = "You feel heroic.";
1950 info[i++] = "¤¢¤Ê¤¿¤ÏÀïÆ®¶¸¤À¡£";
1952 info[i++] = "You are in a battle rage.";
1956 if (p_ptr->protevil)
1959 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°¤Ê¤ë¸ºß¤«¤é¼é¤é¤ì¤Æ¤¤¤ë¡£";
1961 info[i++] = "You are protected from evil.";
1968 info[i++] = "¤¢¤Ê¤¿¤Ï¿ÀÈë¤Î¥·¡¼¥ë¥É¤Ç¼é¤é¤ì¤Æ¤¤¤ë¡£";
1970 info[i++] = "You are protected by a mystic shield.";
1977 info[i++] = "¤¢¤Ê¤¿¤Ï¸½ºß½ý¤Ä¤«¤Ê¤¤¡£";
1979 info[i++] = "You are temporarily invulnerable.";
1983 if (p_ptr->wraith_form)
1986 info[i++] = "¤¢¤Ê¤¿¤Ï°ì»þŪ¤ËÍ©Â⽤·¤Æ¤¤¤ë¡£";
1988 info[i++] = "You are temporarily incorporeal.";
1992 if (p_ptr->special_attack & ATTACK_CONFUSE)
1995 info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤ÏÀÖ¤¯µ±¤¤¤Æ¤¤¤ë¡£";
1997 info[i++] = "Your hands are glowing dull red.";
2001 if (p_ptr->special_attack & ATTACK_FIRE)
2004 info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤Ï²Ð±ê¤Ëʤ¤ï¤ì¤Æ¤¤¤ë¡£";
2006 info[i++] = "You can strike enemy with flame.";
2010 if (p_ptr->special_attack & ATTACK_COLD)
2013 info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤ÏÎ䵤¤Ëʤ¤ï¤ì¤Æ¤¤¤ë¡£";
2015 info[i++] = "You can strike enemy with cold.";
2019 if (p_ptr->special_attack & ATTACK_ACID)
2022 info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤Ï»À¤Ëʤ¤ï¤ì¤Æ¤¤¤ë¡£";
2024 info[i++] = "You can strike enemy with acid.";
2028 if (p_ptr->special_attack & ATTACK_ELEC)
2031 info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤ÏÅÅ·â¤Ëʤ¤ï¤ì¤Æ¤¤¤ë¡£";
2033 info[i++] = "You can strike enemy with electoric shock.";
2037 if (p_ptr->special_attack & ATTACK_POIS)
2040 info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤ÏÆǤËʤ¤ï¤ì¤Æ¤¤¤ë¡£";
2042 info[i++] = "You can strike enemy with poison.";
2046 switch (p_ptr->action)
2050 info[i++] = "¤¢¤Ê¤¿¤Ï¤Ò¤¸¤ç¤¦¤ËÃí°Õ¿¼¤¯¼þ°Ï¤ò¸«ÅϤ·¤Æ¤¤¤ë¡£";
2052 info[i++] = "You are looking around very carefully.";
2056 if (p_ptr->new_spells)
2059 info[i++] = "¤¢¤Ê¤¿¤Ï¼öʸ¤äµ§¤ê¤ò³Ø¤Ö¤³¤È¤¬¤Ç¤¤ë¡£";
2061 info[i++] = "You can learn some spells/prayers.";
2065 if (p_ptr->word_recall)
2068 info[i++] = "¤¢¤Ê¤¿¤Ï¤¹¤°¤Ëµ¢´Ô¤¹¤ë¤À¤í¤¦¡£";
2070 info[i++] = "You will soon be recalled.";
2074 if (p_ptr->see_infra)
2077 info[i++] = "¤¢¤Ê¤¿¤ÎÆ·¤ÏÀÖ³°Àþ¤ËÉÒ´¶¤Ç¤¢¤ë¡£";
2079 info[i++] = "Your eyes are sensitive to infrared light.";
2086 info[i++] = "¤¢¤Ê¤¿¤ÏÆ©ÌÀ¤Ê¥â¥ó¥¹¥¿¡¼¤ò¸«¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
2088 info[i++] = "You can see invisible creatures.";
2095 info[i++] = "¤¢¤Ê¤¿¤ÏÈô¤Ö¤³¤È¤¬¤Ç¤¤ë¡£";
2097 info[i++] = "You can fly.";
2101 if (p_ptr->free_act)
2104 info[i++] = "¤¢¤Ê¤¿¤ÏËãáãÃΤ餺¤Î¸ú²Ì¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2106 info[i++] = "You have free action.";
2110 if (p_ptr->regenerate)
2113 info[i++] = "¤¢¤Ê¤¿¤ÏÁÇÁ᤯ÂÎÎϤò²óÉü¤¹¤ë¡£";
2115 info[i++] = "You regenerate quickly.";
2119 if (p_ptr->slow_digest)
2122 info[i++] = "¤¢¤Ê¤¿¤Ï¿©Íߤ¬¾¯¤Ê¤¤¡£";
2124 info[i++] = "Your appetite is small.";
2128 if (p_ptr->telepathy)
2131 info[i++] = "¤¢¤Ê¤¿¤Ï¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
2133 info[i++] = "You have ESP.";
2137 if (p_ptr->hold_life)
2140 info[i++] = "¤¢¤Ê¤¿¤Ï¼«¸Ê¤ÎÀ¸Ì¿ÎϤò¤·¤Ã¤«¤ê¤È°Ý»ý¤¹¤ë¡£";
2142 info[i++] = "You have a firm hold on your life force.";
2149 info[i++] = "¤¢¤Ê¤¿¤ÏÌð¤ä¥Ü¥ë¥È¤òÈ¿¼Í¤¹¤ë¡£";
2151 info[i++] = "You reflect arrows and bolts.";
2158 info[i++] = "¤¢¤Ê¤¿¤Ï±ê¤Î¥ª¡¼¥é¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£";
2160 info[i++] = "You are surrounded with a fiery aura.";
2167 info[i++] = "¤¢¤Ê¤¿¤ÏÅŵ¤¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£";
2169 info[i++] = "You are surrounded with electricity.";
2176 info[i++] = "¤¢¤Ê¤¿¤ÏÎ䵤¤Î¥ª¡¼¥é¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£";
2178 info[i++] = "You are surrounded with a coldly aura.";
2182 if (p_ptr->tim_sh_holy)
2185 info[i++] = "¤¢¤Ê¤¿¤ÏÀ»¤Ê¤ë¥ª¡¼¥é¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£";
2187 info[i++] = "You are surrounded with a holy aura.";
2191 if (p_ptr->tim_sh_touki)
2194 info[i++] = "¤¢¤Ê¤¿¤ÏÆ®µ¤¤Î¥ª¡¼¥é¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£";
2196 info[i++] = "You are surrounded with a energy aura.";
2200 if (p_ptr->anti_magic)
2203 info[i++] = "¤¢¤Ê¤¿¤ÏÈ¿ËâË¡¥·¡¼¥ë¥É¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£";
2205 info[i++] = "You are surrounded by an anti-magic shell.";
2209 if (p_ptr->anti_tele)
2212 info[i++] = "¤¢¤Ê¤¿¤Ï¥Æ¥ì¥Ý¡¼¥È¤Ç¤¤Ê¤¤¡£";
2214 info[i++] = "You cannot teleport.";
2221 info[i++] = "¤¢¤Ê¤¿¤Î¿ÈÂΤϸ÷¤Ã¤Æ¤¤¤ë¡£";
2223 info[i++] = "You are carrying a permanent light.";
2230 info[i++] = "¤¢¤Ê¤¿¤Ï¹ÔÆ°¤ÎÁ°¤Ë´í¸±¤ò»¡ÃΤ¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
2232 info[i++] = "You will be warn before dangerous action.";
2236 if (p_ptr->dec_mana)
2239 info[i++] = "¤¢¤Ê¤¿¤Ï¾¯¤Ê¤¤¾ÃÈñËâÎϤÇËâË¡¤ò¾§¤¨¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
2241 info[i++] = "You can cast spell with fewer mana.";
2245 if (p_ptr->easy_spell)
2248 info[i++] = "¤¢¤Ê¤¿¤ÏÄ㤤¼ºÇÔΨ¤ÇËâË¡¤ò¾§¤¨¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
2250 info[i++] = "Fail rate of your magic is decreased.";
2254 if (p_ptr->heavy_spell)
2257 info[i++] = "¤¢¤Ê¤¿¤Ï¹â¤¤¼ºÇÔΨ¤ÇËâË¡¤ò¾§¤¨¤Ê¤±¤ì¤Ð¤¤¤±¤Ê¤¤¡£";
2259 info[i++] = "Fail rate of your magic is incresed.";
2263 if (p_ptr->mighty_throw)
2266 info[i++] = "¤¢¤Ê¤¿¤Ï¶¯¤¯Êª¤òÅꤲ¤ë¡£";
2268 info[i++] = "You can throw objects powerfully.";
2273 if (p_ptr->immune_acid)
2276 info[i++] = "¤¢¤Ê¤¿¤Ï»À¤ËÂФ¹¤ë´°Á´¤Ê¤ëÌȱ֤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2278 info[i++] = "You are completely immune to acid.";
2282 else if ((p_ptr->resist_acid) && (p_ptr->oppose_acid))
2285 info[i++] = "¤¢¤Ê¤¿¤Ï»À¤Ø¤Î¶¯ÎϤÊÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2287 info[i++] = "You resist acid exceptionally well.";
2291 else if ((p_ptr->resist_acid) || (p_ptr->oppose_acid))
2294 info[i++] = "¤¢¤Ê¤¿¤Ï»À¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2296 info[i++] = "You are resistant to acid.";
2301 if (p_ptr->immune_elec)
2304 info[i++] = "¤¢¤Ê¤¿¤ÏÅÅ·â¤ËÂФ¹¤ë´°Á´¤Ê¤ëÌȱ֤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2306 info[i++] = "You are completely immune to lightning.";
2310 else if ((p_ptr->resist_elec) && (p_ptr->oppose_elec))
2313 info[i++] = "¤¢¤Ê¤¿¤ÏÅÅ·â¤Ø¤Î¶¯ÎϤÊÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2315 info[i++] = "You resist lightning exceptionally well.";
2319 else if ((p_ptr->resist_elec) || (p_ptr->oppose_elec))
2322 info[i++] = "¤¢¤Ê¤¿¤ÏÅÅ·â¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2324 info[i++] = "You are resistant to lightning.";
2329 if (prace_is_(RACE_ANDROID) && !p_ptr->immune_elec)
2332 info[i++] = "¤¢¤Ê¤¿¤ÏÅÅ·â¤Ë¼å¤¤¡£";
2334 info[i++] = "You are susceptible to damage from lightning.";
2339 if (p_ptr->immune_fire)
2342 info[i++] = "¤¢¤Ê¤¿¤Ï²Ð¤ËÂФ¹¤ë´°Á´¤Ê¤ëÌȱ֤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2344 info[i++] = "You are completely immune to fire.";
2348 else if ((p_ptr->resist_fire) && (p_ptr->oppose_fire))
2351 info[i++] = "¤¢¤Ê¤¿¤Ï²Ð¤Ø¤Î¶¯ÎϤÊÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2353 info[i++] = "You resist fire exceptionally well.";
2357 else if ((p_ptr->resist_fire) || (p_ptr->oppose_fire))
2360 info[i++] = "¤¢¤Ê¤¿¤Ï²Ð¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2362 info[i++] = "You are resistant to fire.";
2367 if (prace_is_(RACE_ENT) && !p_ptr->immune_fire)
2370 info[i++] = "¤¢¤Ê¤¿¤Ï²Ð¤Ë¼å¤¤¡£";
2372 info[i++] = "You are susceptible to damage from fire.";
2377 if (p_ptr->immune_cold)
2380 info[i++] = "¤¢¤Ê¤¿¤ÏÎ䵤¤ËÂФ¹¤ë´°Á´¤Ê¤ëÌȱ֤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2382 info[i++] = "You are completely immune to cold.";
2386 else if ((p_ptr->resist_cold) && (p_ptr->oppose_cold))
2389 info[i++] = "¤¢¤Ê¤¿¤ÏÎ䵤¤Ø¤Î¶¯ÎϤÊÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2391 info[i++] = "You resist cold exceptionally well.";
2395 else if ((p_ptr->resist_cold) || (p_ptr->oppose_cold))
2398 info[i++] = "¤¢¤Ê¤¿¤ÏÎ䵤¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2400 info[i++] = "You are resistant to cold.";
2405 if ((p_ptr->resist_pois) && (p_ptr->oppose_pois))
2408 info[i++] = "¤¢¤Ê¤¿¤ÏÆǤؤζ¯ÎϤÊÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2410 info[i++] = "You resist poison exceptionally well.";
2414 else if ((p_ptr->resist_pois) || (p_ptr->oppose_pois))
2417 info[i++] = "¤¢¤Ê¤¿¤ÏÆǤؤÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2419 info[i++] = "You are resistant to poison.";
2424 if (p_ptr->resist_lite)
2427 info[i++] = "¤¢¤Ê¤¿¤ÏÁ®¸÷¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2429 info[i++] = "You are resistant to bright light.";
2434 if (prace_is_(RACE_VAMPIRE) || prace_is_(RACE_S_FAIRY) || (p_ptr->mimic_form == MIMIC_VAMPIRE))
2437 info[i++] = "¤¢¤Ê¤¿¤ÏÁ®¸÷¤Ë¼å¤¤¡£";
2439 info[i++] = "You are susceptible to damage from bright light.";
2444 if (prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE) || p_ptr->wraith_form)
2447 info[i++] = "¤¢¤Ê¤¿¤Ï°Å¹õ¤ËÂФ¹¤ë´°Á´¤Ê¤ëÌȱ֤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2449 info[i++] = "You are completely immune to darkness.";
2453 else if (p_ptr->resist_dark)
2456 info[i++] = "¤¢¤Ê¤¿¤Ï°Å¹õ¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2458 info[i++] = "You are resistant to darkness.";
2462 if (p_ptr->resist_conf)
2465 info[i++] = "¤¢¤Ê¤¿¤Ïº®Íð¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2467 info[i++] = "You are resistant to confusion.";
2471 if (p_ptr->resist_sound)
2474 info[i++] = "¤¢¤Ê¤¿¤Ï²»ÇȤξ׷â¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2476 info[i++] = "You are resistant to sonic attacks.";
2480 if (p_ptr->resist_disen)
2483 info[i++] = "¤¢¤Ê¤¿¤ÏÎô²½¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2485 info[i++] = "You are resistant to disenchantment.";
2489 if (p_ptr->resist_chaos)
2492 info[i++] = "¤¢¤Ê¤¿¤Ï¥«¥ª¥¹¤ÎÎϤؤÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2494 info[i++] = "You are resistant to chaos.";
2498 if (p_ptr->resist_shard)
2501 info[i++] = "¤¢¤Ê¤¿¤ÏÇËÊҤι¶·â¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2503 info[i++] = "You are resistant to blasts of shards.";
2507 if (p_ptr->resist_nexus)
2510 info[i++] = "¤¢¤Ê¤¿¤Ï°ø²Ìº®Íð¤Î¹¶·â¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2512 info[i++] = "You are resistant to nexus attacks.";
2517 if (prace_is_(RACE_SPECTRE))
2520 info[i++] = "¤¢¤Ê¤¿¤ÏÃϹö¤ÎÎϤòµÛ¼ý¤Ç¤¤ë¡£";
2522 info[i++] = "You can drain nether forces.";
2526 else if (p_ptr->resist_neth)
2529 info[i++] = "¤¢¤Ê¤¿¤ÏÃϹö¤ÎÎϤؤÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2531 info[i++] = "You are resistant to nether forces.";
2535 if (p_ptr->resist_fear)
2538 info[i++] = "¤¢¤Ê¤¿¤ÏÁ´¤¯¶²Éݤò´¶¤¸¤Ê¤¤¡£";
2540 info[i++] = "You are completely fearless.";
2544 if (p_ptr->resist_blind)
2547 info[i++] = "¤¢¤Ê¤¿¤ÎÌܤÏÌÕÌܤؤÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2549 info[i++] = "Your eyes are resistant to blindness.";
2553 if (p_ptr->resist_time)
2556 info[i++] = "¤¢¤Ê¤¿¤Ï»þ´ÖµÕž¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2558 info[i++] = "You are resistant to time.";
2563 if (p_ptr->sustain_str)
2566 info[i++] = "¤¢¤Ê¤¿¤ÎÏÓÎϤϰݻý¤µ¤ì¤Æ¤¤¤ë¡£";
2568 info[i++] = "Your strength is sustained.";
2572 if (p_ptr->sustain_int)
2575 info[i++] = "¤¢¤Ê¤¿¤ÎÃÎǽ¤Ï°Ý»ý¤µ¤ì¤Æ¤¤¤ë¡£";
2577 info[i++] = "Your intelligence is sustained.";
2581 if (p_ptr->sustain_wis)
2584 info[i++] = "¤¢¤Ê¤¿¤Î¸¤µ¤Ï°Ý»ý¤µ¤ì¤Æ¤¤¤ë¡£";
2586 info[i++] = "Your wisdom is sustained.";
2590 if (p_ptr->sustain_con)
2593 info[i++] = "¤¢¤Ê¤¿¤ÎÂѵ×ÎϤϰݻý¤µ¤ì¤Æ¤¤¤ë¡£";
2595 info[i++] = "Your constitution is sustained.";
2599 if (p_ptr->sustain_dex)
2602 info[i++] = "¤¢¤Ê¤¿¤Î´ïÍѤµ¤Ï°Ý»ý¤µ¤ì¤Æ¤¤¤ë¡£";
2604 info[i++] = "Your dexterity is sustained.";
2608 if (p_ptr->sustain_chr)
2611 info[i++] = "¤¢¤Ê¤¿¤ÎÌ¥ÎϤϰݻý¤µ¤ì¤Æ¤¤¤ë¡£";
2613 info[i++] = "Your charisma is sustained.";
2621 info[i++] = "¤¢¤Ê¤¿¤ÎÏÓÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2623 info[i++] = "Your strength is affected by your equipment.";
2630 info[i++] = "¤¢¤Ê¤¿¤ÎÃÎǽ¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2632 info[i++] = "Your intelligence is affected by your equipment.";
2639 info[i++] = "¤¢¤Ê¤¿¤Î¸¤µ¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2641 info[i++] = "Your wisdom is affected by your equipment.";
2648 info[i++] = "¤¢¤Ê¤¿¤Î´ïÍѤµ¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2650 info[i++] = "Your dexterity is affected by your equipment.";
2657 info[i++] = "¤¢¤Ê¤¿¤ÎÂѵ×ÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2659 info[i++] = "Your constitution is affected by your equipment.";
2666 info[i++] = "¤¢¤Ê¤¿¤ÎÌ¥ÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2668 info[i++] = "Your charisma is affected by your equipment.";
2673 if (f1 & (TR1_STEALTH))
2676 info[i++] = "¤¢¤Ê¤¿¤Î±£Ì©¹ÔưǽÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2678 info[i++] = "Your stealth is affected by your equipment.";
2682 if (f1 & (TR1_SEARCH))
2685 info[i++] = "¤¢¤Ê¤¿¤Îõº÷ǽÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2687 info[i++] = "Your searching ability is affected by your equipment.";
2691 if (f1 & (TR1_INFRA))
2694 info[i++] = "¤¢¤Ê¤¿¤ÎÀÖ³°Àþ»ëÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2696 info[i++] = "Your infravision is affected by your equipment.";
2700 if (f1 & (TR1_TUNNEL))
2703 info[i++] = "¤¢¤Ê¤¿¤ÎºÎ·¡Ç½ÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2705 info[i++] = "Your digging ability is affected by your equipment.";
2709 if (f1 & (TR1_SPEED))
2712 info[i++] = "¤¢¤Ê¤¿¤Î¥¹¥Ô¡¼¥É¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2714 info[i++] = "Your speed is affected by your equipment.";
2718 if (f1 & (TR1_BLOWS))
2721 info[i++] = "¤¢¤Ê¤¿¤Î¹¶·â®ÅÙ¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2723 info[i++] = "Your attack speed is affected by your equipment.";
2729 /* Access the current weapon */
2730 o_ptr = &inventory[INVEN_RARM];
2732 /* Analyze the weapon */
2735 /* Indicate Blessing */
2736 if (f3 & (TR3_BLESSED))
2739 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¿À¤Î½ËÊ¡¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2741 info[i++] = "Your weapon has been blessed by the gods.";
2746 if (f1 & (TR1_CHAOTIC))
2749 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥í¥°¥ë¥¹¤Îħ¤Î°À¤ò¤â¤Ä¡£";
2751 info[i++] = "Your weapon is branded with the Sign of Logrus.";
2757 if (f1 & (TR1_IMPACT))
2760 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏÂÇ·â¤ÇÃϿ̤òȯÀ¸¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
2762 info[i++] = "The impact of your weapon can cause earthquakes.";
2767 if (f1 & (TR1_VORPAL))
2770 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏÈó¾ï¤Ë±Ô¤¤¡£";
2772 info[i++] = "Your weapon is very sharp.";
2777 if (f1 & (TR1_VAMPIRIC))
2780 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤«¤éÀ¸Ì¿ÎϤòµÛ¼ý¤¹¤ë¡£";
2782 info[i++] = "Your weapon drains life from your foes.";
2787 /* Special "Attack Bonuses" */
2788 if (f1 & (TR1_BRAND_ACID))
2791 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤òÍϤ«¤¹¡£";
2793 info[i++] = "Your weapon melts your foes.";
2797 if (f1 & (TR1_BRAND_ELEC))
2800 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤ò´¶ÅŤµ¤»¤ë¡£";
2802 info[i++] = "Your weapon shocks your foes.";
2806 if (f1 & (TR1_BRAND_FIRE))
2809 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤òdz¤ä¤¹¡£";
2811 info[i++] = "Your weapon burns your foes.";
2815 if (f1 & (TR1_BRAND_COLD))
2818 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤òÅà¤é¤»¤ë¡£";
2820 info[i++] = "Your weapon freezes your foes.";
2824 if (f1 & (TR1_BRAND_POIS))
2827 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤òÆǤǿ¯¤¹¡£";
2829 info[i++] = "Your weapon poisons your foes.";
2834 /* Special "slay" flags */
2835 if (f1 & (TR1_SLAY_ANIMAL))
2838 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ïưʪ¤ËÂФ·¤Æ¶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
2840 info[i++] = "Your weapon strikes at animals with extra force.";
2844 if (f1 & (TR1_SLAY_EVIL))
2847 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¼Ù°¤Ê¤ë¸ºß¤ËÂФ·¤Æ¶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
2849 info[i++] = "Your weapon strikes at evil with extra force.";
2853 if (f3 & (TR3_SLAY_HUMAN))
2856 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¿Í´Ö¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
2858 info[i++] = "Your weapon is especially deadly against humans.";
2862 if (f1 & (TR1_SLAY_UNDEAD))
2865 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥¢¥ó¥Ç¥Ã¥É¤ËÂФ·¤Æ¿ÀÀ»¤Ê¤ëÎϤòȯ´ø¤¹¤ë¡£";
2867 info[i++] = "Your weapon strikes at undead with holy wrath.";
2871 if (f1 & (TR1_SLAY_DEMON))
2874 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥Ç¡¼¥â¥ó¤ËÂФ·¤Æ¿ÀÀ»¤Ê¤ëÎϤòȯ´ø¤¹¤ë¡£";
2876 info[i++] = "Your weapon strikes at demons with holy wrath.";
2880 if (f1 & (TR1_SLAY_ORC))
2883 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥ª¡¼¥¯¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
2885 info[i++] = "Your weapon is especially deadly against orcs.";
2889 if (f1 & (TR1_SLAY_TROLL))
2892 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥È¥í¥ë¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
2894 info[i++] = "Your weapon is especially deadly against trolls.";
2898 if (f1 & (TR1_SLAY_GIANT))
2901 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥¸¥ã¥¤¥¢¥ó¥È¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
2903 info[i++] = "Your weapon is especially deadly against giants.";
2907 /* Special "kill" flags */
2908 if (f1 & (TR1_KILL_DRAGON))
2911 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥É¥é¥´¥ó¤ÎŷŨ¤Ç¤¢¤ë¡£";
2913 info[i++] = "Your weapon is a great bane of dragons.";
2917 else if (f1 & (TR1_SLAY_DRAGON))
2920 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥É¥é¥´¥ó¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
2922 info[i++] = "Your weapon is especially deadly against dragons.";
2927 if (f1 & (TR1_FORCE_WEAPON))
2930 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏMP¤ò»È¤Ã¤Æ¹¶·â¤¹¤ë¡£";
2932 info[i++] = "Your weapon causes greate damages using your MP.";
2936 if (f2 & (TR2_THROW))
2939 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏÅꤲ¤ä¤¹¤¤¡£";
2941 info[i++] = "Your weapon can be thrown well.";
2947 /* Save the screen */
2950 /* Erase the screen */
2951 for (k = 1; k < 24; k++) prt("", k, 13);
2953 /* Label the information */
2955 prt(" ¤¢¤Ê¤¿¤Î¾õÂÖ:", 1, 15);
2957 prt(" Your Attributes:", 1, 15);
2961 /* We will print on top of the map (column 13) */
2962 for (k = 2, j = 0; j < i; j++)
2965 prt(info[j], k++, 15);
2967 /* Every 20 entries (lines 2 to 21), start over */
2968 if ((k == 22) && (j+1 < i))
2971 prt("-- ³¤¯ --", k, 15);
2973 prt("-- more --", k, 15);
2977 for (; k > 2; k--) prt("", k, 15);
2983 prt("[²¿¤«¥¡¼¤ò²¡¤¹¤È¥²¡¼¥à¤ËÌá¤ê¤Þ¤¹]", k, 13);
2985 prt("[Press any key to continue]", k, 13);
2990 /* Restore the screen */
2995 static int report_magics_aux(int dur)
3013 else if (dur <= 100)
3017 else if (dur <= 200)
3027 static cptr report_magic_durations[] =
3036 "¿®¤¸Æñ¤¤¤Û¤ÉŤ¤´Ö",
3037 "¥â¥ó¥¹¥¿¡¼¤ò¹¶·â¤¹¤ë¤Þ¤Ç"
3040 "for a little while",
3044 "for a very long time",
3045 "for an incredibly long time",
3046 "until you hit a monster"
3053 * Report all currently active magical effects.
3055 void report_magics(void)
3065 info2[i] = report_magics_aux(p_ptr->blind);
3067 info[i++] = "¤¢¤Ê¤¿¤ÏÌܤ¬¸«¤¨¤Ê¤¤¡£";
3069 info[i++] = "You cannot see";
3073 if (p_ptr->confused)
3075 info2[i] = report_magics_aux(p_ptr->confused);
3077 info[i++] = "¤¢¤Ê¤¿¤Ïº®Í𤷤Ƥ¤¤ë¡£";
3079 info[i++] = "You are confused";
3085 info2[i] = report_magics_aux(p_ptr->afraid);
3087 info[i++] = "¤¢¤Ê¤¿¤Ï¶²Éݤ˿¯¤µ¤ì¤Æ¤¤¤ë¡£";
3089 info[i++] = "You are terrified";
3093 if (p_ptr->poisoned)
3095 info2[i] = report_magics_aux(p_ptr->poisoned);
3097 info[i++] = "¤¢¤Ê¤¿¤ÏÆǤ˿¯¤µ¤ì¤Æ¤¤¤ë¡£";
3099 info[i++] = "You are poisoned";
3105 info2[i] = report_magics_aux(p_ptr->image);
3107 info[i++] = "¤¢¤Ê¤¿¤Ï¸¸³Ð¤ò¸«¤Æ¤¤¤ë¡£";
3109 info[i++] = "You are hallucinating";
3115 info2[i] = report_magics_aux(p_ptr->blessed);
3117 info[i++] = "¤¢¤Ê¤¿¤Ï¸øÀµ¤µ¤ò´¶¤¸¤Æ¤¤¤ë¡£";
3119 info[i++] = "You feel rightous";
3125 info2[i] = report_magics_aux(p_ptr->hero);
3127 info[i++] = "¤¢¤Ê¤¿¤Ï¥Ò¡¼¥í¡¼µ¤Ê¬¤À¡£";
3129 info[i++] = "You feel heroic";
3135 info2[i] = report_magics_aux(p_ptr->shero);
3137 info[i++] = "¤¢¤Ê¤¿¤ÏÀïÆ®¶¸¤À¡£";
3139 info[i++] = "You are in a battle rage";
3143 if (p_ptr->protevil)
3145 info2[i] = report_magics_aux(p_ptr->protevil);
3147 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°¤Ê¤ë¸ºß¤«¤é¼é¤é¤ì¤Æ¤¤¤ë¡£";
3149 info[i++] = "You are protected from evil";
3155 info2[i] = report_magics_aux(p_ptr->shield);
3157 info[i++] = "¤¢¤Ê¤¿¤Ï¿ÀÈë¤Î¥·¡¼¥ë¥É¤Ç¼é¤é¤ì¤Æ¤¤¤ë¡£";
3159 info[i++] = "You are protected by a mystic shield";
3165 info2[i] = report_magics_aux(p_ptr->invuln);
3167 info[i++] = "̵Ũ¤Ç¤¤¤é¤ì¤ë¡£";
3169 info[i++] = "You are invulnerable";
3173 if (p_ptr->wraith_form)
3175 info2[i] = report_magics_aux(p_ptr->wraith_form);
3177 info[i++] = "Í©Âβ½¤Ç¤¤ë¡£";
3179 info[i++] = "You are incorporeal";
3183 if (p_ptr->special_attack & ATTACK_CONFUSE)
3187 info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤ÏÀÖ¤¯µ±¤¤¤Æ¤¤¤ë¡£";
3189 info[i++] = "Your hands are glowing dull red.";
3193 if (p_ptr->word_recall)
3195 info2[i] = report_magics_aux(p_ptr->word_recall);
3197 info[i++] = "¤³¤Î¸åµ¢´Ô¤Î¾Û¤òȯư¤¹¤ë¡£";
3199 info[i++] = "You waiting to be recalled";
3203 if (p_ptr->oppose_acid)
3205 info2[i] = report_magics_aux(p_ptr->oppose_acid);
3207 info[i++] = "¤¢¤Ê¤¿¤Ï»À¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
3209 info[i++] = "You are resistant to acid";
3213 if (p_ptr->oppose_elec)
3215 info2[i] = report_magics_aux(p_ptr->oppose_elec);
3217 info[i++] = "¤¢¤Ê¤¿¤ÏÅÅ·â¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
3219 info[i++] = "You are resistant to lightning";
3223 if (p_ptr->oppose_fire)
3225 info2[i] = report_magics_aux(p_ptr->oppose_fire);
3227 info[i++] = "¤¢¤Ê¤¿¤Ï²Ð¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
3229 info[i++] = "You are resistant to fire";
3233 if (p_ptr->oppose_cold)
3235 info2[i] = report_magics_aux(p_ptr->oppose_cold);
3237 info[i++] = "¤¢¤Ê¤¿¤ÏÎ䵤¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
3239 info[i++] = "You are resistant to cold";
3243 if (p_ptr->oppose_pois)
3245 info2[i] = report_magics_aux(p_ptr->oppose_pois);
3247 info[i++] = "¤¢¤Ê¤¿¤ÏÆǤؤÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
3249 info[i++] = "You are resistant to poison";
3254 /* Save the screen */
3257 /* Erase the screen */
3258 for (k = 1; k < 24; k++) prt("", k, 13);
3260 /* Label the information */
3262 prt(" ËâË¡ :", 1, 15);
3264 prt(" Your Current Magic:", 1, 15);
3268 /* We will print on top of the map (column 13) */
3269 for (k = 2, j = 0; j < i; j++)
3273 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï%s%s", info[j],
3275 sprintf(Dummy, "%s %s.", info[j],
3278 report_magic_durations[info2[j]]);
3279 prt(Dummy, k++, 15);
3281 /* Every 20 entries (lines 2 to 21), start over */
3282 if ((k == 22) && (j + 1 < i))
3285 prt("-- ³¤¯ --", k, 15);
3287 prt("-- more --", k, 15);
3291 for (; k > 2; k--) prt("", k, 15);
3297 prt("[²¿¤«¥¡¼¤ò²¡¤¹¤È¥²¡¼¥à¤ËÌá¤ê¤Þ¤¹]", k, 13);
3299 prt("[Press any key to continue]", k, 13);
3304 /* Restore the screen */
3310 * Detect all traps on current panel
3312 bool detect_traps(int range)
3315 bool detect = FALSE;
3319 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3321 /* Scan the current panel */
3322 for (y = 1; y < cur_hgt - 1; y++)
3324 for (x = 1; x <= cur_wid - 1; x++)
3326 int dist = distance(py, px, y, x);
3327 if (dist > range) continue;
3329 /* Access the grid */
3330 c_ptr = &cave[y][x];
3332 /* Mark as detected */
3335 if (dist <= range - 1)
3336 c_ptr->info |= (CAVE_IN_DETECT);
3338 c_ptr->info &= ~(CAVE_UNSAFE);
3344 /* Detect invisible traps */
3345 if (c_ptr->info & CAVE_TRAP)
3352 if (is_trap(c_ptr->feat))
3354 /* Hack -- Memorize */
3355 c_ptr->info |= (CAVE_MARK);
3366 p_ptr->dtrap = TRUE;
3368 if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT)) detect = FALSE;
3374 msg_print("¥È¥é¥Ã¥×¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3376 msg_print("You sense the presence of traps!");
3388 * Detect all doors on current panel
3390 bool detect_doors(int range)
3394 bool detect = FALSE;
3398 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3400 /* Scan the panel */
3401 for (y = 1; y < cur_hgt - 1; y++)
3403 for (x = 1; x < cur_wid - 1; x++)
3405 if (distance(py, px, y, x) > range) continue;
3407 c_ptr = &cave[y][x];
3409 /* Detect secret doors */
3410 if (c_ptr->feat == FEAT_SECRET)
3413 place_closed_door(y, x);
3417 if (((c_ptr->feat >= FEAT_DOOR_HEAD) &&
3418 (c_ptr->feat <= FEAT_DOOR_TAIL)) ||
3419 ((c_ptr->feat == FEAT_OPEN) ||
3420 (c_ptr->feat == FEAT_BROKEN)))
3422 /* Hack -- Memorize */
3423 c_ptr->info |= (CAVE_MARK);
3434 if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT)) detect = FALSE;
3440 msg_print("¥É¥¢¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3442 msg_print("You sense the presence of doors!");
3453 * Detect all stairs on current panel
3455 bool detect_stairs(int range)
3459 bool detect = FALSE;
3463 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3465 /* Scan the panel */
3466 for (y = 1; y < cur_hgt - 1; y++)
3468 for (x = 1; x < cur_wid - 1; x++)
3470 if (distance(py, px, y, x) > range) continue;
3472 c_ptr = &cave[y][x];
3475 if ((c_ptr->feat == FEAT_LESS) ||
3476 (c_ptr->feat == FEAT_LESS_LESS) ||
3477 (c_ptr->feat == FEAT_MORE) ||
3478 (c_ptr->feat == FEAT_MORE_MORE) ||
3479 (c_ptr->feat == FEAT_ENTRANCE))
3481 /* Hack -- Memorize */
3482 c_ptr->info |= (CAVE_MARK);
3493 if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT)) detect = FALSE;
3499 msg_print("³¬Ãʤθºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3501 msg_print("You sense the presence of stairs!");
3512 * Detect any treasure on the current panel
3514 bool detect_treasure(int range)
3518 bool detect = FALSE;
3522 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3524 /* Scan the current panel */
3525 for (y = 1; y < cur_hgt; y++)
3527 for (x = 1; x < cur_wid; x++)
3529 if (distance(py, px, y, x) > range) continue;
3531 c_ptr = &cave[y][x];
3533 /* Notice embedded gold */
3534 if ((c_ptr->feat == FEAT_MAGMA_H) ||
3535 (c_ptr->feat == FEAT_QUARTZ_H))
3537 /* Expose the gold */
3538 c_ptr->feat += 0x02;
3541 /* Magma/Quartz + Known Gold */
3542 if ((c_ptr->feat == FEAT_MAGMA_K) ||
3543 (c_ptr->feat == FEAT_QUARTZ_K))
3545 /* Hack -- Memorize */
3546 c_ptr->info |= (CAVE_MARK);
3557 if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT+6)) detect = FALSE;
3563 msg_print("Ë䢤µ¤ì¤¿ºâÊõ¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3565 msg_print("You sense the presence of buried treasure!");
3578 * Detect all "gold" objects on the current panel
3580 bool detect_objects_gold(int range)
3585 bool detect = FALSE;
3587 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range2 /= 3;
3590 for (i = 1; i < o_max; i++)
3592 object_type *o_ptr = &o_list[i];
3594 /* Skip dead objects */
3595 if (!o_ptr->k_idx) continue;
3597 /* Skip held objects */
3598 if (o_ptr->held_m_idx) continue;
3604 /* Only detect nearby objects */
3605 if (distance(py, px, y, x) > range2) continue;
3607 /* Detect "gold" objects */
3608 if (o_ptr->tval == TV_GOLD)
3610 /* Hack -- memorize it */
3611 o_ptr->marked = TRUE;
3621 if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT+6)) detect = FALSE;
3627 msg_print("ºâÊõ¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3629 msg_print("You sense the presence of treasure!");
3634 if (detect_monsters_string(range, "$"))
3645 * Detect all "normal" objects on the current panel
3647 bool detect_objects_normal(int range)
3652 bool detect = FALSE;
3654 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range2 /= 3;
3657 for (i = 1; i < o_max; i++)
3659 object_type *o_ptr = &o_list[i];
3661 /* Skip dead objects */
3662 if (!o_ptr->k_idx) continue;
3664 /* Skip held objects */
3665 if (o_ptr->held_m_idx) continue;
3671 /* Only detect nearby objects */
3672 if (distance(py, px, y, x) > range2) continue;
3674 /* Detect "real" objects */
3675 if (o_ptr->tval != TV_GOLD)
3677 /* Hack -- memorize it */
3678 o_ptr->marked = TRUE;
3688 if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT+6)) detect = FALSE;
3694 msg_print("¥¢¥¤¥Æ¥à¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3696 msg_print("You sense the presence of objects!");
3701 if (detect_monsters_string(range, "!=?|/`"))
3712 * Detect all "magic" objects on the current panel.
3714 * This will light up all spaces with "magic" items, including artifacts,
3715 * ego-items, potions, scrolls, books, rods, wands, staves, amulets, rings,
3716 * and "enchanted" items of the "good" variety.
3718 * It can probably be argued that this function is now too powerful.
3720 bool detect_objects_magic(int range)
3724 bool detect = FALSE;
3726 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3728 /* Scan all objects */
3729 for (i = 1; i < o_max; i++)
3731 object_type *o_ptr = &o_list[i];
3733 /* Skip dead objects */
3734 if (!o_ptr->k_idx) continue;
3736 /* Skip held objects */
3737 if (o_ptr->held_m_idx) continue;
3743 /* Only detect nearby objects */
3744 if (distance(py, px, y, x) > range) continue;
3746 /* Examine the tval */
3749 /* Artifacts, misc magic items, or enchanted wearables */
3750 if (artifact_p(o_ptr) ||
3751 ego_item_p(o_ptr) ||
3753 (tv == TV_WHISTLE) ||
3754 (tv == TV_AMULET) ||
3759 (tv == TV_SCROLL) ||
3760 (tv == TV_POTION) ||
3761 (tv == TV_LIFE_BOOK) ||
3762 (tv == TV_SORCERY_BOOK) ||
3763 (tv == TV_NATURE_BOOK) ||
3764 (tv == TV_CHAOS_BOOK) ||
3765 (tv == TV_DEATH_BOOK) ||
3766 (tv == TV_TRUMP_BOOK) ||
3767 (tv == TV_ARCANE_BOOK) ||
3768 (tv == TV_ENCHANT_BOOK) ||
3769 (tv == TV_DAEMON_BOOK) ||
3770 (tv == TV_CRUSADE_BOOK) ||
3771 (tv == TV_MUSIC_BOOK) ||
3772 (tv == TV_HISSATSU_BOOK) ||
3773 ((o_ptr->to_a > 0) || (o_ptr->to_h + o_ptr->to_d > 0)))
3775 /* Memorize the item */
3776 o_ptr->marked = TRUE;
3790 msg_print("ËâË¡¤Î¥¢¥¤¥Æ¥à¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3792 msg_print("You sense the presence of magic objects!");
3803 * Detect all "normal" monsters on the current panel
3805 bool detect_monsters_normal(int range)
3811 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3814 for (i = 1; i < m_max; i++)
3816 monster_type *m_ptr = &m_list[i];
3817 monster_race *r_ptr = &r_info[m_ptr->r_idx];
3819 /* Skip dead monsters */
3820 if (!m_ptr->r_idx) continue;
3826 /* Only detect nearby monsters */
3827 if (distance(py, px, y, x) > range) continue;
3829 /* Detect all non-invisible monsters */
3830 if ((!(r_ptr->flags2 & RF2_INVISIBLE)) ||
3831 p_ptr->see_inv || p_ptr->tim_invis)
3833 /* Repair visibility later */
3834 repair_monsters = TRUE;
3836 /* Hack -- Detect monster */
3837 m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
3839 /* Update the monster */
3840 update_mon(i, FALSE);
3847 if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT+3)) flag = FALSE;
3852 /* Describe result */
3854 msg_print("¥â¥ó¥¹¥¿¡¼¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3856 msg_print("You sense the presence of monsters!");
3867 * Detect all "invisible" monsters around the player
3869 bool detect_monsters_invis(int range)
3874 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3877 for (i = 1; i < m_max; i++)
3879 monster_type *m_ptr = &m_list[i];
3880 monster_race *r_ptr = &r_info[m_ptr->r_idx];
3882 /* Skip dead monsters */
3883 if (!m_ptr->r_idx) continue;
3889 /* Only detect nearby monsters */
3890 if (distance(py, px, y, x) > range) continue;
3892 /* Detect invisible monsters */
3893 if (r_ptr->flags2 & RF2_INVISIBLE)
3895 /* Update monster recall window */
3896 if (p_ptr->monster_race_idx == m_ptr->r_idx)
3899 p_ptr->window |= (PW_MONSTER);
3902 /* Repair visibility later */
3903 repair_monsters = TRUE;
3905 /* Hack -- Detect monster */
3906 m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
3908 /* Update the monster */
3909 update_mon(i, FALSE);
3916 if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT+3)) flag = FALSE;
3921 /* Describe result */
3923 msg_print("Æ©ÌÀ¤ÊÀ¸Êª¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3925 msg_print("You sense the presence of invisible creatures!");
3937 * Detect all "evil" monsters on current panel
3939 bool detect_monsters_evil(int range)
3944 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3947 for (i = 1; i < m_max; i++)
3949 monster_type *m_ptr = &m_list[i];
3950 monster_race *r_ptr = &r_info[m_ptr->r_idx];
3952 /* Skip dead monsters */
3953 if (!m_ptr->r_idx) continue;
3959 /* Only detect nearby monsters */
3960 if (distance(py, px, y, x) > range) continue;
3962 /* Detect evil monsters */
3963 if (r_ptr->flags3 & RF3_EVIL)
3965 /* Take note that they are evil */
3966 r_ptr->r_flags3 |= (RF3_EVIL);
3968 /* Update monster recall window */
3969 if (p_ptr->monster_race_idx == m_ptr->r_idx)
3972 p_ptr->window |= (PW_MONSTER);
3975 /* Repair visibility later */
3976 repair_monsters = TRUE;
3978 /* Hack -- Detect monster */
3979 m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
3981 /* Update the monster */
3982 update_mon(i, FALSE);
3992 /* Describe result */
3994 msg_print("¼Ù°¤Ê¤ëÀ¸Êª¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3996 msg_print("You sense the presence of evil creatures!");
4009 * Detect all "nonliving", "undead" or "demonic" monsters on current panel
4011 bool detect_monsters_nonliving(int range)
4016 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
4019 for (i = 1; i < m_max; i++)
4021 monster_type *m_ptr = &m_list[i];
4022 monster_race *r_ptr = &r_info[m_ptr->r_idx];
4024 /* Skip dead monsters */
4025 if (!m_ptr->r_idx) continue;
4031 /* Only detect nearby monsters */
4032 if (distance(py, px, y, x) > range) continue;
4034 /* Detect non-living monsters */
4035 if (!monster_living(r_ptr))
4037 /* Update monster recall window */
4038 if (p_ptr->monster_race_idx == m_ptr->r_idx)
4041 p_ptr->window |= (PW_MONSTER);
4044 /* Repair visibility later */
4045 repair_monsters = TRUE;
4047 /* Hack -- Detect monster */
4048 m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
4050 /* Update the monster */
4051 update_mon(i, FALSE);
4061 /* Describe result */
4063 msg_print("¼«Á³¤Ç¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤Î¸ºß¤ò´¶¤¸¤¿¡ª");
4065 msg_print("You sense the presence of unnatural beings!");
4076 * Detect all monsters it has mind on current panel
4078 bool detect_monsters_mind(int range)
4083 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
4086 for (i = 1; i < m_max; i++)
4088 monster_type *m_ptr = &m_list[i];
4089 monster_race *r_ptr = &r_info[m_ptr->r_idx];
4091 /* Skip dead monsters */
4092 if (!m_ptr->r_idx) continue;
4098 /* Only detect nearby monsters */
4099 if (distance(py, px, y, x) > range) continue;
4101 /* Detect non-living monsters */
4102 if (!(r_ptr->flags2 & RF2_EMPTY_MIND))
4104 /* Update monster recall window */
4105 if (p_ptr->monster_race_idx == m_ptr->r_idx)
4108 p_ptr->window |= (PW_MONSTER);
4111 /* Repair visibility later */
4112 repair_monsters = TRUE;
4114 /* Hack -- Detect monster */
4115 m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
4117 /* Update the monster */
4118 update_mon(i, FALSE);
4128 /* Describe result */
4130 msg_print("»¦µ¤¤ò´¶¤¸¤È¤Ã¤¿¡ª");
4132 msg_print("You sense the presence of someone's mind!");
4143 * Detect all (string) monsters on current panel
4145 bool detect_monsters_string(int range, cptr Match)
4150 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
4153 for (i = 1; i < m_max; i++)
4155 monster_type *m_ptr = &m_list[i];
4156 monster_race *r_ptr = &r_info[m_ptr->r_idx];
4158 /* Skip dead monsters */
4159 if (!m_ptr->r_idx) continue;
4165 /* Only detect nearby monsters */
4166 if (distance(py, px, y, x) > range) continue;
4168 /* Detect monsters with the same symbol */
4169 if (strchr(Match, r_ptr->d_char))
4171 /* Update monster recall window */
4172 if (p_ptr->monster_race_idx == m_ptr->r_idx)
4175 p_ptr->window |= (PW_MONSTER);
4178 /* Repair visibility later */
4179 repair_monsters = TRUE;
4181 /* Hack -- Detect monster */
4182 m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
4184 /* Update the monster */
4185 update_mon(i, FALSE);
4192 if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT+3)) flag = FALSE;
4197 /* Describe result */
4199 msg_print("¥â¥ó¥¹¥¿¡¼¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
4201 msg_print("You sense the presence of monsters!");
4212 * A "generic" detect monsters routine, tagged to flags3
4214 bool detect_monsters_xxx(int range, u32b match_flag)
4219 cptr desc_monsters = "ÊѤʥâ¥ó¥¹¥¿¡¼";
4221 cptr desc_monsters = "weird monsters";
4224 if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
4227 for (i = 1; i < m_max; i++)
4229 monster_type *m_ptr = &m_list[i];
4230 monster_race *r_ptr = &r_info[m_ptr->r_idx];
4232 /* Skip dead monsters */
4233 if (!m_ptr->r_idx) continue;
4239 /* Only detect nearby monsters */
4240 if (distance(py, px, y, x) > range) continue;
4242 /* Detect evil monsters */
4243 if (r_ptr->flags3 & (match_flag))
4245 /* Take note that they are something */
4246 r_ptr->r_flags3 |= (match_flag);
4248 /* Update monster recall window */
4249 if (p_ptr->monster_race_idx == m_ptr->r_idx)
4252 p_ptr->window |= (PW_MONSTER);
4255 /* Repair visibility later */
4256 repair_monsters = TRUE;
4258 /* Hack -- Detect monster */
4259 m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
4261 /* Update the monster */
4262 update_mon(i, FALSE);
4276 desc_monsters = "¥Ç¡¼¥â¥ó";
4278 desc_monsters = "demons";
4284 desc_monsters = "¥¢¥ó¥Ç¥Ã¥É";
4286 desc_monsters = "the undead";
4292 /* Describe result */
4294 msg_format("%s¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª", desc_monsters);
4296 msg_format("You sense the presence of %s!", desc_monsters);
4310 bool detect_all(int range)
4312 bool detect = FALSE;
4314 /* Detect everything */
4315 if (detect_traps(range)) detect = TRUE;
4316 if (detect_doors(range)) detect = TRUE;
4317 if (detect_stairs(range)) detect = TRUE;
4318 if (detect_treasure(range)) detect = TRUE;
4319 if (detect_objects_gold(range)) detect = TRUE;
4320 if (detect_objects_normal(range)) detect = TRUE;
4321 if (detect_monsters_invis(range)) detect = TRUE;
4322 if (detect_monsters_normal(range)) detect = TRUE;
4330 * Apply a "project()" directly to all viewable monsters
4332 * Note that affected monsters are NOT auto-tracked by this usage.
4334 * To avoid misbehavior when monster deaths have side-effects,
4335 * this is done in two passes. -- JDL
4337 bool project_hack(int typ, int dam)
4340 int flg = PROJECT_JUMP | PROJECT_KILL | PROJECT_HIDE | PROJECT_NO_REF;
4341 bool obvious = FALSE;
4344 /* Mark all (nearby) monsters */
4345 for (i = 1; i < m_max; i++)
4347 monster_type *m_ptr = &m_list[i];
4349 /* Paranoia -- Skip dead monsters */
4350 if (!m_ptr->r_idx) continue;
4356 /* Require line of sight */
4357 if (!player_has_los_bold(y, x)) continue;
4359 /* Mark the monster */
4360 m_ptr->mflag |= (MFLAG_TEMP);
4363 /* Affect all marked monsters */
4364 for (i = 1; i < m_max; i++)
4366 monster_type *m_ptr = &m_list[i];
4368 /* Skip unmarked monsters */
4369 if (!(m_ptr->mflag & (MFLAG_TEMP))) continue;
4372 m_ptr->mflag &= ~(MFLAG_TEMP);
4378 /* Jump directly to the target monster */
4379 if (project(0, 0, y, x, dam, typ, flg, -1)) obvious = TRUE;
4390 bool speed_monsters(void)
4392 return (project_hack(GF_OLD_SPEED, p_ptr->lev));
4398 bool slow_monsters(void)
4400 return (project_hack(GF_OLD_SLOW, p_ptr->lev));
4406 bool sleep_monsters(void)
4408 return (project_hack(GF_OLD_SLEEP, p_ptr->lev));
4413 * Banish evil monsters
4415 bool banish_evil(int dist)
4417 return (project_hack(GF_AWAY_EVIL, dist));
4424 bool turn_undead(void)
4426 bool tester = (project_hack(GF_TURN_UNDEAD, p_ptr->lev));
4428 chg_virtue(V_UNLIFE, -1);
4434 * Dispel undead monsters
4436 bool dispel_undead(int dam)
4438 bool tester = (project_hack(GF_DISP_UNDEAD, dam));
4440 chg_virtue(V_UNLIFE, -2);
4445 * Dispel evil monsters
4447 bool dispel_evil(int dam)
4449 return (project_hack(GF_DISP_EVIL, dam));
4453 * Dispel good monsters
4455 bool dispel_good(int dam)
4457 return (project_hack(GF_DISP_GOOD, dam));
4461 * Dispel all monsters
4463 bool dispel_monsters(int dam)
4465 return (project_hack(GF_DISP_ALL, dam));
4469 * Dispel 'living' monsters
4471 bool dispel_living(int dam)
4473 return (project_hack(GF_DISP_LIVING, dam));
4479 bool dispel_demons(int dam)
4481 return (project_hack(GF_DISP_DEMON, dam));
4490 return (project_hack(GF_CRUSADE, p_ptr->lev*4));
4495 * Wake up all monsters, and speed up "los" monsters.
4497 void aggravate_monsters(int who)
4504 /* Aggravate everyone nearby */
4505 for (i = 1; i < m_max; i++)
4507 monster_type *m_ptr = &m_list[i];
4508 /* monster_race *r_ptr = &r_info[m_ptr->r_idx]; */
4510 /* Paranoia -- Skip dead monsters */
4511 if (!m_ptr->r_idx) continue;
4513 /* Skip aggravating monster (or player) */
4514 if (i == who) continue;
4516 /* Wake up nearby sleeping monsters */
4517 if (m_ptr->cdis < MAX_SIGHT * 2)
4526 if (!is_pet(m_ptr)) m_ptr->mflag2 |= MFLAG_NOPET;
4529 /* Speed up monsters in line of sight */
4530 if (player_has_los_bold(m_ptr->fy, m_ptr->fx))
4534 m_ptr->fast = MIN(200, m_ptr->fast + 100);
4542 if (speed) msg_print("ÉÕ¶á¤Ç²¿¤«¤¬ÆÍÇ¡¶½Ê³¤·¤¿¤è¤¦¤Ê´¶¤¸¤ò¼õ¤±¤¿¡ª");
4543 else if (sleep) msg_print("²¿¤«¤¬ÆÍÇ¡¶½Ê³¤·¤¿¤è¤¦¤ÊÁû¡¹¤·¤¤²»¤¬±ó¤¯¤Ëʹ¤³¤¨¤¿¡ª");
4545 if (speed) msg_print("You feel a sudden stirring nearby!");
4546 else if (sleep) msg_print("You hear a sudden stirring in the distance!");
4548 if (p_ptr->riding) p_ptr->update |= PU_BONUS;
4554 * Delete all non-unique/non-quest monsters of a given "type" from the level
4556 bool symbol_genocide(int power, int player_cast)
4560 bool result = FALSE;
4561 int msec = delay_factor * delay_factor * delay_factor;
4563 /* Prevent genocide in quest levels */
4564 if (p_ptr->inside_quest && !random_quest_number(dun_level))
4569 /* Mega-Hack -- Get a monster symbol */
4571 while(!get_com("¤É¤Î¼ïÎà(ʸ»ú)¤Î¥â¥ó¥¹¥¿¡¼¤òËõ»¦¤·¤Þ¤¹¤«: ", &typ, FALSE));
4573 while(!get_com("Choose a monster race (by symbol) to genocide: ", &typ, FALSE));
4577 /* Delete the monsters of that "type" */
4578 for (i = 1; i < m_max; i++)
4580 monster_type *m_ptr = &m_list[i];
4581 monster_race *r_ptr = &r_info[m_ptr->r_idx];
4585 /* Paranoia -- Skip dead monsters */
4586 if (!m_ptr->r_idx) continue;
4588 /* Skip "wrong" monsters */
4589 if (r_ptr->d_char != typ) continue;
4591 if (is_pet(m_ptr) && !player_cast) continue;
4593 /* Hack -- Skip Unique Monsters */
4594 if (r_ptr->flags1 & (RF1_UNIQUE)) angry = TRUE;
4596 /* Hack -- Skip Quest Monsters */
4597 else if (r_ptr->flags1 & RF1_QUESTOR) angry = TRUE;
4599 else if (r_ptr->flags7 & RF7_UNIQUE2) angry = TRUE;
4601 else if (i == p_ptr->riding) angry = TRUE;
4603 else if (player_cast && (r_ptr->level > randint0(power))) angry = TRUE;
4605 else if (player_cast && (m_ptr->mflag2 & MFLAG_NOGENO)) angry = TRUE;
4607 /* Delete the monster */
4608 else delete_monster_idx(i);
4610 if (angry && player_cast)
4612 monster_desc(m_name, m_ptr, 0);
4613 if (m_ptr->ml && !p_ptr->blind)
4616 msg_format("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", m_name);
4618 msg_format("%^s is unaffected.", m_name);
4624 if (m_ptr->ml && !p_ptr->blind)
4627 msg_format("%^s¤¬Ìܤò³Ð¤Þ¤·¤¿¡£", m_name);
4629 msg_format("%^s wakes up.", m_name);
4633 if (is_friendly(m_ptr) && !is_pet(m_ptr))
4635 if (m_ptr->ml && !p_ptr->blind)
4638 msg_format("%s¤ÏÅܤä¿¡ª", m_name);
4640 msg_format("%^s gets angry!", m_name);
4645 if (one_in_(13)) m_ptr->mflag2 |= MFLAG_NOGENO;
4652 take_hit(DAMAGE_GENO, randint1(4), "Ëõ»¦¤Î¼öʸ¤ò¾§¤¨¤¿ÈèÏ«", -1);
4654 take_hit(DAMAGE_GENO, randint1(4), "the strain of casting Genocide", -1);
4659 /* Visual feedback */
4660 move_cursor_relative(py, px);
4663 p_ptr->redraw |= (PR_HP);
4666 p_ptr->window |= (PW_PLAYER);
4675 Term_xtra(TERM_XTRA_DELAY, msec);
4682 chg_virtue(V_VITALITY, -2);
4683 chg_virtue(V_CHANCE, -1);
4691 * Delete all nearby (non-unique) monsters
4693 bool mass_genocide(int power, int player_cast)
4696 bool result = FALSE;
4697 int msec = delay_factor * delay_factor * delay_factor;
4700 /* Prevent mass genocide in quest levels */
4701 if (p_ptr->inside_quest && !random_quest_number(dun_level))
4706 /* Delete the (nearby) monsters */
4707 for (i = 1; i < m_max; i++)
4709 monster_type *m_ptr = &m_list[i];
4710 monster_race *r_ptr = &r_info[m_ptr->r_idx];
4714 /* Paranoia -- Skip dead monsters */
4715 if (!m_ptr->r_idx) continue;
4717 /* Skip distant monsters */
4718 if (m_ptr->cdis > MAX_SIGHT) continue;
4720 if (is_pet(m_ptr) && !player_cast) continue;
4722 /* Hack -- Skip unique monsters */
4723 if (r_ptr->flags1 & (RF1_UNIQUE)) angry = TRUE;
4725 /* Hack -- Skip Quest Monsters */
4726 else if (r_ptr->flags1 & RF1_QUESTOR) angry = TRUE;
4728 else if (r_ptr->flags7 & RF7_UNIQUE2) angry = TRUE;
4730 else if (i == p_ptr->riding) angry = TRUE;
4732 else if (player_cast && (r_ptr->level > randint0(power))) angry = TRUE;
4734 else if (player_cast && (m_ptr->mflag2 & MFLAG_NOGENO)) angry = TRUE;
4736 /* Delete the monster */
4737 else delete_monster_idx(i);
4739 if (angry && player_cast)
4741 monster_desc(m_name, m_ptr, 0);
4742 if (m_ptr->ml && !p_ptr->blind)
4745 msg_format("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", m_name);
4747 msg_format("%^s is unaffected.", m_name);
4753 if (m_ptr->ml && !p_ptr->blind)
4756 msg_format("%^s¤¬Ìܤò³Ð¤Þ¤·¤¿¡£", m_name);
4758 msg_format("%^s wakes up.", m_name);
4762 if (is_friendly(m_ptr) && !is_pet(m_ptr))
4764 if (m_ptr->ml && !p_ptr->blind)
4767 msg_format("%s¤ÏÅܤä¿¡ª", m_name);
4769 msg_format("%^s gets angry!", m_name);
4774 if (one_in_(13)) m_ptr->mflag2 |= MFLAG_NOGENO;
4779 /* Hack -- visual feedback */
4781 take_hit(DAMAGE_GENO, randint1(3), "¼þÊÕËõ»¦¤Î¼öʸ¤ò¾§¤¨¤¿ÈèÏ«", -1);
4783 take_hit(DAMAGE_GENO, randint1(3), "the strain of casting Mass Genocide", -1);
4788 move_cursor_relative(py, px);
4791 p_ptr->redraw |= (PR_HP);
4794 p_ptr->window |= (PW_PLAYER);
4803 Term_xtra(TERM_XTRA_DELAY, msec);
4811 chg_virtue(V_VITALITY, -2);
4812 chg_virtue(V_CHANCE, -1);
4821 * Delete all nearby (non-unique) undead
4823 bool mass_genocide_undead(int power, int player_cast)
4826 bool result = FALSE;
4827 int msec = delay_factor * delay_factor * delay_factor;
4830 /* Prevent mass genocide in quest levels */
4831 if (p_ptr->inside_quest && !random_quest_number(dun_level))
4836 /* Delete the (nearby) monsters */
4837 for (i = 1; i < m_max; i++)
4839 monster_type *m_ptr = &m_list[i];
4840 monster_race *r_ptr = &r_info[m_ptr->r_idx];
4844 /* Paranoia -- Skip dead monsters */
4845 if (!m_ptr->r_idx) continue;
4847 if (!(r_ptr->flags3 & RF3_UNDEAD)) continue;
4849 /* Skip distant monsters */
4850 if (m_ptr->cdis > MAX_SIGHT) continue;
4852 if (is_pet(m_ptr) && !player_cast) continue;
4854 /* Hack -- Skip unique monsters */
4855 if (r_ptr->flags1 & (RF1_UNIQUE)) angry = TRUE;
4857 /* Hack -- Skip Quest Monsters */
4858 else if (r_ptr->flags1 & RF1_QUESTOR) angry = TRUE;
4860 else if (r_ptr->flags7 & RF7_UNIQUE2) angry = TRUE;
4862 else if (i == p_ptr->riding) angry = TRUE;
4864 else if (player_cast && (r_ptr->level > randint0(power))) angry = TRUE;
4866 else if (player_cast && (m_ptr->mflag2 & MFLAG_NOGENO)) angry = TRUE;
4868 /* Delete the monster */
4869 else delete_monster_idx(i);
4871 if (angry && player_cast)
4873 monster_desc(m_name, m_ptr, 0);
4874 if (m_ptr->ml && !p_ptr->blind)
4877 msg_format("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", m_name);
4879 msg_format("%^s is unaffected.", m_name);
4885 if (m_ptr->ml && !p_ptr->blind)
4888 msg_format("%^s¤¬Ìܤò³Ð¤Þ¤·¤¿¡£", m_name);
4890 msg_format("%^s wakes up.", m_name);
4894 if (is_friendly(m_ptr) && !is_pet(m_ptr))
4896 if (m_ptr->ml && !p_ptr->blind)
4899 msg_format("%s¤ÏÅܤä¿¡ª", m_name);
4901 msg_format("%^s gets angry!", m_name);
4906 if (one_in_(13)) m_ptr->mflag2 |= MFLAG_NOGENO;
4911 /* Hack -- visual feedback */
4913 take_hit(DAMAGE_GENO, randint1(3), "¥¢¥ó¥Ç¥Ã¥É¾ÃÌǤμöʸ¤ò¾§¤¨¤¿ÈèÏ«", -1);
4915 take_hit(DAMAGE_GENO, randint1(3), "the strain of casting Mass Genocide", -1);
4920 move_cursor_relative(py, px);
4923 p_ptr->redraw |= (PR_HP);
4926 p_ptr->window |= (PW_PLAYER);
4935 Term_xtra(TERM_XTRA_DELAY, msec);
4943 chg_virtue(V_UNLIFE, -2);
4944 chg_virtue(V_CHANCE, -1);
4953 * Probe nearby monsters
4968 /* Probe all (nearby) monsters */
4969 for (i = 1; i < m_max; i++)
4971 monster_type *m_ptr = &m_list[i];
4972 monster_race *r_ptr = &r_info[m_ptr->r_idx];
4974 /* Paranoia -- Skip dead monsters */
4975 if (!m_ptr->r_idx) continue;
4977 /* Require line of sight */
4978 if (!player_has_los_bold(m_ptr->fy, m_ptr->fx)) continue;
4980 /* Probe visible monsters */
4985 /* Start the message */
4987 if (!probe) {msg_print("Ä´ººÃæ...");msg_print(NULL);}
4989 if (!probe) {msg_print("Probing...");msg_print(NULL);}
4992 if (m_ptr->ap_r_idx != m_ptr->r_idx)
4994 if (m_ptr->mflag2 & MFLAG_KAGE)
4995 m_ptr->mflag2 &= ~(MFLAG_KAGE);
4997 m_ptr->ap_r_idx = m_ptr->r_idx;
4998 lite_spot(m_ptr->fy, m_ptr->fx);
5000 /* Get "the monster" or "something" */
5001 monster_desc(m_name, m_ptr, 0x204);
5003 speed = m_ptr->mspeed - 110;
5004 if(m_ptr->fast) speed += 10;
5005 if(m_ptr->slow) speed -= 10;
5007 /* Get the monster's alignment */
5009 if ((r_ptr->flags3 & RF3_EVIL) && (r_ptr->flags3 & RF3_GOOD)) align = "籡";
5010 else if (r_ptr->flags3 & RF3_EVIL) align = "¼Ù°";
5011 else if (r_ptr->flags3 & RF3_GOOD) align = "Á±ÎÉ";
5012 else if ((m_ptr->sub_align & SUB_ALIGN_EVIL) && (m_ptr->sub_align & SUB_ALIGN_GOOD)) align = "ÃæΩ(Á±°)";
5013 else if (m_ptr->sub_align & SUB_ALIGN_EVIL) align = "ÃæΩ(¼Ù°)";
5014 else if (m_ptr->sub_align & SUB_ALIGN_GOOD) align = "ÃæΩ(Á±ÎÉ)";
5015 else align = "ÃæΩ";
5017 if ((r_ptr->flags3 & RF3_EVIL) && (r_ptr->flags3 & RF3_GOOD)) align = "good&evil";
5018 else if (r_ptr->flags3 & RF3_EVIL) align = "evil";
5019 else if (r_ptr->flags3 & RF3_GOOD) align = "good";
5020 else if ((m_ptr->sub_align & SUB_ALIGN_EVIL) && (m_ptr->sub_align & SUB_ALIGN_GOOD)) align = "neutral(good&evil)";
5021 else if (m_ptr->sub_align & SUB_ALIGN_EVIL) align = "neutral(evil)";
5022 else if (m_ptr->sub_align & SUB_ALIGN_GOOD) align = "neutral(good)";
5023 else align = "neutral";
5026 /* Describe the monster */
5028 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);
5030 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);
5032 if (r_ptr->next_r_idx)
5034 strcat(buf, format("%d/%d ", m_ptr->exp, r_ptr->next_exp));
5038 strcat(buf, "xxx ");
5042 if (m_ptr->csleep) strcat(buf,"¿ç̲ ");
5043 if (m_ptr->stunned) strcat(buf,"ۯ۰ ");
5044 if (m_ptr->monfear) strcat(buf,"¶²ÉÝ ");
5045 if (m_ptr->confused) strcat(buf,"º®Íð ");
5046 if (m_ptr->invulner) strcat(buf,"̵Ũ ");
5048 if (m_ptr->csleep) strcat(buf,"sleeping ");
5049 if (m_ptr->stunned) strcat(buf,"stunned ");
5050 if (m_ptr->monfear) strcat(buf,"scared ");
5051 if (m_ptr->confused) strcat(buf,"confused ");
5052 if (m_ptr->invulner) strcat(buf,"invulnerable ");
5054 buf[strlen(buf)-1] = '\0';
5057 /* HACK : Add the line to message buffer */
5059 p_ptr->window |= (PW_MESSAGE);
5062 /* Learn all of the non-spell, non-treasure flags */
5065 if (m_ptr->ml) move_cursor_relative(m_ptr->fy, m_ptr->fx);
5068 Term_erase(0, 0, 255);
5082 chg_virtue(V_KNOWLEDGE, 1);
5085 msg_print("¤³¤ì¤ÇÁ´Éô¤Ç¤¹¡£");
5087 msg_print("That's all.");
5099 * The spell of destruction
5101 * This spell "deletes" monsters (instead of "killing" them).
5103 * Later we may use one function for both "destruction" and
5104 * "earthquake" by using the "full" to select "destruction".
5106 bool destroy_area(int y1, int x1, int r, int full)
5113 /* Prevent destruction of quest levels and town */
5114 if ((p_ptr->inside_quest && (p_ptr->inside_quest < MIN_RANDOM_QUEST)) || !dun_level)
5119 /* Big area of affect */
5120 for (y = (y1 - r); y <= (y1 + r); y++)
5122 for (x = (x1 - r); x <= (x1 + r); x++)
5124 monster_type *m_ptr;
5125 monster_race *r_ptr;
5127 /* Skip illegal grids */
5128 if (!in_bounds(y, x)) continue;
5130 /* Extract the distance */
5131 k = distance(y1, x1, y, x);
5133 /* Stay in the circle of death */
5134 if (k > r) continue;
5136 /* Access the grid */
5137 c_ptr = &cave[y][x];
5138 m_ptr = &m_list[c_ptr->m_idx];
5139 r_ptr = &r_info[m_ptr->r_idx];
5141 /* Lose room and vault */
5142 c_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY | CAVE_TRAP | CAVE_UNSAFE);
5144 /* Lose light and knowledge */
5145 c_ptr->info &= ~(CAVE_MARK | CAVE_GLOW);
5147 /* Hack -- Notice player affect */
5148 if ((x == px) && (y == py))
5150 /* Hurt the player later */
5153 /* Do not hurt this grid */
5157 /* Hack -- Skip the epicenter */
5158 if ((y == y1) && (x == x1)) continue;
5161 if ((r_ptr->flags1 & RF1_QUESTOR) || (r_ptr->flags7 & RF7_GUARDIAN) || ((m_ptr->mflag2 & MFLAG_CHAMELEON) && (r_ptr->flags1 & RF1_UNIQUE)))
5163 if ((r_ptr->flags1 & RF1_QUESTOR))
5166 /* Heal the monster */
5167 m_list[c_ptr->m_idx].hp = m_list[c_ptr->m_idx].maxhp;
5169 /* Try to teleport away quest monsters */
5170 if (!teleport_away(c_ptr->m_idx, (r * 2) + 1, TRUE)) continue;
5176 if (record_named_pet && is_pet(&m_list[c_ptr->m_idx]) && m_list[c_ptr->m_idx].nickname)
5180 monster_desc(m_name, &m_list[c_ptr->m_idx], 0x08);
5181 do_cmd_write_nikki(NIKKI_NAMED_PET, 6, m_name);
5184 /* Delete the monster (if any) */
5185 delete_monster(y, x);
5190 s16b this_o_idx, next_o_idx = 0;
5192 /* Scan all objects in the grid */
5193 for (this_o_idx = c_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx)
5197 /* Acquire object */
5198 o_ptr = &o_list[this_o_idx];
5200 /* Acquire next object */
5201 next_o_idx = o_ptr->next_o_idx;
5203 /* Hack -- Preserve unknown artifacts */
5204 if (artifact_p(o_ptr) && !object_known_p(o_ptr))
5206 /* Mega-Hack -- Preserve the artifact */
5207 a_info[o_ptr->name1].cur_num = 0;
5211 delete_object(y, x);
5213 /* Destroy "valid" grids */
5214 if (!cave_perma_bold(y, x))
5216 /* Wall (or floor) type */
5222 /* Create granite wall */
5223 c_ptr->feat = FEAT_WALL_EXTRA;
5229 /* Create quartz vein */
5230 c_ptr->feat = FEAT_QUARTZ;
5236 /* Create magma vein */
5237 c_ptr->feat = FEAT_MAGMA;
5244 c_ptr->feat = floor_type[randint0(100)];
5251 /* Hack -- Affect player */
5256 msg_print("dz¤¨¤ë¤è¤¦¤ÊÁ®¸÷¤¬È¯À¸¤·¤¿¡ª");
5258 msg_print("There is a searing blast of light!");
5262 /* Blind the player */
5263 if (!p_ptr->resist_blind && !p_ptr->resist_lite)
5266 (void)set_blind(p_ptr->blind + 10 + randint1(10));
5272 /* Mega-Hack -- Forget the view and lite */
5273 p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE);
5276 p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MON_LITE);
5278 /* Update the monsters */
5279 p_ptr->update |= (PU_MONSTERS);
5282 p_ptr->redraw |= (PR_MAP);
5285 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
5293 * Induce an "earthquake" of the given radius at the given location.
5295 * This will turn some walls into floors and some floors into walls.
5297 * The player will take damage and "jump" into a safe grid if possible,
5298 * otherwise, he will "tunnel" through the rubble instantaneously.
5300 * Monsters will take damage, and "jump" into a safe grid if possible,
5301 * otherwise they will be "buried" in the rubble, disappearing from
5302 * the level in the same way that they do when genocided.
5304 * Note that thus the player and monsters (except eaters of walls and
5305 * passers through walls) will never occupy the same grid as a wall.
5306 * Note that as of now (2.7.8) no monster may occupy a "wall" grid, even
5307 * for a single turn, unless that monster can pass_walls or kill_walls.
5308 * This has allowed massive simplification of the "monster" code.
5310 bool earthquake(int cy, int cx, int r)
5312 int i, t, y, x, yy, xx, dy, dx, oy, ox;
5314 int sn = 0, sy = 0, sx = 0;
5320 /* Prevent destruction of quest levels and town */
5321 if ((p_ptr->inside_quest && (p_ptr->inside_quest < MIN_RANDOM_QUEST)) || !dun_level)
5326 /* Paranoia -- Enforce maximum range */
5329 /* Clear the "maximal blast" area */
5330 for (y = 0; y < 32; y++)
5332 for (x = 0; x < 32; x++)
5338 /* Check around the epicenter */
5339 for (dy = -r; dy <= r; dy++)
5341 for (dx = -r; dx <= r; dx++)
5343 /* Extract the location */
5347 /* Skip illegal grids */
5348 if (!in_bounds(yy, xx)) continue;
5350 /* Skip distant grids */
5351 if (distance(cy, cx, yy, xx) > r) continue;
5353 /* Access the grid */
5354 c_ptr = &cave[yy][xx];
5356 /* Lose room and vault */
5357 c_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY | CAVE_TRAP | CAVE_UNSAFE);
5359 /* Lose light and knowledge */
5360 c_ptr->info &= ~(CAVE_GLOW | CAVE_MARK);
5362 /* Skip the epicenter */
5363 if (!dx && !dy) continue;
5365 /* Skip most grids */
5366 if (randint0(100) < 85) continue;
5368 /* Damage this grid */
5369 map[16+yy-cy][16+xx-cx] = TRUE;
5371 /* Hack -- Take note of player damage */
5372 if ((yy == py) && (xx == px)) hurt = TRUE;
5376 /* First, affect the player (if necessary) */
5377 if (hurt && !(p_ptr->prace == RACE_SPECTRE) && !(p_ptr->wraith_form) && !(p_ptr->kabenuke))
5379 /* Check around the player */
5380 for (i = 0; i < 8; i++)
5382 /* Access the location */
5383 y = py + ddy_ddd[i];
5384 x = px + ddx_ddd[i];
5386 /* Skip non-empty grids */
5387 if (!cave_empty_bold(y, x)) continue;
5389 /* Important -- Skip "quake" grids */
5390 if (map[16+y-cy][16+x-cx]) continue;
5392 if (cave[y][x].m_idx) continue;
5394 /* Count "safe" grids */
5397 /* Randomize choice */
5398 if (randint0(sn) > 0) continue;
5400 /* Save the safe location */
5404 /* Random message */
5405 switch (randint1(3))
5410 msg_print("¥À¥ó¥¸¥ç¥ó¤ÎÊɤ¬Êø¤ì¤¿¡ª");
5412 msg_print("The cave ceiling collapses!");
5420 msg_print("¥À¥ó¥¸¥ç¥ó¤Î¾²¤¬ÉÔ¼«Á³¤Ë¤Í¤¸¶Ê¤¬¤Ã¤¿¡ª");
5422 msg_print("The cave floor twists in an unnatural way!");
5430 msg_print("¥À¥ó¥¸¥ç¥ó¤¬Íɤ줿¡ªÊø¤ì¤¿´ä¤¬Æ¬¤Ë¹ß¤Ã¤Æ¤¤¿¡ª");
5432 msg_print("The cave quakes! You are pummeled with debris!");
5439 /* Hurt the player a lot */
5442 /* Message and damage */
5444 msg_print("¤¢¤Ê¤¿¤Ï¤Ò¤É¤¤²ø²æ¤òÉé¤Ã¤¿¡ª");
5446 msg_print("You are severely crushed!");
5452 /* Destroy the grid, and push the player to safety */
5455 /* Calculate results */
5456 switch (randint1(3))
5461 msg_print("¹ß¤êÃí¤°´ä¤ò¤¦¤Þ¤¯Èò¤±¤¿¡ª");
5463 msg_print("You nimbly dodge the blast!");
5472 msg_print("´äÀФ¬¤¢¤Ê¤¿¤Ëľ·â¤·¤¿!");
5474 msg_print("You are bashed by rubble!");
5477 damage = damroll(10, 4);
5478 (void)set_stun(p_ptr->stun + randint1(50));
5484 msg_print("¤¢¤Ê¤¿¤Ï¾²¤ÈÊɤȤδ֤˶´¤Þ¤ì¤Æ¤·¤Þ¤Ã¤¿¡ª");
5486 msg_print("You are crushed between the floor and ceiling!");
5489 damage = damroll(10, 4);
5490 (void)set_stun(p_ptr->stun + randint1(50));
5495 /* Save the old location */
5499 /* Move the player to the safe location */
5506 tmp = cave[py][px].m_idx;
5507 cave[py][px].m_idx = cave[oy][ox].m_idx;
5508 cave[oy][ox].m_idx = tmp;
5509 m_list[p_ptr->riding].fy = py;
5510 m_list[p_ptr->riding].fx = px;
5511 update_mon(cave[py][px].m_idx, TRUE);
5514 /* Redraw the old spot */
5517 /* Redraw the new spot */
5520 /* Check for new panel */
5524 /* Important -- no wall on player */
5525 map[16+py-cy][16+px-cx] = FALSE;
5527 /* Take some damage */
5529 if (damage) take_hit(DAMAGE_ATTACK, damage, "ÃÏ¿Ì", -1);
5531 if (damage) take_hit(DAMAGE_ATTACK, damage, "an earthquake", -1);
5537 /* Examine the quaked region */
5538 for (dy = -r; dy <= r; dy++)
5540 for (dx = -r; dx <= r; dx++)
5542 /* Extract the location */
5546 /* Skip unaffected grids */
5547 if (!map[16+yy-cy][16+xx-cx]) continue;
5549 /* Access the grid */
5550 c_ptr = &cave[yy][xx];
5552 if (c_ptr->m_idx == p_ptr->riding) continue;
5554 /* Process monsters */
5557 monster_type *m_ptr = &m_list[c_ptr->m_idx];
5558 monster_race *r_ptr = &r_info[m_ptr->r_idx];
5560 /* Quest monsters */
5561 if (r_ptr->flags1 & RF1_QUESTOR)
5563 /* No wall on quest monsters */
5564 map[16+yy-cy][16+xx-cx] = FALSE;
5569 /* Most monsters cannot co-exist with rock */
5570 if (!(r_ptr->flags2 & (RF2_KILL_WALL)) &&
5571 !(r_ptr->flags2 & (RF2_PASS_WALL)))
5575 /* Assume not safe */
5578 /* Monster can move to escape the wall */
5579 if (!(r_ptr->flags1 & (RF1_NEVER_MOVE)))
5581 /* Look for safety */
5582 for (i = 0; i < 8; i++)
5584 /* Access the grid */
5585 y = yy + ddy_ddd[i];
5586 x = xx + ddx_ddd[i];
5588 /* Skip non-empty grids */
5589 if (!cave_empty_bold(y, x)) continue;
5591 /* Hack -- no safety on glyph of warding */
5592 if (cave[y][x].feat == FEAT_GLYPH) continue;
5593 if (cave[y][x].feat == FEAT_MINOR_GLYPH) continue;
5595 /* ... nor on the Pattern */
5596 if ((cave[y][x].feat <= FEAT_PATTERN_XTRA2) &&
5597 (cave[y][x].feat >= FEAT_PATTERN_START))
5600 /* Important -- Skip "quake" grids */
5601 if (map[16+y-cy][16+x-cx]) continue;
5603 if (cave[y][x].m_idx) continue;
5604 if ((y == py) && (x == px)) continue;
5606 /* Count "safe" grids */
5609 /* Randomize choice */
5610 if (randint0(sn) > 0) continue;
5612 /* Save the safe grid */
5617 /* Describe the monster */
5618 monster_desc(m_name, m_ptr, 0);
5620 /* Scream in pain */
5622 msg_format("%^s¤Ï¶ìÄˤǵ㤤ï¤á¤¤¤¿¡ª", m_name);
5624 msg_format("%^s wails out in pain!", m_name);
5628 /* Take damage from the quake */
5629 damage = (sn ? damroll(4, 8) : (m_ptr->hp + 1));
5631 /* Monster is certainly awake */
5634 /* Apply damage directly */
5635 m_ptr->hp -= damage;
5637 /* Delete (not kill) "dead" monsters */
5642 msg_format("%^s¤Ï´äÀФËËä¤â¤ì¤Æ¤·¤Þ¤Ã¤¿¡ª", m_name);
5644 msg_format("%^s is embedded in the rock!", m_name);
5649 if (record_named_pet && is_pet(&m_list[c_ptr->m_idx]) && m_list[c_ptr->m_idx].nickname)
5653 monster_desc(m2_name, m_ptr, 0x08);
5654 do_cmd_write_nikki(NIKKI_NAMED_PET, 7, m2_name);
5658 /* Delete the monster */
5659 delete_monster(yy, xx);
5661 /* No longer safe */
5665 /* Hack -- Escape from the rock */
5668 int m_idx = cave[yy][xx].m_idx;
5670 /* Update the new location */
5671 cave[sy][sx].m_idx = m_idx;
5673 /* Update the old location */
5674 cave[yy][xx].m_idx = 0;
5676 /* Move the monster */
5680 /* Update the monster (new location) */
5681 update_mon(m_idx, TRUE);
5683 /* Redraw the old grid */
5686 /* Redraw the new grid */
5695 /* Examine the quaked region */
5696 for (dy = -r; dy <= r; dy++)
5698 for (dx = -r; dx <= r; dx++)
5700 /* Extract the location */
5704 /* Skip unaffected grids */
5705 if (!map[16+yy-cy][16+xx-cx]) continue;
5707 /* Access the cave grid */
5708 c_ptr = &cave[yy][xx];
5710 /* Paranoia -- never affect player */
5711 /* if ((yy == py) && (xx == px)) continue; */
5713 /* Destroy location (if valid) */
5714 if (cave_valid_bold(yy, xx))
5716 bool floor = cave_floor_bold(yy, xx);
5718 /* Delete objects */
5719 delete_object(yy, xx);
5721 /* Wall (or floor) type */
5722 t = (floor ? randint0(100) : 200);
5727 /* Create granite wall */
5728 c_ptr->feat = FEAT_WALL_EXTRA;
5734 /* Create quartz vein */
5735 c_ptr->feat = FEAT_QUARTZ;
5741 /* Create magma vein */
5742 c_ptr->feat = FEAT_MAGMA;
5749 c_ptr->feat = floor_type[randint0(100)];
5756 /* Mega-Hack -- Forget the view and lite */
5757 p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE);
5760 p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MON_LITE);
5762 /* Update the monsters */
5763 p_ptr->update |= (PU_DISTANCE);
5765 /* Update the health bar */
5766 p_ptr->redraw |= (PR_HEALTH | PR_UHEALTH);
5769 p_ptr->redraw |= (PR_MAP);
5772 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
5779 void discharge_minion(void)
5784 for (i = 1; i < m_max; i++)
5786 monster_type *m_ptr = &m_list[i];
5787 if (!m_ptr->r_idx || !is_pet(m_ptr)) continue;
5788 if (m_ptr->nickname) okay = FALSE;
5790 if (!okay || p_ptr->riding)
5793 if (!get_check("ËÜÅö¤ËÁ´¥Ú¥Ã¥È¤òÇúÇˤ·¤Þ¤¹¤«¡©"))
5795 if (!get_check("You will blast all pets. Are you sure? "))
5799 for (i = 1; i < m_max; i++)
5802 monster_type *m_ptr = &m_list[i];
5803 monster_race *r_ptr;
5805 if (!m_ptr->r_idx || !is_pet(m_ptr)) continue;
5806 r_ptr = &r_info[m_ptr->r_idx];
5808 /* Uniques resist discharging */
5809 if (r_ptr->flags1 & RF1_UNIQUE)
5812 monster_desc(m_name, m_ptr, 0x00);
5814 msg_format("%s¤ÏÇúÇˤµ¤ì¤ë¤Î¤ò·ù¤¬¤ê¡¢¾¡¼ê¤Ë¼«Ê¬¤ÎÀ¤³¦¤Ø¤Èµ¢¤Ã¤¿¡£", m_name);
5816 msg_format("%^s resists to be blasted, and run away.", m_name);
5818 delete_monster_idx(i);
5821 dam = m_ptr->hp / 2;
5822 if (dam > 100) dam = (dam-100)/2 + 100;
5823 if (dam > 400) dam = (dam-400)/2 + 400;
5824 if (dam > 800) dam = 800;
5825 project(i, 2+(r_ptr->level/20), m_ptr->fy,
5826 m_ptr->fx, dam, GF_PLASMA,
5827 PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_MONSTER, -1);
5828 delete_monster_idx(i);
5834 * This routine clears the entire "temp" set.
5836 * This routine will Perma-Lite all "temp" grids.
5838 * This routine is used (only) by "lite_room()"
5840 * Dark grids are illuminated.
5842 * Also, process all affected monsters.
5844 * SMART monsters always wake up when illuminated
5845 * NORMAL monsters wake up 1/4 the time when illuminated
5846 * STUPID monsters wake up 1/10 the time when illuminated
5848 static void cave_temp_room_lite(void)
5852 /* Clear them all */
5853 for (i = 0; i < temp_n; i++)
5858 cave_type *c_ptr = &cave[y][x];
5860 /* No longer in the array */
5861 c_ptr->info &= ~(CAVE_TEMP);
5863 /* Update only non-CAVE_GLOW grids */
5864 /* if (c_ptr->info & (CAVE_GLOW)) continue; */
5867 c_ptr->info |= (CAVE_GLOW);
5869 /* Process affected monsters */
5874 monster_type *m_ptr = &m_list[c_ptr->m_idx];
5876 monster_race *r_ptr = &r_info[m_ptr->r_idx];
5878 /* Update the monster */
5879 update_mon(c_ptr->m_idx, FALSE);
5881 /* Stupid monsters rarely wake up */
5882 if (r_ptr->flags2 & (RF2_STUPID)) chance = 10;
5884 /* Smart monsters always wake up */
5885 if (r_ptr->flags2 & (RF2_SMART)) chance = 100;
5887 /* Sometimes monsters wake up */
5888 if (m_ptr->csleep && (randint0(100) < chance))
5893 /* Notice the "waking up" */
5898 /* Acquire the monster name */
5899 monster_desc(m_name, m_ptr, 0);
5901 /* Dump a message */
5903 msg_format("%^s¤¬Ìܤò³Ð¤Þ¤·¤¿¡£", m_name);
5905 msg_format("%^s wakes up.", m_name);
5907 /* Redraw the health bar */
5908 if (p_ptr->health_who == c_ptr->m_idx)
5909 p_ptr->redraw |= (PR_HEALTH);
5929 * This routine clears the entire "temp" set.
5931 * This routine will "darken" all "temp" grids.
5933 * In addition, some of these grids will be "unmarked".
5935 * This routine is used (only) by "unlite_room()"
5937 * Also, process all affected monsters
5939 static void cave_temp_room_unlite(void)
5943 /* Clear them all */
5944 for (i = 0; i < temp_n; i++)
5949 cave_type *c_ptr = &cave[y][x];
5951 /* No longer in the array */
5952 c_ptr->info &= ~(CAVE_TEMP);
5954 /* Darken the grid */
5955 if (!(c_ptr->info & CAVE_IN_MIRROR ))c_ptr->info &= ~(CAVE_GLOW);
5957 /* Hack -- Forget "boring" grids */
5958 if ((c_ptr->feat <= FEAT_INVIS) || (c_ptr->feat == FEAT_DIRT) || (c_ptr->feat == FEAT_GRASS))
5960 /* Forget the grid */
5961 c_ptr->info &= ~(CAVE_MARK);
5967 /* Process affected monsters */
5970 /* Update the monster */
5971 update_mon(c_ptr->m_idx, FALSE);
5985 * Determine how much contiguous open space this grid is next to
5987 static int next_to_open(int cy, int cx)
5996 for (i = 0; i < 16; i++)
5998 y = cy + ddy_cdd[i % 8];
5999 x = cx + ddx_cdd[i % 8];
6001 /* Found a wall, break the length */
6002 if (!cave_floor_bold(y, x))
6004 /* Track best length */
6018 return (MAX(len, blen));
6022 static int next_to_walls_adj(int cy, int cx)
6030 for (i = 0; i < 8; i++)
6032 y = cy + ddy_ddd[i];
6033 x = cx + ddx_ddd[i];
6035 if (!cave_floor_bold(y, x)) c++;
6043 * Aux function -- see below
6045 static void cave_temp_room_aux(int y, int x, bool only_room)
6050 c_ptr = &cave[y][x];
6052 /* Avoid infinite recursion */
6053 if (c_ptr->info & (CAVE_TEMP)) return;
6055 /* Do not "leave" the current room */
6056 if (!(c_ptr->info & (CAVE_ROOM)))
6058 if (only_room) return;
6061 if (!in_bounds(y, x)) return;
6063 /* If a wall, exit */
6064 if (!cave_floor_bold(y, x)) return;
6066 /* Do not exceed the maximum spell range */
6067 if (distance(py, px, y, x) > MAX_RANGE) return;
6069 /* Verify this grid */
6071 * The reason why it is ==6 instead of >5 is that 8 is impossible
6072 * due to the check for cave_bold above.
6073 * 7 lights dead-end corridors (you need to do this for the
6074 * checkboard interesting rooms, so that the boundary is lit
6076 * This leaves only a check for 6 bounding walls!
6078 if ((next_to_walls_adj(y, x) == 6) && (next_to_open(y, x) <= 1)) return;
6081 /* Paranoia -- verify space */
6082 if (temp_n == TEMP_MAX) return;
6084 /* Mark the grid as "seen" */
6085 c_ptr->info |= (CAVE_TEMP);
6087 /* Add it to the "seen" set */
6094 * Aux function -- see below
6096 static void cave_temp_lite_room_aux(int y, int x)
6098 cave_temp_room_aux(y, x, FALSE);
6102 * Aux function -- see below
6104 static void cave_temp_unlite_room_aux(int y, int x)
6106 cave_temp_room_aux(y, x, TRUE);
6113 * Illuminate any room containing the given location.
6115 void lite_room(int y1, int x1)
6119 /* Add the initial grid */
6120 cave_temp_lite_room_aux(y1, x1);
6122 /* While grids are in the queue, add their neighbors */
6123 for (i = 0; i < temp_n; i++)
6125 x = temp_x[i], y = temp_y[i];
6127 /* Walls get lit, but stop light */
6128 if (!cave_floor_bold(y, x)) continue;
6130 /* Spread adjacent */
6131 cave_temp_lite_room_aux(y + 1, x);
6132 cave_temp_lite_room_aux(y - 1, x);
6133 cave_temp_lite_room_aux(y, x + 1);
6134 cave_temp_lite_room_aux(y, x - 1);
6136 /* Spread diagonal */
6137 cave_temp_lite_room_aux(y + 1, x + 1);
6138 cave_temp_lite_room_aux(y - 1, x - 1);
6139 cave_temp_lite_room_aux(y - 1, x + 1);
6140 cave_temp_lite_room_aux(y + 1, x - 1);
6143 /* Now, lite them all up at once */
6144 cave_temp_room_lite();
6149 * Darken all rooms containing the given location
6151 void unlite_room(int y1, int x1)
6155 /* Add the initial grid */
6156 cave_temp_unlite_room_aux(y1, x1);
6158 /* Spread, breadth first */
6159 for (i = 0; i < temp_n; i++)
6161 x = temp_x[i], y = temp_y[i];
6163 /* Walls get dark, but stop darkness */
6164 if (!cave_floor_bold(y, x)) continue;
6166 /* Spread adjacent */
6167 cave_temp_unlite_room_aux(y + 1, x);
6168 cave_temp_unlite_room_aux(y - 1, x);
6169 cave_temp_unlite_room_aux(y, x + 1);
6170 cave_temp_unlite_room_aux(y, x - 1);
6172 /* Spread diagonal */
6173 cave_temp_unlite_room_aux(y + 1, x + 1);
6174 cave_temp_unlite_room_aux(y - 1, x - 1);
6175 cave_temp_unlite_room_aux(y - 1, x + 1);
6176 cave_temp_unlite_room_aux(y + 1, x - 1);
6179 /* Now, darken them all at once */
6180 cave_temp_room_unlite();
6186 * Hack -- call light around the player
6187 * Affect all monsters in the projection radius
6189 bool lite_area(int dam, int rad)
6191 int flg = PROJECT_GRID | PROJECT_KILL;
6193 if (d_info[dungeon_type].flags1 & DF1_DARKNESS)
6196 msg_print("¥À¥ó¥¸¥ç¥ó¤¬¸÷¤òµÛ¼ý¤·¤¿¡£");
6198 msg_print("The darkness of this dungeon absorb your light.");
6203 /* Hack -- Message */
6207 msg_print("Çò¤¤¸÷¤¬ÊÕ¤ê¤òʤ¤Ã¤¿¡£");
6209 msg_print("You are surrounded by a white light.");
6214 /* Hook into the "project()" function */
6215 (void)project(0, rad, py, px, dam, GF_LITE_WEAK, flg, -1);
6217 /* Lite up the room */
6220 if (p_ptr->special_defense & NINJA_S_STEALTH)
6222 set_superstealth(FALSE);
6231 * Hack -- call darkness around the player
6232 * Affect all monsters in the projection radius
6234 bool unlite_area(int dam, int rad)
6236 int flg = PROJECT_GRID | PROJECT_KILL;
6238 /* Hack -- Message */
6242 msg_print("°Å°Ç¤¬ÊÕ¤ê¤òʤ¤Ã¤¿¡£");
6244 msg_print("Darkness surrounds you.");
6249 /* Hook into the "project()" function */
6250 (void)project(0, rad, py, px, dam, GF_DARK_WEAK, flg, -1);
6252 /* Lite up the room */
6253 unlite_room(py, px);
6263 * Stop if we hit a monster, act as a "ball"
6264 * Allow "target" mode to pass over monsters
6265 * Affect grids, objects, and monsters
6267 bool fire_ball(int typ, int dir, int dam, int rad)
6271 int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_NO_REF;
6273 if (typ == GF_CONTROL_LIVING) flg|= PROJECT_HIDE;
6274 /* Use the given direction */
6275 tx = px + 99 * ddx[dir];
6276 ty = py + 99 * ddy[dir];
6278 /* Hack -- Use an actual "target" */
6279 if ((dir == 5) && target_okay())
6281 flg &= ~(PROJECT_STOP);
6286 /* Analyze the "dir" and the "target". Hurt items on floor. */
6287 return (project(0, rad, ty, tx, dam, typ, flg, -1));
6293 * Stop if we hit a monster, act as a "ball"
6294 * Allow "target" mode to pass over monsters
6295 * Affect grids, objects, and monsters
6297 bool fire_rocket(int typ, int dir, int dam, int rad)
6301 int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_NO_REF;
6303 /* Use the given direction */
6304 tx = px + 99 * ddx[dir];
6305 ty = py + 99 * ddy[dir];
6307 /* Hack -- Use an actual "target" */
6308 if ((dir == 5) && target_okay())
6314 /* Analyze the "dir" and the "target". Hurt items on floor. */
6315 return (project(0, rad, ty, tx, dam, typ, flg, -1));
6321 * Stop if we hit a monster, act as a "ball"
6322 * Allow "target" mode to pass over monsters
6323 * Affect grids, objects, and monsters
6325 bool fire_ball_hide(int typ, int dir, int dam, int rad)
6329 int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_NO_REF | PROJECT_HIDE;
6331 /* Use the given direction */
6332 tx = px + 99 * ddx[dir];
6333 ty = py + 99 * ddy[dir];
6335 /* Hack -- Use an actual "target" */
6336 if ((dir == 5) && target_okay())
6338 flg &= ~(PROJECT_STOP);
6343 /* Analyze the "dir" and the "target". Hurt items on floor. */
6344 return (project(0, rad, ty, tx, dam, typ, flg, -1));
6349 * Cast a meteor spell, defined as a ball spell cast by an arbitary monster,
6350 * player, or outside source, that starts out at an arbitrary location, and
6351 * leaving no trail from the "caster" to the target. This function is
6352 * especially useful for bombardments and similar. -LM-
6354 * Option to hurt the player.
6356 bool fire_meteor(int who, int typ, int y, int x, int dam, int rad)
6358 int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_NO_REF;
6360 /* Analyze the "target" and the caster. */
6361 return (project(who, rad, y, x, dam, typ, flg, -1));
6365 bool fire_blast(int typ, int dir, int dd, int ds, int num, int dev)
6371 int flg = PROJECT_FAST | PROJECT_THRU | PROJECT_STOP | PROJECT_KILL | PROJECT_GRID;
6376 /* Use the given direction */
6379 ly = ty = py + 20 * ddy[dir];
6380 lx = tx = px + 20 * ddx[dir];
6383 /* Use an actual "target" */
6389 lx = 20 * (tx - px) + px;
6390 ly = 20 * (ty - py) + py;
6393 ld = distance(py, px, ly, lx);
6396 for (i = 0; i < num; i++)
6400 /* Get targets for some bolts */
6401 y = rand_spread(ly, ld * dev / 20);
6402 x = rand_spread(lx, ld * dev / 20);
6404 if (distance(ly, lx, y, x) <= ld * dev / 20) break;
6407 /* Analyze the "dir" and the "target". */
6408 if (!project(0, 0, y, x, damroll(dd, ds), typ, flg, -1))
6419 * Switch position with a monster.
6421 bool teleport_swap(int dir)
6425 monster_type * m_ptr;
6426 monster_race * r_ptr;
6428 if ((dir == 5) && target_okay())
6438 c_ptr = &cave[ty][tx];
6440 if (p_ptr->anti_tele)
6443 msg_print("ÉԻ׵ĤÊÎϤ¬¥Æ¥ì¥Ý¡¼¥È¤òËɤ¤¤À¡ª");
6445 msg_print("A mysterious force prevents you from teleporting!");
6451 if (!c_ptr->m_idx || (c_ptr->m_idx == p_ptr->riding))
6454 msg_print("¤½¤ì¤È¤Ï¾ì½ê¤ò¸ò´¹¤Ç¤¤Þ¤»¤ó¡£");
6456 msg_print("You can't trade places with that!");
6464 if ((c_ptr->info & CAVE_ICKY) || (distance(ty, tx, py, px) > p_ptr->lev * 3 / 2 + 10))
6467 msg_print("¼ºÇÔ¤·¤¿¡£");
6469 msg_print("Failed to swap.");
6477 m_ptr = &m_list[c_ptr->m_idx];
6478 r_ptr = &r_info[m_ptr->r_idx];
6480 if (r_ptr->flags3 & RF3_RES_TELE)
6483 msg_print("¥Æ¥ì¥Ý¡¼¥È¤ò¼ÙË⤵¤ì¤¿¡ª");
6485 msg_print("Your teleportation is blocked!");
6493 sound(SOUND_TELEPORT);
6495 cave[py][px].m_idx = c_ptr->m_idx;
6497 /* Update the old location */
6498 c_ptr->m_idx = p_ptr->riding;
6500 /* Move the monster */
6504 /* Move the player */
6510 m_list[p_ptr->riding].fy = ty;
6511 m_list[p_ptr->riding].fx = tx;
6513 /* Update the monster (new location) */
6514 update_mon(cave[ty][tx].m_idx, TRUE);
6522 /* Update the monster (new location) */
6523 update_mon(cave[ty][tx].m_idx, TRUE);
6525 /* Redraw the old grid */
6528 /* Redraw the new grid */
6531 /* Check for new panel (redraw map) */
6535 p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW);
6537 /* Notice changes in view */
6538 if (r_ptr->flags7 & (RF7_HAS_LITE_1 | RF7_HAS_LITE_2 | RF7_SELF_LITE_1 | RF7_SELF_LITE_2))
6540 /* Update some things */
6541 p_ptr->update |= (PU_MON_LITE);
6544 /* Update the monsters */
6545 p_ptr->update |= (PU_DISTANCE);
6548 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
6550 /* Redraw the health bar */
6551 if (p_ptr->health_who == cave[ty][tx].m_idx)
6552 p_ptr->redraw |= (PR_HEALTH);
6554 /* Handle stuff XXX XXX XXX */
6563 * Hack -- apply a "projection()" in a direction (or at the target)
6565 bool project_hook(int typ, int dir, int dam, int flg)
6569 /* Pass through the target if needed */
6570 flg |= (PROJECT_THRU);
6572 /* Use the given direction */
6576 /* Hack -- Use an actual "target" */
6577 if ((dir == 5) && target_okay())
6583 /* Analyze the "dir" and the "target", do NOT explode */
6584 return (project(0, 0, ty, tx, dam, typ, flg, -1));
6590 * Stop if we hit a monster, as a "bolt"
6591 * Affect monsters (not grids or objects)
6593 bool fire_bolt(int typ, int dir, int dam)
6595 int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_GRID;
6596 return (project_hook(typ, dir, dam, flg));
6602 * Pass through monsters, as a "beam"
6603 * Affect monsters (not grids or objects)
6605 bool fire_beam(int typ, int dir, int dam)
6607 int flg = PROJECT_BEAM | PROJECT_KILL | PROJECT_GRID | PROJECT_ITEM;
6608 return (project_hook(typ, dir, dam, flg));
6613 * Cast a bolt spell, or rarely, a beam spell
6615 bool fire_bolt_or_beam(int prob, int typ, int dir, int dam)
6617 if (randint0(100) < prob)
6619 return (fire_beam(typ, dir, dam));
6623 return (fire_bolt(typ, dir, dam));
6629 * Some of the old functions
6631 bool lite_line(int dir)
6633 int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_KILL;
6634 return (project_hook(GF_LITE_WEAK, dir, damroll(6, 8), flg));
6638 bool drain_life(int dir, int dam)
6640 int flg = PROJECT_STOP | PROJECT_KILL;
6641 return (project_hook(GF_OLD_DRAIN, dir, dam, flg));
6645 bool wall_to_mud(int dir)
6647 int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
6648 return (project_hook(GF_KILL_WALL, dir, 20 + randint1(30), flg));
6652 bool wizard_lock(int dir)
6654 int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
6655 return (project_hook(GF_JAM_DOOR, dir, 20 + randint1(30), flg));
6659 bool destroy_door(int dir)
6661 int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM;
6662 return (project_hook(GF_KILL_DOOR, dir, 0, flg));
6666 bool disarm_trap(int dir)
6668 int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM;
6669 return (project_hook(GF_KILL_TRAP, dir, 0, flg));
6673 bool heal_monster(int dir, int dam)
6675 int flg = PROJECT_STOP | PROJECT_KILL;
6676 return (project_hook(GF_OLD_HEAL, dir, dam, flg));
6680 bool speed_monster(int dir)
6682 int flg = PROJECT_STOP | PROJECT_KILL;
6683 return (project_hook(GF_OLD_SPEED, dir, p_ptr->lev, flg));
6687 bool slow_monster(int dir)
6689 int flg = PROJECT_STOP | PROJECT_KILL;
6690 return (project_hook(GF_OLD_SLOW, dir, p_ptr->lev, flg));
6694 bool sleep_monster(int dir)
6696 int flg = PROJECT_STOP | PROJECT_KILL;
6697 return (project_hook(GF_OLD_SLEEP, dir, p_ptr->lev, flg));
6701 bool stasis_monster(int dir)
6703 return (fire_ball_hide(GF_STASIS, dir, p_ptr->lev*2, 0));
6707 bool stasis_evil(int dir)
6709 return (fire_ball_hide(GF_STASIS_EVIL, dir, p_ptr->lev*2, 0));
6713 bool confuse_monster(int dir, int plev)
6715 int flg = PROJECT_STOP | PROJECT_KILL;
6716 return (project_hook(GF_OLD_CONF, dir, plev, flg));
6720 bool stun_monster(int dir, int plev)
6722 int flg = PROJECT_STOP | PROJECT_KILL;
6723 return (project_hook(GF_STUN, dir, plev, flg));
6727 bool poly_monster(int dir)
6729 int flg = PROJECT_STOP | PROJECT_KILL;
6730 bool tester = (project_hook(GF_OLD_POLY, dir, p_ptr->lev, flg));
6732 chg_virtue(V_CHANCE, 1);
6737 bool clone_monster(int dir)
6739 int flg = PROJECT_STOP | PROJECT_KILL;
6740 return (project_hook(GF_OLD_CLONE, dir, 0, flg));
6744 bool fear_monster(int dir, int plev)
6746 int flg = PROJECT_STOP | PROJECT_KILL;
6747 return (project_hook(GF_TURN_ALL, dir, plev, flg));
6751 bool death_ray(int dir, int plev)
6753 int flg = PROJECT_STOP | PROJECT_KILL;
6754 return (project_hook(GF_DEATH_RAY, dir, plev * 200, flg));
6758 bool teleport_monster(int dir)
6760 int flg = PROJECT_BEAM | PROJECT_KILL;
6761 return (project_hook(GF_AWAY_ALL, dir, MAX_SIGHT * 5, flg));
6765 * Hooks -- affect adjacent grids (radius 1 ball attack)
6767 bool door_creation(void)
6769 int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
6770 return (project(0, 1, py, px, 0, GF_MAKE_DOOR, flg, -1));
6774 bool trap_creation(int y, int x)
6776 int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
6777 return (project(0, 1, y, x, 0, GF_MAKE_TRAP, flg, -1));
6781 bool tree_creation(void)
6783 int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
6784 return (project(0, 1, py, px, 0, GF_MAKE_TREE, flg, -1));
6788 bool glyph_creation(void)
6790 int flg = PROJECT_GRID | PROJECT_ITEM;
6791 return (project(0, 1, py, px, 0, GF_MAKE_GLYPH, flg, -1));
6795 bool wall_stone(void)
6797 int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
6799 bool dummy = (project(0, 1, py, px, 0, GF_STONE_WALL, flg, -1));
6802 p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW);
6804 /* Update the monsters */
6805 p_ptr->update |= (PU_MONSTERS);
6808 p_ptr->redraw |= (PR_MAP);
6811 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
6817 bool destroy_doors_touch(void)
6819 int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
6820 return (project(0, 1, py, px, 0, GF_KILL_DOOR, flg, -1));
6824 bool sleep_monsters_touch(void)
6826 int flg = PROJECT_KILL | PROJECT_HIDE;
6827 return (project(0, 1, py, px, p_ptr->lev, GF_OLD_SLEEP, flg, -1));
6831 bool animate_dead(int who, int y, int x)
6833 int flg = PROJECT_ITEM | PROJECT_HIDE;
6834 return (project(who, 5, y, x, 0, GF_ANIM_DEAD, flg, -1));
6838 void call_chaos(void)
6840 int Chaos_type, dummy, dir;
6841 int plev = p_ptr->lev;
6842 bool line_chaos = FALSE;
6844 int hurt_types[31] =
6846 GF_ELEC, GF_POIS, GF_ACID, GF_COLD,
6847 GF_FIRE, GF_MISSILE, GF_ARROW, GF_PLASMA,
6848 GF_HOLY_FIRE, GF_WATER, GF_LITE, GF_DARK,
6849 GF_FORCE, GF_INERTIA, GF_MANA, GF_METEOR,
6850 GF_ICE, GF_CHAOS, GF_NETHER, GF_DISENCHANT,
6851 GF_SHARDS, GF_SOUND, GF_NEXUS, GF_CONFUSION,
6852 GF_TIME, GF_GRAVITY, GF_ROCKET, GF_NUKE,
6853 GF_HELL_FIRE, GF_DISINTEGRATE, GF_PSY_SPEAR
6856 Chaos_type = hurt_types[randint0(31)];
6857 if (one_in_(4)) line_chaos = TRUE;
6861 for (dummy = 1; dummy < 10; dummy++)
6866 fire_beam(Chaos_type, dummy, 150);
6868 fire_ball(Chaos_type, dummy, 150, 2);
6872 else if (one_in_(3))
6874 fire_ball(Chaos_type, 0, 500, 8);
6878 if (!get_aim_dir(&dir)) return;
6880 fire_beam(Chaos_type, dir, 250);
6882 fire_ball(Chaos_type, dir, 250, 3 + (plev / 35));
6888 * Activate the evil Topi Ylinen curse
6889 * rr9: Stop the nasty things when a Cyberdemon is summoned
6890 * or the player gets paralyzed.
6892 bool activate_ty_curse(bool stop_ty, int *count)
6896 int flg = (PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_JUMP);
6900 switch (randint1(34))
6906 msg_print("ÃÏÌ̤¬Íɤ줿...");
6908 msg_print("The ground trembles...");
6911 earthquake(py, px, 5 + randint0(10));
6912 if (!one_in_(6)) break;
6917 int dam = damroll(10, 10);
6919 msg_print("½ã¿è¤ÊËâÎϤμ¡¸µ¤Ø¤ÎÈ⤬³«¤¤¤¿¡ª");
6921 msg_print("A portal opens to a plane of raw mana!");
6924 project(0, 8, py, px, dam, GF_MANA, flg, -1);
6926 take_hit(DAMAGE_NOESCAPE, dam, "½ã¿è¤ÊËâÎϤβòÊü", -1);
6928 take_hit(DAMAGE_NOESCAPE, dam, "released pure mana", -1);
6930 if (!one_in_(6)) break;
6936 msg_print("¼þ°Ï¤Î¶õ´Ö¤¬ÏĤó¤À¡ª");
6938 msg_print("Space warps about you!");
6941 teleport_player(damroll(10, 10));
6942 if (randint0(13)) (*count) += activate_hi_summon(py, px, FALSE);
6943 if (!one_in_(6)) break;
6947 msg_print("¥¨¥Í¥ë¥®¡¼¤Î¤¦¤Í¤ê¤ò´¶¤¸¤¿¡ª");
6949 msg_print("You feel a surge of energy!");
6955 project(0, 7, py, px, 50, GF_KILL_WALL, flg, -1);
6957 take_hit(DAMAGE_NOESCAPE, 50, "¥¨¥Í¥ë¥®¡¼¤Î¤¦¤Í¤ê", -1);
6959 take_hit(DAMAGE_NOESCAPE, 50, "surge of energy", -1);
6962 if (!one_in_(6)) break;
6963 case 1: case 2: case 3: case 16: case 17:
6964 aggravate_monsters(0);
6965 if (!one_in_(6)) break;
6966 case 4: case 5: case 6:
6967 (*count) += activate_hi_summon(py, px, FALSE);
6968 if (!one_in_(6)) break;
6969 case 7: case 8: case 9: case 18:
6970 (*count) += summon_specific(0, py, px, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
6971 if (!one_in_(6)) break;
6972 case 10: case 11: case 12:
6974 msg_print("À¸Ì¿ÎϤ¬ÂΤ«¤éµÛ¤¤¼è¤é¤ì¤¿µ¤¤¬¤¹¤ë¡ª");
6976 msg_print("You feel your life draining away...");
6979 lose_exp(p_ptr->exp / 16);
6980 if (!one_in_(6)) break;
6981 case 13: case 14: case 15: case 19: case 20:
6982 if (stop_ty || (p_ptr->free_act && (randint1(125) < p_ptr->skill_sav)) || (p_ptr->pclass == CLASS_BERSERKER))
6989 msg_print("ĦÁü¤Ë¤Ê¤Ã¤¿µ¤Ê¬¤À¡ª");
6991 msg_print("You feel like a statue!");
6994 if (p_ptr->free_act)
6995 set_paralyzed(p_ptr->paralyzed + randint1(3));
6997 set_paralyzed(p_ptr->paralyzed + randint1(13));
7000 if (!one_in_(6)) break;
7001 case 21: case 22: case 23:
7002 (void)do_dec_stat(randint0(6));
7003 if (!one_in_(6)) break;
7006 msg_print("¤Û¤¨¡©»ä¤Ïï¡©¤³¤³¤Ç²¿¤·¤Æ¤ë¡©");
7008 msg_print("Huh? Who am I? What am I doing here?");
7012 if (!one_in_(6)) break;
7015 * Only summon Cyberdemons deep in the dungeon.
7017 if ((dun_level > 65) && !stop_ty)
7019 (*count) += summon_cyber(-1, py, px);
7023 if (!one_in_(6)) break;
7029 (void)do_dec_stat(i);
7037 while (one_in_(3) && !stop_ty);
7043 int activate_hi_summon(int y, int x, bool can_pet)
7048 u32b mode = PM_ALLOW_GROUP;
7055 mode |= PM_FORCE_FRIENDLY;
7059 mode |= PM_FORCE_PET;
7064 if (!pet) mode |= PM_NO_PET;
7066 summon_lev = (pet ? p_ptr->lev * 2 / 3 + randint1(p_ptr->lev / 2) : dun_level);
7068 for (i = 0; i < (randint1(7) + (dun_level / 40)); i++)
7070 switch (randint1(25) + (dun_level / 20))
7073 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_ANT, mode);
7076 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_SPIDER, mode);
7079 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HOUND, mode);
7082 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HYDRA, mode);
7085 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_ANGEL, mode);
7088 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_UNDEAD, mode);
7091 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_DRAGON, mode);
7094 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_DEMON, mode);
7098 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_AMBERITES, (mode | PM_ALLOW_UNIQUE));
7102 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_UNIQUE, (mode | PM_ALLOW_UNIQUE));
7105 if (!can_pet) mode |= PM_ALLOW_UNIQUE;
7106 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HI_UNDEAD, mode);
7109 if (!can_pet) mode |= PM_ALLOW_UNIQUE;
7110 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HI_DRAGON, mode);
7113 count += summon_specific((pet ? -1 : 0), y, x, 100, SUMMON_CYBER, mode);
7116 if (!can_pet) mode |= PM_ALLOW_UNIQUE;
7117 count += summon_specific((pet ? -1 : 0), y, x,pet ? summon_lev : (((summon_lev * 3) / 2) + 5), 0, mode);
7126 int summon_cyber(int who, int y, int x)
7129 int max_cyber = (easy_band ? 1 : (dun_level / 50) + randint1(2));
7131 u32b mode = PM_ALLOW_GROUP;
7133 /* Summoned by a monster */
7136 monster_type *m_ptr = &m_list[who];
7137 if (is_pet(m_ptr)) mode |= PM_FORCE_PET;
7140 if (max_cyber > 4) max_cyber = 4;
7142 for (i = 0; i < max_cyber; i++)
7144 count += summon_specific(who, y, x, 100, SUMMON_CYBER, mode);
7151 void wall_breaker(void)
7155 int attempts = 1000;
7157 if (randint1(80 + p_ptr->lev) < 70)
7161 scatter(&y, &x, py, px, 4, 0);
7163 if (!cave_floor_bold(y, x)) continue;
7165 if ((y != py) || (x != px)) break;
7168 project(0, 0, y, x, 20 + randint1(30), GF_KILL_WALL,
7169 (PROJECT_BEAM | PROJECT_THRU | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL), -1);
7171 else if (randint1(100) > 30)
7173 earthquake(py, px, 1);
7177 int num = damroll(5, 3);
7179 for (i = 0; i < num; i++)
7183 scatter(&y, &x, py, px, 10, 0);
7185 if ((y != py) && (x != px)) break;
7188 project(0, 0, y, x, 20 + randint1(30), GF_KILL_WALL,
7189 (PROJECT_BEAM | PROJECT_THRU | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL), -1);
7198 bool confuse_monsters(int dam)
7200 return (project_hack(GF_OLD_CONF, dam));
7207 bool charm_monsters(int dam)
7209 return (project_hack(GF_CHARM, dam));
7216 bool charm_animals(int dam)
7218 return (project_hack(GF_CONTROL_ANIMAL, dam));
7225 bool stun_monsters(int dam)
7227 return (project_hack(GF_STUN, dam));
7234 bool stasis_monsters(int dam)
7236 return (project_hack(GF_STASIS, dam));
7241 * Mindblast monsters
7243 bool mindblast_monsters(int dam)
7245 return (project_hack(GF_PSI, dam));
7250 * Banish all monsters
7252 bool banish_monsters(int dist)
7254 return (project_hack(GF_AWAY_ALL, dist));
7261 bool turn_evil(int dam)
7263 return (project_hack(GF_TURN_EVIL, dam));
7270 bool turn_monsters(int dam)
7272 return (project_hack(GF_TURN_ALL, dam));
7277 * Death-ray all monsters (note: OBSCENELY powerful)
7279 bool deathray_monsters(void)
7281 return (project_hack(GF_DEATH_RAY, p_ptr->lev * 200));
7285 bool charm_monster(int dir, int plev)
7287 int flg = PROJECT_STOP | PROJECT_KILL;
7288 return (project_hook(GF_CHARM, dir, plev, flg));
7292 bool control_one_undead(int dir, int plev)
7294 int flg = PROJECT_STOP | PROJECT_KILL;
7295 return (project_hook(GF_CONTROL_UNDEAD, dir, plev, flg));
7299 bool control_one_demon(int dir, int plev)
7301 int flg = PROJECT_STOP | PROJECT_KILL;
7302 return (project_hook(GF_CONTROL_DEMON, dir, plev, flg));
7306 bool charm_animal(int dir, int plev)
7308 int flg = PROJECT_STOP | PROJECT_KILL;
7309 return (project_hook(GF_CONTROL_ANIMAL, dir, plev, flg));
7313 bool charm_living(int dir, int plev)
7315 int flg = PROJECT_STOP | PROJECT_KILL;
7316 return (project_hook(GF_CONTROL_LIVING, dir, plev, flg));
7320 void kawarimi(bool success)
7323 object_type *q_ptr = &forge;
7326 if (p_ptr->confused || p_ptr->blind || p_ptr->paralyzed || p_ptr->image) return;
7327 if (randint0(200) < p_ptr->stun) return;
7329 if (!success && one_in_(3))
7332 msg_print("¼ºÇÔ¡ªÆ¨¤²¤é¤ì¤Ê¤«¤Ã¤¿¡£");
7334 msg_print("Failed! You couldn't run away.");
7336 p_ptr->special_defense &= ~(NINJA_KAWARIMI);
7337 p_ptr->redraw |= (PR_STATUS);
7344 teleport_player(10+randint1(90));
7348 object_prep(q_ptr, lookup_kind(TV_STATUE, SV_WOODEN_STATUE));
7350 q_ptr->pval = MON_NINJA;
7352 /* Drop it in the dungeon */
7353 (void)drop_near(q_ptr, -1, y, x);
7356 if (success) msg_print("¹¶·â¤ò¼õ¤±¤ëÁ°¤ËÁÇÁ᤯¿È¤ò¤Ò¤ë¤¬¤¨¤·¤¿¡£");
7357 else msg_print("¼ºÇÔ¡ª¹¶·â¤ò¼õ¤±¤Æ¤·¤Þ¤Ã¤¿¡£");
7359 if (success) msg_print("You have turned around just before the attack hit you.");
7360 else msg_print("Failed! You are hit by the attack.");
7363 p_ptr->special_defense &= ~(NINJA_KAWARIMI);
7364 p_ptr->redraw |= (PR_STATUS);