OSDN Git Service

FORCE_WEPON -> FORCE_WEAPON
[hengband/hengband.git] / src / spells2.c
1 /* File: spells2.c */
2
3 /* Purpose: Spell code (part 2) */
4
5 /*
6  * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke
7  *
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.
11  */
12
13 #include "angband.h"
14
15
16 /*
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
22  *
23  * It is now a lot more efficient. -BEN-
24  *
25  * See also "identify_fully()".
26  *
27  * XXX XXX XXX Use the "show_file()" method, perhaps.
28  */
29 void self_knowledge(void)
30 {
31         int i = 0, j, k;
32
33         int v_nr = 0;
34         char v_string [8] [128];
35         char s_string [6] [128];
36
37         u32b f1 = 0L, f2 = 0L, f3 = 0L;
38
39         object_type *o_ptr;
40
41         char Dummy[80];
42         char buf[2][80];
43
44         cptr info[220];
45
46         int plev = p_ptr->lev;
47
48         int percent;
49
50         p_ptr->knowledge |= (KNOW_STAT | KNOW_HPRATE);
51
52         strcpy(Dummy, "");
53
54         percent = (int)(((long)player_hp[PY_MAX_LEVEL - 1] * 200L) /
55                 (2 * p_ptr->hitdie +
56                 ((PY_MAX_LEVEL - 1+3) * (p_ptr->hitdie + 1))));
57
58 #ifdef JP
59 sprintf(Dummy, "¸½ºß¤ÎÂÎÎÏ¥é¥ó¥¯ : %d/100", percent);
60 #else
61         sprintf(Dummy, "Your current Life Rating is %d/100.", percent);
62 #endif
63
64         strcpy(buf[0], Dummy);
65         info[i++] = buf[0];
66         info[i++] = "";
67
68         chg_virtue(V_KNOWLEDGE, 1);
69         chg_virtue(V_ENLIGHTEN, 1);
70
71         /* Acquire item flags from equipment */
72         for (k = INVEN_RARM; k < INVEN_TOTAL; k++)
73         {
74                 u32b t1, t2, t3;
75
76                 o_ptr = &inventory[k];
77
78                 /* Skip non-objects */
79                 if (!o_ptr->k_idx) continue;
80
81                 /* Extract the flags */
82                 object_flags(o_ptr, &t1, &t2, &t3);
83
84                 /* Extract flags */
85                 f1 |= t1;
86                 f2 |= t2;
87                 f3 |= t3;
88         }
89
90 #ifdef JP
91         info[i++] = "ǽÎϤκÇÂçÃÍ";
92 #else
93         info[i++] = "Limits of maximum stats";
94 #endif
95
96         for (v_nr = 0; v_nr < 6; v_nr++)
97         {
98                 char stat_desc[80];
99
100                 sprintf(stat_desc, "%s 18/%d", stat_names[v_nr], p_ptr->stat_max_max[v_nr]-18);
101
102                 strcpy(s_string[v_nr], stat_desc);
103
104                 info[i++] = s_string[v_nr];
105         }
106         info[i++] = "";
107
108 #ifdef JP
109         sprintf(Dummy, "¸½ºß¤Î°À­ : %s(%ld)", your_alignment(), p_ptr->align);
110 #else
111         sprintf(Dummy, "Your alighnment : %s(%ld)", your_alignment(), p_ptr->align);
112 #endif
113         strcpy(buf[1], Dummy);
114         info[i++] = buf[1];
115         for (v_nr = 0; v_nr < 8; v_nr++)
116         {
117                 char v_name [20];
118                 char vir_desc[80];
119                 int tester = p_ptr->virtues[v_nr];
120         
121                 strcpy(v_name, virtue[(p_ptr->vir_types[v_nr])-1]);
122  
123 #ifdef JP
124                 sprintf(vir_desc, "¤ª¤Ã¤È¡£%s¤Î¾ðÊó¤Ê¤·¡£", v_name);
125 #else
126                 sprintf(vir_desc, "Oops. No info about %s.", v_name);
127 #endif
128                 if (tester < -100)
129 #ifdef JP
130                         sprintf(vir_desc, "[%s]¤ÎÂжˠ(%d)",
131 #else
132                         sprintf(vir_desc, "You are the polar opposite of %s (%d).",
133 #endif
134                                 v_name, tester);
135                 else if (tester < -80)
136 #ifdef JP
137                         sprintf(vir_desc, "[%s]¤ÎÂçŨ (%d)",
138 #else
139                         sprintf(vir_desc, "You are an arch-enemy of %s (%d).",
140 #endif
141                                 v_name, tester);
142                 else if (tester < -60)
143 #ifdef JP
144                         sprintf(vir_desc, "[%s]¤Î¶¯Å¨ (%d)",
145 #else
146                         sprintf(vir_desc, "You are a bitter enemy of %s (%d).",
147 #endif
148                                 v_name, tester);
149                 else if (tester < -40)
150 #ifdef JP
151                         sprintf(vir_desc, "[%s]¤ÎŨ (%d)",
152 #else
153                         sprintf(vir_desc, "You are an enemy of %s (%d).",
154 #endif
155                                 v_name, tester);
156                 else if (tester < -20)
157 #ifdef JP
158                         sprintf(vir_desc, "[%s]¤Îºá¼Ô (%d)",
159 #else
160                         sprintf(vir_desc, "You have sinned against %s (%d).",
161 #endif
162                                 v_name, tester);
163                 else if (tester < 0)
164 #ifdef JP
165                         sprintf(vir_desc, "[%s]¤ÎÌÂÆ»¼Ô (%d)",
166 #else
167                         sprintf(vir_desc, "You have strayed from the path of %s (%d).",
168 #endif
169                                 v_name, tester);
170                 else if (tester == 0)                   
171 #ifdef JP
172                         sprintf(vir_desc, "[%s]¤ÎÃæΩ¼Ô (%d)",
173 #else
174                         sprintf(vir_desc,"You are neutral to %s (%d).",
175 #endif
176                                 v_name, tester);
177                 else if (tester < 20)
178 #ifdef JP
179                         sprintf(vir_desc, "[%s]¤Î¾®ÆÁ¼Ô (%d)",
180 #else
181                         sprintf(vir_desc,"You are somewhat virtuous in %s (%d).",
182 #endif
183                                 v_name, tester);
184                 else if (tester < 40)
185 #ifdef JP
186                         sprintf(vir_desc, "[%s]¤ÎÃæÆÁ¼Ô (%d)",
187 #else
188                         sprintf(vir_desc,"You are virtuous in %s (%d).",
189 #endif
190                                 v_name, tester);
191                 else if (tester < 60)
192 #ifdef JP
193                         sprintf(vir_desc, "[%s]¤Î¹âÆÁ¼Ô (%d)",
194 #else
195                         sprintf(vir_desc,"You are very virtuous in %s (%d).",
196 #endif
197                                 v_name, tester);
198                 else if (tester < 80)
199 #ifdef JP
200                         sprintf(vir_desc, "[%s]¤ÎÇƼԠ(%d)",
201 #else
202                         sprintf(vir_desc,"You are a champion of %s (%d).",
203 #endif
204                                 v_name, tester);
205                 else if (tester < 100)
206 #ifdef JP
207                         sprintf(vir_desc, "[%s]¤Î°ÎÂç¤ÊÇƼԠ(%d)",
208 #else
209                         sprintf(vir_desc,"You are a great champion of %s (%d).",
210 #endif
211                                 v_name, tester);
212                 else
213 #ifdef JP
214                         sprintf(vir_desc, "[%s]¤Î¶ñ¸½¼Ô (%d)",
215 #else
216                         sprintf(vir_desc,"You are the living embodiment of %s (%d).",
217 #endif
218                 v_name, tester);
219         
220                 strcpy(v_string[v_nr], vir_desc);
221         
222                 info[i++] = v_string[v_nr];
223         }
224         info[i++] = "";
225         
226         /* Racial powers... */
227         if (p_ptr->mimic_form)
228         {
229                 switch (p_ptr->mimic_form)
230                 {
231                         case MIMIC_DEMON:
232                         case MIMIC_DEMON_LORD:
233 #ifdef JP
234 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤ÎÃϹö¤«²Ð±ê¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤¬¤Ç¤­¤ë¡£(%d MP)", 3 * plev, 10+plev/3);
235 #else
236                                 sprintf(Dummy, "You can nether breathe, dam. %d (cost %d).", 3 * plev, 10+plev/3);
237 #endif
238
239                                 info[i++] = Dummy;
240                         break;
241                 case MIMIC_VAMPIRE:
242                         if (plev > 1)
243                         {
244 #ifdef JP
245 sprintf(Dummy, "¤¢¤Ê¤¿¤ÏŨ¤«¤é %d-%d HP ¤ÎÀ¸Ì¿ÎϤòµÛ¼ý¤Ç¤­¤ë¡£(%d MP)",
246 #else
247                                 sprintf(Dummy, "You can steal life from a foe, dam. %d-%d (cost %d).",
248 #endif
249
250                                     plev + MAX(1, plev / 10), plev + plev * MAX(1, plev / 10), 1 + (plev / 3));
251                                 info[i++] = Dummy;
252                         }
253                         break;
254                 }
255         }
256         else
257         {
258         switch (p_ptr->prace)
259         {
260                 case RACE_NIBELUNG:
261                 case RACE_DWARF:
262                         if (plev > 4)
263 #ifdef JP
264 info[i++] = "¤¢¤Ê¤¿¤Ï櫤ȥɥ¢¤È³¬Ãʤò´¶ÃΤǤ­¤ë¡£(5 MP)";
265 #else
266                                 info[i++] = "You can find traps, doors and stairs (cost 5).";
267 #endif
268
269                         break;
270                 case RACE_HOBBIT:
271                         if (plev > 14)
272                         {
273 #ifdef JP
274 info[i++] = "¤¢¤Ê¤¿¤Ï¿©ÎÁ¤òÀ¸À®¤Ç¤­¤ë¡£(10 MP)";
275 #else
276                                 info[i++] = "You can produce food (cost 10).";
277 #endif
278
279                         }
280                         break;
281                 case RACE_GNOME:
282                         if (plev > 4)
283                         {
284 #ifdef JP
285 sprintf(Dummy, "¤¢¤Ê¤¿¤ÏÈÏ°Ï %d °ÊÆâ¤Ë¥Æ¥ì¥Ý¡¼¥È¤Ç¤­¤ë¡£(%d MP)",
286 #else
287                                 sprintf(Dummy, "You can teleport, range %d (cost %d).",
288 #endif
289
290                                     (1 + plev), (5 + (plev / 5)));
291                                 info[i++] = Dummy;
292                         }
293                         break;
294                 case RACE_HALF_ORC:
295                         if (plev > 2)
296 #ifdef JP
297 info[i++] = "¤¢¤Ê¤¿¤Ï¶²Éݤò½üµî¤Ç¤­¤ë¡£(5 MP)";
298 #else
299                                 info[i++] = "You can remove fear (cost 5).";
300 #endif
301
302                         break;
303                 case RACE_HALF_TROLL:
304                         if (plev > 9)
305 #ifdef JP
306 info[i++] = "¤¢¤Ê¤¿¤Ï¶¸Ë½²½¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(12 MP) ";
307 #else
308                                 info[i++] = "You enter berserk fury (cost 12).";
309 #endif
310
311                         break;
312                 case RACE_AMBERITE:
313                         if (plev > 29)
314 #ifdef JP
315 info[i++] = "¤¢¤Ê¤¿¤Ï¥·¥ã¥É¥¦¥·¥Õ¥È¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(50 MP)";
316 #else
317                                 info[i++] = "You can Shift Shadows (cost 50).";
318 #endif
319
320                         if (plev > 39)
321 #ifdef JP
322 info[i++] = "¤¢¤Ê¤¿¤Ï¡Ö¥Ñ¥¿¡¼¥ó¡×¤ò¿´¤ËÉÁ¤¤¤ÆÊ⤯¤³¤È¤¬¤Ç¤­¤ë¡£(75 MP)";
323 #else
324                                 info[i++] = "You can mentally Walk the Pattern (cost 75).";
325 #endif
326
327                         break;
328                 case RACE_BARBARIAN:
329                         if (plev > 7)
330 #ifdef JP
331 info[i++] = "¤¢¤Ê¤¿¤Ï¶¸Ë½²½¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(10 MP) ";
332 #else
333                                 info[i++] = "You can enter berserk fury (cost 10).";
334 #endif
335
336                         break;
337                 case RACE_HALF_OGRE:
338                         if (plev > 24)
339 #ifdef JP
340 info[i++] = "¤¢¤Ê¤¿¤ÏÇúȯ¤Î¥ë¡¼¥ó¤ò»Å³Ý¤±¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(35 MP)";
341 #else
342                                 info[i++] = "You can set an Explosive Rune (cost 35).";
343 #endif
344
345                         break;
346                 case RACE_HALF_GIANT:
347                         if (plev > 19)
348 #ifdef JP
349 info[i++] = "¤¢¤Ê¤¿¤ÏÀФÎÊɤò²õ¤¹¤³¤È¤¬¤Ç¤­¤ë¡£(10 MP)";
350 #else
351                                 info[i++] = "You can break stone walls (cost 10).";
352 #endif
353
354                         break;
355                 case RACE_HALF_TITAN:
356                         if (plev > 34)
357 #ifdef JP
358 info[i++] = "¤¢¤Ê¤¿¤Ï¥â¥ó¥¹¥¿¡¼¤ò¥¹¥­¥ã¥ó¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(20 MP)";
359 #else
360                                 info[i++] = "You can probe monsters (cost 20).";
361 #endif
362
363                         break;
364                 case RACE_CYCLOPS:
365                         if (plev > 19)
366                         {
367 #ifdef JP
368 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î´äÀФòÅꤲ¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(15 MP)",
369 #else
370                                 sprintf(Dummy, "You can throw a boulder, dam. %d (cost 15).",
371 #endif
372
373                                     3 * plev);
374                                 info[i++] = Dummy;
375                         }
376                         break;
377                 case RACE_YEEK:
378                         if (plev > 14)
379 #ifdef JP
380 info[i++] = "¤¢¤Ê¤¿¤Ï¶²Éݤò¸Æ¤Óµ¯¤³¤¹¶«¤ÓÀ¼¤òȯ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(15 MP)";
381 #else
382                                 info[i++] = "You can make a terrifying scream (cost 15).";
383 #endif
384
385                         break;
386                 case RACE_KLACKON:
387                         if (plev > 8)
388                         {
389 #ifdef JP
390 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î»À¤ò¿á¤­¤«¤±¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(9 MP)", plev);
391 #else
392                                 sprintf(Dummy, "You can spit acid, dam. %d (cost 9).", plev);
393 #endif
394
395                                 info[i++] = Dummy;
396                         }
397                         break;
398                 case RACE_KOBOLD:
399                         if (plev > 11)
400                         {
401                                 sprintf(Dummy,
402 #ifdef JP
403     "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤ÎÆÇÌð¤òÅꤲ¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(8 MP)", plev);
404 #else
405                                     "You can throw a dart of poison, dam. %d (cost 8).", plev);
406 #endif
407
408                                 info[i++] = Dummy;
409                         }
410                         break;
411                 case RACE_DARK_ELF:
412                         if (plev > 1)
413                         {
414 #ifdef JP
415 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Þ¥¸¥Ã¥¯¡¦¥ß¥µ¥¤¥ë¤Î¼öʸ¤ò»È¤¨¤ë¡£(2 MP)",
416 #else
417                                 sprintf(Dummy, "You can cast a Magic Missile, dam %d (cost 2).",
418 #endif
419
420                                     (3 + ((plev-1) / 5)));
421                                 info[i++] = Dummy;
422                         }
423                         break;
424                 case RACE_DRACONIAN:
425 #ifdef JP
426 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤¬¤Ç¤­¤ë¡£(%d MP)", 2 * plev, plev);
427 #else
428                         sprintf(Dummy, "You can breathe, dam. %d (cost %d).", 2 * plev, plev);
429 #endif
430
431                         info[i++] = Dummy;
432                         break;
433                 case RACE_MIND_FLAYER:
434                         if (plev > 14)
435 #ifdef JP
436 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤ÎÀº¿À¹¶·â¤ò¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(12 MP)", plev);
437 #else
438                                 sprintf(Dummy, "You can mind blast your enemies, dam %d (cost 12).", plev);
439 #endif
440
441                         info[i++] = Dummy;
442                         break;
443                 case RACE_IMP:
444                         if (plev > 29)
445                         {
446 #ifdef JP
447 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò»È¤¨¤ë¡£(15 MP)", plev);
448 #else
449                                 sprintf(Dummy, "You can cast a Fire Ball, dam. %d (cost 15).", plev);
450 #endif
451
452                                 info[i++] = Dummy;
453                         }
454                         else if (plev > 8)
455                         {
456 #ifdef JP
457 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò»È¤¨¤ë¡£(15 MP)", plev);
458 #else
459                                 sprintf(Dummy, "You can cast a Fire Bolt, dam. %d (cost 15).", plev);
460 #endif
461
462                                 info[i++] = Dummy;
463                         }
464                         break;
465                 case RACE_GOLEM:
466                         if (plev > 19)
467 #ifdef JP
468 info[i++] = "¤¢¤Ê¤¿¤Ï d20+30 ¥¿¡¼¥ó¤Î´ÖÈ©¤òÀФËÊѲ½¤µ¤»¤é¤ì¤ë¡£(15 MP)";
469 #else
470                                 info[i++] = "You can turn your skin to stone, dur d20+30 (cost 15).";
471 #endif
472
473                         break;
474                 case RACE_ZOMBIE:
475                 case RACE_SKELETON:
476                         if (plev > 29)
477 #ifdef JP
478 info[i++] = "¤¢¤Ê¤¿¤Ï¼º¤Ã¤¿À¸Ì¿ÎϤò²óÉü¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(30 MP)";
479 #else
480                                 info[i++] = "You can restore lost life forces (cost 30).";
481 #endif
482
483                         break;
484                 case RACE_VAMPIRE:
485                         if (plev > 1)
486                         {
487 #ifdef JP
488 sprintf(Dummy, "¤¢¤Ê¤¿¤ÏŨ¤«¤é %d-%d HP ¤ÎÀ¸Ì¿ÎϤòµÛ¼ý¤Ç¤­¤ë¡£(%d MP)",
489 #else
490                                 sprintf(Dummy, "You can steal life from a foe, dam. %d-%d (cost %d).",
491 #endif
492
493                                     plev + MAX(1, plev / 10), plev + plev * MAX(1, plev / 10), 1 + (plev / 3));
494                                 info[i++] = Dummy;
495                         }
496                         break;
497                 case RACE_SPECTRE:
498                         if (plev > 3)
499                         {
500 #ifdef JP
501 info[i++] = "¤¢¤Ê¤¿¤Ïµã¤­¶«¤ó¤ÇŨ¤ò¶²Éݤµ¤»¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(3 MP)";
502 #else
503                                 info[i++] = "You can wail to terrify your enemies (cost 3).";
504 #endif
505
506                         }
507                         break;
508                 case RACE_SPRITE:
509                         if (plev > 11)
510                         {
511 #ifdef JP
512 info[i++] = "¤¢¤Ê¤¿¤ÏŨ¤ò̲¤é¤»¤ëËâË¡¤ÎÊ´¤òÅꤲ¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(12 MP)";
513 #else
514                                 info[i++] = "You can throw magical dust which induces sleep (cost 12).";
515 #endif
516
517                         }
518                         break;
519                 case RACE_DEMON:
520 #ifdef JP
521 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤ÎÃϹö¤«²Ð±ê¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤¬¤Ç¤­¤ë¡£(%d MP)", 3 * plev, 10+plev/3);
522 #else
523                         sprintf(Dummy, "You can breathe nether, dam. %d (cost %d).", 3 * plev, 10+plev/3);
524 #endif
525
526                         info[i++] = Dummy;
527                         break;
528                 case RACE_KUTA:
529                         if (plev > 19)
530 #ifdef JP
531 info[i++] = "¤¢¤Ê¤¿¤Ï d20+30 ¥¿¡¼¥ó¤Î´Ö²£¤Ë¿­¤Ó¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(15 MP)";
532 #else
533                                 info[i++] = "You can expand horizontally, dur d20+30 (cost 15).";
534 #endif
535
536                         break;
537                 case RACE_ANDROID:
538                         if (plev < 10)
539 #ifdef JP
540 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥ì¥¤¥¬¥ó¤ò·â¤Ä¤³¤È¤¬¤Ç¤­¤ë¡£(7 MP)", (plev + 1) / 2);
541 #else
542                                 sprintf(Dummy, "You can fire a ray gun with damage %d (cost 7).", (plev+1)/2);
543 #endif
544                         else if (plev < 25)
545 #ifdef JP
546 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Ö¥é¥¹¥¿¡¼¤ò·â¤Ä¤³¤È¤¬¤Ç¤­¤ë¡£(13 MP)", plev);
547 #else
548                                 sprintf(Dummy, "You can fire a blaster with damage %d (cost 13).", plev);
549 #endif
550                         else if (plev < 35)
551 #ifdef JP
552 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Ð¥º¡¼¥«¤ò·â¤Ä¤³¤È¤¬¤Ç¤­¤ë¡£(26 MP)", plev * 2);
553 #else
554                                 sprintf(Dummy, "You can fire a bazooka with damage %d (cost 26).", plev * 2);
555 #endif
556                         else if (plev < 45)
557 #ifdef JP
558 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥Ó¡¼¥à¥­¥ã¥Î¥ó¤ò·â¤Ä¤³¤È¤¬¤Ç¤­¤ë¡£(40 MP)", plev * 2);
559 #else
560                                 sprintf(Dummy, "You can fire a beam cannon with damage %d (cost 40).", plev * 2);
561 #endif
562                         else
563 #ifdef JP
564 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï %d ¥À¥á¡¼¥¸¤Î¥í¥±¥Ã¥È¤ò·â¤Ä¤³¤È¤¬¤Ç¤­¤ë¡£(60 MP)", plev * 5);
565 #else
566                                 sprintf(Dummy, "You can fire a rocket with damage %d (cost 60).", plev * 5);
567 #endif
568
569                         info[i++] = Dummy;
570                         break;
571                 default:
572                         break;
573         }
574         }
575
576         switch(p_ptr->pclass)
577         {
578                 case CLASS_WARRIOR:
579                         if (plev > 39)
580                         {
581 #ifdef JP
582 info[i++] = "¤¢¤Ê¤¿¤Ï¥é¥ó¥À¥à¤ÊÊý¸þ¤ËÂФ·¤Æ¿ô²ó¹¶·â¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(75 MP)";
583 #else
584                                 info[i++] = "You can attack some random directions at a time (cost 75).";
585 #endif
586                         }
587                         break;
588                 case CLASS_MAGE:
589                 case CLASS_HIGH_MAGE:
590                 case CLASS_SORCERER:
591                         if (plev > 24)
592                         {
593 #ifdef JP
594 info[i++] = "¤¢¤Ê¤¿¤Ï¥¢¥¤¥Æ¥à¤ÎËâÎϤòµÛ¼ý¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(1 MP)";
595 #else
596                                 info[i++] = "You can absorb charges from an item (cost 1).";
597 #endif
598                         }
599                         break;
600                 case CLASS_PRIEST:
601                         if (p_ptr->realm1 == REALM_LIFE)
602                         {
603                                 if (plev > 34)
604                                 {
605 #ifdef JP
606 info[i++] = "¤¢¤Ê¤¿¤ÏÉð´ï¤ò½ËÊ¡¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(70 MP)";
607 #else
608                                         info[i++] = "You can bless a weapon (cost 70).";
609 #endif
610                                 }
611                         }
612                         else
613                         {
614                                 if (plev > 41)
615                                 {
616 #ifdef JP
617 info[i++] = "¤¢¤Ê¤¿¤Ï¼þ¤ê¤Î¤¹¤Ù¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¹¶·â¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(40 MP)";
618 #else
619                                         info[i++] = "You can damages all monsters in sight (cost 40).";
620 #endif
621                                 }
622                         }
623                         break;
624                 case CLASS_ROGUE:
625                         if (plev > 7)
626                         {
627 #ifdef JP
628 info[i++] = "¤¢¤Ê¤¿¤Ï¹¶·â¤·¤Æ¨ºÂ¤Ëƨ¤²¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(12 MP)";
629 #else
630                                 info[i++] = "You can hit a monster and teleport at a time (cost 12).";
631 #endif
632                         }
633                         break;
634                 case CLASS_RANGER:
635                         if (plev > 14)
636                         {
637 #ifdef JP
638 info[i++] = "¤¢¤Ê¤¿¤Ï²øʪ¤òÄ´ºº¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(20 MP)";
639 #else
640                                 info[i++] = "You can prove monsters (cost 20).";
641 #endif
642                         }
643                         break;
644                 case CLASS_PALADIN:
645                         if (p_ptr->realm1 == REALM_LIFE)
646                         {
647                                 if (plev > 29)
648                                 {
649 #ifdef JP
650 info[i++] = "¤¢¤Ê¤¿¤ÏÀ»¤Ê¤ëÁä¤òÊü¤Ä¤³¤È¤¬¤Ç¤­¤ë¡£(30 MP)";
651 #else
652                                         info[i++] = "You can fires a holy spear (cost 30).";
653 #endif
654                                 }
655                         }
656                         else
657                         {
658                                 if (plev > 29)
659                                 {
660 #ifdef JP
661 info[i++] = "¤¢¤Ê¤¿¤ÏÀ¸Ì¿ÎϤò¸º¾¯¤µ¤»¤ëÁä¤òÊü¤Ä¤³¤È¤¬¤Ç¤­¤ë¡£(30 MP)";
662 #else
663                                         info[i++] = "You can fires a spear which drains vitality (cost 30).";
664 #endif
665                                 }
666                         }
667                         break;
668                 case CLASS_WARRIOR_MAGE:
669                         if (plev > 24)
670                         {
671 #ifdef JP
672 info[i++] = "¤¢¤Ê¤¿¤Ï£È£Ð¤ò£Í£Ð¤ËÊÑ´¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(0 MP)";
673 #else
674                                 info[i++] = "You can convert HP to SP (cost 0).";
675 #endif
676 #ifdef JP
677 info[i++] = "¤¢¤Ê¤¿¤Ï£Í£Ð¤ò£È£Ð¤ËÊÑ´¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(0 MP)";
678 #else
679                                 info[i++] = "You can convert SP to HP (cost 0).";
680 #endif
681                         }
682                         break;
683                 case CLASS_CHAOS_WARRIOR:
684                         if (plev > 39)
685                         {
686 #ifdef JP
687 info[i++] = "¤¢¤Ê¤¿¤Ï¼þ°Ï¤Ë²øʪ¤òÏǤ魯¸÷¤òȯÀ¸¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(50 MP)";
688 #else
689                                 info[i++] = "You can radiate light which confuses nearby monsters (cost 50).";
690 #endif
691                         }
692                         break;
693                 case CLASS_MONK:
694                         if (plev > 24)
695                         {
696 #ifdef JP
697 info[i++] = "¤¢¤Ê¤¿¤Ï¹½¤¨¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(0 MP)";
698 #else
699                                 info[i++] = "You can assume a posture of special form (cost 0).";
700 #endif
701                         }
702                         if (plev > 29)
703                         {
704 #ifdef JP
705 info[i++] = "¤¢¤Ê¤¿¤ÏÄ̾ï¤Î2Çܤι¶·â¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤­¤ë¡£(30 MP)";
706 #else
707                                 info[i++] = "You can perform double attacks in a time (cost 30).";
708 #endif
709                         }
710                         break;
711                 case CLASS_MINDCRAFTER:
712                 case CLASS_FORCETRAINER:
713                         if (plev > 14)
714                         {
715 #ifdef JP
716 info[i++] = "¤¢¤Ê¤¿¤ÏÀº¿À¤ò½¸Ã椷¤Æ£Í£Ð¤ò²óÉü¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(0 MP)";
717 #else
718                                 info[i++] = "You can concentrate to regenerate your mana (cost 0).";
719 #endif
720                         }
721                         break;
722                 case CLASS_TOURIST:
723 #ifdef JP
724 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ì¿¿¤ò»£±Æ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(0 MP)";
725 #else
726                                 info[i++] = "You can take a photograph (cost 0).";
727 #endif
728                         if (plev > 24)
729                         {
730 #ifdef JP
731 info[i++] = "¤¢¤Ê¤¿¤Ï¥¢¥¤¥Æ¥à¤ò´°Á´¤Ë´ÕÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(20 MP)";
732 #else
733                                 info[i++] = "You can *identify* items (cost 20).";
734 #endif
735                         }
736                         break;
737                 case CLASS_IMITATOR:
738                         if (plev > 29)
739                         {
740 #ifdef JP
741 info[i++] = "¤¢¤Ê¤¿¤Ï²øʪ¤ÎÆü칶·â¤ò¥À¥á¡¼¥¸2ÇܤǤޤͤ뤳¤È¤¬¤Ç¤­¤ë¡£(100 MP)";
742 #else
743                                 info[i++] = "You can imitate monster's special attacks with double damage (cost 100).";
744 #endif
745                         }
746                         break;
747                 case CLASS_BEASTMASTER:
748 #ifdef JP
749 info[i++] = "¤¢¤Ê¤¿¤Ï1ɤ¤ÎÀ¸Ì¿¤Î¤¢¤ë¥â¥ó¥¹¥¿¡¼¤ò»ÙÇÛ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(¥ì¥Ù¥ë/4 MP)";
750 #else
751                         info[i++] = "You can dominate a monster (cost level/4).";
752 #endif
753                         if (plev > 29)
754                         {
755 #ifdef JP
756 info[i++] = "¤¢¤Ê¤¿¤Ï»ë³¦Æâ¤ÎÀ¸Ì¿¤Î¤¢¤ë¥â¥ó¥¹¥¿¡¼¤ò»ÙÇÛ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£((¥ì¥Ù¥ë+20)/2 MP)";
757 #else
758                                 info[i++] = "You can dominate living monsters in sight (cost (level+20)/4).";
759 #endif
760                         }
761                         break;
762                 case CLASS_MAGIC_EATER:
763 #ifdef JP
764 info[i++] = "¤¢¤Ê¤¿¤Ï¾ó/ËâË¡ËÀ/¥í¥Ã¥É¤ÎËâÎϤò¼«Ê¬¤Î¤â¤Î¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
765 #else
766                         info[i++] = "You can absorb a staff, wand or rod itself.";
767 #endif
768                         break;
769                 case CLASS_RED_MAGE:
770                         if (plev > 47)
771                         {
772 #ifdef JP
773 info[i++] = "¤¢¤Ê¤¿¤Ï1¥¿¡¼¥ó¤Ë2²óËâË¡¤ò¾§¤¨¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(77 MP)";
774 #else
775                                 info[i++] = "You can cast two spells in one time (cost 77).";
776 #endif
777                         }
778                         break;
779                 case CLASS_SAMURAI:
780                         {
781 #ifdef JP
782 info[i++] = "¤¢¤Ê¤¿¤ÏÀº¿À¤ò½¸Ã椷¤Æµ¤¹ç¤¤¤òί¤á¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
783 #else
784                                 info[i++] = "You can concentrate to regenerate your mana.";
785 #endif
786                         }
787                         if (plev > 24)
788                         {
789 #ifdef JP
790 info[i++] = "¤¢¤Ê¤¿¤ÏÆüì¤Ê·¿¤Ç¹½¤¨¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
791 #else
792                                 info[i++] = "You can assume a posture of special form.";
793 #endif
794                         }
795                         break;
796                 case CLASS_BLUE_MAGE:
797 #ifdef JP
798 info[i++] = "¤¢¤Ê¤¿¤ÏÁê¼ê¤Ë»È¤ï¤ì¤¿ËâË¡¤ò³Ø¤Ö¤³¤È¤¬¤Ç¤­¤ë¡£";
799 #else
800                         info[i++] = "You can study spells which your enemy casts on you.";
801 #endif
802                         break;
803                 case CLASS_CAVALRY:
804                         if (plev > 9)
805                         {
806 #ifdef JP
807 info[i++] = "¤¢¤Ê¤¿¤Ï¥â¥ó¥¹¥¿¡¼¤Ë¾è¤Ã¤Æ̵ÍýÌðÍý¥Ú¥Ã¥È¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
808 #else
809                                 info[i++] = "You can ride on a hostile monster forcibly to turn it into pet.";
810 #endif
811                         }
812                         break;
813                 case CLASS_BERSERKER:
814                         if (plev > 4)
815                         {
816 #ifdef JP
817 info[i++] = "¤¢¤Ê¤¿¤Ï¼«Ê¬¤Ç¶õÊ¢¤òËþ¤¿¤¹¤³¤È¤¬¤Ç¤­¤ë¡£";
818 #else
819                                 info[i++] = "You can satisfy hunger.";
820 #endif
821                         }
822                         if (plev > 9)
823                         {
824 #ifdef JP
825 info[i++] = "¤¢¤Ê¤¿¤Ï³¹¤È¥À¥ó¥¸¥ç¥ó¤Î´Ö¤ò¹Ô¤­Í褹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
826 #else
827                         info[i++] = "You can travel between town and the depths.";
828 #endif
829                         }
830                         break;
831                 case CLASS_MIRROR_MASTER:
832 #ifdef JP
833 info[i++] = "¤¢¤Ê¤¿¤Ï¶À¤òºî¤ê½Ð¤¹¤³¤È¤¬¤Ç¤­¤ë¡£(2 MP)";
834 #else
835                                 info[i++] = "You can create a Mirror (cost 2).";
836 #endif
837 #ifdef JP
838 info[i++] = "¤¢¤Ê¤¿¤Ï¶À¤ò³ä¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(0 MP)";
839 #else
840                                 info[i++] = "You can break distant Mirrors (cost 0).";
841 #endif
842                         break;
843                 case CLASS_NINJA:
844                         if (plev > 7)
845                         {
846 #ifdef JP
847 info[i++] = "¤¢¤Ê¤¿¤ÏÁÇÁ᤯°ÜÆ°¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
848 #else
849                                 info[i++] = "You can walk extremery fast.";
850 #endif
851                         }
852                         break;
853         }
854
855         if (p_ptr->muta1)
856         {
857                 if (p_ptr->muta1 & MUT1_SPIT_ACID)
858                 {
859 #ifdef JP
860 info[i++] = "¤¢¤Ê¤¿¤Ï»À¤ò¿á¤­¤«¤±¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX1)";
861 #else
862                         info[i++] = "You can spit acid (dam lvl).";
863 #endif
864
865                 }
866                 if (p_ptr->muta1 & MUT1_BR_FIRE)
867                 {
868 #ifdef JP
869 info[i++] = "¤¢¤Ê¤¿¤Ï±ê¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤¬¤Ç¤­¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX2)";
870 #else
871                         info[i++] = "You can breathe fire (dam lvl * 2).";
872 #endif
873
874                 }
875                 if (p_ptr->muta1 & MUT1_HYPN_GAZE)
876                 {
877 #ifdef JP
878 info[i++] = "¤¢¤Ê¤¿¤ÎâˤߤϺÅ̲¸ú²Ì¤ò¤â¤Ä¡£";
879 #else
880                         info[i++] = "Your gaze is hypnotic.";
881 #endif
882
883                 }
884                 if (p_ptr->muta1 & MUT1_TELEKINES)
885                 {
886 #ifdef JP
887 info[i++] = "¤¢¤Ê¤¿¤ÏÇ°Æ°ÎϤò¤â¤Ã¤Æ¤¤¤ë¡£";
888 #else
889                         info[i++] = "You are telekinetic.";
890 #endif
891
892                 }
893                 if (p_ptr->muta1 & MUT1_VTELEPORT)
894                 {
895 #ifdef JP
896 info[i++] = "¤¢¤Ê¤¿¤Ï¼«Ê¬¤Î°Õ»×¤Ç¥Æ¥ì¥Ý¡¼¥È¤Ç¤­¤ë¡£";
897 #else
898                         info[i++] = "You can teleport at will.";
899 #endif
900
901                 }
902                 if (p_ptr->muta1 & MUT1_MIND_BLST)
903                 {
904 #ifdef JP
905 info[i++] = "¤¢¤Ê¤¿¤ÏÀº¿À¹¶·â¤ò¹Ô¤¨¤ë¡£(¥À¥á¡¼¥¸ 3¡Á12d3)";
906 #else
907                         info[i++] = "You can Mind Blast your enemies (3 to 12d3 dam).";
908 #endif
909
910                 }
911                 if (p_ptr->muta1 & MUT1_RADIATION)
912                 {
913 #ifdef JP
914 info[i++] = "¤¢¤Ê¤¿¤Ï¼«Ê¬¤Î°Õ»×¤Ç¶¯¤¤Êü¼ÍÀþ¤òȯÀ¸¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX2)";
915 #else
916                         info[i++] = "You can emit hard radiation at will (dam lvl * 2).";
917 #endif
918
919                 }
920                 if (p_ptr->muta1 & MUT1_VAMPIRISM)
921                 {
922 #ifdef JP
923 info[i++] = "¤¢¤Ê¤¿¤ÏµÛ·ìµ´¤Î¤è¤¦¤ËŨ¤«¤éÀ¸Ì¿ÎϤòµÛ¼ý¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX2)";
924 #else
925                         info[i++] = "You can drain life from a foe like a vampire (dam lvl * 2).";
926 #endif
927
928                 }
929                 if (p_ptr->muta1 & MUT1_SMELL_MET)
930                 {
931 #ifdef JP
932 info[i++] = "¤¢¤Ê¤¿¤Ï¶á¤¯¤Ë¤¢¤ëµ®¶â°¤ò¤«¤®Ê¬¤±¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
933 #else
934                         info[i++] = "You can smell nearby precious metal.";
935 #endif
936
937                 }
938                 if (p_ptr->muta1 & MUT1_SMELL_MON)
939                 {
940 #ifdef JP
941 info[i++] = "¤¢¤Ê¤¿¤Ï¶á¤¯¤Î¥â¥ó¥¹¥¿¡¼¤Î¸ºß¤ò¤«¤®Ê¬¤±¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
942 #else
943                         info[i++] = "You can smell nearby monsters.";
944 #endif
945
946                 }
947                 if (p_ptr->muta1 & MUT1_BLINK)
948                 {
949 #ifdef JP
950 info[i++] = "¤¢¤Ê¤¿¤Ïû¤¤µ÷Î¥¤ò¥Æ¥ì¥Ý¡¼¥È¤Ç¤­¤ë¡£";
951 #else
952                         info[i++] = "You can teleport yourself short distances.";
953 #endif
954
955                 }
956                 if (p_ptr->muta1 & MUT1_EAT_ROCK)
957                 {
958 #ifdef JP
959 info[i++] = "¤¢¤Ê¤¿¤Ï¹Å¤¤´ä¤ò¿©¤Ù¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
960 #else
961                         info[i++] = "You can consume solid rock.";
962 #endif
963
964                 }
965                 if (p_ptr->muta1 & MUT1_SWAP_POS)
966                 {
967 #ifdef JP
968 info[i++] = "¤¢¤Ê¤¿¤Ï¾¤Î¼Ô¤È¾ì½ê¤òÆþ¤ìÂؤï¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
969 #else
970                         info[i++] = "You can switch locations with another being.";
971 #endif
972
973                 }
974                 if (p_ptr->muta1 & MUT1_SHRIEK)
975                 {
976 #ifdef JP
977 info[i++] = "¤¢¤Ê¤¿¤Ï¿È¤ÎÌÓ¤â¤è¤À¤Ä¶«¤ÓÀ¼¤òȯ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX2)";
978 #else
979                         info[i++] = "You can emit a horrible shriek (dam 2 * lvl).";
980 #endif
981
982                 }
983                 if (p_ptr->muta1 & MUT1_ILLUMINE)
984                 {
985 #ifdef JP
986 info[i++] = "¤¢¤Ê¤¿¤ÏÌÀ¤ë¤¤¸÷¤òÊü¤Ä¤³¤È¤¬¤Ç¤­¤ë¡£";
987 #else
988                         info[i++] = "You can emit bright light.";
989 #endif
990
991                 }
992                 if (p_ptr->muta1 & MUT1_DET_CURSE)
993                 {
994 #ifdef JP
995 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°­¤ÊËâË¡¤Î´í¸±¤ò´¶¤¸¤È¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
996 #else
997                         info[i++] = "You can feel the danger of evil magic.";
998 #endif
999
1000                 }
1001                 if (p_ptr->muta1 & MUT1_BERSERK)
1002                 {
1003 #ifdef JP
1004 info[i++] = "¤¢¤Ê¤¿¤Ï¼«Ê¬¤Î°Õ»×¤Ç¶¸ÍðÀïÆ®¾õÂ֤ˤʤ뤳¤È¤¬¤Ç¤­¤ë¡£";
1005 #else
1006                         info[i++] = "You can drive yourself into a berserk frenzy.";
1007 #endif
1008
1009                 }
1010                 if (p_ptr->muta1 & MUT1_POLYMORPH)
1011                 {
1012 #ifdef JP
1013 info[i++] = "¤¢¤Ê¤¿¤Ï¼«Ê¬¤Î°Õ»Ö¤ÇÊѲ½¤Ç¤­¤ë¡£";
1014 #else
1015                         info[i++] = "You can polymorph yourself at will.";
1016 #endif
1017
1018                 }
1019                 if (p_ptr->muta1 & MUT1_MIDAS_TCH)
1020                 {
1021 #ifdef JP
1022 info[i++] = "¤¢¤Ê¤¿¤ÏÄ̾異¥¤¥Æ¥à¤ò¶â¤ËÊѤ¨¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
1023 #else
1024                         info[i++] = "You can turn ordinary items to gold.";
1025 #endif
1026
1027                 }
1028                 if (p_ptr->muta1 & MUT1_GROW_MOLD)
1029                 {
1030 #ifdef JP
1031 info[i++] = "¤¢¤Ê¤¿¤Ï¼þ°Ï¤Ë¥­¥Î¥³¤òÀ¸¤ä¤¹¤³¤È¤¬¤Ç¤­¤ë¡£";
1032 #else
1033                         info[i++] = "You can cause mold to grow near you.";
1034 #endif
1035
1036                 }
1037                 if (p_ptr->muta1 & MUT1_RESIST)
1038                 {
1039 #ifdef JP
1040 info[i++] = "¤¢¤Ê¤¿¤Ï¸µÁǤι¶·â¤ËÂФ·¤Æ¿È¤ò¹Å¤¯¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
1041 #else
1042                         info[i++] = "You can harden yourself to the ravages of the elements.";
1043 #endif
1044
1045                 }
1046                 if (p_ptr->muta1 & MUT1_EARTHQUAKE)
1047                 {
1048 #ifdef JP
1049 info[i++] = "¤¢¤Ê¤¿¤Ï¼þ°Ï¤Î¥À¥ó¥¸¥ç¥ó¤òÊø²õ¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
1050 #else
1051                         info[i++] = "You can bring down the dungeon around your ears.";
1052 #endif
1053
1054                 }
1055                 if (p_ptr->muta1 & MUT1_EAT_MAGIC)
1056                 {
1057 #ifdef JP
1058 info[i++] = "¤¢¤Ê¤¿¤ÏËâË¡¤Î¥¨¥Í¥ë¥®¡¼¤ò¼«Ê¬¤Îʪ¤È¤·¤Æ»ÈÍѤǤ­¤ë¡£";
1059 #else
1060                         info[i++] = "You can consume magic energy for your own use.";
1061 #endif
1062
1063                 }
1064                 if (p_ptr->muta1 & MUT1_WEIGH_MAG)
1065                 {
1066 #ifdef JP
1067 info[i++] = "¤¢¤Ê¤¿¤Ï¼«Ê¬¤Ë±Æ¶Á¤òÍ¿¤¨¤ëËâË¡¤ÎÎϤò´¶¤¸¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
1068 #else
1069                         info[i++] = "You can feel the strength of the magics affecting you.";
1070 #endif
1071
1072                 }
1073                 if (p_ptr->muta1 & MUT1_STERILITY)
1074                 {
1075 #ifdef JP
1076 info[i++] = "¤¢¤Ê¤¿¤Ï½¸ÃÄŪÀ¸¿£ÉÔǽ¤òµ¯¤³¤¹¤³¤È¤¬¤Ç¤­¤ë¡£";
1077 #else
1078                         info[i++] = "You can cause mass impotence.";
1079 #endif
1080
1081                 }
1082                 if (p_ptr->muta1 & MUT1_PANIC_HIT)
1083                 {
1084 #ifdef JP
1085 info[i++] = "¤¢¤Ê¤¿¤Ï¹¶·â¤·¤¿¸å¿È¤ò¼é¤ë¤¿¤áƨ¤²¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
1086 #else
1087                         info[i++] = "You can run for your life after hitting something.";
1088 #endif
1089
1090                 }
1091                 if (p_ptr->muta1 & MUT1_DAZZLE)
1092                 {
1093 #ifdef JP
1094 info[i++] = "¤¢¤Ê¤¿¤Ïº®Íð¤ÈÌÕÌܤò°ú¤­µ¯¤³¤¹Êü¼Íǽ¤òȯÀ¸¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£ ";
1095 #else
1096                         info[i++] = "You can emit confusing, blinding radiation.";
1097 #endif
1098
1099                 }
1100                 if (p_ptr->muta1 & MUT1_LASER_EYE)
1101                 {
1102 #ifdef JP
1103 info[i++] = "¤¢¤Ê¤¿¤ÏÌܤ«¤é¥ì¡¼¥¶¡¼¸÷Àþ¤òȯ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX2)";
1104 #else
1105                         info[i++] = "Your eyes can fire laser beams (dam 2 * lvl).";
1106 #endif
1107
1108                 }
1109                 if (p_ptr->muta1 & MUT1_RECALL)
1110                 {
1111 #ifdef JP
1112 info[i++] = "¤¢¤Ê¤¿¤Ï³¹¤È¥À¥ó¥¸¥ç¥ó¤Î´Ö¤ò¹Ô¤­Í褹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
1113 #else
1114                         info[i++] = "You can travel between town and the depths.";
1115 #endif
1116
1117                 }
1118                 if (p_ptr->muta1 & MUT1_BANISH)
1119                 {
1120 #ifdef JP
1121 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤òÃϹö¤ËÍî¤È¤¹¤³¤È¤¬¤Ç¤­¤ë¡£";
1122 #else
1123                         info[i++] = "You can send evil creatures directly to Hell.";
1124 #endif
1125
1126                 }
1127                 if (p_ptr->muta1 & MUT1_COLD_TOUCH)
1128                 {
1129 #ifdef JP
1130 info[i++] = "¤¢¤Ê¤¿¤ÏŨ¤ò¿¨¤Ã¤ÆÅà¤é¤»¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(¥À¥á¡¼¥¸ ¥ì¥Ù¥ëX3)";
1131 #else
1132                         info[i++] = "You can freeze things with a touch (dam 3 * lvl).";
1133 #endif
1134
1135                 }
1136                 if (p_ptr->muta1 & MUT1_LAUNCHER)
1137                 {
1138 #ifdef JP
1139 info[i++] = "¤¢¤Ê¤¿¤Ï¥¢¥¤¥Æ¥à¤òÎ϶¯¤¯Åꤲ¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
1140 #else
1141                         info[i++] = "You can hurl objects with great force.";
1142 #endif
1143
1144                 }
1145         }
1146
1147         if (p_ptr->muta2)
1148         {
1149                 if (p_ptr->muta2 & MUT2_BERS_RAGE)
1150                 {
1151 #ifdef JP
1152 info[i++] = "¤¢¤Ê¤¿¤Ï¶¸Àï»Î²½¤Îȯºî¤òµ¯¤³¤¹¡£";
1153 #else
1154                         info[i++] = "You are subject to berserker fits.";
1155 #endif
1156
1157                 }
1158                 if (p_ptr->muta2 & MUT2_COWARDICE)
1159                 {
1160 #ifdef JP
1161 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹²²É¤ˤʤ롣";
1162 #else
1163                         info[i++] = "You are subject to cowardice.";
1164 #endif
1165
1166                 }
1167                 if (p_ptr->muta2 & MUT2_RTELEPORT)
1168                 {
1169 #ifdef JP
1170 info[i++] = "¤¢¤Ê¤¿¤Ï¥é¥ó¥À¥à¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ë¡£";
1171 #else
1172                         info[i++] = "You are teleporting randomly.";
1173 #endif
1174
1175                 }
1176                 if (p_ptr->muta2 & MUT2_ALCOHOL)
1177                 {
1178 #ifdef JP
1179 info[i++] = "¤¢¤Ê¤¿¤ÎÂΤϥ¢¥ë¥³¡¼¥ë¤òʬÈ礹¤ë¡£";
1180 #else
1181                         info[i++] = "Your body produces alcohol.";
1182 #endif
1183
1184                 }
1185                 if (p_ptr->muta2 & MUT2_HALLU)
1186                 {
1187 #ifdef JP
1188 info[i++] = "¤¢¤Ê¤¿¤Ï¸¸³Ð¤ò°ú¤­µ¯¤³¤¹Àº¿ÀºøÍð¤Ë¿¯¤µ¤ì¤Æ¤¤¤ë¡£";
1189 #else
1190                         info[i++] = "You have a hallucinatory insanity.";
1191 #endif
1192
1193                 }
1194                 if (p_ptr->muta2 & MUT2_FLATULENT)
1195                 {
1196 #ifdef JP
1197 info[i++] = "¤¢¤Ê¤¿¤ÏÀ©¸æ¤Ç¤­¤Ê¤¤¶¯Îõ¤ÊÕû¤ò¤³¤¯¡£";
1198 #else
1199                         info[i++] = "You are subject to uncontrollable flatulence.";
1200 #endif
1201
1202                 }
1203                 if (p_ptr->muta2 & MUT2_PROD_MANA)
1204                 {
1205 #ifdef JP
1206 info[i++] = "¤¢¤Ê¤¿¤ÏÀ©¸æÉÔǽ¤ÊËâË¡¤Î¥¨¥Í¥ë¥®¡¼¤òȯ¤·¤Æ¤¤¤ë¡£";
1207 #else
1208                         info[i++] = "You are producing magical energy uncontrollably.";
1209 #endif
1210
1211                 }
1212                 if (p_ptr->muta2 & MUT2_ATT_DEMON)
1213                 {
1214 #ifdef JP
1215 info[i++] = "¤¢¤Ê¤¿¤Ï¥Ç¡¼¥â¥ó¤ò°ú¤­¤Ä¤±¤ë¡£";
1216 #else
1217                         info[i++] = "You attract demons.";
1218 #endif
1219
1220                 }
1221                 if (p_ptr->muta2 & MUT2_SCOR_TAIL)
1222                 {
1223 #ifdef JP
1224 info[i++] = "¤¢¤Ê¤¿¤Ï¥µ¥½¥ê¤Î¿¬Èø¤¬À¸¤¨¤Æ¤¤¤ë¡£(ÆÇ¡¢¥À¥á¡¼¥¸ 3d7)";
1225 #else
1226                         info[i++] = "You have a scorpion tail (poison, 3d7).";
1227 #endif
1228
1229                 }
1230                 if (p_ptr->muta2 & MUT2_HORNS)
1231                 {
1232 #ifdef JP
1233 info[i++] = "¤¢¤Ê¤¿¤Ï³Ñ¤¬À¸¤¨¤Æ¤¤¤ë¡£(¥À¥á¡¼¥¸ 2d6)";
1234 #else
1235                         info[i++] = "You have horns (dam. 2d6).";
1236 #endif
1237
1238                 }
1239                 if (p_ptr->muta2 & MUT2_BEAK)
1240                 {
1241 #ifdef JP
1242 info[i++] = "¤¢¤Ê¤¿¤Ï¥¯¥Á¥Ð¥·¤¬À¸¤¨¤Æ¤¤¤ë¡£(¥À¥á¡¼¥¸ 2d4)";
1243 #else
1244                         info[i++] = "You have a beak (dam. 2d4).";
1245 #endif
1246
1247                 }
1248                 if (p_ptr->muta2 & MUT2_SPEED_FLUX)
1249                 {
1250 #ifdef JP
1251 info[i++] = "¤¢¤Ê¤¿¤Ï¥é¥ó¥À¥à¤ËÁ᤯ư¤¤¤¿¤êÃÙ¤¯Æ°¤¤¤¿¤ê¤¹¤ë¡£";
1252 #else
1253                         info[i++] = "You move faster or slower randomly.";
1254 #endif
1255
1256                 }
1257                 if (p_ptr->muta2 & MUT2_BANISH_ALL)
1258                 {
1259 #ifdef JP
1260 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹¶á¤¯¤Î¥â¥ó¥¹¥¿¡¼¤ò¾ÃÌǤµ¤»¤ë¡£";
1261 #else
1262                         info[i++] = "You sometimes cause nearby creatures to vanish.";
1263 #endif
1264
1265                 }
1266                 if (p_ptr->muta2 & MUT2_EAT_LIGHT)
1267                 {
1268 #ifdef JP
1269 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹¼þ°Ï¤Î¸÷¤òµÛ¼ý¤·¤Æ±ÉÍܤˤ¹¤ë¡£";
1270 #else
1271                         info[i++] = "You sometimes feed off of the light around you.";
1272 #endif
1273
1274                 }
1275                 if (p_ptr->muta2 & MUT2_TRUNK)
1276                 {
1277 #ifdef JP
1278 info[i++] = "¤¢¤Ê¤¿¤Ï¾Ý¤Î¤è¤¦¤ÊÉ¡¤ò»ý¤Ã¤Æ¤¤¤ë¡£(¥À¥á¡¼¥¸ 1d4)";
1279 #else
1280                         info[i++] = "You have an elephantine trunk (dam 1d4).";
1281 #endif
1282
1283                 }
1284                 if (p_ptr->muta2 & MUT2_ATT_ANIMAL)
1285                 {
1286 #ifdef JP
1287 info[i++] = "¤¢¤Ê¤¿¤Ïưʪ¤ò°ú¤­¤Ä¤±¤ë¡£";
1288 #else
1289                         info[i++] = "You attract animals.";
1290 #endif
1291
1292                 }
1293                 if (p_ptr->muta2 & MUT2_TENTACLES)
1294                 {
1295 #ifdef JP
1296 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°­¤Ê¿¨¼ê¤ò»ý¤Ã¤Æ¤¤¤ë¡£(¥À¥á¡¼¥¸ 2d5)";
1297 #else
1298                         info[i++] = "You have evil looking tentacles (dam 2d5).";
1299 #endif
1300
1301                 }
1302                 if (p_ptr->muta2 & MUT2_RAW_CHAOS)
1303                 {
1304 #ifdef JP
1305 info[i++] = "¤¢¤Ê¤¿¤Ï¤·¤Ð¤·¤Ð½ã¥«¥ª¥¹¤ËÊñ¤Þ¤ì¤ë¡£";
1306 #else
1307                         info[i++] = "You occasionally are surrounded with raw chaos.";
1308 #endif
1309
1310                 }
1311                 if (p_ptr->muta2 & MUT2_NORMALITY)
1312                 {
1313 #ifdef JP
1314 info[i++] = "¤¢¤Ê¤¿¤ÏÊÑ°Û¤·¤Æ¤¤¤¿¤¬¡¢²óÉü¤·¤Æ¤­¤Æ¤¤¤ë¡£";
1315 #else
1316                         info[i++] = "You may be mutated, but you're recovering.";
1317 #endif
1318
1319                 }
1320                 if (p_ptr->muta2 & MUT2_WRAITH)
1321                 {
1322 #ifdef JP
1323 info[i++] = "¤¢¤Ê¤¿¤ÎÆùÂΤÏÍ©Â⽤·¤¿¤ê¼ÂÂ⽤·¤¿¤ê¤¹¤ë¡£";
1324 #else
1325                         info[i++] = "You fade in and out of physical reality.";
1326 #endif
1327
1328                 }
1329                 if (p_ptr->muta2 & MUT2_POLY_WOUND)
1330                 {
1331 #ifdef JP
1332 info[i++] = "¤¢¤Ê¤¿¤Î·ò¹¯¤Ï¥«¥ª¥¹¤ÎÎϤ˱ƶÁ¤ò¼õ¤±¤ë¡£";
1333 #else
1334                         info[i++] = "Your health is subject to chaotic forces.";
1335 #endif
1336
1337                 }
1338                 if (p_ptr->muta2 & MUT2_WASTING)
1339                 {
1340 #ifdef JP
1341 info[i++] = "¤¢¤Ê¤¿¤Ï¿ê¼å¤¹¤ë¶²¤í¤·¤¤Éµ¤¤Ë¤«¤«¤Ã¤Æ¤¤¤ë¡£";
1342 #else
1343                         info[i++] = "You have a horrible wasting disease.";
1344 #endif
1345
1346                 }
1347                 if (p_ptr->muta2 & MUT2_ATT_DRAGON)
1348                 {
1349 #ifdef JP
1350 info[i++] = "¤¢¤Ê¤¿¤Ï¥É¥é¥´¥ó¤ò°ú¤­¤Ä¤±¤ë¡£";
1351 #else
1352                         info[i++] = "You attract dragons.";
1353 #endif
1354
1355                 }
1356                 if (p_ptr->muta2 & MUT2_WEIRD_MIND)
1357                 {
1358 #ifdef JP
1359 info[i++] = "¤¢¤Ê¤¿¤ÎÀº¿À¤Ï¥é¥ó¥À¥à¤Ë³ÈÂ礷¤¿¤ê½Ì¾®¤·¤¿¤ê¤·¤Æ¤¤¤ë¡£";
1360 #else
1361                         info[i++] = "Your mind randomly expands and contracts.";
1362 #endif
1363
1364                 }
1365                 if (p_ptr->muta2 & MUT2_NAUSEA)
1366                 {
1367 #ifdef JP
1368 info[i++] = "¤¢¤Ê¤¿¤Î°ß¤ÏÈó¾ï¤ËÍî¤ÁÃ夭¤¬¤Ê¤¤¡£";
1369 #else
1370                         info[i++] = "You have a seriously upset stomach.";
1371 #endif
1372
1373                 }
1374                 if (p_ptr->muta2 & MUT2_CHAOS_GIFT)
1375                 {
1376 #ifdef JP
1377 info[i++] = "¤¢¤Ê¤¿¤Ï¥«¥ª¥¹¤Î¼é¸î°­Ë⤫¤éË«Èþ¤ò¤¦¤±¤È¤ë¡£";
1378 #else
1379                         info[i++] = "Chaos deities give you gifts.";
1380 #endif
1381
1382                 }
1383                 if (p_ptr->muta2 & MUT2_WALK_SHAD)
1384                 {
1385 #ifdef JP
1386 info[i++] = "¤¢¤Ê¤¿¤Ï¤·¤Ð¤·¤Ð¾¤Î¡Ö±Æ¡×¤Ë̤¤¹þ¤à¡£";
1387 #else
1388                         info[i++] = "You occasionally stumble into other shadows.";
1389 #endif
1390
1391                 }
1392                 if (p_ptr->muta2 & MUT2_WARNING)
1393                 {
1394 #ifdef JP
1395 info[i++] = "¤¢¤Ê¤¿¤ÏŨ¤Ë´Ø¤¹¤ë·Ù¹ð¤ò´¶¤¸¤ë¡£";
1396 #else
1397                         info[i++] = "You receive warnings about your foes.";
1398 #endif
1399
1400                 }
1401                 if (p_ptr->muta2 & MUT2_INVULN)
1402                 {
1403 #ifdef JP
1404 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹É餱ÃΤ餺¤Êµ¤Ê¬¤Ë¤Ê¤ë¡£";
1405 #else
1406                         info[i++] = "You occasionally feel invincible.";
1407 #endif
1408
1409                 }
1410                 if (p_ptr->muta2 & MUT2_SP_TO_HP)
1411                 {
1412 #ifdef JP
1413 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹·ì¤¬¶ÚÆù¤Ë¤É¤Ã¤Èή¤ì¤ë¡£";
1414 #else
1415                         info[i++] = "Your blood sometimes rushes to your muscles.";
1416 #endif
1417
1418                 }
1419                 if (p_ptr->muta2 & MUT2_HP_TO_SP)
1420                 {
1421 #ifdef JP
1422 info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹Æ¬¤Ë·ì¤¬¤É¤Ã¤Èή¤ì¤ë¡£";
1423 #else
1424                         info[i++] = "Your blood sometimes rushes to your head.";
1425 #endif
1426
1427                 }
1428                 if (p_ptr->muta2 & MUT2_DISARM)
1429                 {
1430 #ifdef JP
1431 info[i++] = "¤¢¤Ê¤¿¤Ï¤è¤¯¤Ä¤Þ¤Å¤¤¤Æʪ¤òÍî¤È¤¹¡£";
1432 #else
1433                         info[i++] = "You occasionally stumble and drop things.";
1434 #endif
1435
1436                 }
1437         }
1438
1439         if (p_ptr->muta3)
1440         {
1441                 if (p_ptr->muta3 & MUT3_HYPER_STR)
1442                 {
1443 #ifdef JP
1444 info[i++] = "¤¢¤Ê¤¿¤ÏĶ¿ÍŪ¤Ë¶¯¤¤¡£(ÏÓÎÏ+4)";
1445 #else
1446                         info[i++] = "You are superhumanly strong (+4 STR).";
1447 #endif
1448
1449                 }
1450                 if (p_ptr->muta3 & MUT3_PUNY)
1451                 {
1452 #ifdef JP
1453 info[i++] = "¤¢¤Ê¤¿¤Ïµõ¼å¤À¡£(ÏÓÎÏ-4)";
1454 #else
1455                         info[i++] = "You are puny (-4 STR).";
1456 #endif
1457
1458                 }
1459                 if (p_ptr->muta3 & MUT3_HYPER_INT)
1460                 {
1461 #ifdef JP
1462 info[i++] = "¤¢¤Ê¤¿¤ÎǾ¤ÏÀ¸ÂÎ¥³¥ó¥Ô¥å¡¼¥¿¤À¡£(ÃÎǽ¡õ¸­¤µ+4)";
1463 #else
1464                         info[i++] = "Your brain is a living computer (+4 INT/WIS).";
1465 #endif
1466
1467                 }
1468                 if (p_ptr->muta3 & MUT3_MORONIC)
1469                 {
1470 #ifdef JP
1471 info[i++] = "¤¢¤Ê¤¿¤ÏÀº¿ÀÇö¼å¤À¡£(ÃÎǽ¡õ¸­¤µ-4)";
1472 #else
1473                         info[i++] = "You are moronic (-4 INT/WIS).";
1474 #endif
1475
1476                 }
1477                 if (p_ptr->muta3 & MUT3_RESILIENT)
1478                 {
1479 #ifdef JP
1480 info[i++] = "¤¢¤Ê¤¿¤ÏÈó¾ï¤Ë¥¿¥Õ¤À¡£(Âѵ×+4)";
1481 #else
1482                         info[i++] = "You are very resilient (+4 CON).";
1483 #endif
1484
1485                 }
1486                 if (p_ptr->muta3 & MUT3_XTRA_FAT)
1487                 {
1488 #ifdef JP
1489 info[i++] = "¤¢¤Ê¤¿¤Ï¶Ëü¤ËÂÀ¤Ã¤Æ¤¤¤ë¡£(Âѵ×+2,¥¹¥Ô¡¼¥É-2)";
1490 #else
1491                         info[i++] = "You are extremely fat (+2 CON, -2 speed).";
1492 #endif
1493
1494                 }
1495                 if (p_ptr->muta3 & MUT3_ALBINO)
1496                 {
1497 #ifdef JP
1498 info[i++] = "¤¢¤Ê¤¿¤Ï¥¢¥ë¥Ó¥Î¤À¡£(Âѵ×-4)";
1499 #else
1500                         info[i++] = "You are albino (-4 CON).";
1501 #endif
1502
1503                 }
1504                 if (p_ptr->muta3 & MUT3_FLESH_ROT)
1505                 {
1506 #ifdef JP
1507 info[i++] = "¤¢¤Ê¤¿¤ÎÆùÂΤÏÉåÇÔ¤·¤Æ¤¤¤ë¡£(Âѵ×-2,Ì¥ÎÏ-1)";
1508 #else
1509                         info[i++] = "Your flesh is rotting (-2 CON, -1 CHR).";
1510 #endif
1511
1512                 }
1513                 if (p_ptr->muta3 & MUT3_SILLY_VOI)
1514                 {
1515 #ifdef JP
1516 info[i++] = "¤¢¤Ê¤¿¤ÎÀ¼¤Ï´ÖÈ´¤±¤Ê¥­¡¼¥­¡¼À¼¤À¡£(Ì¥ÎÏ-4)";
1517 #else
1518                         info[i++] = "Your voice is a silly squeak (-4 CHR).";
1519 #endif
1520
1521                 }
1522                 if (p_ptr->muta3 & MUT3_BLANK_FAC)
1523                 {
1524 #ifdef JP
1525 info[i++] = "¤¢¤Ê¤¿¤Ï¤Î¤Ã¤Ú¤é¤Ü¤¦¤À¡£(Ì¥ÎÏ-1)";
1526 #else
1527                         info[i++] = "Your face is featureless (-1 CHR).";
1528 #endif
1529
1530                 }
1531                 if (p_ptr->muta3 & MUT3_ILL_NORM)
1532                 {
1533 #ifdef JP
1534 info[i++] = "¤¢¤Ê¤¿¤Ï¸¸±Æ¤Ëʤ¤ï¤ì¤Æ¤¤¤ë¡£";
1535 #else
1536                         info[i++] = "Your appearance is masked with illusion.";
1537 #endif
1538
1539                 }
1540                 if (p_ptr->muta3 & MUT3_XTRA_EYES)
1541                 {
1542 #ifdef JP
1543 info[i++] = "¤¢¤Ê¤¿¤Ï;ʬ¤ËÆó¤Ä¤ÎÌܤò»ý¤Ã¤Æ¤¤¤ë¡£(õº÷+15)";
1544 #else
1545                         info[i++] = "You have an extra pair of eyes (+15 search).";
1546 #endif
1547
1548                 }
1549                 if (p_ptr->muta3 & MUT3_MAGIC_RES)
1550                 {
1551 #ifdef JP
1552 info[i++] = "¤¢¤Ê¤¿¤ÏËâË¡¤Ø¤ÎÂÑÀ­¤ò¤â¤Ã¤Æ¤¤¤ë¡£";
1553 #else
1554                         info[i++] = "You are resistant to magic.";
1555 #endif
1556
1557                 }
1558                 if (p_ptr->muta3 & MUT3_XTRA_NOIS)
1559                 {
1560 #ifdef JP
1561 info[i++] = "¤¢¤Ê¤¿¤ÏÊѤʲ»¤òȯ¤·¤Æ¤¤¤ë¡£(±£Ì©-3)";
1562 #else
1563                         info[i++] = "You make a lot of strange noise (-3 stealth).";
1564 #endif
1565
1566                 }
1567                 if (p_ptr->muta3 & MUT3_INFRAVIS)
1568                 {
1569 #ifdef JP
1570 info[i++] = "¤¢¤Ê¤¿¤ÏÁÇÀ²¤é¤·¤¤ÀÖ³°Àþ»ëÎϤò»ý¤Ã¤Æ¤¤¤ë¡£(+3)";
1571 #else
1572                         info[i++] = "You have remarkable infravision (+3).";
1573 #endif
1574
1575                 }
1576                 if (p_ptr->muta3 & MUT3_XTRA_LEGS)
1577                 {
1578 #ifdef JP
1579 info[i++] = "¤¢¤Ê¤¿¤Ï;ʬ¤ËÆóËܤέ¤¬À¸¤¨¤Æ¤¤¤ë¡£(²Ã®+3)";
1580 #else
1581                         info[i++] = "You have an extra pair of legs (+3 speed).";
1582 #endif
1583
1584                 }
1585                 if (p_ptr->muta3 & MUT3_SHORT_LEG)
1586                 {
1587 #ifdef JP
1588 info[i++] = "¤¢¤Ê¤¿¤Î­¤Ïû¤¤Æ͵¯¤À¡£(²Ã®-3)";
1589 #else
1590                         info[i++] = "Your legs are short stubs (-3 speed).";
1591 #endif
1592
1593                 }
1594                 if (p_ptr->muta3 & MUT3_ELEC_TOUC)
1595                 {
1596 #ifdef JP
1597 info[i++] = "¤¢¤Ê¤¿¤Î·ì´É¤Ë¤ÏÅÅή¤¬Î®¤ì¤Æ¤¤¤ë¡£";
1598 #else
1599                         info[i++] = "Electricity is running through your veins.";
1600 #endif
1601
1602                 }
1603                 if (p_ptr->muta3 & MUT3_FIRE_BODY)
1604                 {
1605 #ifdef JP
1606 info[i++] = "¤¢¤Ê¤¿¤ÎÂΤϱê¤Ë¤Ä¤Ä¤Þ¤ì¤Æ¤¤¤ë¡£";
1607 #else
1608                         info[i++] = "Your body is enveloped in flames.";
1609 #endif
1610                 }
1611                 if (p_ptr->muta3 & MUT3_WART_SKIN)
1612                 {
1613 #ifdef JP
1614 info[i++] = "¤¢¤Ê¤¿¤ÎÈ©¤Ï¥¤¥Ü¤ËÈï¤ï¤ì¤Æ¤¤¤ë¡£(Ì¥ÎÏ-2, AC+5)";
1615 #else
1616                         info[i++] = "Your skin is covered with warts (-2 CHR, +5 AC).";
1617 #endif
1618
1619                 }
1620                 if (p_ptr->muta3 & MUT3_SCALES)
1621                 {
1622 #ifdef JP
1623 info[i++] = "¤¢¤Ê¤¿¤ÎÈ©¤ÏÎڤˤʤäƤ¤¤ë¡£(Ì¥ÎÏ-1, AC+10)";
1624 #else
1625                         info[i++] = "Your skin has turned into scales (-1 CHR, +10 AC).";
1626 #endif
1627
1628                 }
1629                 if (p_ptr->muta3 & MUT3_IRON_SKIN)
1630                 {
1631 #ifdef JP
1632 info[i++] = "¤¢¤Ê¤¿¤ÎÈ©¤ÏÅ´¤Ç¤Ç¤­¤Æ¤¤¤ë¡£(´ïÍÑ-1, AC+25)";
1633 #else
1634                         info[i++] = "Your skin is made of steel (-1 DEX, +25 AC).";
1635 #endif
1636
1637                 }
1638                 if (p_ptr->muta3 & MUT3_WINGS)
1639                 {
1640 #ifdef JP
1641 info[i++] = "¤¢¤Ê¤¿¤Ï±©¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
1642 #else
1643                         info[i++] = "You have wings.";
1644 #endif
1645
1646                 }
1647                 if (p_ptr->muta3 & MUT3_FEARLESS)
1648                 {
1649                         /* Unnecessary */
1650                 }
1651                 if (p_ptr->muta3 & MUT3_REGEN)
1652                 {
1653                         /* Unnecessary */
1654                 }
1655                 if (p_ptr->muta3 & MUT3_ESP)
1656                 {
1657                         /* Unnecessary */
1658                 }
1659                 if (p_ptr->muta3 & MUT3_LIMBER)
1660                 {
1661 #ifdef JP
1662 info[i++] = "¤¢¤Ê¤¿¤ÎÂΤÏÈó¾ï¤Ë¤·¤Ê¤ä¤«¤À¡£(´ïÍÑ+3)";
1663 #else
1664                         info[i++] = "Your body is very limber (+3 DEX).";
1665 #endif
1666
1667                 }
1668                 if (p_ptr->muta3 & MUT3_ARTHRITIS)
1669                 {
1670 #ifdef JP
1671 info[i++] = "¤¢¤Ê¤¿¤Ï¤¤¤Ä¤â´ØÀá¤ËÄˤߤò´¶¤¸¤Æ¤¤¤ë¡£(´ïÍÑ-3)";
1672 #else
1673                         info[i++] = "Your joints ache constantly (-3 DEX).";
1674 #endif
1675
1676                 }
1677                 if (p_ptr->muta3 & MUT3_VULN_ELEM)
1678                 {
1679 #ifdef JP
1680 info[i++] = "¤¢¤Ê¤¿¤Ï¸µÁǤι¶·â¤Ë¼å¤¤¡£";
1681 #else
1682                         info[i++] = "You are susceptible to damage from the elements.";
1683 #endif
1684
1685                 }
1686                 if (p_ptr->muta3 & MUT3_MOTION)
1687                 {
1688 #ifdef JP
1689 info[i++] = "¤¢¤Ê¤¿¤ÎÆ°ºî¤ÏÀµ³Î¤ÇÎ϶¯¤¤¡£(±£Ì©+1)";
1690 #else
1691                         info[i++] = "Your movements are precise and forceful (+1 STL).";
1692 #endif
1693
1694                 }
1695                 if (p_ptr->muta3 & MUT3_GOOD_LUCK)
1696                 {
1697 #ifdef JP
1698 info[i++] = "¤¢¤Ê¤¿¤ÏÇò¤¤¥ª¡¼¥é¤Ë¤Ä¤Ä¤Þ¤ì¤Æ¤¤¤ë¡£";
1699 #else
1700                         info[i++] = "There is a white aura surrounding you.";
1701 #endif
1702                 }
1703                 if (p_ptr->muta3 & MUT3_BAD_LUCK)
1704                 {
1705 #ifdef JP
1706 info[i++] = "¤¢¤Ê¤¿¤Ï¹õ¤¤¥ª¡¼¥é¤Ë¤Ä¤Ä¤Þ¤ì¤Æ¤¤¤ë¡£";
1707 #else
1708                         info[i++] = "There is a black aura surrounding you.";
1709 #endif
1710                 }
1711         }
1712
1713         if (p_ptr->blind)
1714         {
1715 #ifdef JP
1716 info[i++] = "¤¢¤Ê¤¿¤ÏÌܤ¬¸«¤¨¤Ê¤¤¡£";
1717 #else
1718                 info[i++] = "You cannot see.";
1719 #endif
1720
1721         }
1722         if (p_ptr->confused)
1723         {
1724 #ifdef JP
1725 info[i++] = "¤¢¤Ê¤¿¤Ïº®Í𤷤Ƥ¤¤ë¡£";
1726 #else
1727                 info[i++] = "You are confused.";
1728 #endif
1729
1730         }
1731         if (p_ptr->afraid)
1732         {
1733 #ifdef JP
1734 info[i++] = "¤¢¤Ê¤¿¤Ï¶²Éݤ˿¯¤µ¤ì¤Æ¤¤¤ë¡£";
1735 #else
1736                 info[i++] = "You are terrified.";
1737 #endif
1738
1739         }
1740         if (p_ptr->cut)
1741         {
1742 #ifdef JP
1743 info[i++] = "¤¢¤Ê¤¿¤Ï½Ð·ì¤·¤Æ¤¤¤ë¡£";
1744 #else
1745                 info[i++] = "You are bleeding.";
1746 #endif
1747
1748         }
1749         if (p_ptr->stun)
1750         {
1751 #ifdef JP
1752 info[i++] = "¤¢¤Ê¤¿¤Ï¤â¤¦¤í¤¦¤È¤·¤Æ¤¤¤ë¡£";
1753 #else
1754                 info[i++] = "You are stunned.";
1755 #endif
1756
1757         }
1758         if (p_ptr->poisoned)
1759         {
1760 #ifdef JP
1761 info[i++] = "¤¢¤Ê¤¿¤ÏÆǤ˿¯¤µ¤ì¤Æ¤¤¤ë¡£";
1762 #else
1763                 info[i++] = "You are poisoned.";
1764 #endif
1765
1766         }
1767         if (p_ptr->image)
1768         {
1769 #ifdef JP
1770 info[i++] = "¤¢¤Ê¤¿¤Ï¸¸³Ð¤ò¸«¤Æ¤¤¤ë¡£";
1771 #else
1772                 info[i++] = "You are hallucinating.";
1773 #endif
1774
1775         }
1776         if (p_ptr->aggravate)
1777         {
1778 #ifdef JP
1779 info[i++] = "¤¢¤Ê¤¿¤Ï¥â¥ó¥¹¥¿¡¼¤òÅܤ餻¤Æ¤¤¤ë¡£";
1780 #else
1781                 info[i++] = "You aggravate monsters.";
1782 #endif
1783
1784         }
1785         if (p_ptr->teleport)
1786         {
1787 #ifdef JP
1788 info[i++] = "¤¢¤Ê¤¿¤Î°ÌÃ֤ϤҤ¸¤ç¤¦¤ËÉÔ°ÂÄê¤À¡£";
1789 #else
1790                 info[i++] = "Your position is very uncertain.";
1791 #endif
1792
1793         }
1794         if (p_ptr->blessed)
1795         {
1796 #ifdef JP
1797 info[i++] = "¤¢¤Ê¤¿¤Ï¸øÀµ¤µ¤ò´¶¤¸¤Æ¤¤¤ë¡£";
1798 #else
1799                 info[i++] = "You feel rightous.";
1800 #endif
1801
1802         }
1803         if (p_ptr->hero)
1804         {
1805 #ifdef JP
1806 info[i++] = "¤¢¤Ê¤¿¤Ï¥Ò¡¼¥í¡¼µ¤Ê¬¤À¡£";
1807 #else
1808                 info[i++] = "You feel heroic.";
1809 #endif
1810
1811         }
1812         if (p_ptr->shero)
1813         {
1814 #ifdef JP
1815 info[i++] = "¤¢¤Ê¤¿¤ÏÀïÆ®¶¸¤À¡£";
1816 #else
1817                 info[i++] = "You are in a battle rage.";
1818 #endif
1819
1820         }
1821         if (p_ptr->protevil)
1822         {
1823 #ifdef JP
1824 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°­¤Ê¤ë¸ºß¤«¤é¼é¤é¤ì¤Æ¤¤¤ë¡£";
1825 #else
1826                 info[i++] = "You are protected from evil.";
1827 #endif
1828
1829         }
1830         if (p_ptr->shield)
1831         {
1832 #ifdef JP
1833 info[i++] = "¤¢¤Ê¤¿¤Ï¿ÀÈë¤Î¥·¡¼¥ë¥É¤Ç¼é¤é¤ì¤Æ¤¤¤ë¡£";
1834 #else
1835                 info[i++] = "You are protected by a mystic shield.";
1836 #endif
1837
1838         }
1839         if (p_ptr->invuln)
1840         {
1841 #ifdef JP
1842 info[i++] = "¤¢¤Ê¤¿¤Ï¸½ºß½ý¤Ä¤«¤Ê¤¤¡£";
1843 #else
1844                 info[i++] = "You are temporarily invulnerable.";
1845 #endif
1846
1847         }
1848         if (p_ptr->wraith_form)
1849         {
1850 #ifdef JP
1851 info[i++] = "¤¢¤Ê¤¿¤Ï°ì»þŪ¤ËÍ©Â⽤·¤Æ¤¤¤ë¡£";
1852 #else
1853                 info[i++] = "You are temporarily incorporeal.";
1854 #endif
1855
1856         }
1857         if (p_ptr->special_attack & ATTACK_CONFUSE)
1858         {
1859 #ifdef JP
1860 info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤ÏÀÖ¤¯µ±¤¤¤Æ¤¤¤ë¡£";
1861 #else
1862                 info[i++] = "Your hands are glowing dull red.";
1863 #endif
1864
1865         }
1866         if (p_ptr->special_attack & ATTACK_FIRE)
1867         {
1868 #ifdef JP
1869 info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤Ï²Ð±ê¤Ëʤ¤ï¤ì¤Æ¤¤¤ë¡£";
1870 #else
1871                 info[i++] = "You can strike enemy with flame.";
1872 #endif
1873
1874         }
1875         if (p_ptr->special_attack & ATTACK_COLD)
1876         {
1877 #ifdef JP
1878 info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤ÏÎ䵤¤Ëʤ¤ï¤ì¤Æ¤¤¤ë¡£";
1879 #else
1880                 info[i++] = "You can strike enemy with cold.";
1881 #endif
1882
1883         }
1884         if (p_ptr->special_attack & ATTACK_ACID)
1885         {
1886 #ifdef JP
1887 info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤Ï»À¤Ëʤ¤ï¤ì¤Æ¤¤¤ë¡£";
1888 #else
1889                 info[i++] = "You can strike enemy with acid.";
1890 #endif
1891
1892         }
1893         if (p_ptr->special_attack & ATTACK_ELEC)
1894         {
1895 #ifdef JP
1896 info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤ÏÅÅ·â¤Ëʤ¤ï¤ì¤Æ¤¤¤ë¡£";
1897 #else
1898                 info[i++] = "You can strike enemy with electoric shock.";
1899 #endif
1900
1901         }
1902         if (p_ptr->special_attack & ATTACK_POIS)
1903         {
1904 #ifdef JP
1905 info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤ÏÆǤËʤ¤ï¤ì¤Æ¤¤¤ë¡£";
1906 #else
1907                 info[i++] = "You can strike enemy with poison.";
1908 #endif
1909
1910         }
1911         if (p_ptr->special_attack & ATTACK_CONFUSE)
1912         {
1913 #ifdef JP
1914 info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤ÏÀÖ¤¯µ±¤¤¤Æ¤¤¤ë¡£";
1915 #else
1916                 info[i++] = "Your hands are glowing dull red.";
1917 #endif
1918
1919         }
1920         if (p_ptr->special_attack & ATTACK_CONFUSE)
1921         {
1922 #ifdef JP
1923 info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤ÏÀÖ¤¯µ±¤¤¤Æ¤¤¤ë¡£";
1924 #else
1925                 info[i++] = "Your hands are glowing dull red.";
1926 #endif
1927
1928         }
1929         switch (p_ptr->action)
1930         {
1931                 case ACTION_SEARCH:
1932 #ifdef JP
1933 info[i++] = "¤¢¤Ê¤¿¤Ï¤Ò¤¸¤ç¤¦¤ËÃí°Õ¿¼¤¯¼þ°Ï¤ò¸«ÅϤ·¤Æ¤¤¤ë¡£";
1934 #else
1935                         info[i++] = "You are looking around very carefully.";
1936 #endif
1937                         break;
1938         }
1939         if (p_ptr->new_spells)
1940         {
1941 #ifdef JP
1942 info[i++] = "¤¢¤Ê¤¿¤Ï¼öʸ¤äµ§¤ê¤ò³Ø¤Ö¤³¤È¤¬¤Ç¤­¤ë¡£";
1943 #else
1944                 info[i++] = "You can learn some spells/prayers.";
1945 #endif
1946
1947         }
1948         if (p_ptr->word_recall)
1949         {
1950 #ifdef JP
1951 info[i++] = "¤¢¤Ê¤¿¤Ï¤¹¤°¤Ëµ¢´Ô¤¹¤ë¤À¤í¤¦¡£";
1952 #else
1953                 info[i++] = "You will soon be recalled.";
1954 #endif
1955
1956         }
1957         if (p_ptr->see_infra)
1958         {
1959 #ifdef JP
1960 info[i++] = "¤¢¤Ê¤¿¤ÎÆ·¤ÏÀÖ³°Àþ¤ËÉÒ´¶¤Ç¤¢¤ë¡£";
1961 #else
1962                 info[i++] = "Your eyes are sensitive to infrared light.";
1963 #endif
1964
1965         }
1966         if (p_ptr->see_inv)
1967         {
1968 #ifdef JP
1969 info[i++] = "¤¢¤Ê¤¿¤ÏÆ©ÌÀ¤Ê¥â¥ó¥¹¥¿¡¼¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
1970 #else
1971                 info[i++] = "You can see invisible creatures.";
1972 #endif
1973
1974         }
1975         if (p_ptr->ffall)
1976         {
1977 #ifdef JP
1978 info[i++] = "¤¢¤Ê¤¿¤ÏÈô¤Ö¤³¤È¤¬¤Ç¤­¤ë¡£";
1979 #else
1980                 info[i++] = "You can fly.";
1981 #endif
1982
1983         }
1984         if (p_ptr->free_act)
1985         {
1986 #ifdef JP
1987 info[i++] = "¤¢¤Ê¤¿¤ÏËãáãÃΤ餺¤Î¸ú²Ì¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
1988 #else
1989                 info[i++] = "You have free action.";
1990 #endif
1991
1992         }
1993         if (p_ptr->regenerate)
1994         {
1995 #ifdef JP
1996 info[i++] = "¤¢¤Ê¤¿¤ÏÁÇÁ᤯ÂÎÎϤò²óÉü¤¹¤ë¡£";
1997 #else
1998                 info[i++] = "You regenerate quickly.";
1999 #endif
2000
2001         }
2002         if (p_ptr->slow_digest)
2003         {
2004 #ifdef JP
2005 info[i++] = "¤¢¤Ê¤¿¤Ï¿©Íߤ¬¾¯¤Ê¤¤¡£";
2006 #else
2007                 info[i++] = "Your appetite is small.";
2008 #endif
2009
2010         }
2011         if (p_ptr->telepathy)
2012         {
2013 #ifdef JP
2014 info[i++] = "¤¢¤Ê¤¿¤ÏĶǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
2015 #else
2016                 info[i++] = "You have ESP.";
2017 #endif
2018
2019         }
2020         if (p_ptr->hold_life)
2021         {
2022 #ifdef JP
2023 info[i++] = "¤¢¤Ê¤¿¤Ï¼«¸Ê¤ÎÀ¸Ì¿ÎϤò¤·¤Ã¤«¤ê¤È°Ý»ý¤¹¤ë¡£";
2024 #else
2025                 info[i++] = "You have a firm hold on your life force.";
2026 #endif
2027
2028         }
2029         if (p_ptr->reflect)
2030         {
2031 #ifdef JP
2032 info[i++] = "¤¢¤Ê¤¿¤ÏÌð¤ä¥Ü¥ë¥È¤òÈ¿¼Í¤¹¤ë¡£";
2033 #else
2034                 info[i++] = "You reflect arrows and bolts.";
2035 #endif
2036
2037         }
2038         if (p_ptr->sh_fire)
2039         {
2040 #ifdef JP
2041 info[i++] = "¤¢¤Ê¤¿¤Ï±ê¤Î¥ª¡¼¥é¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£";
2042 #else
2043                 info[i++] = "You are surrounded with a fiery aura.";
2044 #endif
2045
2046         }
2047         if (p_ptr->sh_elec)
2048         {
2049 #ifdef JP
2050 info[i++] = "¤¢¤Ê¤¿¤ÏÅŵ¤¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£";
2051 #else
2052                 info[i++] = "You are surrounded with electricity.";
2053 #endif
2054
2055         }
2056         if (p_ptr->sh_cold)
2057         {
2058 #ifdef JP
2059 info[i++] = "¤¢¤Ê¤¿¤ÏÎ䵤¤Î¥ª¡¼¥é¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£";
2060 #else
2061                 info[i++] = "You are surrounded with a coldly aura.";
2062 #endif
2063
2064         }
2065         if (p_ptr->anti_magic)
2066         {
2067 #ifdef JP
2068 info[i++] = "¤¢¤Ê¤¿¤ÏÈ¿ËâË¡¥·¡¼¥ë¥É¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£";
2069 #else
2070                 info[i++] = "You are surrounded by an anti-magic shell.";
2071 #endif
2072
2073         }
2074         if (p_ptr->anti_tele)
2075         {
2076 #ifdef JP
2077 info[i++] = "¤¢¤Ê¤¿¤Ï¥Æ¥ì¥Ý¡¼¥È¤Ç¤­¤Ê¤¤¡£";
2078 #else
2079                 info[i++] = "You cannot teleport.";
2080 #endif
2081
2082         }
2083         if (p_ptr->lite)
2084         {
2085 #ifdef JP
2086 info[i++] = "¤¢¤Ê¤¿¤Î¿ÈÂΤϸ÷¤Ã¤Æ¤¤¤ë¡£";
2087 #else
2088                 info[i++] = "You are carrying a permanent light.";
2089 #endif
2090
2091         }
2092         if (p_ptr->warning)
2093         {
2094 #ifdef JP
2095 info[i++] = "¤¢¤Ê¤¿¤Ï¹ÔÆ°¤ÎÁ°¤Ë´í¸±¤ò»¡ÃΤ¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
2096 #else
2097                 info[i++] = "You will be warn before dangerous action.";
2098 #endif
2099
2100         }
2101         if (p_ptr->dec_mana)
2102         {
2103 #ifdef JP
2104 info[i++] = "¤¢¤Ê¤¿¤Ï¾¯¤Ê¤¤¾ÃÈñËâÎϤÇËâË¡¤ò¾§¤¨¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
2105 #else
2106                 info[i++] = "You can cast spell with fewer mana.";
2107 #endif
2108
2109         }
2110         if (p_ptr->easy_spell)
2111         {
2112 #ifdef JP
2113 info[i++] = "¤¢¤Ê¤¿¤ÏÄ㤤¼ºÇÔΨ¤ÇËâË¡¤ò¾§¤¨¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
2114 #else
2115                 info[i++] = "Fail rate of your magic is decreased.";
2116 #endif
2117
2118         }
2119         if (p_ptr->heavy_spell)
2120         {
2121 #ifdef JP
2122 info[i++] = "¤¢¤Ê¤¿¤Ï¹â¤¤¼ºÇÔΨ¤ÇËâË¡¤ò¾§¤¨¤Ê¤±¤ì¤Ð¤¤¤±¤Ê¤¤¡£";
2123 #else
2124                 info[i++] = "Fail rate of your magic is incresed.";
2125 #endif
2126
2127         }
2128         if (p_ptr->mighty_throw)
2129         {
2130 #ifdef JP
2131 info[i++] = "¤¢¤Ê¤¿¤Ï¶¯¤¯Êª¤òÅꤲ¤ë¡£";
2132 #else
2133                 info[i++] = "You can throw objects powerfully.";
2134 #endif
2135
2136         }
2137
2138         if (p_ptr->immune_acid)
2139         {
2140 #ifdef JP
2141 info[i++] = "¤¢¤Ê¤¿¤Ï»À¤ËÂФ¹¤ë´°Á´¤Ê¤ëÌȱ֤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2142 #else
2143                 info[i++] = "You are completely immune to acid.";
2144 #endif
2145
2146         }
2147         else if ((p_ptr->resist_acid) && (p_ptr->oppose_acid))
2148         {
2149 #ifdef JP
2150 info[i++] = "¤¢¤Ê¤¿¤Ï»À¤Ø¤Î¶¯ÎϤÊÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2151 #else
2152                 info[i++] = "You resist acid exceptionally well.";
2153 #endif
2154
2155         }
2156         else if ((p_ptr->resist_acid) || (p_ptr->oppose_acid))
2157         {
2158 #ifdef JP
2159 info[i++] = "¤¢¤Ê¤¿¤Ï»À¤Ø¤ÎÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2160 #else
2161                 info[i++] = "You are resistant to acid.";
2162 #endif
2163
2164         }
2165
2166         if (p_ptr->immune_elec)
2167         {
2168 #ifdef JP
2169 info[i++] = "¤¢¤Ê¤¿¤ÏÅÅ·â¤ËÂФ¹¤ë´°Á´¤Ê¤ëÌȱ֤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2170 #else
2171                 info[i++] = "You are completely immune to lightning.";
2172 #endif
2173
2174         }
2175         else if ((p_ptr->resist_elec) && (p_ptr->oppose_elec))
2176         {
2177 #ifdef JP
2178 info[i++] = "¤¢¤Ê¤¿¤ÏÅÅ·â¤Ø¤Î¶¯ÎϤÊÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2179 #else
2180                 info[i++] = "You resist lightning exceptionally well.";
2181 #endif
2182
2183         }
2184         else if ((p_ptr->resist_elec) || (p_ptr->oppose_elec))
2185         {
2186 #ifdef JP
2187 info[i++] = "¤¢¤Ê¤¿¤ÏÅÅ·â¤Ø¤ÎÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2188 #else
2189                 info[i++] = "You are resistant to lightning.";
2190 #endif
2191
2192         }
2193
2194         if (prace_is_(RACE_ANDROID) && !p_ptr->immune_elec)
2195         {
2196 #ifdef JP
2197 info[i++] = "¤¢¤Ê¤¿¤ÏÅÅ·â¤Ë¼å¤¤¡£";
2198 #else
2199                 info[i++] = "You are susceptible to damage from lightning.";
2200 #endif
2201
2202         }
2203
2204         if (p_ptr->immune_fire)
2205         {
2206 #ifdef JP
2207 info[i++] = "¤¢¤Ê¤¿¤Ï²Ð¤ËÂФ¹¤ë´°Á´¤Ê¤ëÌȱ֤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2208 #else
2209                 info[i++] = "You are completely immune to fire.";
2210 #endif
2211
2212         }
2213         else if ((p_ptr->resist_fire) && (p_ptr->oppose_fire))
2214         {
2215 #ifdef JP
2216 info[i++] = "¤¢¤Ê¤¿¤Ï²Ð¤Ø¤Î¶¯ÎϤÊÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2217 #else
2218                 info[i++] = "You resist fire exceptionally well.";
2219 #endif
2220
2221         }
2222         else if ((p_ptr->resist_fire) || (p_ptr->oppose_fire))
2223         {
2224 #ifdef JP
2225 info[i++] = "¤¢¤Ê¤¿¤Ï²Ð¤Ø¤ÎÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2226 #else
2227                 info[i++] = "You are resistant to fire.";
2228 #endif
2229
2230         }
2231
2232         if (prace_is_(RACE_ENT) && !p_ptr->immune_fire)
2233         {
2234 #ifdef JP
2235 info[i++] = "¤¢¤Ê¤¿¤Ï²Ð¤Ë¼å¤¤¡£";
2236 #else
2237                 info[i++] = "You are susceptible to damage from fire.";
2238 #endif
2239
2240         }
2241
2242         if (p_ptr->immune_cold)
2243         {
2244 #ifdef JP
2245 info[i++] = "¤¢¤Ê¤¿¤ÏÎ䵤¤ËÂФ¹¤ë´°Á´¤Ê¤ëÌȱ֤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2246 #else
2247                 info[i++] = "You are completely immune to cold.";
2248 #endif
2249
2250         }
2251         else if ((p_ptr->resist_cold) && (p_ptr->oppose_cold))
2252         {
2253 #ifdef JP
2254 info[i++] = "¤¢¤Ê¤¿¤ÏÎ䵤¤Ø¤Î¶¯ÎϤÊÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2255 #else
2256                 info[i++] = "You resist cold exceptionally well.";
2257 #endif
2258
2259         }
2260         else if ((p_ptr->resist_cold) || (p_ptr->oppose_cold))
2261         {
2262 #ifdef JP
2263 info[i++] = "¤¢¤Ê¤¿¤ÏÎ䵤¤Ø¤ÎÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2264 #else
2265                 info[i++] = "You are resistant to cold.";
2266 #endif
2267
2268         }
2269
2270         if ((p_ptr->resist_pois) && (p_ptr->oppose_pois))
2271         {
2272 #ifdef JP
2273 info[i++] = "¤¢¤Ê¤¿¤ÏÆǤؤζ¯ÎϤÊÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2274 #else
2275                 info[i++] = "You resist poison exceptionally well.";
2276 #endif
2277
2278         }
2279         else if ((p_ptr->resist_pois) || (p_ptr->oppose_pois))
2280         {
2281 #ifdef JP
2282 info[i++] = "¤¢¤Ê¤¿¤ÏÆǤؤÎÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2283 #else
2284                 info[i++] = "You are resistant to poison.";
2285 #endif
2286
2287         }
2288
2289         if (p_ptr->resist_lite)
2290         {
2291 #ifdef JP
2292 info[i++] = "¤¢¤Ê¤¿¤ÏÁ®¸÷¤Ø¤ÎÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2293 #else
2294                 info[i++] = "You are resistant to bright light.";
2295 #endif
2296
2297         }
2298
2299         if (prace_is_(RACE_VAMPIRE) || prace_is_(RACE_S_FAIRY) || (p_ptr->mimic_form == MIMIC_VAMPIRE))
2300         {
2301 #ifdef JP
2302 info[i++] = "¤¢¤Ê¤¿¤ÏÁ®¸÷¤Ë¼å¤¤¡£";
2303 #else
2304                 info[i++] = "You are susceptible to damage from bright light.";
2305 #endif
2306
2307         }
2308
2309         if (prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE) || p_ptr->wraith_form)
2310         {
2311 #ifdef JP
2312 info[i++] = "¤¢¤Ê¤¿¤Ï°Å¹õ¤ËÂФ¹¤ë´°Á´¤Ê¤ëÌȱ֤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2313 #else
2314                 info[i++] = "You are completely immune to darkness.";
2315 #endif
2316         }
2317
2318         else if (p_ptr->resist_dark)
2319         {
2320 #ifdef JP
2321 info[i++] = "¤¢¤Ê¤¿¤Ï°Å¹õ¤Ø¤ÎÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2322 #else
2323                 info[i++] = "You are resistant to darkness.";
2324 #endif
2325
2326         }
2327         if (p_ptr->resist_conf)
2328         {
2329 #ifdef JP
2330 info[i++] = "¤¢¤Ê¤¿¤Ïº®Íð¤Ø¤ÎÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2331 #else
2332                 info[i++] = "You are resistant to confusion.";
2333 #endif
2334
2335         }
2336         if (p_ptr->resist_sound)
2337         {
2338 #ifdef JP
2339 info[i++] = "¤¢¤Ê¤¿¤Ï²»ÇȤξ׷â¤Ø¤ÎÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2340 #else
2341                 info[i++] = "You are resistant to sonic attacks.";
2342 #endif
2343
2344         }
2345         if (p_ptr->resist_disen)
2346         {
2347 #ifdef JP
2348 info[i++] = "¤¢¤Ê¤¿¤ÏÎô²½¤Ø¤ÎÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2349 #else
2350                 info[i++] = "You are resistant to disenchantment.";
2351 #endif
2352
2353         }
2354         if (p_ptr->resist_chaos)
2355         {
2356 #ifdef JP
2357 info[i++] = "¤¢¤Ê¤¿¤Ï¥«¥ª¥¹¤ÎÎϤؤÎÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2358 #else
2359                 info[i++] = "You are resistant to chaos.";
2360 #endif
2361
2362         }
2363         if (p_ptr->resist_shard)
2364         {
2365 #ifdef JP
2366 info[i++] = "¤¢¤Ê¤¿¤ÏÇËÊҤι¶·â¤Ø¤ÎÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2367 #else
2368                 info[i++] = "You are resistant to blasts of shards.";
2369 #endif
2370
2371         }
2372         if (p_ptr->resist_nexus)
2373         {
2374 #ifdef JP
2375 info[i++] = "¤¢¤Ê¤¿¤Ï°ø²Ìº®Íð¤Î¹¶·â¤Ø¤ÎÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2376 #else
2377                 info[i++] = "You are resistant to nexus attacks.";
2378 #endif
2379
2380         }
2381
2382         if (prace_is_(RACE_SPECTRE))
2383         {
2384 #ifdef JP
2385 info[i++] = "¤¢¤Ê¤¿¤ÏÃϹö¤ÎÎϤòµÛ¼ý¤Ç¤­¤ë¡£";
2386 #else
2387                 info[i++] = "You can drain nether forces.";
2388 #endif
2389
2390         }
2391         else if (p_ptr->resist_neth)
2392         {
2393 #ifdef JP
2394 info[i++] = "¤¢¤Ê¤¿¤ÏÃϹö¤ÎÎϤؤÎÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2395 #else
2396                 info[i++] = "You are resistant to nether forces.";
2397 #endif
2398
2399         }
2400         if (p_ptr->resist_fear)
2401         {
2402 #ifdef JP
2403 info[i++] = "¤¢¤Ê¤¿¤ÏÁ´¤¯¶²Éݤò´¶¤¸¤Ê¤¤¡£";
2404 #else
2405                 info[i++] = "You are completely fearless.";
2406 #endif
2407
2408         }
2409         if (p_ptr->resist_blind)
2410         {
2411 #ifdef JP
2412 info[i++] = "¤¢¤Ê¤¿¤ÎÌܤÏÌÕÌܤؤÎÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2413 #else
2414                 info[i++] = "Your eyes are resistant to blindness.";
2415 #endif
2416
2417         }
2418         if (p_ptr->resist_time)
2419         {
2420 #ifdef JP
2421 info[i++] = "¤¢¤Ê¤¿¤Ï»þ´ÖµÕž¤Ø¤ÎÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
2422 #else
2423                 info[i++] = "You are resistant to time.";
2424 #endif
2425
2426         }
2427
2428         if (p_ptr->sustain_str)
2429         {
2430 #ifdef JP
2431 info[i++] = "¤¢¤Ê¤¿¤ÎÏÓÎϤϰݻý¤µ¤ì¤Æ¤¤¤ë¡£";
2432 #else
2433                 info[i++] = "Your strength is sustained.";
2434 #endif
2435
2436         }
2437         if (p_ptr->sustain_int)
2438         {
2439 #ifdef JP
2440 info[i++] = "¤¢¤Ê¤¿¤ÎÃÎǽ¤Ï°Ý»ý¤µ¤ì¤Æ¤¤¤ë¡£";
2441 #else
2442                 info[i++] = "Your intelligence is sustained.";
2443 #endif
2444
2445         }
2446         if (p_ptr->sustain_wis)
2447         {
2448 #ifdef JP
2449 info[i++] = "¤¢¤Ê¤¿¤Î¸­¤µ¤Ï°Ý»ý¤µ¤ì¤Æ¤¤¤ë¡£";
2450 #else
2451                 info[i++] = "Your wisdom is sustained.";
2452 #endif
2453
2454         }
2455         if (p_ptr->sustain_con)
2456         {
2457 #ifdef JP
2458 info[i++] = "¤¢¤Ê¤¿¤ÎÂѵ×ÎϤϰݻý¤µ¤ì¤Æ¤¤¤ë¡£";
2459 #else
2460                 info[i++] = "Your constitution is sustained.";
2461 #endif
2462
2463         }
2464         if (p_ptr->sustain_dex)
2465         {
2466 #ifdef JP
2467 info[i++] = "¤¢¤Ê¤¿¤Î´ïÍѤµ¤Ï°Ý»ý¤µ¤ì¤Æ¤¤¤ë¡£";
2468 #else
2469                 info[i++] = "Your dexterity is sustained.";
2470 #endif
2471
2472         }
2473         if (p_ptr->sustain_chr)
2474         {
2475 #ifdef JP
2476 info[i++] = "¤¢¤Ê¤¿¤ÎÌ¥ÎϤϰݻý¤µ¤ì¤Æ¤¤¤ë¡£";
2477 #else
2478                 info[i++] = "Your charisma is sustained.";
2479 #endif
2480
2481         }
2482
2483         if (f1 & (TR1_STR))
2484         {
2485 #ifdef JP
2486 info[i++] = "¤¢¤Ê¤¿¤ÎÏÓÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2487 #else
2488                 info[i++] = "Your strength is affected by your equipment.";
2489 #endif
2490
2491         }
2492         if (f1 & (TR1_INT))
2493         {
2494 #ifdef JP
2495 info[i++] = "¤¢¤Ê¤¿¤ÎÃÎǽ¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2496 #else
2497                 info[i++] = "Your intelligence is affected by your equipment.";
2498 #endif
2499
2500         }
2501         if (f1 & (TR1_WIS))
2502         {
2503 #ifdef JP
2504 info[i++] = "¤¢¤Ê¤¿¤Î¸­¤µ¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2505 #else
2506                 info[i++] = "Your wisdom is affected by your equipment.";
2507 #endif
2508
2509         }
2510         if (f1 & (TR1_DEX))
2511         {
2512 #ifdef JP
2513 info[i++] = "¤¢¤Ê¤¿¤Î´ïÍѤµ¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2514 #else
2515                 info[i++] = "Your dexterity is affected by your equipment.";
2516 #endif
2517
2518         }
2519         if (f1 & (TR1_CON))
2520         {
2521 #ifdef JP
2522 info[i++] = "¤¢¤Ê¤¿¤ÎÂѵ×ÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2523 #else
2524                 info[i++] = "Your constitution is affected by your equipment.";
2525 #endif
2526
2527         }
2528         if (f1 & (TR1_CHR))
2529         {
2530 #ifdef JP
2531 info[i++] = "¤¢¤Ê¤¿¤ÎÌ¥ÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2532 #else
2533                 info[i++] = "Your charisma is affected by your equipment.";
2534 #endif
2535
2536         }
2537
2538         if (f1 & (TR1_STEALTH))
2539         {
2540 #ifdef JP
2541 info[i++] = "¤¢¤Ê¤¿¤Î±£Ì©¹ÔưǽÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2542 #else
2543                 info[i++] = "Your stealth is affected by your equipment.";
2544 #endif
2545
2546         }
2547         if (f1 & (TR1_SEARCH))
2548         {
2549 #ifdef JP
2550 info[i++] = "¤¢¤Ê¤¿¤Îõº÷ǽÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2551 #else
2552                 info[i++] = "Your searching ability is affected by your equipment.";
2553 #endif
2554
2555         }
2556         if (f1 & (TR1_INFRA))
2557         {
2558 #ifdef JP
2559 info[i++] = "¤¢¤Ê¤¿¤ÎÀÖ³°Àþ»ëÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2560 #else
2561                 info[i++] = "Your infravision is affected by your equipment.";
2562 #endif
2563
2564         }
2565         if (f1 & (TR1_TUNNEL))
2566         {
2567 #ifdef JP
2568 info[i++] = "¤¢¤Ê¤¿¤ÎºÎ·¡Ç½ÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2569 #else
2570                 info[i++] = "Your digging ability is affected by your equipment.";
2571 #endif
2572
2573         }
2574         if (f1 & (TR1_SPEED))
2575         {
2576 #ifdef JP
2577 info[i++] = "¤¢¤Ê¤¿¤Î¥¹¥Ô¡¼¥É¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2578 #else
2579                 info[i++] = "Your speed is affected by your equipment.";
2580 #endif
2581
2582         }
2583         if (f1 & (TR1_BLOWS))
2584         {
2585 #ifdef JP
2586 info[i++] = "¤¢¤Ê¤¿¤Î¹¶·â®ÅÙ¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2587 #else
2588                 info[i++] = "Your attack speed is affected by your equipment.";
2589 #endif
2590
2591         }
2592
2593
2594         /* Access the current weapon */
2595         o_ptr = &inventory[INVEN_RARM];
2596
2597         /* Analyze the weapon */
2598         if (o_ptr->k_idx)
2599         {
2600                 /* Indicate Blessing */
2601                 if (f3 & (TR3_BLESSED))
2602                 {
2603 #ifdef JP
2604 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¿À¤Î½ËÊ¡¤ò¼õ¤±¤Æ¤¤¤ë¡£";
2605 #else
2606                         info[i++] = "Your weapon has been blessed by the gods.";
2607 #endif
2608
2609                 }
2610
2611                 if (f1 & (TR1_CHAOTIC))
2612                 {
2613 #ifdef JP
2614 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥í¥°¥ë¥¹¤Îħ¤Î°À­¤ò¤â¤Ä¡£";
2615 #else
2616                         info[i++] = "Your weapon is branded with the Sign of Logrus.";
2617 #endif
2618
2619                 }
2620
2621                 /* Hack */
2622                 if (f1 & (TR1_IMPACT))
2623                 {
2624 #ifdef JP
2625 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏÂÇ·â¤ÇÃϿ̤òȯÀ¸¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
2626 #else
2627                         info[i++] = "The impact of your weapon can cause earthquakes.";
2628 #endif
2629
2630                 }
2631
2632                 if (f1 & (TR1_VORPAL))
2633                 {
2634 #ifdef JP
2635 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏÈó¾ï¤Ë±Ô¤¤¡£";
2636 #else
2637                         info[i++] = "Your weapon is very sharp.";
2638 #endif
2639
2640                 }
2641
2642                 if (f1 & (TR1_VAMPIRIC))
2643                 {
2644 #ifdef JP
2645 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤«¤éÀ¸Ì¿ÎϤòµÛ¼ý¤¹¤ë¡£";
2646 #else
2647                         info[i++] = "Your weapon drains life from your foes.";
2648 #endif
2649
2650                 }
2651
2652                 /* Special "Attack Bonuses" */
2653                 if (f1 & (TR1_BRAND_ACID))
2654                 {
2655 #ifdef JP
2656 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤òÍϤ«¤¹¡£";
2657 #else
2658                         info[i++] = "Your weapon melts your foes.";
2659 #endif
2660
2661                 }
2662                 if (f1 & (TR1_BRAND_ELEC))
2663                 {
2664 #ifdef JP
2665 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤ò´¶ÅŤµ¤»¤ë¡£";
2666 #else
2667                         info[i++] = "Your weapon shocks your foes.";
2668 #endif
2669
2670                 }
2671                 if (f1 & (TR1_BRAND_FIRE))
2672                 {
2673 #ifdef JP
2674 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤òdz¤ä¤¹¡£";
2675 #else
2676                         info[i++] = "Your weapon burns your foes.";
2677 #endif
2678
2679                 }
2680                 if (f1 & (TR1_BRAND_COLD))
2681                 {
2682 #ifdef JP
2683 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤òÅà¤é¤»¤ë¡£";
2684 #else
2685                         info[i++] = "Your weapon freezes your foes.";
2686 #endif
2687
2688                 }
2689                 if (f1 & (TR1_BRAND_POIS))
2690                 {
2691 #ifdef JP
2692 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤òÆǤǿ¯¤¹¡£";
2693 #else
2694                         info[i++] = "Your weapon poisons your foes.";
2695 #endif
2696
2697                 }
2698
2699                 /* Special "slay" flags */
2700                 if (f1 & (TR1_SLAY_ANIMAL))
2701                 {
2702 #ifdef JP
2703 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ïưʪ¤ËÂФ·¤Æ¶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
2704 #else
2705                         info[i++] = "Your weapon strikes at animals with extra force.";
2706 #endif
2707
2708                 }
2709                 if (f1 & (TR1_SLAY_EVIL))
2710                 {
2711 #ifdef JP
2712 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¼Ù°­¤Ê¤ë¸ºß¤ËÂФ·¤Æ¶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
2713 #else
2714                         info[i++] = "Your weapon strikes at evil with extra force.";
2715 #endif
2716
2717                 }
2718                 if (f1 & (TR1_SLAY_UNDEAD))
2719                 {
2720 #ifdef JP
2721 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥¢¥ó¥Ç¥Ã¥É¤ËÂФ·¤Æ¿ÀÀ»¤Ê¤ëÎϤòȯ´ø¤¹¤ë¡£";
2722 #else
2723                         info[i++] = "Your weapon strikes at undead with holy wrath.";
2724 #endif
2725
2726                 }
2727                 if (f1 & (TR1_SLAY_DEMON))
2728                 {
2729 #ifdef JP
2730 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥Ç¡¼¥â¥ó¤ËÂФ·¤Æ¿ÀÀ»¤Ê¤ëÎϤòȯ´ø¤¹¤ë¡£";
2731 #else
2732                         info[i++] = "Your weapon strikes at demons with holy wrath.";
2733 #endif
2734
2735                 }
2736                 if (f1 & (TR1_SLAY_ORC))
2737                 {
2738 #ifdef JP
2739 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥ª¡¼¥¯¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
2740 #else
2741                         info[i++] = "Your weapon is especially deadly against orcs.";
2742 #endif
2743
2744                 }
2745                 if (f1 & (TR1_SLAY_TROLL))
2746                 {
2747 #ifdef JP
2748 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥È¥í¥ë¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
2749 #else
2750                         info[i++] = "Your weapon is especially deadly against trolls.";
2751 #endif
2752
2753                 }
2754                 if (f1 & (TR1_SLAY_GIANT))
2755                 {
2756 #ifdef JP
2757 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥¸¥ã¥¤¥¢¥ó¥È¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
2758 #else
2759                         info[i++] = "Your weapon is especially deadly against giants.";
2760 #endif
2761
2762                 }
2763                 /* Special "kill" flags */
2764                 if (f1 & (TR1_KILL_DRAGON))
2765                 {
2766 #ifdef JP
2767 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥É¥é¥´¥ó¤ÎŷŨ¤Ç¤¢¤ë¡£";
2768 #else
2769                         info[i++] = "Your weapon is a great bane of dragons.";
2770 #endif
2771
2772                 }
2773                 else if (f1 & (TR1_SLAY_DRAGON))
2774                 {
2775 #ifdef JP
2776 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥É¥é¥´¥ó¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
2777 #else
2778                         info[i++] = "Your weapon is especially deadly against dragons.";
2779 #endif
2780
2781                 }
2782
2783                 if (f1 & (TR1_FORCE_WEAPON))
2784                 {
2785 #ifdef JP
2786 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏMP¤ò»È¤Ã¤Æ¹¶·â¤¹¤ë¡£";
2787 #else
2788                         info[i++] = "Your weapon causes greate damages using your MP.";
2789 #endif
2790
2791                 }
2792                 if (f2 & (TR2_THROW))
2793                 {
2794 #ifdef JP
2795 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏÅꤲ¤ä¤¹¤¤¡£";
2796 #else
2797                         info[i++] = "Your weapon can be thrown well.";
2798 #endif
2799                 }
2800         }
2801
2802
2803         /* Save the screen */
2804         screen_save();
2805
2806         /* Erase the screen */
2807         for (k = 1; k < 24; k++) prt("", k, 13);
2808
2809         /* Label the information */
2810 #ifdef JP
2811 prt("        ¤¢¤Ê¤¿¤Î¾õÂÖ:", 1, 15);
2812 #else
2813         prt("     Your Attributes:", 1, 15);
2814 #endif
2815
2816
2817         /* We will print on top of the map (column 13) */
2818         for (k = 2, j = 0; j < i; j++)
2819         {
2820                 /* Show the info */
2821                 prt(info[j], k++, 15);
2822
2823                 /* Every 20 entries (lines 2 to 21), start over */
2824                 if ((k == 22) && (j+1 < i))
2825                 {
2826 #ifdef JP
2827 prt("-- Â³¤¯ --", k, 15);
2828 #else
2829                         prt("-- more --", k, 15);
2830 #endif
2831
2832                         inkey();
2833                         for (; k > 2; k--) prt("", k, 15);
2834                 }
2835         }
2836
2837         /* Pause */
2838 #ifdef JP
2839 prt("[²¿¤«¥­¡¼¤ò²¡¤¹¤È¥²¡¼¥à¤ËÌá¤ê¤Þ¤¹]", k, 13);
2840 #else
2841         prt("[Press any key to continue]", k, 13);
2842 #endif
2843
2844         inkey();
2845
2846         /* Restore the screen */
2847         screen_load();
2848 }
2849
2850
2851 static int report_magics_aux(int dur)
2852 {
2853         if (dur <= 5)
2854         {
2855                 return 0;
2856         }
2857         else if (dur <= 10)
2858         {
2859                 return 1;
2860         }
2861         else if (dur <= 20)
2862         {
2863                 return 2;
2864         }
2865         else if (dur <= 50)
2866         {
2867                 return 3;
2868         }
2869         else if (dur <= 100)
2870         {
2871                 return 4;
2872         }
2873         else if (dur <= 200)
2874         {
2875                 return 5;
2876         }
2877         else
2878         {
2879                 return 6;
2880         }
2881 }
2882
2883 static cptr report_magic_durations[] =
2884 {
2885 #ifdef JP
2886 "¤´¤¯Ã»¤¤´Ö",
2887 "¾¯¤·¤Î´Ö",
2888 "¤·¤Ð¤é¤¯¤Î´Ö",
2889 "¿¾¯Ä¹¤¤´Ö",
2890 "Ť¤´Ö",
2891 "Èó¾ï¤ËŤ¤´Ö",
2892 "¿®¤¸Æñ¤¤¤Û¤ÉŤ¤´Ö",
2893 "¥â¥ó¥¹¥¿¡¼¤ò¹¶·â¤¹¤ë¤Þ¤Ç"
2894 #else
2895         "for a short time",
2896         "for a little while",
2897         "for a while",
2898         "for a long while",
2899         "for a long time",
2900         "for a very long time",
2901         "for an incredibly long time",
2902         "until you hit a monster"
2903 #endif
2904
2905 };
2906
2907
2908 /*
2909  * Report all currently active magical effects.
2910  */
2911 void report_magics(void)
2912 {
2913         int     i = 0, j, k;
2914         char    Dummy[80];
2915         cptr    info[128];
2916         int     info2[128];
2917
2918
2919         if (p_ptr->blind)
2920         {
2921                 info2[i]  = report_magics_aux(p_ptr->blind);
2922 #ifdef JP
2923 info[i++] = "¤¢¤Ê¤¿¤ÏÌܤ¬¸«¤¨¤Ê¤¤¡£";
2924 #else
2925                 info[i++] = "You cannot see";
2926 #endif
2927
2928         }
2929         if (p_ptr->confused)
2930         {
2931                 info2[i]  = report_magics_aux(p_ptr->confused);
2932 #ifdef JP
2933 info[i++] = "¤¢¤Ê¤¿¤Ïº®Í𤷤Ƥ¤¤ë¡£";
2934 #else
2935                 info[i++] = "You are confused";
2936 #endif
2937
2938         }
2939         if (p_ptr->afraid)
2940         {
2941                 info2[i]  = report_magics_aux(p_ptr->afraid);
2942 #ifdef JP
2943 info[i++] = "¤¢¤Ê¤¿¤Ï¶²Éݤ˿¯¤µ¤ì¤Æ¤¤¤ë¡£";
2944 #else
2945                 info[i++] = "You are terrified";
2946 #endif
2947
2948         }
2949         if (p_ptr->poisoned)
2950         {
2951                 info2[i]  = report_magics_aux(p_ptr->poisoned);
2952 #ifdef JP
2953 info[i++] = "¤¢¤Ê¤¿¤ÏÆǤ˿¯¤µ¤ì¤Æ¤¤¤ë¡£";
2954 #else
2955                 info[i++] = "You are poisoned";
2956 #endif
2957
2958         }
2959         if (p_ptr->image)
2960         {
2961                 info2[i]  = report_magics_aux(p_ptr->image);
2962 #ifdef JP
2963 info[i++] = "¤¢¤Ê¤¿¤Ï¸¸³Ð¤ò¸«¤Æ¤¤¤ë¡£";
2964 #else
2965                 info[i++] = "You are hallucinating";
2966 #endif
2967
2968         }
2969         if (p_ptr->blessed)
2970         {
2971                 info2[i]  = report_magics_aux(p_ptr->blessed);
2972 #ifdef JP
2973 info[i++] = "¤¢¤Ê¤¿¤Ï¸øÀµ¤µ¤ò´¶¤¸¤Æ¤¤¤ë¡£";
2974 #else
2975                 info[i++] = "You feel rightous";
2976 #endif
2977
2978         }
2979         if (p_ptr->hero)
2980         {
2981                 info2[i]  = report_magics_aux(p_ptr->hero);
2982 #ifdef JP
2983 info[i++] = "¤¢¤Ê¤¿¤Ï¥Ò¡¼¥í¡¼µ¤Ê¬¤À¡£";
2984 #else
2985                 info[i++] = "You feel heroic";
2986 #endif
2987
2988         }
2989         if (p_ptr->shero)
2990         {
2991                 info2[i]  = report_magics_aux(p_ptr->shero);
2992 #ifdef JP
2993 info[i++] = "¤¢¤Ê¤¿¤ÏÀïÆ®¶¸¤À¡£";
2994 #else
2995                 info[i++] = "You are in a battle rage";
2996 #endif
2997
2998         }
2999         if (p_ptr->protevil)
3000         {
3001                 info2[i]  = report_magics_aux(p_ptr->protevil);
3002 #ifdef JP
3003 info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°­¤Ê¤ë¸ºß¤«¤é¼é¤é¤ì¤Æ¤¤¤ë¡£";
3004 #else
3005                 info[i++] = "You are protected from evil";
3006 #endif
3007
3008         }
3009         if (p_ptr->shield)
3010         {
3011                 info2[i]  = report_magics_aux(p_ptr->shield);
3012 #ifdef JP
3013 info[i++] = "¤¢¤Ê¤¿¤Ï¿ÀÈë¤Î¥·¡¼¥ë¥É¤Ç¼é¤é¤ì¤Æ¤¤¤ë¡£";
3014 #else
3015                 info[i++] = "You are protected by a mystic shield";
3016 #endif
3017
3018         }
3019         if (p_ptr->invuln)
3020         {
3021                 info2[i]  = report_magics_aux(p_ptr->invuln);
3022 #ifdef JP
3023 info[i++] = "̵Ũ¤Ç¤¤¤é¤ì¤ë¡£";
3024 #else
3025                 info[i++] = "You are invulnerable";
3026 #endif
3027
3028         }
3029         if (p_ptr->wraith_form)
3030         {
3031                 info2[i]  = report_magics_aux(p_ptr->wraith_form);
3032 #ifdef JP
3033 info[i++] = "Í©Âβ½¤Ç¤­¤ë¡£";
3034 #else
3035                 info[i++] = "You are incorporeal";
3036 #endif
3037
3038         }
3039         if (p_ptr->special_attack & ATTACK_CONFUSE)
3040         {
3041                 info2[i]  = 7;
3042 #ifdef JP
3043 info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤ÏÀÖ¤¯µ±¤¤¤Æ¤¤¤ë¡£";
3044 #else
3045                 info[i++] = "Your hands are glowing dull red.";
3046 #endif
3047
3048         }
3049         if (p_ptr->word_recall)
3050         {
3051                 info2[i]  = report_magics_aux(p_ptr->word_recall);
3052 #ifdef JP
3053 info[i++] = "¤Î¸åµ¢´Ô¤Î¾Û¤òȯư¤¹¤ë¡£";
3054 #else
3055                 info[i++] = "You waiting to be recalled";
3056 #endif
3057
3058         }
3059         if (p_ptr->oppose_acid)
3060         {
3061                 info2[i]  = report_magics_aux(p_ptr->oppose_acid);
3062 #ifdef JP
3063 info[i++] = "¤¢¤Ê¤¿¤Ï»À¤Ø¤ÎÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
3064 #else
3065                 info[i++] = "You are resistant to acid";
3066 #endif
3067
3068         }
3069         if (p_ptr->oppose_elec)
3070         {
3071                 info2[i]  = report_magics_aux(p_ptr->oppose_elec);
3072 #ifdef JP
3073 info[i++] = "¤¢¤Ê¤¿¤ÏÅÅ·â¤Ø¤ÎÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
3074 #else
3075                 info[i++] = "You are resistant to lightning";
3076 #endif
3077
3078         }
3079         if (p_ptr->oppose_fire)
3080         {
3081                 info2[i]  = report_magics_aux(p_ptr->oppose_fire);
3082 #ifdef JP
3083 info[i++] = "¤¢¤Ê¤¿¤Ï²Ð¤Ø¤ÎÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
3084 #else
3085                 info[i++] = "You are resistant to fire";
3086 #endif
3087
3088         }
3089         if (p_ptr->oppose_cold)
3090         {
3091                 info2[i]  = report_magics_aux(p_ptr->oppose_cold);
3092 #ifdef JP
3093 info[i++] = "¤¢¤Ê¤¿¤ÏÎ䵤¤Ø¤ÎÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
3094 #else
3095                 info[i++] = "You are resistant to cold";
3096 #endif
3097
3098         }
3099         if (p_ptr->oppose_pois)
3100         {
3101                 info2[i]  = report_magics_aux(p_ptr->oppose_pois);
3102 #ifdef JP
3103 info[i++] = "¤¢¤Ê¤¿¤ÏÆǤؤÎÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
3104 #else
3105                 info[i++] = "You are resistant to poison";
3106 #endif
3107
3108         }
3109
3110         /* Save the screen */
3111         screen_save();
3112
3113         /* Erase the screen */
3114         for (k = 1; k < 24; k++) prt("", k, 13);
3115
3116         /* Label the information */
3117 #ifdef JP
3118 prt("           ËâË¡        :", 1, 15);
3119 #else
3120         prt("     Your Current Magic:", 1, 15);
3121 #endif
3122
3123
3124         /* We will print on top of the map (column 13) */
3125         for (k = 2, j = 0; j < i; j++)
3126         {
3127                 /* Show the info */
3128 #ifdef JP
3129 sprintf(Dummy, "¤¢¤Ê¤¿¤Ï%s%s", info[j],
3130 #else
3131                 sprintf(Dummy, "%s %s.", info[j],
3132 #endif
3133
3134                         report_magic_durations[info2[j]]);
3135                 prt(Dummy, k++, 15);
3136
3137                 /* Every 20 entries (lines 2 to 21), start over */
3138                 if ((k == 22) && (j + 1 < i))
3139                 {
3140 #ifdef JP
3141 prt("-- Â³¤¯ --", k, 15);
3142 #else
3143                         prt("-- more --", k, 15);
3144 #endif
3145
3146                         inkey();
3147                         for (; k > 2; k--) prt("", k, 15);
3148                 }
3149         }
3150
3151         /* Pause */
3152 #ifdef JP
3153 prt("[²¿¤«¥­¡¼¤ò²¡¤¹¤È¥²¡¼¥à¤ËÌá¤ê¤Þ¤¹]", k, 13);
3154 #else
3155         prt("[Press any key to continue]", k, 13);
3156 #endif
3157
3158         inkey();
3159
3160         /* Restore the screen */
3161         screen_load();
3162 }
3163
3164
3165 /*
3166  * Detect all traps on current panel
3167  */
3168 bool detect_traps(int range)
3169 {
3170         int             x, y;
3171         bool            detect = FALSE;
3172         cave_type       *c_ptr;
3173
3174
3175         if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3176
3177         /* Scan the current panel */
3178         for (y = 1; y < cur_hgt - 1; y++)
3179         {
3180                 for (x = 1; x <= cur_wid - 1; x++)
3181                 {
3182                         if (distance(py, px, y, x) > range) continue;
3183
3184                         /* Access the grid */
3185                         c_ptr = &cave[y][x];
3186
3187                         /* Detect invisible traps */
3188                         if (c_ptr->info & CAVE_TRAP)
3189                         {
3190                                 /* Pick a trap */
3191                                 pick_trap(y, x);
3192                         }
3193
3194                         /* Detect traps */
3195                         if (is_trap(c_ptr->feat))
3196                         {
3197                                 /* Hack -- Memorize */
3198                                 c_ptr->info |= (CAVE_MARK);
3199
3200                                 /* Redraw */
3201                                 lite_spot(y, x);
3202
3203                                 /* Obvious */
3204                                 detect = TRUE;
3205                         }
3206                 }
3207         }
3208
3209         if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT)) detect = FALSE;
3210
3211         /* Describe */
3212         if (detect)
3213         {
3214 #ifdef JP
3215 msg_print("¥È¥é¥Ã¥×¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3216 #else
3217                 msg_print("You sense the presence of traps!");
3218 #endif
3219
3220         }
3221
3222         /* Result */
3223         return (detect);
3224 }
3225
3226
3227
3228 /*
3229  * Detect all doors on current panel
3230  */
3231 bool detect_doors(int range)
3232 {
3233         int y, x;
3234
3235         bool detect = FALSE;
3236
3237         cave_type *c_ptr;
3238
3239         if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3240
3241         /* Scan the panel */
3242         for (y = 1; y < cur_hgt - 1; y++)
3243         {
3244                 for (x = 1; x < cur_wid - 1; x++)
3245                 {
3246                         if (distance(py, px, y, x) > range) continue;
3247
3248                         c_ptr = &cave[y][x];
3249
3250                         /* Detect secret doors */
3251                         if (c_ptr->feat == FEAT_SECRET)
3252                         {
3253                                 /* Pick a door */
3254                                 place_closed_door(y, x);
3255                         }
3256
3257                         /* Detect doors */
3258                         if (((c_ptr->feat >= FEAT_DOOR_HEAD) &&
3259                              (c_ptr->feat <= FEAT_DOOR_TAIL)) ||
3260                             ((c_ptr->feat == FEAT_OPEN) ||
3261                              (c_ptr->feat == FEAT_BROKEN)))
3262                         {
3263                                 /* Hack -- Memorize */
3264                                 c_ptr->info |= (CAVE_MARK);
3265
3266                                 /* Redraw */
3267                                 lite_spot(y, x);
3268
3269                                 /* Obvious */
3270                                 detect = TRUE;
3271                         }
3272                 }
3273         }
3274
3275         if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT)) detect = FALSE;
3276
3277         /* Describe */
3278         if (detect)
3279         {
3280 #ifdef JP
3281 msg_print("¥É¥¢¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3282 #else
3283                 msg_print("You sense the presence of doors!");
3284 #endif
3285
3286         }
3287
3288         /* Result */
3289         return (detect);
3290 }
3291
3292
3293 /*
3294  * Detect all stairs on current panel
3295  */
3296 bool detect_stairs(int range)
3297 {
3298         int y, x;
3299
3300         bool detect = FALSE;
3301
3302         cave_type *c_ptr;
3303
3304         if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3305
3306         /* Scan the panel */
3307         for (y = 1; y < cur_hgt - 1; y++)
3308         {
3309                 for (x = 1; x < cur_wid - 1; x++)
3310                 {
3311                         if (distance(py, px, y, x) > range) continue;
3312
3313                         c_ptr = &cave[y][x];
3314
3315                         /* Detect stairs */
3316                         if ((c_ptr->feat == FEAT_LESS) ||
3317                             (c_ptr->feat == FEAT_LESS_LESS) ||
3318                             (c_ptr->feat == FEAT_MORE) ||
3319                             (c_ptr->feat == FEAT_MORE_MORE) ||
3320                             (c_ptr->feat == FEAT_ENTRANCE))
3321                         {
3322                                 /* Hack -- Memorize */
3323                                 c_ptr->info |= (CAVE_MARK);
3324
3325                                 /* Redraw */
3326                                 lite_spot(y, x);
3327
3328                                 /* Obvious */
3329                                 detect = TRUE;
3330                         }
3331                 }
3332         }
3333
3334         if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT)) detect = FALSE;
3335
3336         /* Describe */
3337         if (detect)
3338         {
3339 #ifdef JP
3340 msg_print("³¬Ãʤθºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3341 #else
3342                 msg_print("You sense the presence of stairs!");
3343 #endif
3344
3345         }
3346
3347         /* Result */
3348         return (detect);
3349 }
3350
3351
3352 /*
3353  * Detect any treasure on the current panel
3354  */
3355 bool detect_treasure(int range)
3356 {
3357         int y, x;
3358
3359         bool detect = FALSE;
3360
3361         cave_type *c_ptr;
3362
3363         if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3364
3365         /* Scan the current panel */
3366         for (y = 1; y < cur_hgt; y++)
3367         {
3368                 for (x = 1; x < cur_wid; x++)
3369                 {
3370                         if (distance(py, px, y, x) > range) continue;
3371
3372                         c_ptr = &cave[y][x];
3373
3374                         /* Notice embedded gold */
3375                         if ((c_ptr->feat == FEAT_MAGMA_H) ||
3376                             (c_ptr->feat == FEAT_QUARTZ_H))
3377                         {
3378                                 /* Expose the gold */
3379                                 c_ptr->feat += 0x02;
3380                         }
3381
3382                         /* Magma/Quartz + Known Gold */
3383                         if ((c_ptr->feat == FEAT_MAGMA_K) ||
3384                             (c_ptr->feat == FEAT_QUARTZ_K))
3385                         {
3386                                 /* Hack -- Memorize */
3387                                 c_ptr->info |= (CAVE_MARK);
3388
3389                                 /* Redraw */
3390                                 lite_spot(y, x);
3391
3392                                 /* Detect */
3393                                 detect = TRUE;
3394                         }
3395                 }
3396         }
3397
3398         if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT+6)) detect = FALSE;
3399
3400         /* Describe */
3401         if (detect)
3402         {
3403 #ifdef JP
3404 msg_print("Ë䢤µ¤ì¤¿ºâÊõ¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3405 #else
3406                 msg_print("You sense the presence of buried treasure!");
3407 #endif
3408
3409         }
3410
3411
3412         /* Result */
3413         return (detect);
3414 }
3415
3416
3417
3418 /*
3419  * Detect all "gold" objects on the current panel
3420  */
3421 bool detect_objects_gold(int range)
3422 {
3423         int i, y, x;
3424         int range2 = range;
3425
3426         bool detect = FALSE;
3427
3428         if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range2 /= 3;
3429
3430         /* Scan objects */
3431         for (i = 1; i < o_max; i++)
3432         {
3433                 object_type *o_ptr = &o_list[i];
3434
3435                 /* Skip dead objects */
3436                 if (!o_ptr->k_idx) continue;
3437
3438                 /* Skip held objects */
3439                 if (o_ptr->held_m_idx) continue;
3440
3441                 /* Location */
3442                 y = o_ptr->iy;
3443                 x = o_ptr->ix;
3444
3445                 /* Only detect nearby objects */
3446                 if (distance(py, px, y, x) > range2) continue;
3447
3448                 /* Detect "gold" objects */
3449                 if (o_ptr->tval == TV_GOLD)
3450                 {
3451                         /* Hack -- memorize it */
3452                         o_ptr->marked = TRUE;
3453
3454                         /* Redraw */
3455                         lite_spot(y, x);
3456
3457                         /* Detect */
3458                         detect = TRUE;
3459                 }
3460         }
3461
3462         if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT+6)) detect = FALSE;
3463
3464         /* Describe */
3465         if (detect)
3466         {
3467 #ifdef JP
3468 msg_print("ºâÊõ¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3469 #else
3470                 msg_print("You sense the presence of treasure!");
3471 #endif
3472
3473         }
3474
3475         if (detect_monsters_string(range, "$"))
3476         {
3477                 detect = TRUE;
3478         }
3479
3480         /* Result */
3481         return (detect);
3482 }
3483
3484
3485 /*
3486  * Detect all "normal" objects on the current panel
3487  */
3488 bool detect_objects_normal(int range)
3489 {
3490         int i, y, x;
3491         int range2 = range;
3492
3493         bool detect = FALSE;
3494
3495         if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range2 /= 3;
3496
3497         /* Scan objects */
3498         for (i = 1; i < o_max; i++)
3499         {
3500                 object_type *o_ptr = &o_list[i];
3501
3502                 /* Skip dead objects */
3503                 if (!o_ptr->k_idx) continue;
3504
3505                 /* Skip held objects */
3506                 if (o_ptr->held_m_idx) continue;
3507
3508                 /* Location */
3509                 y = o_ptr->iy;
3510                 x = o_ptr->ix;
3511
3512                 /* Only detect nearby objects */
3513                 if (distance(py, px, y, x) > range2) continue;
3514
3515                 /* Detect "real" objects */
3516                 if (o_ptr->tval != TV_GOLD)
3517                 {
3518                         /* Hack -- memorize it */
3519                         o_ptr->marked = TRUE;
3520
3521                         /* Redraw */
3522                         lite_spot(y, x);
3523
3524                         /* Detect */
3525                         detect = TRUE;
3526                 }
3527         }
3528
3529         if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT+6)) detect = FALSE;
3530
3531         /* Describe */
3532         if (detect)
3533         {
3534 #ifdef JP
3535 msg_print("¥¢¥¤¥Æ¥à¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3536 #else
3537                 msg_print("You sense the presence of objects!");
3538 #endif
3539
3540         }
3541
3542         if (detect_monsters_string(range, "!=?|/`"))
3543         {
3544                 detect = TRUE;
3545         }
3546
3547         /* Result */
3548         return (detect);
3549 }
3550
3551
3552 /*
3553  * Detect all "magic" objects on the current panel.
3554  *
3555  * This will light up all spaces with "magic" items, including artifacts,
3556  * ego-items, potions, scrolls, books, rods, wands, staves, amulets, rings,
3557  * and "enchanted" items of the "good" variety.
3558  *
3559  * It can probably be argued that this function is now too powerful.
3560  */
3561 bool detect_objects_magic(int range)
3562 {
3563         int i, y, x, tv;
3564
3565         bool detect = FALSE;
3566
3567         if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3568
3569         /* Scan all objects */
3570         for (i = 1; i < o_max; i++)
3571         {
3572                 object_type *o_ptr = &o_list[i];
3573
3574                 /* Skip dead objects */
3575                 if (!o_ptr->k_idx) continue;
3576
3577                 /* Skip held objects */
3578                 if (o_ptr->held_m_idx) continue;
3579
3580                 /* Location */
3581                 y = o_ptr->iy;
3582                 x = o_ptr->ix;
3583
3584                 /* Only detect nearby objects */
3585                 if (distance(py, px, y, x) > range) continue;
3586
3587                 /* Examine the tval */
3588                 tv = o_ptr->tval;
3589
3590                 /* Artifacts, misc magic items, or enchanted wearables */
3591                 if (artifact_p(o_ptr) ||
3592                         ego_item_p(o_ptr) ||
3593                         o_ptr->art_name ||
3594                     (tv == TV_WHISTLE) ||
3595                     (tv == TV_AMULET) ||
3596                         (tv == TV_RING) ||
3597                     (tv == TV_STAFF) ||
3598                         (tv == TV_WAND) ||
3599                         (tv == TV_ROD) ||
3600                     (tv == TV_SCROLL) ||
3601                         (tv == TV_POTION) ||
3602                     (tv == TV_LIFE_BOOK) ||
3603                         (tv == TV_SORCERY_BOOK) ||
3604                     (tv == TV_NATURE_BOOK) ||
3605                         (tv == TV_CHAOS_BOOK) ||
3606                     (tv == TV_DEATH_BOOK) ||
3607                     (tv == TV_TRUMP_BOOK) ||
3608                         (tv == TV_ARCANE_BOOK) ||
3609                         (tv == TV_ENCHANT_BOOK) ||
3610                         (tv == TV_DAEMON_BOOK) ||
3611                         (tv == TV_MUSIC_BOOK) ||
3612                         (tv == TV_HISSATSU_BOOK) ||
3613                     ((o_ptr->to_a > 0) || (o_ptr->to_h + o_ptr->to_d > 0)))
3614                 {
3615                         /* Memorize the item */
3616                         o_ptr->marked = TRUE;
3617
3618                         /* Redraw */
3619                         lite_spot(y, x);
3620
3621                         /* Detect */
3622                         detect = TRUE;
3623                 }
3624         }
3625
3626         /* Describe */
3627         if (detect)
3628         {
3629 #ifdef JP
3630 msg_print("ËâË¡¤Î¥¢¥¤¥Æ¥à¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3631 #else
3632                 msg_print("You sense the presence of magic objects!");
3633 #endif
3634
3635         }
3636
3637         /* Return result */
3638         return (detect);
3639 }
3640
3641
3642 /*
3643  * Detect all "normal" monsters on the current panel
3644  */
3645 bool detect_monsters_normal(int range)
3646 {
3647         int i, y, x;
3648
3649         bool flag = FALSE;
3650
3651         if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3652
3653         /* Scan monsters */
3654         for (i = 1; i < m_max; i++)
3655         {
3656                 monster_type *m_ptr = &m_list[i];
3657                 monster_race *r_ptr = &r_info[m_ptr->r_idx];
3658
3659                 /* Skip dead monsters */
3660                 if (!m_ptr->r_idx) continue;
3661
3662                 /* Location */
3663                 y = m_ptr->fy;
3664                 x = m_ptr->fx;
3665
3666                 /* Only detect nearby monsters */
3667                 if (distance(py, px, y, x) > range) continue;
3668
3669                 /* Detect all non-invisible monsters */
3670                 if ((!(r_ptr->flags2 & RF2_INVISIBLE)) ||
3671                     p_ptr->see_inv || p_ptr->tim_invis)
3672                 {
3673                         /* Repair visibility later */
3674                         repair_monsters = TRUE;
3675
3676                         /* Hack -- Detect monster */
3677                         m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
3678
3679                         /* Update the monster */
3680                         update_mon(i, FALSE);
3681
3682                         /* Detect */
3683                         flag = TRUE;
3684                 }
3685         }
3686
3687         if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT+3)) flag = FALSE;
3688
3689         /* Describe */
3690         if (flag)
3691         {
3692                 /* Describe result */
3693 #ifdef JP
3694 msg_print("¥â¥ó¥¹¥¿¡¼¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3695 #else
3696                 msg_print("You sense the presence of monsters!");
3697 #endif
3698
3699         }
3700
3701         /* Result */
3702         return (flag);
3703 }
3704
3705
3706 /*
3707  * Detect all "invisible" monsters around the player
3708  */
3709 bool detect_monsters_invis(int range)
3710 {
3711         int i, y, x;
3712         bool flag = FALSE;
3713
3714         if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3715
3716         /* Scan monsters */
3717         for (i = 1; i < m_max; i++)
3718         {
3719                 monster_type *m_ptr = &m_list[i];
3720                 monster_race *r_ptr = &r_info[m_ptr->r_idx];
3721
3722                 /* Skip dead monsters */
3723                 if (!m_ptr->r_idx) continue;
3724
3725                 /* Location */
3726                 y = m_ptr->fy;
3727                 x = m_ptr->fx;
3728
3729                 /* Only detect nearby monsters */
3730                 if (distance(py, px, y, x) > range) continue;
3731
3732                 /* Detect invisible monsters */
3733                 if (r_ptr->flags2 & RF2_INVISIBLE)
3734                 {
3735                         /* Update monster recall window */
3736                         if (p_ptr->monster_race_idx == m_ptr->r_idx)
3737                         {
3738                                 /* Window stuff */
3739                                 p_ptr->window |= (PW_MONSTER);
3740                         }
3741
3742                         /* Repair visibility later */
3743                         repair_monsters = TRUE;
3744
3745                         /* Hack -- Detect monster */
3746                         m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
3747
3748                         /* Update the monster */
3749                         update_mon(i, FALSE);
3750
3751                         /* Detect */
3752                         flag = TRUE;
3753                 }
3754         }
3755
3756         if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT+3)) flag = FALSE;
3757
3758         /* Describe */
3759         if (flag)
3760         {
3761                 /* Describe result */
3762 #ifdef JP
3763 msg_print("Æ©ÌÀ¤ÊÀ¸Êª¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3764 #else
3765                 msg_print("You sense the presence of invisible creatures!");
3766 #endif
3767
3768         }
3769
3770         /* Result */
3771         return (flag);
3772 }
3773
3774
3775
3776 /*
3777  * Detect all "evil" monsters on current panel
3778  */
3779 bool detect_monsters_evil(int range)
3780 {
3781         int i, y, x;
3782         bool flag = FALSE;
3783
3784         if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3785
3786         /* Scan monsters */
3787         for (i = 1; i < m_max; i++)
3788         {
3789                 monster_type *m_ptr = &m_list[i];
3790                 monster_race *r_ptr = &r_info[m_ptr->r_idx];
3791
3792                 /* Skip dead monsters */
3793                 if (!m_ptr->r_idx) continue;
3794
3795                 /* Location */
3796                 y = m_ptr->fy;
3797                 x = m_ptr->fx;
3798
3799                 /* Only detect nearby monsters */
3800                 if (distance(py, px, y, x) > range) continue;
3801
3802                 /* Detect evil monsters */
3803                 if (r_ptr->flags3 & RF3_EVIL)
3804                 {
3805                         /* Take note that they are evil */
3806                         r_ptr->r_flags3 |= (RF3_EVIL);
3807
3808                         /* Update monster recall window */
3809                         if (p_ptr->monster_race_idx == m_ptr->r_idx)
3810                         {
3811                                 /* Window stuff */
3812                                 p_ptr->window |= (PW_MONSTER);
3813                         }
3814
3815                         /* Repair visibility later */
3816                         repair_monsters = TRUE;
3817
3818                         /* Hack -- Detect monster */
3819                         m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
3820
3821                         /* Update the monster */
3822                         update_mon(i, FALSE);
3823
3824                         /* Detect */
3825                         flag = TRUE;
3826                 }
3827         }
3828
3829         /* Describe */
3830         if (flag)
3831         {
3832                 /* Describe result */
3833 #ifdef JP
3834 msg_print("¼Ù°­¤Ê¤ëÀ¸Êª¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3835 #else
3836                 msg_print("You sense the presence of evil creatures!");
3837 #endif
3838
3839         }
3840
3841         /* Result */
3842         return (flag);
3843 }
3844
3845
3846
3847
3848 /*
3849  * Detect all "nonliving", "undead" or "demonic" monsters on current panel
3850  */
3851 bool detect_monsters_nonliving(int range)
3852 {
3853         int     i, y, x;
3854         bool    flag = FALSE;
3855
3856         if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3857
3858         /* Scan monsters */
3859         for (i = 1; i < m_max; i++)
3860         {
3861                 monster_type *m_ptr = &m_list[i];
3862                 monster_race *r_ptr = &r_info[m_ptr->r_idx];
3863
3864                 /* Skip dead monsters */
3865                 if (!m_ptr->r_idx) continue;
3866
3867                 /* Location */
3868                 y = m_ptr->fy;
3869                 x = m_ptr->fx;
3870
3871                 /* Only detect nearby monsters */
3872                 if (distance(py, px, y, x) > range) continue;
3873
3874                 /* Detect non-living monsters */
3875                 if (!monster_living(r_ptr))
3876                 {
3877                         /* Update monster recall window */
3878                         if (p_ptr->monster_race_idx == m_ptr->r_idx)
3879                         {
3880                                 /* Window stuff */
3881                                 p_ptr->window |= (PW_MONSTER);
3882                         }
3883
3884                         /* Repair visibility later */
3885                         repair_monsters = TRUE;
3886
3887                         /* Hack -- Detect monster */
3888                         m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
3889
3890                         /* Update the monster */
3891                         update_mon(i, FALSE);
3892
3893                         /* Detect */
3894                         flag = TRUE;
3895                 }
3896         }
3897
3898         /* Describe */
3899         if (flag)
3900         {
3901                 /* Describe result */
3902 #ifdef JP
3903 msg_print("¼«Á³¤Ç¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤Î¸ºß¤ò´¶¤¸¤¿¡ª");
3904 #else
3905                 msg_print("You sense the presence of unnatural beings!");
3906 #endif
3907
3908         }
3909
3910         /* Result */
3911         return (flag);
3912 }
3913
3914
3915 /*
3916  * Detect all monsters it has mind on current panel
3917  */
3918 bool detect_monsters_mind(int range)
3919 {
3920         int     i, y, x;
3921         bool    flag = FALSE;
3922
3923         if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3924
3925         /* Scan monsters */
3926         for (i = 1; i < m_max; i++)
3927         {
3928                 monster_type *m_ptr = &m_list[i];
3929                 monster_race *r_ptr = &r_info[m_ptr->r_idx];
3930
3931                 /* Skip dead monsters */
3932                 if (!m_ptr->r_idx) continue;
3933
3934                 /* Location */
3935                 y = m_ptr->fy;
3936                 x = m_ptr->fx;
3937
3938                 /* Only detect nearby monsters */
3939                 if (distance(py, px, y, x) > range) continue;
3940
3941                 /* Detect non-living monsters */
3942                 if (!(r_ptr->flags2 & RF2_EMPTY_MIND))
3943                 {
3944                         /* Update monster recall window */
3945                         if (p_ptr->monster_race_idx == m_ptr->r_idx)
3946                         {
3947                                 /* Window stuff */
3948                                 p_ptr->window |= (PW_MONSTER);
3949                         }
3950
3951                         /* Repair visibility later */
3952                         repair_monsters = TRUE;
3953
3954                         /* Hack -- Detect monster */
3955                         m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
3956
3957                         /* Update the monster */
3958                         update_mon(i, FALSE);
3959
3960                         /* Detect */
3961                         flag = TRUE;
3962                 }
3963         }
3964
3965         /* Describe */
3966         if (flag)
3967         {
3968                 /* Describe result */
3969 #ifdef JP
3970 msg_print("»¦µ¤¤ò´¶¤¸¤È¤Ã¤¿¡ª");
3971 #else
3972                 msg_print("You sense the presence of someone's mind!");
3973 #endif
3974
3975         }
3976
3977         /* Result */
3978         return (flag);
3979 }
3980
3981
3982 /*
3983  * Detect all (string) monsters on current panel
3984  */
3985 bool detect_monsters_string(int range, cptr Match)
3986 {
3987         int i, y, x;
3988         bool flag = FALSE;
3989
3990         if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
3991
3992         /* Scan monsters */
3993         for (i = 1; i < m_max; i++)
3994         {
3995                 monster_type *m_ptr = &m_list[i];
3996                 monster_race *r_ptr = &r_info[m_ptr->r_idx];
3997
3998                 /* Skip dead monsters */
3999                 if (!m_ptr->r_idx) continue;
4000
4001                 /* Location */
4002                 y = m_ptr->fy;
4003                 x = m_ptr->fx;
4004
4005                 /* Only detect nearby monsters */
4006                 if (distance(py, px, y, x) > range) continue;
4007
4008                 /* Detect monsters with the same symbol */
4009                 if (strchr(Match, r_ptr->d_char))
4010                 {
4011                         /* Update monster recall window */
4012                         if (p_ptr->monster_race_idx == m_ptr->r_idx)
4013                         {
4014                                 /* Window stuff */
4015                                 p_ptr->window |= (PW_MONSTER);
4016                         }
4017
4018                         /* Repair visibility later */
4019                         repair_monsters = TRUE;
4020
4021                         /* Hack -- Detect monster */
4022                         m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
4023
4024                         /* Update the monster */
4025                         update_mon(i, FALSE);
4026
4027                         /* Detect */
4028                         flag = TRUE;
4029                 }
4030         }
4031
4032         if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT+3)) flag = FALSE;
4033
4034         /* Describe */
4035         if (flag)
4036         {
4037                 /* Describe result */
4038 #ifdef JP
4039 msg_print("¥â¥ó¥¹¥¿¡¼¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª");
4040 #else
4041                 msg_print("You sense the presence of monsters!");
4042 #endif
4043
4044         }
4045
4046         /* Result */
4047         return (flag);
4048 }
4049
4050
4051 /*
4052  * A "generic" detect monsters routine, tagged to flags3
4053  */
4054 bool detect_monsters_xxx(int range, u32b match_flag)
4055 {
4056         int  i, y, x;
4057         bool flag = FALSE;
4058 #ifdef JP
4059 cptr desc_monsters = "ÊѤʥâ¥ó¥¹¥¿¡¼";
4060 #else
4061         cptr desc_monsters = "weird monsters";
4062 #endif
4063
4064         if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
4065
4066         /* Scan monsters */
4067         for (i = 1; i < m_max; i++)
4068         {
4069                 monster_type *m_ptr = &m_list[i];
4070                 monster_race *r_ptr = &r_info[m_ptr->r_idx];
4071
4072                 /* Skip dead monsters */
4073                 if (!m_ptr->r_idx) continue;
4074
4075                 /* Location */
4076                 y = m_ptr->fy;
4077                 x = m_ptr->fx;
4078
4079                 /* Only detect nearby monsters */
4080                 if (distance(py, px, y, x) > range) continue;
4081
4082                 /* Detect evil monsters */
4083                 if (r_ptr->flags3 & (match_flag))
4084                 {
4085                         /* Take note that they are something */
4086                         r_ptr->r_flags3 |= (match_flag);
4087
4088                         /* Update monster recall window */
4089                         if (p_ptr->monster_race_idx == m_ptr->r_idx)
4090                         {
4091                                 /* Window stuff */
4092                                 p_ptr->window |= (PW_MONSTER);
4093                         }
4094
4095                         /* Repair visibility later */
4096                         repair_monsters = TRUE;
4097
4098                         /* Hack -- Detect monster */
4099                         m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
4100
4101                         /* Update the monster */
4102                         update_mon(i, FALSE);
4103
4104                         /* Detect */
4105                         flag = TRUE;
4106                 }
4107         }
4108
4109         /* Describe */
4110         if (flag)
4111         {
4112                 switch (match_flag)
4113                 {
4114                         case RF3_DEMON:
4115 #ifdef JP
4116 desc_monsters = "¥Ç¡¼¥â¥ó";
4117 #else
4118                                 desc_monsters = "demons";
4119 #endif
4120
4121                                 break;
4122                         case RF3_UNDEAD:
4123 #ifdef JP
4124 desc_monsters = "¥¢¥ó¥Ç¥Ã¥É";
4125 #else
4126                                 desc_monsters = "the undead";
4127 #endif
4128
4129                                 break;
4130                 }
4131
4132                 /* Describe result */
4133 #ifdef JP
4134 msg_format("%s¤Î¸ºß¤ò´¶¤¸¤È¤Ã¤¿¡ª", desc_monsters);
4135 #else
4136                 msg_format("You sense the presence of %s!", desc_monsters);
4137 #endif
4138
4139                 msg_print(NULL);
4140         }
4141
4142         /* Result */
4143         return (flag);
4144 }
4145
4146
4147 /*
4148  * Detect everything
4149  */
4150 bool detect_all(int range)
4151 {
4152         bool detect = FALSE;
4153
4154         /* Detect everything */
4155         if (detect_traps(range)) detect = TRUE;
4156         if (detect_doors(range)) detect = TRUE;
4157         if (detect_stairs(range)) detect = TRUE;
4158         if (detect_treasure(range)) detect = TRUE;
4159         if (detect_objects_gold(range)) detect = TRUE;
4160         if (detect_objects_normal(range)) detect = TRUE;
4161         if (detect_monsters_invis(range)) detect = TRUE;
4162         if (detect_monsters_normal(range)) detect = TRUE;
4163
4164         /* Result */
4165         return (detect);
4166 }
4167
4168
4169 /*
4170  * Apply a "project()" directly to all viewable monsters
4171  *
4172  * Note that affected monsters are NOT auto-tracked by this usage.
4173  *
4174  * To avoid misbehavior when monster deaths have side-effects,
4175  * this is done in two passes. -- JDL
4176  */
4177 bool project_hack(int typ, int dam)
4178 {
4179         int     i, x, y;
4180         int     flg = PROJECT_JUMP | PROJECT_KILL | PROJECT_HIDE | PROJECT_NO_REF;
4181         bool    obvious = FALSE;
4182
4183
4184         /* Mark all (nearby) monsters */
4185         for (i = 1; i < m_max; i++)
4186         {
4187                 monster_type *m_ptr = &m_list[i];
4188
4189                 /* Paranoia -- Skip dead monsters */
4190                 if (!m_ptr->r_idx) continue;
4191
4192                 /* Location */
4193                 y = m_ptr->fy;
4194                 x = m_ptr->fx;
4195
4196                 /* Require line of sight */
4197                 if (!player_has_los_bold(y, x)) continue;
4198
4199                 /* Mark the monster */
4200                 m_ptr->mflag |= (MFLAG_TEMP);
4201         }
4202
4203         /* Affect all marked monsters */
4204         for (i = 1; i < m_max; i++)
4205         {
4206                 monster_type *m_ptr = &m_list[i];
4207
4208                 /* Skip unmarked monsters */
4209                 if (!(m_ptr->mflag & (MFLAG_TEMP))) continue;
4210
4211                 /* Remove mark */
4212                 m_ptr->mflag &= ~(MFLAG_TEMP);
4213
4214                 /* Location */
4215                 y = m_ptr->fy;
4216                 x = m_ptr->fx;
4217
4218                 /* Jump directly to the target monster */
4219                 if (project(0, 0, y, x, dam, typ, flg, -1)) obvious = TRUE;
4220         }
4221
4222         /* Result */
4223         return (obvious);
4224 }
4225
4226
4227 /*
4228  * Speed monsters
4229  */
4230 bool speed_monsters(void)
4231 {
4232         return (project_hack(GF_OLD_SPEED, p_ptr->lev));
4233 }
4234
4235 /*
4236  * Slow monsters
4237  */
4238 bool slow_monsters(void)
4239 {
4240         return (project_hack(GF_OLD_SLOW, p_ptr->lev));
4241 }
4242
4243 /*
4244  * Sleep monsters
4245  */
4246 bool sleep_monsters(void)
4247 {
4248         return (project_hack(GF_OLD_SLEEP, p_ptr->lev));
4249 }
4250
4251
4252 /*
4253  * Banish evil monsters
4254  */
4255 bool banish_evil(int dist)
4256 {
4257         return (project_hack(GF_AWAY_EVIL, dist));
4258 }
4259
4260
4261 /*
4262  * Turn undead
4263  */
4264 bool turn_undead(void)
4265 {
4266         bool tester = (project_hack(GF_TURN_UNDEAD, p_ptr->lev));
4267         if (tester)
4268                 chg_virtue(V_UNLIFE, -1);
4269         return tester;
4270 }
4271
4272
4273 /*
4274  * Dispel undead monsters
4275  */
4276 bool dispel_undead(int dam)
4277 {
4278         bool tester = (project_hack(GF_DISP_UNDEAD, dam));
4279         if (tester)
4280                 chg_virtue(V_UNLIFE, -2);
4281         return tester;
4282 }
4283
4284 /*
4285  * Dispel evil monsters
4286  */
4287 bool dispel_evil(int dam)
4288 {
4289         return (project_hack(GF_DISP_EVIL, dam));
4290 }
4291
4292 /*
4293  * Dispel good monsters
4294  */
4295 bool dispel_good(int dam)
4296 {
4297         return (project_hack(GF_DISP_GOOD, dam));
4298 }
4299
4300 /*
4301  * Dispel all monsters
4302  */
4303 bool dispel_monsters(int dam)
4304 {
4305         return (project_hack(GF_DISP_ALL, dam));
4306 }
4307
4308 /*
4309  * Dispel 'living' monsters
4310  */
4311 bool dispel_living(int dam)
4312 {
4313         return (project_hack(GF_DISP_LIVING, dam));
4314 }
4315
4316 /*
4317  * Dispel demons
4318  */
4319 bool dispel_demons(int dam)
4320 {
4321         return (project_hack(GF_DISP_DEMON, dam));
4322 }
4323
4324
4325 /*
4326  * Wake up all monsters, and speed up "los" monsters.
4327  */
4328 void aggravate_monsters(int who)
4329 {
4330         int     i;
4331         bool    sleep = FALSE;
4332         bool    speed = FALSE;
4333
4334
4335         /* Aggravate everyone nearby */
4336         for (i = 1; i < m_max; i++)
4337         {
4338                 monster_type    *m_ptr = &m_list[i];
4339 /*              monster_race    *r_ptr = &r_info[m_ptr->r_idx]; */
4340
4341                 /* Paranoia -- Skip dead monsters */
4342                 if (!m_ptr->r_idx) continue;
4343
4344                 /* Skip aggravating monster (or player) */
4345                 if (i == who) continue;
4346
4347                 /* Wake up nearby sleeping monsters */
4348                 if (m_ptr->cdis < MAX_SIGHT * 2)
4349                 {
4350                         /* Wake up */
4351                         if (m_ptr->csleep)
4352                         {
4353                                 /* Wake up */
4354                                 m_ptr->csleep = 0;
4355                                 sleep = TRUE;
4356                         }
4357                         if (!is_pet(m_ptr)) m_ptr->mflag2 |= MFLAG_NOPET;
4358                 }
4359
4360                 /* Speed up monsters in line of sight */
4361                 if (player_has_los_bold(m_ptr->fy, m_ptr->fx))
4362                 {
4363                         if (!is_pet(m_ptr))
4364                         {
4365                                 m_ptr->fast = MIN(200, m_ptr->fast + 100);
4366                                 speed = TRUE;
4367                         }
4368                 }
4369         }
4370
4371         /* Messages */
4372 #ifdef JP
4373 if (speed) msg_print("ÉÕ¶á¤Ç²¿¤«¤¬ÆÍÇ¡¶½Ê³¤·¤¿¤è¤¦¤Ê´¶¤¸¤ò¼õ¤±¤¿¡ª");
4374 else if (sleep) msg_print("²¿¤«¤¬ÆÍÇ¡¶½Ê³¤·¤¿¤è¤¦¤ÊÁû¡¹¤·¤¤²»¤¬±ó¤¯¤Ëʹ¤³¤¨¤¿¡ª");
4375 #else
4376         if (speed) msg_print("You feel a sudden stirring nearby!");
4377         else if (sleep) msg_print("You hear a sudden stirring in the distance!");
4378 #endif
4379         if (p_ptr->riding) p_ptr->update |= PU_BONUS;
4380 }
4381
4382
4383
4384 /*
4385  * Delete all non-unique/non-quest monsters of a given "type" from the level
4386  */
4387 bool symbol_genocide(int power, int player_cast)
4388 {
4389         int     i;
4390         char    typ;
4391         bool    result = FALSE;
4392         int     msec = delay_factor * delay_factor * delay_factor;
4393
4394         /* Prevent genocide in quest levels */
4395         if (p_ptr->inside_quest && !random_quest_number(dun_level))
4396         {
4397                 return (FALSE);
4398         }
4399
4400         /* Mega-Hack -- Get a monster symbol */
4401 #ifdef JP
4402 while(!get_com("¤É¤Î¼ïÎà(ʸ»ú)¤Î¥â¥ó¥¹¥¿¡¼¤òËõ»¦¤·¤Þ¤¹¤«: ", &typ, FALSE));
4403 #else
4404         while(!get_com("Choose a monster race (by symbol) to genocide: ", &typ, FALSE));
4405 #endif
4406
4407
4408         /* Delete the monsters of that "type" */
4409         for (i = 1; i < m_max; i++)
4410         {
4411                 monster_type    *m_ptr = &m_list[i];
4412                 monster_race    *r_ptr = &r_info[m_ptr->r_idx];
4413                 bool angry = FALSE;
4414                 char m_name[80];
4415
4416                 /* Paranoia -- Skip dead monsters */
4417                 if (!m_ptr->r_idx) continue;
4418
4419                 /* Skip "wrong" monsters */
4420                 if (r_ptr->d_char != typ) continue;
4421
4422                 if (is_pet(m_ptr) && !player_cast) continue;
4423
4424                 /* Hack -- Skip Unique Monsters */
4425                 if (r_ptr->flags1 & (RF1_UNIQUE)) angry = TRUE;
4426
4427                 /* Hack -- Skip Quest Monsters */
4428                 else if (r_ptr->flags1 & RF1_QUESTOR) angry = TRUE;
4429
4430                 else if (r_ptr->flags7 & RF7_UNIQUE2) angry = TRUE;
4431
4432                 else if (i == p_ptr->riding) angry = TRUE;
4433
4434                 else if (player_cast && (r_ptr->level > randint0(power))) angry = TRUE;
4435
4436                 else if (player_cast && (m_ptr->mflag2 & MFLAG_NOGENO)) angry = TRUE;
4437
4438                 /* Delete the monster */
4439                 else delete_monster_idx(i);
4440
4441                 if (angry && player_cast)
4442                 {
4443                         monster_desc(m_name, m_ptr, 0);
4444                         if (m_ptr->ml && !p_ptr->blind)
4445                         {
4446 #ifdef JP
4447 msg_format("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", m_name);
4448 #else
4449                                 msg_format("%^s is unaffected.", m_name);
4450 #endif
4451                         }
4452                         if (m_ptr->csleep)
4453                         {
4454                                 m_ptr->csleep = 0;
4455                                 if (m_ptr->ml && !p_ptr->blind)
4456                                 {
4457 #ifdef JP
4458 msg_format("%^s¤¬Ìܤò³Ð¤Þ¤·¤¿¡£", m_name);
4459 #else
4460                                         msg_format("%^s wakes up.", m_name);
4461 #endif
4462                                 }
4463                         }
4464                         if (is_friendly(m_ptr) && !is_pet(m_ptr))
4465                         {
4466                                 if (m_ptr->ml && !p_ptr->blind)
4467                                 {
4468 #ifdef JP
4469                                         msg_format("%s¤ÏÅܤä¿¡ª", m_name);
4470 #else
4471                                         msg_format("%^s gets angry!", m_name);
4472 #endif
4473                                 }
4474                                 set_hostile(m_ptr);
4475                         }
4476                         if (one_in_(13)) m_ptr->mflag2 |= MFLAG_NOGENO;
4477                 }
4478
4479                 if (player_cast)
4480                 {
4481                         /* Take damage */
4482 #ifdef JP
4483 take_hit(DAMAGE_GENO, randint1(4), "Ëõ»¦¤Î¼öʸ¤ò¾§¤¨¤¿ÈèÏ«", -1);
4484 #else
4485                         take_hit(DAMAGE_GENO, randint1(4), "the strain of casting Genocide", -1);
4486 #endif
4487
4488                 }
4489
4490                 /* Visual feedback */
4491                 move_cursor_relative(py, px);
4492
4493                 /* Redraw */
4494                 p_ptr->redraw |= (PR_HP);
4495
4496                 /* Window stuff */
4497                 p_ptr->window |= (PW_PLAYER);
4498
4499                 /* Handle */
4500                 handle_stuff();
4501
4502                 /* Fresh */
4503                 Term_fresh();
4504
4505                 /* Delay */
4506                 Term_xtra(TERM_XTRA_DELAY, msec);
4507
4508                 /* Take note */
4509                 result = TRUE;
4510         }
4511         if (result)
4512         {
4513                 chg_virtue(V_VITALITY, -2);
4514                 chg_virtue(V_CHANCE, -1);
4515         }
4516
4517         return (result);
4518 }
4519
4520
4521 /*
4522  * Delete all nearby (non-unique) monsters
4523  */
4524 bool mass_genocide(int power, int player_cast)
4525 {
4526         int     i;
4527         bool    result = FALSE;
4528         int     msec = delay_factor * delay_factor * delay_factor;
4529
4530
4531         /* Prevent mass genocide in quest levels */
4532         if (p_ptr->inside_quest && !random_quest_number(dun_level))
4533         {
4534                 return (FALSE);
4535         }
4536
4537         /* Delete the (nearby) monsters */
4538         for (i = 1; i < m_max; i++)
4539         {
4540                 monster_type    *m_ptr = &m_list[i];
4541                 monster_race    *r_ptr = &r_info[m_ptr->r_idx];
4542                 bool angry = FALSE;
4543                 char m_name[80];
4544
4545                 /* Paranoia -- Skip dead monsters */
4546                 if (!m_ptr->r_idx) continue;
4547
4548                 /* Skip distant monsters */
4549                 if (m_ptr->cdis > MAX_SIGHT) continue;
4550
4551                 if (is_pet(m_ptr) && !player_cast) continue;
4552
4553                 /* Hack -- Skip unique monsters */
4554                 if (r_ptr->flags1 & (RF1_UNIQUE)) angry = TRUE;
4555
4556                 /* Hack -- Skip Quest Monsters */
4557                 else if (r_ptr->flags1 & RF1_QUESTOR) angry = TRUE;
4558
4559                 else if (r_ptr->flags7 & RF7_UNIQUE2) angry = TRUE;
4560
4561                 else if (i == p_ptr->riding) angry = TRUE;
4562
4563                 else if (player_cast && (r_ptr->level > randint0(power))) angry = TRUE;
4564
4565                 else if (player_cast && (m_ptr->mflag2 & MFLAG_NOGENO)) angry = TRUE;
4566
4567                 /* Delete the monster */
4568                 else delete_monster_idx(i);
4569
4570                 if (angry && player_cast)
4571                 {
4572                         monster_desc(m_name, m_ptr, 0);
4573                         if (m_ptr->ml && !p_ptr->blind)
4574                         {
4575 #ifdef JP
4576 msg_format("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", m_name);
4577 #else
4578                                 msg_format("%^s is unaffected.", m_name);
4579 #endif
4580                         }
4581                         if (m_ptr->csleep)
4582                         {
4583                                 m_ptr->csleep = 0;
4584                                 if (m_ptr->ml && !p_ptr->blind)
4585                                 {
4586 #ifdef JP
4587 msg_format("%^s¤¬Ìܤò³Ð¤Þ¤·¤¿¡£", m_name);
4588 #else
4589                                         msg_format("%^s wakes up.", m_name);
4590 #endif
4591                                 }
4592                         }
4593                         if (is_friendly(m_ptr) && !is_pet(m_ptr))
4594                         {
4595                                 if (m_ptr->ml && !p_ptr->blind)
4596                                 {
4597 #ifdef JP
4598                                         msg_format("%s¤ÏÅܤä¿¡ª", m_name);
4599 #else
4600                                         msg_format("%^s gets angry!", m_name);
4601 #endif
4602                                 }
4603                                 set_hostile(m_ptr);
4604                         }
4605                         if (one_in_(13)) m_ptr->mflag2 |= MFLAG_NOGENO;
4606                 }
4607
4608                 if (player_cast)
4609                 {
4610                         /* Hack -- visual feedback */
4611 #ifdef JP
4612 take_hit(DAMAGE_GENO, randint1(3), "¼þÊÕËõ»¦¤Î¼öʸ¤ò¾§¤¨¤¿ÈèÏ«", -1);
4613 #else
4614                         take_hit(DAMAGE_GENO, randint1(3), "the strain of casting Mass Genocide", -1);
4615 #endif
4616
4617                 }
4618
4619                 move_cursor_relative(py, px);
4620
4621                 /* Redraw */
4622                 p_ptr->redraw |= (PR_HP);
4623
4624                 /* Window stuff */
4625                 p_ptr->window |= (PW_PLAYER);
4626
4627                 /* Handle */
4628                 handle_stuff();
4629
4630                 /* Fresh */
4631                 Term_fresh();
4632
4633                 /* Delay */
4634                 Term_xtra(TERM_XTRA_DELAY, msec);
4635
4636                 /* Note effect */
4637                 result = TRUE;
4638         }
4639
4640         if (result)
4641         {
4642                 chg_virtue(V_VITALITY, -2);
4643                 chg_virtue(V_CHANCE, -1);
4644         }
4645
4646         return (result);
4647 }
4648
4649
4650
4651 /*
4652  * Delete all nearby (non-unique) undead
4653  */
4654 bool mass_genocide_undead(int power, int player_cast)
4655 {
4656         int     i;
4657         bool    result = FALSE;
4658         int     msec = delay_factor * delay_factor * delay_factor;
4659
4660
4661         /* Prevent mass genocide in quest levels */
4662         if (p_ptr->inside_quest && !random_quest_number(dun_level))
4663         {
4664                 return (FALSE);
4665         }
4666
4667         /* Delete the (nearby) monsters */
4668         for (i = 1; i < m_max; i++)
4669         {
4670                 monster_type    *m_ptr = &m_list[i];
4671                 monster_race    *r_ptr = &r_info[m_ptr->r_idx];
4672                 bool angry = FALSE;
4673                 char m_name[80];
4674
4675                 /* Paranoia -- Skip dead monsters */
4676                 if (!m_ptr->r_idx) continue;
4677
4678                 if (!(r_ptr->flags3 & RF3_UNDEAD)) continue;
4679
4680                 /* Skip distant monsters */
4681                 if (m_ptr->cdis > MAX_SIGHT) continue;
4682
4683                 if (is_pet(m_ptr) && !player_cast) continue;
4684
4685                 /* Hack -- Skip unique monsters */
4686                 if (r_ptr->flags1 & (RF1_UNIQUE)) angry = TRUE;
4687
4688                 /* Hack -- Skip Quest Monsters */
4689                 else if (r_ptr->flags1 & RF1_QUESTOR) angry = TRUE;
4690
4691                 else if (r_ptr->flags7 & RF7_UNIQUE2) angry = TRUE;
4692
4693                 else if (i == p_ptr->riding) angry = TRUE;
4694
4695                 else if (player_cast && (r_ptr->level > randint0(power))) angry = TRUE;
4696
4697                 else if (player_cast && (m_ptr->mflag2 & MFLAG_NOGENO)) angry = TRUE;
4698
4699                 /* Delete the monster */
4700                 else delete_monster_idx(i);
4701
4702                 if (angry && player_cast)
4703                 {
4704                         monster_desc(m_name, m_ptr, 0);
4705                         if (m_ptr->ml && !p_ptr->blind)
4706                         {
4707 #ifdef JP
4708 msg_format("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", m_name);
4709 #else
4710                                 msg_format("%^s is unaffected.", m_name);
4711 #endif
4712                         }
4713                         if (m_ptr->csleep)
4714                         {
4715                                 m_ptr->csleep = 0;
4716                                 if (m_ptr->ml && !p_ptr->blind)
4717                                 {
4718 #ifdef JP
4719 msg_format("%^s¤¬Ìܤò³Ð¤Þ¤·¤¿¡£", m_name);
4720 #else
4721                                         msg_format("%^s wakes up.", m_name);
4722 #endif
4723                                 }
4724                         }
4725                         if (is_friendly(m_ptr) && !is_pet(m_ptr))
4726                         {
4727                                 if (m_ptr->ml && !p_ptr->blind)
4728                                 {
4729 #ifdef JP
4730                                         msg_format("%s¤ÏÅܤä¿¡ª", m_name);
4731 #else
4732                                         msg_format("%^s gets angry!", m_name);
4733 #endif
4734                                 }
4735                                 set_hostile(m_ptr);
4736                         }
4737                         if (one_in_(13)) m_ptr->mflag2 |= MFLAG_NOGENO;
4738                 }
4739
4740                 if (player_cast)
4741                 {
4742                         /* Hack -- visual feedback */
4743 #ifdef JP
4744 take_hit(DAMAGE_GENO, randint1(3), "¥¢¥ó¥Ç¥Ã¥É¾ÃÌǤμöʸ¤ò¾§¤¨¤¿ÈèÏ«", -1);
4745 #else
4746                         take_hit(DAMAGE_GENO, randint1(3), "the strain of casting Mass Genocide", -1);
4747 #endif
4748
4749                 }
4750
4751                 move_cursor_relative(py, px);
4752
4753                 /* Redraw */
4754                 p_ptr->redraw |= (PR_HP);
4755
4756                 /* Window stuff */
4757                 p_ptr->window |= (PW_PLAYER);
4758
4759                 /* Handle */
4760                 handle_stuff();
4761
4762                 /* Fresh */
4763                 Term_fresh();
4764
4765                 /* Delay */
4766                 Term_xtra(TERM_XTRA_DELAY, msec);
4767
4768                 /* Note effect */
4769                 result = TRUE;
4770         }
4771
4772         if (result)
4773         {
4774                 chg_virtue(V_UNLIFE, -2);
4775                 chg_virtue(V_CHANCE, -1);
4776         }
4777
4778         return (result);
4779 }
4780
4781
4782
4783 /*
4784  * Probe nearby monsters
4785  */
4786 bool probing(void)
4787 {
4788         int     i, speed;
4789         int cu, cv;
4790         bool    probe = FALSE;
4791         char buf[256];
4792
4793         cu = Term->scr->cu;
4794         cv = Term->scr->cv;
4795         Term->scr->cu = 0;
4796         Term->scr->cv = 1;
4797
4798         /* Probe all (nearby) monsters */
4799         for (i = 1; i < m_max; i++)
4800         {
4801                 monster_type *m_ptr = &m_list[i];
4802                 monster_race *r_ptr = &r_info[m_ptr->r_idx];
4803
4804                 /* Paranoia -- Skip dead monsters */
4805                 if (!m_ptr->r_idx) continue;
4806
4807                 /* Require line of sight */
4808                 if (!player_has_los_bold(m_ptr->fy, m_ptr->fx)) continue;
4809
4810                 /* Probe visible monsters */
4811                 if (m_ptr->ml)
4812                 {
4813                         char m_name[80];
4814
4815                         /* Start the message */
4816 #ifdef JP
4817                         if (!probe) {msg_print("Ä´ººÃæ...");msg_print(NULL);}
4818 #else
4819                         if (!probe) {msg_print("Probing...");msg_print(NULL);}
4820 #endif
4821
4822                         if (m_ptr->mflag2 & MFLAG_KAGE)
4823                         {
4824                                 m_ptr->mflag2 &= ~(MFLAG_KAGE);
4825                                 lite_spot(m_ptr->fy, m_ptr->fx);
4826                         }
4827                         /* Get "the monster" or "something" */
4828                         monster_desc(m_name, m_ptr, 0x204);
4829
4830                         speed = m_ptr->mspeed - 110;
4831                         if(m_ptr->fast) speed += 10;
4832                         if(m_ptr->slow) speed -= 10;
4833                         /* Describe the monster */
4834 #ifdef JP
4835 sprintf(buf,"%s ... HP:%d/%d AC:%d Â®ÅÙ:%s%d ·Ð¸³:", m_name, m_ptr->hp, m_ptr->maxhp, r_ptr->ac, (speed > 0) ? "+" : "", speed);
4836 #else
4837 sprintf(buf, "%s ... HP:%d/%d AC:%d speed:%s%d exp:", m_name, m_ptr->hp, m_ptr->maxhp, r_ptr->ac, (speed > 0) ? "+" : "", speed);
4838 #endif
4839                         if (r_ptr->next_r_idx)
4840                         {
4841                                 strcat(buf, format("%d/%d ", m_ptr->exp, r_ptr->next_exp));
4842                         }
4843                         else
4844                         {
4845                                 strcat(buf, "xxx ");
4846                         }
4847
4848 #ifdef JP
4849                         if (m_ptr->csleep) strcat(buf,"¿ç̲ ");
4850                         if (m_ptr->stunned) strcat(buf,"ۯ۰ ");
4851                         if (m_ptr->monfear) strcat(buf,"¶²ÉÝ ");
4852                         if (m_ptr->confused) strcat(buf,"º®Íð ");
4853                         if (m_ptr->invulner) strcat(buf,"̵Ũ ");
4854 #else
4855                         if (m_ptr->csleep) strcat(buf,"sleeping ");
4856                         if (m_ptr->stunned) strcat(buf,"stunned ");
4857                         if (m_ptr->monfear) strcat(buf,"scared ");
4858                         if (m_ptr->confused) strcat(buf,"confused ");
4859                         if (m_ptr->invulner) strcat(buf,"invulnerable ");
4860 #endif
4861                         buf[strlen(buf)-1] = '\0';
4862                         prt(buf,0,0);
4863
4864                         /* HACK : Add the line to message buffer */
4865                         message_add(buf);
4866                         p_ptr->window |= (PW_MESSAGE);
4867                         window_stuff();
4868
4869                         /* Learn all of the non-spell, non-treasure flags */
4870                         lore_do_probe(i);
4871
4872                         if (m_ptr->ml) move_cursor_relative(m_ptr->fy, m_ptr->fx);
4873                         inkey();
4874
4875                         Term_erase(0, 0, 255);
4876
4877                         /* Probe worked */
4878                         probe = TRUE;
4879                 }
4880         }
4881
4882         Term->scr->cu = cu;
4883         Term->scr->cv = cv;
4884         Term_fresh();
4885
4886         /* Done */
4887         if (probe)
4888         {
4889                 chg_virtue(V_KNOWLEDGE, 1);
4890
4891 #ifdef JP
4892 msg_print("¤³¤ì¤ÇÁ´Éô¤Ç¤¹¡£");
4893 #else
4894                 msg_print("That's all.");
4895 #endif
4896
4897         }
4898
4899         /* Result */
4900         return (probe);
4901 }
4902
4903
4904
4905 /*
4906  * The spell of destruction
4907  *
4908  * This spell "deletes" monsters (instead of "killing" them).
4909  *
4910  * Later we may use one function for both "destruction" and
4911  * "earthquake" by using the "full" to select "destruction".
4912  */
4913 bool destroy_area(int y1, int x1, int r, int full)
4914 {
4915         int       y, x, k, t;
4916         cave_type *c_ptr;
4917         bool      flag = FALSE;
4918
4919
4920         /* Prevent destruction of quest levels and town */
4921         if ((p_ptr->inside_quest && (p_ptr->inside_quest < MIN_RANDOM_QUEST)) || !dun_level)
4922         {
4923                 return (FALSE);
4924         }
4925
4926         /* Big area of affect */
4927         for (y = (y1 - r); y <= (y1 + r); y++)
4928         {
4929                 for (x = (x1 - r); x <= (x1 + r); x++)
4930                 {
4931                         monster_type *m_ptr;
4932                         monster_race *r_ptr;
4933
4934                         /* Skip illegal grids */
4935                         if (!in_bounds(y, x)) continue;
4936
4937                         /* Extract the distance */
4938                         k = distance(y1, x1, y, x);
4939
4940                         /* Stay in the circle of death */
4941                         if (k > r) continue;
4942
4943                         /* Access the grid */
4944                         c_ptr = &cave[y][x];
4945                         m_ptr = &m_list[c_ptr->m_idx];
4946                         r_ptr = &r_info[m_ptr->r_idx];
4947
4948                         /* Lose room and vault */
4949                         c_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY | CAVE_TRAP);
4950
4951                         /* Lose light and knowledge */
4952                         c_ptr->info &= ~(CAVE_MARK | CAVE_GLOW);
4953
4954                         /* Hack -- Notice player affect */
4955                         if ((x == px) && (y == py))
4956                         {
4957                                 /* Hurt the player later */
4958                                 flag = TRUE;
4959
4960                                 /* Do not hurt this grid */
4961                                 continue;
4962                         }
4963
4964                         /* Hack -- Skip the epicenter */
4965                         if ((y == y1) && (x == x1)) continue;
4966
4967 #if 0
4968                         if ((r_ptr->flags1 & RF1_QUESTOR) || (r_ptr->flags7 & RF7_GUARDIAN) || ((m_ptr->mflag2 & MFLAG_CHAMELEON) && (r_ptr->flags1 & RF1_UNIQUE)))
4969 #else
4970                         if ((r_ptr->flags1 & RF1_QUESTOR))
4971 #endif
4972                         {
4973                                 /* Heal the monster */
4974                                 m_list[c_ptr->m_idx].hp = m_list[c_ptr->m_idx].maxhp;
4975
4976                                 /* Try to teleport away quest monsters */
4977                                 if (!teleport_away(c_ptr->m_idx, (r * 2) + 1, TRUE)) continue;
4978                         }
4979                         else
4980                         {
4981                                 if (c_ptr->m_idx)
4982                                 {
4983                                         if (record_named_pet && is_pet(&m_list[c_ptr->m_idx]) && m_list[c_ptr->m_idx].nickname)
4984                                         {
4985                                                 char m_name[80];
4986
4987                                                 monster_desc(m_name, &m_list[c_ptr->m_idx], 0x08);
4988                                                 do_cmd_write_nikki(NIKKI_NAMED_PET, 6, m_name);
4989                                         }
4990                                 }
4991                                 /* Delete the monster (if any) */
4992                                 delete_monster(y, x);
4993                         }
4994
4995                         if (preserve_mode)
4996                         {
4997                                 s16b this_o_idx, next_o_idx = 0;
4998
4999                                 /* Scan all objects in the grid */
5000                                 for (this_o_idx = c_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx)
5001                                 {
5002                                         object_type *o_ptr;
5003
5004                                         /* Acquire object */
5005                                         o_ptr = &o_list[this_o_idx];
5006
5007                                         /* Acquire next object */
5008                                         next_o_idx = o_ptr->next_o_idx;
5009
5010                                         /* Hack -- Preserve unknown artifacts */
5011                                         if (artifact_p(o_ptr) && !object_known_p(o_ptr))
5012                                         {
5013                                                 /* Mega-Hack -- Preserve the artifact */
5014                                                 a_info[o_ptr->name1].cur_num = 0;
5015                                         }
5016                                 }
5017                         }
5018                         delete_object(y, x);
5019
5020                         /* Destroy "valid" grids */
5021                         if (!cave_perma_bold(y, x))
5022                         {
5023                                 /* Wall (or floor) type */
5024                                 t = randint0(200);
5025
5026                                 /* Granite */
5027                                 if (t < 20)
5028                                 {
5029                                         /* Create granite wall */
5030                                         c_ptr->feat = FEAT_WALL_EXTRA;
5031                                 }
5032
5033                                 /* Quartz */
5034                                 else if (t < 70)
5035                                 {
5036                                         /* Create quartz vein */
5037                                         c_ptr->feat = FEAT_QUARTZ;
5038                                 }
5039
5040                                 /* Magma */
5041                                 else if (t < 100)
5042                                 {
5043                                         /* Create magma vein */
5044                                         c_ptr->feat = FEAT_MAGMA;
5045                                 }
5046
5047                                 /* Floor */
5048                                 else
5049                                 {
5050                                         /* Create floor */
5051                                         c_ptr->feat = floor_type[randint0(100)];
5052                                         c_ptr->info &= ~(CAVE_MASK);
5053                                         c_ptr->info |= CAVE_FLOOR;
5054                                 }
5055                         }
5056                 }
5057         }
5058
5059
5060         /* Hack -- Affect player */
5061         if (flag)
5062         {
5063                 /* Message */
5064 #ifdef JP
5065 msg_print("dz¤¨¤ë¤è¤¦¤ÊÁ®¸÷¤¬È¯À¸¤·¤¿¡ª");
5066 #else
5067                 msg_print("There is a searing blast of light!");
5068 #endif
5069
5070
5071                 /* Blind the player */
5072                 if (!p_ptr->resist_blind && !p_ptr->resist_lite)
5073                 {
5074                         /* Become blind */
5075                         (void)set_blind(p_ptr->blind + 10 + randint1(10));
5076                 }
5077         }
5078
5079         forget_flow();
5080
5081         /* Mega-Hack -- Forget the view and lite */
5082         p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE);
5083
5084         /* Update stuff */
5085         p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MON_LITE);
5086
5087         /* Update the monsters */
5088         p_ptr->update |= (PU_MONSTERS);
5089
5090         /* Redraw map */
5091         p_ptr->redraw |= (PR_MAP);
5092
5093         /* Window stuff */
5094         p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
5095
5096         /* Success */
5097         return (TRUE);
5098 }
5099
5100
5101 /*
5102  * Induce an "earthquake" of the given radius at the given location.
5103  *
5104  * This will turn some walls into floors and some floors into walls.
5105  *
5106  * The player will take damage and "jump" into a safe grid if possible,
5107  * otherwise, he will "tunnel" through the rubble instantaneously.
5108  *
5109  * Monsters will take damage, and "jump" into a safe grid if possible,
5110  * otherwise they will be "buried" in the rubble, disappearing from
5111  * the level in the same way that they do when genocided.
5112  *
5113  * Note that thus the player and monsters (except eaters of walls and
5114  * passers through walls) will never occupy the same grid as a wall.
5115  * Note that as of now (2.7.8) no monster may occupy a "wall" grid, even
5116  * for a single turn, unless that monster can pass_walls or kill_walls.
5117  * This has allowed massive simplification of the "monster" code.
5118  */
5119 bool earthquake(int cy, int cx, int r)
5120 {
5121         int             i, t, y, x, yy, xx, dy, dx, oy, ox;
5122         int             damage = 0;
5123         int             sn = 0, sy = 0, sx = 0;
5124         bool            hurt = FALSE;
5125         cave_type       *c_ptr;
5126         bool            map[32][32];
5127
5128
5129         /* Prevent destruction of quest levels and town */
5130         if ((p_ptr->inside_quest && (p_ptr->inside_quest < MIN_RANDOM_QUEST)) || !dun_level)
5131         {
5132                 return (FALSE);
5133         }
5134
5135         /* Paranoia -- Enforce maximum range */
5136         if (r > 12) r = 12;
5137
5138         /* Clear the "maximal blast" area */
5139         for (y = 0; y < 32; y++)
5140         {
5141                 for (x = 0; x < 32; x++)
5142                 {
5143                         map[y][x] = FALSE;
5144                 }
5145         }
5146
5147         /* Check around the epicenter */
5148         for (dy = -r; dy <= r; dy++)
5149         {
5150                 for (dx = -r; dx <= r; dx++)
5151                 {
5152                         /* Extract the location */
5153                         yy = cy + dy;
5154                         xx = cx + dx;
5155
5156                         /* Skip illegal grids */
5157                         if (!in_bounds(yy, xx)) continue;
5158
5159                         /* Skip distant grids */
5160                         if (distance(cy, cx, yy, xx) > r) continue;
5161
5162                         /* Access the grid */
5163                         c_ptr = &cave[yy][xx];
5164
5165                         /* Lose room and vault */
5166                         c_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY | CAVE_TRAP);
5167
5168                         /* Lose light and knowledge */
5169                         c_ptr->info &= ~(CAVE_GLOW | CAVE_MARK);
5170
5171                         /* Skip the epicenter */
5172                         if (!dx && !dy) continue;
5173
5174                         /* Skip most grids */
5175                         if (randint0(100) < 85) continue;
5176
5177                         /* Damage this grid */
5178                         map[16+yy-cy][16+xx-cx] = TRUE;
5179
5180                         /* Hack -- Take note of player damage */
5181                         if ((yy == py) && (xx == px)) hurt = TRUE;
5182                 }
5183         }
5184
5185         /* First, affect the player (if necessary) */
5186         if (hurt && !(p_ptr->prace == RACE_SPECTRE) && !(p_ptr->wraith_form) && !(p_ptr->kabenuke))
5187         {
5188                 /* Check around the player */
5189                 for (i = 0; i < 8; i++)
5190                 {
5191                         /* Access the location */
5192                         y = py + ddy_ddd[i];
5193                         x = px + ddx_ddd[i];
5194
5195                         /* Skip non-empty grids */
5196                         if (!cave_empty_bold(y, x)) continue;
5197
5198                         /* Important -- Skip "quake" grids */
5199                         if (map[16+y-cy][16+x-cx]) continue;
5200
5201                         if (cave[y][x].m_idx) continue;
5202
5203                         /* Count "safe" grids */
5204                         sn++;
5205
5206                         /* Randomize choice */
5207                         if (randint0(sn) > 0) continue;
5208
5209                         /* Save the safe location */
5210                         sy = y; sx = x;
5211                 }
5212
5213                 /* Random message */
5214                 switch (randint1(3))
5215                 {
5216                         case 1:
5217                         {
5218 #ifdef JP
5219 msg_print("¥À¥ó¥¸¥ç¥ó¤ÎÊɤ¬Êø¤ì¤¿¡ª");
5220 #else
5221                                 msg_print("The cave ceiling collapses!");
5222 #endif
5223
5224                                 break;
5225                         }
5226                         case 2:
5227                         {
5228 #ifdef JP
5229 msg_print("¥À¥ó¥¸¥ç¥ó¤Î¾²¤¬ÉÔ¼«Á³¤Ë¤Í¤¸¶Ê¤¬¤Ã¤¿¡ª");
5230 #else
5231                                 msg_print("The cave floor twists in an unnatural way!");
5232 #endif
5233
5234                                 break;
5235                         }
5236                         default:
5237                         {
5238 #ifdef JP
5239 msg_print("¥À¥ó¥¸¥ç¥ó¤¬Íɤ줿¡ªÊø¤ì¤¿´ä¤¬Æ¬¤Ë¹ß¤Ã¤Æ¤­¤¿¡ª");
5240 #else
5241                                 msg_print("The cave quakes!  You are pummeled with debris!");
5242 #endif
5243
5244                                 break;
5245                         }
5246                 }
5247
5248                 /* Hurt the player a lot */
5249                 if (!sn)
5250                 {
5251                         /* Message and damage */
5252 #ifdef JP
5253 msg_print("¤¢¤Ê¤¿¤Ï¤Ò¤É¤¤²ø²æ¤òÉé¤Ã¤¿¡ª");
5254 #else
5255                         msg_print("You are severely crushed!");
5256 #endif
5257
5258                         damage = 200;
5259                 }
5260
5261                 /* Destroy the grid, and push the player to safety */
5262                 else
5263                 {
5264                         /* Calculate results */
5265                         switch (randint1(3))
5266                         {
5267                                 case 1:
5268                                 {
5269 #ifdef JP
5270 msg_print("¹ß¤êÃí¤°´ä¤ò¤¦¤Þ¤¯Èò¤±¤¿¡ª");
5271 #else
5272                                         msg_print("You nimbly dodge the blast!");
5273 #endif
5274
5275                                         damage = 0;
5276                                         break;
5277                                 }
5278                                 case 2:
5279                                 {
5280 #ifdef JP
5281 msg_print("´äÀФ¬¤¢¤Ê¤¿¤Ëľ·â¤·¤¿!");
5282 #else
5283                                         msg_print("You are bashed by rubble!");
5284 #endif
5285
5286                                         damage = damroll(10, 4);
5287                                         (void)set_stun(p_ptr->stun + randint1(50));
5288                                         break;
5289                                 }
5290                                 case 3:
5291                                 {
5292 #ifdef JP
5293 msg_print("¤¢¤Ê¤¿¤Ï¾²¤ÈÊɤȤδ֤˶´¤Þ¤ì¤Æ¤·¤Þ¤Ã¤¿¡ª");
5294 #else
5295                                         msg_print("You are crushed between the floor and ceiling!");
5296 #endif
5297
5298                                         damage = damroll(10, 4);
5299                                         (void)set_stun(p_ptr->stun + randint1(50));
5300                                         break;
5301                                 }
5302                         }
5303
5304                         /* Save the old location */
5305                         oy = py;
5306                         ox = px;
5307
5308                         /* Move the player to the safe location */
5309                         py = sy;
5310                         px = sx;
5311
5312                         if (p_ptr->riding)
5313                         {
5314                                 int tmp;
5315                                 tmp = cave[py][px].m_idx;
5316                                 cave[py][px].m_idx = cave[oy][ox].m_idx;
5317                                 cave[oy][ox].m_idx = tmp;
5318                                 m_list[p_ptr->riding].fy = py;
5319                                 m_list[p_ptr->riding].fx = px;
5320                                 update_mon(cave[py][px].m_idx, TRUE);
5321                         }
5322
5323                         /* Redraw the old spot */
5324                         lite_spot(oy, ox);
5325
5326                         /* Redraw the new spot */
5327                         lite_spot(py, px);
5328
5329                         /* Check for new panel */
5330                         verify_panel();
5331                 }
5332
5333                 /* Important -- no wall on player */
5334                 map[16+py-cy][16+px-cx] = FALSE;
5335
5336                 /* Take some damage */
5337 #ifdef JP
5338 if (damage) take_hit(DAMAGE_ATTACK, damage, "ÃÏ¿Ì", -1);
5339 #else
5340                 if (damage) take_hit(DAMAGE_ATTACK, damage, "an earthquake", -1);
5341 #endif
5342
5343         }
5344
5345
5346         /* Examine the quaked region */
5347         for (dy = -r; dy <= r; dy++)
5348         {
5349                 for (dx = -r; dx <= r; dx++)
5350                 {
5351                         /* Extract the location */
5352                         yy = cy + dy;
5353                         xx = cx + dx;
5354
5355                         /* Skip unaffected grids */
5356                         if (!map[16+yy-cy][16+xx-cx]) continue;
5357
5358                         /* Access the grid */
5359                         c_ptr = &cave[yy][xx];
5360
5361                         if (c_ptr->m_idx == p_ptr->riding) continue;
5362
5363                         /* Process monsters */
5364                         if (c_ptr->m_idx)
5365                         {
5366                                 monster_type *m_ptr = &m_list[c_ptr->m_idx];
5367                                 monster_race *r_ptr = &r_info[m_ptr->r_idx];
5368
5369                                 /* Quest monsters */
5370                                 if (r_ptr->flags1 & RF1_QUESTOR)
5371                                 {
5372                                         /* No wall on quest monsters */
5373                                         map[16+yy-cy][16+xx-cx] = FALSE;
5374
5375                                         continue;
5376                                 }
5377
5378                                 /* Most monsters cannot co-exist with rock */
5379                                 if (!(r_ptr->flags2 & (RF2_KILL_WALL)) &&
5380                                     !(r_ptr->flags2 & (RF2_PASS_WALL)))
5381                                 {
5382                                         char m_name[80];
5383
5384                                         /* Assume not safe */
5385                                         sn = 0;
5386
5387                                         /* Monster can move to escape the wall */
5388                                         if (!(r_ptr->flags1 & (RF1_NEVER_MOVE)))
5389                                         {
5390                                                 /* Look for safety */
5391                                                 for (i = 0; i < 8; i++)
5392                                                 {
5393                                                         /* Access the grid */
5394                                                         y = yy + ddy_ddd[i];
5395                                                         x = xx + ddx_ddd[i];
5396
5397                                                         /* Skip non-empty grids */
5398                                                         if (!cave_empty_bold(y, x)) continue;
5399
5400                                                         /* Hack -- no safety on glyph of warding */
5401                                                         if (cave[y][x].feat == FEAT_GLYPH) continue;
5402                                                         if (cave[y][x].feat == FEAT_MINOR_GLYPH) continue;
5403
5404                                                         /* ... nor on the Pattern */
5405                                                         if ((cave[y][x].feat <= FEAT_PATTERN_XTRA2) &&
5406                                                             (cave[y][x].feat >= FEAT_PATTERN_START))
5407                                                                 continue;
5408
5409                                                         /* Important -- Skip "quake" grids */
5410                                                         if (map[16+y-cy][16+x-cx]) continue;
5411
5412                                                         if (cave[y][x].m_idx) continue;
5413                                                         if ((y == py) && (x == px)) continue;
5414
5415                                                         /* Count "safe" grids */
5416                                                         sn++;
5417
5418                                                         /* Randomize choice */
5419                                                         if (randint0(sn) > 0) continue;
5420
5421                                                         /* Save the safe grid */
5422                                                         sy = y; sx = x;
5423                                                 }
5424                                         }
5425
5426                                         /* Describe the monster */
5427                                         monster_desc(m_name, m_ptr, 0);
5428
5429                                         /* Scream in pain */
5430 #ifdef JP
5431 msg_format("%^s¤Ï¶ìÄˤǵ㤭¤ï¤á¤¤¤¿¡ª", m_name);
5432 #else
5433                                         msg_format("%^s wails out in pain!", m_name);
5434 #endif
5435
5436
5437                                         /* Take damage from the quake */
5438                                         damage = (sn ? damroll(4, 8) : (m_ptr->hp + 1));
5439
5440                                         /* Monster is certainly awake */
5441                                         m_ptr->csleep = 0;
5442
5443                                         /* Apply damage directly */
5444                                         m_ptr->hp -= damage;
5445
5446                                         /* Delete (not kill) "dead" monsters */
5447                                         if (m_ptr->hp < 0)
5448                                         {
5449                                                 /* Message */
5450 #ifdef JP
5451 msg_format("%^s¤Ï´äÀФËËä¤â¤ì¤Æ¤·¤Þ¤Ã¤¿¡ª", m_name);
5452 #else
5453                                                 msg_format("%^s is embedded in the rock!", m_name);
5454 #endif
5455
5456                                                 if (c_ptr->m_idx)
5457                                                 {
5458                                                         if (record_named_pet && is_pet(&m_list[c_ptr->m_idx]) && m_list[c_ptr->m_idx].nickname)
5459                                                         {
5460                                                                 char m2_name[80];
5461
5462                                                                 monster_desc(m2_name, m_ptr, 0x08);
5463                                                                 do_cmd_write_nikki(NIKKI_NAMED_PET, 7, m2_name);
5464                                                         }
5465                                                 }
5466
5467                                                 /* Delete the monster */
5468                                                 delete_monster(yy, xx);
5469
5470                                                 /* No longer safe */
5471                                                 sn = 0;
5472                                         }
5473
5474                                         /* Hack -- Escape from the rock */
5475                                         if (sn)
5476                                         {
5477                                                 int m_idx = cave[yy][xx].m_idx;
5478
5479                                                 /* Update the new location */
5480                                                 cave[sy][sx].m_idx = m_idx;
5481
5482                                                 /* Update the old location */
5483                                                 cave[yy][xx].m_idx = 0;
5484
5485                                                 /* Move the monster */
5486                                                 m_ptr->fy = sy;
5487                                                 m_ptr->fx = sx;
5488
5489                                                 /* Update the monster (new location) */
5490                                                 update_mon(m_idx, TRUE);
5491
5492                                                 /* Redraw the old grid */
5493                                                 lite_spot(yy, xx);
5494
5495                                                 /* Redraw the new grid */
5496                                                 lite_spot(sy, sx);
5497                                         }
5498                                 }
5499                         }
5500                 }
5501         }
5502
5503
5504         /* Examine the quaked region */
5505         for (dy = -r; dy <= r; dy++)
5506         {
5507                 for (dx = -r; dx <= r; dx++)
5508                 {
5509                         /* Extract the location */
5510                         yy = cy + dy;
5511                         xx = cx + dx;
5512
5513                         /* Skip unaffected grids */
5514                         if (!map[16+yy-cy][16+xx-cx]) continue;
5515
5516                         /* Access the cave grid */
5517                         c_ptr = &cave[yy][xx];
5518
5519                         /* Paranoia -- never affect player */
5520 /*                      if ((yy == py) && (xx == px)) continue; */
5521
5522                         /* Destroy location (if valid) */
5523                         if (cave_valid_bold(yy, xx))
5524                         {
5525                                 bool floor = cave_floor_bold(yy, xx);
5526
5527                                 /* Delete objects */
5528                                 delete_object(yy, xx);
5529
5530                                 /* Wall (or floor) type */
5531                                 t = (floor ? randint0(100) : 200);
5532
5533                                 /* Granite */
5534                                 if (t < 20)
5535                                 {
5536                                         /* Create granite wall */
5537                                         c_ptr->feat = FEAT_WALL_EXTRA;
5538                                 }
5539
5540                                 /* Quartz */
5541                                 else if (t < 70)
5542                                 {
5543                                         /* Create quartz vein */
5544                                         c_ptr->feat = FEAT_QUARTZ;
5545                                 }
5546
5547                                 /* Magma */
5548                                 else if (t < 100)
5549                                 {
5550                                         /* Create magma vein */
5551                                         c_ptr->feat = FEAT_MAGMA;
5552                                 }
5553
5554                                 /* Floor */
5555                                 else
5556                                 {
5557                                         /* Create floor */
5558                                         c_ptr->feat = floor_type[randint0(100)];
5559                                         c_ptr->info &= ~(CAVE_MASK);
5560                                         c_ptr->info |= CAVE_FLOOR;
5561                                 }
5562                         }
5563                 }
5564         }
5565
5566
5567         /* Mega-Hack -- Forget the view and lite */
5568         p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE);
5569
5570         /* Update stuff */
5571         p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MON_LITE);
5572
5573         /* Update the monsters */
5574         p_ptr->update |= (PU_DISTANCE);
5575
5576         /* Update the health bar */
5577         p_ptr->redraw |= (PR_HEALTH | PR_UHEALTH);
5578
5579         /* Redraw map */
5580         p_ptr->redraw |= (PR_MAP);
5581
5582         /* Window stuff */
5583         p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
5584
5585         /* Success */
5586         return (TRUE);
5587 }
5588
5589
5590 void discharge_minion(void)
5591 {
5592         int i;
5593         bool okay = TRUE;
5594
5595         for (i = 1; i < m_max; i++)
5596         {
5597                 monster_type *m_ptr = &m_list[i];
5598                 if (!m_ptr->r_idx || !is_pet(m_ptr)) continue;
5599                 if (m_ptr->nickname) okay = FALSE;
5600         }
5601         if (!okay || p_ptr->riding)
5602         {
5603 #ifdef JP
5604                 if (!get_check("ËÜÅö¤ËÁ´¥Ú¥Ã¥È¤òÇúÇˤ·¤Þ¤¹¤«¡©"))
5605 #else
5606                 if (!get_check("You will blast all pets. Are you sure? "))
5607 #endif
5608                         return;
5609         }
5610         for (i = 1; i < m_max; i++)
5611         {
5612                 int dam;
5613                 monster_type *m_ptr = &m_list[i];
5614                 monster_race *r_ptr;
5615
5616                 if (!m_ptr->r_idx || !is_pet(m_ptr)) continue;
5617                 r_ptr = &r_info[m_ptr->r_idx];
5618
5619                 /* Uniques resist discharging */
5620                 if (r_ptr->flags1 & RF1_UNIQUE)
5621                 {
5622                         char m_name[80];
5623                         monster_desc(m_name, m_ptr, 0x00);
5624 #ifdef JP
5625                         msg_format("%s¤ÏÇúÇˤµ¤ì¤ë¤Î¤ò·ù¤¬¤ê¡¢¾¡¼ê¤Ë¼«Ê¬¤ÎÀ¤³¦¤Ø¤Èµ¢¤Ã¤¿¡£", m_name);
5626 #else
5627                         msg_format("%^s resists to be blasted, and run away.", m_name);
5628 #endif
5629                         delete_monster_idx(i);
5630                         continue;
5631                 }
5632                 dam = m_ptr->hp / 2;
5633                 if (dam > 100) dam = (dam-100)/2 + 100;
5634                 if (dam > 400) dam = (dam-400)/2 + 400;
5635                 if (dam > 800) dam = 800;
5636                 project(i, 2+(r_ptr->level/20), m_ptr->fy,
5637                         m_ptr->fx, dam, GF_PLASMA, 
5638                         PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_MONSTER, -1);
5639                 delete_monster_idx(i);
5640         }
5641 }
5642
5643
5644 /*
5645  * This routine clears the entire "temp" set.
5646  *
5647  * This routine will Perma-Lite all "temp" grids.
5648  *
5649  * This routine is used (only) by "lite_room()"
5650  *
5651  * Dark grids are illuminated.
5652  *
5653  * Also, process all affected monsters.
5654  *
5655  * SMART monsters always wake up when illuminated
5656  * NORMAL monsters wake up 1/4 the time when illuminated
5657  * STUPID monsters wake up 1/10 the time when illuminated
5658  */
5659 static void cave_temp_room_lite(void)
5660 {
5661         int i;
5662
5663         /* Clear them all */
5664         for (i = 0; i < temp_n; i++)
5665         {
5666                 int y = temp_y[i];
5667                 int x = temp_x[i];
5668
5669                 cave_type *c_ptr = &cave[y][x];
5670
5671                 /* No longer in the array */
5672                 c_ptr->info &= ~(CAVE_TEMP);
5673
5674                 /* Update only non-CAVE_GLOW grids */
5675                 /* if (c_ptr->info & (CAVE_GLOW)) continue; */
5676
5677                 /* Perma-Lite */
5678                 c_ptr->info |= (CAVE_GLOW);
5679
5680                 /* Process affected monsters */
5681                 if (c_ptr->m_idx)
5682                 {
5683                         int chance = 25;
5684
5685                         monster_type    *m_ptr = &m_list[c_ptr->m_idx];
5686
5687                         monster_race    *r_ptr = &r_info[m_ptr->r_idx];
5688
5689                         /* Update the monster */
5690                         update_mon(c_ptr->m_idx, FALSE);
5691
5692                         /* Stupid monsters rarely wake up */
5693                         if (r_ptr->flags2 & (RF2_STUPID)) chance = 10;
5694
5695                         /* Smart monsters always wake up */
5696                         if (r_ptr->flags2 & (RF2_SMART)) chance = 100;
5697
5698                         /* Sometimes monsters wake up */
5699                         if (m_ptr->csleep && (randint0(100) < chance))
5700                         {
5701                                 /* Wake up! */
5702                                 m_ptr->csleep = 0;
5703
5704                                 /* Notice the "waking up" */
5705                                 if (m_ptr->ml)
5706                                 {
5707                                         char m_name[80];
5708
5709                                         /* Acquire the monster name */
5710                                         monster_desc(m_name, m_ptr, 0);
5711
5712                                         /* Dump a message */
5713 #ifdef JP
5714 msg_format("%^s¤¬Ìܤò³Ð¤Þ¤·¤¿¡£", m_name);
5715 #else
5716                                         msg_format("%^s wakes up.", m_name);
5717 #endif
5718                                         /* Redraw the health bar */
5719                                         if (p_ptr->health_who == c_ptr->m_idx)
5720                                                 p_ptr->redraw |= (PR_HEALTH);
5721
5722                                 }
5723                         }
5724                 }
5725
5726                 /* Note */
5727                 note_spot(y, x);
5728
5729                 /* Redraw */
5730                 lite_spot(y, x);
5731         }
5732
5733         /* None left */
5734         temp_n = 0;
5735 }
5736
5737
5738
5739 /*
5740  * This routine clears the entire "temp" set.
5741  *
5742  * This routine will "darken" all "temp" grids.
5743  *
5744  * In addition, some of these grids will be "unmarked".
5745  *
5746  * This routine is used (only) by "unlite_room()"
5747  *
5748  * Also, process all affected monsters
5749  */
5750 static void cave_temp_room_unlite(void)
5751 {
5752         int i;
5753
5754         /* Clear them all */
5755         for (i = 0; i < temp_n; i++)
5756         {
5757                 int y = temp_y[i];
5758                 int x = temp_x[i];
5759
5760                 cave_type *c_ptr = &cave[y][x];
5761
5762                 /* No longer in the array */
5763                 c_ptr->info &= ~(CAVE_TEMP);
5764
5765                 /* Darken the grid */
5766                 c_ptr->info &= ~(CAVE_GLOW);
5767
5768                 /* Hack -- Forget "boring" grids */
5769                 if ((c_ptr->feat <= FEAT_INVIS) || (c_ptr->feat == FEAT_DIRT) || (c_ptr->feat == FEAT_GRASS))
5770                 {
5771                         /* Forget the grid */
5772                         c_ptr->info &= ~(CAVE_MARK);
5773
5774                         /* Notice */
5775                         note_spot(y, x);
5776                 }
5777
5778                 /* Process affected monsters */
5779                 if (c_ptr->m_idx)
5780                 {
5781                         /* Update the monster */
5782                         update_mon(c_ptr->m_idx, FALSE);
5783                 }
5784
5785                 /* Redraw */
5786                 lite_spot(y, x);
5787         }
5788
5789         /* None left */
5790         temp_n = 0;
5791 }
5792
5793
5794
5795 /*
5796  * Aux function -- see below
5797  */
5798 static void cave_temp_room_aux(int y, int x)
5799 {
5800         cave_type *c_ptr;
5801
5802         /* Verify */
5803 /*      if (!in_bounds(y, x)) return; */
5804
5805         /* Get the grid */
5806         c_ptr = &cave[y][x];
5807
5808         /* Avoid infinite recursion */
5809         if (c_ptr->info & (CAVE_TEMP)) return;
5810
5811         /* Do not "leave" the current room */
5812         if (!(c_ptr->info & (CAVE_ROOM))) return;
5813
5814         /* Paranoia -- verify space */
5815         if (temp_n == TEMP_MAX) return;
5816
5817         /* Mark the grid as "seen" */
5818         c_ptr->info |= (CAVE_TEMP);
5819
5820         /* Add it to the "seen" set */
5821         temp_y[temp_n] = y;
5822         temp_x[temp_n] = x;
5823         temp_n++;
5824 }
5825
5826
5827
5828
5829 /*
5830  * Illuminate any room containing the given location.
5831  */
5832 void lite_room(int y1, int x1)
5833 {
5834         int i, x, y;
5835
5836         /* Add the initial grid */
5837         cave_temp_room_aux(y1, x1);
5838
5839         /* While grids are in the queue, add their neighbors */
5840         for (i = 0; i < temp_n; i++)
5841         {
5842                 x = temp_x[i], y = temp_y[i];
5843
5844                 /* Walls get lit, but stop light */
5845                 if (!cave_floor_bold(y, x)) continue;
5846
5847                 /* Spread adjacent */
5848                 cave_temp_room_aux(y + 1, x);
5849                 cave_temp_room_aux(y - 1, x);
5850                 cave_temp_room_aux(y, x + 1);
5851                 cave_temp_room_aux(y, x - 1);
5852
5853                 /* Spread diagonal */
5854                 cave_temp_room_aux(y + 1, x + 1);
5855                 cave_temp_room_aux(y - 1, x - 1);
5856                 cave_temp_room_aux(y - 1, x + 1);
5857                 cave_temp_room_aux(y + 1, x - 1);
5858         }
5859
5860         /* Now, lite them all up at once */
5861         cave_temp_room_lite();
5862 }
5863
5864
5865 /*
5866  * Darken all rooms containing the given location
5867  */
5868 void unlite_room(int y1, int x1)
5869 {
5870         int i, x, y;
5871
5872         /* Add the initial grid */
5873         cave_temp_room_aux(y1, x1);
5874
5875         /* Spread, breadth first */
5876         for (i = 0; i < temp_n; i++)
5877         {
5878                 x = temp_x[i], y = temp_y[i];
5879
5880                 /* Walls get dark, but stop darkness */
5881                 if (!cave_floor_bold(y, x)) continue;
5882
5883                 /* Spread adjacent */
5884                 cave_temp_room_aux(y + 1, x);
5885                 cave_temp_room_aux(y - 1, x);
5886                 cave_temp_room_aux(y, x + 1);
5887                 cave_temp_room_aux(y, x - 1);
5888
5889                 /* Spread diagonal */
5890                 cave_temp_room_aux(y + 1, x + 1);
5891                 cave_temp_room_aux(y - 1, x - 1);
5892                 cave_temp_room_aux(y - 1, x + 1);
5893                 cave_temp_room_aux(y + 1, x - 1);
5894         }
5895
5896         /* Now, darken them all at once */
5897         cave_temp_room_unlite();
5898 }
5899
5900
5901
5902 /*
5903  * Hack -- call light around the player
5904  * Affect all monsters in the projection radius
5905  */
5906 bool lite_area(int dam, int rad)
5907 {
5908         int flg = PROJECT_GRID | PROJECT_KILL;
5909
5910         if (d_info[dungeon_type].flags1 & DF1_DARKNESS)
5911         {
5912 #ifdef JP
5913                 msg_print("¥À¥ó¥¸¥ç¥ó¤¬¸÷¤òµÛ¼ý¤·¤¿¡£");
5914 #else
5915                 msg_print("The darkness of this dungeon absorb your light.");
5916 #endif
5917                 return FALSE;
5918         }
5919
5920         /* Hack -- Message */
5921         if (!p_ptr->blind)
5922         {
5923 #ifdef JP
5924 msg_print("Çò¤¤¸÷¤¬ÊÕ¤ê¤òʤ¤Ã¤¿¡£");
5925 #else
5926                 msg_print("You are surrounded by a white light.");
5927 #endif
5928
5929         }
5930
5931         /* Hook into the "project()" function */
5932         (void)project(0, rad, py, px, dam, GF_LITE_WEAK, flg, -1);
5933
5934         /* Lite up the room */
5935         lite_room(py, px);
5936
5937         if (p_ptr->special_defense & NINJA_S_STEALTH)
5938         {
5939                 set_superstealth(FALSE);
5940         }
5941
5942         /* Assume seen */
5943         return (TRUE);
5944 }
5945
5946
5947 /*
5948  * Hack -- call darkness around the player
5949  * Affect all monsters in the projection radius
5950  */
5951 bool unlite_area(int dam, int rad)
5952 {
5953         int flg = PROJECT_GRID | PROJECT_KILL;
5954
5955         /* Hack -- Message */
5956         if (!p_ptr->blind)
5957         {
5958 #ifdef JP
5959 msg_print("°Å°Ç¤¬ÊÕ¤ê¤òʤ¤Ã¤¿¡£");
5960 #else
5961                 msg_print("Darkness surrounds you.");
5962 #endif
5963
5964         }
5965
5966         /* Hook into the "project()" function */
5967         (void)project(0, rad, py, px, dam, GF_DARK_WEAK, flg, -1);
5968
5969         /* Lite up the room */
5970         unlite_room(py, px);
5971
5972         /* Assume seen */
5973         return (TRUE);
5974 }
5975
5976
5977
5978 /*
5979  * Cast a ball spell
5980  * Stop if we hit a monster, act as a "ball"
5981  * Allow "target" mode to pass over monsters
5982  * Affect grids, objects, and monsters
5983  */
5984 bool fire_ball(int typ, int dir, int dam, int rad)
5985 {
5986         int tx, ty;
5987
5988         int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_NO_REF;
5989
5990         if (typ == GF_CONTROL_LIVING) flg|= PROJECT_HIDE;
5991         /* Use the given direction */
5992         tx = px + 99 * ddx[dir];
5993         ty = py + 99 * ddy[dir];
5994
5995         /* Hack -- Use an actual "target" */
5996         if ((dir == 5) && target_okay())
5997         {
5998                 flg &= ~(PROJECT_STOP);
5999                 tx = target_col;
6000                 ty = target_row;
6001         }
6002
6003         /* Analyze the "dir" and the "target".  Hurt items on floor. */
6004         return (project(0, rad, ty, tx, dam, typ, flg, -1));
6005 }
6006
6007
6008 /*
6009  * Cast a ball spell
6010  * Stop if we hit a monster, act as a "ball"
6011  * Allow "target" mode to pass over monsters
6012  * Affect grids, objects, and monsters
6013  */
6014 bool fire_rocket(int typ, int dir, int dam, int rad)
6015 {
6016         int tx, ty;
6017
6018         int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_NO_REF;
6019
6020         /* Use the given direction */
6021         tx = px + 99 * ddx[dir];
6022         ty = py + 99 * ddy[dir];
6023
6024         /* Hack -- Use an actual "target" */
6025         if ((dir == 5) && target_okay())
6026         {
6027                 tx = target_col;
6028                 ty = target_row;
6029         }
6030
6031         /* Analyze the "dir" and the "target".  Hurt items on floor. */
6032         return (project(0, rad, ty, tx, dam, typ, flg, -1));
6033 }
6034
6035
6036 /*
6037  * Cast a ball spell
6038  * Stop if we hit a monster, act as a "ball"
6039  * Allow "target" mode to pass over monsters
6040  * Affect grids, objects, and monsters
6041  */
6042 bool fire_ball_hide(int typ, int dir, int dam, int rad)
6043 {
6044         int tx, ty;
6045
6046         int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_NO_REF | PROJECT_HIDE;
6047
6048         /* Use the given direction */
6049         tx = px + 99 * ddx[dir];
6050         ty = py + 99 * ddy[dir];
6051
6052         /* Hack -- Use an actual "target" */
6053         if ((dir == 5) && target_okay())
6054         {
6055                 flg &= ~(PROJECT_STOP);
6056                 tx = target_col;
6057                 ty = target_row;
6058         }
6059
6060         /* Analyze the "dir" and the "target".  Hurt items on floor. */
6061         return (project(0, rad, ty, tx, dam, typ, flg, -1));
6062 }
6063
6064
6065 /*
6066  * Cast a meteor spell, defined as a ball spell cast by an arbitary monster, 
6067  * player, or outside source, that starts out at an arbitrary location, and 
6068  * leaving no trail from the "caster" to the target.  This function is 
6069  * especially useful for bombardments and similar. -LM-
6070  *
6071  * Option to hurt the player.
6072  */
6073 bool fire_meteor(int who, int typ, int y, int x, int dam, int rad)
6074 {
6075         int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_NO_REF;
6076
6077         /* Analyze the "target" and the caster. */
6078         return (project(who, rad, y, x, dam, typ, flg, -1));
6079 }
6080
6081
6082 /*
6083  * Switch position with a monster.
6084  */
6085 bool teleport_swap(int dir)
6086 {
6087         int tx, ty;
6088         cave_type * c_ptr;
6089         monster_type * m_ptr;
6090         monster_race * r_ptr;
6091
6092         if ((dir == 5) && target_okay())
6093         {
6094                 tx = target_col;
6095                 ty = target_row;
6096         }
6097         else
6098         {
6099                 tx = px + ddx[dir];
6100                 ty = py + ddy[dir];
6101         }
6102         c_ptr = &cave[ty][tx];
6103
6104         if (p_ptr->anti_tele)
6105         {
6106 #ifdef JP
6107 msg_print("ÉԻ׵ĤÊÎϤ¬¥Æ¥ì¥Ý¡¼¥È¤òËɤ¤¤À¡ª");
6108 #else
6109                 msg_print("A mysterious force prevents you from teleporting!");
6110 #endif
6111
6112                 return FALSE;
6113         }
6114
6115         if (!c_ptr->m_idx || (c_ptr->m_idx == p_ptr->riding))
6116         {
6117 #ifdef JP
6118 msg_print("¤½¤ì¤È¤Ï¾ì½ê¤ò¸ò´¹¤Ç¤­¤Þ¤»¤ó¡£");
6119 #else
6120                 msg_print("You can't trade places with that!");
6121 #endif
6122
6123
6124                 /* Failure */
6125                 return FALSE;
6126         }
6127
6128         if ((c_ptr->info & CAVE_ICKY) || (distance(ty, tx, py, px) > p_ptr->lev * 3 / 2 + 10))
6129         {
6130 #ifdef JP
6131 msg_print("¼ºÇÔ¤·¤¿¡£");
6132 #else
6133                 msg_print("Failed to swap.");
6134 #endif
6135
6136
6137                 /* Failure */
6138                 return FALSE;
6139         }
6140
6141         m_ptr = &m_list[c_ptr->m_idx];
6142         r_ptr = &r_info[m_ptr->r_idx];
6143
6144         if (r_ptr->flags3 & RF3_RES_TELE)
6145         {
6146 #ifdef JP
6147 msg_print("¥Æ¥ì¥Ý¡¼¥È¤ò¼ÙË⤵¤ì¤¿¡ª");
6148 #else
6149                 msg_print("Your teleportation is blocked!");
6150 #endif
6151
6152                 m_ptr->csleep = 0;
6153                 /* Failure */
6154                 return FALSE;
6155         }
6156
6157         sound(SOUND_TELEPORT);
6158
6159         cave[py][px].m_idx = c_ptr->m_idx;
6160
6161         /* Update the old location */
6162         c_ptr->m_idx = p_ptr->riding;
6163
6164         /* Move the monster */
6165         m_ptr->fy = py;
6166         m_ptr->fx = px;
6167
6168         /* Move the player */
6169         px = tx;
6170         py = ty;
6171
6172         if (p_ptr->riding)
6173         {
6174                 m_list[p_ptr->riding].fy = ty;
6175                 m_list[p_ptr->riding].fx = tx;
6176
6177                 /* Update the monster (new location) */
6178                 update_mon(cave[ty][tx].m_idx, TRUE);
6179         }
6180
6181         tx = m_ptr->fx;
6182         ty = m_ptr->fy;
6183
6184         m_ptr->csleep = 0;
6185
6186         /* Update the monster (new location) */
6187         update_mon(cave[ty][tx].m_idx, TRUE);
6188
6189         /* Redraw the old grid */
6190         lite_spot(ty, tx);
6191
6192         /* Redraw the new grid */
6193         lite_spot(py, px);
6194
6195         /* Check for new panel (redraw map) */
6196         verify_panel();
6197
6198         /* Update stuff */
6199         p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW);
6200
6201         /* Notice changes in view */
6202         if (r_ptr->flags7 & (RF7_HAS_LITE_1 | RF7_HAS_LITE_2 | RF7_SELF_LITE_1 | RF7_SELF_LITE_2))
6203         {
6204                 /* Update some things */
6205                 p_ptr->update |= (PU_MON_LITE);
6206         }
6207
6208         /* Update the monsters */
6209         p_ptr->update |= (PU_DISTANCE);
6210
6211         /* Window stuff */
6212         p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
6213
6214         /* Redraw the health bar */
6215         if (p_ptr->health_who == cave[ty][tx].m_idx)
6216                 p_ptr->redraw |= (PR_HEALTH);
6217
6218         /* Handle stuff XXX XXX XXX */
6219         handle_stuff();
6220
6221         /* Success */
6222         return TRUE;
6223 }
6224
6225
6226 /*
6227  * Hack -- apply a "projection()" in a direction (or at the target)
6228  */
6229 bool project_hook(int typ, int dir, int dam, int flg)
6230 {
6231         int tx, ty;
6232
6233         /* Pass through the target if needed */
6234         flg |= (PROJECT_THRU);
6235
6236         /* Use the given direction */
6237         tx = px + ddx[dir];
6238         ty = py + ddy[dir];
6239
6240         /* Hack -- Use an actual "target" */
6241         if ((dir == 5) && target_okay())
6242         {
6243                 tx = target_col;
6244                 ty = target_row;
6245         }
6246
6247         /* Analyze the "dir" and the "target", do NOT explode */
6248         return (project(0, 0, ty, tx, dam, typ, flg, -1));
6249 }
6250
6251
6252 /*
6253  * Cast a bolt spell
6254  * Stop if we hit a monster, as a "bolt"
6255  * Affect monsters (not grids or objects)
6256  */
6257 bool fire_bolt(int typ, int dir, int dam)
6258 {
6259         int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_GRID;
6260         return (project_hook(typ, dir, dam, flg));
6261 }
6262
6263
6264 /*
6265  * Cast a beam spell
6266  * Pass through monsters, as a "beam"
6267  * Affect monsters (not grids or objects)
6268  */
6269 bool fire_beam(int typ, int dir, int dam)
6270 {
6271         int flg = PROJECT_BEAM | PROJECT_KILL | PROJECT_GRID | PROJECT_ITEM;
6272         return (project_hook(typ, dir, dam, flg));
6273 }
6274
6275
6276 /*
6277  * Cast a bolt spell, or rarely, a beam spell
6278  */
6279 bool fire_bolt_or_beam(int prob, int typ, int dir, int dam)
6280 {
6281         if (randint0(100) < prob)
6282         {
6283                 return (fire_beam(typ, dir, dam));
6284         }
6285         else
6286         {
6287                 return (fire_bolt(typ, dir, dam));
6288         }
6289 }
6290
6291
6292 /*
6293  * Some of the old functions
6294  */
6295 bool lite_line(int dir)
6296 {
6297         int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_KILL;
6298         return (project_hook(GF_LITE_WEAK, dir, damroll(6, 8), flg));
6299 }
6300
6301
6302 bool drain_life(int dir, int dam)
6303 {
6304         int flg = PROJECT_STOP | PROJECT_KILL;
6305         return (project_hook(GF_OLD_DRAIN, dir, dam, flg));
6306 }
6307
6308
6309 bool wall_to_mud(int dir)
6310 {
6311         int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
6312         return (project_hook(GF_KILL_WALL, dir, 20 + randint1(30), flg));
6313 }
6314
6315
6316 bool wizard_lock(int dir)
6317 {
6318         int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
6319         return (project_hook(GF_JAM_DOOR, dir, 20 + randint1(30), flg));
6320 }
6321
6322
6323 bool destroy_door(int dir)
6324 {
6325         int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM;
6326         return (project_hook(GF_KILL_DOOR, dir, 0, flg));
6327 }
6328
6329
6330 bool disarm_trap(int dir)
6331 {
6332         int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM;
6333         return (project_hook(GF_KILL_TRAP, dir, 0, flg));
6334 }
6335
6336
6337 bool heal_monster(int dir, int dam)
6338 {
6339         int flg = PROJECT_STOP | PROJECT_KILL;
6340         return (project_hook(GF_OLD_HEAL, dir, dam, flg));
6341 }
6342
6343
6344 bool speed_monster(int dir)
6345 {
6346         int flg = PROJECT_STOP | PROJECT_KILL;
6347         return (project_hook(GF_OLD_SPEED, dir, p_ptr->lev, flg));
6348 }
6349
6350
6351 bool slow_monster(int dir)
6352 {
6353         int flg = PROJECT_STOP | PROJECT_KILL;
6354         return (project_hook(GF_OLD_SLOW, dir, p_ptr->lev, flg));
6355 }
6356
6357
6358 bool sleep_monster(int dir)
6359 {
6360         int flg = PROJECT_STOP | PROJECT_KILL;
6361         return (project_hook(GF_OLD_SLEEP, dir, p_ptr->lev, flg));
6362 }
6363
6364
6365 bool stasis_monster(int dir)
6366 {
6367         return (fire_ball_hide(GF_STASIS, dir, p_ptr->lev*2, 0));
6368 }
6369
6370
6371 bool confuse_monster(int dir, int plev)
6372 {
6373         int flg = PROJECT_STOP | PROJECT_KILL;
6374         return (project_hook(GF_OLD_CONF, dir, plev, flg));
6375 }
6376
6377
6378 bool stun_monster(int dir, int plev)
6379 {
6380         int flg = PROJECT_STOP | PROJECT_KILL;
6381         return (project_hook(GF_STUN, dir, plev, flg));
6382 }
6383
6384
6385 bool poly_monster(int dir)
6386 {
6387         int flg = PROJECT_STOP | PROJECT_KILL;
6388         bool tester = (project_hook(GF_OLD_POLY, dir, p_ptr->lev, flg));
6389         if (tester)
6390                 chg_virtue(V_CHANCE, 1);
6391         return(tester);
6392 }
6393
6394
6395 bool clone_monster(int dir)
6396 {
6397         int flg = PROJECT_STOP | PROJECT_KILL;
6398         return (project_hook(GF_OLD_CLONE, dir, 0, flg));
6399 }
6400
6401
6402 bool fear_monster(int dir, int plev)
6403 {
6404         int flg = PROJECT_STOP | PROJECT_KILL;
6405         return (project_hook(GF_TURN_ALL, dir, plev, flg));
6406 }
6407
6408
6409 bool death_ray(int dir, int plev)
6410 {
6411         int flg = PROJECT_STOP | PROJECT_KILL;
6412         return (project_hook(GF_DEATH_RAY, dir, plev * 200, flg));
6413 }
6414
6415
6416 bool teleport_monster(int dir)
6417 {
6418         int flg = PROJECT_BEAM | PROJECT_KILL;
6419         return (project_hook(GF_AWAY_ALL, dir, MAX_SIGHT * 5, flg));
6420 }
6421
6422 /*
6423  * Hooks -- affect adjacent grids (radius 1 ball attack)
6424  */
6425 bool door_creation(void)
6426 {
6427         int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
6428         return (project(0, 1, py, px, 0, GF_MAKE_DOOR, flg, -1));
6429 }
6430
6431
6432 bool trap_creation(int y, int x)
6433 {
6434         int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
6435         return (project(0, 1, y, x, 0, GF_MAKE_TRAP, flg, -1));
6436 }
6437
6438
6439 bool tree_creation(void)
6440 {
6441         int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
6442         return (project(0, 1, py, px, 0, GF_MAKE_TREE, flg, -1));
6443 }
6444
6445
6446 bool glyph_creation(void)
6447 {
6448         int flg = PROJECT_GRID | PROJECT_ITEM;
6449         return (project(0, 1, py, px, 0, GF_MAKE_GLYPH, flg, -1));
6450 }
6451
6452
6453 bool wall_stone(void)
6454 {
6455         int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
6456
6457         bool dummy = (project(0, 1, py, px, 0, GF_STONE_WALL, flg, -1));
6458
6459         /* Update stuff */
6460         p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW);
6461
6462         /* Update the monsters */
6463         p_ptr->update |= (PU_MONSTERS);
6464
6465         /* Redraw map */
6466         p_ptr->redraw |= (PR_MAP);
6467
6468         /* Window stuff */
6469         p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
6470
6471         return dummy;
6472 }
6473
6474
6475 bool destroy_doors_touch(void)
6476 {
6477         int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
6478         return (project(0, 1, py, px, 0, GF_KILL_DOOR, flg, -1));
6479 }
6480
6481
6482 bool sleep_monsters_touch(void)
6483 {
6484         int flg = PROJECT_KILL | PROJECT_HIDE;
6485         return (project(0, 1, py, px, p_ptr->lev, GF_OLD_SLEEP, flg, -1));
6486 }
6487
6488
6489 bool animate_dead(int who, int y, int x)
6490 {
6491         int flg = PROJECT_ITEM | PROJECT_HIDE;
6492         return (project(who, 5, y, x, 0, GF_ANIM_DEAD, flg, -1));
6493 }
6494
6495
6496 void call_chaos(void)
6497 {
6498         int Chaos_type, dummy, dir;
6499         int plev = p_ptr->lev;
6500         bool line_chaos = FALSE;
6501
6502         int hurt_types[31] =
6503         {
6504                 GF_ELEC,      GF_POIS,    GF_ACID,    GF_COLD,
6505                 GF_FIRE,      GF_MISSILE, GF_ARROW,   GF_PLASMA,
6506                 GF_HOLY_FIRE, GF_WATER,   GF_LITE,    GF_DARK,
6507                 GF_FORCE,     GF_INERTIA, GF_MANA,    GF_METEOR,
6508                 GF_ICE,       GF_CHAOS,   GF_NETHER,  GF_DISENCHANT,
6509                 GF_SHARDS,    GF_SOUND,   GF_NEXUS,   GF_CONFUSION,
6510                 GF_TIME,      GF_GRAVITY, GF_ROCKET,  GF_NUKE,
6511                 GF_HELL_FIRE, GF_DISINTEGRATE, GF_PSY_SPEAR
6512         };
6513
6514         Chaos_type = hurt_types[randint0(31)];
6515         if (one_in_(4)) line_chaos = TRUE;
6516
6517         if (one_in_(6))
6518         {
6519                 for (dummy = 1; dummy < 10; dummy++)
6520                 {
6521                         if (dummy - 5)
6522                         {
6523                                 if (line_chaos)
6524                                         fire_beam(Chaos_type, dummy, 150);
6525                                 else
6526                                         fire_ball(Chaos_type, dummy, 150, 2);
6527                         }
6528                 }
6529         }
6530         else if (one_in_(3))
6531         {
6532                 fire_ball(Chaos_type, 0, 500, 8);
6533         }
6534         else
6535         {
6536                 if (!get_aim_dir(&dir)) return;
6537                 if (line_chaos)
6538                         fire_beam(Chaos_type, dir, 250);
6539                 else
6540                         fire_ball(Chaos_type, dir, 250, 3 + (plev / 35));
6541         }
6542 }
6543
6544
6545 /*
6546  * Activate the evil Topi Ylinen curse
6547  * rr9: Stop the nasty things when a Cyberdemon is summoned
6548  * or the player gets paralyzed.
6549  */
6550 bool activate_ty_curse(bool stop_ty, int *count)
6551 {
6552         int     i = 0;
6553
6554         int flg = (PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_JUMP);
6555
6556         do
6557         {
6558                 switch (randint1(34))
6559                 {
6560                 case 28: case 29:
6561                         if (!(*count))
6562                         {
6563 #ifdef JP
6564 msg_print("ÃÏÌ̤¬Íɤ줿...");
6565 #else
6566                                 msg_print("The ground trembles...");
6567 #endif
6568
6569                                 earthquake(py, px, 5 + randint0(10));
6570                                 if (!one_in_(6)) break;
6571                         }
6572                 case 30: case 31:
6573                         if (!(*count))
6574                         {
6575                                 int dam = damroll(10, 10);
6576 #ifdef JP
6577 msg_print("½ã¿è¤ÊËâÎϤμ¡¸µ¤Ø¤ÎÈ⤬³«¤¤¤¿¡ª");
6578 #else
6579                                 msg_print("A portal opens to a plane of raw mana!");
6580 #endif
6581
6582                                 project(0, 8, py, px, dam, GF_MANA, flg, -1);
6583 #ifdef JP
6584                                 take_hit(DAMAGE_NOESCAPE, dam, "½ã¿è¤ÊËâÎϤβòÊü", -1);
6585 #else
6586                                 take_hit(DAMAGE_NOESCAPE, dam, "released pure mana", -1);
6587 #endif
6588                                 if (!one_in_(6)) break;
6589                         }
6590                 case 32: case 33:
6591                         if (!(*count))
6592                 {
6593 #ifdef JP
6594 msg_print("¼þ°Ï¤Î¶õ´Ö¤¬ÏĤó¤À¡ª");
6595 #else
6596                                 msg_print("Space warps about you!");
6597 #endif
6598
6599                                 teleport_player(damroll(10, 10));
6600                                 if (randint0(13)) (*count) += activate_hi_summon(py, px, FALSE);
6601                                 if (!one_in_(6)) break;
6602                         }
6603                 case 34:
6604 #ifdef JP
6605 msg_print("¥¨¥Í¥ë¥®¡¼¤Î¤¦¤Í¤ê¤ò´¶¤¸¤¿¡ª");
6606 #else
6607                         msg_print("You feel a surge of energy!");
6608 #endif
6609
6610                         wall_breaker();
6611                         if (!randint0(7))
6612                         {
6613                                 project(0, 7, py, px, 50, GF_KILL_WALL, flg, -1);
6614 #ifdef JP
6615                                 take_hit(DAMAGE_NOESCAPE, 50, "¥¨¥Í¥ë¥®¡¼¤Î¤¦¤Í¤ê", -1);
6616 #else
6617                                 take_hit(DAMAGE_NOESCAPE, 50, "surge of energy", -1);
6618 #endif
6619                         }
6620                         if (!one_in_(6)) break;
6621                 case 1: case 2: case 3: case 16: case 17:
6622                         aggravate_monsters(0);
6623                         if (!one_in_(6)) break;
6624                 case 4: case 5: case 6:
6625                         (*count) += activate_hi_summon(py, px, FALSE);
6626                         if (!one_in_(6)) break;
6627                 case 7: case 8: case 9: case 18:
6628                         (*count) += summon_specific(0, py, px, dun_level, 0, TRUE, FALSE, FALSE, TRUE, TRUE);
6629                         if (!one_in_(6)) break;
6630                 case 10: case 11: case 12:
6631 #ifdef JP
6632 msg_print("À¸Ì¿ÎϤ¬ÂΤ«¤éµÛ¤¤¼è¤é¤ì¤¿µ¤¤¬¤¹¤ë¡ª");
6633 #else
6634                         msg_print("You feel your life draining away...");
6635 #endif
6636
6637                         lose_exp(p_ptr->exp / 16);
6638                         if (!one_in_(6)) break;
6639                 case 13: case 14: case 15: case 19: case 20:
6640                         if (stop_ty || (p_ptr->free_act && (randint1(125) < p_ptr->skill_sav)) || (p_ptr->pclass == CLASS_BERSERKER))
6641                         {
6642                                 /* Do nothing */ ;
6643                         }
6644                         else
6645                         {
6646 #ifdef JP
6647 msg_print("ĦÁü¤Ë¤Ê¤Ã¤¿µ¤Ê¬¤À¡ª");
6648 #else
6649                                 msg_print("You feel like a statue!");
6650 #endif
6651
6652                                 if (p_ptr->free_act)
6653                                         set_paralyzed(p_ptr->paralyzed + randint1(3));
6654                                 else
6655                                         set_paralyzed(p_ptr->paralyzed + randint1(13));
6656                                 stop_ty = TRUE;
6657                         }
6658                         if (!one_in_(6)) break;
6659                 case 21: case 22: case 23:
6660                         (void)do_dec_stat(randint0(6));
6661                         if (!one_in_(6)) break;
6662                 case 24:
6663 #ifdef JP
6664 msg_print("¤Û¤¨¡©»ä¤Ïï¡©¤³¤³¤Ç²¿¤·¤Æ¤ë¡©");
6665 #else
6666                         msg_print("Huh? Who am I? What am I doing here?");
6667 #endif
6668
6669                         lose_all_info();
6670                         if (!one_in_(6)) break;
6671                 case 25:
6672                         /*
6673                          * Only summon Cyberdemons deep in the dungeon.
6674                          */
6675                         if ((dun_level > 65) && !stop_ty)
6676                         {
6677                                 (*count) += summon_cyber(-1, py, px);
6678                                 stop_ty = TRUE;
6679                                 break;
6680                         }
6681                         if (!one_in_(6)) break;
6682                 default:
6683                         while (i < 6)
6684                         {
6685                                 do
6686                                 {
6687                                         (void)do_dec_stat(i);
6688                                 }
6689                                 while (one_in_(2));
6690
6691                                 i++;
6692                         }
6693                 }
6694         }
6695         while (one_in_(3) && !stop_ty);
6696
6697         return stop_ty;
6698 }
6699
6700
6701 int activate_hi_summon(int y, int x, bool can_pet)
6702 {
6703         int i;
6704         int count = 0;
6705         bool pet = FALSE, friendly = FALSE, not_pet;
6706         int summon_lev;
6707
6708         if (can_pet)
6709         {
6710                 if (one_in_(4))
6711                 {
6712                         friendly = TRUE;
6713                 }
6714                 else
6715                 {
6716                         pet = TRUE;
6717                 }
6718         }
6719         not_pet = (bool)(!pet);
6720
6721         summon_lev = (pet ? p_ptr->lev * 2 / 3 + randint1(p_ptr->lev / 2) : dun_level);
6722
6723         for (i = 0; i < (randint1(7) + (dun_level / 40)); i++)
6724         {
6725                 switch (randint1(25) + (dun_level / 20))
6726                 {
6727                         case 1: case 2:
6728                                 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_ANT, TRUE, friendly, pet, FALSE, not_pet);
6729                                 break;
6730                         case 3: case 4:
6731                                 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_SPIDER, TRUE, friendly, pet, FALSE, not_pet);
6732                                 break;
6733                         case 5: case 6:
6734                                 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HOUND, TRUE, friendly, pet, FALSE, not_pet);
6735                                 break;
6736                         case 7: case 8:
6737                                 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HYDRA, TRUE, friendly, pet, FALSE, not_pet);
6738                                 break;
6739                         case 9: case 10:
6740                                 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_ANGEL, TRUE, friendly, pet, FALSE, not_pet);
6741                                 break;
6742                         case 11: case 12:
6743                                 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_UNDEAD, TRUE, friendly, pet, FALSE, not_pet);
6744                                 break;
6745                         case 13: case 14:
6746                                 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_DRAGON, TRUE, friendly, pet, FALSE, not_pet);
6747                                 break;
6748                         case 15: case 16:
6749                                 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_DEMON, TRUE, friendly, pet, FALSE, not_pet);
6750                                 break;
6751                         case 17:
6752                                 if (pet || friendly) break;
6753                                 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_AMBERITES, TRUE, friendly, pet, TRUE, not_pet);
6754                                 break;
6755                         case 18: case 19:
6756                                 if (pet || friendly) break;
6757                                 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_UNIQUE, TRUE, friendly, pet, TRUE, not_pet);
6758                                 break;
6759                         case 20: case 21:
6760                                 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HI_UNDEAD, TRUE, friendly, pet, (bool)(!friendly && !pet), not_pet);
6761                                 break;
6762                         case 22: case 23:
6763                                 count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HI_DRAGON, TRUE, friendly, pet, (bool)(!friendly && !pet), not_pet);
6764                                 break;
6765                         case 24:
6766                                 count += summon_specific((pet ? -1 : 0), y, x, 100, SUMMON_CYBER, TRUE, friendly, pet, FALSE, not_pet);
6767                                 break;
6768                         default:
6769                                 count += summon_specific((pet ? -1 : 0), y, x,pet ? summon_lev : (((summon_lev * 3) / 2) + 5), 0, TRUE, friendly, pet, (bool)(!friendly && !pet), not_pet);
6770                 }
6771         }
6772
6773         return count;
6774 }
6775
6776
6777 /* ToDo: check */
6778 int summon_cyber(int who, int y, int x)
6779 {
6780         int i;
6781         int max_cyber = (easy_band ? 1 : (dun_level / 50) + randint1(2));
6782         int count = 0;
6783
6784         bool friendly = FALSE;
6785         bool pet = FALSE;
6786
6787         /* Summoned by a monster */
6788         if (who > 0)
6789         {
6790                 monster_type *m_ptr = &m_list[who];
6791                 friendly = is_friendly(m_ptr);
6792                 pet = is_pet(m_ptr);
6793         }
6794
6795         if (max_cyber > 4) max_cyber = 4;
6796
6797         for (i = 0; i < max_cyber; i++)
6798         {
6799                 count += summon_specific(who, y, x, 100, SUMMON_CYBER, TRUE, friendly, pet, FALSE, FALSE);
6800         }
6801
6802         return count;
6803 }
6804
6805
6806 void wall_breaker(void)
6807 {
6808         int i;
6809         int y, x;
6810         int attempts = 1000;
6811
6812         if (randint1(80 + p_ptr->lev) < 70)
6813         {
6814                 while(attempts--)
6815                 {
6816                         scatter(&y, &x, py, px, 4, 0);
6817
6818                         if (!cave_floor_bold(y, x)) continue;
6819
6820                         if ((y != py) || (x != px)) break;
6821                 }
6822
6823                 project(0, 0, y, x, 20 + randint1(30), GF_KILL_WALL,
6824                                   (PROJECT_BEAM | PROJECT_THRU | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL), -1);
6825         }
6826         else if (randint1(100) > 30)
6827         {
6828                 earthquake(py, px, 1);
6829         }
6830         else
6831         {
6832                 int num = damroll(5, 3);
6833
6834                 for (i = 0; i < num; i++)
6835                 {
6836                         while(1)
6837                         {
6838                                 scatter(&y, &x, py, px, 10, 0);
6839
6840                                 if ((y != py) && (x != px)) break;
6841                         }
6842
6843                         project(0, 0, y, x, 20 + randint1(30), GF_KILL_WALL,
6844                                           (PROJECT_BEAM | PROJECT_THRU | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL), -1);
6845                 }
6846         }
6847 }
6848
6849
6850 /*
6851  * Confuse monsters
6852  */
6853 bool confuse_monsters(int dam)
6854 {
6855         return (project_hack(GF_OLD_CONF, dam));
6856 }
6857
6858
6859 /*
6860  * Charm monsters
6861  */
6862 bool charm_monsters(int dam)
6863 {
6864         return (project_hack(GF_CHARM, dam));
6865 }
6866
6867
6868 /*
6869  * Charm animals
6870  */
6871 bool charm_animals(int dam)
6872 {
6873         return (project_hack(GF_CONTROL_ANIMAL, dam));
6874 }
6875
6876
6877 /*
6878  * Stun monsters
6879  */
6880 bool stun_monsters(int dam)
6881 {
6882         return (project_hack(GF_STUN, dam));
6883 }
6884
6885
6886 /*
6887  * Stasis monsters
6888  */
6889 bool stasis_monsters(int dam)
6890 {
6891         return (project_hack(GF_STASIS, dam));
6892 }
6893
6894
6895 /*
6896  * Mindblast monsters
6897  */
6898 bool mindblast_monsters(int dam)
6899 {
6900         return (project_hack(GF_PSI, dam));
6901 }
6902
6903
6904 /*
6905  * Banish all monsters
6906  */
6907 bool banish_monsters(int dist)
6908 {
6909         return (project_hack(GF_AWAY_ALL, dist));
6910 }
6911
6912
6913 /*
6914  * Turn evil
6915  */
6916 bool turn_evil(int dam)
6917 {
6918         return (project_hack(GF_TURN_EVIL, dam));
6919 }
6920
6921
6922 /*
6923  * Turn everyone
6924  */
6925 bool turn_monsters(int dam)
6926 {
6927         return (project_hack(GF_TURN_ALL, dam));
6928 }
6929
6930
6931 /*
6932  * Death-ray all monsters (note: OBSCENELY powerful)
6933  */
6934 bool deathray_monsters(void)
6935 {
6936         return (project_hack(GF_DEATH_RAY, p_ptr->lev * 200));
6937 }
6938
6939
6940 bool charm_monster(int dir, int plev)
6941 {
6942         int flg = PROJECT_STOP | PROJECT_KILL;
6943         return (project_hook(GF_CHARM, dir, plev, flg));
6944 }
6945
6946
6947 bool control_one_undead(int dir, int plev)
6948 {
6949         int flg = PROJECT_STOP | PROJECT_KILL;
6950         return (project_hook(GF_CONTROL_UNDEAD, dir, plev, flg));
6951 }
6952
6953
6954 bool control_one_demon(int dir, int plev)
6955 {
6956         int flg = PROJECT_STOP | PROJECT_KILL;
6957         return (project_hook(GF_CONTROL_DEMON, dir, plev, flg));
6958 }
6959
6960
6961 bool charm_animal(int dir, int plev)
6962 {
6963         int flg = PROJECT_STOP | PROJECT_KILL;
6964         return (project_hook(GF_CONTROL_ANIMAL, dir, plev, flg));
6965 }
6966
6967
6968 bool charm_living(int dir, int plev)
6969 {
6970         int flg = PROJECT_STOP | PROJECT_KILL;
6971         return (project_hook(GF_CONTROL_LIVING, dir, plev, flg));
6972 }
6973
6974
6975 void kawarimi(bool success)
6976 {
6977         object_type forge;
6978         object_type *q_ptr = &forge;
6979         int y, x;
6980
6981         if (p_ptr->confused || p_ptr->blind || p_ptr->paralyzed || p_ptr->image) return;
6982         if (randint0(200) < p_ptr->stun) return;
6983
6984         if (!success && one_in_(3))
6985         {
6986 #ifdef JP
6987                 msg_print("¼ºÇÔ¡ªÆ¨¤²¤é¤ì¤Ê¤«¤Ã¤¿¡£");
6988 #else
6989                 msg_print("Failed! You couldn't run away.");
6990 #endif
6991                 p_ptr->special_defense &= ~(NINJA_KAWARIMI);
6992                 p_ptr->redraw |= (PR_STATUS);
6993                 return;
6994         }
6995
6996         y = py;
6997         x = px;
6998
6999         teleport_player(10+randint1(90));
7000
7001         object_wipe(q_ptr);
7002
7003         object_prep(q_ptr, lookup_kind(TV_STATUE, SV_WOODEN_STATUE));
7004
7005         q_ptr->pval = MON_NINJA;
7006
7007         /* Drop it in the dungeon */
7008         (void)drop_near(q_ptr, -1, y, x);
7009
7010 #ifdef JP
7011         if (success) msg_print("¹¶·â¤ò¼õ¤±¤ëÁ°¤ËÁÇÁ᤯¿È¤ò¤Ò¤ë¤¬¤¨¤·¤¿¡£");
7012         else msg_print("¼ºÇÔ¡ª¹¶·â¤ò¼õ¤±¤Æ¤·¤Þ¤Ã¤¿¡£");
7013 #else
7014         if (success) msg_print("You have turned around just before the attack hit you.");
7015         else msg_print("Failed! You are hit by the attack.");
7016 #endif
7017
7018         p_ptr->special_defense &= ~(NINJA_KAWARIMI);
7019         p_ptr->redraw |= (PR_STATUS);
7020 }