OSDN Git Service

Initial revision
[hengband/hengband.git] / src / mane.c
1 /* File: mind.c */
2
3 /* Purpose: Mane code */
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 static int damage;
17
18 void mane_info(char *p, int power, int dam)
19 {
20         int plev = p_ptr->lev;
21 #ifdef JP
22         cptr s_dam = "»½ý:";
23         cptr s_dur = "´ü´Ö:";
24         cptr s_range = "ÈÏ°Ï:";
25         cptr s_heal = "²óÉü:";
26 #else
27         cptr s_dam = "dam ";
28         cptr s_dur = "dur ";
29         cptr s_range = "range ";
30         cptr s_heal = "heal ";
31 #endif
32
33         strcpy(p, "");
34
35         if ((power > 2 && power < 41) || (power > 41 && power < 59) || (power == 75))
36                 sprintf(p, " %s%d", s_dam, dam);
37         else
38         {
39                 switch (power)
40                 {
41                         case 41:
42                                 sprintf(p, " %sd%d+%d", s_heal, plev * 3, plev);
43                                 break;
44                         case 64:
45                                 sprintf(p, " %sd%d+%d", s_dur, 20+plev, plev);
46                                 break;
47                         case 66:
48                                 sprintf(p, " %s%d", s_heal, plev*6);
49                                 break;
50                         case 67:
51                                 sprintf(p, " %sd7+7", s_dur);
52                                 break;
53                         case 68:
54                                 sprintf(p, " %s10", s_range);
55                                 break;
56                         case 69:
57                                 sprintf(p, " %s%d", s_range, plev * 5);
58                                 break;
59                         case 79:
60                                 sprintf(p, " %s5", s_range);
61                                 break;
62                         default:
63                                 break;
64                 }
65         }
66 }
67
68
69 /*
70  * Allow user to choose a imitation.
71  *
72  * If a valid spell is chosen, saves it in '*sn' and returns TRUE
73  * If the user hits escape, returns FALSE, and set '*sn' to -1
74  * If there are no legal choices, returns FALSE, and sets '*sn' to -2
75  *
76  * The "prompt" should be "cast", "recite", or "study"
77  * The "known" should be TRUE for cast/pray, FALSE for study
78  *
79  * nb: This function has a (trivial) display bug which will be obvious
80  * when you run it. It's probably easy to fix but I haven't tried,
81  * sorry.
82  */
83 static int get_mane_power(int *sn, bool baigaesi)
84 {
85         int             i = 0;
86         int             num = 0;
87         int             y = 1;
88         int             x = 18;
89         int             minfail = 0;
90         int             plev = p_ptr->lev;
91         int             chance = 0;
92         int             ask;
93         char            choice;
94         char            out_val[160];
95         char            comment[80];
96 #ifdef JP
97 cptr            p = "ǽÎÏ";
98 #else
99         cptr            p = "power";
100 #endif
101
102         monster_power   spell;
103         bool            flag, redraw;
104
105         /* Assume cancelled */
106         *sn = (-1);
107
108         /* Nothing chosen yet */
109         flag = FALSE;
110
111         /* No redraw yet */
112         redraw = FALSE;
113
114         num = mane_num;
115
116         /* Build a prompt (accept all spells) */
117 #ifdef JP
118 (void) strnfmt(out_val, 78, "(%c-%c, '*'¤Ç°ìÍ÷, ESC) ¤É¤Î%s¤ò¤Þ¤Í¤Þ¤¹¤«¡©",
119 #else
120         (void)strnfmt(out_val, 78, "(%c-%c, *=List, ESC=exit) Use which %s? ",
121 #endif
122
123                 I2A(0), I2A(num - 1), p);
124
125         /* Get a spell from the user */
126
127         choice= always_show_list ? ESCAPE:1 ;
128         while (!flag)
129         {
130                 if(choice==ESCAPE) choice = ' '; 
131                 else if( !get_com(out_val, &choice, TRUE) )break; 
132
133                 /* Request redraw */
134                 if ((choice == ' ') || (choice == '*') || (choice == '?'))
135                 {
136                         /* Show the list */
137                         if (!redraw)
138                         {
139                                 char psi_desc[80];
140
141                                 /* Show list */
142                                 redraw = TRUE;
143
144                                 /* Save the screen */
145                                 screen_save();
146
147                                 /* Display a list of spells */
148                                 prt("", y, x);
149 #ifdef JP
150 put_str("̾Á°", y, x + 5);
151 #else
152                                 put_str("Name", y, x + 5);
153 #endif
154
155 #ifdef JP
156 put_str("¼ºÎ¨ ¸ú²Ì", y, x + 36);
157 #else
158                                 put_str("Fail Info", y, x + 35);
159 #endif
160
161
162                                 /* Dump the spells */
163                                 for (i = 0; i < num; i++)
164                                 {
165                                         /* Access the spell */
166                                         spell = monster_powers[mane_spell[i]];
167
168                                         chance = spell.manefail;
169
170                                         /* Reduce failure rate by "effective" level adjustment */
171                                         if (plev > spell.level) chance -= 3 * (plev - spell.level);
172
173                                         /* Reduce failure rate by INT/WIS adjustment */
174                                         chance -= 3 * (adj_mag_stat[p_ptr->stat_ind[spell.use_stat]] + adj_mag_stat[p_ptr->stat_ind[A_DEX]] - 2) / 2;
175
176                                         if (spell.manedam) chance = chance * mane_dam[i] / spell.manedam;
177
178                                         if (p_ptr->pseikaku == SEIKAKU_NAMAKE) chance += 10;
179                                         if (p_ptr->pseikaku == SEIKAKU_KIREMONO) chance -= 3;
180                                         if ((p_ptr->pseikaku == SEIKAKU_GAMAN) || (p_ptr->pseikaku == SEIKAKU_CHIKARA)) chance++;
181
182                                         /* Extract the minimum failure rate */
183                                         minfail = adj_mag_fail[p_ptr->stat_ind[spell.use_stat]];
184
185                                         /* Minimum failure rate */
186                                         if (chance < minfail) chance = minfail;
187
188                                         /* Stunning makes spells harder */
189                                         if (p_ptr->stun > 50) chance += 25;
190                                         else if (p_ptr->stun) chance += 15;
191
192                                         /* Always a 5 percent chance of working */
193                                         if (chance > 95) chance = 95;
194
195                                         /* Get info */
196                                         mane_info(comment, mane_spell[i], (baigaesi ? mane_dam[i]*2 : mane_dam[i]));
197
198                                         /* Dump the spell --(-- */
199                                         sprintf(psi_desc, "  %c) %-30s %3d%%%s",
200                                                 I2A(i), spell.name,
201                                                 chance, comment);
202                                         prt(psi_desc, y + i + 1, x);
203                                 }
204
205                                 /* Clear the bottom line */
206                                 prt("", y + i + 1, x);
207                         }
208
209                         /* Hide the list */
210                         else
211                         {
212                                 /* Hide list */
213                                 redraw = FALSE;
214
215                                 /* Restore the screen */
216                                 screen_load();
217                         }
218
219                         /* Redo asking */
220                         continue;
221                 }
222
223                 /* Note verify */
224                 ask = isupper(choice);
225
226                 /* Lowercase */
227                 if (ask) choice = tolower(choice);
228
229                 /* Extract request */
230                 i = (islower(choice) ? A2I(choice) : -1);
231
232                 /* Totally Illegal */
233                 if ((i < 0) || (i >= num))
234                 {
235                         bell();
236                         continue;
237                 }
238
239                 /* Save the spell index */
240                 spell = monster_powers[mane_spell[i]];
241
242                 /* Verify it */
243                 if (ask)
244                 {
245                         char tmp_val[160];
246
247                         /* Prompt */
248 #ifdef JP
249 (void) strnfmt(tmp_val, 78, "%s¤ò¤Þ¤Í¤Þ¤¹¤«¡©", monster_powers[mane_spell[i]].name);
250 #else
251                         (void)strnfmt(tmp_val, 78, "Use %s? ", monster_powers[mane_spell[i]].name);
252 #endif
253
254
255                         /* Belay that order */
256                         if (!get_check(tmp_val)) continue;
257                 }
258
259                 /* Stop the loop */
260                 flag = TRUE;
261         }
262
263         /* Restore the screen */
264         if (redraw) screen_load();
265
266         /* Show choices */
267         if (show_choices)
268         {
269                 /* Update */
270                 p_ptr->window |= (PW_SPELL);
271
272                 /* Window stuff */
273                 window_stuff();
274         }
275
276         /* Abort if needed */
277         if (!flag) return (FALSE);
278
279         /* Save the choice */
280         (*sn) = i;
281
282         damage = (baigaesi ? mane_dam[i]*2 : mane_dam[i]);
283
284         /* Success */
285         return (TRUE);
286 }
287
288
289 /*
290  * do_cmd_cast calls this function if the player's class
291  * is 'imitator'.
292  */
293 static bool use_mane(int spell)
294 {
295         int             dir;
296         int             plev = p_ptr->lev;
297         bool    unique_okay = FALSE;
298         if (randint(50+plev) < plev/10) unique_okay = TRUE;
299
300
301         /* spell code */
302         switch (spell)
303         {
304         case MS_SHRIEK:
305 #ifdef JP
306 msg_print("¤«¤ó¹â¤¤¶âÀÚ¤êÀ¼¤ò¤¢¤²¤¿¡£");
307 #else
308                 msg_print("You makes a high pitched shriek.");
309 #endif
310
311                 aggravate_monsters(0);
312                 break;
313         case MS_XXX1:
314                 break;
315         case MS_DISPEL:
316         {
317                 monster_type *m_ptr;
318                 char m_name[80];
319
320                 if (!target_set(TARGET_KILL)) return FALSE;
321                 if (!cave[target_row][target_col].m_idx) break;
322                 if (!los(py, px, target_row, target_col)) break;
323                 m_ptr = &m_list[cave[target_row][target_col].m_idx];
324                 monster_desc(m_name, m_ptr, 0);
325                 if (m_ptr->invulner)
326                 {
327                         m_ptr->invulner = 0;
328 #ifdef JP
329 msg_format("%s¤Ï¤â¤¦ÌµÅ¨¤Ç¤Ï¤Ê¤¤¡£", m_name);
330 #else
331                         msg_format("%^s is no longer invulnerable.", m_name);
332 #endif
333                 }
334                 if (m_ptr->fast)
335                 {
336                         m_ptr->fast = 0;
337 #ifdef JP
338 msg_format("%s¤Ï¤â¤¦²Ã®¤µ¤ì¤Æ¤¤¤Ê¤¤¡£", m_name);
339 #else
340                         msg_format("%^s is no longer fast.", m_name);
341 #endif
342                 }
343                 if (m_ptr->slow)
344                 {
345                         m_ptr->slow = 0;
346 #ifdef JP
347 msg_format("%s¤Ï¤â¤¦¸ºÂ®¤µ¤ì¤Æ¤¤¤Ê¤¤¡£", m_name);
348 #else
349                         msg_format("%^s is no longer slow.", m_name);
350 #endif
351                 }
352                 p_ptr->redraw |= (PR_HEALTH);
353                 if (p_ptr->riding == cave[target_row][target_col].m_idx) p_ptr->redraw |= (PR_HEALTH);
354
355                 break;
356         }
357         case MS_ROCKET:
358                 if (!get_aim_dir(&dir)) return FALSE;
359 #ifdef JP
360 else msg_print("¥í¥±¥Ã¥È¤òȯ¼Í¤·¤¿¡£");
361 #else
362                         else msg_print("You fires a rocket.");
363 #endif
364                 
365                         fire_rocket(GF_ROCKET, dir, damage, 2);
366                 break;
367         case MS_ARROW_1:
368         case MS_ARROW_2:
369                 if (!get_aim_dir(&dir)) return FALSE;
370 #ifdef JP
371 else msg_print("Ìð¤òÊü¤Ã¤¿¡£");
372 #else
373                         else msg_print("You fires an arrow.");
374 #endif
375                 
376                         fire_bolt(GF_ARROW, dir, damage);
377                 break;
378         case MS_ARROW_3:
379         case MS_ARROW_4:
380                 if (!get_aim_dir(&dir)) return FALSE;
381 #ifdef JP
382 else msg_print("¥Ü¥ë¥È¤ò·â¤Ã¤¿¡£");
383 #else
384                         else msg_print("You fires a bolt.");
385 #endif
386                 
387                         fire_bolt(GF_ARROW, dir, damage);
388                 break;
389         case MS_BR_ACID:
390                 if (!get_aim_dir(&dir)) return FALSE;
391 #ifdef JP
392 else msg_print("»À¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
393 #else
394                         else msg_print("You breathes acid.");
395 #endif
396                 
397                         fire_ball(GF_ACID, dir, damage, (plev > 35 ? -3 : -2));
398                 break;
399         case MS_BR_ELEC:
400                 if (!get_aim_dir(&dir)) return FALSE;
401 #ifdef JP
402 else msg_print("°ðºÊ¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
403 #else
404                         else msg_print("You breathes lightning.");
405 #endif
406                 
407                         fire_ball(GF_ELEC, dir, damage, (plev > 35 ? -3 : -2));
408                 break;
409         case MS_BR_FIRE:
410                 if (!get_aim_dir(&dir)) return FALSE;
411 #ifdef JP
412 else msg_print("²Ð±ê¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
413 #else
414                         else msg_print("You breathes fire.");
415 #endif
416                 
417                         fire_ball(GF_FIRE, dir, damage, (plev > 35 ? -3 : -2));
418                 break;
419         case MS_BR_COLD:
420                 if (!get_aim_dir(&dir)) return FALSE;
421 #ifdef JP
422 else msg_print("Î䵤¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
423 #else
424                         else msg_print("You breathes frost.");
425 #endif
426                 
427                         fire_ball(GF_COLD, dir, damage, (plev > 35 ? -3 : -2));
428                 break;
429         case MS_BR_POIS:
430                 if (!get_aim_dir(&dir)) return FALSE;
431 #ifdef JP
432 else msg_print("¥¬¥¹¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
433 #else
434                         else msg_print("You breathes gas.");
435 #endif
436                 
437                         fire_ball(GF_POIS, dir, damage, (plev > 35 ? -3 : -2));
438                 break;
439         case MS_BR_NETHER:
440                 if (!get_aim_dir(&dir)) return FALSE;
441 #ifdef JP
442 else msg_print("ÃϹö¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
443 #else
444                         else msg_print("You breathes nether.");
445 #endif
446                 
447                         fire_ball(GF_NETHER, dir, damage, (plev > 35 ? -3 : -2));
448                 break;
449         case MS_BR_LITE:
450                 if (!get_aim_dir(&dir)) return FALSE;
451 #ifdef JP
452 else msg_print("Á®¸÷¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
453 #else
454                         else msg_print("You breathes light.");
455 #endif
456                 
457                         fire_ball(GF_LITE, dir, damage, (plev > 35 ? -3 : -2));
458                 break;
459         case MS_BR_DARK:
460                 if (!get_aim_dir(&dir)) return FALSE;
461 #ifdef JP
462 else msg_print("°Å¹õ¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
463 #else
464                         else msg_print("You breathes darkness.");
465 #endif
466                 
467                         fire_ball(GF_DARK, dir, damage, (plev > 35 ? -3 : -2));
468                 break;
469         case MS_BR_CONF:
470                 if (!get_aim_dir(&dir)) return FALSE;
471 #ifdef JP
472 else msg_print("º®Íð¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
473 #else
474                         else msg_print("You breathes confusion.");
475 #endif
476                 
477                         fire_ball(GF_CONFUSION, dir, damage, (plev > 35 ? -3 : -2));
478                 break;
479         case MS_BR_SOUND:
480                 if (!get_aim_dir(&dir)) return FALSE;
481 #ifdef JP
482 else msg_print("¹ì²»¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
483 #else
484                         else msg_print("You breathes sound.");
485 #endif
486                 
487                         fire_ball(GF_SOUND, dir, damage, (plev > 35 ? -3 : -2));
488                 break;
489         case MS_BR_CHAOS:
490                 if (!get_aim_dir(&dir)) return FALSE;
491 #ifdef JP
492 else msg_print("¥«¥ª¥¹¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
493 #else
494                         else msg_print("You breathes chaos.");
495 #endif
496                 
497                         fire_ball(GF_CHAOS, dir, damage, (plev > 35 ? -3 : -2));
498                 break;
499         case MS_BR_DISEN:
500                 if (!get_aim_dir(&dir)) return FALSE;
501 #ifdef JP
502 else msg_print("Îô²½¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
503 #else
504                         else msg_print("You breathes disenchantment.");
505 #endif
506                 
507                         fire_ball(GF_DISENCHANT, dir, damage, (plev > 35 ? -3 : -2));
508                 break;
509         case MS_BR_NEXUS:
510                 if (!get_aim_dir(&dir)) return FALSE;
511 #ifdef JP
512 else msg_print("°ø²Ìº®Íð¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
513 #else
514                         else msg_print("You breathes nexus.");
515 #endif
516                 
517                         fire_ball(GF_NEXUS, dir, damage, (plev > 35 ? -3 : -2));
518                 break;
519         case MS_BR_TIME:
520                 if (!get_aim_dir(&dir)) return FALSE;
521 #ifdef JP
522 else msg_print("»þ´ÖµÕž¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
523 #else
524                         else msg_print("You breathes time.");
525 #endif
526                 
527                         fire_ball(GF_TIME, dir, damage, (plev > 35 ? -3 : -2));
528                 break;
529         case MS_BR_INERTIA:
530                 if (!get_aim_dir(&dir)) return FALSE;
531 #ifdef JP
532 else msg_print("ÃÙÆߤΥ֥쥹¤òÅǤ¤¤¿¡£");
533 #else
534                         else msg_print("You breathes inertia.");
535 #endif
536                 
537                         fire_ball(GF_INERTIA, dir, damage, (plev > 35 ? -3 : -2));
538                 break;
539         case MS_BR_GRAVITY:
540                 if (!get_aim_dir(&dir)) return FALSE;
541 #ifdef JP
542 else msg_print("½ÅÎϤΥ֥쥹¤òÅǤ¤¤¿¡£");
543 #else
544                         else msg_print("You breathes gravity.");
545 #endif
546                 
547                         fire_ball(GF_GRAVITY, dir, damage, (plev > 35 ? -3 : -2));
548                 break;
549         case MS_BR_SHARDS:
550                 if (!get_aim_dir(&dir)) return FALSE;
551 #ifdef JP
552 else msg_print("ÇËÊҤΥ֥쥹¤òÅǤ¤¤¿¡£");
553 #else
554                         else msg_print("You breathes shards.");
555 #endif
556                 
557                         fire_ball(GF_SHARDS, dir, damage, (plev > 35 ? -3 : -2));
558                 break;
559         case MS_BR_PLASMA:
560                 if (!get_aim_dir(&dir)) return FALSE;
561 #ifdef JP
562 else msg_print("¥×¥é¥º¥Þ¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
563 #else
564                         else msg_print("You breathes plasma.");
565 #endif
566                 
567                         fire_ball(GF_PLASMA, dir, damage, (plev > 35 ? -3 : -2));
568                 break;
569         case MS_BR_FORCE:
570                 if (!get_aim_dir(&dir)) return FALSE;
571 #ifdef JP
572 else msg_print("¥Õ¥©¡¼¥¹¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
573 #else
574                         else msg_print("You breathes force.");
575 #endif
576                 
577                         fire_ball(GF_FORCE, dir, damage, (plev > 35 ? -3 : -2));
578                 break;
579         case MS_BR_MANA:
580                 if (!get_aim_dir(&dir)) return FALSE;
581 #ifdef JP
582 else msg_print("ËâÎϤΥ֥쥹¤òÅǤ¤¤¿¡£");
583 #else
584                         else msg_print("You breathes mana.");
585 #endif
586                 
587                         fire_ball(GF_MANA, dir, damage, (plev > 35 ? -3 : -2));
588                 break;
589         case MS_BALL_NUKE:
590                 if (!get_aim_dir(&dir)) return FALSE;
591 #ifdef JP
592 else msg_print("Êü¼Íǽµå¤òÊü¤Ã¤¿¡£");
593 #else
594                         else msg_print("You casts a ball of radiation.");
595 #endif
596                 
597                         fire_ball(GF_NUKE, dir, damage, 2);
598                 break;
599         case MS_BR_NUKE:
600                 if (!get_aim_dir(&dir)) return FALSE;
601 #ifdef JP
602 else msg_print("Êü¼ÍÀ­ÇÑ´þʪ¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
603 #else
604                         else msg_print("You breathes toxic waste.");
605 #endif
606                 
607                         fire_ball(GF_NUKE, dir, damage, (plev > 35 ? -3 : -2));
608                 break;
609         case MS_BALL_CHAOS:
610                 if (!get_aim_dir(&dir)) return FALSE;
611 #ifdef JP
612 else msg_print("½ã¥í¥°¥ë¥¹¤òÊü¤Ã¤¿¡£");
613 #else
614                         else msg_print("You invokes a raw Logrus.");
615 #endif
616                 
617                         fire_ball(GF_CHAOS, dir, damage, 4);
618                 break;
619         case MS_BR_DISI:
620                 if (!get_aim_dir(&dir)) return FALSE;
621 #ifdef JP
622 else msg_print("ʬ²ò¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
623 #else
624                         else msg_print("You breathes disintegration.");
625 #endif
626                 
627                         fire_ball(GF_DISINTEGRATE, dir, damage, (plev > 35 ? -3 : -2));
628                 break;
629         case MS_BALL_ACID:
630                 if (!get_aim_dir(&dir)) return FALSE;
631 #ifdef JP
632 else msg_print("¥¢¥·¥Ã¥É¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
633 #else
634                         else msg_print("You casts an acid ball.");
635 #endif
636                 
637                         fire_ball(GF_ACID, dir, damage, 2);
638                 break;
639         case MS_BALL_ELEC:
640                 if (!get_aim_dir(&dir)) return FALSE;
641 #ifdef JP
642 else msg_print("¥µ¥ó¥À¡¼¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
643 #else
644                         else msg_print("You casts a lightning ball.");
645 #endif
646                 
647                         fire_ball(GF_ELEC, dir, damage, 2);
648                 break;
649         case MS_BALL_FIRE:
650                 if (!get_aim_dir(&dir)) return FALSE;
651 #ifdef JP
652 else msg_print("¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
653 #else
654                         else msg_print("You casts a fire ball.");
655 #endif
656                 
657                         fire_ball(GF_FIRE, dir, damage, 2);
658                 break;
659         case MS_BALL_COLD:
660                 if (!get_aim_dir(&dir)) return FALSE;
661 #ifdef JP
662 else msg_print("¥¢¥¤¥¹¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
663 #else
664                         else msg_print("You casts a frost ball.");
665 #endif
666                 
667                         fire_ball(GF_COLD, dir, damage, 2);
668                 break;
669         case MS_BALL_POIS:
670                 if (!get_aim_dir(&dir)) return FALSE;
671 #ifdef JP
672 else msg_print("°­½­±À¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
673 #else
674                         else msg_print("You casts a stinking cloud.");
675 #endif
676                 
677                         fire_ball(GF_POIS, dir, damage, 2);
678                 break;
679         case MS_BALL_NETHER:
680                 if (!get_aim_dir(&dir)) return FALSE;
681 #ifdef JP
682 else msg_print("ÃϹöµå¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
683 #else
684                         else msg_print("You casts a nether ball.");
685 #endif
686                 
687                         fire_ball(GF_NETHER, dir, damage, 2);
688                 break;
689         case MS_BALL_WATER:
690                 if (!get_aim_dir(&dir)) return FALSE;
691 #ifdef JP
692 else msg_print("ή¤ì¤ë¤è¤¦¤Ê¿È¿¶¤ê¤ò¤·¤¿¡£");
693 #else
694                         else msg_print("You gestures fluidly.");
695 #endif
696                 
697                         fire_ball(GF_WATER, dir, damage, 4);
698                 break;
699         case MS_BALL_MANA:
700                 if (!get_aim_dir(&dir)) return FALSE;
701 #ifdef JP
702 else msg_print("ËâÎϤÎÍò¤Î¼öʸ¤òÇ°¤¸¤¿¡£");
703 #else
704                         else msg_print("You invokes a mana storm.");
705 #endif
706                 
707                         fire_ball(GF_MANA, dir, damage, 4);
708                 break;
709         case MS_BALL_DARK:
710                 if (!get_aim_dir(&dir)) return FALSE;
711 #ifdef JP
712 else msg_print("°Å¹õ¤ÎÍò¤Î¼öʸ¤òÇ°¤¸¤¿¡£");
713 #else
714                         else msg_print("You invokes a darkness storm.");
715 #endif
716                 
717                         fire_ball(GF_DARK, dir, damage, 4);
718                 break;
719         case MS_DRAIN_MANA:
720                 if (!get_aim_dir(&dir)) return FALSE;
721                 fire_ball_hide(GF_DRAIN_MANA, dir, randint(plev*3)+plev, 0);
722                 break;
723         case MS_MIND_BLAST:
724                 if (!get_aim_dir(&dir)) return FALSE;
725                 fire_ball_hide(GF_MIND_BLAST, dir, damage, 0);
726                 break;
727         case MS_BRAIN_SMASH:
728                 if (!get_aim_dir(&dir)) return FALSE;
729                 fire_ball_hide(GF_BRAIN_SMASH, dir, damage, 0);
730                 break;
731         case MS_CAUSE_1:
732                 if (!get_aim_dir(&dir)) return FALSE;
733                 fire_ball_hide(GF_CAUSE_1, dir, damage, 0);
734                 break;
735         case MS_CAUSE_2:
736                 if (!get_aim_dir(&dir)) return FALSE;
737                 fire_ball_hide(GF_CAUSE_2, dir, damage, 0);
738                 break;
739         case MS_CAUSE_3:
740                 if (!get_aim_dir(&dir)) return FALSE;
741                 fire_ball_hide(GF_CAUSE_3, dir, damage, 0);
742                 break;
743         case MS_CAUSE_4:
744                 if (!get_aim_dir(&dir)) return FALSE;
745                 fire_ball_hide(GF_CAUSE_4, dir, damage, 0);
746                 break;
747         case MS_BOLT_ACID:
748                 if (!get_aim_dir(&dir)) return FALSE;
749 #ifdef JP
750 else msg_print("¥¢¥·¥Ã¥É¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
751 #else
752                         else msg_print("You casts an acid bolt.");
753 #endif
754                 
755                         fire_bolt(GF_ACID, dir, damage);
756                 break;
757         case MS_BOLT_ELEC:
758                 if (!get_aim_dir(&dir)) return FALSE;
759 #ifdef JP
760 else msg_print("¥µ¥ó¥À¡¼¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
761 #else
762                         else msg_print("You casts a lightning bolt.");
763 #endif
764                 
765                         fire_bolt(GF_ELEC, dir, damage);
766                 break;
767         case MS_BOLT_FIRE:
768                 if (!get_aim_dir(&dir)) return FALSE;
769 #ifdef JP
770 else msg_print("¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
771 #else
772                         else msg_print("You casts a fire bolt.");
773 #endif
774                 
775                         fire_bolt(GF_FIRE, dir, damage);
776                 break;
777         case MS_BOLT_COLD:
778                 if (!get_aim_dir(&dir)) return FALSE;
779 #ifdef JP
780 else msg_print("¥¢¥¤¥¹¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
781 #else
782                         else msg_print("You casts a frost bolt.");
783 #endif
784                 
785                         fire_bolt(GF_COLD, dir, damage);
786                 break;
787         case MS_STARBURST:
788                 if (!get_aim_dir(&dir)) return FALSE;
789 #ifdef JP
790 else msg_print("¥¹¥¿¡¼¥Ð¡¼¥¹¥È¤Î¼öʸ¤òÇ°¤¸¤¿¡£");
791 #else
792                         else msg_print("You invokes a starburst.");
793 #endif
794                 
795                         fire_ball(GF_LITE, dir, damage, 4);
796                 break;
797         case MS_BOLT_NETHER:
798                 if (!get_aim_dir(&dir)) return FALSE;
799 #ifdef JP
800 else msg_print("ÃϹö¤ÎÌð¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
801 #else
802                         else msg_print("You casts a nether bolt.");
803 #endif
804                 
805                         fire_bolt(GF_NETHER, dir, damage);
806                 break;
807         case MS_BOLT_WATER:
808                 if (!get_aim_dir(&dir)) return FALSE;
809 #ifdef JP
810 else msg_print("¥¦¥©¡¼¥¿¡¼¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
811 #else
812                         else msg_print("You casts a water bolt.");
813 #endif
814                 
815                         fire_bolt(GF_WATER, dir, damage);
816                 break;
817         case MS_BOLT_MANA:
818                 if (!get_aim_dir(&dir)) return FALSE;
819 #ifdef JP
820 else msg_print("ËâÎϤÎÌð¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
821 #else
822                         else msg_print("You casts a mana bolt.");
823 #endif
824                 
825                         fire_bolt(GF_MANA, dir, damage);
826                 break;
827         case MS_BOLT_PLASMA:
828                 if (!get_aim_dir(&dir)) return FALSE;
829 #ifdef JP
830 else msg_print("¥×¥é¥º¥Þ¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
831 #else
832                         else msg_print("You casts a plasma bolt.");
833 #endif
834                 
835                         fire_bolt(GF_PLASMA, dir, damage);
836                 break;
837         case MS_BOLT_ICE:
838                 if (!get_aim_dir(&dir)) return FALSE;
839 #ifdef JP
840 else msg_print("¶Ë´¨¤ÎÌð¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
841 #else
842                         else msg_print("You casts a ice bolt.");
843 #endif
844                 
845                         fire_bolt(GF_ICE, dir, damage);
846                 break;
847         case MS_MAGIC_MISSILE:
848                 if (!get_aim_dir(&dir)) return FALSE;
849 #ifdef JP
850 else msg_print("¥Þ¥¸¥Ã¥¯¡¦¥ß¥µ¥¤¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
851 #else
852                         else msg_print("You casts a magic missile.");
853 #endif
854                 
855                         fire_bolt(GF_MISSILE, dir, damage);
856                 break;
857         case MS_SCARE:
858                 if (!get_aim_dir(&dir)) return FALSE;
859 #ifdef JP
860 else msg_print("¶²¤í¤·¤²¤Ê¸¸³Ð¤òºî¤ê½Ð¤·¤¿¡£");
861 #else
862                         else msg_print("You casts a fearful illusion.");
863 #endif
864                 
865                         fear_monster(dir, plev+10);
866                 break;
867         case MS_BLIND:
868                 if (!get_aim_dir(&dir)) return FALSE;
869                 confuse_monster(dir, plev * 2);
870                 break;
871         case MS_CONF:
872                 if (!get_aim_dir(&dir)) return FALSE;
873 #ifdef JP
874 else msg_print("ͶÏÇŪ¤Ê¸¸³Ð¤ò¤Ä¤¯¤ê½Ð¤·¤¿¡£");
875 #else
876                         else msg_print("You casts a mesmerizing illusion.");
877 #endif
878                 
879                         confuse_monster(dir, plev * 2);
880                 break;
881         case MS_SLOW:
882                 if (!get_aim_dir(&dir)) return FALSE;
883                 slow_monster(dir);
884                 break;
885         case MS_SLEEP:
886                 if (!get_aim_dir(&dir)) return FALSE;
887                 sleep_monster(dir);
888                 break;
889         case MS_SPEED:
890                 (void)set_fast(randint(20 + plev) + plev, FALSE);
891                 break;
892         case MS_HAND_DOOM:
893         {
894                 if (!get_aim_dir(&dir)) return FALSE;
895 #ifdef JP
896 else msg_print("<ÇËÌǤμê>¤òÊü¤Ã¤¿¡ª");
897 #else
898                 else msg_print("You invokes the Hand of Doom!");
899 #endif
900
901                 fire_ball_hide(GF_HAND_DOOM, dir, 200, 0);
902                 break;
903         }
904         case MS_HEAL:
905 #ifdef JP
906 msg_print("¼«Ê¬¤Î½ý¤ËÇ°¤ò½¸Ã椷¤¿¡£");
907 #else
908                         msg_print("You concentrates on your wounds!");
909 #endif
910                 (void)hp_player(plev*6);
911                 (void)set_stun(0);
912                 (void)set_cut(0);
913                 break;
914         case MS_INVULNER:
915 #ifdef JP
916 msg_print("̵½ý¤Îµå¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
917 #else
918                         msg_print("You casts a Globe of Invulnerability.");
919 #endif
920                 (void)set_invuln(randint(7) + 7, FALSE);
921                 break;
922         case MS_BLINK:
923                 teleport_player(10);
924                 break;
925         case MS_TELEPORT:
926                 teleport_player(plev * 5);
927                 break;
928         case MS_WORLD:
929                 world_player = TRUE;
930                 if (damage == 1 || damage == 2)
931 #ifdef JP
932                         msg_print("¡Ö¡Ø¥¶¡¦¥ï¡¼¥ë¥É¡Ù¡ª»þ¤Ï»ß¤Þ¤Ã¤¿¡ª¡×");
933 #else
934                         msg_print("You yell 'The World! Time has stopped!'");
935 #endif
936                 else if (damage == 3 || damage == 6)
937 #ifdef JP
938                         msg_print("¡Ö»þ¤è¡ª¡×");
939 #else
940                         msg_print("You yell 'Time!'");
941 #endif
942                 else
943                         msg_print("hek!");
944                 msg_print(NULL);
945
946                 p_ptr->energy += (randint(200)+1200);
947
948                 /* Redraw map */
949                 p_ptr->redraw |= (PR_MAP);
950
951                 /* Update monsters */
952                 p_ptr->update |= (PU_MONSTERS);
953
954                 /* Window stuff */
955                 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
956
957                 handle_stuff();
958                 break;
959         case MS_SPECIAL:
960                 break;
961         case MS_TELE_TO:
962         {
963                 monster_type *m_ptr;
964                 char m_name[80];
965
966                 if (!target_set(TARGET_KILL)) return FALSE;
967                 if (!cave[target_row][target_col].m_idx) break;
968                 if (!los(py, px, target_row, target_col)) break;
969                 m_ptr = &m_list[cave[target_row][target_col].m_idx];
970                 monster_desc(m_name, m_ptr, 0);
971 #ifdef JP
972 msg_format("%s¤ò°ú¤­Ìᤷ¤¿¡£", m_name);
973 #else
974                         msg_format("You commands %s to return.", m_name);
975 #endif
976
977                 teleport_to_player(cave[target_row][target_col].m_idx, 100);
978                 break;
979         }
980         case MS_TELE_AWAY:
981                 if (!get_aim_dir(&dir)) return FALSE;
982
983                 (void)fire_beam(GF_AWAY_ALL, dir, plev);
984                 break;
985         case MS_TELE_LEVEL:
986         {
987                 monster_type *m_ptr;
988                 monster_race *r_ptr;
989                 char m_name[80];
990
991                 if (!target_set(TARGET_KILL)) return FALSE;
992                 if (!cave[target_row][target_col].m_idx) break;
993                 if (!los(py, px, target_row, target_col)) break;
994                 m_ptr = &m_list[cave[target_row][target_col].m_idx];
995                 r_ptr = &r_info[m_ptr->r_idx];
996                 monster_desc(m_name, m_ptr, 0);
997 #ifdef JP
998 msg_format("%s¤Î­¤ò»Ø¤µ¤·¤¿¡£", m_name);
999 #else
1000                         msg_format("You gestures at %s's feet.", m_name);
1001 #endif
1002
1003                 if ((r_ptr->flags3 & RF3_RES_TELE) || (r_ptr->flags1 & RF1_QUESTOR) || (r_ptr->level + randint(50) > plev + randint(60)))
1004                 {
1005 #ifdef JP
1006 msg_print("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª");
1007 #else
1008                         msg_format("%s are unaffected!", m_name);
1009 #endif
1010
1011                 }
1012                 else if (randint(2) == 1)
1013                 {
1014 #ifdef JP
1015 msg_format("%s¤Ï¾²¤òÆͤ­ÇˤäÆÄÀ¤ó¤Ç¤¤¤Ã¤¿¡£", m_name);
1016 #else
1017                         msg_format("%s sink through the floor.", m_name);
1018 #endif
1019                         delete_monster_idx(cave[target_row][target_col].m_idx);
1020                 }
1021                 else
1022                 {
1023 #ifdef JP
1024 msg_format("%s¤ÏÅ·°æ¤òÆͤ­ÇˤäÆÃè¤ØÉ⤤¤Æ¤¤¤Ã¤¿¡£",m_name);
1025 #else
1026                         msg_format("%s rise up through the ceiling.", m_name);
1027 #endif
1028                         delete_monster_idx(cave[target_row][target_col].m_idx);
1029                 }
1030                 break;
1031         }
1032         case MS_PSY_SPEAR:
1033                 if (!get_aim_dir(&dir)) return FALSE;
1034
1035 #ifdef JP
1036 else msg_print("¸÷¤Î·õ¤òÊü¤Ã¤¿¡£");
1037 #else
1038                         else msg_print("You throws a psycho-spear.");
1039 #endif
1040                 (void)fire_beam(GF_PSY_SPEAR, dir, damage);
1041                 break;
1042         case MS_DARKNESS:
1043 #ifdef JP
1044 msg_print("°Å°Ç¤ÎÃæ¤Ç¼ê¤ò¿¶¤Ã¤¿¡£");
1045 #else
1046                         msg_print("You gestures in shadow.");
1047 #endif
1048                 (void)unlite_area(10, 3);
1049                 break;
1050         case MS_MAKE_TRAP:
1051                 if (!target_set(TARGET_KILL)) return FALSE;
1052 #ifdef JP
1053 msg_print("¼öʸ¤ò¾§¤¨¤Æ¼Ù°­¤ËÈù¾Ð¤ó¤À¡£");
1054 #else
1055                         msg_print("You casts a spell and cackles evilly.");
1056 #endif
1057                 trap_creation(target_row, target_col);
1058                 break;
1059         case MS_FORGET:
1060 #ifdef JP
1061 msg_print("¤·¤«¤·²¿¤âµ¯¤­¤Ê¤«¤Ã¤¿¡£");
1062 #else
1063                         msg_print("Nothing happen.");
1064 #endif
1065                 break;
1066         case MS_RAISE_DEAD:
1067 #ifdef JP
1068 msg_print("»à¼ÔÉü³è¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
1069 #else
1070                 msg_print("You casts a animate dead.");
1071 #endif
1072                 (void)animate_dead(0, py, px);
1073                 break;
1074         case MS_S_KIN:
1075         {
1076                 int k;
1077                 if (!target_set(TARGET_KILL)) return FALSE;
1078
1079 #ifdef JP
1080 msg_print("±ç·³¤ò¾¤´­¤·¤¿¡£");
1081 #else
1082                         msg_print("You summons minions.");
1083 #endif
1084                 for (k = 0;k < 4; k++)
1085                 {
1086                         (void)summon_kin_player(TRUE, plev, target_row, target_col, TRUE);
1087                 }
1088                 break;
1089         }
1090         case MS_S_CYBER:
1091         {
1092                 int k;
1093                 int max_cyber = (dun_level / 50) + randint(3);
1094                 if (!target_set(TARGET_KILL)) return FALSE;
1095 #ifdef JP
1096 msg_print("¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤ò¾¤´­¤·¤¿¡ª");
1097 #else
1098                         msg_print("You summons Cyberdemons!");
1099 #endif
1100                 if (max_cyber > 4) max_cyber = 4;
1101                 for (k = 0;k < max_cyber; k++)
1102                         summon_specific(-1, target_row, target_col, plev, SUMMON_CYBER, TRUE, TRUE, TRUE, FALSE, FALSE);
1103                 break;
1104         }
1105         case MS_S_MONSTER:
1106         {
1107                 int k;
1108                 if (!target_set(TARGET_KILL)) return FALSE;
1109 #ifdef JP
1110 msg_print("Ãç´Ö¤ò¾¤´­¤·¤¿¡£");
1111 #else
1112                         msg_print("You summons help.");
1113 #endif
1114                 for (k = 0;k < 1; k++)
1115                         summon_specific(-1, target_row, target_col, plev, 0, TRUE, TRUE, TRUE, unique_okay, FALSE);
1116                 break;
1117         }
1118         case MS_S_MONSTERS:
1119         {
1120                 int k;
1121                 if (!target_set(TARGET_KILL)) return FALSE;
1122 #ifdef JP
1123 msg_print("¥â¥ó¥¹¥¿¡¼¤ò¾¤´­¤·¤¿¡ª");
1124 #else
1125                         msg_print("You summons monsters!");
1126 #endif
1127                 for (k = 0;k < 6; k++)
1128                         summon_specific(-1, target_row, target_col, plev, 0, TRUE, TRUE, TRUE, unique_okay, FALSE);
1129                 break;
1130         }
1131         case MS_S_ANT:
1132         {
1133                 int k;
1134                 if (!target_set(TARGET_KILL)) return FALSE;
1135 #ifdef JP
1136 msg_print("¥¢¥ê¤ò¾¤´­¤·¤¿¡£");
1137 #else
1138                         msg_print("You summons ants.");
1139 #endif
1140                 for (k = 0;k < 6; k++)
1141                         summon_specific(-1, target_row, target_col, plev, SUMMON_ANT, TRUE, TRUE, TRUE, FALSE, FALSE);
1142                 break;
1143         }
1144         case MS_S_SPIDER:
1145         {
1146                 int k;
1147                 if (!target_set(TARGET_KILL)) return FALSE;
1148 #ifdef JP
1149 msg_print("ÃØéá¤ò¾¤´­¤·¤¿¡£");
1150 #else
1151                         msg_print("You summons spiders.");
1152 #endif
1153                 for (k = 0;k < 6; k++)
1154                         summon_specific(-1, target_row, target_col, plev, SUMMON_SPIDER, TRUE, TRUE, TRUE, FALSE, FALSE);
1155                 break;
1156         }
1157         case MS_S_HOUND:
1158         {
1159                 int k;
1160                 if (!target_set(TARGET_KILL)) return FALSE;
1161 #ifdef JP
1162 msg_print("¥Ï¥¦¥ó¥É¤ò¾¤´­¤·¤¿¡£");
1163 #else
1164                         msg_print("You summons hounds.");
1165 #endif
1166                 for (k = 0;k < 4; k++)
1167                         summon_specific(-1, target_row, target_col, plev, SUMMON_HOUND, TRUE, TRUE, TRUE, FALSE, FALSE);
1168                 break;
1169         }
1170         case MS_S_HYDRA:
1171         {
1172                 int k;
1173                 if (!target_set(TARGET_KILL)) return FALSE;
1174 #ifdef JP
1175 msg_print("¥Ò¥É¥é¤ò¾¤´­¤·¤¿¡£");
1176 #else
1177                         msg_print("You summons hydras.");
1178 #endif
1179                 for (k = 0;k < 4; k++)
1180                         summon_specific(-1, target_row, target_col, plev, SUMMON_HYDRA, TRUE, TRUE, TRUE, FALSE, FALSE);
1181                 break;
1182         }
1183         case MS_S_ANGEL:
1184         {
1185                 int k;
1186                 if (!target_set(TARGET_KILL)) return FALSE;
1187 #ifdef JP
1188 msg_print("Å·»È¤ò¾¤´­¤·¤¿¡ª");
1189 #else
1190                         msg_print("You summons angel!");
1191 #endif
1192                 for (k = 0;k < 1; k++)
1193                         summon_specific(-1, target_row, target_col, plev, SUMMON_ANGEL, TRUE, TRUE, TRUE, FALSE, FALSE);
1194                 break;
1195         }
1196         case MS_S_DEMON:
1197         {
1198                 int k;
1199                 if (!target_set(TARGET_KILL)) return FALSE;
1200 #ifdef JP
1201 msg_print("º®Æ٤εÜÄ¤é°­Ëâ¤ò¾¤´­¤·¤¿¡ª");
1202 #else
1203                         msg_print("You summons a demon from the Courts of Chaos!");
1204 #endif
1205                 for (k = 0;k < 1; k++)
1206                         summon_specific(-1, target_row, target_col, plev, SUMMON_DEMON, TRUE, TRUE, TRUE, unique_okay, FALSE);
1207                 break;
1208         }
1209         case MS_S_UNDEAD:
1210         {
1211                 int k;
1212                 if (!target_set(TARGET_KILL)) return FALSE;
1213 #ifdef JP
1214 msg_print("¥¢¥ó¥Ç¥Ã¥É¤Î¶¯Å¨¤ò¾¤´­¤·¤¿¡ª");
1215 #else
1216                         msg_print("You summons an undead adversary!");
1217 #endif
1218                 for (k = 0;k < 1; k++)
1219                         summon_specific(-1, target_row, target_col, plev, SUMMON_UNDEAD, TRUE, TRUE, TRUE, unique_okay, FALSE);
1220                 break;
1221         }
1222         case MS_S_DRAGON:
1223         {
1224                 int k;
1225                 if (!target_set(TARGET_KILL)) return FALSE;
1226 #ifdef JP
1227 msg_print("¥É¥é¥´¥ó¤ò¾¤´­¤·¤¿¡ª");
1228 #else
1229                         msg_print("You summons dragon!");
1230 #endif
1231                 for (k = 0;k < 1; k++)
1232                         summon_specific(-1, target_row, target_col, plev, SUMMON_DRAGON, TRUE, TRUE, TRUE, unique_okay, FALSE);
1233                 break;
1234         }
1235         case MS_S_HI_UNDEAD:
1236         {
1237                 int k;
1238                 if (!target_set(TARGET_KILL)) return FALSE;
1239 #ifdef JP
1240 msg_print("¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤·¤¿¡ª");
1241 #else
1242                         msg_print("You summons greater undead!");
1243 #endif
1244                 for (k = 0;k < 6; k++)
1245                         summon_specific(-1, target_row, target_col, plev, SUMMON_HI_UNDEAD, TRUE, TRUE, TRUE, unique_okay, FALSE);
1246                 break;
1247         }
1248         case MS_S_HI_DRAGON:
1249         {
1250                 int k;
1251                 if (!target_set(TARGET_KILL)) return FALSE;
1252 #ifdef JP
1253 msg_print("¸ÅÂå¥É¥é¥´¥ó¤ò¾¤´­¤·¤¿¡ª");
1254 #else
1255                         msg_print("You summons ancient dragons!");
1256 #endif
1257                 for (k = 0;k < 4; k++)
1258                         summon_specific(-1, target_row, target_col, plev, SUMMON_HI_DRAGON, TRUE, TRUE, TRUE, unique_okay, FALSE);
1259                 break;
1260         }
1261         case MS_S_AMBERITE:
1262         {
1263                 int k;
1264                 if (!target_set(TARGET_KILL)) return FALSE;
1265 #ifdef JP
1266 msg_print("¥¢¥ó¥Ð¡¼¤Î²¦¤ò¾¤´­¤·¤¿¡ª");
1267 #else
1268                         msg_print("You summons Lords of Amber!");
1269 #endif
1270                 for (k = 0;k < 4; k++)
1271                         summon_specific(-1, target_row, target_col, plev, SUMMON_AMBERITES, TRUE, TRUE, TRUE, TRUE, FALSE);
1272                 break;
1273         }
1274         case MS_S_UNIQUE:
1275         {
1276                 int k, count = 0;
1277                 if (!target_set(TARGET_KILL)) return FALSE;
1278 #ifdef JP
1279 msg_print("ÆÃÊ̤ʶ¯Å¨¤ò¾¤´­¤·¤¿¡ª");
1280 #else
1281                         msg_print("You summons special opponents!");
1282 #endif
1283                 for (k = 0;k < 4; k++)
1284                         if (summon_specific(-1, target_row, target_col, plev, SUMMON_UNIQUE, TRUE, TRUE, TRUE, TRUE, FALSE)) count++;
1285                 for (k = count;k < 4; k++)
1286                         summon_specific(-1, target_row, target_col, plev, SUMMON_HI_UNDEAD, TRUE, TRUE, TRUE, unique_okay, FALSE);
1287                 break;
1288         }
1289         default:
1290                 msg_print("hoge?");
1291         }
1292
1293         return TRUE;
1294 }
1295
1296
1297 /*
1298  * do_cmd_cast calls this function if the player's class
1299  * is 'imitator'.
1300  */
1301 bool do_cmd_mane(bool baigaesi)
1302 {
1303         int             n = 0, j;
1304         int             chance;
1305         int             minfail = 0;
1306         int             plev = p_ptr->lev;
1307         monster_power   spell;
1308         bool            cast;
1309
1310
1311         /* not if confused */
1312         if (p_ptr->confused)
1313         {
1314 #ifdef JP
1315 msg_print("º®Í𤷤Ƥ¤¤Æ½¸Ãæ¤Ç¤­¤Ê¤¤¡ª");
1316 #else
1317                 msg_print("You are too confused!");
1318 #endif
1319
1320                 return TRUE;
1321         }
1322
1323         if (!mane_num)
1324         {
1325 #ifdef JP
1326 msg_print("¤Þ¤Í¤é¤ì¤ë¤â¤Î¤¬²¿¤â¤Ê¤¤¡ª");
1327 #else
1328                 msg_print("You don't remember any action!");
1329 #endif
1330
1331                 return FALSE;
1332         }
1333
1334         /* get power */
1335         if (!get_mane_power(&n, baigaesi)) return FALSE;
1336
1337         spell = monster_powers[mane_spell[n]];
1338
1339         /* Spell failure chance */
1340         chance = spell.manefail;
1341
1342         /* Reduce failure rate by "effective" level adjustment */
1343         if (plev > spell.level) chance -= 3 * (plev - spell.level);
1344
1345         if (p_ptr->pseikaku == SEIKAKU_NAMAKE) chance += 10;
1346         if (p_ptr->pseikaku == SEIKAKU_KIREMONO) chance -= 3;
1347
1348         /* Reduce failure rate by INT/WIS adjustment */
1349         chance -= 3 * (adj_mag_stat[p_ptr->stat_ind[spell.use_stat]] - 1);
1350
1351         if (spell.manedam) chance = chance * damage / spell.manedam;
1352
1353         /* Extract the minimum failure rate */
1354         minfail = adj_mag_fail[p_ptr->stat_ind[spell.use_stat]];
1355
1356         /* Minimum failure rate */
1357         if (chance < minfail) chance = minfail;
1358
1359         /* Stunning makes spells harder */
1360         if (p_ptr->stun > 50) chance += 25;
1361         else if (p_ptr->stun) chance += 15;
1362
1363         /* Always a 5 percent chance of working */
1364         if (chance > 95) chance = 95;
1365
1366         /* Failed spell */
1367         if (rand_int(100) < chance)
1368         {
1369                 if (flush_failure) flush();
1370 #ifdef JP
1371 msg_print("¤â¤Î¤Þ¤Í¤Ë¼ºÇÔ¤·¤¿¡ª");
1372 #else
1373                 msg_print("You failed to concentrate hard enough!");
1374 #endif
1375
1376                 sound(SOUND_FAIL);
1377         }
1378         else
1379         {
1380                 sound(SOUND_ZAP);
1381
1382                 /* Cast the spell */
1383                 cast = use_mane(mane_spell[n]);
1384
1385                 if (!cast) return FALSE;
1386         }
1387
1388         mane_num--;
1389         for (j = n; j < mane_num;j++)
1390         {
1391                 mane_spell[j] = mane_spell[j+1];
1392                 mane_dam[j] = mane_dam[j+1];
1393         }
1394
1395         /* Take a turn */
1396         energy_use = 100;
1397
1398         /* Window stuff */
1399         p_ptr->redraw |= (PR_MANE);
1400         p_ptr->window |= (PW_PLAYER);
1401         p_ptr->window |= (PW_SPELL);
1402
1403         return TRUE;
1404 }