3 /* Purpose: Spell/Prayer commands */
6 * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke
8 * This software may be copied and distributed for educational, research, and
9 * not for profit purposes provided that this copyright and statement are
10 * included in all such copies.
15 #include "spellstips.h"
17 cptr spell_categoly_name(int tval)
22 case TV_HISSATSU_BOOK:
31 case TV_HISSATSU_BOOK:
44 * Allow user to choose a spell/prayer from the given book.
46 * If a valid spell is chosen, saves it in '*sn' and returns TRUE
47 * If the user hits escape, returns FALSE, and set '*sn' to -1
48 * If there are no legal choices, returns FALSE, and sets '*sn' to -2
50 * The "prompt" should be "cast", "recite", or "study"
51 * The "known" should be TRUE for cast/pray, FALSE for study
54 bool select_spellbook=FALSE;
55 bool select_the_force=FALSE;
57 static int get_spell(int *sn, cptr prompt, int sval, bool learned, int use_realm)
65 bool flag, redraw, okay;
73 int menu_line = (use_menu ? 1 : 0);
75 #ifdef ALLOW_REPEAT /* TNB */
77 /* Get the spell, if available */
80 /* Verify the spell */
81 if (spell_okay(*sn, learned, FALSE, use_realm - 1))
88 #endif /* ALLOW_REPEAT -- TNB */
90 p = spell_categoly_name(mp_ptr->spell_book);
93 for (spell = 0; spell < 32; spell++)
95 /* Check for this spell */
96 if ((fake_spell_flags[sval] & (1L << spell)))
98 /* Collect this spell */
99 spells[num++] = spell;
103 /* Assume no usable spells */
106 /* Assume no spells available */
109 /* Check for "okay" spells */
110 for (i = 0; i < num; i++)
112 /* Look for "okay" spells */
113 if (spell_okay(spells[i], learned, FALSE, use_realm - 1)) okay = TRUE;
116 /* No "okay" spells */
117 if (!okay) return (FALSE);
118 if (((use_realm) != p_ptr->realm1) && ((use_realm) != p_ptr->realm2) && (p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE)) return FALSE;
119 if (((p_ptr->pclass == CLASS_SORCERER) || (p_ptr->pclass == CLASS_RED_MAGE)) && !is_magic(use_realm)) return FALSE;
120 if ((p_ptr->pclass == CLASS_RED_MAGE) && ((use_realm) != REALM_ARCANE) && (sval > 1)) return FALSE;
122 /* Assume cancelled */
125 /* Nothing chosen yet */
135 p_ptr->window |= (PW_SPELL);
141 /* Build a prompt (accept all spells) */
143 jverb1( prompt, jverb_buf );
144 (void) strnfmt(out_val, 78, "(%^s:%c-%c, '*'¤Ç°ìÍ÷, ESC¤ÇÃæÃÇ) ¤É¤Î%s¤ò%^s¤Þ¤¹¤«? ",
145 p, I2A(0), I2A(num - 1), p, jverb_buf );
147 (void)strnfmt(out_val, 78, "(%^ss %c-%c, *=List, ESC=exit) %^s which %s? ",
148 p, I2A(0), I2A(num - 1), prompt, p);
151 /* Get a spell from the user */
153 choice = (always_show_list || use_menu) ? ESCAPE:1;
156 if( choice==ESCAPE ) choice = ' ';
157 else if( !get_com(out_val, &choice, TRUE) )break;
159 if (use_menu && choice != ' ')
174 menu_line += (num - 1);
196 if (menu_line > num) menu_line -= num;
197 /* Display a list of spells */
198 print_spells(menu_line, spells, num, 1, 15, use_realm - 1);
204 if ((choice == ' ') || (choice == '*') || (choice == '?'))
212 /* Save the screen */
215 /* Display a list of spells */
216 print_spells(menu_line, spells, num, 1, 15, use_realm - 1);
222 if (use_menu) continue;
227 /* Restore the screen */
237 ask = (isupper(choice));
240 if (ask) choice = tolower(choice);
242 /* Extract request */
243 i = (islower(choice) ? A2I(choice) : -1);
246 /* Totally Illegal */
247 if ((i < 0) || (i >= num))
253 /* Save the spell index */
256 /* Require "okay" spells */
257 if (!spell_okay(spell, learned, FALSE, use_realm - 1))
261 msg_format("¤½¤Î%s¤ò%s¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¡£", p, prompt);
263 msg_format("You may not %s that %s.", prompt, p);
274 /* Access the spell */
275 if (!is_magic(use_realm))
277 s_ptr = &technic_info[use_realm - MIN_TECHNIC - 1][spell];
281 s_ptr = &mp_ptr->info[use_realm - 1][spell % 32];
284 if (use_realm == REALM_HISSATSU)
286 shouhimana = s_ptr->smana;
290 if (p_ptr->pclass == CLASS_SORCERER)
291 shouhimana = s_ptr->smana*2200 + 2399;
292 else if (p_ptr->pclass == CLASS_RED_MAGE)
293 shouhimana = s_ptr->smana*2600 + 2399;
295 shouhimana = (s_ptr->smana*(3800-spell_exp[spell])+2399);
298 else shouhimana *= 4;
300 if(shouhimana < 1) shouhimana = 1;
305 jverb1( prompt, jverb_buf );
306 /* ±ÑÆüÀÚ¤êÂؤ¨µ¡Ç½¤ËÂбþ */
307 (void) strnfmt(tmp_val, 78, "%s(MP%d, ¼ºÇÔΨ%d%%)¤ò%s¤Þ¤¹¤«? ",
308 spell_names[technic2magic(use_realm)-1][spell % 32], shouhimana,
309 spell_chance(spell, use_realm -1),jverb_buf);
311 (void)strnfmt(tmp_val, 78, "%^s %s (%d mana, %d%% fail)? ",
312 prompt, spell_names[technic2magic(use_realm)-1][spell % 32], shouhimana,
313 spell_chance(spell, use_realm - 1));
317 /* Belay that order */
318 if (!get_check(tmp_val)) continue;
326 /* Restore the screen */
327 if (redraw) screen_load();
334 p_ptr->window |= (PW_SPELL);
341 /* Abort if needed */
342 if (!flag) return (FALSE);
344 /* Save the choice */
347 #ifdef ALLOW_REPEAT /* TNB */
351 #endif /* ALLOW_REPEAT -- TNB */
358 static bool item_tester_learn_spell(object_type *o_ptr)
360 s32b choices = realm_choices2[p_ptr->pclass];
362 if (p_ptr->pclass == CLASS_PRIEST)
364 if (is_good_realm(p_ptr->realm1))
366 choices &= ~(CH_DEATH | CH_DAEMON);
370 choices &= ~(CH_LIFE | CH_CRUSADE);
374 if ((o_ptr->tval < TV_LIFE_BOOK) || (o_ptr->tval > (TV_LIFE_BOOK + MAX_REALM - 1))) return (FALSE);
375 if ((o_ptr->tval == TV_MUSIC_BOOK) && (p_ptr->pclass == CLASS_BARD)) return (TRUE);
376 else if (!is_magic(tval2realm(o_ptr->tval))) return FALSE;
377 if ((REALM1_BOOK == o_ptr->tval) || (REALM2_BOOK == o_ptr->tval)) return (TRUE);
378 if (choices & (0x0001 << (tval2realm(o_ptr->tval) - 1))) return (TRUE);
384 * Peruse the spells/prayers in a book
386 * Note that *all* spells in the book are listed
388 * Note that browsing is allowed while confused or blind,
389 * and in the dark, primarily to allow browsing in stores.
391 void do_cmd_browse(void)
393 int item, sval, use_realm = 0, j, line;
406 /* Warriors are illiterate */
407 if (!(p_ptr->realm1 || p_ptr->realm2) && (p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE))
410 msg_print("ËܤòÆɤळ¤È¤¬¤Ç¤¤Ê¤¤¡ª");
412 msg_print("You cannot read books!");
418 if (p_ptr->special_defense & KATA_MUSOU)
420 set_action(ACTION_NONE);
423 /* Restrict choices to "useful" books */
424 if (p_ptr->realm2 == REALM_NONE) item_tester_tval = mp_ptr->spell_book;
425 else item_tester_hook = item_tester_learn_spell;
429 q = "¤É¤ÎËܤòÆɤߤޤ¹¤«? ";
431 q = "Browse which book? ";
435 s = "Æɤá¤ëËܤ¬¤Ê¤¤¡£";
437 s = "You have no books that you can read.";
440 select_spellbook=TRUE;
441 if (p_ptr->pclass == CLASS_FORCETRAINER)
442 select_the_force = TRUE;
443 if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))){
444 select_spellbook = FALSE;
445 select_the_force = FALSE;
448 select_spellbook = FALSE;
449 select_the_force = FALSE;
451 if (item == 1111) { /* the_force */
452 do_cmd_mind_browse();
455 /* Get the item (in the pack) */
458 o_ptr = &inventory[item];
461 /* Get the item (on the floor) */
464 o_ptr = &o_list[0 - item];
467 /* Access the item's sval */
470 use_realm = tval2realm(o_ptr->tval);
471 if ((p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE) && is_magic(use_realm))
473 if (o_ptr->tval == REALM2_BOOK) increment = 32;
474 else if (o_ptr->tval != REALM1_BOOK) increment = 64;
477 /* Track the object kind */
478 object_kind_track(o_ptr->k_idx);
480 /* Hack -- Handle stuff */
485 for (spell = 0; spell < 32; spell++)
487 /* Check for this spell */
488 if ((fake_spell_flags[sval] & (1L << spell)))
490 /* Collect this spell */
491 spells[num++] = spell;
496 /* Save the screen */
499 /* Clear the top line */
502 /* Keep browsing spells. Exit browsing on cancel. */
505 /* Ask for a spell, allow cancel */
507 if (!get_spell(&spell, "Æɤà", o_ptr->sval, TRUE, use_realm))
509 if (!get_spell(&spell, "browse", o_ptr->sval, TRUE, use_realm))
512 /* If cancelled, leave immediately. */
513 if (spell == -1) break;
515 /* Display a list of spells */
516 print_spells(0, spells, num, 1, 15, use_realm - 1);
518 /* Notify that there's nothing to see, and wait. */
519 if (use_realm == REALM_HISSATSU)
521 prt("Æɤá¤ëµ»¤¬¤Ê¤¤¡£", 0, 0);
523 prt("No techniques to browse.", 0, 0);
527 prt("Æɤá¤ë¼öʸ¤¬¤Ê¤¤¡£", 0, 0);
529 prt("No spells to browse.", 0, 0);
534 /* Restore the screen */
540 /* Clear lines, position cursor (really should use strlen here) */
541 Term_erase(14, 14, 255);
542 Term_erase(14, 13, 255);
543 Term_erase(14, 12, 255);
544 Term_erase(14, 11, 255);
546 /* Access the spell */
547 if (!is_magic(use_realm))
549 s_ptr = &technic_info[use_realm - MIN_TECHNIC - 1][spell];
553 s_ptr = &mp_ptr->info[use_realm - 1][spell];
556 roff_to_buf( spell_tips[technic2magic(use_realm)-1][spell] ,62,temp);
557 for(j=0, line = 11;temp[j];j+=(1+strlen(&temp[j])))
559 prt(&temp[j], line, 15);
564 /* Restore the screen */
569 static void change_realm2(int next_realm)
574 for (i = 0; i < 64; i++)
576 spell_order[j] = spell_order[i];
577 if(spell_order[i] < 32) j++;
582 for (i = 32; i < 64; i++)
588 spell_forgotten2 = 0L;
591 sprintf(tmp,"ËâË¡¤ÎÎΰè¤ò%s¤«¤é%s¤ËÊѹ¹¤·¤¿¡£", realm_names[p_ptr->realm2], realm_names[next_realm]);
593 sprintf(tmp,"change magic realm from %s to %s.", realm_names[p_ptr->realm2], realm_names[next_realm]);
595 do_cmd_write_nikki(NIKKI_BUNSHOU, 0, tmp);
596 p_ptr->old_realm |= 1 << (p_ptr->realm2-1);
597 p_ptr->realm2 = next_realm;
599 p_ptr->notice |= (PN_REORDER);
600 p_ptr->update |= (PU_SPELLS);
606 * Study a book to gain a new spell/prayer
608 void do_cmd_study(void)
612 bool learned = FALSE;
614 /* Spells of realm2 will have an increment of +32 */
617 cptr p = spell_categoly_name(mp_ptr->spell_book);
626 msg_print("ËܤòÆɤळ¤È¤¬¤Ç¤¤Ê¤¤¡ª");
628 msg_print("You cannot read books!");
634 if (p_ptr->blind || no_lite())
637 msg_print("Ìܤ¬¸«¤¨¤Ê¤¤¡ª");
639 msg_print("You cannot see!");
648 msg_print("º®Í𤷤Ƥ¤¤ÆÆɤá¤Ê¤¤¡ª");
650 msg_print("You are too confused!");
656 if (!(p_ptr->new_spells))
659 msg_format("¿·¤·¤¤%s¤ò³Ð¤¨¤ë¤³¤È¤Ï¤Ç¤¤Ê¤¤¡ª", p);
661 msg_format("You cannot learn any new %ss!", p);
667 if (p_ptr->special_defense & KATA_MUSOU)
669 set_action(ACTION_NONE);
672 p = spell_categoly_name(mp_ptr->spell_book);
675 if( p_ptr->new_spells < 10 ){
676 msg_format("¤¢¤È %d ¤Ä¤Î%s¤ò³Ø¤Ù¤ë¡£", p_ptr->new_spells, p);
678 msg_format("¤¢¤È %d ¸Ä¤Î%s¤ò³Ø¤Ù¤ë¡£", p_ptr->new_spells, p);
681 msg_format("You can learn %d new %s%s.", p_ptr->new_spells, p,
682 (p_ptr->new_spells == 1?"":"s"));
688 /* Restrict choices to "useful" books */
689 if (p_ptr->realm2 == REALM_NONE) item_tester_tval = mp_ptr->spell_book;
690 else item_tester_hook = item_tester_learn_spell;
694 q = "¤É¤ÎËܤ«¤é³Ø¤Ó¤Þ¤¹¤«? ";
696 q = "Study which book? ";
700 s = "Æɤá¤ëËܤ¬¤Ê¤¤¡£";
702 s = "You have no books that you can read.";
705 select_spellbook=TRUE;
706 if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return;
707 select_spellbook=FALSE;
709 /* Get the item (in the pack) */
712 o_ptr = &inventory[item];
715 /* Get the item (on the floor) */
718 o_ptr = &o_list[0 - item];
721 /* Access the item's sval */
724 if (o_ptr->tval == REALM2_BOOK) increment = 32;
725 else if (o_ptr->tval != REALM1_BOOK)
728 if (!get_check("ËÜÅö¤ËËâË¡¤ÎÎΰè¤òÊѹ¹¤·¤Þ¤¹¤«¡©")) return;
730 if (!get_check("Really, change magic realm? ")) return;
732 change_realm2(tval2realm(o_ptr->tval));
736 /* Track the object kind */
737 object_kind_track(o_ptr->k_idx);
739 /* Hack -- Handle stuff */
742 /* Mage -- Learn a selected spell */
743 if (mp_ptr->spell_book != TV_LIFE_BOOK)
745 /* Ask for a spell, allow cancel */
747 if (!get_spell(&spell, "³Ø¤Ö", sval, FALSE, o_ptr->tval - TV_LIFE_BOOK + 1)
748 && (spell == -1)) return;
750 if (!get_spell(&spell, "study", sval, FALSE, o_ptr->tval - TV_LIFE_BOOK + 1)
751 && (spell == -1)) return;
756 /* Priest -- Learn a random prayer */
764 for (spell = 0; spell < 32; spell++)
766 /* Check spells in the book */
767 if ((fake_spell_flags[sval] & (1L << spell)))
769 /* Skip non "okay" prayers */
770 if (!spell_okay(spell, FALSE, TRUE,
771 (increment ? p_ptr->realm2 - 1 : p_ptr->realm1 - 1))) continue;
773 /* Hack -- Prepare the randomizer */
776 /* Hack -- Apply the randomizer */
777 if (one_in_(k)) gift = spell;
785 /* Nothing to study */
790 msg_format("¤½¤ÎËܤˤϳؤ֤٤%s¤¬¤Ê¤¤¡£", p);
792 msg_format("You cannot learn any %ss in that book.", p);
801 if (increment) spell += increment;
803 /* Learn the spell */
806 if (spell_learned1 & (1L << spell)) learned = TRUE;
807 else spell_learned1 |= (1L << spell);
811 if (spell_learned2 & (1L << (spell - 32))) learned = TRUE;
812 else spell_learned2 |= (1L << (spell - 32));
817 int max_exp = (spell < 32) ? 1600 : 1400;
818 int old_exp = spell_exp[spell];
820 cptr name = spell_names[technic2magic(increment ? p_ptr->realm2 : p_ptr->realm1)-1][spell%32];
822 if (old_exp >= max_exp)
825 msg_format("¤½¤Î%s¤Ï´°Á´¤Ë»È¤¤¤³¤Ê¤»¤ë¤Î¤Ç³Ø¤ÖɬÍפϤʤ¤¡£", spell_categoly_name(mp_ptr->spell_book));
827 msg_format("You don't need to study this %s anymore.", spell_categoly_name(mp_ptr->spell_book));
832 if (!get_check(format("%s¤Î%s¤ò¤µ¤é¤Ë³Ø¤Ó¤Þ¤¹¡£¤è¤í¤·¤¤¤Ç¤¹¤«¡©", name, spell_categoly_name(mp_ptr->spell_book))))
834 if (!get_check(format("You will study a %s of %s again. Are you sure? ", spell_categoly_name(mp_ptr->spell_book), name)))
839 else if (old_exp >= 1400)
841 spell_exp[spell] = 1600;
844 else if (old_exp >= 1200)
846 if (spell >= 32) spell_exp[spell] = 1400;
847 else spell_exp[spell] += 200;
850 else if (old_exp >= 900)
852 spell_exp[spell] = 1200+(old_exp-900)*2/3;
857 spell_exp[spell] = 900+(old_exp)/3;
861 msg_format("%s¤Î½ÏÎýÅÙ¤¬%s¤Ë¾å¤¬¤Ã¤¿¡£", name, shougou_moji[new_rank]);
863 msg_format("Your proficiency of %s is now %s rank.", name, shougou_moji[new_rank]);
868 /* Find the next open entry in "spell_order[]" */
869 for (i = 0; i < 64; i++)
871 /* Stop at the first empty space */
872 if (spell_order[i] == 99) break;
875 /* Add the spell to the known list */
876 spell_order[i++] = spell;
878 /* Mention the result */
880 /* ±ÑÆüÀÚ¤êÂؤ¨µ¡Ç½¤ËÂбþ */
881 if (mp_ptr->spell_book == TV_MUSIC_BOOK)
883 msg_format("%s¤ò³Ø¤ó¤À¡£",
884 spell_names[technic2magic(increment ? p_ptr->realm2 : p_ptr->realm1)-1][spell % 32]);
888 msg_format("%s¤Î%s¤ò³Ø¤ó¤À¡£",
889 spell_names[technic2magic(increment ? p_ptr->realm2 : p_ptr->realm1)-1][spell % 32] ,p);
892 msg_format("You have learned the %s of %s.",
893 p, spell_names[technic2magic(increment ? p_ptr->realm2 : p_ptr->realm1)-1][spell % 32]);
900 if (mp_ptr->spell_book == TV_LIFE_BOOK)
901 chg_virtue(V_FAITH, 1);
902 else if (mp_ptr->spell_book == TV_DEATH_BOOK)
903 chg_virtue(V_UNLIFE, 1);
904 else if (mp_ptr->spell_book == TV_NATURE_BOOK)
905 chg_virtue(V_NATURE, 1);
907 chg_virtue(V_KNOWLEDGE, 1);
912 /* One less spell available */
913 p_ptr->learned_spells++;
915 /* Message if needed */
916 if (p_ptr->new_spells)
920 if( p_ptr->new_spells < 10 ){
921 msg_format("¤¢¤È %d ¤Ä¤Î%s¤ò³Ø¤Ù¤ë¡£", p_ptr->new_spells, p);
923 msg_format("¤¢¤È %d ¸Ä¤Î%s¤ò³Ø¤Ù¤ë¡£", p_ptr->new_spells, p);
926 msg_format("You can learn %d more %s%s.",
927 p_ptr->new_spells, p,
928 (p_ptr->new_spells != 1) ? "s" : "");
935 p_ptr->update |= (PU_SPELLS);
940 static void wild_magic(int spell)
943 int type = SUMMON_BIZARRE1 + randint0(6);
945 if (type < SUMMON_BIZARRE1) type = SUMMON_BIZARRE1;
946 else if (type > SUMMON_BIZARRE6) type = SUMMON_BIZARRE6;
948 switch (randint1(spell) + randint1(8) + 1)
958 teleport_player(100);
962 teleport_player(200);
972 lite_area(damroll(2, 3), 2);
975 destroy_doors_touch();
980 sleep_monsters_touch();
984 trap_creation(py, px);
993 aggravate_monsters(0);
996 earthquake(py, px, 5);
1000 (void)gain_random_mutation(0);
1004 apply_disenchant(1);
1010 fire_ball(GF_CHAOS, 0, spell + 5, 1 + (spell / 10));
1017 while (counter++ < 8)
1019 (void)summon_specific(0, py, px, (dun_level * 3) / 2, type, (PM_ALLOW_GROUP | PM_NO_PET));
1024 activate_hi_summon(py, px, FALSE);
1027 (void)summon_cyber(-1, py, px);
1032 (void)activate_ty_curse(FALSE, &count);
1041 static bool cast_life_spell(int spell)
1044 int plev = p_ptr->lev;
1048 case 0: /* Cure Light Wounds */
1049 (void)hp_player(damroll(2, 10));
1050 (void)set_cut(p_ptr->cut - 10);
1053 (void)set_blessed(randint1(12) + 12, FALSE);
1055 case 2: /* Make Light Wounds */
1056 if (!get_aim_dir(&dir)) return FALSE;
1057 fire_ball_hide(GF_WOUNDS, dir, damroll(3 + ((plev - 1) / 5), 4), 0);
1059 case 3: /* Call Light */
1060 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
1062 case 4: /* Detect Traps + Secret Doors */
1063 (void)detect_traps(DETECT_RAD_DEFAULT);
1064 (void)detect_doors(DETECT_RAD_DEFAULT);
1065 (void)detect_stairs(DETECT_RAD_DEFAULT);
1067 case 5: /* Cure Medium Wounds */
1068 (void)hp_player(damroll(4, 10));
1069 (void)set_cut((p_ptr->cut / 2) - 20);
1071 case 6: /* Cure Poison */
1072 (void)set_poisoned(0);
1074 case 7: /* Satisfy Hunger */
1075 (void)set_food(PY_FOOD_MAX - 1);
1077 case 8: /* Remove Curse */
1081 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
1083 msg_print("You feel as if someone is watching over you.");
1087 case 9: /* Make Medium Wounds */
1088 if (!get_aim_dir(&dir)) return FALSE;
1089 fire_ball_hide(GF_WOUNDS, dir, damroll(8 + ((plev - 5) / 4), 8), 0);
1091 case 10: /* Cure Critical Wounds */
1092 (void)hp_player(damroll(8, 10));
1097 (void)set_oppose_cold(randint1(20) + 20, FALSE);
1098 (void)set_oppose_fire(randint1(20) + 20, FALSE);
1101 map_area(DETECT_RAD_MAP);
1104 (void)turn_undead();
1106 case 14: /* Healing */
1107 (void)hp_player(300);
1111 case 15: /* Glyph of Warding */
1114 case 16: /* Dispel Curse */
1115 if (remove_all_curse())
1118 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
1120 msg_print("You feel as if someone is watching over you.");
1124 case 17: /* Perception */
1125 return ident_spell(FALSE, FALSE);
1126 case 18: /* Dispel Undead */
1127 (void)dispel_undead(randint1(plev * 5));
1129 case 19: /* 'Day of the Dove' */
1130 charm_monsters(plev * 2);
1132 case 20: /* Make Critical Wounds */
1133 if (!get_aim_dir(&dir)) return FALSE;
1134 fire_ball_hide(GF_WOUNDS, dir, damroll(5+((plev - 5) / 3), 15), 0);
1136 case 21: /* Word of Recall */
1137 if (!word_of_recall()) return FALSE;
1139 case 22: /* Alter Reality */
1142 case 23: /* Warding True */
1147 num_repro += MAX_REPRO;
1149 case 25: /* Detection True */
1150 (void)detect_all(DETECT_RAD_DEFAULT);
1152 case 26: /* Genocide Undead */
1153 (void)mass_genocide_undead(plev+50,TRUE);
1155 case 27: /* Clairvoyance */
1156 wiz_lite(FALSE, FALSE);
1158 case 28: /* Restoration */
1159 (void)do_res_stat(A_STR);
1160 (void)do_res_stat(A_INT);
1161 (void)do_res_stat(A_WIS);
1162 (void)do_res_stat(A_DEX);
1163 (void)do_res_stat(A_CON);
1164 (void)do_res_stat(A_CHR);
1165 (void)restore_level();
1167 case 29: /* Healing True */
1168 (void)hp_player(2000);
1172 case 30: /* Holy Vision */
1173 return identify_fully(FALSE, FALSE);
1174 case 31: /* Ultimate resistance */
1176 int v = randint1(plev/2)+plev/2;
1177 (void)set_fast(v, FALSE);
1178 set_oppose_acid(v, FALSE);
1179 set_oppose_elec(v, FALSE);
1180 set_oppose_fire(v, FALSE);
1181 set_oppose_cold(v, FALSE);
1182 set_oppose_pois(v, FALSE);
1183 set_ultimate_res(v, FALSE);
1188 msg_format("¤¢¤Ê¤¿¤ÏÉÔÌÀ¤Ê¥é¥¤¥Õ¤Î¼öʸ %d ¤ò¾§¤¨¤¿¡£", spell);
1190 msg_format("You cast an unknown Life spell: %d.", spell);
1201 static bool cast_sorcery_spell(int spell)
1204 int plev = p_ptr->lev;
1208 case 0: /* Detect Monsters */
1209 (void)detect_monsters_normal(DETECT_RAD_DEFAULT);
1211 case 1: /* Phase Door */
1212 teleport_player(10);
1214 case 2: /* Detect Doors and Traps */
1215 (void)detect_traps(DETECT_RAD_DEFAULT);
1216 (void)detect_doors(DETECT_RAD_DEFAULT);
1217 (void)detect_stairs(DETECT_RAD_DEFAULT);
1219 case 3: /* Light Area */
1220 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
1222 case 4: /* Confuse Monster */
1223 if (!get_aim_dir(&dir)) return FALSE;
1225 (void)confuse_monster(dir, (plev * 3) / 2);
1227 case 5: /* Teleport */
1228 teleport_player(plev * 5);
1230 case 6: /* Sleep Monster */
1231 if (!get_aim_dir(&dir)) return FALSE;
1233 (void)sleep_monster(dir);
1235 case 7: /* Recharging */
1236 return recharge(plev * 4);
1237 case 8: /* Magic Mapping */
1238 map_area(DETECT_RAD_MAP);
1240 case 9: /* Identify */
1241 return ident_spell(FALSE, FALSE);
1242 case 10: /* Slow Monster */
1243 if (!get_aim_dir(&dir)) return FALSE;
1245 (void)slow_monster(dir);
1247 case 11: /* Mass Sleep */
1248 (void)sleep_monsters();
1250 case 12: /* Teleport Away */
1251 if (!get_aim_dir(&dir)) return FALSE;
1253 (void)fire_beam(GF_AWAY_ALL, dir, plev);
1255 case 13: /* Haste Self */
1256 (void)set_fast(randint1(20 + plev) + plev, FALSE);
1258 case 14: /* Detection True */
1259 (void)detect_all(DETECT_RAD_DEFAULT);
1261 case 15: /* Identify True */
1262 return identify_fully(FALSE, FALSE);
1263 case 16: /* Detect Objects and Treasure*/
1264 (void)detect_objects_normal(DETECT_RAD_DEFAULT);
1265 (void)detect_treasure(DETECT_RAD_DEFAULT);
1266 (void)detect_objects_gold(DETECT_RAD_DEFAULT);
1268 case 17: /* Charm Monster */
1269 if (!get_aim_dir(&dir)) return FALSE;
1271 (void)charm_monster(dir, plev);
1273 case 18: /* Sense Minds */
1274 (void)set_tim_esp(randint1(30) + 25, FALSE);
1276 case 19: /* Teleport to town */
1279 case 20: /* Self knowledge */
1280 (void)self_knowledge();
1282 case 21: /* Teleport Level */
1284 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return FALSE;
1286 if (!get_check("Are you sure? (Teleport Level)")) return FALSE;
1288 (void)teleport_player_level();
1290 case 22: /* Word of Recall */
1291 if (!word_of_recall()) return FALSE;
1293 case 23: /* Dimension Door */
1295 msg_print("¼¡¸µ¤ÎÈ⤬³«¤¤¤¿¡£ÌÜŪÃϤòÁª¤ó¤Ç²¼¤µ¤¤¡£");
1297 msg_print("You open a dimensional gate. Choose a destination.");
1300 return dimension_door();
1301 case 24: /* Probing */
1304 case 25: /* Explosive Rune */
1307 case 26: /* Telekinesis */
1308 if (!get_aim_dir(&dir)) return FALSE;
1310 fetch(dir, plev * 15, FALSE);
1312 case 27: /* Clairvoyance */
1313 chg_virtue(V_KNOWLEDGE, 1);
1314 chg_virtue(V_ENLIGHTEN, 1);
1316 wiz_lite(FALSE, FALSE);
1317 if (!(p_ptr->telepathy))
1319 (void)set_tim_esp(randint1(30) + 25, FALSE);
1322 case 28: /* Charm Monsters */
1323 charm_monsters(plev * 2);
1325 case 29: /* Alchemy */
1327 case 30: /* Banish */
1328 banish_monsters(plev * 4);
1330 case 31: /* Globe of Invulnerability */
1331 (void)set_invuln(randint1(4) + 4, FALSE);
1335 msg_format("¤¢¤Ê¤¿¤ÏÉÔÌÀ¤Ê¥½¡¼¥µ¥ê¡¼¤Î¼öʸ %d ¤ò¾§¤¨¤¿¡£", spell);
1337 msg_format("You cast an unknown Sorcery spell: %d.", spell);
1347 static bool cast_nature_spell(int spell)
1351 int plev = p_ptr->lev;
1352 bool no_trump = FALSE;
1354 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
1355 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
1356 else beam = plev / 2;
1360 case 0: /* Detect Creatures */
1361 (void)detect_monsters_normal(DETECT_RAD_DEFAULT);
1363 case 1: /* Lightning Bolt */
1364 project_length = plev / 6 + 2;
1365 if (!get_aim_dir(&dir)) return FALSE;
1367 fire_beam(GF_ELEC, dir,
1368 damroll(3 + ((plev - 1) / 5), 4));
1370 case 2: /* Detect Doors & Traps */
1371 (void)detect_traps(DETECT_RAD_DEFAULT);
1372 (void)detect_doors(DETECT_RAD_DEFAULT);
1373 (void)detect_stairs(DETECT_RAD_DEFAULT);
1375 case 3: /* Produce Food */
1376 (void)set_food(PY_FOOD_MAX - 1);
1378 case 4: /* Daylight */
1379 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
1380 if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)
1383 msg_print("Æü¤Î¸÷¤¬¤¢¤Ê¤¿¤ÎÆùÂΤò¾Ç¤¬¤·¤¿¡ª");
1385 msg_print("The daylight scorches your flesh!");
1389 take_hit(DAMAGE_NOESCAPE, damroll(2, 2), "Æü¤Î¸÷", -1);
1391 take_hit(DAMAGE_NOESCAPE, damroll(2, 2), "daylight", -1);
1396 case 5: /* Animal Taming */
1397 if (!get_aim_dir(&dir)) return FALSE;
1399 (void)charm_animal(dir, plev);
1401 case 6: /* Resist Environment */
1402 (void)set_oppose_cold(randint1(20) + 20, FALSE);
1403 (void)set_oppose_fire(randint1(20) + 20, FALSE);
1404 (void)set_oppose_elec(randint1(20) + 20, FALSE);
1406 case 7: /* Cure Wounds & Poison */
1407 (void)hp_player(damroll(2, 8));
1409 (void)set_poisoned(0);
1411 case 8: /* Stone to Mud */
1412 if (!get_aim_dir(&dir)) return FALSE;
1414 (void)wall_to_mud(dir);
1416 case 9: /* Frost Bolt */
1417 if (!get_aim_dir(&dir)) return FALSE;
1418 fire_bolt_or_beam(beam - 10, GF_COLD, dir,
1419 damroll(3 + ((plev - 5) / 4), 8));
1421 case 10: /* Nature Awareness -- downgraded */
1422 map_area(DETECT_RAD_MAP);
1423 (void)detect_traps(DETECT_RAD_DEFAULT);
1424 (void)detect_doors(DETECT_RAD_DEFAULT);
1425 (void)detect_stairs(DETECT_RAD_DEFAULT);
1426 (void)detect_monsters_normal(DETECT_RAD_DEFAULT);
1428 case 11: /* Fire Bolt */
1429 if (!get_aim_dir(&dir)) return FALSE;
1430 fire_bolt_or_beam(beam - 10, GF_FIRE, dir,
1431 damroll(5 + ((plev - 5) / 4), 8));
1433 case 12: /* Ray of Sunlight */
1434 if (!get_aim_dir(&dir)) return FALSE;
1436 msg_print("ÂÀÍÛ¸÷Àþ¤¬¸½¤ì¤¿¡£");
1438 msg_print("A line of sunlight appears.");
1441 (void)lite_line(dir);
1443 case 13: /* Entangle */
1446 case 14: /* Summon Animals */
1447 if (!(summon_specific(-1, py, px, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET))))
1450 case 15: /* Herbal Healing */
1451 (void)hp_player(500);
1454 (void)set_poisoned(0);
1456 case 16: /* Stair Building */
1457 (void)stair_creation();
1459 case 17: /* Stone Skin */
1460 (void)set_shield(randint1(20) + 30, FALSE);
1462 case 18: /* Resistance True */
1463 (void)set_oppose_acid(randint1(20) + 20, FALSE);
1464 (void)set_oppose_elec(randint1(20) + 20, FALSE);
1465 (void)set_oppose_fire(randint1(20) + 20, FALSE);
1466 (void)set_oppose_cold(randint1(20) + 20, FALSE);
1467 (void)set_oppose_pois(randint1(20) + 20, FALSE);
1469 case 19: /* Tree Creation */
1470 (void)tree_creation();
1472 case 20: /* Animal Friendship */
1473 (void)charm_animals(plev * 2);
1475 case 21: /* Stone Tell */
1476 return identify_fully(FALSE, FALSE);
1477 case 22: /* Wall of Stone */
1480 case 23: /* Protection from Corrosion */
1482 case 24: /* Earthquake */
1483 earthquake(py, px, 10);
1485 case 25: /* Whirlwind Attack */
1489 monster_type *m_ptr;
1491 for (dir = 0; dir < 8; dir++)
1493 y = py + ddy_ddd[dir];
1494 x = px + ddx_ddd[dir];
1495 c_ptr = &cave[y][x];
1497 /* Get the monster */
1498 m_ptr = &m_list[c_ptr->m_idx];
1500 /* Hack -- attack monsters */
1501 if (c_ptr->m_idx && (m_ptr->ml || cave_floor_bold(y, x)))
1506 case 26: /* Blizzard */
1507 if (!get_aim_dir(&dir)) return FALSE;
1509 fire_ball(GF_COLD, dir, 70 + plev * 3 / 2, (plev / 12) + 1);
1511 case 27: /* Lightning Storm */
1512 if (!get_aim_dir(&dir)) return FALSE;
1513 fire_ball(GF_ELEC, dir, 90 + plev * 3 / 2, (plev / 12) + 1);
1515 case 28: /* Whirlpool */
1516 if (!get_aim_dir(&dir)) return FALSE;
1517 fire_ball(GF_WATER, dir, 100 + plev * 3 / 2, (plev / 12) + 1);
1519 case 29: /* Call Sunlight */
1520 fire_ball(GF_LITE, 0, 150, 8);
1521 chg_virtue(V_KNOWLEDGE, 1);
1522 chg_virtue(V_ENLIGHTEN, 1);
1523 wiz_lite(FALSE, FALSE);
1524 if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)
1527 msg_print("Æü¸÷¤¬¤¢¤Ê¤¿¤ÎÆùÂΤò¾Ç¤¬¤·¤¿¡ª");
1529 msg_print("The sunlight scorches your flesh!");
1533 take_hit(DAMAGE_NOESCAPE, 50, "Æü¸÷", -1);
1535 take_hit(DAMAGE_NOESCAPE, 50, "sunlight", -1);
1540 case 30: /* Elemental Branding */
1541 brand_weapon(randint0(2));
1543 case 31: /* Nature's Wrath */
1544 (void)dispel_monsters(plev * 4);
1545 earthquake(py, px, 20 + (plev / 2));
1546 project(0, 1 + plev / 12, py, px,
1547 (100 + plev) * 2, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM, -1);
1551 msg_format("¤¢¤Ê¤¿¤ÏÉÔÌÀ¤Ê¥Í¥¤¥Á¥ã¡¼¤Î¼öʸ %d ¤ò¾§¤¨¤¿¡£", spell);
1553 msg_format("You cast an unknown Nature spell: %d.", spell);
1561 msg_print("ưʪ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
1563 msg_print("No animals arrive.");
1571 static bool cast_chaos_spell(int spell)
1574 int plev = p_ptr->lev;
1576 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
1577 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
1578 else beam = plev / 2;
1582 case 0: /* Magic Missile */
1583 if (!get_aim_dir(&dir)) return FALSE;
1585 fire_bolt_or_beam(beam - 10, GF_MISSILE, dir,
1586 damroll(3 + ((plev - 1) / 5), 4));
1588 case 1: /* Trap / Door destruction */
1589 (void)destroy_doors_touch();
1591 case 2: /* Flash of Light == Light Area */
1592 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
1594 case 3: /* Touch of Confusion */
1595 if (!(p_ptr->special_attack & ATTACK_CONFUSE))
1598 msg_print("¤¢¤Ê¤¿¤Î¼ê¤Ï¸÷¤ê»Ï¤á¤¿¡£");
1600 msg_print("Your hands start glowing.");
1603 p_ptr->special_attack |= ATTACK_CONFUSE;
1604 p_ptr->redraw |= (PR_STATUS);
1607 case 4: /* Mana Burst */
1608 if (!get_aim_dir(&dir)) return FALSE;
1610 fire_ball(GF_MISSILE, dir,
1611 (damroll(3, 5) + plev +
1612 (plev / (((p_ptr->pclass == CLASS_MAGE)
1613 || (p_ptr->pclass == CLASS_HIGH_MAGE)
1614 || (p_ptr->pclass == CLASS_SORCERER)) ? 2 : 4))),
1615 ((plev < 30) ? 2 : 3));
1616 /* Shouldn't actually use GF_MANA, as it will destroy all
1617 * items on the floor */
1619 case 5: /* Fire Bolt */
1620 if (!get_aim_dir(&dir)) return FALSE;
1622 fire_bolt_or_beam(beam, GF_FIRE, dir,
1623 damroll(8 + ((plev - 5) / 4), 8));
1625 case 6: /* Fist of Force ("Fist of Fun") */
1626 if (!get_aim_dir(&dir)) return FALSE;
1628 fire_ball(GF_DISINTEGRATE, dir,
1629 damroll(8 + ((plev - 5) / 4), 8), 0);
1631 case 7: /* Teleport Self */
1632 teleport_player(plev * 5);
1634 case 8: /* Wonder */
1636 /* This spell should become more useful (more
1637 controlled) as the player gains experience levels.
1638 Thus, add 1/5 of the player's level to the die roll.
1639 This eliminates the worst effects later on, while
1640 keeping the results quite random. It also allows
1641 some potent effects only at high level. */
1643 int die = randint1(100) + plev / 5;
1644 int vir = virtue_number(V_CHANCE);
1647 if (p_ptr->virtues[vir - 1] > 0)
1649 while (randint1(400) < p_ptr->virtues[vir - 1]) die++;
1653 while (randint1(400) < (0-p_ptr->virtues[vir - 1])) die--;
1658 chg_virtue(V_CHANCE, 1);
1660 if (!get_aim_dir(&dir)) return FALSE;
1663 msg_print("¤¢¤Ê¤¿¤ÏÎϤ¬¤ß¤Ê¤®¤ë¤Î¤ò´¶¤¸¤¿¡ª");
1665 msg_print("You feel a surge of power!");
1668 if (die < 8) clone_monster(dir);
1669 else if (die < 14) speed_monster(dir);
1670 else if (die < 26) heal_monster(dir, damroll(4, 6));
1671 else if (die < 31) poly_monster(dir);
1673 fire_bolt_or_beam(beam - 10, GF_MISSILE, dir,
1674 damroll(3 + ((plev - 1) / 5), 4));
1675 else if (die < 41) confuse_monster(dir, plev);
1676 else if (die < 46) fire_ball(GF_POIS, dir, 20 + (plev / 2), 3);
1677 else if (die < 51) (void)lite_line(dir);
1679 fire_bolt_or_beam(beam - 10, GF_ELEC, dir,
1680 damroll(3 + ((plev - 5) / 4), 8));
1682 fire_bolt_or_beam(beam - 10, GF_COLD, dir,
1683 damroll(5 + ((plev - 5) / 4), 8));
1685 fire_bolt_or_beam(beam, GF_ACID, dir,
1686 damroll(6 + ((plev - 5) / 4), 8));
1688 fire_bolt_or_beam(beam, GF_FIRE, dir,
1689 damroll(8 + ((plev - 5) / 4), 8));
1690 else if (die < 76) drain_life(dir, 75);
1691 else if (die < 81) fire_ball(GF_ELEC, dir, 30 + plev / 2, 2);
1692 else if (die < 86) fire_ball(GF_ACID, dir, 40 + plev, 2);
1693 else if (die < 91) fire_ball(GF_ICE, dir, 70 + plev, 3);
1694 else if (die < 96) fire_ball(GF_FIRE, dir, 80 + plev, 3);
1695 else if (die < 101) drain_life(dir, 100 + plev);
1698 earthquake(py, px, 12);
1702 destroy_area(py, px, 13+randint0(5), TRUE);
1706 symbol_genocide(plev+50, TRUE);
1708 else if (die < 110) dispel_monsters(120);
1711 dispel_monsters(150);
1719 case 9: /* Chaos Bolt */
1720 if (!get_aim_dir(&dir)) return FALSE;
1722 fire_bolt_or_beam(beam, GF_CHAOS, dir,
1723 damroll(10 + ((plev - 5) / 4), 8));
1725 case 10: /* Sonic Boom */
1727 msg_print("¥É¡¼¥ó¡ªÉô²°¤¬Íɤ줿¡ª");
1729 msg_print("BOOM! Shake the room!");
1732 project(0, plev / 10 + 2, py, px,
1733 (60 + plev), GF_SOUND, PROJECT_KILL | PROJECT_ITEM, -1);
1735 case 11: /* Doom Bolt -- always beam in 2.0.7 or later */
1736 if (!get_aim_dir(&dir)) return FALSE;
1738 fire_beam(GF_MANA, dir, damroll(11 + ((plev - 5) / 4), 8));
1740 case 12: /* Fire Ball */
1741 if (!get_aim_dir(&dir)) return FALSE;
1743 fire_ball(GF_FIRE, dir, plev + 55, 2);
1745 case 13: /* Teleport Other */
1746 if (!get_aim_dir(&dir)) return FALSE;
1748 (void)fire_beam(GF_AWAY_ALL, dir, plev);
1750 case 14: /* Word of Destruction */
1751 destroy_area(py, px, 13+randint0(5), TRUE);
1753 case 15: /* Invoke Logrus */
1754 if (!get_aim_dir(&dir)) return FALSE;
1756 fire_ball(GF_CHAOS, dir, plev*2 + 99, plev / 5);
1758 case 16: /* Polymorph Other */
1759 if (!get_aim_dir(&dir)) return FALSE;
1761 (void)poly_monster(dir);
1763 case 17: /* Chain Lightning */
1764 for (dir = 0; dir <= 9; dir++)
1765 fire_beam(GF_ELEC, dir, damroll(5 + (plev / 10), 8));
1767 case 18: /* Arcane Binding == Charging */
1768 return recharge(90);
1769 case 19: /* Disintegration */
1770 if (!get_aim_dir(&dir)) return FALSE;
1772 fire_ball(GF_DISINTEGRATE, dir, plev + 70, 3 + plev / 40);
1774 case 20: /* Alter Reality */
1777 case 21: /* Magic Rocket */
1778 if (!get_aim_dir(&dir)) return FALSE;
1781 msg_print("¥í¥±¥Ã¥Èȯ¼Í¡ª");
1783 msg_print("You launch a rocket!");
1786 fire_rocket(GF_ROCKET, dir, 120 + plev*2, 2);
1788 case 22: /* Chaos Branding */
1791 case 23: /* Summon monster, demon */
1794 bool pet = !one_in_(3);
1796 if (pet) mode |= PM_FORCE_PET;
1797 else mode |= PM_NO_PET;
1798 if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
1800 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, SUMMON_DEMON, mode))
1803 msg_print("ⲫ¤Î°½¤¬½¼Ëþ¤·¤¿¡£");
1805 msg_print("The area fills with a stench of sulphur and brimstone.");
1811 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
1813 msg_print("'What is thy bidding... Master?'");
1818 msg_print("¡ÖÈܤ·¤¼Ô¤è¡¢²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª ¤ªÁ°¤Îº²¤òĺ¤¯¤¾¡ª¡×");
1820 msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'");
1826 case 24: /* Beam of Gravity */
1827 if (!get_aim_dir(&dir)) return FALSE;
1829 fire_beam(GF_GRAVITY, dir, damroll(9 + ((plev - 5) / 4), 8));
1831 case 25: /* Meteor Swarm */
1834 int b = 10 + randint1(10);
1835 for (i = 0; i < b; i++)
1837 int count = 0, d = 0;
1842 if (count > 20) break;
1843 x = px - 8 + randint0(17);
1844 y = py - 8 + randint0(17);
1846 if (!in_bounds(y,x) || (!cave_floor_bold(y,x) && (cave[y][x].feat != FEAT_TREES)) || !player_has_los_bold(y, x)) continue;
1848 dx = (px > x) ? (px - x) : (x - px);
1849 dy = (py > y) ? (py - y) : (y - py);
1851 /* Approximate distance */
1852 d = (dy > dx) ? (dy + (dx >> 1)) : (dx + (dy >> 1));
1856 if (count > 20) continue;
1858 project(0, 2, y, x, plev * 2, GF_METEOR, PROJECT_KILL | PROJECT_JUMP | PROJECT_ITEM, -1);
1862 case 26: /* Flame Strike */
1863 fire_ball(GF_FIRE, 0, 300 + (3 * plev), 8);
1865 case 27: /* Call Chaos */
1868 case 28: /* Polymorph Self */
1870 if (!get_check("ÊѿȤ·¤Þ¤¹¡£¤è¤í¤·¤¤¤Ç¤¹¤«¡©")) return FALSE;
1872 if (!get_check("You will polymorph yourself. Are you sure? ")) return FALSE;
1876 case 29: /* Mana Storm */
1877 if (!get_aim_dir(&dir)) return FALSE;
1879 fire_ball(GF_MANA, dir, 300 + (plev * 4), 4);
1881 case 30: /* Breathe Logrus */
1882 if (!get_aim_dir(&dir)) return FALSE;
1884 fire_ball(GF_CHAOS, dir, p_ptr->chp, 2);
1886 case 31: /* Call the Void */
1891 msg_format("¤¢¤Ê¤¿¤ÏÉÔÌÀ¤Ê¥«¥ª¥¹¤Î¼öʸ %d ¤ò¾§¤¨¤¿¡£", spell);
1893 msg_format("You cast an unknown Chaos spell: %d.", spell);
1903 static bool cast_death_spell(int spell)
1907 int plev = p_ptr->lev;
1910 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
1911 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
1912 else beam = plev / 2;
1916 case 0: /* Detect Undead & Demons -> Unlife */
1917 (void)detect_monsters_nonliving(DETECT_RAD_DEFAULT);
1919 case 1: /* Malediction */
1920 if (!get_aim_dir(&dir)) return FALSE;
1921 /* A radius-0 ball may (1) be aimed at objects etc.,
1922 * and will affect them; (2) may be aimed at ANY
1923 * visible monster, unlike a 'bolt' which must travel
1924 * to the monster. */
1926 fire_ball(GF_HELL_FIRE, dir,
1927 damroll(3 + ((plev - 1) / 5), 4), 0);
1930 { /* Special effect first */
1931 dummy = randint1(1000);
1933 fire_ball_hide(GF_DEATH_RAY, dir, plev * 200, 0);
1934 else if (dummy < 500)
1935 fire_ball_hide(GF_TURN_ALL, dir, plev, 0);
1936 else if (dummy < 800)
1937 fire_ball_hide(GF_OLD_CONF, dir, plev, 0);
1939 fire_ball_hide(GF_STUN, dir, plev, 0);
1942 case 2: /* Detect Evil */
1943 (void)detect_monsters_evil(DETECT_RAD_DEFAULT);
1945 case 3: /* Stinking Cloud */
1946 if (!get_aim_dir(&dir)) return FALSE;
1948 fire_ball(GF_POIS, dir, 10 + (plev / 2), 2);
1950 case 4: /* Black Sleep */
1951 if (!get_aim_dir(&dir)) return FALSE;
1953 (void)sleep_monster(dir);
1955 case 5: /* Resist Poison */
1956 (void)set_oppose_pois(randint1(20) + 20, FALSE);
1958 case 6: /* Horrify */
1959 if (!get_aim_dir(&dir)) return FALSE;
1961 (void)fear_monster(dir, plev);
1962 (void)stun_monster(dir, plev);
1964 case 7: /* Enslave Undead */
1965 if (!get_aim_dir(&dir)) return FALSE;
1967 (void)control_one_undead(dir, plev);
1969 case 8: /* Orb of Entropy */
1970 if (!get_aim_dir(&dir)) return FALSE;
1972 fire_ball(GF_OLD_DRAIN, dir,
1973 (damroll(3, 6) + plev +
1974 (plev / (((p_ptr->pclass == CLASS_MAGE) ||
1975 (p_ptr->pclass == CLASS_HIGH_MAGE) ||
1976 (p_ptr->pclass == CLASS_SORCERER)) ? 2 : 4))),
1977 ((plev < 30) ? 2 : 3));
1979 case 9: /* Nether Bolt */
1980 if (!get_aim_dir(&dir)) return FALSE;
1982 fire_bolt_or_beam(beam, GF_NETHER, dir,
1983 damroll(8 + ((plev - 5) / 4), 8));
1985 case 10: /* Cloud kill */
1986 project(0, plev / 10 + 2, py, px,
1987 (30 + plev) * 2, GF_POIS, PROJECT_KILL | PROJECT_ITEM, -1);
1989 case 11: /* Genocide One */
1990 if (!get_aim_dir(&dir)) return FALSE;
1992 fire_ball_hide(GF_GENOCIDE, dir, plev + 50, 0);
1994 case 12: /* Poison Branding */
1997 case 13: /* Vampiric Drain */
1998 if (!get_aim_dir(&dir)) return FALSE;
2000 dummy = plev * 2 + randint1(plev * 2); /* Dmg */
2001 if (drain_life(dir, dummy))
2003 chg_virtue(V_SACRIFICE, -1);
2004 chg_virtue(V_VITALITY, -1);
2006 (void)hp_player(dummy);
2007 /* Gain nutritional sustenance: 150/hp drained */
2008 /* A Food ration gives 5000 food points (by contrast) */
2009 /* Don't ever get more than "Full" this way */
2010 /* But if we ARE Gorged, it won't cure us */
2011 dummy = p_ptr->food + MIN(5000, 100 * dummy);
2012 if (p_ptr->food < PY_FOOD_MAX) /* Not gorged already */
2013 (void)set_food(dummy >= PY_FOOD_MAX ? PY_FOOD_MAX - 1 : dummy);
2016 case 14: /* Animate Dead */
2017 animate_dead(0, py, px);
2019 case 15: /* Genocide */
2020 (void)symbol_genocide(plev+50, TRUE);
2022 case 16: /* Berserk */
2023 (void)set_shero(randint1(25) + 25, FALSE);
2024 (void)hp_player(30);
2025 (void)set_afraid(0);
2027 case 17: /* Invoke Spirits */
2029 int die = randint1(100) + plev / 5;
2030 int vir = virtue_number(V_CHANCE);
2033 if (p_ptr->virtues[vir - 1] > 0)
2035 while (randint1(400) < p_ptr->virtues[vir - 1]) die++;
2039 while (randint1(400) < (0-p_ptr->virtues[vir - 1])) die--;
2043 if (!get_aim_dir(&dir)) return FALSE;
2046 msg_print("¤¢¤Ê¤¿¤Ï»à¼Ô¤¿¤Á¤ÎÎϤò¾·½¸¤·¤¿...");
2048 msg_print("You call on the power of the dead...");
2051 chg_virtue(V_CHANCE, 1);
2055 msg_print("¤¢¤Ê¤¿¤Ï¤ª¤É¤í¤ª¤É¤í¤·¤¤ÎϤΤ¦¤Í¤ê¤ò´¶¤¸¤¿¡ª");
2057 msg_print("You feel a surge of eldritch force!");
2064 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¤¢¤Ê¤¿¤Î¼þ¤ê¤ÎÃÏÌ̤«¤éµà¤Á¤¿¿Í±Æ¤¬Î©¤Á¾å¤¬¤Ã¤Æ¤¤¿¡ª");
2066 msg_print("Oh no! Mouldering forms rise from the earth around you!");
2069 (void)summon_specific(0, py, px, dun_level, SUMMON_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
2070 chg_virtue(V_UNLIFE, 1);
2075 msg_print("̾¾õ¤·Æñ¤¤¼Ù°¤Ê¸ºß¤¬¤¢¤Ê¤¿¤Î¿´¤òÄ̤ê²á¤®¤Æ¹Ô¤Ã¤¿...");
2077 msg_print("An unnamable evil brushes against your mind...");
2080 set_afraid(p_ptr->afraid + randint1(4) + 4);
2085 msg_print("¤¢¤Ê¤¿¤ÎƬ¤ËÂçÎ̤ÎÍ©Î¤Á¤ÎÁû¡¹¤·¤¤À¼¤¬²¡¤·´ó¤»¤Æ¤¤¿...");
2087 msg_print("Your head is invaded by a horde of gibbering spectral voices...");
2090 set_confused(p_ptr->confused + randint1(4) + 4);
2098 fire_bolt_or_beam(beam - 10, GF_MISSILE, dir,
2099 damroll(3 + ((plev - 1) / 5), 4));
2103 confuse_monster (dir, plev);
2107 fire_ball(GF_POIS, dir, 20 + (plev / 2), 3);
2111 (void)lite_line(dir);
2115 fire_bolt_or_beam(beam - 10, GF_ELEC, dir,
2116 damroll(3+((plev-5)/4),8));
2120 fire_bolt_or_beam(beam - 10, GF_COLD, dir,
2121 damroll(5+((plev-5)/4),8));
2125 fire_bolt_or_beam(beam, GF_ACID, dir,
2126 damroll(6+((plev-5)/4),8));
2130 fire_bolt_or_beam(beam, GF_FIRE, dir,
2131 damroll(8+((plev-5)/4),8));
2135 drain_life(dir, 75);
2139 fire_ball(GF_ELEC, dir, 30 + plev / 2, 2);
2143 fire_ball(GF_ACID, dir, 40 + plev, 2);
2147 fire_ball(GF_ICE, dir, 70 + plev, 3);
2151 fire_ball(GF_FIRE, dir, 80 + plev, 3);
2155 drain_life(dir, 100 + plev);
2159 earthquake(py, px, 12);
2163 destroy_area(py, px, 13+randint0(5), TRUE);
2167 symbol_genocide(plev+50, TRUE);
2171 dispel_monsters(120);
2175 dispel_monsters(150);
2183 msg_print("±¢±µ¤ÊÀ¼¤¬¥¯¥¹¥¯¥¹¾Ð¤¦¡£¡Ö¤â¤¦¤¹¤°¤ª¤Þ¤¨¤Ï²æ¡¹¤ÎÃç´Ö¤Ë¤Ê¤ë¤À¤í¤¦¡£¼å¤¼Ô¤è¡£¡×");
2185 msg_print("Sepulchral voices chuckle. 'Soon you will join us, mortal.'");
2190 case 18: /* Dark Bolt */
2191 if (!get_aim_dir(&dir)) return FALSE;
2193 fire_bolt_or_beam(beam, GF_DARK, dir,
2194 damroll(4 + ((plev - 5) / 4), 8));
2196 case 19: /* Battle Frenzy */
2197 (void)set_shero(randint1(25) + 25, FALSE);
2198 (void)hp_player(30);
2199 (void)set_afraid(0);
2200 (void)set_fast(randint1(20 + (plev / 2)) + (plev / 2), FALSE);
2202 case 20: /* Vampiric Branding */
2205 case 21: /* Vampirism True */
2206 if (!get_aim_dir(&dir)) return FALSE;
2208 chg_virtue(V_SACRIFICE, -1);
2209 chg_virtue(V_VITALITY, -1);
2211 for (dummy = 0; dummy < 3; dummy++)
2213 if (drain_life(dir, 100))
2217 case 22: /* Word of Death */
2218 (void)dispel_living(randint1(plev * 3));
2220 case 23: /* Darkness Storm */
2221 if (!get_aim_dir(&dir)) return FALSE;
2223 fire_ball(GF_DARK, dir, 100+plev*2, 4);
2225 case 24: /* Death Ray */
2226 if (!get_aim_dir(&dir)) return FALSE;
2228 (void)death_ray(dir, plev);
2230 case 25: /* Raise the Dead */
2233 bool pet = one_in_(3);
2236 type = (plev > 47 ? SUMMON_HI_UNDEAD : SUMMON_UNDEAD);
2238 if (!pet || (pet && (plev > 24) && one_in_(3)))
2239 mode |= PM_ALLOW_GROUP;
2241 if (pet) mode |= PM_FORCE_PET;
2242 else mode |= (PM_ALLOW_UNIQUE | PM_NO_PET);
2244 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, type, mode))
2247 msg_print("Î䤿¤¤É÷¤¬¤¢¤Ê¤¿¤Î¼þ¤ê¤Ë¿á¤»Ï¤á¤¿¡£¤½¤ì¤ÏÉåÇÔ½¤ò±¿¤ó¤Ç¤¤¤ë...");
2249 msg_print("Cold winds begin to blow around you, carrying with them the stench of decay...");
2255 msg_print("¸Å¤¨¤Î»à¤»¤ë¼Ô¶¦¤¬¤¢¤Ê¤¿¤Ë»Å¤¨¤ë¤¿¤áÅÚ¤«¤éᴤä¿¡ª");
2257 msg_print("Ancient, long-dead forms arise from the ground to serve you!");
2262 msg_print("»à¼Ô¤¬á´¤Ã¤¿¡£Ì²¤ê¤ò˸¤²¤ë¤¢¤Ê¤¿¤òȳ¤¹¤ë¤¿¤á¤Ë¡ª");
2264 msg_print("'The dead arise... to punish you for disturbing them!'");
2267 chg_virtue(V_UNLIFE, 1);
2272 case 26: /* Esoteria */
2273 if (randint1(50) > plev)
2274 return ident_spell(FALSE, FALSE);
2276 return identify_fully(FALSE, FALSE);
2278 case 27: /* Mimic vampire */
2279 (void)set_mimic(10+plev/2 + randint1(10+plev/2), MIMIC_VAMPIRE, FALSE);
2281 case 28: /* Restore Life */
2282 (void)restore_level();
2284 case 29: /* Mass Genocide */
2285 (void)mass_genocide(plev+50, TRUE);
2287 case 30: /* Hellfire */
2288 if (!get_aim_dir(&dir)) return FALSE;
2290 fire_ball(GF_HELL_FIRE, dir, 666, 3);
2292 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "ÃϹö¤Î¹å²Ð¤Î¼öʸ¤ò¾§¤¨¤¿ÈèÏ«", -1);
2294 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "the strain of casting Hellfire", -1);
2298 case 31: /* Wraithform */
2299 set_wraith_form(randint1(plev / 2) + (plev / 2), FALSE);
2302 msg_format("You cast an unknown Death spell: %d.", spell);
2310 static bool cast_trump_spell(int spell, bool success)
2314 int plev = p_ptr->lev;
2315 int summon_lev = plev * 2 / 3 + randint1(plev/2);
2317 bool no_trump = FALSE;
2318 bool unique_okay = FALSE;
2321 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
2322 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
2323 else beam = plev / 2;
2325 if (summon_lev < 1) summon_lev = 1;
2326 if (!success || (randint1(50+plev) < plev/10)) unique_okay = TRUE;
2329 case 0: /* Phase Door */
2332 teleport_player(10);
2335 case 1: /* Trump Spiders */
2337 bool pet = success; /* (randint1(5) > 2) */
2338 u32b mode = PM_ALLOW_GROUP;
2340 if (pet) mode |= PM_FORCE_PET;
2341 else mode |= PM_NO_PET;
2344 msg_print("¤¢¤Ê¤¿¤ÏÃØéá¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2346 msg_print("You concentrate on the trump of an spider...");
2349 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_SPIDER, mode))
2353 msg_print("¾¤´Ô¤µ¤ì¤¿ÃØéá¤ÏÅܤäƤ¤¤ë¡ª");
2355 msg_print("The summoned spiders get angry!");
2365 case 2: /* Shuffle */
2368 /* A limited power 'wonder' spell */
2369 int die = randint1(120);
2370 int vir = virtue_number(V_CHANCE);
2372 if ((p_ptr->pclass == CLASS_ROGUE) ||
2373 (p_ptr->pclass == CLASS_HIGH_MAGE) ||
2374 (p_ptr->pclass == CLASS_SORCERER))
2375 die = (randint1(110)) + plev / 5;
2376 /* Card sharks and high mages get a level bonus */
2380 if (p_ptr->virtues[vir - 1] > 0)
2382 while (randint1(400) < p_ptr->virtues[vir - 1]) die++;
2386 while (randint1(400) < (0-p_ptr->virtues[vir - 1])) die--;
2391 msg_print("¤¢¤Ê¤¿¤Ï¥«¡¼¥É¤òÀڤäưìËç°ú¤¤¤¿...");
2393 msg_print("You shuffle the deck and draw a card...");
2397 chg_virtue(V_CHANCE, 1);
2402 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡Ô»à¡Õ¤À¡ª");
2404 msg_print("Oh no! It's Death!");
2407 for (dummy = 0; dummy < randint1(3); dummy++)
2408 (void)activate_hi_summon(py, px, FALSE);
2413 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡Ô°Ëâ¡Õ¤À¡ª");
2415 msg_print("Oh no! It's the Devil!");
2418 (void)summon_specific(0, py, px, dun_level, SUMMON_DEMON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
2424 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡ÔÄߤé¤ì¤¿ÃË¡Õ¤À¡ª");
2426 msg_print("Oh no! It's the Hanged Man.");
2429 (void)activate_ty_curse(FALSE, &count);
2434 msg_print("¡ÔÉÔĴϤηõ¡Õ¤À¡£");
2436 msg_print("It's the swords of discord.");
2439 aggravate_monsters(0);
2444 msg_print("¡Ô¶ò¼Ô¡Õ¤À¡£");
2446 msg_print("It's the Fool.");
2449 (void)do_dec_stat(A_INT);
2450 (void)do_dec_stat(A_WIS);
2455 msg_print("´ñ̯¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
2457 msg_print("It's the picture of a strange monster.");
2460 if (!(summon_specific(0, py, px, (dun_level * 3) / 2, 32 + randint1(6), (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET))))
2466 msg_print("¡Ô·î¡Õ¤À¡£");
2468 msg_print("It's the Moon.");
2476 msg_print("¡Ô±¿Ì¿¤ÎÎØ¡Õ¤À¡£");
2478 msg_print("It's the Wheel of Fortune.");
2481 wild_magic(randint0(32));
2486 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
2488 msg_print("It's a teleport trump card.");
2491 teleport_player(10);
2496 msg_print("¡ÔÀµµÁ¡Õ¤À¡£");
2498 msg_print("It's Justice.");
2501 set_blessed(p_ptr->lev, FALSE);
2506 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
2508 msg_print("It's a teleport trump card.");
2511 teleport_player(100);
2516 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
2518 msg_print("It's a teleport trump card.");
2521 teleport_player(200);
2526 msg_print("¡ÔÅã¡Õ¤À¡£");
2528 msg_print("It's the Tower.");
2536 msg_print("¡ÔÀáÀ©¡Õ¤À¡£");
2538 msg_print("It's Temperance.");
2541 sleep_monsters_touch();
2546 msg_print("¡ÔÅã¡Õ¤À¡£");
2548 msg_print("It's the Tower.");
2551 earthquake(py, px, 5);
2556 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
2558 msg_print("It's the picture of a friendly monster.");
2561 if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE1, PM_FORCE_PET)))
2567 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
2569 msg_print("It's the picture of a friendly monster.");
2572 if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE2, PM_FORCE_PET)))
2578 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
2580 msg_print("It's the picture of a friendly monster.");
2583 if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE4, PM_FORCE_PET)))
2589 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
2591 msg_print("It's the picture of a friendly monster.");
2594 if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE5, PM_FORCE_PET)))
2600 msg_print("¡ÔÎø¿Í¡Õ¤À¡£");
2602 msg_print("It's the Lovers.");
2605 if (get_aim_dir(&dir))
2606 (void)charm_monster(dir, MIN(p_ptr->lev, 20));
2611 msg_print("¡Ô±£¼Ô¡Õ¤À¡£");
2613 msg_print("It's the Hermit.");
2621 msg_print("¡Ô¿³È½¡Õ¤À¡£");
2623 msg_print("It's the Judgement.");
2626 do_cmd_rerate(FALSE);
2627 if (p_ptr->muta1 || p_ptr->muta2 || p_ptr->muta3)
2630 msg_print("Á´¤Æ¤ÎÆÍÁ³ÊÑ°Û¤¬¼£¤Ã¤¿¡£");
2632 msg_print("You are cured of all mutations.");
2635 p_ptr->muta1 = p_ptr->muta2 = p_ptr->muta3 = 0;
2636 p_ptr->update |= PU_BONUS;
2643 msg_print("¡ÔÂÀÍÛ¡Õ¤À¡£");
2645 msg_print("It's the Sun.");
2648 chg_virtue(V_KNOWLEDGE, 1);
2649 chg_virtue(V_ENLIGHTEN, 1);
2650 wiz_lite(FALSE, FALSE);
2655 msg_print("¡ÔÀ¤³¦¡Õ¤À¡£");
2657 msg_print("It's the World.");
2660 if (p_ptr->exp < PY_MAX_EXP)
2662 s32b ee = (p_ptr->exp / 25) + 1;
2663 if (ee > 5000) ee = 5000;
2665 msg_print("¹¹¤Ë·Ð¸³¤òÀѤó¤À¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
2667 msg_print("You feel more experienced.");
2675 case 3: /* Reset Recall */
2678 if (!reset_recall()) return FALSE;
2681 case 4: /* Teleport Self */
2684 teleport_player(plev * 4);
2687 case 5: /* Trump Spying */
2690 (void)set_tim_esp(randint1(30) + 25, FALSE);
2693 case 6: /* Teleport Away */
2696 if (!get_aim_dir(&dir)) return FALSE;
2697 (void)fire_beam(GF_AWAY_ALL, dir, plev);
2700 case 7: /* Trump Animals */
2702 bool pet = success; /* was (randint1(5) > 2) */
2703 int type = (pet ? SUMMON_ANIMAL_RANGER : SUMMON_ANIMAL);
2706 if (pet) mode |= PM_FORCE_PET;
2707 else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
2710 msg_print("¤¢¤Ê¤¿¤Ïưʪ¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2712 msg_print("You concentrate on the trump of an animal...");
2716 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, type, mode))
2720 msg_print("¾¤´¤µ¤ì¤¿Æ°Êª¤ÏÅܤäƤ¤¤ë¡ª");
2722 msg_print("The summoned animal gets angry!");
2733 case 8: /* Trump Reach */
2736 if (!get_aim_dir(&dir)) return FALSE;
2737 fetch(dir, plev * 15, TRUE);
2740 case 9: /* Trump Kamikaze */
2745 if (!target_set(TARGET_KILL)) return FALSE;
2752 msg_print("¤¢¤Ê¤¿¤Ï¥«¥ß¥«¥¼¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2754 msg_print("You concentrate on several trumps at once...");
2758 for (dummy = 2 + randint0(plev / 7); dummy > 0; dummy--)
2760 bool pet = success; /* was (randint1(10) > 3) */
2764 if (pet) mode |= PM_FORCE_PET;
2765 else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
2767 if (p_ptr->pclass == CLASS_BEASTMASTER)
2769 type = SUMMON_KAMIKAZE_LIVING;
2773 type = SUMMON_KAMIKAZE;
2776 if (summon_specific((pet ? -1 : 0), y, x, summon_lev, type, mode))
2780 msg_print("¾¤´Ô¤µ¤ì¤¿¥â¥ó¥¹¥¿¡¼¤ÏÅܤäƤ¤¤ë¡ª");
2782 msg_print("The summoned creatures get angry!");
2790 case 10: /* Phantasmal Servant */
2793 if (summon_specific(-1, py, px, (summon_lev * 3) / 2, SUMMON_PHANTOM, PM_FORCE_PET))
2796 msg_print("¸æÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¸æ¼ç¿ÍÍÍ¡©");
2798 msg_print("'Your wish, master?'");
2808 case 11: /* Speed Monster */
2811 bool old_target_pet = target_pet;
2813 if (!get_aim_dir(&dir))
2815 target_pet = old_target_pet;
2818 target_pet = old_target_pet;
2819 (void)speed_monster(dir);
2822 case 12: /* Teleport Level */
2826 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return FALSE;
2828 if (!get_check("Are you sure? (Teleport Level)")) return FALSE;
2830 (void)teleport_player_level();
2833 case 13: /* Dimension Door */
2837 msg_print("¼¡¸µ¤ÎÈ⤬³«¤¤¤¿¡£ÌÜŪÃϤòÁª¤ó¤Ç²¼¤µ¤¤¡£");
2839 msg_print("You open a dimensional gate. Choose a destination.");
2842 return dimension_door();
2845 case 14: /* Word of Recall */
2848 if (!word_of_recall()) return FALSE;
2851 case 15: /* Banish */
2854 banish_monsters(plev * 4);
2857 case 16: /* Swap Position */
2861 project_length = -1;
2862 if (!get_aim_dir(&dir))
2869 (void)teleport_swap(dir);
2873 case 17: /* Trump Undead */
2875 bool pet = success; /* (randint1(10) > 3) */
2878 if (pet) mode |= PM_FORCE_PET;
2879 else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
2882 msg_print("¤¢¤Ê¤¿¤Ï¥¢¥ó¥Ç¥Ã¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2884 msg_print("You concentrate on the trump of an undead creature...");
2888 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_UNDEAD, mode))
2892 msg_print("¾¤´Ô¤µ¤ì¤¿¥¢¥ó¥Ç¥Ã¥É¤ÏÅܤäƤ¤¤ë¡ª");
2894 msg_print("The summoned undead creature gets angry!");
2905 case 18: /* Trump Reptiles */
2907 bool pet = success; /* was (randint1(5) > 2) */
2910 if (pet) mode |= PM_FORCE_PET;
2911 else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
2914 msg_print("¤¢¤Ê¤¿¤Ïà¨ÃîÎà¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2916 msg_print("You concentrate on the trump of a reptile...");
2920 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HYDRA, mode))
2924 msg_print("¾¤´Ô¤µ¤ì¤¿à¨ÃîÎà¤ÏÅܤäƤ¤¤ë¡ª");
2926 msg_print("The summoned reptile gets angry!");
2937 case 19: /* Trump Monsters */
2942 msg_print("¤¢¤Ê¤¿¤Ï¥â¥ó¥¹¥¿¡¼¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2944 msg_print("You concentrate on several trumps at once...");
2948 for (dummy = 0; dummy < 1 + ((plev - 15)/ 10); dummy++)
2950 bool pet = success; /* was (randint1(10) > 3) */
2954 if (pet) mode |= PM_FORCE_PET;
2955 else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
2957 if (unique_okay) mode |= PM_ALLOW_UNIQUE;
2959 if (p_ptr->pclass == CLASS_BEASTMASTER)
2961 type = SUMMON_LIVING;
2968 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, type, mode))
2972 msg_print("¾¤´Ô¤µ¤ì¤¿¥â¥ó¥¹¥¿¡¼¤ÏÅܤäƤ¤¤ë¡ª");
2974 msg_print("The summoned creatures get angry!");
2982 case 20: /* Trump Hounds */
2984 bool pet = success; /* was (randint1(5) > 2) */
2985 u32b mode = PM_ALLOW_GROUP;
2987 if (pet) mode |= PM_FORCE_PET;
2988 else mode |= PM_NO_PET;
2991 msg_print("¤¢¤Ê¤¿¤Ï¥Ï¥¦¥ó¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2993 msg_print("You concentrate on the trump of a hound...");
2997 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HOUND, mode))
3001 msg_print("¾¤´Ô¤µ¤ì¤¿¥Ï¥¦¥ó¥É¤ÏÅܤäƤ¤¤ë¡ª");
3003 msg_print("The summoned hounds get angry!");
3014 case 21: /* Trump Branding */
3020 case 22: /* Living Trump */
3024 /* Teleport control */
3027 /* Random teleportation (uncontrolled) */
3029 /* Gain the mutation */
3030 if (gain_random_mutation(dummy))
3032 msg_print("¤¢¤Ê¤¿¤ÏÀ¸¤¤Æ¤¤¤ë¥«¡¼¥É¤ËÊѤï¤Ã¤¿¡£");
3034 msg_print("You have turned into a Living Trump.");
3039 case 23: /* Trump Cyberdemon */
3041 bool pet = success; /* was (randint1(10) > 3) */
3044 if (pet) mode |= PM_FORCE_PET;
3045 else mode |= PM_NO_PET;
3048 msg_print("¤¢¤Ê¤¿¤Ï¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3050 msg_print("You concentrate on the trump of a Cyberdemon...");
3054 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_CYBER, mode))
3058 msg_print("¾¤´Ô¤µ¤ì¤¿¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤ÏÅܤäƤ¤¤ë¡ª");
3060 msg_print("The summoned Cyberdemon gets angry!");
3071 case 24: /* Trump Divination */
3074 (void)detect_all(DETECT_RAD_DEFAULT);
3077 case 25: /* Trump Lore */
3080 return identify_fully(FALSE, FALSE);
3083 case 26: /* Heal Monster */
3086 bool old_target_pet = target_pet;
3088 if (!get_aim_dir(&dir))
3090 target_pet = old_target_pet;
3093 target_pet = old_target_pet;
3095 (void)heal_monster(dir, p_ptr->lev * 10 + 200);
3098 case 27: /* Trump Dragon */
3100 bool pet = success; /* was (randint1(10) > 3) */
3103 if (pet) mode |= PM_FORCE_PET;
3104 else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
3107 msg_print("¤¢¤Ê¤¿¤Ï¥É¥é¥´¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3109 msg_print("You concentrate on the trump of a dragon...");
3113 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_DRAGON, mode))
3117 msg_print("¾¤´Ô¤µ¤ì¤¿¥É¥é¥´¥ó¤ÏÅܤäƤ¤¤ë¡ª");
3119 msg_print("The summoned dragon gets angry!");
3130 case 28: /* Trump Meteor */
3133 int x, y, dx, dy, i;
3134 int b = 10 + randint1(10);
3135 for (i = 0; i < b; i++)
3137 int count = 0, d = 0;
3142 if (count > 20) break;
3143 x = px - 8 + randint0(17);
3144 y = py - 8 + randint0(17);
3146 if (!in_bounds(y,x) || (!cave_floor_bold(y,x) && (cave[y][x].feat != FEAT_TREES)) || !player_has_los_bold(y, x)) continue;
3148 dx = (px > x) ? (px - x) : (x - px);
3149 dy = (py > y) ? (py - y) : (y - py);
3151 /* Approximate distance */
3152 d = (dy > dx) ? (dy + (dx >> 1)) : (dx + (dy >> 1));
3156 if (count > 20) continue;
3158 project(0, 2, y, x, plev * 2, GF_METEOR, PROJECT_KILL | PROJECT_JUMP | PROJECT_ITEM, -1);
3162 case 29: /* Trump Demon */
3164 bool pet = success; /* was (randint1(10) > 3) */
3167 if (pet) mode |= PM_FORCE_PET;
3168 else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
3171 msg_print("¤¢¤Ê¤¿¤Ï¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3173 msg_print("You concentrate on the trump of a demon...");
3177 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_DEMON, mode))
3181 msg_print("¾¤´Ô¤µ¤ì¤¿¥Ç¡¼¥â¥ó¤ÏÅܤäƤ¤¤ë¡ª");
3183 msg_print("The summoned demon gets angry!");
3194 case 30: /* Trump Greater Undead */
3196 bool pet = success; /* was (randint1(10) > 3) */
3199 if (pet) mode |= PM_FORCE_PET;
3200 else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
3202 if (unique_okay) mode |= PM_ALLOW_UNIQUE;
3205 msg_print("¤¢¤Ê¤¿¤Ï¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3207 msg_print("You concentrate on the trump of a greater undead being...");
3211 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HI_UNDEAD, mode))
3215 msg_print("¾¤´Ô¤µ¤ì¤¿¾åµé¥¢¥ó¥Ç¥Ã¥É¤ÏÅܤäƤ¤¤ë¡ª");
3217 msg_print("The summoned greater undead creature gets angry!");
3228 case 31: /* Trump Ancient Dragon */
3230 bool pet = success; /* was (randint1(10) > 3) */
3234 if (pet) mode |= PM_FORCE_PET;
3235 else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
3237 if (unique_okay) mode |= PM_ALLOW_UNIQUE;
3239 if (p_ptr->pclass == CLASS_BEASTMASTER)
3241 type = SUMMON_HI_DRAGON_LIVING;
3245 type = SUMMON_HI_DRAGON;
3249 msg_print("¤¢¤Ê¤¿¤Ï¸ÅÂå¥É¥é¥´¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3251 msg_print("You concentrate on the trump of an ancient dragon...");
3255 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, type, mode))
3259 msg_print("¾¤´Ô¤µ¤ì¤¿¸ÅÂå¥É¥é¥´¥ó¤ÏÅܤäƤ¤¤ë¡ª");
3261 msg_print("The summoned ancient dragon gets angry!");
3274 msg_format("̤ÃΤΥ«¡¼¥É¤Î¼öʸ¤Ç¤¹: %d", spell);
3276 msg_format("You cast an unknown Trump spell: %d.", spell);
3285 msg_print("ï¤â¤¢¤Ê¤¿¤Î¥«¡¼¥É¤Î¸Æ¤ÓÀ¼¤ËÅú¤¨¤Ê¤¤¡£");
3287 msg_print("Nobody answers to your Trump call.");
3296 static bool cast_arcane_spell(int spell)
3300 int plev = p_ptr->lev;
3302 bool no_trump = FALSE;
3304 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
3305 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
3306 else beam = plev / 2;
3311 if (!get_aim_dir(&dir)) return FALSE;
3313 fire_bolt_or_beam(beam - 10, GF_ELEC, dir,
3314 damroll(3 + ((plev - 1) / 5), 3));
3316 case 1: /* Wizard Lock */
3317 if (!get_aim_dir(&dir)) return FALSE;
3319 (void)wizard_lock(dir);
3321 case 2: /* Detect Invisibility */
3322 (void)detect_monsters_invis(DETECT_RAD_DEFAULT);
3324 case 3: /* Detect Monsters */
3325 (void)detect_monsters_normal(DETECT_RAD_DEFAULT);
3328 teleport_player(10);
3330 case 5: /* Light Area */
3331 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
3333 case 6: /* Trap & Door Destruction */
3334 if (!get_aim_dir(&dir)) return FALSE;
3336 (void)destroy_door(dir);
3338 case 7: /* Cure Light Wounds */
3339 (void)hp_player(damroll(2, 8));
3340 (void)set_cut(p_ptr->cut - 10);
3342 case 8: /* Detect Doors & Traps */
3343 (void)detect_traps(DETECT_RAD_DEFAULT);
3344 (void)detect_doors(DETECT_RAD_DEFAULT);
3345 (void)detect_stairs(DETECT_RAD_DEFAULT);
3347 case 9: /* Phlogiston */
3350 case 10: /* Detect Treasure */
3351 (void)detect_treasure(DETECT_RAD_DEFAULT);
3352 (void)detect_objects_gold(DETECT_RAD_DEFAULT);
3354 case 11: /* Detect Enchantment */
3355 (void)detect_objects_magic(DETECT_RAD_DEFAULT);
3357 case 12: /* Detect Objects */
3358 (void)detect_objects_normal(DETECT_RAD_DEFAULT);
3360 case 13: /* Cure Poison */
3361 (void)set_poisoned(0);
3363 case 14: /* Resist Cold */
3364 (void)set_oppose_cold(randint1(20) + 20, FALSE);
3366 case 15: /* Resist Fire */
3367 (void)set_oppose_fire(randint1(20) + 20, FALSE);
3369 case 16: /* Resist Lightning */
3370 (void)set_oppose_elec(randint1(20) + 20, FALSE);
3372 case 17: /* Resist Acid */
3373 (void)set_oppose_acid(randint1(20) + 20, FALSE);
3375 case 18: /* Cure Medium Wounds */
3376 (void)hp_player(damroll(4, 8));
3377 (void)set_cut((p_ptr->cut / 2) - 50);
3379 case 19: /* Teleport */
3380 teleport_player(plev * 5);
3382 case 20: /* Identify */
3383 return ident_spell(FALSE, FALSE);
3384 case 21: /* Stone to Mud */
3385 if (!get_aim_dir(&dir)) return FALSE;
3387 (void)wall_to_mud(dir);
3389 case 22: /* Ray of Light */
3390 if (!get_aim_dir(&dir)) return FALSE;
3393 msg_print("¸÷Àþ¤¬Êü¤¿¤ì¤¿¡£");
3395 msg_print("A line of light appears.");
3398 (void)lite_line(dir);
3400 case 23: /* Satisfy Hunger */
3401 (void)set_food(PY_FOOD_MAX - 1);
3403 case 24: /* See Invisible */
3404 (void)set_tim_invis(randint1(24) + 24, FALSE);
3406 case 25: /* Conjure Elemental */
3407 if (!summon_specific(-1, py, px, plev, SUMMON_ELEMENTAL, (PM_ALLOW_GROUP | PM_FORCE_PET)))
3410 case 26: /* Teleport Level */
3412 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return FALSE;
3414 if (!get_check("Are you sure? (Teleport Level)")) return FALSE;
3416 (void)teleport_player_level();
3418 case 27: /* Teleport Away */
3419 if (!get_aim_dir(&dir)) return FALSE;
3421 (void)fire_beam(GF_AWAY_ALL, dir, plev);
3423 case 28: /* Elemental Ball */
3424 if (!get_aim_dir(&dir)) return FALSE;
3426 switch (randint1(4))
3428 case 1: dummy = GF_FIRE;break;
3429 case 2: dummy = GF_ELEC;break;
3430 case 3: dummy = GF_COLD;break;
3431 default: dummy = GF_ACID;break;
3433 fire_ball(dummy, dir, 75 + (plev), 2);
3435 case 29: /* Detection */
3436 (void)detect_all(DETECT_RAD_DEFAULT);
3438 case 30: /* Word of Recall */
3439 if (!word_of_recall()) return FALSE;
3441 case 31: /* Clairvoyance */
3442 chg_virtue(V_KNOWLEDGE, 1);
3443 chg_virtue(V_ENLIGHTEN, 1);
3444 wiz_lite(FALSE, FALSE);
3445 if (!p_ptr->telepathy)
3447 (void)set_tim_esp(randint1(30) + 25, FALSE);
3451 msg_format("You cast an unknown Arcane spell: %d.", spell);
3457 msg_print("¥¨¥ì¥á¥ó¥¿¥ë¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3459 msg_print("No Elementals arrive.");
3466 static bool cast_enchant_spell(int spell)
3468 int plev = p_ptr->lev;
3470 bool no_trump = FALSE;
3474 case 0: /* Infravision */
3475 set_tim_infra(100 + randint1(100), FALSE);
3477 case 1: /* Regeneration */
3478 set_tim_regen(80 + randint1(80), FALSE);
3480 case 2: /* Satisfy Hunger */
3481 (void)set_food(PY_FOOD_MAX - 1);
3483 case 3: /* Resist Cold */
3484 (void)set_oppose_cold(randint1(20) + 20, FALSE);
3486 case 4: /* Resist Fire */
3487 (void)set_oppose_fire(randint1(20) + 20, FALSE);
3489 case 5: /* Heroism */
3490 (void)set_hero(randint1(25) + 25, FALSE);
3491 (void)hp_player(10);
3492 (void)set_afraid(0);
3494 case 6: /* Resist Lightning */
3495 (void)set_oppose_elec(randint1(20) + 20, FALSE);
3497 case 7: /* Resist Acid */
3498 (void)set_oppose_acid(randint1(20) + 20, FALSE);
3500 case 8: /* See Invisibility */
3501 (void)set_tim_invis(randint1(24) + 24, FALSE);
3503 case 9: /* Remove Curse */
3507 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
3509 msg_print("You feel as if someone is watching over you.");
3513 case 10: /* Resist Poison */
3514 (void)set_oppose_pois(randint1(20) + 20, FALSE);
3516 case 11: /* Berserk */
3517 (void)set_shero(randint1(25) + 25, FALSE);
3518 (void)hp_player(30);
3519 (void)set_afraid(0);
3521 case 12: /* Self Knowledge */
3522 (void)self_knowledge();
3524 case 13: /* Protection from Evil */
3525 (void)set_protevil(randint1(25) + 3 * p_ptr->lev, FALSE);
3527 case 14: /* Healing */
3533 case 15: /* Mana Branding */
3534 return choose_ele_attack();
3536 case 16: /* Telepathy */
3537 (void)set_tim_esp(randint1(30) + 25, FALSE);
3539 case 17: /* Stone Skin */
3540 (void)set_shield(randint1(20) + 30, FALSE);
3542 case 18: /* Resistance */
3543 (void)set_oppose_acid(randint1(20) + 20, FALSE);
3544 (void)set_oppose_elec(randint1(20) + 20, FALSE);
3545 (void)set_oppose_fire(randint1(20) + 20, FALSE);
3546 (void)set_oppose_cold(randint1(20) + 20, FALSE);
3547 (void)set_oppose_pois(randint1(20) + 20, FALSE);
3549 case 19: /* Haste */
3550 (void)set_fast(randint1(20 + plev) + plev, FALSE);
3552 case 20: /* Walk through Wall */
3553 (void)set_kabenuke(randint1(plev/2) + plev/2, FALSE);
3555 case 21: /* Pulish Shield */
3556 (void)pulish_shield();
3558 case 22: /* Create Golem */
3559 if (summon_specific(-1, py, px, plev, SUMMON_GOLEM, PM_FORCE_PET))
3562 msg_print("¥´¡¼¥ì¥à¤òºî¤Ã¤¿¡£");
3564 msg_print("You make a golem.");
3572 case 23: /* Magic armor */
3573 (void)set_magicdef(randint1(20) + 20, FALSE);
3575 case 24: /* Remove Enchantment */
3576 if (!mundane_spell(TRUE)) return FALSE;
3578 case 25: /* Remove All Curse */
3579 if (remove_all_curse())
3582 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
3584 msg_print("You feel as if someone is watching over you.");
3588 case 26: /* Total Knowledge */
3589 return identify_fully(FALSE, FALSE);
3591 case 27: /* Enchant Weapon */
3592 return enchant_spell(randint0(4) + 1, randint0(4) + 1, 0);
3594 case 28: /* Enchant Armor */
3595 return enchant_spell(0, 0, randint0(3) + 2);
3597 case 29: /* Brand Weapon */
3598 brand_weapon(randint0(18));
3600 case 30: /* Living Trump */
3602 /* Teleport control */
3605 /* Random teleportation (uncontrolled) */
3607 /* Gain the mutation */
3608 if (gain_random_mutation(dummy))
3610 msg_print("¤¢¤Ê¤¿¤ÏÀ¸¤¤Æ¤¤¤ë¥«¡¼¥É¤ËÊѤï¤Ã¤¿¡£");
3612 msg_print("You have turned into a Living Trump.");
3615 case 31: /* Immune */
3616 return (choose_ele_immune(13 + randint1(13)));
3619 msg_format("You cast an unknown Craft spell: %d.", spell);
3625 msg_print("¤¦¤Þ¤¯¥´¡¼¥ì¥à¤òºî¤ì¤Ê¤«¤Ã¤¿¡£");
3627 msg_print("No Golems arrive.");
3635 * An "item_tester_hook" for offer
3637 static bool item_tester_offer(object_type *o_ptr)
3639 /* Flasks of oil are okay */
3640 if (o_ptr->tval != TV_CORPSE) return (FALSE);
3642 if (o_ptr->sval != SV_CORPSE) return (FALSE);
3644 if (strchr("pht", r_info[o_ptr->pval].d_char)) return (TRUE);
3646 /* Assume not okay */
3651 static bool cast_daemon_spell(int spell)
3654 int plev = p_ptr->lev;
3656 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
3657 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
3658 else beam = plev / 2;
3662 case 0: /* Magic Missile */
3663 if (!get_aim_dir(&dir)) return FALSE;
3665 fire_bolt_or_beam(beam - 10, GF_MISSILE, dir,
3666 damroll(3 + ((plev - 1) / 5), 4));
3668 case 1: /* Detect Undead & Demons -> Unlife */
3669 (void)detect_monsters_nonliving(DETECT_RAD_DEFAULT);
3672 (void)set_blessed(randint1(12) + 12, FALSE);
3674 case 3: /* Resist Fire */
3675 (void)set_oppose_fire(randint1(20) + 20, FALSE);
3677 case 4: /* Horrify */
3678 if (!get_aim_dir(&dir)) return FALSE;
3680 (void)fear_monster(dir, plev);
3681 (void)stun_monster(dir, plev);
3683 case 5: /* Nether Bolt */
3684 if (!get_aim_dir(&dir)) return FALSE;
3686 fire_bolt_or_beam(beam, GF_NETHER, dir,
3687 damroll(6 + ((plev - 5) / 4), 8));
3689 case 6: /* Summon monster, demon */
3690 if (!summon_specific(-1, py, px, (plev * 3) / 2, SUMMON_MANES, (PM_ALLOW_GROUP | PM_FORCE_PET)))
3693 msg_print("¸ÅÂå¤Î»àÎî¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3695 msg_print("No Manes arrive.");
3699 case 7: /* Mini Hellfire */
3700 if (!get_aim_dir(&dir)) return FALSE;
3702 fire_ball(GF_HELL_FIRE, dir,
3703 (damroll(3, 6) + plev +
3704 (plev / (((p_ptr->pclass == CLASS_MAGE) ||
3705 (p_ptr->pclass == CLASS_HIGH_MAGE) ||
3706 (p_ptr->pclass == CLASS_SORCERER)) ? 2 : 4))),
3707 ((plev < 30) ? 2 : 3));
3709 case 8: /* Enslave Demon */
3710 if (!get_aim_dir(&dir)) return FALSE;
3712 (void)control_one_demon(dir, plev);
3714 case 9: /* Vision */
3715 map_area(DETECT_RAD_MAP);
3717 case 10: /* Resist Nether */
3718 (void)set_tim_res_nether(randint1(20) + 20, FALSE);
3720 case 11: /* Plasma Bolt */
3721 if (!get_aim_dir(&dir)) return FALSE;
3723 fire_bolt_or_beam(beam, GF_PLASMA, dir,
3724 damroll(11 + ((plev - 5) / 4), 8));
3726 case 12: /* Fire Ball */
3727 if (!get_aim_dir(&dir)) return FALSE;
3729 fire_ball(GF_FIRE, dir, plev + 55, 2);
3731 case 13: /* Fire Branding */
3734 case 14: /* Nether Ball */
3735 if (!get_aim_dir(&dir)) return FALSE;
3737 fire_ball(GF_NETHER, dir, plev*3/2 + 100, plev / 20+2);
3739 case 15: /* Summon monster, demon */
3741 bool pet = !one_in_(3);
3744 if (pet) mode |= PM_FORCE_PET;
3745 else mode |= PM_NO_PET;
3746 if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
3748 if (summon_specific((pet ? -1 : 0), py, px, plev*2/3+randint1(plev/2), SUMMON_DEMON, mode))
3751 msg_print("ⲫ¤Î°½¤¬½¼Ëþ¤·¤¿¡£");
3753 msg_print("The area fills with a stench of sulphur and brimstone.");
3759 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
3761 msg_print("'What is thy bidding... Master?'");
3766 msg_print("¡ÖÈܤ·¤¼Ô¤è¡¢²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª ¤ªÁ°¤Îº²¤òĺ¤¯¤¾¡ª¡×");
3768 msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'");
3775 msg_print("°Ëâ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3777 msg_print("No Greater Demon arrive.");
3782 case 16: /* Telepathy */
3783 (void)set_tim_esp(randint1(30) + 25, FALSE);
3785 case 17: /* Demoncloak */
3787 int dur=randint1(20) + 20;
3789 set_oppose_fire(dur, FALSE);
3790 set_oppose_cold(dur, FALSE);
3791 set_tim_sh_fire(dur, FALSE);
3795 case 18: /* Rain of Lava */
3796 fire_ball(GF_FIRE, 0, (55 + plev)*2, 3);
3797 fire_ball_hide(GF_LAVA_FLOW, 0, 2+randint1(2), 3);
3799 case 19: /* Plasma ball */
3800 if (!get_aim_dir(&dir)) return FALSE;
3802 fire_ball(GF_PLASMA, dir, plev*3/2 + 80, 2 + plev/40);
3804 case 20: /* Mimic demon */
3805 (void)set_mimic(10+plev/2 + randint1(10+plev/2), MIMIC_DEMON, FALSE);
3807 case 21: /* Nether Wave == Dispel Good */
3808 (void)dispel_monsters(randint1(plev * 2));
3809 (void)dispel_good(randint1(plev * 2));
3812 if (!get_aim_dir(&dir)) return FALSE;
3813 fire_ball(GF_NEXUS, dir, 100 + plev*2, 4);
3815 case 23: /* Hand Doom */
3816 if (!get_aim_dir(&dir)) return FALSE;
3818 else msg_print("<ÇËÌǤμê>¤òÊü¤Ã¤¿¡ª");
3820 else msg_print("You invokes the Hand of Doom!");
3823 fire_ball_hide(GF_HAND_DOOM, dir, plev * 2, 0);
3825 case 24: /* Heroism */
3826 (void)set_hero(randint1(25) + 25, FALSE);
3827 (void)hp_player(10);
3828 (void)set_afraid(0);
3830 case 25: /* Tim resist time */
3831 (void)set_tim_res_time(randint1(20)+20, FALSE);
3833 case 26: /* Circle of Madness */
3834 fire_ball(GF_CHAOS, 0, 50+plev, 3+plev/20);
3835 fire_ball(GF_CONFUSION, 0, 50+plev, 3+plev/20);
3836 fire_ball(GF_CHARM, 0, 20+plev, 3+plev/20);
3838 case 27: /* True Discharge Minion */
3841 case 28: /* Summon Greater Demon */
3848 item_tester_hook = item_tester_offer;
3850 q = "¤É¤Î»àÂΤòÊû¤²¤Þ¤¹¤«? ";
3851 s = "Êû¤²¤é¤ì¤ë»àÂΤò»ý¤Ã¤Æ¤¤¤Ê¤¤¡£";
3853 q = "Sacrifice which corpse? ";
3854 s = "You have nothing to scrifice.";
3856 if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return FALSE;
3858 /* Get the item (in the pack) */
3861 o_ptr = &inventory[item];
3864 /* Get the item (on the floor) */
3867 o_ptr = &o_list[0 - item];
3870 summon_lev = p_ptr->lev * 2 / 3 + r_info[o_ptr->pval].level;
3871 if (summon_specific(-1, py, px, summon_lev, SUMMON_HI_DEMON, (PM_ALLOW_GROUP | PM_FORCE_PET)))
3874 msg_print("ⲫ¤Î°½¤¬½¼Ëþ¤·¤¿¡£");
3876 msg_print("The area fills with a stench of sulphur and brimstone.");
3881 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
3883 msg_print("'What is thy bidding... Master?'");
3886 /* Decrease the item (from the pack) */
3889 inven_item_increase(item, -1);
3890 inven_item_describe(item);
3891 inven_item_optimize(item);
3894 /* Decrease the item (from the floor) */
3897 floor_item_increase(0 - item, -1);
3898 floor_item_describe(0 - item);
3899 floor_item_optimize(0 - item);
3905 msg_print("°Ëâ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3907 msg_print("No Greater Demon arrive.");
3912 case 29: /* Nether Storm */
3913 if (!get_aim_dir(&dir)) return FALSE;
3915 fire_ball(GF_NETHER, dir, plev*15, plev / 5);
3917 case 30: /* Blood curse */
3919 if (!get_aim_dir(&dir)) return FALSE;
3921 fire_ball_hide(GF_BLOOD_CURSE, dir, 600, 0);
3923 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "·ì¤Î¼ö¤¤", -1);
3925 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "Blood curse", -1);
3929 case 31: /* Mimic Demon lord */
3930 (void)set_mimic(15 + randint1(15), MIMIC_DEMON_LORD, FALSE);
3933 msg_format("You cast an unknown Daemon spell: %d.", spell);
3941 static bool cast_crusade_spell(int spell)
3945 int plev = p_ptr->lev;
3947 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
3948 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
3949 else beam = plev / 2;
3954 if (!get_aim_dir(&dir)) return FALSE;
3956 fire_bolt_or_beam(beam - 10, GF_ELEC, dir,
3957 damroll(3 + ((plev - 1) / 5), 4));
3960 (void)detect_monsters_evil(DETECT_RAD_DEFAULT);
3962 case 2: /* Remove Fear */
3963 (void)set_afraid(0);
3966 if (!get_aim_dir(&dir)) return FALSE;
3968 (void)fear_monster(dir, plev);
3971 (void)sleep_monsters_touch();
3974 teleport_player(plev*3);
3977 if (!get_aim_dir(&dir)) return FALSE;
3978 fire_blast(GF_LITE, dir, 3+((plev-1)/9), 2, 10, 3);
3982 (void)set_poisoned(0);
3986 if (!get_aim_dir(&dir)) return FALSE;
3987 (void)fire_ball(GF_AWAY_EVIL, dir, MAX_SIGHT*5, 0);
3989 case 9: /* Holy Orb */
3990 if (!get_aim_dir(&dir)) return FALSE;
3992 fire_ball(GF_HOLY_FIRE, dir,
3993 (damroll(3, 6) + plev +
3994 (plev / ((p_ptr->pclass == CLASS_PRIEST ||
3995 p_ptr->pclass == CLASS_HIGH_MAGE ||
3996 p_ptr->pclass == CLASS_SORCERER) ? 2 : 4))),
3997 ((plev < 30) ? 2 : 3));
4000 case 10: /* Exorcism */
4001 (void)dispel_undead(randint1(plev));
4002 (void)dispel_demons(randint1(plev));
4003 (void)turn_evil(plev);
4005 case 11: /* Remove Curse */
4009 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
4011 msg_print("You feel as if someone is watching over you.");
4015 case 12: /* Sense Unseen */
4016 (void)set_tim_invis(randint1(24) + 24, FALSE);
4018 case 13: /* Protection from Evil */
4019 (void)set_protevil(randint1(25) + 3 * p_ptr->lev, FALSE);
4022 if (!get_aim_dir(&dir)) return FALSE;
4023 (void)fire_bolt(GF_ELEC, dir, plev*5);
4025 case 15: /* Holy Word */
4026 (void)dispel_evil(randint1(plev * 6));
4027 (void)hp_player(100);
4028 (void)set_afraid(0);
4029 (void)set_poisoned(0);
4034 if (!get_aim_dir(&dir)) return FALSE;
4036 (void)destroy_door(dir);
4039 if (!get_aim_dir(&dir)) return FALSE;
4040 (void)stasis_evil(dir);
4043 set_tim_sh_holy(randint1(20)+20, FALSE);
4045 case 19: /* Dispel Undead + Demons */
4046 (void)dispel_undead(randint1(plev * 4));
4047 (void)dispel_demons(randint1(plev * 4));
4049 case 20: /* Dispel Evil */
4050 (void)dispel_evil(randint1(plev * 4));
4055 case 22: /* Star Burst */
4056 if (!get_aim_dir(&dir)) return FALSE;
4058 fire_ball(GF_LITE, dir, 100+plev*2, 4);
4060 case 23: /* Summon monster, angel */
4062 bool pet = !one_in_(3);
4065 if (pet) mode |= PM_FORCE_PET;
4066 else mode |= PM_NO_PET;
4067 if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
4069 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, SUMMON_ANGEL, mode))
4073 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
4075 msg_print("'What is thy bidding... Master?'");
4080 msg_print("¡Ö²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª °¹Ô¼Ô¤è¡¢²ù¤¤²þ¤á¤è¡ª¡×");
4082 msg_print("Mortal! Repent of thy impiousness.");
4088 case 24: /* Heroism */
4089 (void)set_hero(randint1(25) + 25, FALSE);
4090 (void)hp_player(10);
4091 (void)set_afraid(0);
4093 case 25: /* Remove All Curse */
4094 if (remove_all_curse())
4097 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
4099 msg_print("You feel as if someone is watching over you.");
4103 case 26: /* Banishment */
4104 if (banish_evil(100))
4107 msg_print("¿ÀÀ»¤ÊÎϤ¬¼Ù°¤òÂǤÁʧ¤Ã¤¿¡ª");
4109 msg_print("The holy power banishes evil!");
4114 case 27: /* Word of Destruction */
4115 destroy_area(py, px, 13+randint0(5), TRUE);
4117 case 28: /* Eye for an Eye */
4118 set_tim_eyeeye(randint1(10)+10, FALSE);
4125 int b = 10 + randint1(10);
4127 if (!get_aim_dir(&dir)) return FALSE;
4129 /* Use the given direction */
4130 tx = px + 99 * ddx[dir];
4131 ty = py + 99 * ddy[dir];
4133 /* Hack -- Use an actual "target" */
4134 if ((dir == 5) && target_okay())
4145 /* Hack -- Stop at the target */
4146 if ((y == ty) && (x == tx)) break;
4150 mmove2(&ny, &nx, py, px, ty, tx);
4152 /* Stop at maximum range */
4153 if (MAX_SIGHT*2 < distance(py, px, ny, nx)) break;
4155 /* Stopped by walls/doors */
4156 if (!cave_floor_bold(ny, nx)) break;
4158 /* Stopped by monsters */
4159 if ((dir != 5) && cave[ny][nx].m_idx != 0) break;
4161 /* Save the new location */
4168 for (i = 0; i < b; i++)
4170 int count = 20, d = 0;
4176 x = tx - 5 + randint0(11);
4177 y = ty - 5 + randint0(11);
4179 dx = (tx > x) ? (tx - x) : (x - tx);
4180 dy = (ty > y) ? (ty - y) : (y - ty);
4182 /* Approximate distance */
4183 d = (dy > dx) ? (dy + (dx >> 1)) : (dx + (dy >> 1));
4184 /* Within the radius */
4188 if (count < 0) continue;
4190 /* Cannot penetrate perm walls */
4191 if (!in_bounds(y,x) ||
4192 cave_stop_disintegration(y,x) ||
4193 !in_disintegration_range(ty, tx, y, x))
4196 project(0, 2, y, x, plev * 3+25, GF_DISINTEGRATE, PROJECT_JUMP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL, -1);
4200 case 30: /* Divine Intervention */
4201 project(0, 1, py, px, plev*11, GF_HOLY_FIRE, PROJECT_KILL, -1);
4202 dispel_monsters(plev * 4);
4204 stun_monsters(plev * 4);
4205 confuse_monsters(plev * 4);
4206 turn_monsters(plev * 4);
4207 stasis_monsters(plev * 4);
4208 (void)hp_player(100);
4214 for (i = 0; i < 12; i++)
4221 scatter(&my, &mx, py, px, 4, 0);
4223 /* Require empty grids */
4224 if (cave_empty_bold2(my, mx)) break;
4226 if (attempt < 0) continue;
4227 summon_specific(-1, my, mx, plev, SUMMON_KNIGHTS, (PM_ALLOW_GROUP | PM_FORCE_PET));
4229 (void)set_hero(randint1(25) + 25, FALSE);
4230 (void)set_blessed(randint1(25) + 25, FALSE);
4231 (void)set_fast(randint1(20 + plev) + plev, FALSE);
4232 (void)set_protevil(randint1(25) + 25, FALSE);
4233 (void)set_afraid(0);
4238 msg_format("¤¢¤Ê¤¿¤ÏÉÔÌÀ¤ÊÇ˼٤μöʸ %d ¤ò¾§¤¨¤¿¡£", spell);
4240 msg_format("You cast an unknown crusade spell: %d.", spell);
4251 void stop_singing(void)
4253 if (p_ptr->pclass != CLASS_BARD) return;
4255 if (p_ptr->magic_num1[1])
4257 p_ptr->magic_num1[1] = 0;
4260 if (!p_ptr->magic_num1[0]) return;
4262 set_action(ACTION_NONE);
4264 switch(p_ptr->magic_num1[0])
4267 if (!p_ptr->blessed)
4269 msg_print("¹â·é¤Êµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
4271 msg_print("The prayer has expired.");
4278 msg_print("¥Ò¡¼¥í¡¼¤Îµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
4280 msg_print("The heroism wears off.");
4282 /* Recalculate hitpoints */
4283 p_ptr->update |= (PU_HP);
4287 if (!p_ptr->tim_esp)
4290 msg_print("°Õ¼±¤Ï¸µ¤ËÌá¤Ã¤¿¡£");
4292 msg_print("Your consciousness contracts again.");
4294 /* Update the monsters */
4295 p_ptr->update |= (PU_MONSTERS);
4299 if (!p_ptr->tim_stealth)
4301 msg_print("»Ñ¤¬¤Ï¤Ã¤¤ê¤È¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¡£");
4303 msg_print("You are no longer hided.");
4307 if (!p_ptr->oppose_acid)
4309 msg_print("»À¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
4311 msg_print("You feel less resistant to acid.");
4313 if (!p_ptr->oppose_elec)
4315 msg_print("ÅÅ·â¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
4317 msg_print("You feel less resistant to elec.");
4319 if (!p_ptr->oppose_fire)
4321 msg_print("²Ð¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
4323 msg_print("You feel less resistant to fire.");
4325 if (!p_ptr->oppose_cold)
4327 msg_print("Î䵤¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
4329 msg_print("You feel less resistant to cold.");
4331 if (!p_ptr->oppose_pois)
4333 msg_print("ÆǤؤÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
4335 msg_print("You feel less resistant to pois.");
4341 msg_print("Æ°¤¤ÎÁÇÁᤵ¤¬¤Ê¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£");
4343 msg_print("You feel yourself slow down.");
4350 msg_print("¥Ò¡¼¥í¡¼¤Îµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
4352 msg_print("The heroism wears off.");
4354 /* Recalculate hitpoints */
4355 p_ptr->update |= (PU_HP);
4360 msg_print("Æ°¤¤ÎÁÇÁᤵ¤¬¤Ê¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£");
4362 msg_print("You feel yourself slow down.");
4369 msg_print("̵Ũ¤Ç¤Ï¤Ê¤¯¤Ê¤Ã¤¿¡£");
4371 msg_print("The invulnerability wears off.");
4374 p_ptr->redraw |= (PR_MAP);
4376 /* Update monsters */
4377 p_ptr->update |= (PU_MONSTERS);
4380 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
4384 p_ptr->magic_num1[0] = MUSIC_NONE;
4385 p_ptr->magic_num2[0] = 0;
4387 /* Recalculate bonuses */
4388 p_ptr->update |= (PU_BONUS | PU_HP);
4390 /* Redraw status bar */
4391 p_ptr->redraw |= (PR_STATUS);
4395 static bool cast_music_spell(int spell)
4397 int plev = p_ptr->lev;
4400 if(p_ptr->magic_num1[0])
4405 p_ptr->magic_num2[0] = spell;
4409 case 0: /* Song of Holding ÃÙÆߤβΠ*/
4411 msg_print("¤æ¤Ã¤¯¤ê¤È¤·¤¿¥á¥í¥Ç¥£¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
4413 msg_print("You start humming a slow, steady melody...");
4415 p_ptr->magic_num1[0] = MUSIC_SLOW;
4417 case 1: /* Song of Blessing ½ËÊ¡¤Î²Î */
4419 msg_print("¸·¤«¤Ê¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4421 msg_print("The holy power of the Music of the Ainur enters you...");
4423 p_ptr->magic_num1[0] = MUSIC_BLESS;
4426 case 2: /* Wrecking Note Êø²õ¤Î²»¿§ */
4427 if (!get_aim_dir(&dir)) return FALSE;
4428 fire_bolt(GF_SOUND, dir,
4429 damroll(4 + ((plev - 1) / 5), 4));
4431 case 3: /* Stun Pattern Û¯Û°¤ÎÀûΧ */
4433 msg_print("âÁÏǤµ¤»¤ë¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4435 msg_print("You weave a pattern of sounds to bewilder and daze...");
4437 p_ptr->magic_num1[0] = MUSIC_STUN;
4439 case 4: /* Flow of life À¸Ì¿¤Îή¤ì */
4441 msg_print("²Î¤òÄ̤·¤ÆÂΤ˳赤¤¬Ìá¤Ã¤Æ¤¤¿¡¥¡¥¡¥");
4443 msg_print("Life flows through you as you sing a song of healing...");
4445 p_ptr->magic_num1[0] = MUSIC_L_LIFE;
4447 case 5: /* Song of the Sun ÂÀÍۤβΠ*/
4449 msg_print("¸÷¤êµ±¤¯²Î¤¬ÊÕ¤ê¤ò¾È¤é¤·¤¿¡£");
4451 msg_print("Your uplifting song brings brightness to dark places...");
4453 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
4455 case 6: /* Song of fear ¶²ÉݤβΠ*/
4457 msg_print("¤ª¤É¤í¤ª¤É¤í¤·¤¤¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4459 msg_print("You start weaving a fearful pattern...");
4461 p_ptr->magic_num1[0] = MUSIC_FEAR;
4463 case 7: /* Heroic Ballad À襤¤Î²Î */
4465 msg_print("·ã¤·¤¤À襤¤Î²Î¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
4467 msg_print("You start singing a song of intense fighting...");
4469 p_ptr->magic_num1[0] = MUSIC_HERO;
4471 case 8: /* Clairaudience ÎîŪÃγР*/
4473 msg_print("ÀŤ«¤Ê²»³Ú¤¬´¶³Ð¤ò¸¦¤®À¡¤Þ¤µ¤»¤¿¡¥¡¥¡¥");
4475 msg_print("Your quiet music sharpens your sense of hearing...");
4477 p_ptr->magic_num1[0] = MUSIC_DETECT;
4479 case 9: /* º²¤Î²Î */
4481 msg_print("Àº¿À¤òDZ¤¸¶Ê¤²¤ë²Î¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
4483 msg_print("You start singing a song of soul in pain...");
4485 p_ptr->magic_num1[0] = MUSIC_PSI;
4487 case 10: /* Song of Lore Ãμ±¤Î²Î */
4489 msg_print("¤³¤ÎÀ¤³¦¤ÎÃ챤¬Î®¤ì¹þ¤ó¤Ç¤¤¿¡¥¡¥¡¥");
4491 msg_print("You recall the rich lore of the world...");
4493 p_ptr->magic_num1[0] = MUSIC_ID;
4495 case 11: /* hidding song ±£ÆۤβΠ*/
4497 msg_print("¤¢¤Ê¤¿¤Î»Ñ¤¬·Ê¿§¤Ë¤È¤±¤³¤ó¤Ç¤¤¤Ã¤¿¡¥¡¥¡¥");
4499 msg_print("Your song carries you beyond the sight of mortal eyes...");
4501 p_ptr->magic_num1[0] = MUSIC_STEALTH;
4503 case 12: /* Illusion Pattern ¸¸±Æ¤ÎÀûΧ */
4505 msg_print("ÊÕ¤ê°ìÌ̤˸¸±Æ¤¬¸½¤ì¤¿¡¥¡¥¡¥");
4507 msg_print("You weave a pattern of sounds to beguile and confuse...");
4509 p_ptr->magic_num1[0] = MUSIC_CONF;
4511 case 13: /* Doomcall (vibration song) ÇËÌǤζ«¤Ó */
4513 msg_print("¹ì²»¤¬¶Á¤¤¤¿¡¥¡¥¡¥");
4515 msg_print("The fury of the Downfall of Numenor lashes out...");
4517 p_ptr->magic_num1[0] = MUSIC_SOUND;
4519 case 14: /* Firiel's Song (song of the Undeads) ¥Õ¥£¥ê¥¨¥ë¤Î²Î */
4521 msg_print("À¸Ì¿¤ÈÉü³è¤Î¥Æ¡¼¥Þ¤òÁդǻϤ᤿¡¥¡¥¡¥");
4523 msg_print("The themes of life and revival are woven into your song...");
4525 animate_dead(0, py, px);
4527 case 15: /* Fellowship Chant (charming song) ι¤ÎÃç´Ö */
4529 msg_print("°Â¤é¤«¤Ê¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4531 msg_print("You weave a slow, soothing melody of imploration...");
4533 p_ptr->magic_num1[0] = MUSIC_CHARM;
4535 case 16: /* (wall breaking song) ʬ²ò²»ÇÈ */
4537 msg_print("Ê´ºÕ¤¹¤ë¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4539 msg_print("You weave a violent pattern of sounds to break wall.");
4541 p_ptr->magic_num1[0] = MUSIC_WALL;
4542 project(0, 0, py, px,
4543 0, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM | PROJECT_HIDE, -1);
4545 case 17: /* Finrod's Resistance (song of resistance) ¸µÁÇÂÑÀ */
4547 msg_print("¸µÁǤÎÎϤËÂФ¹¤ëǦÂѤβΤò²Î¤Ã¤¿¡£");
4549 msg_print("You sing a song of perseverance against powers...");
4551 p_ptr->magic_num1[0] = MUSIC_RESIST;
4553 case 18: /* Hobbit Melodies (song of time) ¥Û¥Ó¥Ã¥È¤Î¥á¥í¥Ç¥£ */
4555 msg_print("·Ú²÷¤Ê²Î¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
4557 msg_print("You start singing joyful pop song...");
4559 p_ptr->magic_num1[0] = MUSIC_SPEED;
4561 case 19: /* World Contortion ÏĤó¤ÀÀ¤³¦ */
4563 msg_print("²Î¤¬¶õ´Ö¤òÏĤ᤿¡¥¡¥¡¥");
4565 msg_print("Reality whirls wildly as you sing a dizzying melody...");
4567 project(0, plev/15 + 1, py, px, plev * 3 + 1, GF_AWAY_ALL , PROJECT_KILL, -1);
4569 case 20: /* Â໶¤Î²Î */
4571 msg_print("ÂѤ¨¤é¤ì¤Ê¤¤ÉÔ¶¨Ï²»¤¬Å¨¤òÀÕ¤áΩ¤Æ¤¿¡¥¡¥¡¥");
4573 msg_print("You cry out in an ear-wracking voice...");
4575 p_ptr->magic_num1[0] = MUSIC_DISPEL;
4577 case 21: /* The Voice of Saruman ¥µ¥ë¥Þ¥ó¤Î´Å¸À */
4579 msg_print("Í¥¤·¤¯¡¢Ì¥ÎÏŪ¤Ê²Î¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
4581 msg_print("You start humming a gentle and attractive song...");
4583 p_ptr->magic_num1[0] = MUSIC_SARUMAN;
4585 case 22: /* Song of Tempest (song of death) Íò¤Î²»¿§ */
4586 if (!get_aim_dir(&dir)) return FALSE;
4587 fire_beam(GF_SOUND, dir,
4588 damroll(15 + ((plev - 1) / 2), 10));
4590 case 23: /* (song of disruption) ¤â¤¦°ì¤Ä¤ÎÀ¤³¦ */
4592 msg_print("¼þ°Ï¤¬ÊѲ½¤·»Ï¤á¤¿¡¥¡¥¡¥");
4594 msg_print("You sing of the primeval shaping of Middle-earth...");
4598 case 24: /* Wrecking Pattern (destruction shriek) Ç˲õ¤ÎÀûΧ */
4600 msg_print("Ç˲õŪ¤Ê²Î¤¬¶Á¤¤ï¤¿¤Ã¤¿¡¥¡¥¡¥");
4602 msg_print("You weave a pattern of sounds to contort and shatter...");
4604 p_ptr->magic_num1[0] = MUSIC_QUAKE;
4606 case 25: /* ÄäÂڤβΠ*/
4608 msg_print("¤æ¤Ã¤¯¤ê¤È¤·¤¿¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4610 msg_print("You weave a very slow pattern which is almost likely to stop...");
4612 p_ptr->magic_num1[0] = MUSIC_STASIS;
4614 case 26: /* ¼é¤ê¤Î²Î */
4616 msg_print("²Î¤¬¿ÀÀ»¤Ê¾ì¤òºî¤ê½Ð¤·¤¿¡¥¡¥¡¥");
4618 msg_print("The holy power of the Music is creating sacred field...");
4622 case 27: /* ±Ñͺ¤Î»í */
4624 msg_print("±Ñͺ¤Î²Î¤ò¸ý¤º¤µ¤ó¤À¡¥¡¥¡¥");
4626 msg_print("You chant a powerful, heroic call to arms...");
4628 p_ptr->magic_num1[0] = MUSIC_SHERO;
4629 (void)hp_player(10);
4630 (void)set_afraid(0);
4632 case 28: /* ¥ä¥ô¥¡¥ó¥Ê¤Î½õ¤± */
4634 msg_print("²Î¤òÄ̤·¤ÆÂΤ˳赤¤¬Ìá¤Ã¤Æ¤¤¿¡¥¡¥¡¥");
4636 msg_print("Life flows through you as you sing the song...");
4638 p_ptr->magic_num1[0] = MUSIC_H_LIFE;
4640 case 29: /* ºÆÀ¸¤Î²Î */
4642 msg_print("°Å¹õ¤ÎÃæ¤Ë¸÷¤ÈÈþ¤ò¤Õ¤ê¤Þ¤¤¤¿¡£ÂΤ¬¸µ¤Î³èÎϤò¼è¤êÌᤷ¤¿¡£");
4644 msg_print("You strewed light and beauty in the dark as you sing. You feel refreshed.");
4646 (void)do_res_stat(A_STR);
4647 (void)do_res_stat(A_INT);
4648 (void)do_res_stat(A_WIS);
4649 (void)do_res_stat(A_DEX);
4650 (void)do_res_stat(A_CON);
4651 (void)do_res_stat(A_CHR);
4652 (void)restore_level();
4654 case 30: /* shriek of death ¥µ¥¦¥í¥ó¤ÎËâ½Ñ */
4655 if (!get_aim_dir(&dir)) return FALSE;
4656 fire_ball(GF_SOUND, dir, damroll(50 + plev, 10), 0);
4658 case 31: /* song of liberty ¥Õ¥£¥ó¥´¥ë¥Õ¥£¥ó¤ÎÄ©Àï */
4660 msg_print("¥Õ¥£¥ó¥´¥ë¥Õ¥£¥ó¤Î̽²¦¤Ø¤ÎÄ©Àï¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
4662 msg_print("You recall the valor of Fingolfin's challenge to the Dark Lord...");
4664 p_ptr->magic_num1[0] = MUSIC_INVULN;
4667 p_ptr->redraw |= (PR_MAP);
4669 /* Update monsters */
4670 p_ptr->update |= (PU_MONSTERS);
4673 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
4677 msg_format("̤ÃΤβÎ(%d)¤ò²Î¤Ã¤¿¡£", spell);
4679 msg_format("You sing an unknown song: %d.", spell);
4684 if (p_ptr->magic_num1[0]) set_action(ACTION_SING);
4686 /* Recalculate bonuses */
4687 p_ptr->update |= (PU_BONUS | PU_HP);
4689 /* Redraw status bar */
4690 p_ptr->redraw |= (PR_STATUS);
4698 void do_cmd_cast(void)
4700 int item, sval, spell, realm;
4715 /* Require spell ability */
4716 if (!p_ptr->realm1 && (p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE))
4719 msg_print("¼öʸ¤ò¾§¤¨¤é¤ì¤Ê¤¤¡ª");
4721 msg_print("You cannot cast spells!");
4728 if (p_ptr->blind || no_lite())
4731 msg_print("Ìܤ¬¸«¤¨¤Ê¤¤¡ª");
4733 msg_print("You cannot see!");
4735 if (p_ptr->pclass == CLASS_FORCETRAINER)
4742 /* Not when confused */
4743 if (p_ptr->confused)
4746 msg_print("º®Í𤷤Ƥ¤¤Æ¾§¤¨¤é¤ì¤Ê¤¤¡ª");
4748 msg_print("You are too confused!");
4754 prayer = spell_categoly_name(mp_ptr->spell_book);
4756 /* Restrict choices to spell books */
4757 item_tester_tval = mp_ptr->spell_book;
4761 q = "¤É¤Î¼öʸ½ñ¤ò»È¤¤¤Þ¤¹¤«? ";
4763 q = "Use which book? ";
4767 s = "¼öʸ½ñ¤¬¤Ê¤¤¡ª";
4769 s = "You have no spell books!";
4772 select_spellbook=TRUE;
4773 if (p_ptr->pclass == CLASS_FORCETRAINER)
4774 select_the_force = TRUE;
4775 if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))){
4776 select_spellbook = FALSE;
4777 select_the_force = FALSE;
4780 select_spellbook = FALSE;
4781 select_the_force = FALSE;
4783 if (item == 1111) { /* the_force */
4787 /* Get the item (in the pack) */
4790 o_ptr = &inventory[item];
4793 /* Get the item (on the floor) */
4796 o_ptr = &o_list[0 - item];
4799 /* Access the item's sval */
4802 if ((p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE) && (o_ptr->tval == REALM2_BOOK)) increment = 32;
4805 /* Track the object kind */
4806 object_kind_track(o_ptr->k_idx);
4808 /* Hack -- Handle stuff */
4811 if ((p_ptr->pclass == CLASS_SORCERER) || (p_ptr->pclass == CLASS_RED_MAGE))
4812 realm = o_ptr->tval - TV_LIFE_BOOK + 1;
4813 else if (increment) realm = p_ptr->realm2;
4814 else realm = p_ptr->realm1;
4816 /* Ask for a spell */
4818 if (!get_spell(&spell,
4819 ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "±Ó¾§¤¹¤ë" : (mp_ptr->spell_book == TV_MUSIC_BOOK) ? "²Î¤¦" : "¾§¤¨¤ë"),
4822 if (spell == -2) msg_format("¤½¤ÎËܤˤÏÃΤäƤ¤¤ë%s¤¬¤Ê¤¤¡£", prayer);
4826 if (!get_spell(&spell, ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "recite" : "cast"),
4830 msg_format("You don't know any %ss in that book.", prayer);
4836 use_realm = tval2realm(o_ptr->tval);
4838 if (!is_magic(use_realm))
4840 s_ptr = &technic_info[use_realm - MIN_TECHNIC - 1][spell];
4844 s_ptr = &mp_ptr->info[realm - 1][spell];
4847 if (p_ptr->pclass == CLASS_SORCERER)
4848 shouhimana = s_ptr->smana*2200 + 2399;
4849 else if (p_ptr->pclass == CLASS_RED_MAGE)
4850 shouhimana = s_ptr->smana*2600 + 2399;
4852 shouhimana = (s_ptr->smana*(3800-spell_exp[(increment ? spell+32 : spell)])+2399);
4855 else shouhimana *= 4;
4857 if(shouhimana < 1) shouhimana = 1;
4859 /* Verify "dangerous" spells */
4860 if (shouhimana > p_ptr->csp)
4864 msg_format("¤½¤Î%s¤ò%s¤Î¤Ë½½Ê¬¤Ê¥Þ¥¸¥Ã¥¯¥Ý¥¤¥ó¥È¤¬¤Ê¤¤¡£",prayer,
4865 ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "±Ó¾§¤¹¤ë" : (mp_ptr->spell_book == TV_LIFE_BOOK) ? "²Î¤¦" : "¾§¤¨¤ë"));
4867 msg_format("You do not have enough mana to %s this %s.",
4868 ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "recite" : "cast"),
4873 if (!over_exert) return;
4877 if (!get_check_strict("¤½¤ì¤Ç¤âÄ©À路¤Þ¤¹¤«? ", CHECK_OKAY_CANCEL)) return;
4879 if (!get_check_strict("Attempt it anyway? ", CHECK_OKAY_CANCEL)) return;
4885 /* Spell failure chance */
4886 chance = spell_chance(spell, use_realm - 1);
4889 if (randint0(100) < chance)
4891 if (flush_failure) flush();
4894 msg_format("%s¤ò¤¦¤Þ¤¯¾§¤¨¤é¤ì¤Ê¤«¤Ã¤¿¡ª", prayer);
4896 msg_format("You failed to get the %s off!", prayer);
4901 if (realm == REALM_LIFE)
4903 if (randint1(100) < chance)
4904 chg_virtue(V_VITALITY, -1);
4906 else if (realm == REALM_DEATH)
4908 if (randint1(100) < chance)
4909 chg_virtue(V_UNLIFE, -1);
4911 else if (realm == REALM_NATURE)
4913 if (randint1(100) < chance)
4914 chg_virtue(V_NATURE, -1);
4916 else if (realm == REALM_DAEMON)
4918 if (randint1(100) < chance)
4919 chg_virtue(V_JUSTICE, 1);
4921 if (realm == REALM_CRUSADE)
4923 if (randint1(100) < chance)
4924 chg_virtue(V_JUSTICE, -1);
4926 else if (randint1(100) < chance)
4928 chg_virtue(V_KNOWLEDGE, -1);
4931 if (realm == REALM_TRUMP)
4933 cast_trump_spell(spell, FALSE);
4935 else if ((o_ptr->tval == TV_CHAOS_BOOK) && (randint1(100) < spell))
4938 msg_print("¥«¥ª¥¹Åª¤Ê¸ú²Ì¤òȯÀ¸¤·¤¿¡ª");
4940 msg_print("You produce a chaotic effect!");
4945 else if ((o_ptr->tval == TV_DEATH_BOOK) && (randint1(100) < spell))
4947 if ((sval == 3) && one_in_(2))
4949 sanity_blast(0, TRUE);
4954 msg_print("Äˤ¤¡ª");
4956 msg_print("It hurts!");
4960 take_hit(DAMAGE_LOSELIFE, damroll(o_ptr->sval + 1, 6), "°Å¹õËâË¡¤ÎµÕή", -1);
4962 take_hit(DAMAGE_LOSELIFE, damroll(o_ptr->sval + 1, 6), "a miscast Death spell", -1);
4965 if ((spell > 15) && one_in_(6) && !p_ptr->hold_life)
4966 lose_exp(spell * 250);
4969 else if ((o_ptr->tval == TV_MUSIC_BOOK) && (randint1(200) < spell))
4972 msg_print("¤¤¤ä¤Ê²»¤¬¶Á¤¤¤¿");
4974 msg_print("An infernal sound echoed.");
4977 aggravate_monsters(0);
4979 if (randint1(100) >= chance)
4980 chg_virtue(V_CHANCE,-1);
4989 case REALM_LIFE: /* * LIFE * */
4990 cast = cast_life_spell(spell);
4992 case REALM_SORCERY: /* * SORCERY * */
4993 cast = cast_sorcery_spell(spell);
4995 case REALM_NATURE: /* * NATURE * */
4996 cast = cast_nature_spell(spell);
4998 case REALM_CHAOS: /* * CHAOS * */
4999 cast = cast_chaos_spell(spell);
5001 case REALM_DEATH: /* * DEATH * */
5002 cast = cast_death_spell(spell);
5004 case REALM_TRUMP: /* TRUMP */
5005 cast = cast_trump_spell(spell, TRUE);
5007 case REALM_ARCANE: /* ARCANE */
5008 cast = cast_arcane_spell(spell);
5010 case REALM_ENCHANT: /* ENCHANT */
5011 cast = cast_enchant_spell(spell);
5013 case REALM_DAEMON: /* DAEMON */
5014 cast = cast_daemon_spell(spell);
5016 case REALM_CRUSADE: /* CRUSADE */
5017 cast = cast_crusade_spell(spell);
5019 case REALM_MUSIC: /* MUSIC */
5020 cast = cast_music_spell(spell);
5024 msg_format("You cast a spell from an unknown realm: realm %d, spell %d.", realm, spell);
5028 /* Canceled spells cost neither a turn nor mana */
5031 if (randint1(100) < chance)
5032 chg_virtue(V_CHANCE,1);
5034 /* A spell was cast */
5036 (spell_worked2 & (1L << spell)) :
5037 (spell_worked1 & (1L << spell)))
5038 && (p_ptr->pclass != CLASS_SORCERER)
5039 && (p_ptr->pclass != CLASS_RED_MAGE))
5041 int e = s_ptr->sexp;
5043 /* The spell worked */
5044 if (realm == p_ptr->realm1)
5046 spell_worked1 |= (1L << spell);
5050 spell_worked2 |= (1L << spell);
5053 /* Gain experience */
5054 gain_exp(e * s_ptr->slevel);
5056 if (realm == REALM_LIFE)
5058 chg_virtue(V_TEMPERANCE, 1);
5059 chg_virtue(V_COMPASSION, 1);
5060 chg_virtue(V_VITALITY, 1);
5061 chg_virtue(V_DILIGENCE, 1);
5063 else if (realm == REALM_DEATH)
5065 chg_virtue(V_UNLIFE, 1);
5066 chg_virtue(V_JUSTICE, -1);
5067 chg_virtue(V_FAITH, -1);
5068 chg_virtue(V_VITALITY, -1);
5070 else if (realm == REALM_DAEMON)
5072 chg_virtue(V_JUSTICE, -1);
5073 chg_virtue(V_FAITH, -1);
5074 chg_virtue(V_HONOUR, -1);
5075 chg_virtue(V_TEMPERANCE, -1);
5077 else if (realm == REALM_CRUSADE)
5079 chg_virtue(V_FAITH, 1);
5080 chg_virtue(V_JUSTICE, 1);
5081 chg_virtue(V_SACRIFICE, 1);
5082 chg_virtue(V_HONOUR, 1);
5084 else if (realm == REALM_NATURE)
5086 chg_virtue(V_NATURE, 1);
5087 chg_virtue(V_HARMONY, 1);
5090 chg_virtue(V_KNOWLEDGE, 1);
5092 if (realm == REALM_LIFE)
5094 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_TEMPERANCE, 1);
5095 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_COMPASSION, 1);
5096 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_VITALITY, 1);
5097 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_DILIGENCE, 1);
5099 else if (realm == REALM_DEATH)
5101 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_UNLIFE, 1);
5102 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_JUSTICE, -1);
5103 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_FAITH, -1);
5104 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_VITALITY, -1);
5106 else if (realm == REALM_DAEMON)
5108 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_JUSTICE, -1);
5109 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_FAITH, -1);
5110 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_HONOUR, -1);
5111 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_TEMPERANCE, -1);
5113 else if (realm == REALM_CRUSADE)
5115 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_FAITH, 1);
5116 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_JUSTICE, 1);
5117 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_SACRIFICE, 1);
5118 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_HONOUR, 1);
5120 else if (realm == REALM_NATURE)
5122 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_NATURE, 1);
5123 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_HARMONY, 1);
5125 if (mp_ptr->spell_xtra & MAGIC_GAIN_EXP)
5127 if (spell_exp[(increment ? 32 : 0)+spell] < 900)
5128 spell_exp[(increment ? 32 : 0)+spell]+=60;
5129 else if(spell_exp[(increment ? 32 : 0)+spell] < 1200)
5130 {if ((dun_level > 4) && ((dun_level + 10) > p_ptr->lev)) spell_exp[(increment ? 32 : 0)+spell]+=8;}
5131 else if(spell_exp[(increment ? 32 : 0)+spell] < 1400)
5132 {if (((dun_level + 5) > p_ptr->lev) && ((dun_level + 5) > s_ptr->slevel)) spell_exp[(increment ? 32 : 0)+spell]+=2;}
5133 else if((spell_exp[(increment ? 32 : 0)+spell] < 1600) && !increment)
5134 {if (((dun_level + 5) > p_ptr->lev) && (dun_level > s_ptr->slevel)) spell_exp[(increment ? 32 : 0)+spell]+=1;}
5141 /* Sufficient mana */
5142 if (shouhimana <= p_ptr->csp)
5145 p_ptr->csp -= shouhimana;
5148 /* Over-exert the player */
5151 int oops = shouhimana;
5155 p_ptr->csp_frac = 0;
5159 msg_print("Àº¿À¤ò½¸Ã椷¤¹¤®¤Æµ¤¤ò¼º¤Ã¤Æ¤·¤Þ¤Ã¤¿¡ª");
5161 msg_print("You faint from the effort!");
5165 /* Hack -- Bypass free action */
5166 (void)set_paralyzed(p_ptr->paralyzed + randint1(5 * oops + 1));
5168 if (realm == REALM_LIFE)
5169 chg_virtue(V_VITALITY, -10);
5170 else if (realm == REALM_DEATH)
5171 chg_virtue(V_UNLIFE, -10);
5172 else if (realm == REALM_DAEMON)
5173 chg_virtue(V_JUSTICE, 10);
5174 else if (realm == REALM_NATURE)
5175 chg_virtue(V_NATURE, -10);
5176 else if (realm == REALM_CRUSADE)
5177 chg_virtue(V_JUSTICE, -10);
5179 chg_virtue(V_KNOWLEDGE, -10);
5181 /* Damage CON (possibly permanently) */
5182 if (randint0(100) < 50)
5184 bool perm = (randint0(100) < 25);
5188 msg_print("ÂΤò°¤¯¤·¤Æ¤·¤Þ¤Ã¤¿¡ª");
5190 msg_print("You have damaged your health!");
5194 /* Reduce constitution */
5195 (void)dec_stat(A_CON, 15 + randint1(10), perm);
5200 p_ptr->redraw |= (PR_MANA);
5203 p_ptr->window |= (PW_PLAYER);
5204 p_ptr->window |= (PW_SPELL);
5209 * Pray a prayer -- Unused in Hengband
5211 void do_cmd_pray(void)
5213 msg_print("Praying is not used in Hengband. Use magic spell casting instead.");
5216 static bool ang_sort_comp_pet_dismiss(vptr u, vptr v, int a, int b)
5218 u16b *who = (u16b*)(u);
5223 monster_type *m_ptr1 = &m_list[w1];
5224 monster_type *m_ptr2 = &m_list[w2];
5225 monster_race *r_ptr1 = &r_info[m_ptr1->r_idx];
5226 monster_race *r_ptr2 = &r_info[m_ptr2->r_idx];
5228 if (w1 == p_ptr->riding) return TRUE;
5229 if (w2 == p_ptr->riding) return FALSE;
5231 if (m_ptr1->nickname && !m_ptr2->nickname) return TRUE;
5232 if (m_ptr2->nickname && !m_ptr1->nickname) return FALSE;
5234 if ((r_ptr1->flags1 & RF1_UNIQUE) && !(r_ptr2->flags1 & RF1_UNIQUE)) return TRUE;
5235 if ((r_ptr2->flags1 & RF1_UNIQUE) && !(r_ptr1->flags1 & RF1_UNIQUE)) return FALSE;
5237 if (r_ptr1->level > r_ptr2->level) return TRUE;
5238 if (r_ptr2->level > r_ptr1->level) return FALSE;
5240 if (m_ptr1->hp > m_ptr2->hp) return TRUE;
5241 if (m_ptr2->hp > m_ptr1->hp) return FALSE;
5246 int calculate_upkeep(void)
5248 s32b old_friend_align = friend_align;
5250 bool have_a_unique = FALSE;
5253 total_friend_levels = 0;
5256 for (m_idx = m_max - 1; m_idx >=1; m_idx--)
5258 monster_type *m_ptr;
5259 monster_race *r_ptr;
5261 m_ptr = &m_list[m_idx];
5262 if (!m_ptr->r_idx) continue;
5263 r_ptr = &r_info[m_ptr->r_idx];
5268 if (r_ptr->flags1 & RF1_UNIQUE)
5270 if (p_ptr->pclass == CLASS_CAVALRY)
5272 if (p_ptr->riding == m_idx)
5273 total_friend_levels += (r_ptr->level+5)*2;
5274 else if (!have_a_unique && (r_info[m_ptr->r_idx].flags7 & RF7_RIDING))
5275 total_friend_levels += (r_ptr->level+5)*7/2;
5277 total_friend_levels += (r_ptr->level+5)*10;
5278 have_a_unique = TRUE;
5281 total_friend_levels += (r_ptr->level+5)*10;
5284 total_friend_levels += r_ptr->level;
5286 /* Determine pet alignment */
5287 if (r_ptr->flags3 & RF3_GOOD)
5289 friend_align += r_ptr->level;
5291 else if (r_ptr->flags3 & RF3_EVIL)
5293 friend_align -= r_ptr->level;
5297 if (old_friend_align != friend_align) p_ptr->update |= (PU_BONUS);
5301 upkeep_factor = (total_friend_levels - (p_ptr->lev * 80 / (cp_ptr->pet_upkeep_div)));
5302 if (upkeep_factor < 0) upkeep_factor = 0;
5303 if (upkeep_factor > 1000) upkeep_factor = 1000;
5304 return upkeep_factor;
5310 void do_cmd_pet_dismiss(void)
5312 monster_type *m_ptr;
5313 bool all_pets = FALSE;
5327 /* Allocate the "who" array */
5328 C_MAKE(who, max_m_idx, u16b);
5330 /* Process the monsters (backwards) */
5331 for (pet_ctr = m_max - 1; pet_ctr >= 1; pet_ctr--)
5333 if (is_pet(&m_list[pet_ctr]))
5334 who[max_pet++] = pet_ctr;
5337 /* Select the sort method */
5338 ang_sort_comp = ang_sort_comp_pet_dismiss;
5339 ang_sort_swap = ang_sort_swap_hook;
5341 ang_sort(who, &dummy_why, max_pet);
5343 /* Process the monsters (backwards) */
5344 for (i = 0; i < max_pet; i++)
5347 char friend_name[80];
5351 /* Access the monster */
5353 m_ptr = &m_list[pet_ctr];
5355 delete_this = FALSE;
5356 kakunin = ((pet_ctr == p_ptr->riding) || (m_ptr->nickname));
5357 monster_desc(friend_name, m_ptr, 0x80);
5361 /* Hack -- health bar for this monster */
5362 health_track(pet_ctr);
5364 /* Hack -- handle stuff */
5368 sprintf(buf, "%s¤òÊü¤·¤Þ¤¹¤«¡© [Yes/No/Unnamed (%dɤ)]", friend_name, max_pet-i);
5370 sprintf(buf, "Dismiss %s? [Yes/No/Unnamed (%d remain)]", friend_name, max_pet-i);
5375 move_cursor_relative(m_ptr->fy, m_ptr->fx);
5381 if (ch == 'Y' || ch == 'y')
5388 sprintf(buf, "ËÜÅö¤Ë¤è¤í¤·¤¤¤Ç¤¹¤«¡© (%s) ", friend_name);
5390 sprintf(buf, "Are you sure? (%s) ", friend_name);
5392 if (!get_check(buf))
5393 delete_this = FALSE;
5398 if (ch == 'U' || ch == 'u')
5404 if (ch == ESCAPE || ch == 'N' || ch == 'n')
5411 if ((all_pets && !kakunin) || (!all_pets && delete_this))
5413 if (record_named_pet && m_ptr->nickname)
5417 monster_desc(m_name, m_ptr, 0x08);
5418 do_cmd_write_nikki(NIKKI_NAMED_PET, 2, m_name);
5421 if (pet_ctr == p_ptr->riding)
5424 msg_format("%s¤«¤é¹ß¤ê¤¿¡£", friend_name);
5426 msg_format("You have got off %s. ", friend_name);
5431 /* Update the monsters */
5432 p_ptr->update |= (PU_BONUS | PU_MONSTERS);
5433 p_ptr->redraw |= (PR_EXTRA);
5436 /* HACK : Add the line to message buffer */
5438 sprintf(buf, "%s ¤òÎ¥¤·¤¿¡£", friend_name);
5440 sprintf(buf, "Dismissed %s.", friend_name);
5443 p_ptr->window |= (PW_MESSAGE);
5446 delete_monster_idx(pet_ctr);
5455 C_KILL(who, max_m_idx, u16b);
5458 msg_format("%d ɤ¤Î¥Ú¥Ã¥È¤òÊü¤·¤Þ¤·¤¿¡£", Dismissed);
5460 msg_format("You have dismissed %d pet%s.", Dismissed,
5461 (Dismissed == 1 ? "" : "s"));
5463 if (Dismissed == 0 && all_pets)
5464 msg_print("'U'nnamed ¤Ï¡¢¾èÇϰʳ°¤Î̾Á°¤Î¤Ê¤¤¥Ú¥Ã¥È¤À¤±¤òÁ´¤Æ²òÊü¤·¤Þ¤¹¡£");
5466 p_ptr->update |= (PU_MON_LITE);
5469 bool rakuba(int dam, bool force)
5471 int i, y, x, oy, ox;
5472 int sn = 0, sy = 0, sx = 0;
5474 monster_type *m_ptr = &m_list[p_ptr->riding];
5475 monster_race *r_ptr = &r_info[m_ptr->r_idx];
5477 if (!p_ptr->riding) return FALSE;
5478 if (p_ptr->wild_mode) return FALSE;
5480 if (dam >= 0 || force)
5484 int level = r_ptr->level;
5485 if (p_ptr->riding_ryoute) level += 20;
5486 if ((dam/2 + r_ptr->level) > (skill_exp[GINOU_RIDING]/30+10))
5488 if((skill_exp[GINOU_RIDING] < s_info[p_ptr->pclass].s_max[GINOU_RIDING]) && s_info[p_ptr->pclass].s_max[GINOU_RIDING] > 1000)
5490 if (r_ptr->level*100 > (skill_exp[GINOU_RIDING] + 1500))
5491 skill_exp[GINOU_RIDING] += (1+(r_ptr->level - skill_exp[GINOU_RIDING]/100 - 15));
5492 else skill_exp[GINOU_RIDING]++;
5495 if (randint0(dam/2 + level*2) < (skill_exp[GINOU_RIDING]/30+10))
5497 if ((((p_ptr->pclass == CLASS_BEASTMASTER) || (p_ptr->pclass == CLASS_CAVALRY)) && !p_ptr->riding_ryoute) || !one_in_(p_ptr->lev*(p_ptr->riding_ryoute ? 2 : 3)+30))
5503 /* Check around the player */
5504 for (i = 0; i < 8; i++)
5508 /* Access the location */
5509 y = py + ddy_ddd[i];
5510 x = px + ddx_ddd[i];
5512 c_ptr = &cave[y][x];
5514 /* Skip non-empty grids */
5515 if (cave_perma_grid(c_ptr)) continue;
5516 if (!cave_empty_grid2(c_ptr)) continue;
5518 if (c_ptr->m_idx) continue;
5520 /* Count "safe" grids */
5523 /* Randomize choice */
5524 if (randint0(sn) > 0) continue;
5526 /* Save the safe location */
5531 monster_desc(m_name, m_ptr, 0);
5533 msg_format("%s¤«¤é¿¶¤êÍî¤È¤µ¤ì¤½¤¦¤Ë¤Ê¤Ã¤Æ¡¢Êɤˤ֤Ĥ«¤Ã¤¿¡£",m_name);
5534 take_hit(DAMAGE_NOESCAPE, r_ptr->level+3, "Êɤؤξ×ÆÍ", -1);
5536 msg_format("You have nearly fallen from %s, but bumped into wall.",m_name);
5537 take_hit(DAMAGE_NOESCAPE, r_ptr->level+3, "bumping into wall", -1);
5548 /* Redraw the old spot */
5551 /* Redraw the new spot */
5554 /* Check for new panel */
5559 p_ptr->pet_extra_flags &= ~(PF_RYOUTE);
5560 p_ptr->riding_ryoute = p_ptr->old_riding_ryoute = FALSE;
5564 p_ptr->update |= (PU_BONUS);
5567 p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW);
5569 /* Update the monsters */
5570 p_ptr->update |= (PU_DISTANCE);
5573 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
5575 p_ptr->redraw |= (PR_EXTRA);
5577 if (p_ptr->ffall && !force)
5579 monster_desc(m_name, m_ptr, 0);
5581 msg_format("%s¤«¤éÍî¤Á¤¿¤¬¡¢¶õÃæ¤Ç¤¦¤Þ¤¯ÂÎÀª¤òΩ¤Æľ¤·¤ÆÃåÃϤ·¤¿¡£",m_name);
5583 msg_format("You are thrown from %s, but make a good landing.",m_name);
5588 take_hit(DAMAGE_NOESCAPE, r_ptr->level+3, "ÍîÇÏ", -1);
5590 take_hit(DAMAGE_NOESCAPE, r_ptr->level+3, "Falling from riding", -1);
5592 p_ptr->redraw |= (PR_UHEALTH);
5597 bool do_riding(bool force)
5599 int oy, ox, x, y, dir = 0;
5601 monster_type *m_ptr;
5603 if (!get_rep_dir2(&dir)) return FALSE;
5606 c_ptr = &cave[y][x];
5610 /* Skip non-empty grids */
5611 if (!cave_empty_bold2(y, x) || c_ptr->m_idx)
5614 msg_print("¤½¤Á¤é¤Ë¤Ï¹ß¤ê¤é¤ì¤Þ¤»¤ó¡£");
5616 msg_print("You cannot go to that direction.");
5621 p_ptr->pet_extra_flags &= ~(PF_RYOUTE);
5622 p_ptr->riding_ryoute = p_ptr->old_riding_ryoute = FALSE;
5626 if (p_ptr->confused)
5629 msg_print("º®Í𤷤Ƥ¤¤Æ¾è¤ì¤Ê¤¤¡ª");
5631 msg_print("You are too confused!");
5635 if (!(c_ptr->m_idx))
5638 msg_print("¤½¤Î¾ì½ê¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
5640 msg_print("Here is no pet.");
5646 m_ptr = &m_list[c_ptr->m_idx];
5648 if (!is_pet(m_ptr) && !force)
5651 msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤Ï¥Ú¥Ã¥È¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£");
5653 msg_print("That monster is no a pet.");
5658 if (!(r_info[m_ptr->r_idx].flags7 & RF7_RIDING))
5661 msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤Ë¤Ï¾è¤ì¤Ê¤µ¤½¤¦¤À¡£");
5663 msg_print("This monster doesn't seem suitable for riding.");
5668 if (!(p_ptr->pass_wall) && (c_ptr->feat >= FEAT_RUBBLE) && (c_ptr->feat <= FEAT_PERM_SOLID))
5671 msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤ÏÊɤÎÃæ¤Ë¤¤¤ë¡£");
5673 msg_print("This monster is in the wall.");
5678 if ((cave[py][px].feat >= FEAT_PATTERN_START) && (cave[py][px].feat <= FEAT_PATTERN_XTRA2) && ((cave[y][x].feat < FEAT_PATTERN_START) || (cave[y][x].feat > FEAT_PATTERN_XTRA2)))
5681 msg_print("¥Ñ¥¿¡¼¥ó¤Î¾å¤«¤é¤Ï¾è¤ì¤Þ¤»¤ó¡£");
5683 msg_print("You cannot ride from on Pattern.");
5691 msg_print("¤½¤Î¾ì½ê¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
5693 msg_print("Here is no monster.");
5698 if (r_info[m_ptr->r_idx].level > randint1((skill_exp[GINOU_RIDING]/50 + p_ptr->lev/2 +20)))
5701 msg_print("¤¦¤Þ¤¯¾è¤ì¤Ê¤«¤Ã¤¿¡£");
5703 msg_print("You failed to ride.");
5713 monster_desc(m_name, m_ptr, 0);
5716 msg_format("%s¤òµ¯¤³¤·¤¿¡£", m_name);
5718 msg_format("You have waked %s up.", m_name);
5722 p_ptr->riding = c_ptr->m_idx;
5725 /* Save the old location */
5729 /* Move the player to the safe location */
5733 /* Redraw the old spot */
5736 /* Redraw the new spot */
5739 /* Check for new panel */
5744 /* Mega-Hack -- Forget the view and lite */
5745 p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE);
5748 p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW);
5750 /* Update the monsters */
5751 p_ptr->update |= (PU_DISTANCE);
5753 /* Update the monsters */
5754 p_ptr->update |= (PU_BONUS);
5757 p_ptr->redraw |= (PR_MAP | PR_EXTRA);
5760 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
5762 p_ptr->redraw |= (PR_UHEALTH);
5768 static void do_name_pet(void)
5770 monster_type *m_ptr;
5773 bool old_name = FALSE;
5774 bool old_target_pet = target_pet;
5777 if (!target_set(TARGET_KILL))
5779 target_pet = old_target_pet;
5782 target_pet = old_target_pet;
5784 if (cave[target_row][target_col].m_idx)
5786 m_ptr = &m_list[cave[target_row][target_col].m_idx];
5792 msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤Ï¥Ú¥Ã¥È¤Ç¤Ï¤Ê¤¤¡£");
5794 msg_format("This monster is not a pet.");
5798 if (r_info[m_ptr->r_idx].flags1 & RF1_UNIQUE)
5801 msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤Î̾Á°¤ÏÊѤ¨¤é¤ì¤Ê¤¤¡ª");
5803 msg_format("You cannot change name of this monster!");
5807 monster_desc(m_name, m_ptr, 0);
5811 msg_format("%s¤Ë̾Á°¤ò¤Ä¤±¤ë¡£", m_name);
5813 msg_format("Name %s.", m_name);
5818 /* Start with nothing */
5819 strcpy(out_val, "");
5821 /* Use old inscription */
5822 if (m_ptr->nickname)
5824 /* Start with the old inscription */
5825 strcpy(out_val, quark_str(m_ptr->nickname));
5829 /* Get a new inscription (possibly empty) */
5831 if (get_string("̾Á°: ", out_val, 15))
5833 if (get_string("Name: ", out_val, 15))
5839 /* Save the inscription */
5840 m_ptr->nickname = quark_add(out_val);
5841 if (record_named_pet)
5845 monster_desc(m_name, m_ptr, 0x08);
5846 do_cmd_write_nikki(NIKKI_NAMED_PET, 0, m_name);
5851 if (record_named_pet && old_name)
5855 monster_desc(m_name, m_ptr, 0x08);
5856 do_cmd_write_nikki(NIKKI_NAMED_PET, 1, m_name);
5858 m_ptr->nickname = 0;
5865 * Issue a pet command
5867 void do_cmd_pet(void)
5872 cptr power_desc[36];
5877 int pets = 0, pet_ctr;
5878 monster_type *m_ptr;
5885 char target_buf[160];
5889 /* Calculate pets */
5890 /* Process the monsters (backwards) */
5891 for (pet_ctr = m_max - 1; pet_ctr >= 1; pet_ctr--)
5893 /* Access the monster */
5894 m_ptr = &m_list[pet_ctr];
5896 if (is_pet(m_ptr)) pets++;
5900 power_desc[num] = "¥Ú¥Ã¥È¤òÊü¤¹";
5902 power_desc[num] = "dismiss pets";
5905 powers[num++] = PET_DISMISS;
5908 sprintf(target_buf,"¥Ú¥Ã¥È¤Î¥¿¡¼¥²¥Ã¥È¤ò»ØÄê (¸½ºß¡§%s)",
5909 (pet_t_m_idx ? r_name + r_info[m_list[pet_t_m_idx].r_idx].name : "»ØÄê¤Ê¤·"));
5911 sprintf(target_buf,"specify a targert of pet (now:%s)",
5912 (pet_t_m_idx ? r_name + r_info[m_list[pet_t_m_idx].r_idx].name : "nothing"));
5914 power_desc[num] = target_buf;
5916 powers[num++] = PET_TARGET;
5919 power_desc[num] = "¶á¤¯¤Ë¤¤¤í";
5921 power_desc[num] = "stay close";
5924 if (p_ptr->pet_follow_distance == PET_CLOSE_DIST) mode = num;
5925 powers[num++] = PET_STAY_CLOSE;
5928 power_desc[num] = "¤Ä¤¤¤ÆÍ褤";
5930 power_desc[num] = "follow me";
5933 if (p_ptr->pet_follow_distance == PET_FOLLOW_DIST) mode = num;
5934 powers[num++] = PET_FOLLOW_ME;
5937 power_desc[num] = "Ũ¤ò¸«¤Ä¤±¤ÆÅݤ»";
5939 power_desc[num] = "seek and destroy";
5942 if (p_ptr->pet_follow_distance == PET_DESTROY_DIST) mode = num;
5943 powers[num++] = PET_SEEK_AND_DESTROY;
5946 power_desc[num] = "¾¯¤·Î¥¤ì¤Æ¤¤¤í";
5948 power_desc[num] = "give me space";
5951 if (p_ptr->pet_follow_distance == PET_SPACE_DIST) mode = num;
5952 powers[num++] = PET_ALLOW_SPACE;
5955 power_desc[num] = "Î¥¤ì¤Æ¤¤¤í";
5957 power_desc[num] = "stay away";
5960 if (p_ptr->pet_follow_distance == PET_AWAY_DIST) mode = num;
5961 powers[num++] = PET_STAY_AWAY;
5963 if (p_ptr->pet_extra_flags & PF_OPEN_DOORS)
5966 power_desc[num] = "¥É¥¢¤ò³«¤±¤ë (¸½ºß:ON)";
5968 power_desc[num] = "pets open doors (now On)";
5975 power_desc[num] = "¥É¥¢¤ò³«¤±¤ë (¸½ºß:OFF)";
5977 power_desc[num] = "pets open doors (now Off)";
5981 powers[num++] = PET_OPEN_DOORS;
5983 if (p_ptr->pet_extra_flags & PF_PICKUP_ITEMS)
5986 power_desc[num] = "¥¢¥¤¥Æ¥à¤ò½¦¤¦ (¸½ºß:ON)";
5988 power_desc[num] = "pets pick up items (now On)";
5995 power_desc[num] = "¥¢¥¤¥Æ¥à¤ò½¦¤¦ (¸½ºß:OFF)";
5997 power_desc[num] = "pets pick up items (now Off)";
6001 powers[num++] = PET_TAKE_ITEMS;
6003 if (p_ptr->pet_extra_flags & PF_TELEPORT)
6006 power_desc[num] = "¥Æ¥ì¥Ý¡¼¥È·ÏËâË¡¤ò»È¤¦ (¸½ºß:ON)";
6008 power_desc[num] = "allow teleport (now On)";
6015 power_desc[num] = "¥Æ¥ì¥Ý¡¼¥È·ÏËâË¡¤ò»È¤¦ (¸½ºß:OFF)";
6017 power_desc[num] = "allow teleport (now Off)";
6021 powers[num++] = PET_TELEPORT;
6023 if (p_ptr->pet_extra_flags & PF_ATTACK_SPELL)
6026 power_desc[num] = "¹¶·âËâË¡¤ò»È¤¦ (¸½ºß:ON)";
6028 power_desc[num] = "allow cast attack spell (now On)";
6035 power_desc[num] = "¹¶·âËâË¡¤ò»È¤¦ (¸½ºß:OFF)";
6037 power_desc[num] = "allow cast attack spell (now Off)";
6041 powers[num++] = PET_ATTACK_SPELL;
6043 if (p_ptr->pet_extra_flags & PF_SUMMON_SPELL)
6046 power_desc[num] = "¾¤´ËâË¡¤ò»È¤¦ (¸½ºß:ON)";
6048 power_desc[num] = "allow cast summon spell (now On)";
6055 power_desc[num] = "¾¤´ËâË¡¤ò»È¤¦ (¸½ºß:OFF)";
6057 power_desc[num] = "allow cast summon spell (now Off)";
6061 powers[num++] = PET_SUMMON_SPELL;
6063 if (p_ptr->pet_extra_flags & PF_BALL_SPELL)
6066 power_desc[num] = "¥×¥ì¥¤¥ä¡¼¤ò´¬¤¹þ¤àÈÏ°ÏËâË¡¤ò»È¤¦ (¸½ºß:ON)";
6068 power_desc[num] = "allow involve player in area spell (now On)";
6075 power_desc[num] = "¥×¥ì¥¤¥ä¡¼¤ò´¬¤¹þ¤àÈÏ°ÏËâË¡¤ò»È¤¦ (¸½ºß:OFF)";
6077 power_desc[num] = "allow involve player in area spell (now Off)";
6081 powers[num++] = PET_BALL_SPELL;
6086 power_desc[num] = "¥Ú¥Ã¥È¤«¤é¹ß¤ê¤ë";
6088 power_desc[num] = "get off a pet";
6095 power_desc[num] = "¥Ú¥Ã¥È¤Ë¾è¤ë";
6097 power_desc[num] = "ride a pet";
6101 powers[num++] = PET_RIDING;
6104 power_desc[num] = "¥Ú¥Ã¥È¤Ë̾Á°¤ò¤Ä¤±¤ë¡£";
6106 power_desc[num] = "name pets";
6109 powers[num++] = PET_NAME;
6111 if (p_ptr->riding && buki_motteruka(INVEN_RARM) && (empty_hands(FALSE) & 0x00000001) && ((inventory[INVEN_RARM].weight > 99) || (inventory[INVEN_RARM].tval == TV_POLEARM)))
6113 if (p_ptr->pet_extra_flags & PF_RYOUTE)
6116 power_desc[num] = "Éð´ï¤òÊÒ¼ê¤Ç»ý¤Ä";
6118 power_desc[num] = "use one hand to control a riding pet";
6125 power_desc[num] = "Éð´ï¤òξ¼ê¤Ç»ý¤Ä";
6127 power_desc[num] = "use both hands for a weapon.";
6132 powers[num++] = PET_RYOUTE;
6135 /* Nothing chosen yet */
6138 /* Build a prompt (accept all spells) */
6141 /* Build a prompt (accept all spells) */
6143 strnfmt(out_val, 78, "(¥³¥Þ¥ó¥É %c-%c¡¢'*'=°ìÍ÷¡¢ESC=½ªÎ») ¥³¥Þ¥ó¥É¤òÁª¤ó¤Ç¤¯¤À¤µ¤¤:",
6145 strnfmt(out_val, 78, "(Command %c-%c, *=List, ESC=exit) Select a command: ",
6148 I2A(0), I2A(num - 1));
6153 strnfmt(out_val, 78, "(¥³¥Þ¥ó¥É %c-%c¡¢'*'=°ìÍ÷¡¢ESC=½ªÎ») ¥³¥Þ¥ó¥É¤òÁª¤ó¤Ç¤¯¤À¤µ¤¤:",
6155 strnfmt(out_val, 78, "(Command %c-%c, *=List, ESC=exit) Select a command: ",
6158 I2A(0), '0' + num - 27);
6164 /* Save the screen */
6171 prt(format("%s%c) %s", (ctr == mode) ? "*" : " ", I2A(ctr), power_desc[ctr]), y + ctr, x);
6177 prt("", y + ctr, x);
6184 /* Get a command from the user */
6185 while (!flag && get_com(out_val, &choice, TRUE))
6187 /* Request redraw */
6188 if ((choice == ' ') || (choice == '*') || (choice == '?'))
6200 /* Save the screen */
6207 sprintf(buf, "%s%c) %s", (ctr == mode) ? "*" : " ", I2A(ctr), power_desc[ctr]);
6208 prt(buf, y + ctr, x);
6214 prt("", y + ctr, x);
6228 /* Restore the screen */
6236 if (isalpha(choice))
6239 ask = (isupper(choice));
6242 if (ask) choice = tolower(choice);
6244 /* Extract request */
6245 i = (islower(choice) ? A2I(choice) : -1);
6249 ask = FALSE; /* Can't uppercase digits */
6251 i = choice - '0' + 26;
6254 /* Totally Illegal */
6255 if ((i < 0) || (i >= num))
6266 strnfmt(buf, 78, "%s¤ò»È¤¤¤Þ¤¹¤«¡© ", power_desc[i]);
6268 strnfmt(buf, 78, "Use %s? ", power_desc[i]);
6272 /* Belay that order */
6273 if (!get_check(buf)) continue;
6280 /* Restore the screen */
6281 if (redraw) Term_load();
6283 /* Abort if needed */
6292 case PET_DISMISS: /* Dismiss pets */
6297 msg_print("¥Ú¥Ã¥È¤¬¤¤¤Ê¤¤¡ª");
6299 msg_print("You have no pets!");
6303 do_cmd_pet_dismiss();
6304 (void)calculate_upkeep();
6309 project_length = -1;
6310 if (!target_set(TARGET_KILL)) pet_t_m_idx = 0;
6313 cave_type *c_ptr = &cave[target_row][target_col];
6314 if (c_ptr->m_idx && (m_list[c_ptr->m_idx].ml))
6316 pet_t_m_idx = cave[target_row][target_col].m_idx;
6317 p_ptr->pet_follow_distance = PET_DESTROY_DIST;
6319 else pet_t_m_idx = 0;
6326 case PET_STAY_CLOSE:
6328 p_ptr->pet_follow_distance = PET_CLOSE_DIST;
6335 p_ptr->pet_follow_distance = PET_FOLLOW_DIST;
6339 /* "Seek and destoy" */
6340 case PET_SEEK_AND_DESTROY:
6342 p_ptr->pet_follow_distance = PET_DESTROY_DIST;
6345 /* "Give me space" */
6346 case PET_ALLOW_SPACE:
6348 p_ptr->pet_follow_distance = PET_SPACE_DIST;
6354 p_ptr->pet_follow_distance = PET_AWAY_DIST;
6357 /* flag - allow pets to open doors */
6358 case PET_OPEN_DOORS:
6360 if (p_ptr->pet_extra_flags & PF_OPEN_DOORS) p_ptr->pet_extra_flags &= ~(PF_OPEN_DOORS);
6361 else p_ptr->pet_extra_flags |= (PF_OPEN_DOORS);
6364 /* flag - allow pets to pickup items */
6365 case PET_TAKE_ITEMS:
6367 if (p_ptr->pet_extra_flags & PF_PICKUP_ITEMS)
6369 p_ptr->pet_extra_flags &= ~(PF_PICKUP_ITEMS);
6370 for (pet_ctr = m_max - 1; pet_ctr >= 1; pet_ctr--)
6372 /* Access the monster */
6373 m_ptr = &m_list[pet_ctr];
6377 monster_drop_carried_objects(m_ptr);
6381 else p_ptr->pet_extra_flags |= (PF_PICKUP_ITEMS);
6385 /* flag - allow pets to teleport */
6388 if (p_ptr->pet_extra_flags & PF_TELEPORT) p_ptr->pet_extra_flags &= ~(PF_TELEPORT);
6389 else p_ptr->pet_extra_flags |= (PF_TELEPORT);
6392 /* flag - allow pets to cast attack spell */
6393 case PET_ATTACK_SPELL:
6395 if (p_ptr->pet_extra_flags & PF_ATTACK_SPELL) p_ptr->pet_extra_flags &= ~(PF_ATTACK_SPELL);
6396 else p_ptr->pet_extra_flags |= (PF_ATTACK_SPELL);
6399 /* flag - allow pets to cast attack spell */
6400 case PET_SUMMON_SPELL:
6402 if (p_ptr->pet_extra_flags & PF_SUMMON_SPELL) p_ptr->pet_extra_flags &= ~(PF_SUMMON_SPELL);
6403 else p_ptr->pet_extra_flags |= (PF_SUMMON_SPELL);
6406 /* flag - allow pets to cast attack spell */
6407 case PET_BALL_SPELL:
6409 if (p_ptr->pet_extra_flags & PF_BALL_SPELL) p_ptr->pet_extra_flags &= ~(PF_BALL_SPELL);
6410 else p_ptr->pet_extra_flags |= (PF_BALL_SPELL);
6428 if (p_ptr->pet_extra_flags & PF_RYOUTE) p_ptr->pet_extra_flags &= ~(PF_RYOUTE);
6429 else p_ptr->pet_extra_flags |= (PF_RYOUTE);
6430 p_ptr->update |= (PU_BONUS);