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_HAJA);
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 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: /* Detect Evil */
1049 (void)detect_monsters_evil(DETECT_RAD_DEFAULT);
1051 case 1: /* Cure Light Wounds */
1052 (void)hp_player(damroll(2, 10));
1053 (void)set_cut(p_ptr->cut - 10);
1056 (void)set_blessed(randint1(12) + 12, FALSE);
1058 case 3: /* Remove Fear */
1059 (void)set_afraid(0);
1061 case 4: /* Call Light */
1062 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
1064 case 5: /* Detect Traps + Secret Doors */
1065 (void)detect_traps(DETECT_RAD_DEFAULT);
1066 (void)detect_doors(DETECT_RAD_DEFAULT);
1067 (void)detect_stairs(DETECT_RAD_DEFAULT);
1069 case 6: /* Cure Medium Wounds */
1070 (void)hp_player(damroll(4, 10));
1071 (void)set_cut((p_ptr->cut / 2) - 20);
1073 case 7: /* Satisfy Hunger */
1074 (void)set_food(PY_FOOD_MAX - 1);
1076 case 8: /* Remove Curse */
1080 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
1082 msg_print("You feel as if someone is watching over you.");
1086 case 9: /* Cure Poison */
1087 (void)set_poisoned(0);
1089 case 10: /* Cure Critical Wounds */
1090 (void)hp_player(damroll(8, 10));
1094 case 11: /* Sense Unseen */
1095 (void)set_tim_invis(randint1(24) + 24, FALSE);
1097 case 12: /* Holy Orb */
1098 if (!get_aim_dir(&dir)) return FALSE;
1100 fire_ball(GF_HOLY_FIRE, dir,
1101 (damroll(3, 6) + plev +
1102 (plev / ((p_ptr->pclass == CLASS_PRIEST ||
1103 p_ptr->pclass == CLASS_HIGH_MAGE ||
1104 p_ptr->pclass == CLASS_SORCERER) ? 2 : 4))),
1105 ((plev < 30) ? 2 : 3));
1108 case 13: /* Protection from Evil */
1109 (void)set_protevil(randint1(25) + 3 * p_ptr->lev, FALSE);
1111 case 14: /* Healing */
1112 (void)hp_player(300);
1116 case 15: /* Glyph of Warding */
1119 case 16: /* Exorcism */
1120 (void)dispel_undead(randint1(plev));
1121 (void)dispel_demons(randint1(plev));
1122 (void)turn_evil(plev);
1124 case 17: /* Dispel Curse */
1125 if (remove_all_curse())
1128 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
1130 msg_print("You feel as if someone is watching over you.");
1134 case 18: /* Dispel Undead + Demons */
1135 (void)dispel_undead(randint1(plev * 3));
1136 (void)dispel_demons(randint1(plev * 3));
1138 case 19: /* 'Day of the Dove' */
1139 charm_monsters(plev * 2);
1141 case 20: /* Dispel Evil */
1142 (void)dispel_evil(randint1(plev * 4));
1144 case 21: /* Banishment */
1145 if (banish_evil(100))
1148 msg_print("¿À¤Î¸æÎϤ¬¼Ù°¤òÂǤÁʧ¤Ã¤¿¡ª");
1150 msg_print("The power of your god banishes evil!");
1155 case 22: /* Holy Word */
1156 (void)dispel_evil(randint1(plev * 4));
1157 (void)hp_player(1000);
1158 (void)set_afraid(0);
1159 (void)set_poisoned(0);
1163 case 23: /* Warding True */
1167 case 24: /* Heroism */
1168 (void)set_hero(randint1(25) + 25, FALSE);
1169 (void)hp_player(10);
1170 (void)set_afraid(0);
1172 case 25: /* Prayer */
1173 (void)set_blessed(randint1(48) + 48, FALSE);
1175 case 26: /* Turn Undead */
1176 (void)mass_genocide_undead(plev+50,TRUE);
1178 case 27: /* Restoration */
1179 (void)do_res_stat(A_STR);
1180 (void)do_res_stat(A_INT);
1181 (void)do_res_stat(A_WIS);
1182 (void)do_res_stat(A_DEX);
1183 (void)do_res_stat(A_CON);
1184 (void)do_res_stat(A_CHR);
1185 (void)restore_level();
1187 case 28: /* Healing True */
1188 (void)hp_player(2000);
1192 case 29: /* Holy Vision */
1193 return identify_fully(FALSE);
1194 case 30: /* Divine Intervention */
1195 project(0, 1, py, px, 500, GF_HOLY_FIRE, PROJECT_KILL, -1);
1196 dispel_monsters(plev * 4);
1198 stun_monsters(plev * 4);
1199 confuse_monsters(plev * 4);
1200 turn_monsters(plev * 4);
1201 stasis_monsters(plev * 4);
1202 summon_specific(-1, py, px, plev, SUMMON_ANGEL, (PM_ALLOW_GROUP | PM_FORCE_PET));
1203 (void)set_hero(randint1(25) + 25, FALSE);
1204 (void)hp_player(300);
1205 (void)set_fast(randint1(20 + plev) + plev, FALSE);
1206 (void)set_afraid(0);
1208 case 31: /* Ultimate resistance */
1210 int v = randint1(plev/2)+plev/2;
1211 (void)set_fast(v, FALSE);
1212 set_oppose_acid(v, FALSE);
1213 set_oppose_elec(v, FALSE);
1214 set_oppose_fire(v, FALSE);
1215 set_oppose_cold(v, FALSE);
1216 set_oppose_pois(v, FALSE);
1217 set_ultimate_res(v, FALSE);
1222 msg_format("¤¢¤Ê¤¿¤ÏÉÔÌÀ¤Ê¥é¥¤¥Õ¤Î¼öʸ %d ¤ò¾§¤¨¤¿¡£", spell);
1224 msg_format("You cast an unknown Life spell: %d.", spell);
1235 static bool cast_sorcery_spell(int spell)
1238 int plev = p_ptr->lev;
1242 case 0: /* Detect Monsters */
1243 (void)detect_monsters_normal(DETECT_RAD_DEFAULT);
1245 case 1: /* Phase Door */
1246 teleport_player(10);
1248 case 2: /* Detect Doors and Traps */
1249 (void)detect_traps(DETECT_RAD_DEFAULT);
1250 (void)detect_doors(DETECT_RAD_DEFAULT);
1251 (void)detect_stairs(DETECT_RAD_DEFAULT);
1253 case 3: /* Light Area */
1254 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
1256 case 4: /* Confuse Monster */
1257 if (!get_aim_dir(&dir)) return FALSE;
1259 (void)confuse_monster(dir, (plev * 3) / 2);
1261 case 5: /* Teleport */
1262 teleport_player(plev * 5);
1264 case 6: /* Sleep Monster */
1265 if (!get_aim_dir(&dir)) return FALSE;
1267 (void)sleep_monster(dir);
1269 case 7: /* Recharging */
1270 return recharge(plev * 4);
1271 case 8: /* Magic Mapping */
1272 map_area(DETECT_RAD_MAP);
1274 case 9: /* Identify */
1275 return ident_spell(FALSE);
1276 case 10: /* Slow Monster */
1277 if (!get_aim_dir(&dir)) return FALSE;
1279 (void)slow_monster(dir);
1281 case 11: /* Mass Sleep */
1282 (void)sleep_monsters();
1284 case 12: /* Teleport Away */
1285 if (!get_aim_dir(&dir)) return FALSE;
1287 (void)fire_beam(GF_AWAY_ALL, dir, plev);
1289 case 13: /* Haste Self */
1290 (void)set_fast(randint1(20 + plev) + plev, FALSE);
1292 case 14: /* Detection True */
1293 (void)detect_all(DETECT_RAD_DEFAULT);
1295 case 15: /* Identify True */
1296 return identify_fully(FALSE);
1297 case 16: /* Detect Objects and Treasure*/
1298 (void)detect_objects_normal(DETECT_RAD_DEFAULT);
1299 (void)detect_treasure(DETECT_RAD_DEFAULT);
1300 (void)detect_objects_gold(DETECT_RAD_DEFAULT);
1302 case 17: /* Charm Monster */
1303 if (!get_aim_dir(&dir)) return FALSE;
1305 (void)charm_monster(dir, plev);
1307 case 18: /* Sense Minds */
1308 (void)set_tim_esp(randint1(30) + 25, FALSE);
1310 case 19: /* Teleport to town */
1313 case 20: /* Self knowledge */
1314 (void)self_knowledge();
1316 case 21: /* Teleport Level */
1318 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return FALSE;
1320 if (!get_check("Are you sure? (Teleport Level)")) return FALSE;
1322 (void)teleport_player_level();
1324 case 22: /* Word of Recall */
1325 if (!word_of_recall()) return FALSE;
1327 case 23: /* Dimension Door */
1329 msg_print("¼¡¸µ¤ÎÈ⤬³«¤¤¤¿¡£ÌÜŪÃϤòÁª¤ó¤Ç²¼¤µ¤¤¡£");
1331 msg_print("You open a dimensional gate. Choose a destination.");
1334 return dimension_door();
1335 case 24: /* Probing */
1338 case 25: /* Explosive Rune */
1341 case 26: /* Telekinesis */
1342 if (!get_aim_dir(&dir)) return FALSE;
1344 fetch(dir, plev * 15, FALSE);
1346 case 27: /* Clairvoyance */
1347 chg_virtue(V_KNOWLEDGE, 1);
1348 chg_virtue(V_ENLIGHTEN, 1);
1350 wiz_lite(FALSE, FALSE);
1351 if (!(p_ptr->telepathy))
1353 (void)set_tim_esp(randint1(30) + 25, FALSE);
1356 case 28: /* Charm Monsters */
1357 charm_monsters(plev * 2);
1359 case 29: /* Alchemy */
1361 case 30: /* Banish */
1362 banish_monsters(plev * 4);
1364 case 31: /* Globe of Invulnerability */
1365 (void)set_invuln(randint1(4) + 4, FALSE);
1369 msg_format("¤¢¤Ê¤¿¤ÏÉÔÌÀ¤Ê¥½¡¼¥µ¥ê¡¼¤Î¼öʸ %d ¤ò¾§¤¨¤¿¡£", spell);
1371 msg_format("You cast an unknown Sorcery spell: %d.", spell);
1381 static bool cast_nature_spell(int spell)
1385 int plev = p_ptr->lev;
1386 bool no_trump = FALSE;
1388 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
1389 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
1390 else beam = plev / 2;
1394 case 0: /* Detect Creatures */
1395 (void)detect_monsters_normal(DETECT_RAD_DEFAULT);
1397 case 1: /* Lightning Bolt */
1398 project_length = plev / 6 + 2;
1399 if (!get_aim_dir(&dir)) return FALSE;
1401 fire_beam(GF_ELEC, dir,
1402 damroll(3 + ((plev - 1) / 5), 4));
1404 case 2: /* Detect Doors & Traps */
1405 (void)detect_traps(DETECT_RAD_DEFAULT);
1406 (void)detect_doors(DETECT_RAD_DEFAULT);
1407 (void)detect_stairs(DETECT_RAD_DEFAULT);
1409 case 3: /* Produce Food */
1410 (void)set_food(PY_FOOD_MAX - 1);
1412 case 4: /* Daylight */
1413 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
1414 if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)
1417 msg_print("Æü¤Î¸÷¤¬¤¢¤Ê¤¿¤ÎÆùÂΤò¾Ç¤¬¤·¤¿¡ª");
1419 msg_print("The daylight scorches your flesh!");
1423 take_hit(DAMAGE_NOESCAPE, damroll(2, 2), "Æü¤Î¸÷", -1);
1425 take_hit(DAMAGE_NOESCAPE, damroll(2, 2), "daylight", -1);
1430 case 5: /* Animal Taming */
1431 if (!get_aim_dir(&dir)) return FALSE;
1433 (void)charm_animal(dir, plev);
1435 case 6: /* Resist Environment */
1436 (void)set_oppose_cold(randint1(20) + 20, FALSE);
1437 (void)set_oppose_fire(randint1(20) + 20, FALSE);
1438 (void)set_oppose_elec(randint1(20) + 20, FALSE);
1440 case 7: /* Cure Wounds & Poison */
1441 (void)hp_player(damroll(2, 8));
1443 (void)set_poisoned(0);
1445 case 8: /* Stone to Mud */
1446 if (!get_aim_dir(&dir)) return FALSE;
1448 (void)wall_to_mud(dir);
1450 case 9: /* Frost Bolt */
1451 if (!get_aim_dir(&dir)) return FALSE;
1452 fire_bolt_or_beam(beam - 10, GF_COLD, dir,
1453 damroll(3 + ((plev - 5) / 4), 8));
1455 case 10: /* Nature Awareness -- downgraded */
1456 map_area(DETECT_RAD_MAP);
1457 (void)detect_traps(DETECT_RAD_DEFAULT);
1458 (void)detect_doors(DETECT_RAD_DEFAULT);
1459 (void)detect_stairs(DETECT_RAD_DEFAULT);
1460 (void)detect_monsters_normal(DETECT_RAD_DEFAULT);
1462 case 11: /* Fire Bolt */
1463 if (!get_aim_dir(&dir)) return FALSE;
1464 fire_bolt_or_beam(beam - 10, GF_FIRE, dir,
1465 damroll(5 + ((plev - 5) / 4), 8));
1467 case 12: /* Ray of Sunlight */
1468 if (!get_aim_dir(&dir)) return FALSE;
1470 msg_print("ÂÀÍÛ¸÷Àþ¤¬¸½¤ì¤¿¡£");
1472 msg_print("A line of sunlight appears.");
1475 (void)lite_line(dir);
1477 case 13: /* Entangle */
1480 case 14: /* Summon Animals */
1481 if (!(summon_specific(-1, py, px, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET))))
1484 case 15: /* Herbal Healing */
1485 (void)hp_player(500);
1488 (void)set_poisoned(0);
1490 case 16: /* Stair Building */
1491 (void)stair_creation();
1493 case 17: /* Stone Skin */
1494 (void)set_shield(randint1(20) + 30, FALSE);
1496 case 18: /* Resistance True */
1497 (void)set_oppose_acid(randint1(20) + 20, FALSE);
1498 (void)set_oppose_elec(randint1(20) + 20, FALSE);
1499 (void)set_oppose_fire(randint1(20) + 20, FALSE);
1500 (void)set_oppose_cold(randint1(20) + 20, FALSE);
1501 (void)set_oppose_pois(randint1(20) + 20, FALSE);
1503 case 19: /* Tree Creation */
1504 (void)tree_creation();
1506 case 20: /* Animal Friendship */
1507 (void)charm_animals(plev * 2);
1509 case 21: /* Stone Tell */
1510 return identify_fully(FALSE);
1511 case 22: /* Wall of Stone */
1514 case 23: /* Protection from Corrosion */
1516 case 24: /* Earthquake */
1517 earthquake(py, px, 10);
1519 case 25: /* Whirlwind Attack */
1523 monster_type *m_ptr;
1525 for (dir = 0; dir < 8; dir++)
1527 y = py + ddy_ddd[dir];
1528 x = px + ddx_ddd[dir];
1529 c_ptr = &cave[y][x];
1531 /* Get the monster */
1532 m_ptr = &m_list[c_ptr->m_idx];
1534 /* Hack -- attack monsters */
1535 if (c_ptr->m_idx && (m_ptr->ml || cave_floor_bold(y, x)))
1540 case 26: /* Blizzard */
1541 if (!get_aim_dir(&dir)) return FALSE;
1543 fire_ball(GF_COLD, dir, 70 + plev * 3 / 2, (plev / 12) + 1);
1545 case 27: /* Lightning Storm */
1546 if (!get_aim_dir(&dir)) return FALSE;
1547 fire_ball(GF_ELEC, dir, 90 + plev * 3 / 2, (plev / 12) + 1);
1549 case 28: /* Whirlpool */
1550 if (!get_aim_dir(&dir)) return FALSE;
1551 fire_ball(GF_WATER, dir, 100 + plev * 3 / 2, (plev / 12) + 1);
1553 case 29: /* Call Sunlight */
1554 fire_ball(GF_LITE, 0, 150, 8);
1555 chg_virtue(V_KNOWLEDGE, 1);
1556 chg_virtue(V_ENLIGHTEN, 1);
1557 wiz_lite(FALSE, FALSE);
1558 if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)
1561 msg_print("Æü¸÷¤¬¤¢¤Ê¤¿¤ÎÆùÂΤò¾Ç¤¬¤·¤¿¡ª");
1563 msg_print("The sunlight scorches your flesh!");
1567 take_hit(DAMAGE_NOESCAPE, 50, "Æü¸÷", -1);
1569 take_hit(DAMAGE_NOESCAPE, 50, "sunlight", -1);
1574 case 30: /* Elemental Branding */
1575 brand_weapon(randint0(2));
1577 case 31: /* Nature's Wrath */
1578 (void)dispel_monsters(plev * 4);
1579 earthquake(py, px, 20 + (plev / 2));
1580 project(0, 1 + plev / 12, py, px,
1581 (100 + plev) * 2, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM, -1);
1585 msg_format("¤¢¤Ê¤¿¤ÏÉÔÌÀ¤Ê¥Í¥¤¥Á¥ã¡¼¤Î¼öʸ %d ¤ò¾§¤¨¤¿¡£", spell);
1587 msg_format("You cast an unknown Nature spell: %d.", spell);
1595 msg_print("ưʪ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
1597 msg_print("No animals arrive.");
1605 static bool cast_chaos_spell(int spell)
1608 int plev = p_ptr->lev;
1610 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
1611 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
1612 else beam = plev / 2;
1616 case 0: /* Magic Missile */
1617 if (!get_aim_dir(&dir)) return FALSE;
1619 fire_bolt_or_beam(beam - 10, GF_MISSILE, dir,
1620 damroll(3 + ((plev - 1) / 5), 4));
1622 case 1: /* Trap / Door destruction */
1623 (void)destroy_doors_touch();
1625 case 2: /* Flash of Light == Light Area */
1626 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
1628 case 3: /* Touch of Confusion */
1629 if (!(p_ptr->special_attack & ATTACK_CONFUSE))
1632 msg_print("¤¢¤Ê¤¿¤Î¼ê¤Ï¸÷¤ê»Ï¤á¤¿¡£");
1634 msg_print("Your hands start glowing.");
1637 p_ptr->special_attack |= ATTACK_CONFUSE;
1638 p_ptr->redraw |= (PR_STATUS);
1641 case 4: /* Mana Burst */
1642 if (!get_aim_dir(&dir)) return FALSE;
1644 fire_ball(GF_MISSILE, dir,
1645 (damroll(3, 5) + plev +
1646 (plev / (((p_ptr->pclass == CLASS_MAGE)
1647 || (p_ptr->pclass == CLASS_HIGH_MAGE)
1648 || (p_ptr->pclass == CLASS_SORCERER)) ? 2 : 4))),
1649 ((plev < 30) ? 2 : 3));
1650 /* Shouldn't actually use GF_MANA, as it will destroy all
1651 * items on the floor */
1653 case 5: /* Fire Bolt */
1654 if (!get_aim_dir(&dir)) return FALSE;
1656 fire_bolt_or_beam(beam, GF_FIRE, dir,
1657 damroll(8 + ((plev - 5) / 4), 8));
1659 case 6: /* Fist of Force ("Fist of Fun") */
1660 if (!get_aim_dir(&dir)) return FALSE;
1662 fire_ball(GF_DISINTEGRATE, dir,
1663 damroll(8 + ((plev - 5) / 4), 8), 0);
1665 case 7: /* Teleport Self */
1666 teleport_player(plev * 5);
1668 case 8: /* Wonder */
1670 /* This spell should become more useful (more
1671 controlled) as the player gains experience levels.
1672 Thus, add 1/5 of the player's level to the die roll.
1673 This eliminates the worst effects later on, while
1674 keeping the results quite random. It also allows
1675 some potent effects only at high level. */
1677 int die = randint1(100) + plev / 5;
1678 int vir = virtue_number(V_CHANCE);
1681 if (p_ptr->virtues[vir - 1] > 0)
1683 while (randint1(400) < p_ptr->virtues[vir - 1]) die++;
1687 while (randint1(400) < (0-p_ptr->virtues[vir - 1])) die--;
1692 chg_virtue(V_CHANCE, 1);
1694 if (!get_aim_dir(&dir)) return FALSE;
1697 msg_print("¤¢¤Ê¤¿¤ÏÎϤ¬¤ß¤Ê¤®¤ë¤Î¤ò´¶¤¸¤¿¡ª");
1699 msg_print("You feel a surge of power!");
1702 if (die < 8) clone_monster(dir);
1703 else if (die < 14) speed_monster(dir);
1704 else if (die < 26) heal_monster(dir, damroll(4, 6));
1705 else if (die < 31) poly_monster(dir);
1707 fire_bolt_or_beam(beam - 10, GF_MISSILE, dir,
1708 damroll(3 + ((plev - 1) / 5), 4));
1709 else if (die < 41) confuse_monster(dir, plev);
1710 else if (die < 46) fire_ball(GF_POIS, dir, 20 + (plev / 2), 3);
1711 else if (die < 51) (void)lite_line(dir);
1713 fire_bolt_or_beam(beam - 10, GF_ELEC, dir,
1714 damroll(3 + ((plev - 5) / 4), 8));
1716 fire_bolt_or_beam(beam - 10, GF_COLD, dir,
1717 damroll(5 + ((plev - 5) / 4), 8));
1719 fire_bolt_or_beam(beam, GF_ACID, dir,
1720 damroll(6 + ((plev - 5) / 4), 8));
1722 fire_bolt_or_beam(beam, GF_FIRE, dir,
1723 damroll(8 + ((plev - 5) / 4), 8));
1724 else if (die < 76) drain_life(dir, 75);
1725 else if (die < 81) fire_ball(GF_ELEC, dir, 30 + plev / 2, 2);
1726 else if (die < 86) fire_ball(GF_ACID, dir, 40 + plev, 2);
1727 else if (die < 91) fire_ball(GF_ICE, dir, 70 + plev, 3);
1728 else if (die < 96) fire_ball(GF_FIRE, dir, 80 + plev, 3);
1729 else if (die < 101) drain_life(dir, 100 + plev);
1732 earthquake(py, px, 12);
1736 destroy_area(py, px, 13+randint0(5), TRUE);
1740 symbol_genocide(plev+50, TRUE);
1742 else if (die < 110) dispel_monsters(120);
1745 dispel_monsters(150);
1753 case 9: /* Chaos Bolt */
1754 if (!get_aim_dir(&dir)) return FALSE;
1756 fire_bolt_or_beam(beam, GF_CHAOS, dir,
1757 damroll(10 + ((plev - 5) / 4), 8));
1759 case 10: /* Sonic Boom */
1761 msg_print("¥É¡¼¥ó¡ªÉô²°¤¬Íɤ줿¡ª");
1763 msg_print("BOOM! Shake the room!");
1766 project(0, plev / 10 + 2, py, px,
1767 (60 + plev), GF_SOUND, PROJECT_KILL | PROJECT_ITEM, -1);
1769 case 11: /* Doom Bolt -- always beam in 2.0.7 or later */
1770 if (!get_aim_dir(&dir)) return FALSE;
1772 fire_beam(GF_MANA, dir, damroll(11 + ((plev - 5) / 4), 8));
1774 case 12: /* Fire Ball */
1775 if (!get_aim_dir(&dir)) return FALSE;
1777 fire_ball(GF_FIRE, dir, plev + 55, 2);
1779 case 13: /* Teleport Other */
1780 if (!get_aim_dir(&dir)) return FALSE;
1782 (void)fire_beam(GF_AWAY_ALL, dir, plev);
1784 case 14: /* Word of Destruction */
1785 destroy_area(py, px, 13+randint0(5), TRUE);
1787 case 15: /* Invoke Logrus */
1788 if (!get_aim_dir(&dir)) return FALSE;
1790 fire_ball(GF_CHAOS, dir, plev*2 + 99, plev / 5);
1792 case 16: /* Polymorph Other */
1793 if (!get_aim_dir(&dir)) return FALSE;
1795 (void)poly_monster(dir);
1797 case 17: /* Chain Lightning */
1798 for (dir = 0; dir <= 9; dir++)
1799 fire_beam(GF_ELEC, dir, damroll(5 + (plev / 10), 8));
1801 case 18: /* Arcane Binding == Charging */
1802 return recharge(90);
1803 case 19: /* Disintegration */
1804 if (!get_aim_dir(&dir)) return FALSE;
1806 fire_ball(GF_DISINTEGRATE, dir, plev + 70, 3 + plev / 40);
1808 case 20: /* Alter Reality */
1811 case 21: /* Magic Rocket */
1812 if (!get_aim_dir(&dir)) return FALSE;
1815 msg_print("¥í¥±¥Ã¥Èȯ¼Í¡ª");
1817 msg_print("You launch a rocket!");
1820 fire_rocket(GF_ROCKET, dir, 120 + plev*2, 2);
1822 case 22: /* Chaos Branding */
1825 case 23: /* Summon monster, demon */
1828 bool pet = !one_in_(3);
1830 if (pet) mode |= PM_FORCE_PET;
1831 else mode |= PM_NO_PET;
1832 if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
1834 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, SUMMON_DEMON, mode))
1837 msg_print("ⲫ¤Î°½¤¬½¼Ëþ¤·¤¿¡£");
1839 msg_print("The area fills with a stench of sulphur and brimstone.");
1845 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
1847 msg_print("'What is thy bidding... Master?'");
1852 msg_print("¡ÖÈܤ·¤¼Ô¤è¡¢²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª ¤ªÁ°¤Îº²¤òĺ¤¯¤¾¡ª¡×");
1854 msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'");
1860 case 24: /* Beam of Gravity */
1861 if (!get_aim_dir(&dir)) return FALSE;
1863 fire_beam(GF_GRAVITY, dir, damroll(9 + ((plev - 5) / 4), 8));
1865 case 25: /* Meteor Swarm */
1868 int b = 10 + randint1(10);
1869 for (i = 0; i < b; i++)
1871 int count = 0, d = 0;
1876 if (count > 20) break;
1877 x = px - 8 + randint0(17);
1878 y = py - 8 + randint0(17);
1880 if (!in_bounds(y,x) || (!cave_floor_bold(y,x) && (cave[y][x].feat != FEAT_TREES)) || !player_has_los_bold(y, x)) continue;
1882 dx = (px > x) ? (px - x) : (x - px);
1883 dy = (py > y) ? (py - y) : (y - py);
1885 /* Approximate distance */
1886 d = (dy > dx) ? (dy + (dx >> 1)) : (dx + (dy >> 1));
1890 if (count > 20) continue;
1892 project(0, 2, y, x, plev * 2, GF_METEOR, PROJECT_KILL | PROJECT_JUMP | PROJECT_ITEM, -1);
1896 case 26: /* Flame Strike */
1897 fire_ball(GF_FIRE, 0, 300 + (3 * plev), 8);
1899 case 27: /* Call Chaos */
1902 case 28: /* Polymorph Self */
1904 if (!get_check("ÊѿȤ·¤Þ¤¹¡£¤è¤í¤·¤¤¤Ç¤¹¤«¡©")) return FALSE;
1906 if (!get_check("You will polymorph yourself. Are you sure? ")) return FALSE;
1910 case 29: /* Mana Storm */
1911 if (!get_aim_dir(&dir)) return FALSE;
1913 fire_ball(GF_MANA, dir, 300 + (plev * 4), 4);
1915 case 30: /* Breathe Logrus */
1916 if (!get_aim_dir(&dir)) return FALSE;
1918 fire_ball(GF_CHAOS, dir, p_ptr->chp, 2);
1920 case 31: /* Call the Void */
1925 msg_format("¤¢¤Ê¤¿¤ÏÉÔÌÀ¤Ê¥«¥ª¥¹¤Î¼öʸ %d ¤ò¾§¤¨¤¿¡£", spell);
1927 msg_format("You cast an unknown Chaos spell: %d.", spell);
1937 static bool cast_death_spell(int spell)
1941 int plev = p_ptr->lev;
1944 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
1945 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
1946 else beam = plev / 2;
1950 case 0: /* Detect Undead & Demons -> Unlife */
1951 (void)detect_monsters_nonliving(DETECT_RAD_DEFAULT);
1953 case 1: /* Malediction */
1954 if (!get_aim_dir(&dir)) return FALSE;
1955 /* A radius-0 ball may (1) be aimed at objects etc.,
1956 * and will affect them; (2) may be aimed at ANY
1957 * visible monster, unlike a 'bolt' which must travel
1958 * to the monster. */
1960 fire_ball(GF_HELL_FIRE, dir,
1961 damroll(3 + ((plev - 1) / 5), 4), 0);
1964 { /* Special effect first */
1965 dummy = randint1(1000);
1967 fire_ball_hide(GF_DEATH_RAY, dir, plev * 200, 0);
1968 else if (dummy < 500)
1969 fire_ball_hide(GF_TURN_ALL, dir, plev, 0);
1970 else if (dummy < 800)
1971 fire_ball_hide(GF_OLD_CONF, dir, plev, 0);
1973 fire_ball_hide(GF_STUN, dir, plev, 0);
1976 case 2: /* Detect Evil */
1977 (void)detect_monsters_evil(DETECT_RAD_DEFAULT);
1979 case 3: /* Stinking Cloud */
1980 if (!get_aim_dir(&dir)) return FALSE;
1982 fire_ball(GF_POIS, dir, 10 + (plev / 2), 2);
1984 case 4: /* Black Sleep */
1985 if (!get_aim_dir(&dir)) return FALSE;
1987 (void)sleep_monster(dir);
1989 case 5: /* Resist Poison */
1990 (void)set_oppose_pois(randint1(20) + 20, FALSE);
1992 case 6: /* Horrify */
1993 if (!get_aim_dir(&dir)) return FALSE;
1995 (void)fear_monster(dir, plev);
1996 (void)stun_monster(dir, plev);
1998 case 7: /* Enslave Undead */
1999 if (!get_aim_dir(&dir)) return FALSE;
2001 (void)control_one_undead(dir, plev);
2003 case 8: /* Orb of Entropy */
2004 if (!get_aim_dir(&dir)) return FALSE;
2006 fire_ball(GF_OLD_DRAIN, dir,
2007 (damroll(3, 6) + plev +
2008 (plev / (((p_ptr->pclass == CLASS_MAGE) ||
2009 (p_ptr->pclass == CLASS_HIGH_MAGE) ||
2010 (p_ptr->pclass == CLASS_SORCERER)) ? 2 : 4))),
2011 ((plev < 30) ? 2 : 3));
2013 case 9: /* Nether Bolt */
2014 if (!get_aim_dir(&dir)) return FALSE;
2016 fire_bolt_or_beam(beam, GF_NETHER, dir,
2017 damroll(8 + ((plev - 5) / 4), 8));
2019 case 10: /* Cloud kill */
2020 project(0, plev / 10 + 2, py, px,
2021 (30 + plev) * 2, GF_POIS, PROJECT_KILL | PROJECT_ITEM, -1);
2023 case 11: /* Genocide One */
2024 if (!get_aim_dir(&dir)) return FALSE;
2026 fire_ball_hide(GF_GENOCIDE, dir, plev + 50, 0);
2028 case 12: /* Poison Branding */
2031 case 13: /* Vampiric Drain */
2032 if (!get_aim_dir(&dir)) return FALSE;
2034 dummy = plev * 2 + randint1(plev * 2); /* Dmg */
2035 if (drain_life(dir, dummy))
2037 chg_virtue(V_SACRIFICE, -1);
2038 chg_virtue(V_VITALITY, -1);
2040 (void)hp_player(dummy);
2041 /* Gain nutritional sustenance: 150/hp drained */
2042 /* A Food ration gives 5000 food points (by contrast) */
2043 /* Don't ever get more than "Full" this way */
2044 /* But if we ARE Gorged, it won't cure us */
2045 dummy = p_ptr->food + MIN(5000, 100 * dummy);
2046 if (p_ptr->food < PY_FOOD_MAX) /* Not gorged already */
2047 (void)set_food(dummy >= PY_FOOD_MAX ? PY_FOOD_MAX - 1 : dummy);
2050 case 14: /* Animate Dead */
2051 animate_dead(0, py, px);
2053 case 15: /* Genocide */
2054 (void)symbol_genocide(plev+50, TRUE);
2056 case 16: /* Berserk */
2057 (void)set_shero(randint1(25) + 25, FALSE);
2058 (void)hp_player(30);
2059 (void)set_afraid(0);
2061 case 17: /* Invoke Spirits */
2063 int die = randint1(100) + plev / 5;
2064 int vir = virtue_number(V_CHANCE);
2067 if (p_ptr->virtues[vir - 1] > 0)
2069 while (randint1(400) < p_ptr->virtues[vir - 1]) die++;
2073 while (randint1(400) < (0-p_ptr->virtues[vir - 1])) die--;
2077 if (!get_aim_dir(&dir)) return FALSE;
2080 msg_print("¤¢¤Ê¤¿¤Ï»à¼Ô¤¿¤Á¤ÎÎϤò¾·½¸¤·¤¿...");
2082 msg_print("You call on the power of the dead...");
2085 chg_virtue(V_CHANCE, 1);
2089 msg_print("¤¢¤Ê¤¿¤Ï¤ª¤É¤í¤ª¤É¤í¤·¤¤ÎϤΤ¦¤Í¤ê¤ò´¶¤¸¤¿¡ª");
2091 msg_print("You feel a surge of eldritch force!");
2098 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¤¢¤Ê¤¿¤Î¼þ¤ê¤ÎÃÏÌ̤«¤éµà¤Á¤¿¿Í±Æ¤¬Î©¤Á¾å¤¬¤Ã¤Æ¤¤¿¡ª");
2100 msg_print("Oh no! Mouldering forms rise from the earth around you!");
2103 (void)summon_specific(0, py, px, dun_level, SUMMON_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
2104 chg_virtue(V_UNLIFE, 1);
2109 msg_print("̾¾õ¤·Æñ¤¤¼Ù°¤Ê¸ºß¤¬¤¢¤Ê¤¿¤Î¿´¤òÄ̤ê²á¤®¤Æ¹Ô¤Ã¤¿...");
2111 msg_print("An unnamable evil brushes against your mind...");
2114 set_afraid(p_ptr->afraid + randint1(4) + 4);
2119 msg_print("¤¢¤Ê¤¿¤ÎƬ¤ËÂçÎ̤ÎÍ©Î¤Á¤ÎÁû¡¹¤·¤¤À¼¤¬²¡¤·´ó¤»¤Æ¤¤¿...");
2121 msg_print("Your head is invaded by a horde of gibbering spectral voices...");
2124 set_confused(p_ptr->confused + randint1(4) + 4);
2132 fire_bolt_or_beam(beam - 10, GF_MISSILE, dir,
2133 damroll(3 + ((plev - 1) / 5), 4));
2137 confuse_monster (dir, plev);
2141 fire_ball(GF_POIS, dir, 20 + (plev / 2), 3);
2145 (void)lite_line(dir);
2149 fire_bolt_or_beam(beam - 10, GF_ELEC, dir,
2150 damroll(3+((plev-5)/4),8));
2154 fire_bolt_or_beam(beam - 10, GF_COLD, dir,
2155 damroll(5+((plev-5)/4),8));
2159 fire_bolt_or_beam(beam, GF_ACID, dir,
2160 damroll(6+((plev-5)/4),8));
2164 fire_bolt_or_beam(beam, GF_FIRE, dir,
2165 damroll(8+((plev-5)/4),8));
2169 drain_life(dir, 75);
2173 fire_ball(GF_ELEC, dir, 30 + plev / 2, 2);
2177 fire_ball(GF_ACID, dir, 40 + plev, 2);
2181 fire_ball(GF_ICE, dir, 70 + plev, 3);
2185 fire_ball(GF_FIRE, dir, 80 + plev, 3);
2189 drain_life(dir, 100 + plev);
2193 earthquake(py, px, 12);
2197 destroy_area(py, px, 13+randint0(5), TRUE);
2201 symbol_genocide(plev+50, TRUE);
2205 dispel_monsters(120);
2209 dispel_monsters(150);
2217 msg_print("±¢±µ¤ÊÀ¼¤¬¥¯¥¹¥¯¥¹¾Ð¤¦¡£¡Ö¤â¤¦¤¹¤°¤ª¤Þ¤¨¤Ï²æ¡¹¤ÎÃç´Ö¤Ë¤Ê¤ë¤À¤í¤¦¡£¼å¤¼Ô¤è¡£¡×");
2219 msg_print("Sepulchral voices chuckle. 'Soon you will join us, mortal.'");
2224 case 18: /* Dark Bolt */
2225 if (!get_aim_dir(&dir)) return FALSE;
2227 fire_bolt_or_beam(beam, GF_DARK, dir,
2228 damroll(4 + ((plev - 5) / 4), 8));
2230 case 19: /* Battle Frenzy */
2231 (void)set_shero(randint1(25) + 25, FALSE);
2232 (void)hp_player(30);
2233 (void)set_afraid(0);
2234 (void)set_fast(randint1(20 + (plev / 2)) + (plev / 2), FALSE);
2236 case 20: /* Vampiric Branding */
2239 case 21: /* Vampirism True */
2240 if (!get_aim_dir(&dir)) return FALSE;
2242 chg_virtue(V_SACRIFICE, -1);
2243 chg_virtue(V_VITALITY, -1);
2245 for (dummy = 0; dummy < 3; dummy++)
2247 if (drain_life(dir, 100))
2251 case 22: /* Word of Death */
2252 (void)dispel_living(randint1(plev * 3));
2254 case 23: /* Darkness Storm */
2255 if (!get_aim_dir(&dir)) return FALSE;
2257 fire_ball(GF_DARK, dir, 100+plev*2, 4);
2259 case 24: /* Death Ray */
2260 if (!get_aim_dir(&dir)) return FALSE;
2262 (void)death_ray(dir, plev);
2264 case 25: /* Raise the Dead */
2267 bool pet = one_in_(3);
2270 type = (plev > 47 ? SUMMON_HI_UNDEAD : SUMMON_UNDEAD);
2272 if (!pet || (pet && (plev > 24) && one_in_(3)))
2273 mode |= PM_ALLOW_GROUP;
2275 if (pet) mode |= PM_FORCE_PET;
2276 else mode |= (PM_ALLOW_UNIQUE | PM_NO_PET);
2278 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, type, mode))
2281 msg_print("Î䤿¤¤É÷¤¬¤¢¤Ê¤¿¤Î¼þ¤ê¤Ë¿á¤»Ï¤á¤¿¡£¤½¤ì¤ÏÉåÇÔ½¤ò±¿¤ó¤Ç¤¤¤ë...");
2283 msg_print("Cold winds begin to blow around you, carrying with them the stench of decay...");
2289 msg_print("¸Å¤¨¤Î»à¤»¤ë¼Ô¶¦¤¬¤¢¤Ê¤¿¤Ë»Å¤¨¤ë¤¿¤áÅÚ¤«¤éᴤä¿¡ª");
2291 msg_print("Ancient, long-dead forms arise from the ground to serve you!");
2296 msg_print("»à¼Ô¤¬á´¤Ã¤¿¡£Ì²¤ê¤ò˸¤²¤ë¤¢¤Ê¤¿¤òȳ¤¹¤ë¤¿¤á¤Ë¡ª");
2298 msg_print("'The dead arise... to punish you for disturbing them!'");
2301 chg_virtue(V_UNLIFE, 1);
2306 case 26: /* Esoteria */
2307 if (randint1(50) > plev)
2308 return ident_spell(FALSE);
2310 return identify_fully(FALSE);
2312 case 27: /* Mimic vampire */
2313 (void)set_mimic(10+plev/2 + randint1(10+plev/2), MIMIC_VAMPIRE, FALSE);
2315 case 28: /* Restore Life */
2316 (void)restore_level();
2318 case 29: /* Mass Genocide */
2319 (void)mass_genocide(plev+50, TRUE);
2321 case 30: /* Hellfire */
2322 if (!get_aim_dir(&dir)) return FALSE;
2324 fire_ball(GF_HELL_FIRE, dir, 666, 3);
2326 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "ÃϹö¤Î¹å²Ð¤Î¼öʸ¤ò¾§¤¨¤¿ÈèÏ«", -1);
2328 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "the strain of casting Hellfire", -1);
2332 case 31: /* Wraithform */
2333 set_wraith_form(randint1(plev / 2) + (plev / 2), FALSE);
2336 msg_format("You cast an unknown Death spell: %d.", spell);
2344 static bool cast_trump_spell(int spell, bool success)
2348 int plev = p_ptr->lev;
2349 int summon_lev = plev * 2 / 3 + randint1(plev/2);
2351 bool no_trump = FALSE;
2352 bool unique_okay = FALSE;
2355 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
2356 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
2357 else beam = plev / 2;
2359 if (summon_lev < 1) summon_lev = 1;
2360 if (!success || (randint1(50+plev) < plev/10)) unique_okay = TRUE;
2363 case 0: /* Phase Door */
2366 teleport_player(10);
2369 case 1: /* Trump Spiders */
2371 bool pet = success; /* (randint1(5) > 2) */
2372 u32b mode = PM_ALLOW_GROUP;
2374 if (pet) mode |= PM_FORCE_PET;
2375 else mode |= PM_NO_PET;
2378 msg_print("¤¢¤Ê¤¿¤ÏÃØéá¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2380 msg_print("You concentrate on the trump of an spider...");
2383 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_SPIDER, mode))
2387 msg_print("¾¤´Ô¤µ¤ì¤¿ÃØéá¤ÏÅܤäƤ¤¤ë¡ª");
2389 msg_print("The summoned spiders get angry!");
2399 case 2: /* Shuffle */
2402 /* A limited power 'wonder' spell */
2403 int die = randint1(120);
2404 int vir = virtue_number(V_CHANCE);
2406 if ((p_ptr->pclass == CLASS_ROGUE) ||
2407 (p_ptr->pclass == CLASS_HIGH_MAGE) ||
2408 (p_ptr->pclass == CLASS_SORCERER))
2409 die = (randint1(110)) + plev / 5;
2410 /* Card sharks and high mages get a level bonus */
2414 if (p_ptr->virtues[vir - 1] > 0)
2416 while (randint1(400) < p_ptr->virtues[vir - 1]) die++;
2420 while (randint1(400) < (0-p_ptr->virtues[vir - 1])) die--;
2425 msg_print("¤¢¤Ê¤¿¤Ï¥«¡¼¥É¤òÀڤäưìËç°ú¤¤¤¿...");
2427 msg_print("You shuffle the deck and draw a card...");
2431 chg_virtue(V_CHANCE, 1);
2436 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡Ô»à¡Õ¤À¡ª");
2438 msg_print("Oh no! It's Death!");
2441 for (dummy = 0; dummy < randint1(3); dummy++)
2442 (void)activate_hi_summon(py, px, FALSE);
2447 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡Ô°Ëâ¡Õ¤À¡ª");
2449 msg_print("Oh no! It's the Devil!");
2452 (void)summon_specific(0, py, px, dun_level, SUMMON_DEMON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
2458 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡ÔÄߤé¤ì¤¿ÃË¡Õ¤À¡ª");
2460 msg_print("Oh no! It's the Hanged Man.");
2463 (void)activate_ty_curse(FALSE, &count);
2468 msg_print("¡ÔÉÔĴϤηõ¡Õ¤À¡£");
2470 msg_print("It's the swords of discord.");
2473 aggravate_monsters(0);
2478 msg_print("¡Ô¶ò¼Ô¡Õ¤À¡£");
2480 msg_print("It's the Fool.");
2483 (void)do_dec_stat(A_INT);
2484 (void)do_dec_stat(A_WIS);
2489 msg_print("´ñ̯¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
2491 msg_print("It's the picture of a strange monster.");
2494 if (!(summon_specific(0, py, px, (dun_level * 3) / 2, 32 + randint1(6), (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET))))
2500 msg_print("¡Ô·î¡Õ¤À¡£");
2502 msg_print("It's the Moon.");
2510 msg_print("¡Ô±¿Ì¿¤ÎÎØ¡Õ¤À¡£");
2512 msg_print("It's the Wheel of Fortune.");
2515 wild_magic(randint0(32));
2520 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
2522 msg_print("It's a teleport trump card.");
2525 teleport_player(10);
2530 msg_print("¡ÔÀµµÁ¡Õ¤À¡£");
2532 msg_print("It's Justice.");
2535 set_blessed(p_ptr->lev, FALSE);
2540 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
2542 msg_print("It's a teleport trump card.");
2545 teleport_player(100);
2550 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
2552 msg_print("It's a teleport trump card.");
2555 teleport_player(200);
2560 msg_print("¡ÔÅã¡Õ¤À¡£");
2562 msg_print("It's the Tower.");
2570 msg_print("¡ÔÀáÀ©¡Õ¤À¡£");
2572 msg_print("It's Temperance.");
2575 sleep_monsters_touch();
2580 msg_print("¡ÔÅã¡Õ¤À¡£");
2582 msg_print("It's the Tower.");
2585 earthquake(py, px, 5);
2590 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
2592 msg_print("It's the picture of a friendly monster.");
2595 if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE1, PM_FORCE_PET)))
2601 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
2603 msg_print("It's the picture of a friendly monster.");
2606 if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE2, PM_FORCE_PET)))
2612 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
2614 msg_print("It's the picture of a friendly monster.");
2617 if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE4, PM_FORCE_PET)))
2623 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
2625 msg_print("It's the picture of a friendly monster.");
2628 if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE5, PM_FORCE_PET)))
2634 msg_print("¡ÔÎø¿Í¡Õ¤À¡£");
2636 msg_print("It's the Lovers.");
2639 if (get_aim_dir(&dir))
2640 (void)charm_monster(dir, MIN(p_ptr->lev, 20));
2645 msg_print("¡Ô±£¼Ô¡Õ¤À¡£");
2647 msg_print("It's the Hermit.");
2655 msg_print("¡Ô¿³È½¡Õ¤À¡£");
2657 msg_print("It's the Judgement.");
2660 do_cmd_rerate(FALSE);
2661 if (p_ptr->muta1 || p_ptr->muta2 || p_ptr->muta3)
2664 msg_print("Á´¤Æ¤ÎÆÍÁ³ÊÑ°Û¤¬¼£¤Ã¤¿¡£");
2666 msg_print("You are cured of all mutations.");
2669 p_ptr->muta1 = p_ptr->muta2 = p_ptr->muta3 = 0;
2670 p_ptr->update |= PU_BONUS;
2677 msg_print("¡ÔÂÀÍÛ¡Õ¤À¡£");
2679 msg_print("It's the Sun.");
2682 chg_virtue(V_KNOWLEDGE, 1);
2683 chg_virtue(V_ENLIGHTEN, 1);
2684 wiz_lite(FALSE, FALSE);
2689 msg_print("¡ÔÀ¤³¦¡Õ¤À¡£");
2691 msg_print("It's the World.");
2694 if (p_ptr->exp < PY_MAX_EXP)
2696 s32b ee = (p_ptr->exp / 25) + 1;
2697 if (ee > 5000) ee = 5000;
2699 msg_print("¹¹¤Ë·Ð¸³¤òÀѤó¤À¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
2701 msg_print("You feel more experienced.");
2709 case 3: /* Reset Recall */
2712 if (!reset_recall()) return FALSE;
2715 case 4: /* Teleport Self */
2718 teleport_player(plev * 4);
2721 case 5: /* Trump Spying */
2724 (void)set_tim_esp(randint1(30) + 25, FALSE);
2727 case 6: /* Teleport Away */
2730 if (!get_aim_dir(&dir)) return FALSE;
2731 (void)fire_beam(GF_AWAY_ALL, dir, plev);
2734 case 7: /* Trump Animals */
2736 bool pet = success; /* was (randint1(5) > 2) */
2737 int type = (pet ? SUMMON_ANIMAL_RANGER : SUMMON_ANIMAL);
2740 if (pet) mode |= PM_FORCE_PET;
2741 else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
2744 msg_print("¤¢¤Ê¤¿¤Ïưʪ¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2746 msg_print("You concentrate on the trump of an animal...");
2750 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, type, mode))
2754 msg_print("¾¤´¤µ¤ì¤¿Æ°Êª¤ÏÅܤäƤ¤¤ë¡ª");
2756 msg_print("The summoned animal gets angry!");
2767 case 8: /* Trump Reach */
2770 if (!get_aim_dir(&dir)) return FALSE;
2771 fetch(dir, plev * 15, TRUE);
2774 case 9: /* Trump Kamikaze */
2779 if (!target_set(TARGET_KILL)) return FALSE;
2786 msg_print("¤¢¤Ê¤¿¤Ï¥«¥ß¥«¥¼¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2788 msg_print("You concentrate on several trumps at once...");
2792 for (dummy = 2 + randint0(plev / 7); dummy > 0; dummy--)
2794 bool pet = success; /* was (randint1(10) > 3) */
2798 if (pet) mode |= PM_FORCE_PET;
2799 else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
2801 if (p_ptr->pclass == CLASS_BEASTMASTER)
2803 type = SUMMON_KAMIKAZE_LIVING;
2807 type = SUMMON_KAMIKAZE;
2810 if (summon_specific((pet ? -1 : 0), y, x, summon_lev, type, mode))
2814 msg_print("¾¤´Ô¤µ¤ì¤¿¥â¥ó¥¹¥¿¡¼¤ÏÅܤäƤ¤¤ë¡ª");
2816 msg_print("The summoned creatures get angry!");
2824 case 10: /* Phantasmal Servant */
2827 if (summon_specific(-1, py, px, (summon_lev * 3) / 2, SUMMON_PHANTOM, PM_FORCE_PET))
2830 msg_print("¸æÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¸æ¼ç¿ÍÍÍ¡©");
2832 msg_print("'Your wish, master?'");
2842 case 11: /* Speed Monster */
2845 bool old_target_pet = target_pet;
2847 if (!get_aim_dir(&dir))
2849 target_pet = old_target_pet;
2852 target_pet = old_target_pet;
2853 (void)speed_monster(dir);
2856 case 12: /* Teleport Level */
2860 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return FALSE;
2862 if (!get_check("Are you sure? (Teleport Level)")) return FALSE;
2864 (void)teleport_player_level();
2867 case 13: /* Dimension Door */
2871 msg_print("¼¡¸µ¤ÎÈ⤬³«¤¤¤¿¡£ÌÜŪÃϤòÁª¤ó¤Ç²¼¤µ¤¤¡£");
2873 msg_print("You open a dimensional gate. Choose a destination.");
2876 return dimension_door();
2879 case 14: /* Word of Recall */
2882 if (!word_of_recall()) return FALSE;
2885 case 15: /* Banish */
2888 banish_monsters(plev * 4);
2891 case 16: /* Swap Position */
2895 project_length = -1;
2896 if (!get_aim_dir(&dir))
2903 (void)teleport_swap(dir);
2907 case 17: /* Trump Undead */
2909 bool pet = success; /* (randint1(10) > 3) */
2912 if (pet) mode |= PM_FORCE_PET;
2913 else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
2916 msg_print("¤¢¤Ê¤¿¤Ï¥¢¥ó¥Ç¥Ã¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2918 msg_print("You concentrate on the trump of an undead creature...");
2922 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_UNDEAD, mode))
2926 msg_print("¾¤´Ô¤µ¤ì¤¿¥¢¥ó¥Ç¥Ã¥É¤ÏÅܤäƤ¤¤ë¡ª");
2928 msg_print("The summoned undead creature gets angry!");
2939 case 18: /* Trump Reptiles */
2941 bool pet = success; /* was (randint1(5) > 2) */
2944 if (pet) mode |= PM_FORCE_PET;
2945 else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
2948 msg_print("¤¢¤Ê¤¿¤Ïà¨ÃîÎà¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2950 msg_print("You concentrate on the trump of a reptile...");
2954 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HYDRA, mode))
2958 msg_print("¾¤´Ô¤µ¤ì¤¿à¨ÃîÎà¤ÏÅܤäƤ¤¤ë¡ª");
2960 msg_print("The summoned reptile gets angry!");
2971 case 19: /* Trump Monsters */
2976 msg_print("¤¢¤Ê¤¿¤Ï¥â¥ó¥¹¥¿¡¼¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2978 msg_print("You concentrate on several trumps at once...");
2982 for (dummy = 0; dummy < 1 + ((plev - 15)/ 10); dummy++)
2984 bool pet = success; /* was (randint1(10) > 3) */
2988 if (pet) mode |= PM_FORCE_PET;
2989 else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
2991 if (unique_okay) mode |= PM_ALLOW_UNIQUE;
2993 if (p_ptr->pclass == CLASS_BEASTMASTER)
2995 type = SUMMON_LIVING;
3002 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, type, mode))
3006 msg_print("¾¤´Ô¤µ¤ì¤¿¥â¥ó¥¹¥¿¡¼¤ÏÅܤäƤ¤¤ë¡ª");
3008 msg_print("The summoned creatures get angry!");
3016 case 20: /* Trump Hounds */
3018 bool pet = success; /* was (randint1(5) > 2) */
3019 u32b mode = PM_ALLOW_GROUP;
3021 if (pet) mode |= PM_FORCE_PET;
3022 else mode |= PM_NO_PET;
3025 msg_print("¤¢¤Ê¤¿¤Ï¥Ï¥¦¥ó¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3027 msg_print("You concentrate on the trump of a hound...");
3031 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HOUND, mode))
3035 msg_print("¾¤´Ô¤µ¤ì¤¿¥Ï¥¦¥ó¥É¤ÏÅܤäƤ¤¤ë¡ª");
3037 msg_print("The summoned hounds get angry!");
3048 case 21: /* Trump Branding */
3054 case 22: /* Living Trump */
3058 /* Teleport control */
3061 /* Random teleportation (uncontrolled) */
3063 /* Gain the mutation */
3064 if (gain_random_mutation(dummy))
3066 msg_print("¤¢¤Ê¤¿¤ÏÀ¸¤¤Æ¤¤¤ë¥«¡¼¥É¤ËÊѤï¤Ã¤¿¡£");
3068 msg_print("You have turned into a Living Trump.");
3073 case 23: /* Trump Cyberdemon */
3075 bool pet = success; /* was (randint1(10) > 3) */
3078 if (pet) mode |= PM_FORCE_PET;
3079 else mode |= PM_NO_PET;
3082 msg_print("¤¢¤Ê¤¿¤Ï¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3084 msg_print("You concentrate on the trump of a Cyberdemon...");
3088 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_CYBER, mode))
3092 msg_print("¾¤´Ô¤µ¤ì¤¿¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤ÏÅܤäƤ¤¤ë¡ª");
3094 msg_print("The summoned Cyberdemon gets angry!");
3105 case 24: /* Trump Divination */
3108 (void)detect_all(DETECT_RAD_DEFAULT);
3111 case 25: /* Trump Lore */
3114 return identify_fully(FALSE);
3117 case 26: /* Heal Monster */
3120 bool old_target_pet = target_pet;
3122 if (!get_aim_dir(&dir))
3124 target_pet = old_target_pet;
3127 target_pet = old_target_pet;
3129 (void)heal_monster(dir, p_ptr->lev * 10 + 200);
3132 case 27: /* Trump Dragon */
3134 bool pet = success; /* was (randint1(10) > 3) */
3137 if (pet) mode |= PM_FORCE_PET;
3138 else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
3141 msg_print("¤¢¤Ê¤¿¤Ï¥É¥é¥´¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3143 msg_print("You concentrate on the trump of a dragon...");
3147 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_DRAGON, mode))
3151 msg_print("¾¤´Ô¤µ¤ì¤¿¥É¥é¥´¥ó¤ÏÅܤäƤ¤¤ë¡ª");
3153 msg_print("The summoned dragon gets angry!");
3164 case 28: /* Trump Meteor */
3167 int x, y, dx, dy, i;
3168 int b = 10 + randint1(10);
3169 for (i = 0; i < b; i++)
3171 int count = 0, d = 0;
3176 if (count > 20) break;
3177 x = px - 8 + randint0(17);
3178 y = py - 8 + randint0(17);
3180 if (!in_bounds(y,x) || (!cave_floor_bold(y,x) && (cave[y][x].feat != FEAT_TREES)) || !player_has_los_bold(y, x)) continue;
3182 dx = (px > x) ? (px - x) : (x - px);
3183 dy = (py > y) ? (py - y) : (y - py);
3185 /* Approximate distance */
3186 d = (dy > dx) ? (dy + (dx >> 1)) : (dx + (dy >> 1));
3190 if (count > 20) continue;
3192 project(0, 2, y, x, plev * 2, GF_METEOR, PROJECT_KILL | PROJECT_JUMP | PROJECT_ITEM, -1);
3196 case 29: /* Trump Demon */
3198 bool pet = success; /* was (randint1(10) > 3) */
3201 if (pet) mode |= PM_FORCE_PET;
3202 else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
3205 msg_print("¤¢¤Ê¤¿¤Ï¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3207 msg_print("You concentrate on the trump of a demon...");
3211 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_DEMON, mode))
3215 msg_print("¾¤´Ô¤µ¤ì¤¿¥Ç¡¼¥â¥ó¤ÏÅܤäƤ¤¤ë¡ª");
3217 msg_print("The summoned demon gets angry!");
3228 case 30: /* Trump Greater Undead */
3230 bool pet = success; /* was (randint1(10) > 3) */
3233 if (pet) mode |= PM_FORCE_PET;
3234 else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
3236 if (unique_okay) mode |= PM_ALLOW_UNIQUE;
3239 msg_print("¤¢¤Ê¤¿¤Ï¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3241 msg_print("You concentrate on the trump of a greater undead being...");
3245 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HI_UNDEAD, mode))
3249 msg_print("¾¤´Ô¤µ¤ì¤¿¾åµé¥¢¥ó¥Ç¥Ã¥É¤ÏÅܤäƤ¤¤ë¡ª");
3251 msg_print("The summoned greater undead creature gets angry!");
3262 case 31: /* Trump Ancient Dragon */
3264 bool pet = success; /* was (randint1(10) > 3) */
3268 if (pet) mode |= PM_FORCE_PET;
3269 else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
3271 if (unique_okay) mode |= PM_ALLOW_UNIQUE;
3273 if (p_ptr->pclass == CLASS_BEASTMASTER)
3275 type = SUMMON_HI_DRAGON_LIVING;
3279 type = SUMMON_HI_DRAGON;
3283 msg_print("¤¢¤Ê¤¿¤Ï¸ÅÂå¥É¥é¥´¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3285 msg_print("You concentrate on the trump of an ancient dragon...");
3289 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, type, mode))
3293 msg_print("¾¤´Ô¤µ¤ì¤¿¸ÅÂå¥É¥é¥´¥ó¤ÏÅܤäƤ¤¤ë¡ª");
3295 msg_print("The summoned ancient dragon gets angry!");
3308 msg_format("̤ÃΤΥ«¡¼¥É¤Î¼öʸ¤Ç¤¹: %d", spell);
3310 msg_format("You cast an unknown Trump spell: %d.", spell);
3319 msg_print("ï¤â¤¢¤Ê¤¿¤Î¥«¡¼¥É¤Î¸Æ¤ÓÀ¼¤ËÅú¤¨¤Ê¤¤¡£");
3321 msg_print("Nobody answers to your Trump call.");
3330 static bool cast_arcane_spell(int spell)
3334 int plev = p_ptr->lev;
3336 bool no_trump = FALSE;
3338 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
3339 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
3340 else beam = plev / 2;
3345 if (!get_aim_dir(&dir)) return FALSE;
3347 fire_bolt_or_beam(beam - 10, GF_ELEC, dir,
3348 damroll(3 + ((plev - 1) / 5), 3));
3350 case 1: /* Wizard Lock */
3351 if (!get_aim_dir(&dir)) return FALSE;
3353 (void)wizard_lock(dir);
3355 case 2: /* Detect Invisibility */
3356 (void)detect_monsters_invis(DETECT_RAD_DEFAULT);
3358 case 3: /* Detect Monsters */
3359 (void)detect_monsters_normal(DETECT_RAD_DEFAULT);
3362 teleport_player(10);
3364 case 5: /* Light Area */
3365 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
3367 case 6: /* Trap & Door Destruction */
3368 if (!get_aim_dir(&dir)) return FALSE;
3370 (void)destroy_door(dir);
3372 case 7: /* Cure Light Wounds */
3373 (void)hp_player(damroll(2, 8));
3374 (void)set_cut(p_ptr->cut - 10);
3376 case 8: /* Detect Doors & Traps */
3377 (void)detect_traps(DETECT_RAD_DEFAULT);
3378 (void)detect_doors(DETECT_RAD_DEFAULT);
3379 (void)detect_stairs(DETECT_RAD_DEFAULT);
3381 case 9: /* Phlogiston */
3384 case 10: /* Detect Treasure */
3385 (void)detect_treasure(DETECT_RAD_DEFAULT);
3386 (void)detect_objects_gold(DETECT_RAD_DEFAULT);
3388 case 11: /* Detect Enchantment */
3389 (void)detect_objects_magic(DETECT_RAD_DEFAULT);
3391 case 12: /* Detect Objects */
3392 (void)detect_objects_normal(DETECT_RAD_DEFAULT);
3394 case 13: /* Cure Poison */
3395 (void)set_poisoned(0);
3397 case 14: /* Resist Cold */
3398 (void)set_oppose_cold(randint1(20) + 20, FALSE);
3400 case 15: /* Resist Fire */
3401 (void)set_oppose_fire(randint1(20) + 20, FALSE);
3403 case 16: /* Resist Lightning */
3404 (void)set_oppose_elec(randint1(20) + 20, FALSE);
3406 case 17: /* Resist Acid */
3407 (void)set_oppose_acid(randint1(20) + 20, FALSE);
3409 case 18: /* Cure Medium Wounds */
3410 (void)hp_player(damroll(4, 8));
3411 (void)set_cut((p_ptr->cut / 2) - 50);
3413 case 19: /* Teleport */
3414 teleport_player(plev * 5);
3416 case 20: /* Identify */
3417 return ident_spell(FALSE);
3418 case 21: /* Stone to Mud */
3419 if (!get_aim_dir(&dir)) return FALSE;
3421 (void)wall_to_mud(dir);
3423 case 22: /* Ray of Light */
3424 if (!get_aim_dir(&dir)) return FALSE;
3427 msg_print("¸÷Àþ¤¬Êü¤¿¤ì¤¿¡£");
3429 msg_print("A line of light appears.");
3432 (void)lite_line(dir);
3434 case 23: /* Satisfy Hunger */
3435 (void)set_food(PY_FOOD_MAX - 1);
3437 case 24: /* See Invisible */
3438 (void)set_tim_invis(randint1(24) + 24, FALSE);
3440 case 25: /* Conjure Elemental */
3441 if (!summon_specific(-1, py, px, plev, SUMMON_ELEMENTAL, (PM_ALLOW_GROUP | PM_FORCE_PET)))
3444 case 26: /* Teleport Level */
3446 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return FALSE;
3448 if (!get_check("Are you sure? (Teleport Level)")) return FALSE;
3450 (void)teleport_player_level();
3452 case 27: /* Teleport Away */
3453 if (!get_aim_dir(&dir)) return FALSE;
3455 (void)fire_beam(GF_AWAY_ALL, dir, plev);
3457 case 28: /* Elemental Ball */
3458 if (!get_aim_dir(&dir)) return FALSE;
3460 switch (randint1(4))
3462 case 1: dummy = GF_FIRE;break;
3463 case 2: dummy = GF_ELEC;break;
3464 case 3: dummy = GF_COLD;break;
3465 default: dummy = GF_ACID;break;
3467 fire_ball(dummy, dir, 75 + (plev), 2);
3469 case 29: /* Detection */
3470 (void)detect_all(DETECT_RAD_DEFAULT);
3472 case 30: /* Word of Recall */
3473 if (!word_of_recall()) return FALSE;
3475 case 31: /* Clairvoyance */
3476 chg_virtue(V_KNOWLEDGE, 1);
3477 chg_virtue(V_ENLIGHTEN, 1);
3478 wiz_lite(FALSE, FALSE);
3479 if (!p_ptr->telepathy)
3481 (void)set_tim_esp(randint1(30) + 25, FALSE);
3485 msg_format("You cast an unknown Arcane spell: %d.", spell);
3491 msg_print("¥¨¥ì¥á¥ó¥¿¥ë¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3493 msg_print("No Elementals arrive.");
3500 static bool cast_enchant_spell(int spell)
3502 int plev = p_ptr->lev;
3504 bool no_trump = FALSE;
3508 case 0: /* Infravision */
3509 set_tim_infra(100 + randint1(100), FALSE);
3511 case 1: /* Regeneration */
3512 set_tim_regen(80 + randint1(80), FALSE);
3514 case 2: /* Satisfy Hunger */
3515 (void)set_food(PY_FOOD_MAX - 1);
3517 case 3: /* Resist Cold */
3518 (void)set_oppose_cold(randint1(20) + 20, FALSE);
3520 case 4: /* Resist Fire */
3521 (void)set_oppose_fire(randint1(20) + 20, FALSE);
3523 case 5: /* Heroism */
3524 (void)set_hero(randint1(25) + 25, FALSE);
3525 (void)hp_player(10);
3526 (void)set_afraid(0);
3528 case 6: /* Resist Lightning */
3529 (void)set_oppose_elec(randint1(20) + 20, FALSE);
3531 case 7: /* Resist Acid */
3532 (void)set_oppose_acid(randint1(20) + 20, FALSE);
3534 case 8: /* See Invisibility */
3535 (void)set_tim_invis(randint1(24) + 24, FALSE);
3537 case 9: /* Remove Curse */
3541 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
3543 msg_print("You feel as if someone is watching over you.");
3547 case 10: /* Resist Poison */
3548 (void)set_oppose_pois(randint1(20) + 20, FALSE);
3550 case 11: /* Berserk */
3551 (void)set_shero(randint1(25) + 25, FALSE);
3552 (void)hp_player(30);
3553 (void)set_afraid(0);
3555 case 12: /* Self Knowledge */
3556 (void)self_knowledge();
3558 case 13: /* Protection from Evil */
3559 (void)set_protevil(randint1(25) + 3 * p_ptr->lev, FALSE);
3561 case 14: /* Healing */
3567 case 15: /* Mana Branding */
3568 return choose_ele_attack();
3570 case 16: /* Telepathy */
3571 (void)set_tim_esp(randint1(30) + 25, FALSE);
3573 case 17: /* Stone Skin */
3574 (void)set_shield(randint1(20) + 30, FALSE);
3576 case 18: /* Resistance */
3577 (void)set_oppose_acid(randint1(20) + 20, FALSE);
3578 (void)set_oppose_elec(randint1(20) + 20, FALSE);
3579 (void)set_oppose_fire(randint1(20) + 20, FALSE);
3580 (void)set_oppose_cold(randint1(20) + 20, FALSE);
3581 (void)set_oppose_pois(randint1(20) + 20, FALSE);
3583 case 19: /* Haste */
3584 (void)set_fast(randint1(20 + plev) + plev, FALSE);
3586 case 20: /* Walk through Wall */
3587 (void)set_kabenuke(randint1(plev/2) + plev/2, FALSE);
3589 case 21: /* Pulish Shield */
3590 (void)pulish_shield();
3592 case 22: /* Create Golem */
3593 if (summon_specific(-1, py, px, plev, SUMMON_GOLEM, PM_FORCE_PET))
3596 msg_print("¥´¡¼¥ì¥à¤òºî¤Ã¤¿¡£");
3598 msg_print("You make a golem.");
3606 case 23: /* Magic armor */
3607 (void)set_magicdef(randint1(20) + 20, FALSE);
3609 case 24: /* Remove Enchantment */
3610 if (!mundane_spell(TRUE)) return FALSE;
3612 case 25: /* Remove All Curse */
3613 if (remove_all_curse())
3616 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
3618 msg_print("You feel as if someone is watching over you.");
3622 case 26: /* Total Knowledge */
3623 return identify_fully(FALSE);
3625 case 27: /* Enchant Weapon */
3626 return enchant_spell(randint0(4) + 1, randint0(4) + 1, 0);
3628 case 28: /* Enchant Armor */
3629 return enchant_spell(0, 0, randint0(3) + 2);
3631 case 29: /* Brand Weapon */
3632 brand_weapon(randint0(18));
3634 case 30: /* Living Trump */
3636 /* Teleport control */
3639 /* Random teleportation (uncontrolled) */
3641 /* Gain the mutation */
3642 if (gain_random_mutation(dummy))
3644 msg_print("¤¢¤Ê¤¿¤ÏÀ¸¤¤Æ¤¤¤ë¥«¡¼¥É¤ËÊѤï¤Ã¤¿¡£");
3646 msg_print("You have turned into a Living Trump.");
3649 case 31: /* Immune */
3650 return (choose_ele_immune(13 + randint1(13)));
3653 msg_format("You cast an unknown Craft spell: %d.", spell);
3659 msg_print("¤¦¤Þ¤¯¥´¡¼¥ì¥à¤òºî¤ì¤Ê¤«¤Ã¤¿¡£");
3661 msg_print("No Golems arrive.");
3669 * An "item_tester_hook" for offer
3671 static bool item_tester_offer(object_type *o_ptr)
3673 /* Flasks of oil are okay */
3674 if (o_ptr->tval != TV_CORPSE) return (FALSE);
3676 if (o_ptr->sval != SV_CORPSE) return (FALSE);
3678 if (strchr("pht", r_info[o_ptr->pval].d_char)) return (TRUE);
3680 /* Assume not okay */
3685 static bool cast_daemon_spell(int spell)
3688 int plev = p_ptr->lev;
3690 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
3691 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
3692 else beam = plev / 2;
3696 case 0: /* Magic Missile */
3697 if (!get_aim_dir(&dir)) return FALSE;
3699 fire_bolt_or_beam(beam - 10, GF_MISSILE, dir,
3700 damroll(3 + ((plev - 1) / 5), 4));
3702 case 1: /* Detect Undead & Demons -> Unlife */
3703 (void)detect_monsters_nonliving(DETECT_RAD_DEFAULT);
3706 (void)set_blessed(randint1(12) + 12, FALSE);
3708 case 3: /* Resist Fire */
3709 (void)set_oppose_fire(randint1(20) + 20, FALSE);
3711 case 4: /* Horrify */
3712 if (!get_aim_dir(&dir)) return FALSE;
3714 (void)fear_monster(dir, plev);
3715 (void)stun_monster(dir, plev);
3717 case 5: /* Nether Bolt */
3718 if (!get_aim_dir(&dir)) return FALSE;
3720 fire_bolt_or_beam(beam, GF_NETHER, dir,
3721 damroll(6 + ((plev - 5) / 4), 8));
3723 case 6: /* Summon monster, demon */
3724 if (!summon_specific(-1, py, px, (plev * 3) / 2, SUMMON_MANES, (PM_ALLOW_GROUP | PM_FORCE_PET)))
3727 msg_print("¸ÅÂå¤Î»àÎî¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3729 msg_print("No Manes arrive.");
3733 case 7: /* Mini Hellfire */
3734 if (!get_aim_dir(&dir)) return FALSE;
3736 fire_ball(GF_HELL_FIRE, dir,
3737 (damroll(3, 6) + plev +
3738 (plev / (((p_ptr->pclass == CLASS_MAGE) ||
3739 (p_ptr->pclass == CLASS_HIGH_MAGE) ||
3740 (p_ptr->pclass == CLASS_SORCERER)) ? 2 : 4))),
3741 ((plev < 30) ? 2 : 3));
3743 case 8: /* Enslave Demon */
3744 if (!get_aim_dir(&dir)) return FALSE;
3746 (void)control_one_demon(dir, plev);
3748 case 9: /* Vision */
3749 map_area(DETECT_RAD_MAP);
3751 case 10: /* Resist Nether */
3752 (void)set_tim_res_nether(randint1(20) + 20, FALSE);
3754 case 11: /* Plasma Bolt */
3755 if (!get_aim_dir(&dir)) return FALSE;
3757 fire_bolt_or_beam(beam, GF_PLASMA, dir,
3758 damroll(11 + ((plev - 5) / 4), 8));
3760 case 12: /* Fire Ball */
3761 if (!get_aim_dir(&dir)) return FALSE;
3763 fire_ball(GF_FIRE, dir, plev + 55, 2);
3765 case 13: /* Fire Branding */
3768 case 14: /* Nether Ball */
3769 if (!get_aim_dir(&dir)) return FALSE;
3771 fire_ball(GF_NETHER, dir, plev*3/2 + 100, plev / 20+2);
3773 case 15: /* Summon monster, demon */
3775 bool pet = !one_in_(3);
3778 if (pet) mode |= PM_FORCE_PET;
3779 else mode |= PM_NO_PET;
3780 if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
3782 if (summon_specific((pet ? -1 : 0), py, px, plev*2/3+randint1(plev/2), SUMMON_DEMON, mode))
3785 msg_print("ⲫ¤Î°½¤¬½¼Ëþ¤·¤¿¡£");
3787 msg_print("The area fills with a stench of sulphur and brimstone.");
3793 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
3795 msg_print("'What is thy bidding... Master?'");
3800 msg_print("¡ÖÈܤ·¤¼Ô¤è¡¢²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª ¤ªÁ°¤Îº²¤òĺ¤¯¤¾¡ª¡×");
3802 msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'");
3809 msg_print("°Ëâ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3811 msg_print("No Greater Demon arrive.");
3816 case 16: /* Telepathy */
3817 (void)set_tim_esp(randint1(30) + 25, FALSE);
3819 case 17: /* Demoncloak */
3821 int dur=randint1(20) + 20;
3823 set_oppose_fire(dur, FALSE);
3824 set_oppose_cold(dur, FALSE);
3825 set_tim_sh_fire(dur, FALSE);
3829 case 18: /* Rain of Lava */
3830 fire_ball(GF_FIRE, 0, (55 + plev)*2, 3);
3831 fire_ball_hide(GF_LAVA_FLOW, 0, 2+randint1(2), 3);
3833 case 19: /* Plasma ball */
3834 if (!get_aim_dir(&dir)) return FALSE;
3836 fire_ball(GF_PLASMA, dir, plev*3/2 + 80, 2 + plev/40);
3838 case 20: /* Mimic demon */
3839 (void)set_mimic(10+plev/2 + randint1(10+plev/2), MIMIC_DEMON, FALSE);
3841 case 21: /* Nether Wave == Dispel Good */
3842 (void)dispel_monsters(randint1(plev * 2));
3843 (void)dispel_good(randint1(plev * 2));
3846 if (!get_aim_dir(&dir)) return FALSE;
3847 fire_ball(GF_NEXUS, dir, 100 + plev*2, 4);
3849 case 23: /* Hand Doom */
3850 if (!get_aim_dir(&dir)) return FALSE;
3852 else msg_print("<ÇËÌǤμê>¤òÊü¤Ã¤¿¡ª");
3854 else msg_print("You invokes the Hand of Doom!");
3857 fire_ball_hide(GF_HAND_DOOM, dir, plev * 2, 0);
3859 case 24: /* Heroism */
3860 (void)set_hero(randint1(25) + 25, FALSE);
3861 (void)hp_player(10);
3862 (void)set_afraid(0);
3864 case 25: /* Tim resist time */
3865 (void)set_tim_res_time(randint1(20)+20, FALSE);
3867 case 26: /* Circle of Madness */
3868 fire_ball(GF_CHAOS, 0, 50+plev, 3+plev/20);
3869 fire_ball(GF_CONFUSION, 0, 50+plev, 3+plev/20);
3870 fire_ball(GF_CHARM, 0, 20+plev, 3+plev/20);
3872 case 27: /* True Discharge Minion */
3875 case 28: /* Summon Greater Demon */
3882 item_tester_hook = item_tester_offer;
3884 q = "¤É¤Î»àÂΤòÊû¤²¤Þ¤¹¤«? ";
3885 s = "Êû¤²¤é¤ì¤ë»àÂΤò»ý¤Ã¤Æ¤¤¤Ê¤¤¡£";
3887 q = "Sacrifice which corpse? ";
3888 s = "You have nothing to scrifice.";
3890 if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return FALSE;
3892 /* Get the item (in the pack) */
3895 o_ptr = &inventory[item];
3898 /* Get the item (on the floor) */
3901 o_ptr = &o_list[0 - item];
3904 summon_lev = p_ptr->lev * 2 / 3 + r_info[o_ptr->pval].level;
3905 if (summon_specific(-1, py, px, summon_lev, SUMMON_HI_DEMON, (PM_ALLOW_GROUP | PM_FORCE_PET)))
3908 msg_print("ⲫ¤Î°½¤¬½¼Ëþ¤·¤¿¡£");
3910 msg_print("The area fills with a stench of sulphur and brimstone.");
3915 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
3917 msg_print("'What is thy bidding... Master?'");
3920 /* Decrease the item (from the pack) */
3923 inven_item_increase(item, -1);
3924 inven_item_describe(item);
3925 inven_item_optimize(item);
3928 /* Decrease the item (from the floor) */
3931 floor_item_increase(0 - item, -1);
3932 floor_item_describe(0 - item);
3933 floor_item_optimize(0 - item);
3939 msg_print("°Ëâ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3941 msg_print("No Greater Demon arrive.");
3946 case 29: /* Nether Storm */
3947 if (!get_aim_dir(&dir)) return FALSE;
3949 fire_ball(GF_NETHER, dir, plev*15, plev / 5);
3951 case 30: /* Blood curse */
3953 if (!get_aim_dir(&dir)) return FALSE;
3955 fire_ball_hide(GF_BLOOD_CURSE, dir, 600, 0);
3957 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "·ì¤Î¼ö¤¤", -1);
3959 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "Blood curse", -1);
3963 case 31: /* Mimic Demon lord */
3964 (void)set_mimic(15 + randint1(15), MIMIC_DEMON_LORD, FALSE);
3967 msg_format("You cast an unknown Daemon spell: %d.", spell);
3975 static bool cast_haja_spell(int spell)
3979 int plev = p_ptr->lev;
3981 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
3982 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
3983 else beam = plev / 2;
3988 if (!get_aim_dir(&dir)) return FALSE;
3990 fire_bolt_or_beam(beam - 10, GF_ELEC, dir,
3991 damroll(3 + ((plev - 1) / 5), 4));
3994 (void)detect_monsters_evil(DETECT_RAD_DEFAULT);
3997 (void)set_blessed(randint1(12) + 12, FALSE);
3999 case 3: /* Remove Fear */
4000 (void)set_afraid(0);
4003 if (!get_aim_dir(&dir)) return FALSE;
4005 (void)fear_monster(dir, plev);
4008 (void)sleep_monsters_touch();
4011 teleport_player(plev*3);
4014 if (!get_aim_dir(&dir)) return FALSE;
4015 fire_blast(GF_LITE, dir, 3+((plev-1)/8), 3, 10, 3);
4019 (void)set_poisoned(0);
4023 if (!get_aim_dir(&dir)) return FALSE;
4024 (void)fire_ball(GF_AWAY_EVIL, dir, MAX_SIGHT*5, 0);
4026 case 10: /* Exorcism */
4027 (void)dispel_undead(randint1(plev));
4028 (void)dispel_demons(randint1(plev));
4029 (void)turn_evil(plev);
4031 case 11: /* Holy Orb */
4032 if (!get_aim_dir(&dir)) return FALSE;
4034 fire_ball(GF_HOLY_FIRE, dir,
4035 (damroll(3, 6) + plev +
4036 (plev / ((p_ptr->pclass == CLASS_PRIEST ||
4037 p_ptr->pclass == CLASS_HIGH_MAGE ||
4038 p_ptr->pclass == CLASS_SORCERER) ? 2 : 4))),
4039 ((plev < 30) ? 2 : 3));
4042 case 12: /* Sense Unseen */
4043 (void)set_tim_invis(randint1(24) + 24, FALSE);
4045 case 13: /* Protection from Evil */
4046 (void)set_protevil(randint1(25) + 3 * p_ptr->lev, FALSE);
4049 if (!get_aim_dir(&dir)) return FALSE;
4050 (void)fire_bolt(GF_ELEC, dir, plev*5);
4052 case 15: /* Holy Word */
4053 (void)dispel_evil(randint1(plev * 6));
4054 (void)hp_player(100);
4055 (void)set_afraid(0);
4056 (void)set_poisoned(0);
4061 if (!get_aim_dir(&dir)) return FALSE;
4063 (void)destroy_door(dir);
4065 case 17: /* Remove Curse */
4069 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
4071 msg_print("You feel as if someone is watching over you.");
4076 set_tim_sh_holy(randint1(20)+20, FALSE);
4078 case 19: /* Dispel Undead + Demons */
4079 (void)dispel_undead(randint1(plev * 4));
4080 (void)dispel_demons(randint1(plev * 4));
4082 case 20: /* Dispel Evil */
4083 (void)dispel_evil(randint1(plev * 4));
4088 case 22: /* Star Burst */
4089 if (!get_aim_dir(&dir)) return FALSE;
4091 fire_ball(GF_LITE, dir, 100+plev*2, 4);
4093 case 23: /* Summon monster, angel */
4095 bool pet = !one_in_(3);
4098 if (pet) mode |= PM_FORCE_PET;
4099 else mode |= PM_NO_PET;
4100 if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
4102 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, SUMMON_ANGEL, mode))
4106 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
4108 msg_print("'What is thy bidding... Master?'");
4113 msg_print("¡Ö²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª °¹Ô¼Ô¤è¡¢²ù¤¤²þ¤á¤è¡ª¡×");
4115 msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'"); /* nanka */
4121 case 24: /* Heroism */
4122 (void)set_hero(randint1(25) + 25, FALSE);
4123 (void)hp_player(10);
4124 (void)set_afraid(0);
4126 case 25: /* Remove All Curse */
4127 if (remove_all_curse())
4130 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
4132 msg_print("You feel as if someone is watching over you.");
4136 case 26: /* Banishment */
4137 if (banish_evil(100))
4140 msg_print("¿À¤Î¸æÎϤ¬¼Ù°¤òÂǤÁʧ¤Ã¤¿¡ª");
4142 msg_print("The power of your god banishes evil!");
4147 case 27: /* Word of Destruction */
4148 destroy_area(py, px, 13+randint0(5), TRUE);
4150 case 28: /* Eye for an Eye */
4151 set_tim_eyeeye(randint1(10)+10, FALSE);
4157 int b = 10 + randint1(10);
4158 if (!get_aim_dir(&dir)) return FALSE;
4162 /* Hack -- Use an actual "target" */
4166 if (cave_stop_disintegration(ty + ddy[dir], tx + ddx[dir])) break;
4169 if (!cave_floor_bold(ty,tx) || !player_has_los_bold(ty, tx) || cave[ty][tx].m_idx) break;
4172 else if (target_okay() && !cave_stop_disintegration(target_row, target_col) && in_disintegration_range(py, px, target_row, target_col))
4179 for (i = 0; i < b; i++)
4181 int count = 20, d = 0;
4187 x = tx - 8 + randint0(17);
4188 y = ty - 8 + randint0(17);
4190 if (!in_bounds(y,x) || cave_stop_disintegration(y,x) || !in_disintegration_range(ty, tx, y, x)) continue;
4192 dx = (tx > x) ? (tx - x) : (x - tx);
4193 dy = (ty > y) ? (ty - y) : (y - ty);
4195 /* Approximate distance */
4196 d = (dy > dx) ? (dy + (dx >> 1)) : (dx + (dy >> 1));
4200 if (count < 0) continue;
4202 project(0, 2, y, x, plev * 4, GF_DISINTEGRATE, PROJECT_JUMP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL, -1);
4206 case 30: /* Divine Intervention */
4207 project(0, 1, py, px, plev*11, GF_HOLY_FIRE, PROJECT_KILL, -1);
4208 dispel_monsters(plev * 4);
4210 stun_monsters(plev * 4);
4211 confuse_monsters(plev * 4);
4212 turn_monsters(plev * 4);
4213 stasis_monsters(plev * 4);
4214 (void)hp_player(100);
4220 for (i = 0; i < 12; i++)
4227 scatter(&my, &mx, py, px, 4, 0);
4229 /* Require empty grids */
4230 if (cave_empty_bold2(my, mx)) break;
4232 if (attempt < 0) continue;
4233 summon_specific(-1, my, mx, plev, SUMMON_KNIGHTS, (PM_ALLOW_GROUP | PM_FORCE_PET));
4235 (void)set_hero(randint1(25) + 25, FALSE);
4236 (void)set_blessed(randint1(25) + 25, FALSE);
4237 (void)set_fast(randint1(20 + plev) + plev, FALSE);
4238 (void)set_protevil(randint1(25) + 25, FALSE);
4239 (void)set_afraid(0);
4244 msg_format("¤¢¤Ê¤¿¤ÏÉÔÌÀ¤ÊÇ˼٤μöʸ %d ¤ò¾§¤¨¤¿¡£", spell);
4246 msg_format("You cast an unknown nanka spell: %d.", spell);
4257 void stop_singing(void)
4259 if (p_ptr->pclass != CLASS_BARD) return;
4261 if (p_ptr->magic_num1[1])
4263 p_ptr->magic_num1[1] = 0;
4266 if (!p_ptr->magic_num1[0]) return;
4268 set_action(ACTION_NONE);
4270 switch(p_ptr->magic_num1[0])
4273 if (!p_ptr->blessed)
4275 msg_print("¹â·é¤Êµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
4277 msg_print("The prayer has expired.");
4284 msg_print("¥Ò¡¼¥í¡¼¤Îµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
4286 msg_print("The heroism wears off.");
4288 /* Recalculate hitpoints */
4289 p_ptr->update |= (PU_HP);
4293 if (!p_ptr->tim_esp)
4296 msg_print("°Õ¼±¤Ï¸µ¤ËÌá¤Ã¤¿¡£");
4298 msg_print("Your consciousness contracts again.");
4300 /* Update the monsters */
4301 p_ptr->update |= (PU_MONSTERS);
4305 if (!p_ptr->tim_stealth)
4307 msg_print("»Ñ¤¬¤Ï¤Ã¤¤ê¤È¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¡£");
4309 msg_print("You are no longer hided.");
4313 if (!p_ptr->oppose_acid)
4315 msg_print("»À¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
4317 msg_print("You feel less resistant to acid.");
4319 if (!p_ptr->oppose_elec)
4321 msg_print("ÅÅ·â¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
4323 msg_print("You feel less resistant to elec.");
4325 if (!p_ptr->oppose_fire)
4327 msg_print("²Ð¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
4329 msg_print("You feel less resistant to fire.");
4331 if (!p_ptr->oppose_cold)
4333 msg_print("Î䵤¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
4335 msg_print("You feel less resistant to cold.");
4337 if (!p_ptr->oppose_pois)
4339 msg_print("ÆǤؤÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
4341 msg_print("You feel less resistant to pois.");
4347 msg_print("Æ°¤¤ÎÁÇÁᤵ¤¬¤Ê¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£");
4349 msg_print("You feel yourself slow down.");
4356 msg_print("¥Ò¡¼¥í¡¼¤Îµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
4358 msg_print("The heroism wears off.");
4360 /* Recalculate hitpoints */
4361 p_ptr->update |= (PU_HP);
4366 msg_print("Æ°¤¤ÎÁÇÁᤵ¤¬¤Ê¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£");
4368 msg_print("You feel yourself slow down.");
4375 msg_print("̵Ũ¤Ç¤Ï¤Ê¤¯¤Ê¤Ã¤¿¡£");
4377 msg_print("The invulnerability wears off.");
4380 p_ptr->redraw |= (PR_MAP);
4382 /* Update monsters */
4383 p_ptr->update |= (PU_MONSTERS);
4386 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
4390 p_ptr->magic_num1[0] = MUSIC_NONE;
4391 p_ptr->magic_num2[0] = 0;
4393 /* Recalculate bonuses */
4394 p_ptr->update |= (PU_BONUS | PU_HP);
4396 /* Redraw status bar */
4397 p_ptr->redraw |= (PR_STATUS);
4401 static bool cast_music_spell(int spell)
4403 int plev = p_ptr->lev;
4406 if(p_ptr->magic_num1[0])
4411 p_ptr->magic_num2[0] = spell;
4415 case 0: /* Song of Holding ÃÙÆߤβΠ*/
4417 msg_print("¤æ¤Ã¤¯¤ê¤È¤·¤¿¥á¥í¥Ç¥£¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
4419 msg_print("You start humming a slow, steady melody...");
4421 p_ptr->magic_num1[0] = MUSIC_SLOW;
4423 case 1: /* Song of Blessing ½ËÊ¡¤Î²Î */
4425 msg_print("¸·¤«¤Ê¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4427 msg_print("The holy power of the Music of the Ainur enters you...");
4429 p_ptr->magic_num1[0] = MUSIC_BLESS;
4432 case 2: /* Wrecking Note Êø²õ¤Î²»¿§ */
4433 if (!get_aim_dir(&dir)) return FALSE;
4434 fire_bolt(GF_SOUND, dir,
4435 damroll(4 + ((plev - 1) / 5), 4));
4437 case 3: /* Stun Pattern Û¯Û°¤ÎÀûΧ */
4439 msg_print("âÁÏǤµ¤»¤ë¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4441 msg_print("You weave a pattern of sounds to bewilder and daze...");
4443 p_ptr->magic_num1[0] = MUSIC_STUN;
4445 case 4: /* Flow of life À¸Ì¿¤Îή¤ì */
4447 msg_print("²Î¤òÄ̤·¤ÆÂΤ˳赤¤¬Ìá¤Ã¤Æ¤¤¿¡¥¡¥¡¥");
4449 msg_print("Life flows through you as you sing a song of healing...");
4451 p_ptr->magic_num1[0] = MUSIC_L_LIFE;
4453 case 5: /* Song of the Sun ÂÀÍۤβΠ*/
4455 msg_print("¸÷¤êµ±¤¯²Î¤¬ÊÕ¤ê¤ò¾È¤é¤·¤¿¡£");
4457 msg_print("Your uplifting song brings brightness to dark places...");
4459 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
4461 case 6: /* Song of fear ¶²ÉݤβΠ*/
4463 msg_print("¤ª¤É¤í¤ª¤É¤í¤·¤¤¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4465 msg_print("You start weaving a fearful pattern...");
4467 p_ptr->magic_num1[0] = MUSIC_FEAR;
4469 case 7: /* Heroic Ballad À襤¤Î²Î */
4471 msg_print("·ã¤·¤¤À襤¤Î²Î¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
4473 msg_print("You start singing a song of intense fighting...");
4475 p_ptr->magic_num1[0] = MUSIC_HERO;
4477 case 8: /* Clairaudience ÎîŪÃγР*/
4479 msg_print("ÀŤ«¤Ê²»³Ú¤¬´¶³Ð¤ò¸¦¤®À¡¤Þ¤µ¤»¤¿¡¥¡¥¡¥");
4481 msg_print("Your quiet music sharpens your sense of hearing...");
4483 p_ptr->magic_num1[0] = MUSIC_DETECT;
4485 case 9: /* º²¤Î²Î */
4487 msg_print("Àº¿À¤òDZ¤¸¶Ê¤²¤ë²Î¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
4489 msg_print("You start singing a song of soul in pain...");
4491 p_ptr->magic_num1[0] = MUSIC_PSI;
4493 case 10: /* Song of Lore Ãμ±¤Î²Î */
4495 msg_print("¤³¤ÎÀ¤³¦¤ÎÃ챤¬Î®¤ì¹þ¤ó¤Ç¤¤¿¡¥¡¥¡¥");
4497 msg_print("You recall the rich lore of the world...");
4499 p_ptr->magic_num1[0] = MUSIC_ID;
4501 case 11: /* hidding song ±£ÆۤβΠ*/
4503 msg_print("¤¢¤Ê¤¿¤Î»Ñ¤¬·Ê¿§¤Ë¤È¤±¤³¤ó¤Ç¤¤¤Ã¤¿¡¥¡¥¡¥");
4505 msg_print("Your song carries you beyond the sight of mortal eyes...");
4507 p_ptr->magic_num1[0] = MUSIC_STEALTH;
4509 case 12: /* Illusion Pattern ¸¸±Æ¤ÎÀûΧ */
4511 msg_print("ÊÕ¤ê°ìÌ̤˸¸±Æ¤¬¸½¤ì¤¿¡¥¡¥¡¥");
4513 msg_print("You weave a pattern of sounds to beguile and confuse...");
4515 p_ptr->magic_num1[0] = MUSIC_CONF;
4517 case 13: /* Doomcall (vibration song) ÇËÌǤζ«¤Ó */
4519 msg_print("¹ì²»¤¬¶Á¤¤¤¿¡¥¡¥¡¥");
4521 msg_print("The fury of the Downfall of Numenor lashes out...");
4523 p_ptr->magic_num1[0] = MUSIC_SOUND;
4525 case 14: /* Firiel's Song (song of the Undeads) ¥Õ¥£¥ê¥¨¥ë¤Î²Î */
4527 msg_print("À¸Ì¿¤ÈÉü³è¤Î¥Æ¡¼¥Þ¤òÁդǻϤ᤿¡¥¡¥¡¥");
4529 msg_print("The themes of life and revival are woven into your song...");
4531 animate_dead(0, py, px);
4533 case 15: /* Fellowship Chant (charming song) ι¤ÎÃç´Ö */
4535 msg_print("°Â¤é¤«¤Ê¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4537 msg_print("You weave a slow, soothing melody of imploration...");
4539 p_ptr->magic_num1[0] = MUSIC_CHARM;
4541 case 16: /* (wall breaking song) ʬ²ò²»ÇÈ */
4543 msg_print("Ê´ºÕ¤¹¤ë¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4545 msg_print("You weave a violent pattern of sounds to break wall.");
4547 p_ptr->magic_num1[0] = MUSIC_WALL;
4548 project(0, 0, py, px,
4549 0, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM | PROJECT_HIDE, -1);
4551 case 17: /* Finrod's Resistance (song of resistance) ¸µÁÇÂÑÀ */
4553 msg_print("¸µÁǤÎÎϤËÂФ¹¤ëǦÂѤβΤò²Î¤Ã¤¿¡£");
4555 msg_print("You sing a song of perseverance against powers...");
4557 p_ptr->magic_num1[0] = MUSIC_RESIST;
4559 case 18: /* Hobbit Melodies (song of time) ¥Û¥Ó¥Ã¥È¤Î¥á¥í¥Ç¥£ */
4561 msg_print("·Ú²÷¤Ê²Î¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
4563 msg_print("You start singing joyful pop song...");
4565 p_ptr->magic_num1[0] = MUSIC_SPEED;
4567 case 19: /* World Contortion ÏĤó¤ÀÀ¤³¦ */
4569 msg_print("²Î¤¬¶õ´Ö¤òÏĤ᤿¡¥¡¥¡¥");
4571 msg_print("Reality whirls wildly as you sing a dizzying melody...");
4573 project(0, plev/15 + 1, py, px, plev * 3 + 1, GF_AWAY_ALL , PROJECT_KILL, -1);
4575 case 20: /* Â໶¤Î²Î */
4577 msg_print("ÂѤ¨¤é¤ì¤Ê¤¤ÉÔ¶¨Ï²»¤¬Å¨¤òÀÕ¤áΩ¤Æ¤¿¡¥¡¥¡¥");
4579 msg_print("You cry out in an ear-wracking voice...");
4581 p_ptr->magic_num1[0] = MUSIC_DISPEL;
4583 case 21: /* The Voice of Saruman ¥µ¥ë¥Þ¥ó¤Î´Å¸À */
4585 msg_print("Í¥¤·¤¯¡¢Ì¥ÎÏŪ¤Ê²Î¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
4587 msg_print("You start humming a gentle and attractive song...");
4589 p_ptr->magic_num1[0] = MUSIC_SARUMAN;
4591 case 22: /* Song of Tempest (song of death) Íò¤Î²»¿§ */
4592 if (!get_aim_dir(&dir)) return FALSE;
4593 fire_beam(GF_SOUND, dir,
4594 damroll(15 + ((plev - 1) / 2), 10));
4596 case 23: /* (song of disruption) ¤â¤¦°ì¤Ä¤ÎÀ¤³¦ */
4598 msg_print("¼þ°Ï¤¬ÊѲ½¤·»Ï¤á¤¿¡¥¡¥¡¥");
4600 msg_print("You sing of the primeval shaping of Middle-earth...");
4604 case 24: /* Wrecking Pattern (destruction shriek) Ç˲õ¤ÎÀûΧ */
4606 msg_print("Ç˲õŪ¤Ê²Î¤¬¶Á¤¤ï¤¿¤Ã¤¿¡¥¡¥¡¥");
4608 msg_print("You weave a pattern of sounds to contort and shatter...");
4610 p_ptr->magic_num1[0] = MUSIC_QUAKE;
4612 case 25: /* ÄäÂڤβΠ*/
4614 msg_print("¤æ¤Ã¤¯¤ê¤È¤·¤¿¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4616 msg_print("You weave a very slow pattern which is almost likely to stop...");
4618 p_ptr->magic_num1[0] = MUSIC_STASIS;
4620 case 26: /* ¼é¤ê¤Î²Î */
4622 msg_print("²Î¤¬¿ÀÀ»¤Ê¾ì¤òºî¤ê½Ð¤·¤¿¡¥¡¥¡¥");
4624 msg_print("The holy power of the Music is creating sacred field...");
4628 case 27: /* ±Ñͺ¤Î»í */
4630 msg_print("±Ñͺ¤Î²Î¤ò¸ý¤º¤µ¤ó¤À¡¥¡¥¡¥");
4632 msg_print("You chant a powerful, heroic call to arms...");
4634 p_ptr->magic_num1[0] = MUSIC_SHERO;
4635 (void)hp_player(10);
4636 (void)set_afraid(0);
4638 case 28: /* ¥ä¥ô¥¡¥ó¥Ê¤Î½õ¤± */
4640 msg_print("²Î¤òÄ̤·¤ÆÂΤ˳赤¤¬Ìá¤Ã¤Æ¤¤¿¡¥¡¥¡¥");
4642 msg_print("Life flows through you as you sing the song...");
4644 p_ptr->magic_num1[0] = MUSIC_H_LIFE;
4646 case 29: /* ºÆÀ¸¤Î²Î */
4648 msg_print("°Å¹õ¤ÎÃæ¤Ë¸÷¤ÈÈþ¤ò¤Õ¤ê¤Þ¤¤¤¿¡£ÂΤ¬¸µ¤Î³èÎϤò¼è¤êÌᤷ¤¿¡£");
4650 msg_print("You strewed light and beauty in the dark as you sing. You feel refreshed.");
4652 (void)do_res_stat(A_STR);
4653 (void)do_res_stat(A_INT);
4654 (void)do_res_stat(A_WIS);
4655 (void)do_res_stat(A_DEX);
4656 (void)do_res_stat(A_CON);
4657 (void)do_res_stat(A_CHR);
4658 (void)restore_level();
4660 case 30: /* shriek of death ¥µ¥¦¥í¥ó¤ÎËâ½Ñ */
4661 if (!get_aim_dir(&dir)) return FALSE;
4662 fire_ball(GF_SOUND, dir, damroll(50 + plev, 10), 0);
4664 case 31: /* song of liberty ¥Õ¥£¥ó¥´¥ë¥Õ¥£¥ó¤ÎÄ©Àï */
4666 msg_print("¥Õ¥£¥ó¥´¥ë¥Õ¥£¥ó¤Î̽²¦¤Ø¤ÎÄ©Àï¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
4668 msg_print("You recall the valor of Fingolfin's challenge to the Dark Lord...");
4670 p_ptr->magic_num1[0] = MUSIC_INVULN;
4673 p_ptr->redraw |= (PR_MAP);
4675 /* Update monsters */
4676 p_ptr->update |= (PU_MONSTERS);
4679 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
4683 msg_format("̤ÃΤβÎ(%d)¤ò²Î¤Ã¤¿¡£", spell);
4685 msg_format("You sing an unknown song: %d.", spell);
4690 if (p_ptr->magic_num1[0]) set_action(ACTION_SING);
4692 /* Recalculate bonuses */
4693 p_ptr->update |= (PU_BONUS | PU_HP);
4695 /* Redraw status bar */
4696 p_ptr->redraw |= (PR_STATUS);
4704 void do_cmd_cast(void)
4706 int item, sval, spell, realm;
4721 /* Require spell ability */
4722 if (!p_ptr->realm1 && (p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE))
4725 msg_print("¼öʸ¤ò¾§¤¨¤é¤ì¤Ê¤¤¡ª");
4727 msg_print("You cannot cast spells!");
4734 if (p_ptr->blind || no_lite())
4737 msg_print("Ìܤ¬¸«¤¨¤Ê¤¤¡ª");
4739 msg_print("You cannot see!");
4741 if (p_ptr->pclass == CLASS_FORCETRAINER)
4748 /* Not when confused */
4749 if (p_ptr->confused)
4752 msg_print("º®Í𤷤Ƥ¤¤Æ¾§¤¨¤é¤ì¤Ê¤¤¡ª");
4754 msg_print("You are too confused!");
4760 prayer = spell_categoly_name(mp_ptr->spell_book);
4762 /* Restrict choices to spell books */
4763 item_tester_tval = mp_ptr->spell_book;
4767 q = "¤É¤Î¼öʸ½ñ¤ò»È¤¤¤Þ¤¹¤«? ";
4769 q = "Use which book? ";
4773 s = "¼öʸ½ñ¤¬¤Ê¤¤¡ª";
4775 s = "You have no spell books!";
4778 select_spellbook=TRUE;
4779 if (p_ptr->pclass == CLASS_FORCETRAINER)
4780 select_the_force = TRUE;
4781 if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))){
4782 select_spellbook = FALSE;
4783 select_the_force = FALSE;
4786 select_spellbook = FALSE;
4787 select_the_force = FALSE;
4789 if (item == 1111) { /* the_force */
4793 /* Get the item (in the pack) */
4796 o_ptr = &inventory[item];
4799 /* Get the item (on the floor) */
4802 o_ptr = &o_list[0 - item];
4805 /* Access the item's sval */
4808 if ((p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE) && (o_ptr->tval == REALM2_BOOK)) increment = 32;
4811 /* Track the object kind */
4812 object_kind_track(o_ptr->k_idx);
4814 /* Hack -- Handle stuff */
4817 if ((p_ptr->pclass == CLASS_SORCERER) || (p_ptr->pclass == CLASS_RED_MAGE))
4818 realm = o_ptr->tval - TV_LIFE_BOOK + 1;
4819 else if (increment) realm = p_ptr->realm2;
4820 else realm = p_ptr->realm1;
4822 /* Ask for a spell */
4824 if (!get_spell(&spell,
4825 ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "±Ó¾§¤¹¤ë" : (mp_ptr->spell_book == TV_MUSIC_BOOK) ? "²Î¤¦" : "¾§¤¨¤ë"),
4828 if (spell == -2) msg_format("¤½¤ÎËܤˤÏÃΤäƤ¤¤ë%s¤¬¤Ê¤¤¡£", prayer);
4832 if (!get_spell(&spell, ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "recite" : "cast"),
4836 msg_format("You don't know any %ss in that book.", prayer);
4842 use_realm = tval2realm(o_ptr->tval);
4844 if (!is_magic(use_realm))
4846 s_ptr = &technic_info[use_realm - MIN_TECHNIC - 1][spell];
4850 s_ptr = &mp_ptr->info[realm - 1][spell];
4853 if (p_ptr->pclass == CLASS_SORCERER)
4854 shouhimana = s_ptr->smana*2200 + 2399;
4855 else if (p_ptr->pclass == CLASS_RED_MAGE)
4856 shouhimana = s_ptr->smana*2600 + 2399;
4858 shouhimana = (s_ptr->smana*(3800-spell_exp[(increment ? spell+32 : spell)])+2399);
4861 else shouhimana *= 4;
4863 if(shouhimana < 1) shouhimana = 1;
4865 /* Verify "dangerous" spells */
4866 if (shouhimana > p_ptr->csp)
4870 msg_format("¤½¤Î%s¤ò%s¤Î¤Ë½½Ê¬¤Ê¥Þ¥¸¥Ã¥¯¥Ý¥¤¥ó¥È¤¬¤Ê¤¤¡£",prayer,
4871 ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "±Ó¾§¤¹¤ë" : (mp_ptr->spell_book == TV_LIFE_BOOK) ? "²Î¤¦" : "¾§¤¨¤ë"));
4873 msg_format("You do not have enough mana to %s this %s.",
4874 ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "recite" : "cast"),
4879 if (!over_exert) return;
4883 if (!get_check_strict("¤½¤ì¤Ç¤âÄ©À路¤Þ¤¹¤«? ", CHECK_OKAY_CANCEL)) return;
4885 if (!get_check_strict("Attempt it anyway? ", CHECK_OKAY_CANCEL)) return;
4891 /* Spell failure chance */
4892 chance = spell_chance(spell, use_realm - 1);
4895 if (randint0(100) < chance)
4897 if (flush_failure) flush();
4900 msg_format("%s¤ò¤¦¤Þ¤¯¾§¤¨¤é¤ì¤Ê¤«¤Ã¤¿¡ª", prayer);
4902 msg_format("You failed to get the %s off!", prayer);
4907 if (realm == REALM_LIFE) /* nanka */
4909 if (randint1(100) < chance)
4910 chg_virtue(V_FAITH, -1);
4912 else if (realm == REALM_DEATH)
4914 if (randint1(100) < chance)
4915 chg_virtue(V_UNLIFE, -1);
4917 else if (realm == REALM_NATURE)
4919 if (randint1(100) < chance)
4920 chg_virtue(V_NATURE, -1);
4922 else if (realm == REALM_DAEMON)
4924 if (randint1(100) < chance)
4925 chg_virtue(V_JUSTICE, 1);
4927 if (realm == REALM_HAJA) /* nanka */
4929 if (randint1(100) < chance)
4930 chg_virtue(V_FAITH, -1);
4932 else if (randint1(100) < chance)
4934 chg_virtue(V_KNOWLEDGE, -1);
4937 if (realm == REALM_TRUMP)
4939 cast_trump_spell(spell, FALSE);
4941 else if ((o_ptr->tval == TV_CHAOS_BOOK) && (randint1(100) < spell))
4944 msg_print("¥«¥ª¥¹Åª¤Ê¸ú²Ì¤òȯÀ¸¤·¤¿¡ª");
4946 msg_print("You produce a chaotic effect!");
4951 else if ((o_ptr->tval == TV_DEATH_BOOK) && (randint1(100) < spell))
4953 if ((sval == 3) && one_in_(2))
4955 sanity_blast(0, TRUE);
4960 msg_print("Äˤ¤¡ª");
4962 msg_print("It hurts!");
4966 take_hit(DAMAGE_LOSELIFE, damroll(o_ptr->sval + 1, 6), "°Å¹õËâË¡¤ÎµÕή", -1);
4968 take_hit(DAMAGE_LOSELIFE, damroll(o_ptr->sval + 1, 6), "a miscast Death spell", -1);
4971 if ((spell > 15) && one_in_(6) && !p_ptr->hold_life)
4972 lose_exp(spell * 250);
4975 else if ((o_ptr->tval == TV_MUSIC_BOOK) && (randint1(200) < spell))
4978 msg_print("¤¤¤ä¤Ê²»¤¬¶Á¤¤¤¿");
4980 msg_print("An infernal sound echoed.");
4983 aggravate_monsters(0);
4985 if (randint1(100) >= chance)
4986 chg_virtue(V_CHANCE,-1);
4995 case REALM_LIFE: /* * LIFE * */
4996 cast = cast_life_spell(spell);
4998 case REALM_SORCERY: /* * SORCERY * */
4999 cast = cast_sorcery_spell(spell);
5001 case REALM_NATURE: /* * NATURE * */
5002 cast = cast_nature_spell(spell);
5004 case REALM_CHAOS: /* * CHAOS * */
5005 cast = cast_chaos_spell(spell);
5007 case REALM_DEATH: /* * DEATH * */
5008 cast = cast_death_spell(spell);
5010 case REALM_TRUMP: /* TRUMP */
5011 cast = cast_trump_spell(spell, TRUE);
5013 case REALM_ARCANE: /* ARCANE */
5014 cast = cast_arcane_spell(spell);
5016 case REALM_ENCHANT: /* ENCHANT */
5017 cast = cast_enchant_spell(spell);
5019 case REALM_DAEMON: /* DAEMON */
5020 cast = cast_daemon_spell(spell);
5022 case REALM_HAJA: /* HAJA */
5023 cast = cast_haja_spell(spell);
5025 case REALM_MUSIC: /* MUSIC */
5026 cast = cast_music_spell(spell);
5030 msg_format("You cast a spell from an unknown realm: realm %d, spell %d.", realm, spell);
5034 /* Canceled spells cost neither a turn nor mana */
5037 if (randint1(100) < chance)
5038 chg_virtue(V_CHANCE,1);
5040 /* A spell was cast */
5042 (spell_worked2 & (1L << spell)) :
5043 (spell_worked1 & (1L << spell)))
5044 && (p_ptr->pclass != CLASS_SORCERER)
5045 && (p_ptr->pclass != CLASS_RED_MAGE))
5047 int e = s_ptr->sexp;
5049 /* The spell worked */
5050 if (realm == p_ptr->realm1)
5052 spell_worked1 |= (1L << spell);
5056 spell_worked2 |= (1L << spell);
5059 /* Gain experience */
5060 gain_exp(e * s_ptr->slevel);
5062 if (realm == REALM_LIFE) /* nanka */
5064 chg_virtue(V_FAITH, 1);
5065 chg_virtue(V_COMPASSION, 1);
5066 chg_virtue(V_VITALITY, 1);
5067 chg_virtue(V_HONOUR, 1);
5069 else if (realm == REALM_DEATH)
5071 chg_virtue(V_UNLIFE, 1);
5072 chg_virtue(V_JUSTICE, -1);
5073 chg_virtue(V_FAITH, -1);
5074 chg_virtue(V_VITALITY, -1);
5076 else if (realm == REALM_DAEMON)
5078 chg_virtue(V_JUSTICE, -1);
5079 chg_virtue(V_FAITH, -1);
5080 chg_virtue(V_HONOUR, -1);
5081 chg_virtue(V_TEMPERANCE, -1);
5083 else if (realm == REALM_HAJA) /* nanka */
5085 chg_virtue(V_FAITH, 1);
5086 chg_virtue(V_COMPASSION, 1);
5087 chg_virtue(V_VITALITY, 1);
5088 chg_virtue(V_HONOUR, 1);
5090 else if (realm == REALM_NATURE)
5092 chg_virtue(V_NATURE, 1);
5093 chg_virtue(V_HARMONY, 1);
5096 chg_virtue(V_KNOWLEDGE, 1);
5098 if (realm == REALM_LIFE) /* nanka */
5100 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_FAITH, 1);
5101 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_COMPASSION, 1);
5102 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_VITALITY, 1);
5103 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_HONOUR, 1);
5105 else if (realm == REALM_DEATH)
5107 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_UNLIFE, 1);
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_VITALITY, -1);
5112 else if (realm == REALM_DAEMON)
5114 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_JUSTICE, -1);
5115 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_FAITH, -1);
5116 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_HONOUR, -1);
5117 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_TEMPERANCE, -1);
5119 else if (realm == REALM_HAJA) /* nanka */
5121 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_FAITH, 1);
5122 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_COMPASSION, 1);
5123 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_VITALITY, 1);
5124 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_HONOUR, 1);
5126 else if (realm == REALM_NATURE)
5128 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_NATURE, 1);
5129 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_HARMONY, 1);
5131 if (mp_ptr->spell_xtra & MAGIC_GAIN_EXP)
5133 if (spell_exp[(increment ? 32 : 0)+spell] < 900)
5134 spell_exp[(increment ? 32 : 0)+spell]+=60;
5135 else if(spell_exp[(increment ? 32 : 0)+spell] < 1200)
5136 {if ((dun_level > 4) && ((dun_level + 10) > p_ptr->lev)) spell_exp[(increment ? 32 : 0)+spell]+=8;}
5137 else if(spell_exp[(increment ? 32 : 0)+spell] < 1400)
5138 {if (((dun_level + 5) > p_ptr->lev) && ((dun_level + 5) > s_ptr->slevel)) spell_exp[(increment ? 32 : 0)+spell]+=2;}
5139 else if((spell_exp[(increment ? 32 : 0)+spell] < 1600) && !increment)
5140 {if (((dun_level + 5) > p_ptr->lev) && (dun_level > s_ptr->slevel)) spell_exp[(increment ? 32 : 0)+spell]+=1;}
5147 /* Sufficient mana */
5148 if (shouhimana <= p_ptr->csp)
5151 p_ptr->csp -= shouhimana;
5154 /* Over-exert the player */
5157 int oops = shouhimana;
5161 p_ptr->csp_frac = 0;
5165 msg_print("Àº¿À¤ò½¸Ã椷¤¹¤®¤Æµ¤¤ò¼º¤Ã¤Æ¤·¤Þ¤Ã¤¿¡ª");
5167 msg_print("You faint from the effort!");
5171 /* Hack -- Bypass free action */
5172 (void)set_paralyzed(p_ptr->paralyzed + randint1(5 * oops + 1));
5174 if (realm == REALM_LIFE) /* nanka */
5175 chg_virtue(V_FAITH, -10);
5176 else if (realm == REALM_DEATH)
5177 chg_virtue(V_UNLIFE, -10);
5178 else if (realm == REALM_DAEMON)
5179 chg_virtue(V_JUSTICE, 10);
5180 else if (realm == REALM_NATURE)
5181 chg_virtue(V_NATURE, -10);
5182 else if (realm == REALM_HAJA) /* nanka */
5183 chg_virtue(V_FAITH, -10);
5185 chg_virtue(V_KNOWLEDGE, -10);
5187 /* Damage CON (possibly permanently) */
5188 if (randint0(100) < 50)
5190 bool perm = (randint0(100) < 25);
5194 msg_print("ÂΤò°¤¯¤·¤Æ¤·¤Þ¤Ã¤¿¡ª");
5196 msg_print("You have damaged your health!");
5200 /* Reduce constitution */
5201 (void)dec_stat(A_CON, 15 + randint1(10), perm);
5206 p_ptr->redraw |= (PR_MANA);
5209 p_ptr->window |= (PW_PLAYER);
5210 p_ptr->window |= (PW_SPELL);
5215 * Pray a prayer -- Unused in Hengband
5217 void do_cmd_pray(void)
5219 msg_print("Praying is not used in Hengband. Use magic spell casting instead.");
5222 static bool ang_sort_comp_pet_dismiss(vptr u, vptr v, int a, int b)
5224 u16b *who = (u16b*)(u);
5229 monster_type *m_ptr1 = &m_list[w1];
5230 monster_type *m_ptr2 = &m_list[w2];
5231 monster_race *r_ptr1 = &r_info[m_ptr1->r_idx];
5232 monster_race *r_ptr2 = &r_info[m_ptr2->r_idx];
5234 if (w1 == p_ptr->riding) return TRUE;
5235 if (w2 == p_ptr->riding) return FALSE;
5237 if (m_ptr1->nickname && !m_ptr2->nickname) return TRUE;
5238 if (m_ptr2->nickname && !m_ptr1->nickname) return FALSE;
5240 if ((r_ptr1->flags1 & RF1_UNIQUE) && !(r_ptr2->flags1 & RF1_UNIQUE)) return TRUE;
5241 if ((r_ptr2->flags1 & RF1_UNIQUE) && !(r_ptr1->flags1 & RF1_UNIQUE)) return FALSE;
5243 if (r_ptr1->level > r_ptr2->level) return TRUE;
5244 if (r_ptr2->level > r_ptr1->level) return FALSE;
5246 if (m_ptr1->hp > m_ptr2->hp) return TRUE;
5247 if (m_ptr2->hp > m_ptr1->hp) return FALSE;
5252 int calculate_upkeep(void)
5254 s32b old_friend_align = friend_align;
5256 bool have_a_unique = FALSE;
5259 total_friend_levels = 0;
5262 for (m_idx = m_max - 1; m_idx >=1; m_idx--)
5264 monster_type *m_ptr;
5265 monster_race *r_ptr;
5267 m_ptr = &m_list[m_idx];
5268 if (!m_ptr->r_idx) continue;
5269 r_ptr = &r_info[m_ptr->r_idx];
5274 if (r_ptr->flags1 & RF1_UNIQUE)
5276 if (p_ptr->pclass == CLASS_CAVALRY)
5278 if (p_ptr->riding == m_idx)
5279 total_friend_levels += (r_ptr->level+5)*2;
5280 else if (!have_a_unique && (r_info[m_ptr->r_idx].flags7 & RF7_RIDING))
5281 total_friend_levels += (r_ptr->level+5)*7/2;
5283 total_friend_levels += (r_ptr->level+5)*10;
5284 have_a_unique = TRUE;
5287 total_friend_levels += (r_ptr->level+5)*10;
5290 total_friend_levels += r_ptr->level;
5292 /* Determine pet alignment */
5293 if (r_ptr->flags3 & RF3_GOOD)
5295 friend_align += r_ptr->level;
5297 else if (r_ptr->flags3 & RF3_EVIL)
5299 friend_align -= r_ptr->level;
5303 if (old_friend_align != friend_align) p_ptr->update |= (PU_BONUS);
5307 upkeep_factor = (total_friend_levels - (p_ptr->lev * 80 / (cp_ptr->pet_upkeep_div)));
5308 if (upkeep_factor < 0) upkeep_factor = 0;
5309 if (upkeep_factor > 1000) upkeep_factor = 1000;
5310 return upkeep_factor;
5316 void do_cmd_pet_dismiss(void)
5318 monster_type *m_ptr;
5319 bool all_pets = FALSE;
5333 /* Allocate the "who" array */
5334 C_MAKE(who, max_m_idx, u16b);
5336 /* Process the monsters (backwards) */
5337 for (pet_ctr = m_max - 1; pet_ctr >= 1; pet_ctr--)
5339 if (is_pet(&m_list[pet_ctr]))
5340 who[max_pet++] = pet_ctr;
5343 /* Select the sort method */
5344 ang_sort_comp = ang_sort_comp_pet_dismiss;
5345 ang_sort_swap = ang_sort_swap_hook;
5347 ang_sort(who, &dummy_why, max_pet);
5349 /* Process the monsters (backwards) */
5350 for (i = 0; i < max_pet; i++)
5353 char friend_name[80];
5357 /* Access the monster */
5359 m_ptr = &m_list[pet_ctr];
5361 delete_this = FALSE;
5362 kakunin = ((pet_ctr == p_ptr->riding) || (m_ptr->nickname));
5363 monster_desc(friend_name, m_ptr, 0x80);
5367 /* Hack -- health bar for this monster */
5368 health_track(pet_ctr);
5370 /* Hack -- handle stuff */
5374 sprintf(buf, "%s¤òÊü¤·¤Þ¤¹¤«¡© [Yes/No/Unnamed (%dɤ)]", friend_name, max_pet-i);
5376 sprintf(buf, "Dismiss %s? [Yes/No/Unnamed (%d remain)]", friend_name, max_pet-i);
5381 move_cursor_relative(m_ptr->fy, m_ptr->fx);
5387 if (ch == 'Y' || ch == 'y')
5394 sprintf(buf, "ËÜÅö¤Ë¤è¤í¤·¤¤¤Ç¤¹¤«¡© (%s) ", friend_name);
5396 sprintf(buf, "Are you sure? (%s) ", friend_name);
5398 if (!get_check(buf))
5399 delete_this = FALSE;
5404 if (ch == 'U' || ch == 'u')
5410 if (ch == ESCAPE || ch == 'N' || ch == 'n')
5417 if ((all_pets && !kakunin) || (!all_pets && delete_this))
5419 if (record_named_pet && m_ptr->nickname)
5423 monster_desc(m_name, m_ptr, 0x08);
5424 do_cmd_write_nikki(NIKKI_NAMED_PET, 2, m_name);
5427 if (pet_ctr == p_ptr->riding)
5430 msg_format("%s¤«¤é¹ß¤ê¤¿¡£", friend_name);
5432 msg_format("You have got off %s. ", friend_name);
5437 /* Update the monsters */
5438 p_ptr->update |= (PU_BONUS | PU_MONSTERS);
5439 p_ptr->redraw |= (PR_EXTRA);
5442 /* HACK : Add the line to message buffer */
5444 sprintf(buf, "%s ¤òÎ¥¤·¤¿¡£", friend_name);
5446 sprintf(buf, "Dismissed %s.", friend_name);
5449 p_ptr->window |= (PW_MESSAGE);
5452 delete_monster_idx(pet_ctr);
5461 C_KILL(who, max_m_idx, u16b);
5464 msg_format("%d ɤ¤Î¥Ú¥Ã¥È¤òÊü¤·¤Þ¤·¤¿¡£", Dismissed);
5466 msg_format("You have dismissed %d pet%s.", Dismissed,
5467 (Dismissed == 1 ? "" : "s"));
5469 if (Dismissed == 0 && all_pets)
5470 msg_print("'U'nnamed ¤Ï¡¢¾èÇϰʳ°¤Î̾Á°¤Î¤Ê¤¤¥Ú¥Ã¥È¤À¤±¤òÁ´¤Æ²òÊü¤·¤Þ¤¹¡£");
5472 p_ptr->update |= (PU_MON_LITE);
5475 bool rakuba(int dam, bool force)
5477 int i, y, x, oy, ox;
5478 int sn = 0, sy = 0, sx = 0;
5480 monster_type *m_ptr = &m_list[p_ptr->riding];
5481 monster_race *r_ptr = &r_info[m_ptr->r_idx];
5483 if (!p_ptr->riding) return FALSE;
5484 if (p_ptr->wild_mode) return FALSE;
5486 if (dam >= 0 || force)
5490 int level = r_ptr->level;
5491 if (p_ptr->riding_ryoute) level += 20;
5492 if ((dam/2 + r_ptr->level) > (skill_exp[GINOU_RIDING]/30+10))
5494 if((skill_exp[GINOU_RIDING] < s_info[p_ptr->pclass].s_max[GINOU_RIDING]) && s_info[p_ptr->pclass].s_max[GINOU_RIDING] > 1000)
5496 if (r_ptr->level*100 > (skill_exp[GINOU_RIDING] + 1500))
5497 skill_exp[GINOU_RIDING] += (1+(r_ptr->level - skill_exp[GINOU_RIDING]/100 - 15));
5498 else skill_exp[GINOU_RIDING]++;
5501 if (randint0(dam/2 + level*2) < (skill_exp[GINOU_RIDING]/30+10))
5503 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))
5509 /* Check around the player */
5510 for (i = 0; i < 8; i++)
5514 /* Access the location */
5515 y = py + ddy_ddd[i];
5516 x = px + ddx_ddd[i];
5518 c_ptr = &cave[y][x];
5520 /* Skip non-empty grids */
5521 if (cave_perma_grid(c_ptr)) continue;
5522 if (!cave_empty_grid2(c_ptr)) continue;
5524 if (c_ptr->m_idx) continue;
5526 /* Count "safe" grids */
5529 /* Randomize choice */
5530 if (randint0(sn) > 0) continue;
5532 /* Save the safe location */
5537 monster_desc(m_name, m_ptr, 0);
5539 msg_format("%s¤«¤é¿¶¤êÍî¤È¤µ¤ì¤½¤¦¤Ë¤Ê¤Ã¤Æ¡¢Êɤˤ֤Ĥ«¤Ã¤¿¡£",m_name);
5540 take_hit(DAMAGE_NOESCAPE, r_ptr->level+3, "Êɤؤξ×ÆÍ", -1);
5542 msg_format("You have nearly fallen from %s, but bumped into wall.",m_name);
5543 take_hit(DAMAGE_NOESCAPE, r_ptr->level+3, "bumping into wall", -1);
5554 /* Redraw the old spot */
5557 /* Redraw the new spot */
5560 /* Check for new panel */
5565 p_ptr->pet_extra_flags &= ~(PF_RYOUTE);
5566 p_ptr->riding_ryoute = p_ptr->old_riding_ryoute = FALSE;
5570 p_ptr->update |= (PU_BONUS);
5573 p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW);
5575 /* Update the monsters */
5576 p_ptr->update |= (PU_DISTANCE);
5579 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
5581 p_ptr->redraw |= (PR_EXTRA);
5583 if (p_ptr->ffall && !force)
5585 monster_desc(m_name, m_ptr, 0);
5587 msg_format("%s¤«¤éÍî¤Á¤¿¤¬¡¢¶õÃæ¤Ç¤¦¤Þ¤¯ÂÎÀª¤òΩ¤Æľ¤·¤ÆÃåÃϤ·¤¿¡£",m_name);
5589 msg_format("You are thrown from %s, but make a good landing.",m_name);
5594 take_hit(DAMAGE_NOESCAPE, r_ptr->level+3, "ÍîÇÏ", -1);
5596 take_hit(DAMAGE_NOESCAPE, r_ptr->level+3, "Falling from riding", -1);
5598 p_ptr->redraw |= (PR_UHEALTH);
5603 bool do_riding(bool force)
5605 int oy, ox, x, y, dir = 0;
5607 monster_type *m_ptr;
5609 if (!get_rep_dir2(&dir)) return FALSE;
5612 c_ptr = &cave[y][x];
5616 /* Skip non-empty grids */
5617 if (!cave_empty_bold2(y, x) || c_ptr->m_idx)
5620 msg_print("¤½¤Á¤é¤Ë¤Ï¹ß¤ê¤é¤ì¤Þ¤»¤ó¡£");
5622 msg_print("You cannot go to that direction.");
5627 p_ptr->pet_extra_flags &= ~(PF_RYOUTE);
5628 p_ptr->riding_ryoute = p_ptr->old_riding_ryoute = FALSE;
5632 if (p_ptr->confused)
5635 msg_print("º®Í𤷤Ƥ¤¤Æ¾è¤ì¤Ê¤¤¡ª");
5637 msg_print("You are too confused!");
5641 if (!(c_ptr->m_idx))
5644 msg_print("¤½¤Î¾ì½ê¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
5646 msg_print("Here is no pet.");
5652 m_ptr = &m_list[c_ptr->m_idx];
5654 if (!is_pet(m_ptr) && !force)
5657 msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤Ï¥Ú¥Ã¥È¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£");
5659 msg_print("That monster is no a pet.");
5664 if (!(r_info[m_ptr->r_idx].flags7 & RF7_RIDING))
5667 msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤Ë¤Ï¾è¤ì¤Ê¤µ¤½¤¦¤À¡£");
5669 msg_print("This monster doesn't seem suitable for riding.");
5674 if (!(p_ptr->pass_wall) && (c_ptr->feat >= FEAT_RUBBLE) && (c_ptr->feat <= FEAT_PERM_SOLID))
5677 msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤ÏÊɤÎÃæ¤Ë¤¤¤ë¡£");
5679 msg_print("This monster is in the wall.");
5684 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)))
5687 msg_print("¥Ñ¥¿¡¼¥ó¤Î¾å¤«¤é¤Ï¾è¤ì¤Þ¤»¤ó¡£");
5689 msg_print("You cannot ride from on Pattern.");
5697 msg_print("¤½¤Î¾ì½ê¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
5699 msg_print("Here is no monster.");
5704 if (r_info[m_ptr->r_idx].level > randint1((skill_exp[GINOU_RIDING]/50 + p_ptr->lev/2 +20)))
5707 msg_print("¤¦¤Þ¤¯¾è¤ì¤Ê¤«¤Ã¤¿¡£");
5709 msg_print("You failed to ride.");
5719 monster_desc(m_name, m_ptr, 0);
5722 msg_format("%s¤òµ¯¤³¤·¤¿¡£", m_name);
5724 msg_format("You have waked %s up.", m_name);
5728 p_ptr->riding = c_ptr->m_idx;
5731 /* Save the old location */
5735 /* Move the player to the safe location */
5739 /* Redraw the old spot */
5742 /* Redraw the new spot */
5745 /* Check for new panel */
5750 /* Mega-Hack -- Forget the view and lite */
5751 p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE);
5754 p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW);
5756 /* Update the monsters */
5757 p_ptr->update |= (PU_DISTANCE);
5759 /* Update the monsters */
5760 p_ptr->update |= (PU_BONUS);
5763 p_ptr->redraw |= (PR_MAP | PR_EXTRA);
5766 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
5768 p_ptr->redraw |= (PR_UHEALTH);
5774 void do_name_pet(void)
5776 monster_type *m_ptr;
5779 bool old_name = FALSE;
5780 bool old_target_pet = target_pet;
5783 if (!target_set(TARGET_KILL))
5785 target_pet = old_target_pet;
5788 target_pet = old_target_pet;
5790 if (cave[target_row][target_col].m_idx)
5792 m_ptr = &m_list[cave[target_row][target_col].m_idx];
5798 msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤Ï¥Ú¥Ã¥È¤Ç¤Ï¤Ê¤¤¡£");
5800 msg_format("This monster is not a pet.");
5804 if (r_info[m_ptr->r_idx].flags1 & RF1_UNIQUE)
5807 msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤Î̾Á°¤ÏÊѤ¨¤é¤ì¤Ê¤¤¡ª");
5809 msg_format("You cannot change name of this monster!");
5813 monster_desc(m_name, m_ptr, 0);
5817 msg_format("%s¤Ë̾Á°¤ò¤Ä¤±¤ë¡£", m_name);
5819 msg_format("Name %s.", m_name);
5824 /* Start with nothing */
5825 strcpy(out_val, "");
5827 /* Use old inscription */
5828 if (m_ptr->nickname)
5830 /* Start with the old inscription */
5831 strcpy(out_val, quark_str(m_ptr->nickname));
5835 /* Get a new inscription (possibly empty) */
5837 if (get_string("̾Á°: ", out_val, 15))
5839 if (get_string("Name: ", out_val, 15))
5845 /* Save the inscription */
5846 m_ptr->nickname = quark_add(out_val);
5847 if (record_named_pet)
5851 monster_desc(m_name, m_ptr, 0x08);
5852 do_cmd_write_nikki(NIKKI_NAMED_PET, 0, m_name);
5857 if (record_named_pet && old_name)
5861 monster_desc(m_name, m_ptr, 0x08);
5862 do_cmd_write_nikki(NIKKI_NAMED_PET, 1, m_name);
5864 m_ptr->nickname = 0;
5871 * Issue a pet command
5873 void do_cmd_pet(void)
5878 cptr power_desc[36];
5883 int pets = 0, pet_ctr;
5884 monster_type *m_ptr;
5891 char target_buf[160];
5895 /* Calculate pets */
5896 /* Process the monsters (backwards) */
5897 for (pet_ctr = m_max - 1; pet_ctr >= 1; pet_ctr--)
5899 /* Access the monster */
5900 m_ptr = &m_list[pet_ctr];
5902 if (is_pet(m_ptr)) pets++;
5906 power_desc[num] = "¥Ú¥Ã¥È¤òÊü¤¹";
5908 power_desc[num] = "dismiss pets";
5911 powers[num++] = PET_DISMISS;
5914 sprintf(target_buf,"¥Ú¥Ã¥È¤Î¥¿¡¼¥²¥Ã¥È¤ò»ØÄê (¸½ºß¡§%s)",
5915 (pet_t_m_idx ? r_name + r_info[m_list[pet_t_m_idx].r_idx].name : "»ØÄê¤Ê¤·"));
5917 sprintf(target_buf,"specify a targert of pet (now:%s)",
5918 (pet_t_m_idx ? r_name + r_info[m_list[pet_t_m_idx].r_idx].name : "nothing"));
5920 power_desc[num] = target_buf;
5922 powers[num++] = PET_TARGET;
5925 power_desc[num] = "¶á¤¯¤Ë¤¤¤í";
5927 power_desc[num] = "stay close";
5930 if (p_ptr->pet_follow_distance == PET_CLOSE_DIST) mode = num;
5931 powers[num++] = PET_STAY_CLOSE;
5934 power_desc[num] = "¤Ä¤¤¤ÆÍ褤";
5936 power_desc[num] = "follow me";
5939 if (p_ptr->pet_follow_distance == PET_FOLLOW_DIST) mode = num;
5940 powers[num++] = PET_FOLLOW_ME;
5943 power_desc[num] = "Ũ¤ò¸«¤Ä¤±¤ÆÅݤ»";
5945 power_desc[num] = "seek and destroy";
5948 if (p_ptr->pet_follow_distance == PET_DESTROY_DIST) mode = num;
5949 powers[num++] = PET_SEEK_AND_DESTROY;
5952 power_desc[num] = "¾¯¤·Î¥¤ì¤Æ¤¤¤í";
5954 power_desc[num] = "give me space";
5957 if (p_ptr->pet_follow_distance == PET_SPACE_DIST) mode = num;
5958 powers[num++] = PET_ALLOW_SPACE;
5961 power_desc[num] = "Î¥¤ì¤Æ¤¤¤í";
5963 power_desc[num] = "stay away";
5966 if (p_ptr->pet_follow_distance == PET_AWAY_DIST) mode = num;
5967 powers[num++] = PET_STAY_AWAY;
5969 if (p_ptr->pet_extra_flags & PF_OPEN_DOORS)
5972 power_desc[num] = "¥É¥¢¤ò³«¤±¤ë (¸½ºß:ON)";
5974 power_desc[num] = "pets open doors (now On)";
5981 power_desc[num] = "¥É¥¢¤ò³«¤±¤ë (¸½ºß:OFF)";
5983 power_desc[num] = "pets open doors (now Off)";
5987 powers[num++] = PET_OPEN_DOORS;
5989 if (p_ptr->pet_extra_flags & PF_PICKUP_ITEMS)
5992 power_desc[num] = "¥¢¥¤¥Æ¥à¤ò½¦¤¦ (¸½ºß:ON)";
5994 power_desc[num] = "pets pick up items (now On)";
6001 power_desc[num] = "¥¢¥¤¥Æ¥à¤ò½¦¤¦ (¸½ºß:OFF)";
6003 power_desc[num] = "pets pick up items (now Off)";
6007 powers[num++] = PET_TAKE_ITEMS;
6009 if (p_ptr->pet_extra_flags & PF_TELEPORT)
6012 power_desc[num] = "¥Æ¥ì¥Ý¡¼¥È·ÏËâË¡¤ò»È¤¦ (¸½ºß:ON)";
6014 power_desc[num] = "allow teleport (now On)";
6021 power_desc[num] = "¥Æ¥ì¥Ý¡¼¥È·ÏËâË¡¤ò»È¤¦ (¸½ºß:OFF)";
6023 power_desc[num] = "allow teleport (now Off)";
6027 powers[num++] = PET_TELEPORT;
6029 if (p_ptr->pet_extra_flags & PF_ATTACK_SPELL)
6032 power_desc[num] = "¹¶·âËâË¡¤ò»È¤¦ (¸½ºß:ON)";
6034 power_desc[num] = "allow cast attack spell (now On)";
6041 power_desc[num] = "¹¶·âËâË¡¤ò»È¤¦ (¸½ºß:OFF)";
6043 power_desc[num] = "allow cast attack spell (now Off)";
6047 powers[num++] = PET_ATTACK_SPELL;
6049 if (p_ptr->pet_extra_flags & PF_SUMMON_SPELL)
6052 power_desc[num] = "¾¤´ËâË¡¤ò»È¤¦ (¸½ºß:ON)";
6054 power_desc[num] = "allow cast summon spell (now On)";
6061 power_desc[num] = "¾¤´ËâË¡¤ò»È¤¦ (¸½ºß:OFF)";
6063 power_desc[num] = "allow cast summon spell (now Off)";
6067 powers[num++] = PET_SUMMON_SPELL;
6069 if (p_ptr->pet_extra_flags & PF_BALL_SPELL)
6072 power_desc[num] = "¥×¥ì¥¤¥ä¡¼¤ò´¬¤¹þ¤àÈÏ°ÏËâË¡¤ò»È¤¦ (¸½ºß:ON)";
6074 power_desc[num] = "allow involve player in area spell (now On)";
6081 power_desc[num] = "¥×¥ì¥¤¥ä¡¼¤ò´¬¤¹þ¤àÈÏ°ÏËâË¡¤ò»È¤¦ (¸½ºß:OFF)";
6083 power_desc[num] = "allow involve player in area spell (now Off)";
6087 powers[num++] = PET_BALL_SPELL;
6092 power_desc[num] = "¥Ú¥Ã¥È¤«¤é¹ß¤ê¤ë";
6094 power_desc[num] = "get off a pet";
6101 power_desc[num] = "¥Ú¥Ã¥È¤Ë¾è¤ë";
6103 power_desc[num] = "ride a pet";
6107 powers[num++] = PET_RIDING;
6110 power_desc[num] = "¥Ú¥Ã¥È¤Ë̾Á°¤ò¤Ä¤±¤ë¡£";
6112 power_desc[num] = "name pets";
6115 powers[num++] = PET_NAME;
6117 if (p_ptr->riding && buki_motteruka(INVEN_RARM) && (empty_hands(FALSE) & 0x00000001) && ((inventory[INVEN_RARM].weight > 99) || (inventory[INVEN_RARM].tval == TV_POLEARM)))
6119 if (p_ptr->pet_extra_flags & PF_RYOUTE)
6122 power_desc[num] = "Éð´ï¤òÊÒ¼ê¤Ç»ý¤Ä";
6124 power_desc[num] = "use one hand to control a riding pet";
6131 power_desc[num] = "Éð´ï¤òξ¼ê¤Ç»ý¤Ä";
6133 power_desc[num] = "use both hands for a weapon.";
6138 powers[num++] = PET_RYOUTE;
6141 /* Nothing chosen yet */
6144 /* Build a prompt (accept all spells) */
6147 /* Build a prompt (accept all spells) */
6149 strnfmt(out_val, 78, "(¥³¥Þ¥ó¥É %c-%c¡¢'*'=°ìÍ÷¡¢ESC=½ªÎ») ¥³¥Þ¥ó¥É¤òÁª¤ó¤Ç¤¯¤À¤µ¤¤:",
6151 strnfmt(out_val, 78, "(Command %c-%c, *=List, ESC=exit) Select a command: ",
6154 I2A(0), I2A(num - 1));
6159 strnfmt(out_val, 78, "(¥³¥Þ¥ó¥É %c-%c¡¢'*'=°ìÍ÷¡¢ESC=½ªÎ») ¥³¥Þ¥ó¥É¤òÁª¤ó¤Ç¤¯¤À¤µ¤¤:",
6161 strnfmt(out_val, 78, "(Command %c-%c, *=List, ESC=exit) Select a command: ",
6164 I2A(0), '0' + num - 27);
6170 /* Save the screen */
6177 prt(format("%s%c) %s", (ctr == mode) ? "*" : " ", I2A(ctr), power_desc[ctr]), y + ctr, x);
6183 prt("", y + ctr, x);
6190 /* Get a command from the user */
6191 while (!flag && get_com(out_val, &choice, TRUE))
6193 /* Request redraw */
6194 if ((choice == ' ') || (choice == '*') || (choice == '?'))
6206 /* Save the screen */
6213 sprintf(buf, "%s%c) %s", (ctr == mode) ? "*" : " ", I2A(ctr), power_desc[ctr]);
6214 prt(buf, y + ctr, x);
6220 prt("", y + ctr, x);
6234 /* Restore the screen */
6242 if (isalpha(choice))
6245 ask = (isupper(choice));
6248 if (ask) choice = tolower(choice);
6250 /* Extract request */
6251 i = (islower(choice) ? A2I(choice) : -1);
6255 ask = FALSE; /* Can't uppercase digits */
6257 i = choice - '0' + 26;
6260 /* Totally Illegal */
6261 if ((i < 0) || (i >= num))
6272 strnfmt(buf, 78, "%s¤ò»È¤¤¤Þ¤¹¤«¡© ", power_desc[i]);
6274 strnfmt(buf, 78, "Use %s? ", power_desc[i]);
6278 /* Belay that order */
6279 if (!get_check(buf)) continue;
6286 /* Restore the screen */
6287 if (redraw) Term_load();
6289 /* Abort if needed */
6298 case PET_DISMISS: /* Dismiss pets */
6303 msg_print("¥Ú¥Ã¥È¤¬¤¤¤Ê¤¤¡ª");
6305 msg_print("You have no pets!");
6309 do_cmd_pet_dismiss();
6310 (void)calculate_upkeep();
6315 project_length = -1;
6316 if (!target_set(TARGET_KILL)) pet_t_m_idx = 0;
6319 cave_type *c_ptr = &cave[target_row][target_col];
6320 if (c_ptr->m_idx && (m_list[c_ptr->m_idx].ml))
6322 pet_t_m_idx = cave[target_row][target_col].m_idx;
6323 p_ptr->pet_follow_distance = PET_DESTROY_DIST;
6325 else pet_t_m_idx = 0;
6332 case PET_STAY_CLOSE:
6334 p_ptr->pet_follow_distance = PET_CLOSE_DIST;
6341 p_ptr->pet_follow_distance = PET_FOLLOW_DIST;
6345 /* "Seek and destoy" */
6346 case PET_SEEK_AND_DESTROY:
6348 p_ptr->pet_follow_distance = PET_DESTROY_DIST;
6351 /* "Give me space" */
6352 case PET_ALLOW_SPACE:
6354 p_ptr->pet_follow_distance = PET_SPACE_DIST;
6360 p_ptr->pet_follow_distance = PET_AWAY_DIST;
6363 /* flag - allow pets to open doors */
6364 case PET_OPEN_DOORS:
6366 if (p_ptr->pet_extra_flags & PF_OPEN_DOORS) p_ptr->pet_extra_flags &= ~(PF_OPEN_DOORS);
6367 else p_ptr->pet_extra_flags |= (PF_OPEN_DOORS);
6370 /* flag - allow pets to pickup items */
6371 case PET_TAKE_ITEMS:
6373 if (p_ptr->pet_extra_flags & PF_PICKUP_ITEMS)
6375 p_ptr->pet_extra_flags &= ~(PF_PICKUP_ITEMS);
6376 for (pet_ctr = m_max - 1; pet_ctr >= 1; pet_ctr--)
6378 /* Access the monster */
6379 m_ptr = &m_list[pet_ctr];
6383 monster_drop_carried_objects(m_ptr);
6387 else p_ptr->pet_extra_flags |= (PF_PICKUP_ITEMS);
6391 /* flag - allow pets to teleport */
6394 if (p_ptr->pet_extra_flags & PF_TELEPORT) p_ptr->pet_extra_flags &= ~(PF_TELEPORT);
6395 else p_ptr->pet_extra_flags |= (PF_TELEPORT);
6398 /* flag - allow pets to cast attack spell */
6399 case PET_ATTACK_SPELL:
6401 if (p_ptr->pet_extra_flags & PF_ATTACK_SPELL) p_ptr->pet_extra_flags &= ~(PF_ATTACK_SPELL);
6402 else p_ptr->pet_extra_flags |= (PF_ATTACK_SPELL);
6405 /* flag - allow pets to cast attack spell */
6406 case PET_SUMMON_SPELL:
6408 if (p_ptr->pet_extra_flags & PF_SUMMON_SPELL) p_ptr->pet_extra_flags &= ~(PF_SUMMON_SPELL);
6409 else p_ptr->pet_extra_flags |= (PF_SUMMON_SPELL);
6412 /* flag - allow pets to cast attack spell */
6413 case PET_BALL_SPELL:
6415 if (p_ptr->pet_extra_flags & PF_BALL_SPELL) p_ptr->pet_extra_flags &= ~(PF_BALL_SPELL);
6416 else p_ptr->pet_extra_flags |= (PF_BALL_SPELL);
6434 if (p_ptr->pet_extra_flags & PF_RYOUTE) p_ptr->pet_extra_flags &= ~(PF_RYOUTE);
6435 else p_ptr->pet_extra_flags |= (PF_RYOUTE);
6436 p_ptr->update |= (PU_BONUS);