OSDN Git Service

状態変数の処理ループをさらに細分化. その状態になっているモンスターが1
[hengband/hengband.git] / src / mspells3.c
1 /* File: mspells3.c */
2
3 /*
4  * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke
5  *
6  * This software may be copied and distributed for educational, research,
7  * and not for profit purposes provided that this copyright and statement
8  * are included in all such copies.  Other copyrights may also apply.
9  */
10
11 /* Purpose: Mane code */
12
13 #include "angband.h"
14
15 #define pseudo_plev() (((p_ptr->lev + 40) * (p_ptr->lev + 40) - 1550) / 130)
16
17 static void learned_info(char *p, int power)
18 {
19         int plev = pseudo_plev();
20         int hp = p_ptr->chp;
21
22 #ifdef JP
23         cptr s_dam = "»½ý:";
24         cptr s_dur = "´ü´Ö:";
25         cptr s_range = "ÈÏ°Ï:";
26         cptr s_heal = "²óÉü:";
27 #else
28         cptr s_dam = "dam ";
29         cptr s_dur = "dur ";
30         cptr s_range = "range ";
31         cptr s_heal = "heal ";
32 #endif
33
34         strcpy(p, "");
35
36         switch (power)
37         {
38                 case MS_SHRIEK:
39                 case MS_XXX1:
40                 case MS_XXX2:
41                 case MS_XXX3:
42                 case MS_XXX4:
43                 case MS_SCARE:
44                 case MS_BLIND:
45                 case MS_CONF:
46                 case MS_SLOW:
47                 case MS_SLEEP:
48                 case MS_HAND_DOOM:
49                 case MS_WORLD:
50                 case MS_SPECIAL:
51                 case MS_TELE_TO:
52                 case MS_TELE_AWAY:
53                 case MS_TELE_LEVEL:
54                 case MS_DARKNESS:
55                 case MS_MAKE_TRAP:
56                 case MS_FORGET:
57                 case MS_S_KIN:
58                 case MS_S_CYBER:
59                 case MS_S_MONSTER:
60                 case MS_S_MONSTERS:
61                 case MS_S_ANT:
62                 case MS_S_SPIDER:
63                 case MS_S_HOUND:
64                 case MS_S_HYDRA:
65                 case MS_S_ANGEL:
66                 case MS_S_DEMON:
67                 case MS_S_UNDEAD:
68                 case MS_S_DRAGON:
69                 case MS_S_HI_UNDEAD:
70                 case MS_S_HI_DRAGON:
71                 case MS_S_AMBERITE:
72                 case MS_S_UNIQUE:
73                         break;
74                 case MS_BALL_MANA:
75                 case MS_BALL_DARK:
76                 case MS_STARBURST:
77                         sprintf(p, " %s%d+10d10", s_dam, plev * 8 + 50);
78                         break;
79                 case MS_DISPEL:
80                         break;
81                 case MS_ROCKET:
82                         sprintf(p, " %s%d", s_dam, hp/4);
83                         break;
84                 case MS_SHOOT:
85                 {
86                         object_type *o_ptr = NULL;
87                         if (buki_motteruka(INVEN_RARM)) o_ptr = &inventory[INVEN_RARM];
88                         else if (buki_motteruka(INVEN_LARM)) o_ptr = &inventory[INVEN_LARM];
89                         else
90                                 sprintf(p, " %s1", s_dam);
91                         if (o_ptr)
92                                 sprintf(p, " %s%dd%d+%d", s_dam, o_ptr->dd, o_ptr->ds, o_ptr->to_d);
93                         break;
94                 }
95                 case MS_BR_ACID:
96                 case MS_BR_ELEC:
97                 case MS_BR_FIRE:
98                 case MS_BR_COLD:
99                 case MS_BR_POIS:
100                 case MS_BR_NUKE:
101                         sprintf(p, " %s%d", s_dam, hp/3);
102                         break;
103                 case MS_BR_NEXUS:
104                         sprintf(p, " %s%d", s_dam, MIN(hp/3, 250));
105                         break;
106                 case MS_BR_TIME:
107                         sprintf(p, " %s%d", s_dam, MIN(hp/3, 150));
108                         break;
109                 case MS_BR_GRAVITY:
110                         sprintf(p, " %s%d", s_dam, MIN(hp/3, 200));
111                         break;
112                 case MS_BR_MANA:
113                         sprintf(p, " %s%d", s_dam, MIN(hp/3, 250));
114                         break;
115                 case MS_BR_NETHER:
116                 case MS_BR_LITE:
117                 case MS_BR_DARK:
118                 case MS_BR_CONF:
119                 case MS_BR_SOUND:
120                 case MS_BR_CHAOS:
121                 case MS_BR_DISEN:
122                 case MS_BR_SHARDS:
123                 case MS_BR_PLASMA:
124                         sprintf(p, " %s%d", s_dam, hp/6);
125                         break;
126                 case MS_BR_INERTIA:
127                 case MS_BR_FORCE:
128                         sprintf(p, " %s%d", s_dam, MIN(hp/6, 200));
129                         break;
130                 case MS_BR_DISI:
131                         sprintf(p, " %s%d", s_dam, MIN(hp/6, 150));
132                         break;
133                 case MS_BALL_NUKE:
134                         sprintf(p, " %s%d+10d6", s_dam, plev * 2);
135                         break;
136                 case MS_BALL_CHAOS:
137                         sprintf(p, " %s%d+10d10", s_dam, plev * 4);
138                         break;
139                 case MS_BALL_ACID:
140                         sprintf(p, " %s15+d%d", s_dam, plev * 6);
141                         break;
142                 case MS_BALL_ELEC:
143                         sprintf(p, " %s8+d%d", s_dam, plev * 3);
144                         break;
145                 case MS_BALL_FIRE:
146                         sprintf(p, " %s10+d%d", s_dam, plev * 7);
147                         break;
148                 case MS_BALL_COLD:
149                         sprintf(p, " %s10+d%d", s_dam, plev * 3);
150                         break;
151                 case MS_BALL_POIS:
152                         sprintf(p, " %s12d2", s_dam);
153                         break;
154                 case MS_BALL_NETHER:
155                         sprintf(p, " %s%d+10d10", s_dam, plev * 2 + 50);
156                         break;
157                 case MS_BALL_WATER:
158                         sprintf(p, " %s50+d%d", s_dam, plev * 4);
159                         break;
160                 case MS_DRAIN_MANA:
161                         sprintf(p, " %sd%d+%d", s_heal, plev, plev);
162                         break;
163                 case MS_MIND_BLAST:
164                         sprintf(p, " %s8d8", s_dam);
165                         break;
166                 case MS_BRAIN_SMASH:
167                         sprintf(p, " %s12d15", s_dam);
168                         break;
169                 case MS_CAUSE_1:
170                         sprintf(p, " %s3d8", s_dam);
171                         break;
172                 case MS_CAUSE_2:
173                         sprintf(p, " %s8d8", s_dam);
174                         break;
175                 case MS_CAUSE_3:
176                         sprintf(p, " %s10d15", s_dam);
177                         break;
178                 case MS_CAUSE_4:
179                         sprintf(p, " %s15d15", s_dam);
180                         break;
181                 case MS_BOLT_ACID:
182                         sprintf(p, " %s%d+7d8", s_dam, plev * 2 / 3);
183                         break;
184                 case MS_BOLT_ELEC:
185                         sprintf(p, " %s%d+4d8", s_dam, plev * 2 / 3);
186                         break;
187                 case MS_BOLT_FIRE:
188                         sprintf(p, " %s%d+9d8", s_dam, plev * 2 / 3);
189                         break;
190                 case MS_BOLT_COLD:
191                         sprintf(p, " %s%d+6d8", s_dam, plev * 2 / 3);
192                         break;
193                 case MS_BOLT_NETHER:
194                         sprintf(p, " %s%d+5d5", s_dam, 30 + plev * 8 / 3);
195                         break;
196                 case MS_BOLT_WATER:
197                         sprintf(p, " %s%d+10d10", s_dam, plev * 2);
198                         break;
199                 case MS_BOLT_MANA:
200                         sprintf(p, " %s50+d%d", s_dam, plev * 7);
201                         break;
202                 case MS_BOLT_PLASMA:
203                         sprintf(p, " %s%d+8d7", s_dam, plev * 2 + 10);
204                         break;
205                 case MS_BOLT_ICE:
206                         sprintf(p, " %s%d+6d6", s_dam, plev * 2);
207                         break;
208                 case MS_MAGIC_MISSILE:
209                         sprintf(p, " %s%d+2d6", s_dam, plev * 2 / 3);
210                         break;
211                 case MS_SPEED:
212                         sprintf(p, " %sd%d+%d", s_dur, 20+plev, plev);
213                         break;
214                 case MS_HEAL:
215                         sprintf(p, " %s%d", s_heal, plev*4);
216                         break;
217                 case MS_INVULNER:
218                         sprintf(p, " %sd7+7", s_dur);
219                         break;
220                 case MS_BLINK:
221                         sprintf(p, " %s10", s_range);
222                         break;
223                 case MS_TELEPORT:
224                         sprintf(p, " %s%d", s_range, plev * 5);
225                         break;
226                 case MS_PSY_SPEAR:
227                         sprintf(p, " %s100+d%d", s_dam, plev * 3);
228                         break;
229                 case MS_RAISE_DEAD:
230                         sprintf(p, " %s5", s_range);
231                         break;
232                 default:
233                         break;
234         }
235 }
236
237
238 /*
239  * Allow user to choose a imitation.
240  *
241  * If a valid spell is chosen, saves it in '*sn' and returns TRUE
242  * If the user hits escape, returns FALSE, and set '*sn' to -1
243  * If there are no legal choices, returns FALSE, and sets '*sn' to -2
244  *
245  * The "prompt" should be "cast", "recite", or "study"
246  * The "known" should be TRUE for cast/pray, FALSE for study
247  *
248  * nb: This function has a (trivial) display bug which will be obvious
249  * when you run it. It's probably easy to fix but I haven't tried,
250  * sorry.
251  */
252 static int get_learned_power(int *sn)
253 {
254         int             i = 0;
255         int             num = 0;
256         int             y = 1;
257         int             x = 18;
258         int             minfail = 0;
259         int             plev = p_ptr->lev;
260         int             chance = 0;
261         int             ask = TRUE, mode = 0;
262         int             spellnum[MAX_MONSPELLS];
263         char            ch;
264         char            choice;
265         char            out_val[160];
266         char            comment[80];
267         s32b            f4 = 0, f5 = 0, f6 = 0;
268 #ifdef JP
269 cptr            p = "ËâË¡";
270 #else
271         cptr            p = "magic";
272 #endif
273
274         monster_power   spell;
275         bool            flag, redraw;
276         int menu_line = (use_menu ? 1 : 0);
277
278         /* Assume cancelled */
279         *sn = (-1);
280
281         /* Nothing chosen yet */
282         flag = FALSE;
283
284         /* No redraw yet */
285         redraw = FALSE;
286
287 #ifdef ALLOW_REPEAT /* TNB */
288
289         /* Get the spell, if available */
290         if (repeat_pull(sn))
291         {
292                 /* Success */
293                 return (TRUE);
294         }
295
296 #endif /* ALLOW_REPEAT -- TNB */
297
298         if (use_menu)
299         {
300                 screen_save();
301
302                 while(!mode)
303                 {
304 #ifdef JP
305                         prt(format(" %s ¥Ü¥ë¥È", (menu_line == 1) ? "¡Õ" : "  "), 2, 14);
306                         prt(format(" %s ¥Ü¡¼¥ë", (menu_line == 2) ? "¡Õ" : "  "), 3, 14);
307                         prt(format(" %s ¥Ö¥ì¥¹", (menu_line == 3) ? "¡Õ" : "  "), 4, 14);
308                         prt(format(" %s ¾¤´­", (menu_line == 4) ? "¡Õ" : "  "), 5, 14);
309                         prt(format(" %s ¤½¤Î¾", (menu_line == 5) ? "¡Õ" : "  "), 6, 14);
310                         prt("¤É¤Î¼ïÎà¤ÎËâË¡¤ò»È¤¤¤Þ¤¹¤«¡©", 0, 0);
311 #else
312                         prt(format(" %s bolt", (menu_line == 1) ? "> " : "  "), 2, 14);
313                         prt(format(" %s ball", (menu_line == 2) ? "> " : "  "), 3, 14);
314                         prt(format(" %s breath", (menu_line == 3) ? "> " : "  "), 4, 14);
315                         prt(format(" %s sommoning", (menu_line == 4) ? "> " : "  "), 5, 14);
316                         prt(format(" %s others", (menu_line == 5) ? "> " : "  "), 6, 14);
317                         prt("use which type of magic? ", 0, 0);
318 #endif
319                         choice = inkey();
320                         switch(choice)
321                         {
322                         case ESCAPE:
323                         case 'z':
324                         case 'Z':
325                                 screen_load();
326                                 return FALSE;
327                         case '2':
328                         case 'j':
329                         case 'J':
330                                 menu_line++;
331                                 break;
332                         case '8':
333                         case 'k':
334                         case 'K':
335                                 menu_line+= 4;
336                                 break;
337                         case '\r':
338                         case 'x':
339                         case 'X':
340                                 mode = menu_line;
341                                 break;
342                         }
343                         if (menu_line > 5) menu_line -= 5;
344                 }
345                 screen_load();
346         }
347         else
348         {
349 #ifdef JP
350         sprintf(comment, "[A]¥Ü¥ë¥È, [B]¥Ü¡¼¥ë, [C]¥Ö¥ì¥¹, [D]¾¤´­, [E]¤½¤Î¾:");
351 #else
352         sprintf(comment, "[A] bolt, [B] ball, [C] breath, [D] summoning, [E] others:");
353 #endif
354         while (TRUE)
355         {
356                 if (!get_com(comment, &ch, TRUE))
357                 {
358                         return FALSE;
359                 }
360                 if (ch == 'A' || ch == 'a')
361                 {
362                         mode = 1;
363                         break;
364                 }
365                 if (ch == 'B' || ch == 'b')
366                 {
367                         mode = 2;
368                         break;
369                 }
370                 if (ch == 'C' || ch == 'c')
371                 {
372                         mode = 3;
373                         break;
374                 }
375                 if (ch == 'D' || ch == 'd')
376                 {
377                         mode = 4;
378                         break;
379                 }
380                 if (ch == 'E' || ch == 'e')
381                 {
382                         mode = 5;
383                         break;
384                 }
385         }
386         }
387
388         set_rf_masks(&f4, &f5, &f6, mode);
389
390         for (i = 0, num = 0; i < 32; i++)
391         {
392                 if ((0x00000001 << i) & f4) spellnum[num++] = i;
393         }
394         for (; i < 64; i++)
395         {
396                 if ((0x00000001 << (i - 32)) & f5) spellnum[num++] = i;
397         }
398         for (; i < 96; i++)
399         {
400                 if ((0x00000001 << (i - 64)) & f6) spellnum[num++] = i;
401         }
402         for (i = 0; i < num; i++)
403         {
404                 if (p_ptr->magic_num2[spellnum[i]])
405                 {
406                         if (use_menu) menu_line = i+1;
407                         break;
408                 }
409         }
410         if (i == num)
411         {
412 #ifdef JP
413                 msg_print("¤½¤Î¼ïÎà¤ÎËâË¡¤Ï³Ð¤¨¤Æ¤¤¤Ê¤¤¡ª");
414 #else
415                 msg_print("You don't know any spell of this type.");
416 #endif
417                 return (FALSE);
418         }
419
420         /* Build a prompt (accept all spells) */
421         (void)strnfmt(out_val, 78, 
422 #ifdef JP
423                       "(%c-%c, '*'¤Ç°ìÍ÷, ESC) ¤É¤Î%s¤ò¾§¤¨¤Þ¤¹¤«¡©",
424 #else
425                       "(%c-%c, *=List, ESC=exit) Use which %s? ",
426 #endif
427                       I2A(0), I2A(num - 1), p);
428
429         if (use_menu) screen_save();
430
431         /* Get a spell from the user */
432
433         choice= (always_show_list || use_menu) ? ESCAPE:1 ;
434         while (!flag)
435         {
436                 if(choice==ESCAPE) choice = ' '; 
437                 else if( !get_com(out_val, &choice, TRUE) )break; 
438
439                 if (use_menu && choice != ' ')
440                 {
441                         switch(choice)
442                         {
443                                 case '0':
444                                 {
445                                         screen_load();
446                                         return (FALSE);
447                                 }
448
449                                 case '8':
450                                 case 'k':
451                                 case 'K':
452                                 {
453                                         do
454                                         {
455                                                 menu_line += (num-1);
456                                                 if (menu_line > num) menu_line -= num;
457                                         } while(!p_ptr->magic_num2[spellnum[menu_line-1]]);
458                                         break;
459                                 }
460
461                                 case '2':
462                                 case 'j':
463                                 case 'J':
464                                 {
465                                         do
466                                         {
467                                                 menu_line++;
468                                                 if (menu_line > num) menu_line -= num;
469                                         } while(!p_ptr->magic_num2[spellnum[menu_line-1]]);
470                                         break;
471                                 }
472
473                                 case '6':
474                                 case 'l':
475                                 case 'L':
476                                 {
477                                         menu_line=num;
478                                         while(!p_ptr->magic_num2[spellnum[menu_line-1]]) menu_line--;
479                                         break;
480                                 }
481
482                                 case '4':
483                                 case 'h':
484                                 case 'H':
485                                 {
486                                         menu_line=1;
487                                         while(!p_ptr->magic_num2[spellnum[menu_line-1]]) menu_line++;
488                                         break;
489                                 }
490
491                                 case 'x':
492                                 case 'X':
493                                 case '\r':
494                                 {
495                                         i = menu_line - 1;
496                                         ask = FALSE;
497                                         break;
498                                 }
499                         }
500                 }
501                 /* Request redraw */
502                 if ((choice == ' ') || (choice == '*') || (choice == '?') || (use_menu && ask))
503                 {
504                         /* Show the list */
505                         if (!redraw || use_menu)
506                         {
507                                 char psi_desc[80];
508
509                                 /* Show list */
510                                 redraw = TRUE;
511
512                                 /* Save the screen */
513                                 if (!use_menu) screen_save();
514
515                                 /* Display a list of spells */
516                                 prt("", y, x);
517 #ifdef JP
518 put_str("̾Á°", y, x + 5);
519 #else
520                                 put_str("Name", y, x + 5);
521 #endif
522
523 #ifdef JP
524 put_str("MP ¼ºÎ¨ ¸ú²Ì", y, x + 33);
525 #else
526                                 put_str("SP Fail Info", y, x + 32);
527 #endif
528
529
530                                 /* Dump the spells */
531                                 for (i = 0; i < num; i++)
532                                 {
533                                         int need_mana;
534
535                                         prt("", y + i + 1, x);
536                                         if (!p_ptr->magic_num2[spellnum[i]]) continue;
537
538                                         /* Access the spell */
539                                         spell = monster_powers[spellnum[i]];
540
541                                         chance = spell.fail;
542
543                                         /* Reduce failure rate by "effective" level adjustment */
544                                         if (plev > spell.level) chance -= 3 * (plev - spell.level);
545                                         else chance += (spell.level - plev);
546
547                                         /* Reduce failure rate by INT/WIS adjustment */
548                                         chance -= 3 * (adj_mag_stat[p_ptr->stat_ind[A_INT]] - 1);
549
550                                         chance = mod_spell_chance_1(chance);
551
552                                         need_mana = mod_need_mana(monster_powers[spellnum[i]].smana, 0, REALM_NONE);
553
554                                         /* Not enough mana to cast */
555                                         if (need_mana > p_ptr->csp)
556                                         {
557                                                 chance += 5 * (need_mana - p_ptr->csp);
558                                         }
559
560                                         /* Extract the minimum failure rate */
561                                         minfail = adj_mag_fail[p_ptr->stat_ind[A_INT]];
562
563                                         /* Minimum failure rate */
564                                         if (chance < minfail) chance = minfail;
565
566                                         /* Stunning makes spells harder */
567                                         if (p_ptr->stun > 50) chance += 25;
568                                         else if (p_ptr->stun) chance += 15;
569
570                                         /* Always a 5 percent chance of working */
571                                         if (chance > 95) chance = 95;
572
573                                         chance = mod_spell_chance_2(chance);
574
575                                         /* Get info */
576                                         learned_info(comment, spellnum[i]);
577
578                                         if (use_menu)
579                                         {
580 #ifdef JP
581                                                 if (i == (menu_line-1)) strcpy(psi_desc, "  ¡Õ");
582 #else
583                                                 if (i == (menu_line-1)) strcpy(psi_desc, "  > ");
584 #endif
585                                                 else strcpy(psi_desc, "    ");
586                                         }
587                                         else sprintf(psi_desc, "  %c)", I2A(i));
588
589                                         /* Dump the spell --(-- */
590                                         strcat(psi_desc, format(" %-26s %3d %3d%%%s",
591                                                 spell.name, need_mana,
592                                                 chance, comment));
593                                         prt(psi_desc, y + i + 1, x);
594                                 }
595
596                                 /* Clear the bottom line */
597                                 if (y < 22) prt("", y + i + 1, x);
598                         }
599
600                         /* Hide the list */
601                         else
602                         {
603                                 /* Hide list */
604                                 redraw = FALSE;
605
606                                 /* Restore the screen */
607                                 screen_load();
608                         }
609
610                         /* Redo asking */
611                         continue;
612                 }
613
614                 if (!use_menu)
615                 {
616                         /* Note verify */
617                         ask = isupper(choice);
618
619                         /* Lowercase */
620                         if (ask) choice = tolower(choice);
621
622                         /* Extract request */
623                         i = (islower(choice) ? A2I(choice) : -1);
624                 }
625
626                 /* Totally Illegal */
627                 if ((i < 0) || (i >= num) || !p_ptr->magic_num2[spellnum[i]])
628                 {
629                         bell();
630                         continue;
631                 }
632
633                 /* Save the spell index */
634                 spell = monster_powers[spellnum[i]];
635
636                 /* Verify it */
637                 if (ask)
638                 {
639                         char tmp_val[160];
640
641                         /* Prompt */
642 #ifdef JP
643                         (void) strnfmt(tmp_val, 78, "%s¤ÎËâË¡¤ò¾§¤¨¤Þ¤¹¤«¡©", monster_powers[spellnum[i]].name);
644 #else
645                         (void)strnfmt(tmp_val, 78, "Use %s? ", monster_powers[spellnum[i]].name);
646 #endif
647
648
649                         /* Belay that order */
650                         if (!get_check(tmp_val)) continue;
651                 }
652
653                 /* Stop the loop */
654                 flag = TRUE;
655         }
656
657         /* Restore the screen */
658         if (redraw) screen_load();
659
660         /* Show choices */
661         p_ptr->window |= (PW_SPELL);
662
663         /* Window stuff */
664         window_stuff();
665
666         /* Abort if needed */
667         if (!flag) return (FALSE);
668
669         /* Save the choice */
670         (*sn) = spellnum[i];
671
672 #ifdef ALLOW_REPEAT /* TNB */
673
674         repeat_push(*sn);
675
676 #endif /* ALLOW_REPEAT -- TNB */
677
678         /* Success */
679         return (TRUE);
680 }
681
682
683 /*
684  * do_cmd_cast calls this function if the player's class
685  * is 'imitator'.
686  */
687 static bool cast_learned_spell(int spell, bool success)
688 {
689         int             dir;
690         int             plev = pseudo_plev();
691         int     summon_lev = p_ptr->lev * 2 / 3 + randint1(p_ptr->lev/2);
692         int             hp = p_ptr->chp;
693         int             damage = 0;
694         bool   pet = success;
695         bool   no_trump = FALSE;
696         u32b p_mode, u_mode = 0L, g_mode;
697
698         if (pet)
699         {
700                 p_mode = PM_FORCE_PET;
701                 g_mode = 0;
702         }
703         else
704         {
705                 p_mode = PM_NO_PET;
706                 g_mode = PM_ALLOW_GROUP;
707         }
708
709         if (!success || (randint1(50+plev) < plev/10)) u_mode = PM_ALLOW_UNIQUE;
710
711         /* spell code */
712         switch (spell)
713         {
714         case MS_SHRIEK:
715 #ifdef JP
716 msg_print("¤«¤ó¹â¤¤¶âÀÚ¤êÀ¼¤ò¤¢¤²¤¿¡£");
717 #else
718                 msg_print("You make a high pitched shriek.");
719 #endif
720
721                 aggravate_monsters(0);
722                 break;
723         case MS_XXX1:
724                 break;
725         case MS_DISPEL:
726         {
727                 monster_type *m_ptr;
728                 int m_idx;
729                 char m_name[80];
730
731                 if (!target_set(TARGET_KILL)) return FALSE;
732                 m_idx = cave[target_row][target_col].m_idx;
733                 if (!m_idx) break;
734                 if (!player_has_los_bold(target_row, target_col)) break;
735                 if (!projectable(py, px, target_row, target_col)) break;
736                 m_ptr = &m_list[m_idx];
737                 monster_desc(m_name, m_ptr, 0);
738                 if (m_ptr->invulner)
739                 {
740                         m_ptr->invulner = 0;
741                         mproc_remove(m_idx, m_ptr->mproc_idx[MPROC_INVULNER], MPROC_INVULNER);
742                         if (m_ptr->ml)
743                         {
744 #ifdef JP
745                                 msg_format("%s¤Ï¤â¤¦ÌµÅ¨¤Ç¤Ï¤Ê¤¤¡£", m_name);
746 #else
747                                 msg_format("%^s is no longer invulnerable.", m_name);
748 #endif
749                                 p_ptr->redraw |= (PR_HEALTH);
750                                 if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
751                         }
752                         m_ptr->energy_need += ENERGY_NEED();
753                 }
754                 if (m_ptr->fast)
755                 {
756                         m_ptr->fast = 0;
757                         mproc_remove(m_idx, m_ptr->mproc_idx[MPROC_FAST], MPROC_FAST);
758 #ifdef JP
759                         if (m_ptr->ml) msg_format("%s¤Ï¤â¤¦²Ã®¤µ¤ì¤Æ¤¤¤Ê¤¤¡£", m_name);
760 #else
761                         if (m_ptr->ml) msg_format("%^s is no longer fast.", m_name);
762 #endif
763                 }
764                 if (m_ptr->slow)
765                 {
766                         m_ptr->slow = 0;
767                         mproc_remove(m_idx, m_ptr->mproc_idx[MPROC_SLOW], MPROC_SLOW);
768 #ifdef JP
769                         if (m_ptr->ml) msg_format("%s¤Ï¤â¤¦¸ºÂ®¤µ¤ì¤Æ¤¤¤Ê¤¤¡£", m_name);
770 #else
771                         if (m_ptr->ml) msg_format("%^s is no longer slow.", m_name);
772 #endif
773                 }
774                 break;
775         }
776         case MS_ROCKET:
777                 if (!get_aim_dir(&dir)) return FALSE;
778                 else
779 #ifdef JP
780 msg_print("¥í¥±¥Ã¥È¤òȯ¼Í¤·¤¿¡£");
781 #else
782                         msg_print("You fire a rocket.");
783 #endif
784                 damage = hp / 4;
785                         fire_rocket(GF_ROCKET, dir, damage, 2);
786                 break;
787         case MS_SHOOT:
788         {
789                 object_type *o_ptr = NULL;
790
791                 if (!get_aim_dir(&dir)) return FALSE;
792                 else
793                 {
794 #ifdef JP
795 msg_print("Ìð¤òÊü¤Ã¤¿¡£");
796 #else
797                         msg_print("You fire an arrow.");
798 #endif
799                         if (buki_motteruka(INVEN_RARM)) o_ptr = &inventory[INVEN_RARM];
800                         else if (buki_motteruka(INVEN_LARM)) o_ptr = &inventory[INVEN_LARM];
801                         else
802                         damage = 1;
803                         if (o_ptr)
804                         {
805                                 damage = damroll(o_ptr->dd, o_ptr->ds)+ o_ptr->to_d;
806                                 if (damage < 1) damage = 1;
807                         }
808                         fire_bolt(GF_ARROW, dir, damage);
809                 }
810                 break;
811         }
812         case MS_XXX2:
813                 break;
814         case MS_XXX3:
815                 break;
816         case MS_XXX4:
817                 break;
818         case MS_BR_ACID:
819                 if (!get_aim_dir(&dir)) return FALSE;
820 #ifdef JP
821 else msg_print("»À¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
822 #else
823                         else msg_print("You breathe acid.");
824 #endif
825                 damage = hp / 3;
826                 fire_ball(GF_ACID, dir, damage, (plev > 40 ? -3 : -2));
827                 break;
828         case MS_BR_ELEC:
829                 if (!get_aim_dir(&dir)) return FALSE;
830 #ifdef JP
831 else msg_print("°ðºÊ¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
832 #else
833                         else msg_print("You breathe lightning.");
834 #endif
835                 damage = hp / 3;
836                 fire_ball(GF_ELEC, dir, damage, (plev > 40 ? -3 : -2));
837                 break;
838         case MS_BR_FIRE:
839                 if (!get_aim_dir(&dir)) return FALSE;
840 #ifdef JP
841 else msg_print("²Ð±ê¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
842 #else
843                         else msg_print("You breathe fire.");
844 #endif
845                 damage = hp / 3;
846                 fire_ball(GF_FIRE, dir, damage, (plev > 40 ? -3 : -2));
847                 break;
848         case MS_BR_COLD:
849                 if (!get_aim_dir(&dir)) return FALSE;
850 #ifdef JP
851 else msg_print("Î䵤¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
852 #else
853                         else msg_print("You breathe frost.");
854 #endif
855                 damage = hp / 3;
856                 fire_ball(GF_COLD, dir, damage, (plev > 40 ? -3 : -2));
857                 break;
858         case MS_BR_POIS:
859                 if (!get_aim_dir(&dir)) return FALSE;
860 #ifdef JP
861 else msg_print("¥¬¥¹¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
862 #else
863                         else msg_print("You breathe gas.");
864 #endif
865                 damage = hp / 3;
866                 fire_ball(GF_POIS, dir, damage, (plev > 40 ? -3 : -2));
867                 break;
868         case MS_BR_NETHER:
869                 if (!get_aim_dir(&dir)) return FALSE;
870 #ifdef JP
871 else msg_print("ÃϹö¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
872 #else
873                         else msg_print("You breathe nether.");
874 #endif
875                 damage = hp / 6;
876                 fire_ball(GF_NETHER, dir, damage, (plev > 40 ? -3 : -2));
877                 break;
878         case MS_BR_LITE:
879                 if (!get_aim_dir(&dir)) return FALSE;
880 #ifdef JP
881 else msg_print("Á®¸÷¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
882 #else
883                         else msg_print("You breathe light.");
884 #endif
885                 damage = hp / 6;
886                 fire_ball(GF_LITE, dir, damage, (plev > 40 ? -3 : -2));
887                 break;
888         case MS_BR_DARK:
889                 if (!get_aim_dir(&dir)) return FALSE;
890 #ifdef JP
891 else msg_print("°Å¹õ¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
892 #else
893                         else msg_print("You breathe darkness.");
894 #endif
895                 damage = hp / 6;
896                 fire_ball(GF_DARK, dir, damage, (plev > 40 ? -3 : -2));
897                 break;
898         case MS_BR_CONF:
899                 if (!get_aim_dir(&dir)) return FALSE;
900 #ifdef JP
901 else msg_print("º®Íð¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
902 #else
903                         else msg_print("You breathe confusion.");
904 #endif
905                 damage = hp / 6;
906                 fire_ball(GF_CONFUSION, dir, damage, (plev > 40 ? -3 : -2));
907                 break;
908         case MS_BR_SOUND:
909                 if (!get_aim_dir(&dir)) return FALSE;
910 #ifdef JP
911 else msg_print("¹ì²»¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
912 #else
913                         else msg_print("You breathe sound.");
914 #endif
915                 damage = hp / 6;
916                 fire_ball(GF_SOUND, dir, damage, (plev > 40 ? -3 : -2));
917                 break;
918         case MS_BR_CHAOS:
919                 if (!get_aim_dir(&dir)) return FALSE;
920 #ifdef JP
921 else msg_print("¥«¥ª¥¹¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
922 #else
923                         else msg_print("You breathe chaos.");
924 #endif
925                 damage = hp / 6;
926                 fire_ball(GF_CHAOS, dir, damage, (plev > 40 ? -3 : -2));
927                 break;
928         case MS_BR_DISEN:
929                 if (!get_aim_dir(&dir)) return FALSE;
930 #ifdef JP
931 else msg_print("Îô²½¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
932 #else
933                         else msg_print("You breathe disenchantment.");
934 #endif
935                 damage = hp / 6;
936                 fire_ball(GF_DISENCHANT, dir, damage, (plev > 40 ? -3 : -2));
937                 break;
938         case MS_BR_NEXUS:
939                 if (!get_aim_dir(&dir)) return FALSE;
940 #ifdef JP
941 else msg_print("°ø²Ìº®Íð¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
942 #else
943                         else msg_print("You breathe nexus.");
944 #endif
945                 damage = MIN(hp / 3, 250);
946                 fire_ball(GF_NEXUS, dir, damage, (plev > 40 ? -3 : -2));
947                 break;
948         case MS_BR_TIME:
949                 if (!get_aim_dir(&dir)) return FALSE;
950 #ifdef JP
951 else msg_print("»þ´ÖµÕž¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
952 #else
953                         else msg_print("You breathe time.");
954 #endif
955                 damage = MIN(hp / 3, 150);
956                 fire_ball(GF_TIME, dir, damage, (plev > 40 ? -3 : -2));
957                 break;
958         case MS_BR_INERTIA:
959                 if (!get_aim_dir(&dir)) return FALSE;
960 #ifdef JP
961 else msg_print("ÃÙÆߤΥ֥쥹¤òÅǤ¤¤¿¡£");
962 #else
963                         else msg_print("You breathe inertia.");
964 #endif
965                 damage = MIN(hp / 6, 200);
966                 fire_ball(GF_INERTIA, dir, damage, (plev > 40 ? -3 : -2));
967                 break;
968         case MS_BR_GRAVITY:
969                 if (!get_aim_dir(&dir)) return FALSE;
970 #ifdef JP
971 else msg_print("½ÅÎϤΥ֥쥹¤òÅǤ¤¤¿¡£");
972 #else
973                         else msg_print("You breathe gravity.");
974 #endif
975                 damage = MIN(hp / 3, 200);
976                 fire_ball(GF_GRAVITY, dir, damage, (plev > 40 ? -3 : -2));
977                 break;
978         case MS_BR_SHARDS:
979                 if (!get_aim_dir(&dir)) return FALSE;
980 #ifdef JP
981 else msg_print("ÇËÊҤΥ֥쥹¤òÅǤ¤¤¿¡£");
982 #else
983                         else msg_print("You breathe shards.");
984 #endif
985                 damage = hp / 6;
986                 fire_ball(GF_SHARDS, dir, damage, (plev > 40 ? -3 : -2));
987                 break;
988         case MS_BR_PLASMA:
989                 if (!get_aim_dir(&dir)) return FALSE;
990 #ifdef JP
991 else msg_print("¥×¥é¥º¥Þ¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
992 #else
993                         else msg_print("You breathe plasma.");
994 #endif
995                 damage = MIN(hp / 6, 150);
996                 fire_ball(GF_PLASMA, dir, damage, (plev > 40 ? -3 : -2));
997                 break;
998         case MS_BR_FORCE:
999                 if (!get_aim_dir(&dir)) return FALSE;
1000 #ifdef JP
1001 else msg_print("¥Õ¥©¡¼¥¹¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
1002 #else
1003                         else msg_print("You breathe force.");
1004 #endif
1005                 damage = MIN(hp / 6, 200);
1006                 fire_ball(GF_FORCE, dir, damage, (plev > 40 ? -3 : -2));
1007                 break;
1008         case MS_BR_MANA:
1009                 if (!get_aim_dir(&dir)) return FALSE;
1010 #ifdef JP
1011 else msg_print("ËâÎϤΥ֥쥹¤òÅǤ¤¤¿¡£");
1012 #else
1013                         else msg_print("You breathe mana.");
1014 #endif
1015                 
1016                 damage = MIN(hp / 3, 250);
1017                 fire_ball(GF_MANA, dir, damage, (plev > 40 ? -3 : -2));
1018                 break;
1019         case MS_BALL_NUKE:
1020                 if (!get_aim_dir(&dir)) return FALSE;
1021 #ifdef JP
1022 else msg_print("Êü¼Íǽµå¤òÊü¤Ã¤¿¡£");
1023 #else
1024                         else msg_print("You cast a ball of radiation.");
1025 #endif
1026                 damage = plev * 2 + damroll(10, 6);
1027                 fire_ball(GF_NUKE, dir, damage, 2);
1028                 break;
1029         case MS_BR_NUKE:
1030                 if (!get_aim_dir(&dir)) return FALSE;
1031 #ifdef JP
1032 else msg_print("Êü¼ÍÀ­ÇÑ´þʪ¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
1033 #else
1034                         else msg_print("You breathe toxic waste.");
1035 #endif
1036                 damage = hp / 3;
1037                 fire_ball(GF_NUKE, dir, damage, (plev > 40 ? -3 : -2));
1038                 break;
1039         case MS_BALL_CHAOS:
1040                 if (!get_aim_dir(&dir)) return FALSE;
1041 #ifdef JP
1042 else msg_print("½ã¥í¥°¥ë¥¹¤òÊü¤Ã¤¿¡£");
1043 #else
1044                         else msg_print("You invoke a raw Logrus.");
1045 #endif
1046                 damage = plev * 4 + damroll(10, 10);
1047                 fire_ball(GF_CHAOS, dir, damage, 4);
1048                 break;
1049         case MS_BR_DISI:
1050                 if (!get_aim_dir(&dir)) return FALSE;
1051 #ifdef JP
1052 else msg_print("ʬ²ò¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
1053 #else
1054                         else msg_print("You breathe disintegration.");
1055 #endif
1056                 damage = MIN(hp / 6, 150);
1057                 fire_ball(GF_DISINTEGRATE, dir, damage, (plev > 40 ? -3 : -2));
1058                 break;
1059         case MS_BALL_ACID:
1060                 if (!get_aim_dir(&dir)) return FALSE;
1061 #ifdef JP
1062 else msg_print("¥¢¥·¥Ã¥É¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
1063 #else
1064                         else msg_print("You cast an acid ball.");
1065 #endif
1066                 damage = randint1(plev * 6) + 15;
1067                 fire_ball(GF_ACID, dir, damage, 2);
1068                 break;
1069         case MS_BALL_ELEC:
1070                 if (!get_aim_dir(&dir)) return FALSE;
1071 #ifdef JP
1072 else msg_print("¥µ¥ó¥À¡¼¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
1073 #else
1074                         else msg_print("You cast a lightning ball.");
1075 #endif
1076                 damage = randint1(plev * 3) + 8;
1077                 fire_ball(GF_ELEC, dir, damage, 2);
1078                 break;
1079         case MS_BALL_FIRE:
1080                 if (!get_aim_dir(&dir)) return FALSE;
1081 #ifdef JP
1082 else msg_print("¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
1083 #else
1084                         else msg_print("You cast a fire ball.");
1085 #endif
1086                 damage = randint1(plev * 7) + 10;
1087                 fire_ball(GF_FIRE, dir, damage, 2);
1088                 break;
1089         case MS_BALL_COLD:
1090                 if (!get_aim_dir(&dir)) return FALSE;
1091 #ifdef JP
1092 else msg_print("¥¢¥¤¥¹¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
1093 #else
1094                         else msg_print("You cast a frost ball.");
1095 #endif
1096                 damage = randint1(plev * 3) + 10;
1097                 fire_ball(GF_COLD, dir, damage, 2);
1098                 break;
1099         case MS_BALL_POIS:
1100                 if (!get_aim_dir(&dir)) return FALSE;
1101 #ifdef JP
1102 else msg_print("°­½­±À¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
1103 #else
1104                         else msg_print("You cast a stinking cloud.");
1105 #endif
1106                 damage = damroll(12,2);
1107                 fire_ball(GF_POIS, dir, damage, 2);
1108                 break;
1109         case MS_BALL_NETHER:
1110                 if (!get_aim_dir(&dir)) return FALSE;
1111 #ifdef JP
1112 else msg_print("ÃϹöµå¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
1113 #else
1114                         else msg_print("You cast a nether ball.");
1115 #endif
1116                 damage = plev * 2 + 50 + damroll(10, 10);
1117                 fire_ball(GF_NETHER, dir, damage, 2);
1118                 break;
1119         case MS_BALL_WATER:
1120                 if (!get_aim_dir(&dir)) return FALSE;
1121 #ifdef JP
1122 else msg_print("ή¤ì¤ë¤è¤¦¤Ê¿È¿¶¤ê¤ò¤·¤¿¡£");
1123 #else
1124                         else msg_print("You gesture fluidly.");
1125 #endif
1126                 damage = randint1(plev * 4) + 50;
1127                 fire_ball(GF_WATER, dir, damage, 4);
1128                 break;
1129         case MS_BALL_MANA:
1130                 if (!get_aim_dir(&dir)) return FALSE;
1131 #ifdef JP
1132 else msg_print("ËâÎϤÎÍò¤Î¼öʸ¤òÇ°¤¸¤¿¡£");
1133 #else
1134                         else msg_print("You invoke a mana storm.");
1135 #endif
1136                 damage = plev * 8 + 50 + damroll(10, 10);
1137                 fire_ball(GF_MANA, dir, damage, 4);
1138                 break;
1139         case MS_BALL_DARK:
1140                 if (!get_aim_dir(&dir)) return FALSE;
1141 #ifdef JP
1142 else msg_print("°Å¹õ¤ÎÍò¤Î¼öʸ¤òÇ°¤¸¤¿¡£");
1143 #else
1144                         else msg_print("You invoke a darkness storm.");
1145 #endif
1146                 damage = plev * 8 + 50 + damroll(10, 10);
1147                 fire_ball(GF_DARK, dir, damage, 4);
1148                 break;
1149         case MS_DRAIN_MANA:
1150                 if (!get_aim_dir(&dir)) return FALSE;
1151                 fire_ball_hide(GF_DRAIN_MANA, dir, randint1(plev)+plev, 0);
1152                 break;
1153         case MS_MIND_BLAST:
1154                 if (!get_aim_dir(&dir)) return FALSE;
1155                 damage = damroll(7, 7);
1156                 fire_ball_hide(GF_MIND_BLAST, dir, damage, 0);
1157                 break;
1158         case MS_BRAIN_SMASH:
1159                 if (!get_aim_dir(&dir)) return FALSE;
1160                 damage = damroll(12, 12);
1161                 fire_ball_hide(GF_BRAIN_SMASH, dir, damage, 0);
1162                 break;
1163         case MS_CAUSE_1:
1164                 if (!get_aim_dir(&dir)) return FALSE;
1165                 damage = damroll(3, 8);
1166                 fire_ball_hide(GF_CAUSE_1, dir, damage, 0);
1167                 break;
1168         case MS_CAUSE_2:
1169                 if (!get_aim_dir(&dir)) return FALSE;
1170                 damage = damroll(8, 8);
1171                 fire_ball_hide(GF_CAUSE_2, dir, damage, 0);
1172                 break;
1173         case MS_CAUSE_3:
1174                 if (!get_aim_dir(&dir)) return FALSE;
1175                 damage = damroll(10, 15);
1176                 fire_ball_hide(GF_CAUSE_3, dir, damage, 0);
1177                 break;
1178         case MS_CAUSE_4:
1179                 if (!get_aim_dir(&dir)) return FALSE;
1180                 damage = damroll(15, 15);
1181                 fire_ball_hide(GF_CAUSE_4, dir, damage, 0);
1182                 break;
1183         case MS_BOLT_ACID:
1184                 if (!get_aim_dir(&dir)) return FALSE;
1185 #ifdef JP
1186 else msg_print("¥¢¥·¥Ã¥É¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
1187 #else
1188                         else msg_print("You cast an acid bolt.");
1189 #endif
1190                 damage = damroll(7, 8) + plev * 2 / 3;
1191                 fire_bolt(GF_ACID, dir, damage);
1192                 break;
1193         case MS_BOLT_ELEC:
1194                 if (!get_aim_dir(&dir)) return FALSE;
1195 #ifdef JP
1196 else msg_print("¥µ¥ó¥À¡¼¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
1197 #else
1198                         else msg_print("You cast a lightning bolt.");
1199 #endif
1200                 damage = damroll(4, 8) + plev * 2 / 3;
1201                 fire_bolt(GF_ELEC, dir, damage);
1202                 break;
1203         case MS_BOLT_FIRE:
1204                 if (!get_aim_dir(&dir)) return FALSE;
1205 #ifdef JP
1206 else msg_print("¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
1207 #else
1208                         else msg_print("You cast a fire bolt.");
1209 #endif
1210                 damage = damroll(9, 8) + plev * 2 / 3;
1211                 fire_bolt(GF_FIRE, dir, damage);
1212                 break;
1213         case MS_BOLT_COLD:
1214                 if (!get_aim_dir(&dir)) return FALSE;
1215 #ifdef JP
1216 else msg_print("¥¢¥¤¥¹¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
1217 #else
1218                         else msg_print("You cast a frost bolt.");
1219 #endif
1220                 damage = damroll(6, 8) + plev * 2 / 3;
1221                 fire_bolt(GF_COLD, dir, damage);
1222                 break;
1223         case MS_STARBURST:
1224                 if (!get_aim_dir(&dir)) return FALSE;
1225                 else
1226 #ifdef JP
1227 msg_print("¥¹¥¿¡¼¥Ð¡¼¥¹¥È¤Î¼öʸ¤òÇ°¤¸¤¿¡£");
1228 #else
1229                         msg_print("You invoke a starburst.");
1230 #endif
1231                 damage = plev * 8 + 50 + damroll(10, 10);
1232                 fire_ball(GF_LITE, dir, damage, 4);
1233                 break;
1234         case MS_BOLT_NETHER:
1235                 if (!get_aim_dir(&dir)) return FALSE;
1236 #ifdef JP
1237 else msg_print("ÃϹö¤ÎÌð¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
1238 #else
1239                         else msg_print("You cast a nether bolt.");
1240 #endif
1241                 damage = 30 + damroll(5, 5) + plev * 8 / 3;
1242                 fire_bolt(GF_NETHER, dir, damage);
1243                 break;
1244         case MS_BOLT_WATER:
1245                 if (!get_aim_dir(&dir)) return FALSE;
1246 #ifdef JP
1247 else msg_print("¥¦¥©¡¼¥¿¡¼¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
1248 #else
1249                         else msg_print("You cast a water bolt.");
1250 #endif
1251                 damage = damroll(10, 10) + plev * 2;
1252                 fire_bolt(GF_WATER, dir, damage);
1253                 break;
1254         case MS_BOLT_MANA:
1255                 if (!get_aim_dir(&dir)) return FALSE;
1256 #ifdef JP
1257 else msg_print("ËâÎϤÎÌð¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
1258 #else
1259                         else msg_print("You cast a mana bolt.");
1260 #endif
1261                 damage = randint1(plev * 7) + 50;
1262                 fire_bolt(GF_MANA, dir, damage);
1263                 break;
1264         case MS_BOLT_PLASMA:
1265                 if (!get_aim_dir(&dir)) return FALSE;
1266 #ifdef JP
1267 else msg_print("¥×¥é¥º¥Þ¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
1268 #else
1269                         else msg_print("You cast a plasma bolt.");
1270 #endif
1271                 damage = 10 + damroll(8, 7) + plev * 2;
1272                 fire_bolt(GF_PLASMA, dir, damage);
1273                 break;
1274         case MS_BOLT_ICE:
1275                 if (!get_aim_dir(&dir)) return FALSE;
1276 #ifdef JP
1277 else msg_print("¶Ë´¨¤ÎÌð¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
1278 #else
1279                         else msg_print("You cast a ice bolt.");
1280 #endif
1281                 damage = damroll(6, 6) + plev * 2;
1282                 fire_bolt(GF_ICE, dir, damage);
1283                 break;
1284         case MS_MAGIC_MISSILE:
1285                 if (!get_aim_dir(&dir)) return FALSE;
1286 #ifdef JP
1287 else msg_print("¥Þ¥¸¥Ã¥¯¡¦¥ß¥µ¥¤¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
1288 #else
1289                         else msg_print("You cast a magic missile.");
1290 #endif
1291                 damage = damroll(2, 6) + plev * 2 / 3;
1292                 fire_bolt(GF_MISSILE, dir, damage);
1293                 break;
1294         case MS_SCARE:
1295                 if (!get_aim_dir(&dir)) return FALSE;
1296 #ifdef JP
1297 else msg_print("¶²¤í¤·¤²¤Ê¸¸³Ð¤òºî¤ê½Ð¤·¤¿¡£");
1298 #else
1299                         else msg_print("You cast a fearful illusion.");
1300 #endif
1301                 fear_monster(dir, plev+10);
1302                 break;
1303         case MS_BLIND:
1304                 if (!get_aim_dir(&dir)) return FALSE;
1305                 confuse_monster(dir, plev * 2);
1306                 break;
1307         case MS_CONF:
1308                 if (!get_aim_dir(&dir)) return FALSE;
1309 #ifdef JP
1310 else msg_print("ͶÏÇŪ¤Ê¸¸³Ð¤ò¤Ä¤¯¤ê½Ð¤·¤¿¡£");
1311 #else
1312                         else msg_print("You cast a mesmerizing illusion.");
1313 #endif
1314                 confuse_monster(dir, plev * 2);
1315                 break;
1316         case MS_SLOW:
1317                 if (!get_aim_dir(&dir)) return FALSE;
1318                 slow_monster(dir);
1319                 break;
1320         case MS_SLEEP:
1321                 if (!get_aim_dir(&dir)) return FALSE;
1322                 sleep_monster(dir);
1323                 break;
1324         case MS_SPEED:
1325                 (void)set_fast(randint1(20 + plev) + plev, FALSE);
1326                 break;
1327         case MS_HAND_DOOM:
1328         {
1329                 if (!get_aim_dir(&dir)) return FALSE;
1330 #ifdef JP
1331 else msg_print("<ÇËÌǤμê>¤òÊü¤Ã¤¿¡ª");
1332 #else
1333                 else msg_print("You invoke the Hand of Doom!");
1334 #endif
1335
1336                 fire_ball_hide(GF_HAND_DOOM, dir, plev * 3, 0);
1337                 break;
1338         }
1339         case MS_HEAL:
1340 #ifdef JP
1341 msg_print("¼«Ê¬¤Î½ý¤ËÇ°¤ò½¸Ã椷¤¿¡£");
1342 #else
1343                         msg_print("You concentrate on your wounds!");
1344 #endif
1345                 (void)hp_player(plev*4);
1346                 (void)set_stun(0);
1347                 (void)set_cut(0);
1348                 break;
1349         case MS_INVULNER:
1350 #ifdef JP
1351 msg_print("̵½ý¤Îµå¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
1352 #else
1353                         msg_print("You cast a Globe of Invulnerability.");
1354 #endif
1355                 (void)set_invuln(randint1(4) + 4, FALSE);
1356                 break;
1357         case MS_BLINK:
1358                 teleport_player(10, FALSE);
1359                 break;
1360         case MS_TELEPORT:
1361                 teleport_player(plev * 5, FALSE);
1362                 break;
1363         case MS_WORLD:
1364                 world_player = TRUE;
1365 #ifdef JP
1366                 msg_print("¡Ö»þ¤è¡ª¡×");
1367 #else
1368                 msg_print("'Time!'");
1369 #endif
1370                 msg_print(NULL);
1371
1372                 /* Hack */
1373                 p_ptr->energy_need -= 1000 + (100 + randint1(200)+200)*TURNS_PER_TICK/10;
1374
1375                 /* Redraw map */
1376                 p_ptr->redraw |= (PR_MAP);
1377
1378                 /* Update monsters */
1379                 p_ptr->update |= (PU_MONSTERS);
1380
1381                 /* Window stuff */
1382                 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
1383
1384                 handle_stuff();
1385                 break;
1386         case MS_SPECIAL:
1387                 break;
1388         case MS_TELE_TO:
1389         {
1390                 monster_type *m_ptr;
1391                 monster_race *r_ptr;
1392                 char m_name[80];
1393
1394                 if (!target_set(TARGET_KILL)) return FALSE;
1395                 if (!cave[target_row][target_col].m_idx) break;
1396                 if (!player_has_los_bold(target_row, target_col)) break;
1397                 if (!projectable(py, px, target_row, target_col)) break;
1398                 m_ptr = &m_list[cave[target_row][target_col].m_idx];
1399                 r_ptr = &r_info[m_ptr->r_idx];
1400                 monster_desc(m_name, m_ptr, 0);
1401                 if (r_ptr->flagsr & RFR_RES_TELE)
1402                 {
1403                         if ((r_ptr->flags1 & (RF1_UNIQUE)) || (r_ptr->flagsr & RFR_RES_ALL))
1404                         {
1405                                 if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE;
1406 #ifdef JP
1407                                 msg_format("%s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª", m_name);
1408 #else
1409                                 msg_format("%s is unaffected!", m_name);
1410 #endif
1411
1412                                 break;
1413                         }
1414                         else if (r_ptr->level > randint1(100))
1415                         {
1416                                 if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE;
1417 #ifdef JP
1418                                 msg_format("%s¤Ë¤ÏÂÑÀ­¤¬¤¢¤ë¡ª", m_name);
1419 #else
1420                                 msg_format("%s resists!", m_name);
1421 #endif
1422
1423                                 break;
1424                         }
1425                 }
1426 #ifdef JP
1427 msg_format("%s¤ò°ú¤­Ìᤷ¤¿¡£", m_name);
1428 #else
1429                 msg_format("You command %s to return.", m_name);
1430 #endif
1431
1432                 teleport_monster_to(cave[target_row][target_col].m_idx, py, px, 100, TRUE);
1433                 break;
1434         }
1435         case MS_TELE_AWAY:
1436                 if (!get_aim_dir(&dir)) return FALSE;
1437
1438                 (void)fire_beam(GF_AWAY_ALL, dir, 100);
1439                 break;
1440         case MS_TELE_LEVEL:
1441         {
1442                 int target_m_idx;
1443                 monster_type *m_ptr;
1444                 monster_race *r_ptr;
1445                 char m_name[80];
1446
1447                 if (!target_set(TARGET_KILL)) return FALSE;
1448                 target_m_idx = cave[target_row][target_col].m_idx;
1449                 if (!target_m_idx) break;
1450                 if (!player_has_los_bold(target_row, target_col)) break;
1451                 if (!projectable(py, px, target_row, target_col)) break;
1452                 m_ptr = &m_list[target_m_idx];
1453                 r_ptr = &r_info[m_ptr->r_idx];
1454                 monster_desc(m_name, m_ptr, 0);
1455 #ifdef JP
1456                 msg_format("%^s¤Î­¤ò»Ø¤µ¤·¤¿¡£", m_name);
1457 #else
1458                 msg_format("You gesture at %^s's feet.", m_name);
1459 #endif
1460
1461                 if ((r_ptr->flagsr & (RFR_EFF_RES_NEXU_MASK | RFR_RES_TELE)) ||
1462                         (r_ptr->flags1 & RF1_QUESTOR) || (r_ptr->level + randint1(50) > plev + randint1(60)))
1463                 {
1464 #ifdef JP
1465                         msg_print("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª");
1466 #else
1467                         msg_format("%^s is unaffected!", m_name);
1468 #endif
1469                 }
1470                 else teleport_level(target_m_idx);
1471                 break;
1472         }
1473         case MS_PSY_SPEAR:
1474                 if (!get_aim_dir(&dir)) return FALSE;
1475
1476 #ifdef JP
1477 else msg_print("¸÷¤Î·õ¤òÊü¤Ã¤¿¡£");
1478 #else
1479                         else msg_print("You throw a psycho-spear.");
1480 #endif
1481                 damage = randint1(plev * 3) + 100;
1482                 (void)fire_beam(GF_PSY_SPEAR, dir, damage);
1483                 break;
1484         case MS_DARKNESS:
1485 #ifdef JP
1486 msg_print("°Å°Ç¤ÎÃæ¤Ç¼ê¤ò¿¶¤Ã¤¿¡£");
1487 #else
1488                         msg_print("You gesture in shadow.");
1489 #endif
1490                 (void)unlite_area(10, 3);
1491                 break;
1492         case MS_MAKE_TRAP:
1493                 if (!target_set(TARGET_KILL)) return FALSE;
1494 #ifdef JP
1495 msg_print("¼öʸ¤ò¾§¤¨¤Æ¼Ù°­¤ËÈù¾Ð¤ó¤À¡£");
1496 #else
1497                         msg_print("You cast a spell and cackle evilly.");
1498 #endif
1499                 trap_creation(target_row, target_col);
1500                 break;
1501         case MS_FORGET:
1502 #ifdef JP
1503 msg_print("¤·¤«¤·²¿¤âµ¯¤­¤Ê¤«¤Ã¤¿¡£");
1504 #else
1505                         msg_print("Nothing happen.");
1506 #endif
1507                 break;
1508         case MS_RAISE_DEAD:
1509 #ifdef JP
1510 msg_print("»à¼ÔÉü³è¤Î¼öʸ¤ò¾§¤¨¤¿¡£");
1511 #else
1512                 msg_print("You cast a animate dead.");
1513 #endif
1514                 (void)animate_dead(0, py, px);
1515                 break;
1516         case MS_S_KIN:
1517         {
1518                 int k;
1519 #ifdef JP
1520 msg_print("±ç·³¤ò¾¤´­¤·¤¿¡£");
1521 #else
1522                         msg_print("You summon minions.");
1523 #endif
1524                 for (k = 0;k < 1; k++)
1525                 {
1526                         if (summon_kin_player(summon_lev, py, px, (pet ? PM_FORCE_PET : 0L)))
1527                         {
1528                                 if (!pet)
1529 #ifdef JP
1530 msg_print("¾¤´­¤µ¤ì¤¿Ãç´Ö¤ÏÅܤäƤ¤¤ë¡ª");
1531 #else
1532 msg_print("Summoned fellows are angry!");
1533 #endif
1534                         }
1535                         else
1536                         {
1537                                 no_trump = TRUE;
1538                         }
1539                 }
1540                 break;
1541         }
1542         case MS_S_CYBER:
1543         {
1544                 int k;
1545 #ifdef JP
1546 msg_print("¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤ò¾¤´­¤·¤¿¡ª");
1547 #else
1548                         msg_print("You summon a Cyberdemon!");
1549 #endif
1550                 for (k = 0 ;k < 1 ; k++)
1551                         if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_CYBER, p_mode))
1552                         {
1553                                 if (!pet)
1554 #ifdef JP
1555 msg_print("¾¤´­¤µ¤ì¤¿¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤ÏÅܤäƤ¤¤ë¡ª");
1556 #else
1557 msg_print("The summoned Cyberdemon are angry!");
1558 #endif
1559                         }
1560                         else
1561                         {
1562                                 no_trump = TRUE;
1563                         }
1564                 break;
1565         }
1566         case MS_S_MONSTER:
1567         {
1568                 int k;
1569 #ifdef JP
1570 msg_print("Ãç´Ö¤ò¾¤´­¤·¤¿¡£");
1571 #else
1572                         msg_print("You summon help.");
1573 #endif
1574                 for (k = 0;k < 1; k++)
1575                         if (summon_specific((pet ? -1 : 0), py, px, summon_lev, 0, p_mode))
1576                         {
1577                                 if (!pet)
1578 #ifdef JP
1579 msg_print("¾¤´­¤µ¤ì¤¿¥â¥ó¥¹¥¿¡¼¤ÏÅܤäƤ¤¤ë¡ª");
1580 #else
1581 msg_print("The summoned monster is angry!");
1582 #endif
1583                         }
1584                         else
1585                         {
1586                                 no_trump = TRUE;
1587                         }
1588                 break;
1589         }
1590         case MS_S_MONSTERS:
1591         {
1592                 int k;
1593 #ifdef JP
1594 msg_print("¥â¥ó¥¹¥¿¡¼¤ò¾¤´­¤·¤¿¡ª");
1595 #else
1596                         msg_print("You summon monsters!");
1597 #endif
1598                 for (k = 0;k < plev / 15 + 2; k++)
1599                         if(summon_specific((pet ? -1 : 0), py, px, summon_lev, 0, (p_mode | u_mode)))
1600                         {
1601                                 if (!pet)
1602 #ifdef JP
1603 msg_print("¾¤´­¤µ¤ì¤¿¥â¥ó¥¹¥¿¡¼¤ÏÅܤäƤ¤¤ë¡ª");
1604 #else
1605 msg_print("Summoned monsters are angry!");
1606 #endif
1607                         }
1608                         else
1609                         {
1610                                 no_trump = TRUE;
1611                         }
1612                 break;
1613         }
1614         case MS_S_ANT:
1615         {
1616                 int k;
1617 #ifdef JP
1618 msg_print("¥¢¥ê¤ò¾¤´­¤·¤¿¡£");
1619 #else
1620                         msg_print("You summon ants.");
1621 #endif
1622                 for (k = 0;k < 1; k++)
1623                         if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_ANT, (PM_ALLOW_GROUP | p_mode)))
1624                         {
1625                                 if (!pet)
1626 #ifdef JP
1627 msg_print("¾¤´­¤µ¤ì¤¿¥¢¥ê¤ÏÅܤäƤ¤¤ë¡ª");
1628 #else
1629 msg_print("Summoned ants are angry!");
1630 #endif
1631                         }
1632                         else
1633                         {
1634                                 no_trump = TRUE;
1635                         }
1636                 break;
1637         }
1638         case MS_S_SPIDER:
1639         {
1640                 int k;
1641 #ifdef JP
1642 msg_print("ÃØéá¤ò¾¤´­¤·¤¿¡£");
1643 #else
1644                         msg_print("You summon spiders.");
1645 #endif
1646                 for (k = 0;k < 1; k++)
1647                         if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_SPIDER, (PM_ALLOW_GROUP | p_mode)))
1648                         {
1649                                 if (!pet)
1650 #ifdef JP
1651 msg_print("¾¤´­¤µ¤ì¤¿ÃØéá¤ÏÅܤäƤ¤¤ë¡ª");
1652 #else
1653 msg_print("Summoned spiders are angry!");
1654 #endif
1655                         }
1656                         else
1657                         {
1658                                 no_trump = TRUE;
1659                         }
1660                 break;
1661         }
1662         case MS_S_HOUND:
1663         {
1664                 int k;
1665 #ifdef JP
1666 msg_print("¥Ï¥¦¥ó¥É¤ò¾¤´­¤·¤¿¡£");
1667 #else
1668                         msg_print("You summon hounds.");
1669 #endif
1670                 for (k = 0;k < 1; k++)
1671                         if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HOUND, (PM_ALLOW_GROUP | p_mode)))
1672                         {
1673                                 if (!pet)
1674 #ifdef JP
1675 msg_print("¾¤´­¤µ¤ì¤¿¥Ï¥¦¥ó¥É¤ÏÅܤäƤ¤¤ë¡ª");
1676 #else
1677 msg_print("Summoned hounds are angry!");
1678 #endif
1679                         }
1680                         else
1681                         {
1682                                 no_trump = TRUE;
1683                         }
1684                 break;
1685         }
1686         case MS_S_HYDRA:
1687         {
1688                 int k;
1689 #ifdef JP
1690 msg_print("¥Ò¥É¥é¤ò¾¤´­¤·¤¿¡£");
1691 #else
1692                         msg_print("You summon a hydras.");
1693 #endif
1694                 for (k = 0;k < 1; k++)
1695                         if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HYDRA, (g_mode | p_mode)))
1696                         {
1697                                 if (!pet)
1698 #ifdef JP
1699 msg_print("¾¤´­¤µ¤ì¤¿¥Ò¥É¥é¤ÏÅܤäƤ¤¤ë¡ª");
1700 #else
1701 msg_print("Summoned hydras are angry!");
1702 #endif
1703                         }
1704                         else
1705                         {
1706                                 no_trump = TRUE;
1707                         }
1708                 break;
1709         }
1710         case MS_S_ANGEL:
1711         {
1712                 int k;
1713 #ifdef JP
1714 msg_print("Å·»È¤ò¾¤´­¤·¤¿¡ª");
1715 #else
1716                         msg_print("You summon an angel!");
1717 #endif
1718                 for (k = 0;k < 1; k++)
1719                         if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_ANGEL, (g_mode | p_mode)))
1720                         {
1721                                 if (!pet)
1722 #ifdef JP
1723 msg_print("¾¤´­¤µ¤ì¤¿Å·»È¤ÏÅܤäƤ¤¤ë¡ª");
1724 #else
1725 msg_print("Summoned angels are angry!");
1726 #endif
1727                         }
1728                         else
1729                         {
1730                                 no_trump = TRUE;
1731                         }
1732                 break;
1733         }
1734         case MS_S_DEMON:
1735         {
1736                 int k;
1737 #ifdef JP
1738 msg_print("º®Æ٤εÜÄ¤é°­Ëâ¤ò¾¤´­¤·¤¿¡ª");
1739 #else
1740                         msg_print("You summon a demon from the Courts of Chaos!");
1741 #endif
1742                 for (k = 0;k < 1; k++)
1743                         if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_DEMON, (g_mode | p_mode)))
1744                         {
1745                                 if (!pet)
1746 #ifdef JP
1747 msg_print("¾¤´­¤µ¤ì¤¿¥Ç¡¼¥â¥ó¤ÏÅܤäƤ¤¤ë¡ª");
1748 #else
1749 msg_print("Summoned demons are angry!");
1750 #endif
1751                         }
1752                         else
1753                         {
1754                                 no_trump = TRUE;
1755                         }
1756                 break;
1757         }
1758         case MS_S_UNDEAD:
1759         {
1760                 int k;
1761 #ifdef JP
1762 msg_print("¥¢¥ó¥Ç¥Ã¥É¤Î¶¯Å¨¤ò¾¤´­¤·¤¿¡ª");
1763 #else
1764                         msg_print("You summon an undead adversary!");
1765 #endif
1766                 for (k = 0;k < 1; k++)
1767                         if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_UNDEAD, (g_mode | p_mode)))
1768                         {
1769                                 if (!pet)
1770 #ifdef JP
1771 msg_print("¾¤´­¤µ¤ì¤¿¥¢¥ó¥Ç¥Ã¥É¤ÏÅܤäƤ¤¤ë¡ª");
1772 #else
1773 msg_print("Summoned undeads are angry!");
1774 #endif
1775                         }
1776                         else
1777                         {
1778                                 no_trump = TRUE;
1779                         }
1780                 break;
1781         }
1782         case MS_S_DRAGON:
1783         {
1784                 int k;
1785 #ifdef JP
1786 msg_print("¥É¥é¥´¥ó¤ò¾¤´­¤·¤¿¡ª");
1787 #else
1788                         msg_print("You summon a dragon!");
1789 #endif
1790                 for (k = 0;k < 1; k++)
1791                         if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_DRAGON, (g_mode | p_mode)))
1792                         {
1793                                 if (!pet)
1794 #ifdef JP
1795 msg_print("¾¤´­¤µ¤ì¤¿¥É¥é¥´¥ó¤ÏÅܤäƤ¤¤ë¡ª");
1796 #else
1797 msg_print("Summoned dragons are angry!");
1798 #endif
1799                         }
1800                         else
1801                         {
1802                                 no_trump = TRUE;
1803                         }
1804                 break;
1805         }
1806         case MS_S_HI_UNDEAD:
1807         {
1808                 int k;
1809 #ifdef JP
1810 msg_print("¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤·¤¿¡ª");
1811 #else
1812                         msg_print("You summon a greater undead!");
1813 #endif
1814                 for (k = 0;k < 1; k++)
1815                         if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HI_UNDEAD, (g_mode | p_mode | u_mode)))
1816                         {
1817                                 if (!pet)
1818 #ifdef JP
1819 msg_print("¾¤´­¤µ¤ì¤¿¾åµé¥¢¥ó¥Ç¥Ã¥É¤ÏÅܤäƤ¤¤ë¡ª");
1820 #else
1821 msg_print("Summoned greater undeads are angry!");
1822 #endif
1823                         }
1824                         else
1825                         {
1826                                 no_trump = TRUE;
1827                         }
1828                 break;
1829         }
1830         case MS_S_HI_DRAGON:
1831         {
1832                 int k;
1833 #ifdef JP
1834 msg_print("¸ÅÂå¥É¥é¥´¥ó¤ò¾¤´­¤·¤¿¡ª");
1835 #else
1836                         msg_print("You summon an ancient dragon!");
1837 #endif
1838                 for (k = 0;k < 1; k++)
1839                         if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HI_DRAGON, (g_mode | p_mode | u_mode)))
1840                         {
1841                                 if (!pet)
1842 #ifdef JP
1843 msg_print("¾¤´­¤µ¤ì¤¿¸ÅÂå¥É¥é¥´¥ó¤ÏÅܤäƤ¤¤ë¡ª");
1844 #else
1845 msg_print("Summoned ancient dragons are angry!");
1846 #endif
1847                         }
1848                         else
1849                         {
1850                                 no_trump = TRUE;
1851                         }
1852                 break;
1853         }
1854         case MS_S_AMBERITE:
1855         {
1856                 int k;
1857 #ifdef JP
1858 msg_print("¥¢¥ó¥Ð¡¼¤Î²¦Â²¤ò¾¤´­¤·¤¿¡ª");
1859 #else
1860                         msg_print("You summon a Lord of Amber!");
1861 #endif
1862                 for (k = 0;k < 1; k++)
1863                         if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_AMBERITES, (g_mode | p_mode | u_mode)))
1864                         {
1865                                 if (!pet)
1866 #ifdef JP
1867 msg_print("¾¤´­¤µ¤ì¤¿¥¢¥ó¥Ð¡¼¤Î²¦Â²¤ÏÅܤäƤ¤¤ë¡ª");
1868 #else
1869 msg_print("Summoned Lords of Amber are angry!");
1870 #endif
1871                         }
1872                         else
1873                         {
1874                                 no_trump = TRUE;
1875                         }
1876                 break;
1877         }
1878         case MS_S_UNIQUE:
1879         {
1880                 int k, count = 0;
1881 #ifdef JP
1882 msg_print("ÆÃÊ̤ʶ¯Å¨¤ò¾¤´­¤·¤¿¡ª");
1883 #else
1884                         msg_print("You summon a special opponent!");
1885 #endif
1886                 for (k = 0;k < 1; k++)
1887                         if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_UNIQUE, (g_mode | p_mode | PM_ALLOW_UNIQUE)))
1888                         {
1889                                 count++;
1890                                 if (!pet)
1891 #ifdef JP
1892 msg_print("¾¤´­¤µ¤ì¤¿¥æ¥Ë¡¼¥¯¡¦¥â¥ó¥¹¥¿¡¼¤ÏÅܤäƤ¤¤ë¡ª");
1893 #else
1894 msg_print("Summoned special opponents are angry!");
1895 #endif
1896                         }
1897                 for (k = count;k < 1; k++)
1898                         if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HI_UNDEAD, (g_mode | p_mode | PM_ALLOW_UNIQUE)))
1899                         {
1900                                 count++;
1901                                 if (!pet)
1902 #ifdef JP
1903 msg_print("¾¤´­¤µ¤ì¤¿¾åµé¥¢¥ó¥Ç¥Ã¥É¤ÏÅܤäƤ¤¤ë¡ª");
1904 #else
1905 msg_print("Summoned greater undeads are angry!");
1906 #endif
1907                         }
1908                 if (!count)
1909                 {
1910                         no_trump = TRUE;
1911                 }
1912                 break;
1913         }
1914         default:
1915                 msg_print("hoge?");
1916         }
1917         if (no_trump)
1918         {
1919 #ifdef JP
1920 msg_print("²¿¤â¸½¤ì¤Ê¤«¤Ã¤¿¡£");
1921 #else
1922 msg_print("No one have appeared.");
1923 #endif
1924         }
1925
1926         return TRUE;
1927 }
1928
1929
1930 /*
1931  * do_cmd_cast calls this function if the player's class
1932  * is 'Blue-Mage'.
1933  */
1934 bool do_cmd_cast_learned(void)
1935 {
1936         int             n = 0;
1937         int             chance;
1938         int             minfail = 0;
1939         int             plev = p_ptr->lev;
1940         monster_power   spell;
1941         bool            cast;
1942         int             need_mana;
1943
1944
1945         /* not if confused */
1946         if (p_ptr->confused)
1947         {
1948 #ifdef JP
1949 msg_print("º®Í𤷤Ƥ¤¤Æ¾§¤¨¤é¤ì¤Ê¤¤¡ª");
1950 #else
1951                 msg_print("You are too confused!");
1952 #endif
1953
1954                 return TRUE;
1955         }
1956
1957         /* get power */
1958         if (!get_learned_power(&n)) return FALSE;
1959
1960         spell = monster_powers[n];
1961
1962         need_mana = mod_need_mana(spell.smana, 0, REALM_NONE);
1963
1964         /* Verify "dangerous" spells */
1965         if (need_mana > p_ptr->csp)
1966         {
1967                 /* Warning */
1968 #ifdef JP
1969 msg_print("£Í£Ð¤¬Â­¤ê¤Þ¤»¤ó¡£");
1970 #else
1971                 msg_print("You do not have enough mana to use this power.");
1972 #endif
1973
1974
1975                 if (!over_exert) return FALSE;
1976
1977                 /* Verify */
1978 #ifdef JP
1979 if (!get_check("¤½¤ì¤Ç¤âÄ©À路¤Þ¤¹¤«? ")) return FALSE;
1980 #else
1981                 if (!get_check("Attempt it anyway? ")) return FALSE;
1982 #endif
1983
1984         }
1985
1986         /* Spell failure chance */
1987         chance = spell.fail;
1988
1989         /* Reduce failure rate by "effective" level adjustment */
1990         if (plev > spell.level) chance -= 3 * (plev - spell.level);
1991         else chance += (spell.level - plev);
1992
1993         /* Reduce failure rate by INT/WIS adjustment */
1994         chance -= 3 * (adj_mag_stat[p_ptr->stat_ind[A_INT]] - 1);
1995
1996         chance = mod_spell_chance_1(chance);
1997
1998         /* Not enough mana to cast */
1999         if (need_mana > p_ptr->csp)
2000         {
2001                 chance += 5 * (need_mana - p_ptr->csp);
2002         }
2003
2004         /* Extract the minimum failure rate */
2005         minfail = adj_mag_fail[p_ptr->stat_ind[A_INT]];
2006
2007         /* Minimum failure rate */
2008         if (chance < minfail) chance = minfail;
2009
2010         /* Stunning makes spells harder */
2011         if (p_ptr->stun > 50) chance += 25;
2012         else if (p_ptr->stun) chance += 15;
2013
2014         /* Always a 5 percent chance of working */
2015         if (chance > 95) chance = 95;
2016
2017         chance = mod_spell_chance_2(chance);
2018
2019         /* Failed spell */
2020         if (randint0(100) < chance)
2021         {
2022                 if (flush_failure) flush();
2023 #ifdef JP
2024 msg_print("ËâË¡¤ò¤¦¤Þ¤¯¾§¤¨¤é¤ì¤Ê¤«¤Ã¤¿¡£");
2025 #else
2026                 msg_print("You failed to concentrate hard enough!");
2027 #endif
2028
2029                 sound(SOUND_FAIL);
2030
2031                 if (n >= MS_S_KIN)
2032                         /* Cast the spell */
2033                         cast = cast_learned_spell(n, FALSE);
2034         }
2035         else
2036         {
2037                 sound(SOUND_ZAP);
2038
2039                 /* Cast the spell */
2040                 cast = cast_learned_spell(n, TRUE);
2041
2042                 if (!cast) return FALSE;
2043         }
2044
2045         /* Sufficient mana */
2046         if (need_mana <= p_ptr->csp)
2047         {
2048                 /* Use some mana */
2049                 p_ptr->csp -= need_mana;
2050         }
2051         else
2052         {
2053                 int oops = need_mana;
2054
2055                 /* No mana left */
2056                 p_ptr->csp = 0;
2057                 p_ptr->csp_frac = 0;
2058
2059                 /* Message */
2060 #ifdef JP
2061 msg_print("Àº¿À¤ò½¸Ã椷¤¹¤®¤Æµ¤¤ò¼º¤Ã¤Æ¤·¤Þ¤Ã¤¿¡ª");
2062 #else
2063                 msg_print("You faint from the effort!");
2064 #endif
2065
2066
2067                 /* Hack -- Bypass free action */
2068                 (void)set_paralyzed(p_ptr->paralyzed + randint1(5 * oops + 1));
2069
2070                 chg_virtue(V_KNOWLEDGE, -10);
2071
2072                 /* Damage CON (possibly permanently) */
2073                 if (randint0(100) < 50)
2074                 {
2075                         bool perm = (randint0(100) < 25);
2076
2077                         /* Message */
2078 #ifdef JP
2079 msg_print("ÂΤò°­¤¯¤·¤Æ¤·¤Þ¤Ã¤¿¡ª");
2080 #else
2081                         msg_print("You have damaged your health!");
2082 #endif
2083
2084
2085                         /* Reduce constitution */
2086                         (void)dec_stat(A_CON, 15 + randint1(10), perm);
2087                 }
2088         }
2089
2090         /* Take a turn */
2091         energy_use = 100;
2092
2093         /* Window stuff */
2094         p_ptr->redraw |= (PR_MANA);
2095         p_ptr->window |= (PW_PLAYER);
2096         p_ptr->window |= (PW_SPELL);
2097
2098         return TRUE;
2099 }
2100
2101 void learn_spell(int monspell)
2102 {
2103         if (p_ptr->action != ACTION_LEARN) return;
2104         if (monspell < 0) return; /* Paranoia */
2105         if (p_ptr->magic_num2[monspell]) return;
2106         if (p_ptr->confused || p_ptr->blind || p_ptr->image || p_ptr->stun || p_ptr->paralyzed) return;
2107         if (randint1(p_ptr->lev + 70) > monster_powers[monspell].level + 40)
2108         {
2109                 p_ptr->magic_num2[monspell] = 1;
2110 #ifdef JP
2111                 msg_format("%s¤ò³Ø½¬¤·¤¿¡ª", monster_powers[monspell].name);
2112 #else
2113                 msg_format("You have learned %s!", monster_powers[monspell].name);
2114 #endif
2115                 gain_exp(monster_powers[monspell].level * monster_powers[monspell].smana);
2116
2117                 /* Sound */
2118                 sound(SOUND_STUDY);
2119
2120                 new_mane = TRUE;
2121                 p_ptr->redraw |= (PR_STATE);
2122         }
2123 }
2124
2125
2126 /*
2127  * Extract monster spells mask for the given mode
2128  */
2129 void set_rf_masks(s32b *f4, s32b *f5, s32b *f6, int mode)
2130 {
2131         switch (mode)
2132         {
2133                 case MONSPELL_TYPE_BOLT:
2134                         *f4 = ((RF4_BOLT_MASK | RF4_BEAM_MASK) & ~(RF4_ROCKET));
2135                         *f5 = RF5_BOLT_MASK | RF5_BEAM_MASK;
2136                         *f6 = RF6_BOLT_MASK | RF6_BEAM_MASK;
2137                         break;
2138
2139                 case MONSPELL_TYPE_BALL:
2140                         *f4 = (RF4_BALL_MASK & ~(RF4_BREATH_MASK));
2141                         *f5 = (RF5_BALL_MASK & ~(RF5_BREATH_MASK));
2142                         *f6 = (RF6_BALL_MASK & ~(RF6_BREATH_MASK));
2143                         break;
2144
2145                 case MONSPELL_TYPE_BREATH:
2146                         *f4 = RF4_BREATH_MASK;
2147                         *f5 = RF5_BREATH_MASK;
2148                         *f6 = RF6_BREATH_MASK;
2149                         break;
2150
2151                 case MONSPELL_TYPE_SUMMON:
2152                         *f4 = RF4_SUMMON_MASK;
2153                         *f5 = RF5_SUMMON_MASK;
2154                         *f6 = RF6_SUMMON_MASK;
2155                         break;
2156
2157                 case MONSPELL_TYPE_OTHER:
2158                         *f4 = RF4_ATTACK_MASK & ~(RF4_BOLT_MASK | RF4_BEAM_MASK | RF4_BALL_MASK | RF4_INDIRECT_MASK);
2159                         *f5 = RF5_ATTACK_MASK & ~(RF5_BOLT_MASK | RF5_BEAM_MASK | RF5_BALL_MASK | RF5_INDIRECT_MASK);
2160                         *f6 = RF6_ATTACK_MASK & ~(RF6_BOLT_MASK | RF6_BEAM_MASK | RF6_BALL_MASK | RF6_INDIRECT_MASK);
2161                         break;
2162         }
2163
2164         return;
2165 }