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);
195 if (menu_line > num) menu_line -= num;
196 /* Display a list of spells */
197 print_spells(menu_line, spells, num, 1, 15, use_realm - 1);
203 if ((choice == ' ') || (choice == '*') || (choice == '?'))
211 /* Save the screen */
214 /* Display a list of spells */
215 print_spells(menu_line, spells, num, 1, 15, use_realm - 1);
221 if (use_menu) continue;
226 /* Restore the screen */
236 ask = (isupper(choice));
239 if (ask) choice = tolower(choice);
241 /* Extract request */
242 i = (islower(choice) ? A2I(choice) : -1);
245 /* Totally Illegal */
246 if ((i < 0) || (i >= num))
252 /* Save the spell index */
255 /* Require "okay" spells */
256 if (!spell_okay(spell, learned, FALSE, use_realm - 1))
260 msg_format("¤½¤Î%s¤ò%s¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¡£", p, prompt);
262 msg_format("You may not %s that %s.", prompt, p);
273 /* Access the spell */
274 if (!is_magic(use_realm))
276 s_ptr = &technic_info[use_realm - MIN_TECHNIC - 1][spell];
280 s_ptr = &mp_ptr->info[use_realm - 1][spell % 32];
283 if (use_realm == REALM_HISSATSU)
285 shouhimana = s_ptr->smana;
289 if (p_ptr->pclass == CLASS_SORCERER)
290 shouhimana = s_ptr->smana*2200 + 2399;
291 else if (p_ptr->pclass == CLASS_RED_MAGE)
292 shouhimana = s_ptr->smana*2600 + 2399;
294 shouhimana = (s_ptr->smana*(3800-spell_exp[spell])+2399);
297 else shouhimana *= 4;
299 if(shouhimana < 1) shouhimana = 1;
304 jverb1( prompt, jverb_buf );
305 /* ±ÑÆüÀÚ¤êÂؤ¨µ¡Ç½¤ËÂбþ */
306 (void) strnfmt(tmp_val, 78, "%s(MP%d, ¼ºÇÔΨ%d%%)¤ò%s¤Þ¤¹¤«? ",
307 spell_names[technic2magic(use_realm)-1][spell % 32], shouhimana,
308 spell_chance(spell, use_realm -1),jverb_buf);
310 (void)strnfmt(tmp_val, 78, "%^s %s (%d mana, %d%% fail)? ",
311 prompt, spell_names[technic2magic(use_realm)-1][spell % 32], shouhimana,
312 spell_chance(spell, use_realm - 1));
316 /* Belay that order */
317 if (!get_check(tmp_val)) continue;
325 /* Restore the screen */
326 if (redraw) screen_load();
333 p_ptr->window |= (PW_SPELL);
340 /* Abort if needed */
341 if (!flag) return (FALSE);
343 /* Save the choice */
346 #ifdef ALLOW_REPEAT /* TNB */
350 #endif /* ALLOW_REPEAT -- TNB */
357 static bool item_tester_learn_spell(object_type *o_ptr)
359 s32b choices = realm_choices2[p_ptr->pclass];
361 if (p_ptr->pclass == CLASS_PRIEST)
363 if (p_ptr->realm1 == REALM_LIFE)
365 choices &= ~(CH_DEATH | CH_DAEMON);
367 else if ((p_ptr->realm1 == REALM_DEATH) || (p_ptr->realm1 == REALM_DAEMON))
369 choices &= ~(CH_LIFE);
373 if ((o_ptr->tval < TV_LIFE_BOOK) || (o_ptr->tval > (TV_LIFE_BOOK + MAX_REALM - 1))) return (FALSE);
374 if ((o_ptr->tval == TV_MUSIC_BOOK) && (p_ptr->pclass == CLASS_BARD)) return (TRUE);
375 else if (!is_magic(tval2realm(o_ptr->tval))) return FALSE;
376 if ((REALM1_BOOK == o_ptr->tval) || (REALM2_BOOK == o_ptr->tval)) return (TRUE);
377 if (choices & (0x0001 << (tval2realm(o_ptr->tval) - 1))) return (TRUE);
383 * Peruse the spells/prayers in a book
385 * Note that *all* spells in the book are listed
387 * Note that browsing is allowed while confused or blind,
388 * and in the dark, primarily to allow browsing in stores.
390 void do_cmd_browse(void)
392 int item, sval, use_realm = 0, j, line;
405 /* Warriors are illiterate */
406 if (!(p_ptr->realm1 || p_ptr->realm2) && (p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE))
409 msg_print("ËܤòÆɤळ¤È¤¬¤Ç¤¤Ê¤¤¡ª");
411 msg_print("You cannot read books!");
417 if (p_ptr->special_defense & KATA_MUSOU)
419 set_action(ACTION_NONE);
422 /* Restrict choices to "useful" books */
423 if (p_ptr->realm2 == REALM_NONE) item_tester_tval = mp_ptr->spell_book;
424 else item_tester_hook = item_tester_learn_spell;
428 q = "¤É¤ÎËܤòÆɤߤޤ¹¤«? ";
430 q = "Browse which book? ";
434 s = "Æɤá¤ëËܤ¬¤Ê¤¤¡£";
436 s = "You have no books that you can read.";
439 select_spellbook=TRUE;
440 if (p_ptr->pclass == CLASS_FORCETRAINER)
441 select_the_force = TRUE;
442 if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))){
443 select_spellbook = FALSE;
444 select_the_force = FALSE;
447 select_spellbook = FALSE;
448 select_the_force = FALSE;
450 if (item == 1111) { /* the_force */
451 do_cmd_mind_browse();
454 /* Get the item (in the pack) */
457 o_ptr = &inventory[item];
460 /* Get the item (on the floor) */
463 o_ptr = &o_list[0 - item];
467 if (object_browse_callback(o_ptr)) return;
468 #endif /* USE_SCRIPT */
470 /* Access the item's sval */
473 use_realm = tval2realm(o_ptr->tval);
474 if ((p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE) && is_magic(use_realm))
476 if (o_ptr->tval == REALM2_BOOK) increment = 32;
477 else if (o_ptr->tval != REALM1_BOOK) increment = 64;
480 /* Track the object kind */
481 object_kind_track(o_ptr->k_idx);
483 /* Hack -- Handle stuff */
488 for (spell = 0; spell < 32; spell++)
490 /* Check for this spell */
491 if ((fake_spell_flags[sval] & (1L << spell)))
493 /* Collect this spell */
494 spells[num++] = spell;
499 /* Save the screen */
502 /* Clear the top line */
505 /* Keep browsing spells. Exit browsing on cancel. */
508 /* Ask for a spell, allow cancel */
510 if (!get_spell(&spell, "Æɤà", o_ptr->sval, TRUE, use_realm))
512 if (!get_spell(&spell, "browse", o_ptr->sval, TRUE, use_realm))
515 /* If cancelled, leave immediately. */
516 if (spell == -1) break;
518 /* Display a list of spells */
519 print_spells(0, spells, num, 1, 15, use_realm - 1);
521 /* Notify that there's nothing to see, and wait. */
522 if (use_realm == REALM_HISSATSU)
524 prt("Æɤá¤ëµ»¤¬¤Ê¤¤¡£", 0, 0);
526 prt("No techniques to browse.", 0, 0);
530 prt("Æɤá¤ë¼öʸ¤¬¤Ê¤¤¡£", 0, 0);
532 prt("No spells to browse.", 0, 0);
537 /* Restore the screen */
543 /* Clear lines, position cursor (really should use strlen here) */
544 Term_erase(14, 14, 255);
545 Term_erase(14, 13, 255);
546 Term_erase(14, 12, 255);
547 Term_erase(14, 11, 255);
549 /* Access the spell */
550 if (!is_magic(use_realm))
552 s_ptr = &technic_info[use_realm - MIN_TECHNIC - 1][spell];
556 s_ptr = &mp_ptr->info[use_realm - 1][spell];
559 roff_to_buf( spell_tips[technic2magic(use_realm)-1][spell] ,62,temp);
560 for(j=0, line = 11;temp[j];j+=(1+strlen(&temp[j])))
562 prt(&temp[j], line, 15);
567 /* Restore the screen */
572 static void change_realm2(int next_realm)
577 for (i = 0; i < 64; i++)
579 spell_order[j] = spell_order[i];
580 if(spell_order[i] < 32) j++;
585 for (i = 32; i < 64; i++)
591 spell_forgotten2 = 0L;
594 sprintf(tmp,"ËâË¡¤ÎÎΰè¤ò%s¤«¤é%s¤ËÊѹ¹¤·¤¿¡£", realm_names[p_ptr->realm2], realm_names[next_realm]);
596 sprintf(tmp,"change magic realm from %s to %s.", realm_names[p_ptr->realm2], realm_names[next_realm]);
598 do_cmd_write_nikki(NIKKI_BUNSHOU, 0, tmp);
599 p_ptr->old_realm |= 1 << (p_ptr->realm2-1);
600 p_ptr->realm2 = next_realm;
602 p_ptr->notice |= (PN_REORDER);
603 p_ptr->update |= (PU_SPELLS);
609 * Study a book to gain a new spell/prayer
611 void do_cmd_study(void)
615 bool learned = FALSE;
617 /* Spells of realm2 will have an increment of +32 */
620 cptr p = spell_categoly_name(mp_ptr->spell_book);
629 msg_print("ËܤòÆɤळ¤È¤¬¤Ç¤¤Ê¤¤¡ª");
631 msg_print("You cannot read books!");
637 if (p_ptr->blind || no_lite())
640 msg_print("Ìܤ¬¸«¤¨¤Ê¤¤¡ª");
642 msg_print("You cannot see!");
651 msg_print("º®Í𤷤Ƥ¤¤ÆÆɤá¤Ê¤¤¡ª");
653 msg_print("You are too confused!");
659 if (!(p_ptr->new_spells))
662 msg_format("¿·¤·¤¤%s¤ò³Ð¤¨¤ë¤³¤È¤Ï¤Ç¤¤Ê¤¤¡ª", p);
664 msg_format("You cannot learn any new %ss!", p);
670 if (p_ptr->special_defense & KATA_MUSOU)
672 set_action(ACTION_NONE);
675 p = spell_categoly_name(mp_ptr->spell_book);
678 if( p_ptr->new_spells < 10 ){
679 msg_format("¤¢¤È %d ¤Ä¤Î%s¤ò³Ø¤Ù¤ë¡£", p_ptr->new_spells, p);
681 msg_format("¤¢¤È %d ¸Ä¤Î%s¤ò³Ø¤Ù¤ë¡£", p_ptr->new_spells, p);
684 msg_format("You can learn %d new %s%s.", p_ptr->new_spells, p,
685 (p_ptr->new_spells == 1?"":"s"));
691 /* Restrict choices to "useful" books */
692 if (p_ptr->realm2 == REALM_NONE) item_tester_tval = mp_ptr->spell_book;
693 else item_tester_hook = item_tester_learn_spell;
697 q = "¤É¤ÎËܤ«¤é³Ø¤Ó¤Þ¤¹¤«? ";
699 q = "Study which book? ";
703 s = "Æɤá¤ëËܤ¬¤Ê¤¤¡£";
705 s = "You have no books that you can read.";
708 select_spellbook=TRUE;
709 if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return;
710 select_spellbook=FALSE;
712 /* Get the item (in the pack) */
715 o_ptr = &inventory[item];
718 /* Get the item (on the floor) */
721 o_ptr = &o_list[0 - item];
724 /* Access the item's sval */
727 if (o_ptr->tval == REALM2_BOOK) increment = 32;
728 else if (o_ptr->tval != REALM1_BOOK)
731 if (!get_check("ËÜÅö¤ËËâË¡¤ÎÎΰè¤òÊѹ¹¤·¤Þ¤¹¤«¡©")) return;
733 if (!get_check("Really, change magic realm? ")) return;
735 change_realm2(tval2realm(o_ptr->tval));
739 /* Track the object kind */
740 object_kind_track(o_ptr->k_idx);
742 /* Hack -- Handle stuff */
745 /* Mage -- Learn a selected spell */
746 if (mp_ptr->spell_book != TV_LIFE_BOOK)
748 /* Ask for a spell, allow cancel */
750 if (!get_spell(&spell, "³Ø¤Ö", sval, FALSE, o_ptr->tval - TV_LIFE_BOOK + 1)
751 && (spell == -1)) return;
753 if (!get_spell(&spell, "study", sval, FALSE, o_ptr->tval - TV_LIFE_BOOK + 1)
754 && (spell == -1)) return;
759 /* Priest -- Learn a random prayer */
767 for (spell = 0; spell < 32; spell++)
769 /* Check spells in the book */
770 if ((fake_spell_flags[sval] & (1L << spell)))
772 /* Skip non "okay" prayers */
773 if (!spell_okay(spell, FALSE, TRUE,
774 (increment ? p_ptr->realm2 - 1 : p_ptr->realm1 - 1))) continue;
776 /* Hack -- Prepare the randomizer */
779 /* Hack -- Apply the randomizer */
780 if (rand_int(k) == 0) gift = spell;
788 /* Nothing to study */
793 msg_format("¤½¤ÎËܤˤϳؤ֤٤%s¤¬¤Ê¤¤¡£", p);
795 msg_format("You cannot learn any %ss in that book.", p);
804 if (increment) spell += increment;
806 /* Learn the spell */
809 if (spell_learned1 & (1L << spell)) learned = TRUE;
810 else spell_learned1 |= (1L << spell);
814 if (spell_learned2 & (1L << (spell - 32))) learned = TRUE;
815 else spell_learned2 |= (1L << (spell - 32));
820 int max_exp = (spell < 32) ? 1600 : 1400;
821 int old_exp = spell_exp[spell];
823 cptr name = spell_names[technic2magic(increment ? p_ptr->realm2 : p_ptr->realm1)-1][spell%32];
825 if (old_exp >= max_exp)
828 msg_format("¤½¤Î%s¤Ï´°Á´¤Ë»È¤¤¤³¤Ê¤»¤ë¤Î¤Ç³Ø¤ÖɬÍפϤʤ¤¡£", spell_categoly_name(mp_ptr->spell_book));
830 msg_format("You don't need to study this %s anymore.", spell_categoly_name(mp_ptr->spell_book));
835 if (!get_check(format("%s¤Î%s¤ò¤µ¤é¤Ë³Ø¤Ó¤Þ¤¹¡£¤è¤í¤·¤¤¤Ç¤¹¤«¡©", name, spell_categoly_name(mp_ptr->spell_book))))
837 if (!get_check(format("You will study a %s of %s again. Are you sure? ", spell_categoly_name(mp_ptr->spell_book), name)))
842 else if (old_exp >= 1400)
844 spell_exp[spell] = 1600;
847 else if (old_exp >= 1200)
849 if (spell >= 32) spell_exp[spell] = 1400;
850 else spell_exp[spell] += 200;
853 else if (old_exp >= 900)
855 spell_exp[spell] = 1200+(old_exp-900)*2/3;
860 spell_exp[spell] = 900+(old_exp)/3;
864 msg_format("%s¤Î½ÏÎýÅÙ¤¬%s¤Ë¾å¤¬¤Ã¤¿¡£", name, shougou_moji[new_rank]);
866 msg_format("Your proficiency of %s is now %s rank.", name, shougou_moji[new_rank]);
871 /* Find the next open entry in "spell_order[]" */
872 for (i = 0; i < 64; i++)
874 /* Stop at the first empty space */
875 if (spell_order[i] == 99) break;
878 /* Add the spell to the known list */
879 spell_order[i++] = spell;
881 /* Mention the result */
883 /* ±ÑÆüÀÚ¤êÂؤ¨µ¡Ç½¤ËÂбþ */
884 if (mp_ptr->spell_book == TV_MUSIC_BOOK)
886 msg_format("%s¤ò³Ø¤ó¤À¡£",
887 spell_names[technic2magic(increment ? p_ptr->realm2 : p_ptr->realm1)-1][spell % 32]);
891 msg_format("%s¤Î%s¤ò³Ø¤ó¤À¡£",
892 spell_names[technic2magic(increment ? p_ptr->realm2 : p_ptr->realm1)-1][spell % 32] ,p);
895 msg_format("You have learned the %s of %s.",
896 p, spell_names[technic2magic(increment ? p_ptr->realm2 : p_ptr->realm1)-1][spell % 32]);
903 if (mp_ptr->spell_book == TV_LIFE_BOOK)
904 chg_virtue(V_FAITH, 1);
905 else if (mp_ptr->spell_book == TV_DEATH_BOOK)
906 chg_virtue(V_UNLIFE, 1);
907 else if (mp_ptr->spell_book == TV_NATURE_BOOK)
908 chg_virtue(V_NATURE, 1);
910 chg_virtue(V_KNOWLEDGE, 1);
915 /* One less spell available */
916 p_ptr->learned_spells++;
918 /* Message if needed */
919 if (p_ptr->new_spells)
923 if( p_ptr->new_spells < 10 ){
924 msg_format("¤¢¤È %d ¤Ä¤Î%s¤ò³Ø¤Ù¤ë¡£", p_ptr->new_spells, p);
926 msg_format("¤¢¤È %d ¸Ä¤Î%s¤ò³Ø¤Ù¤ë¡£", p_ptr->new_spells, p);
929 msg_format("You can learn %d more %s%s.",
930 p_ptr->new_spells, p,
931 (p_ptr->new_spells != 1) ? "s" : "");
938 p_ptr->update |= (PU_SPELLS);
943 void wild_magic(int spell)
946 int type = SUMMON_BIZARRE1 + rand_int(6);
948 if (type < SUMMON_BIZARRE1) type = SUMMON_BIZARRE1;
949 else if (type > SUMMON_BIZARRE6) type = SUMMON_BIZARRE6;
951 switch (randint(spell) + randint(8) + 1)
961 teleport_player(100);
965 teleport_player(200);
975 lite_area(damroll(2, 3), 2);
978 destroy_doors_touch();
983 sleep_monsters_touch();
987 trap_creation(py, px);
996 aggravate_monsters(0);
999 earthquake(py, px, 5);
1003 (void)gain_random_mutation(0);
1007 apply_disenchant(0);
1013 fire_ball(GF_CHAOS, 0, spell + 5, 1 + (spell / 10));
1020 while (counter++ < 8)
1022 (void)summon_specific(0, py, px, (dun_level * 3) / 2, type, TRUE, FALSE, FALSE, FALSE, TRUE);
1027 activate_hi_summon(py, px, FALSE);
1030 (void)summon_cyber(-1, py, px);
1035 (void)activate_ty_curse(FALSE, &count);
1044 static bool cast_life_spell(int spell)
1047 int plev = p_ptr->lev;
1051 case 0: /* Detect Evil */
1052 (void)detect_monsters_evil(DETECT_RAD_DEFAULT);
1054 case 1: /* Cure Light Wounds */
1055 (void)hp_player(damroll(2, 10));
1056 (void)set_cut(p_ptr->cut - 10);
1059 (void)set_blessed(randint(12) + 12, FALSE);
1061 case 3: /* Remove Fear */
1062 (void)set_afraid(0);
1064 case 4: /* Call Light */
1065 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
1067 case 5: /* Detect Traps + Secret Doors */
1068 (void)detect_traps(DETECT_RAD_DEFAULT);
1069 (void)detect_doors(DETECT_RAD_DEFAULT);
1070 (void)detect_stairs(DETECT_RAD_DEFAULT);
1072 case 6: /* Cure Medium Wounds */
1073 (void)hp_player(damroll(4, 10));
1074 (void)set_cut((p_ptr->cut / 2) - 20);
1076 case 7: /* Satisfy Hunger */
1077 (void)set_food(PY_FOOD_MAX - 1);
1079 case 8: /* Remove Curse */
1083 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
1085 msg_print("You feel as if someone is watching over you.");
1089 case 9: /* Cure Poison */
1090 (void)set_poisoned(0);
1092 case 10: /* Cure Critical Wounds */
1093 (void)hp_player(damroll(8, 10));
1097 case 11: /* Sense Unseen */
1098 (void)set_tim_invis(randint(24) + 24, FALSE);
1100 case 12: /* Holy Orb */
1101 if (!get_aim_dir(&dir)) return FALSE;
1103 fire_ball(GF_HOLY_FIRE, dir,
1104 (damroll(3, 6) + plev +
1105 (plev / ((p_ptr->pclass == CLASS_PRIEST ||
1106 p_ptr->pclass == CLASS_HIGH_MAGE ||
1107 p_ptr->pclass == CLASS_SORCERER) ? 2 : 4))),
1108 ((plev < 30) ? 2 : 3));
1111 case 13: /* Protection from Evil */
1112 (void)set_protevil(randint(25) + 3 * p_ptr->lev, FALSE);
1114 case 14: /* Healing */
1115 (void)hp_player(300);
1119 case 15: /* Glyph of Warding */
1122 case 16: /* Exorcism */
1123 (void)dispel_undead(randint(plev));
1124 (void)dispel_demons(randint(plev));
1125 (void)turn_evil(plev);
1127 case 17: /* Dispel Curse */
1128 if (remove_all_curse())
1131 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
1133 msg_print("You feel as if someone is watching over you.");
1137 case 18: /* Dispel Undead + Demons */
1138 (void)dispel_undead(randint(plev * 3));
1139 (void)dispel_demons(randint(plev * 3));
1141 case 19: /* 'Day of the Dove' */
1142 charm_monsters(plev * 2);
1144 case 20: /* Dispel Evil */
1145 (void)dispel_evil(randint(plev * 4));
1147 case 21: /* Banishment */
1148 if (banish_evil(100))
1151 msg_print("¿À¤Î¸æÎϤ¬¼Ù°¤òÂǤÁʧ¤Ã¤¿¡ª");
1153 msg_print("The power of your god banishes evil!");
1158 case 22: /* Holy Word */
1159 (void)dispel_evil(randint(plev * 4));
1160 (void)hp_player(1000);
1161 (void)set_afraid(0);
1162 (void)set_poisoned(0);
1166 case 23: /* Warding True */
1170 case 24: /* Heroism */
1171 (void)set_hero(randint(25) + 25, FALSE);
1172 (void)hp_player(10);
1173 (void)set_afraid(0);
1175 case 25: /* Prayer */
1176 (void)set_blessed(randint(48) + 48, FALSE);
1178 case 26: /* Turn Undead */
1179 (void)mass_genocide_undead(plev+50,TRUE);
1181 case 27: /* Restoration */
1182 (void)do_res_stat(A_STR);
1183 (void)do_res_stat(A_INT);
1184 (void)do_res_stat(A_WIS);
1185 (void)do_res_stat(A_DEX);
1186 (void)do_res_stat(A_CON);
1187 (void)do_res_stat(A_CHR);
1188 (void)restore_level();
1190 case 28: /* Healing True */
1191 (void)hp_player(2000);
1195 case 29: /* Holy Vision */
1196 return identify_fully(FALSE);
1197 case 30: /* Divine Intervention */
1198 project(0, 1, py, px, 500, GF_HOLY_FIRE, PROJECT_KILL, -1);
1199 dispel_monsters(plev * 4);
1201 stun_monsters(plev * 4);
1202 confuse_monsters(plev * 4);
1203 turn_monsters(plev * 4);
1204 stasis_monsters(plev * 4);
1205 summon_specific(-1, py, px, plev, SUMMON_ANGEL, TRUE, TRUE, TRUE, FALSE, FALSE);
1206 (void)set_hero(randint(25) + 25, FALSE);
1207 (void)hp_player(300);
1208 (void)set_fast(randint(20 + plev) + plev, FALSE);
1209 (void)set_afraid(0);
1211 case 31: /* Ultimate resistance */
1213 int v = randint(plev/2)+plev/2;
1214 (void)set_fast(v, FALSE);
1215 set_oppose_acid(v, FALSE);
1216 set_oppose_elec(v, FALSE);
1217 set_oppose_fire(v, FALSE);
1218 set_oppose_cold(v, FALSE);
1219 set_oppose_pois(v, FALSE);
1220 set_ultimate_res(v, FALSE);
1225 msg_format("¤¢¤Ê¤¿¤ÏÉÔÌÀ¤Ê¥é¥¤¥Õ¤Î¼öʸ %d ¤ò¾§¤¨¤¿¡£", spell);
1227 msg_format("You cast an unknown Life spell: %d.", spell);
1238 static bool cast_sorcery_spell(int spell)
1241 int plev = p_ptr->lev;
1245 case 0: /* Detect Monsters */
1246 (void)detect_monsters_normal(DETECT_RAD_DEFAULT);
1248 case 1: /* Phase Door */
1249 teleport_player(10);
1251 case 2: /* Detect Doors and Traps */
1252 (void)detect_traps(DETECT_RAD_DEFAULT);
1253 (void)detect_doors(DETECT_RAD_DEFAULT);
1254 (void)detect_stairs(DETECT_RAD_DEFAULT);
1256 case 3: /* Light Area */
1257 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
1259 case 4: /* Confuse Monster */
1260 if (!get_aim_dir(&dir)) return FALSE;
1262 (void)confuse_monster(dir, (plev * 3) / 2);
1264 case 5: /* Teleport */
1265 teleport_player(plev * 5);
1267 case 6: /* Sleep Monster */
1268 if (!get_aim_dir(&dir)) return FALSE;
1270 (void)sleep_monster(dir);
1272 case 7: /* Recharging */
1273 return recharge(plev * 4);
1274 case 8: /* Magic Mapping */
1275 map_area(DETECT_RAD_MAP);
1277 case 9: /* Identify */
1278 return ident_spell(FALSE);
1279 case 10: /* Slow Monster */
1280 if (!get_aim_dir(&dir)) return FALSE;
1282 (void)slow_monster(dir);
1284 case 11: /* Mass Sleep */
1285 (void)sleep_monsters();
1287 case 12: /* Teleport Away */
1288 if (!get_aim_dir(&dir)) return FALSE;
1290 (void)fire_beam(GF_AWAY_ALL, dir, plev);
1292 case 13: /* Haste Self */
1293 (void)set_fast(randint(20 + plev) + plev, FALSE);
1295 case 14: /* Detection True */
1296 (void)detect_all(DETECT_RAD_DEFAULT);
1298 case 15: /* Identify True */
1299 return identify_fully(FALSE);
1300 case 16: /* Detect Objects and Treasure*/
1301 (void)detect_objects_normal(DETECT_RAD_DEFAULT);
1302 (void)detect_treasure(DETECT_RAD_DEFAULT);
1303 (void)detect_objects_gold(DETECT_RAD_DEFAULT);
1305 case 17: /* Charm Monster */
1306 if (!get_aim_dir(&dir)) return FALSE;
1308 (void)charm_monster(dir, plev);
1310 case 18: /* Sense Minds */
1311 (void)set_tim_esp(randint(30) + 25, FALSE);
1313 case 19: /* Teleport to town */
1316 case 20: /* Self knowledge */
1317 (void)self_knowledge();
1319 case 21: /* Teleport Level */
1321 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return FALSE;
1323 if (!get_check("Are you sure? (Teleport Level)")) return FALSE;
1325 (void)teleport_player_level();
1327 case 22: /* Word of Recall */
1328 if (!word_of_recall()) return FALSE;
1330 case 23: /* Dimension Door */
1332 msg_print("¼¡¸µ¤ÎÈ⤬³«¤¤¤¿¡£ÌÜŪÃϤòÁª¤ó¤Ç²¼¤µ¤¤¡£");
1334 msg_print("You open a dimensional gate. Choose a destination.");
1337 return dimension_door();
1338 case 24: /* Probing */
1341 case 25: /* Explosive Rune */
1344 case 26: /* Telekinesis */
1345 if (!get_aim_dir(&dir)) return FALSE;
1347 fetch(dir, plev * 15, FALSE);
1349 case 27: /* Clairvoyance */
1350 chg_virtue(V_KNOWLEDGE, 1);
1351 chg_virtue(V_ENLIGHTEN, 1);
1353 wiz_lite(FALSE, FALSE);
1354 if (!(p_ptr->telepathy))
1356 (void)set_tim_esp(randint(30) + 25, FALSE);
1359 case 28: /* Charm Monsters */
1360 charm_monsters(plev * 2);
1362 case 29: /* Alchemy */
1364 case 30: /* Banish */
1365 banish_monsters(plev * 4);
1367 case 31: /* Globe of Invulnerability */
1368 (void)set_invuln(randint(4) + 4, FALSE);
1372 msg_format("¤¢¤Ê¤¿¤ÏÉÔÌÀ¤Ê¥½¡¼¥µ¥ê¡¼¤Î¼öʸ %d ¤ò¾§¤¨¤¿¡£", spell);
1374 msg_format("You cast an unknown Sorcery spell: %d.", spell);
1384 static bool cast_nature_spell(int spell)
1388 int plev = p_ptr->lev;
1389 bool no_trump = FALSE;
1391 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
1392 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
1393 else beam = plev / 2;
1397 case 0: /* Detect Creatures */
1398 (void)detect_monsters_normal(DETECT_RAD_DEFAULT);
1400 case 1: /* Lightning Bolt */
1401 project_length = plev / 6 + 2;
1402 if (!get_aim_dir(&dir)) return FALSE;
1404 fire_beam(GF_ELEC, dir,
1405 damroll(3 + ((plev - 1) / 5), 4));
1407 case 2: /* Detect Doors & Traps */
1408 (void)detect_traps(DETECT_RAD_DEFAULT);
1409 (void)detect_doors(DETECT_RAD_DEFAULT);
1410 (void)detect_stairs(DETECT_RAD_DEFAULT);
1412 case 3: /* Produce Food */
1413 (void)set_food(PY_FOOD_MAX - 1);
1415 case 4: /* Daylight */
1416 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
1417 if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)
1420 msg_print("Æü¤Î¸÷¤¬¤¢¤Ê¤¿¤ÎÆùÂΤò¾Ç¤¬¤·¤¿¡ª");
1422 msg_print("The daylight scorches your flesh!");
1426 take_hit(DAMAGE_NOESCAPE, damroll(2, 2), "Æü¤Î¸÷", -1);
1428 take_hit(DAMAGE_NOESCAPE, damroll(2, 2), "daylight", -1);
1433 case 5: /* Animal Taming */
1434 if (!get_aim_dir(&dir)) return FALSE;
1436 (void)charm_animal(dir, plev);
1438 case 6: /* Resist Environment */
1439 (void)set_oppose_cold(randint(20) + 20, FALSE);
1440 (void)set_oppose_fire(randint(20) + 20, FALSE);
1441 (void)set_oppose_elec(randint(20) + 20, FALSE);
1443 case 7: /* Cure Wounds & Poison */
1444 (void)hp_player(damroll(2, 8));
1446 (void)set_poisoned(0);
1448 case 8: /* Stone to Mud */
1449 if (!get_aim_dir(&dir)) return FALSE;
1451 (void)wall_to_mud(dir);
1453 case 9: /* Frost Bolt */
1454 if (!get_aim_dir(&dir)) return FALSE;
1455 fire_bolt_or_beam(beam - 10, GF_COLD, dir,
1456 damroll(3 + ((plev - 5) / 4), 8));
1458 case 10: /* Nature Awareness -- downgraded */
1459 map_area(DETECT_RAD_MAP);
1460 (void)detect_traps(DETECT_RAD_DEFAULT);
1461 (void)detect_doors(DETECT_RAD_DEFAULT);
1462 (void)detect_stairs(DETECT_RAD_DEFAULT);
1463 (void)detect_monsters_normal(DETECT_RAD_DEFAULT);
1465 case 11: /* Fire Bolt */
1466 if (!get_aim_dir(&dir)) return FALSE;
1467 fire_bolt_or_beam(beam - 10, GF_FIRE, dir,
1468 damroll(5 + ((plev - 5) / 4), 8));
1470 case 12: /* Ray of Sunlight */
1471 if (!get_aim_dir(&dir)) return FALSE;
1473 msg_print("ÂÀÍÛ¸÷Àþ¤¬¸½¤ì¤¿¡£");
1475 msg_print("A line of sunlight appears.");
1478 (void)lite_line(dir);
1480 case 13: /* Entangle */
1483 case 14: /* Summon Animals */
1484 if (!(summon_specific(-1, py, px, plev, SUMMON_ANIMAL_RANGER, TRUE, TRUE, TRUE, FALSE, FALSE)))
1487 case 15: /* Herbal Healing */
1488 (void)hp_player(500);
1491 (void)set_poisoned(0);
1493 case 16: /* Stair Building */
1494 (void)stair_creation();
1496 case 17: /* Stone Skin */
1497 (void)set_shield(randint(20) + 30, FALSE);
1499 case 18: /* Resistance True */
1500 (void)set_oppose_acid(randint(20) + 20, FALSE);
1501 (void)set_oppose_elec(randint(20) + 20, FALSE);
1502 (void)set_oppose_fire(randint(20) + 20, FALSE);
1503 (void)set_oppose_cold(randint(20) + 20, FALSE);
1504 (void)set_oppose_pois(randint(20) + 20, FALSE);
1506 case 19: /* Tree Creation */
1507 (void)tree_creation();
1509 case 20: /* Animal Friendship */
1510 (void)charm_animals(plev * 2);
1512 case 21: /* Stone Tell */
1513 return identify_fully(FALSE);
1514 case 22: /* Wall of Stone */
1517 case 23: /* Protection from Corrosion */
1519 case 24: /* Earthquake */
1520 earthquake(py, px, 10);
1522 case 25: /* Whirlwind Attack */
1526 monster_type *m_ptr;
1528 for (dir = 0; dir < 8; dir++)
1530 y = py + ddy_ddd[dir];
1531 x = px + ddx_ddd[dir];
1532 c_ptr = &cave[y][x];
1534 /* Get the monster */
1535 m_ptr = &m_list[c_ptr->m_idx];
1537 /* Hack -- attack monsters */
1538 if (c_ptr->m_idx && (m_ptr->ml || cave_floor_bold(y, x)))
1543 case 26: /* Blizzard */
1544 if (!get_aim_dir(&dir)) return FALSE;
1546 fire_ball(GF_COLD, dir, 70 + plev * 3 / 2, (plev / 12) + 1);
1548 case 27: /* Lightning Storm */
1549 if (!get_aim_dir(&dir)) return FALSE;
1550 fire_ball(GF_ELEC, dir, 90 + plev * 3 / 2, (plev / 12) + 1);
1552 case 28: /* Whirlpool */
1553 if (!get_aim_dir(&dir)) return FALSE;
1554 fire_ball(GF_WATER, dir, 100 + plev * 3 / 2, (plev / 12) + 1);
1556 case 29: /* Call Sunlight */
1557 fire_ball(GF_LITE, 0, 150, 8);
1558 chg_virtue(V_KNOWLEDGE, 1);
1559 chg_virtue(V_ENLIGHTEN, 1);
1560 wiz_lite(FALSE, FALSE);
1561 if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)
1564 msg_print("Æü¸÷¤¬¤¢¤Ê¤¿¤ÎÆùÂΤò¾Ç¤¬¤·¤¿¡ª");
1566 msg_print("The sunlight scorches your flesh!");
1570 take_hit(DAMAGE_NOESCAPE, 50, "Æü¸÷", -1);
1572 take_hit(DAMAGE_NOESCAPE, 50, "sunlight", -1);
1577 case 30: /* Elemental Branding */
1578 brand_weapon(rand_int(2));
1580 case 31: /* Nature's Wrath */
1581 (void)dispel_monsters(plev * 4);
1582 earthquake(py, px, 20 + (plev / 2));
1583 project(0, 1 + plev / 12, py, px,
1584 (100 + plev) * 2, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM, -1);
1588 msg_format("¤¢¤Ê¤¿¤ÏÉÔÌÀ¤Ê¥Í¥¤¥Á¥ã¡¼¤Î¼öʸ %d ¤ò¾§¤¨¤¿¡£", spell);
1590 msg_format("You cast an unknown Nature spell: %d.", spell);
1598 msg_print("ưʪ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
1600 msg_print("No animals arrive.");
1608 static bool cast_chaos_spell(int spell)
1611 int plev = p_ptr->lev;
1613 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
1614 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
1615 else beam = plev / 2;
1619 case 0: /* Magic Missile */
1620 if (!get_aim_dir(&dir)) return FALSE;
1622 fire_bolt_or_beam(beam - 10, GF_MISSILE, dir,
1623 damroll(3 + ((plev - 1) / 5), 4));
1625 case 1: /* Trap / Door destruction */
1626 (void)destroy_doors_touch();
1628 case 2: /* Flash of Light == Light Area */
1629 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
1631 case 3: /* Touch of Confusion */
1632 if (!(p_ptr->special_attack & ATTACK_CONFUSE))
1635 msg_print("¤¢¤Ê¤¿¤Î¼ê¤Ï¸÷¤ê»Ï¤á¤¿¡£");
1637 msg_print("Your hands start glowing.");
1640 p_ptr->special_attack |= ATTACK_CONFUSE;
1641 p_ptr->redraw |= (PR_STATUS);
1644 case 4: /* Mana Burst */
1645 if (!get_aim_dir(&dir)) return FALSE;
1647 fire_ball(GF_MISSILE, dir,
1648 (damroll(3, 5) + plev +
1649 (plev / (((p_ptr->pclass == CLASS_MAGE)
1650 || (p_ptr->pclass == CLASS_HIGH_MAGE)
1651 || (p_ptr->pclass == CLASS_SORCERER)) ? 2 : 4))),
1652 ((plev < 30) ? 2 : 3));
1653 /* Shouldn't actually use GF_MANA, as it will destroy all
1654 * items on the floor */
1656 case 5: /* Fire Bolt */
1657 if (!get_aim_dir(&dir)) return FALSE;
1659 fire_bolt_or_beam(beam, GF_FIRE, dir,
1660 damroll(8 + ((plev - 5) / 4), 8));
1662 case 6: /* Fist of Force ("Fist of Fun") */
1663 if (!get_aim_dir(&dir)) return FALSE;
1665 fire_ball(GF_DISINTEGRATE, dir,
1666 damroll(8 + ((plev - 5) / 4), 8), 0);
1668 case 7: /* Teleport Self */
1669 teleport_player(plev * 5);
1671 case 8: /* Wonder */
1673 /* This spell should become more useful (more
1674 controlled) as the player gains experience levels.
1675 Thus, add 1/5 of the player's level to the die roll.
1676 This eliminates the worst effects later on, while
1677 keeping the results quite random. It also allows
1678 some potent effects only at high level. */
1680 int die = randint(100) + plev / 5;
1681 int vir = virtue_number(V_CHANCE);
1684 if (p_ptr->virtues[vir - 1] > 0)
1686 while (randint(400) < p_ptr->virtues[vir - 1]) die++;
1690 while (randint(400) < (0-p_ptr->virtues[vir - 1])) die--;
1695 chg_virtue(V_CHANCE, 1);
1697 if (!get_aim_dir(&dir)) return FALSE;
1700 msg_print("¤¢¤Ê¤¿¤ÏÎϤ¬¤ß¤Ê¤®¤ë¤Î¤ò´¶¤¸¤¿¡ª");
1702 msg_print("You feel a surge of power!");
1705 if (die < 8) clone_monster(dir);
1706 else if (die < 14) speed_monster(dir);
1707 else if (die < 26) heal_monster(dir, damroll(4, 6));
1708 else if (die < 31) poly_monster(dir);
1710 fire_bolt_or_beam(beam - 10, GF_MISSILE, dir,
1711 damroll(3 + ((plev - 1) / 5), 4));
1712 else if (die < 41) confuse_monster(dir, plev);
1713 else if (die < 46) fire_ball(GF_POIS, dir, 20 + (plev / 2), 3);
1714 else if (die < 51) (void)lite_line(dir);
1716 fire_bolt_or_beam(beam - 10, GF_ELEC, dir,
1717 damroll(3 + ((plev - 5) / 4), 8));
1719 fire_bolt_or_beam(beam - 10, GF_COLD, dir,
1720 damroll(5 + ((plev - 5) / 4), 8));
1722 fire_bolt_or_beam(beam, GF_ACID, dir,
1723 damroll(6 + ((plev - 5) / 4), 8));
1725 fire_bolt_or_beam(beam, GF_FIRE, dir,
1726 damroll(8 + ((plev - 5) / 4), 8));
1727 else if (die < 76) drain_life(dir, 75);
1728 else if (die < 81) fire_ball(GF_ELEC, dir, 30 + plev / 2, 2);
1729 else if (die < 86) fire_ball(GF_ACID, dir, 40 + plev, 2);
1730 else if (die < 91) fire_ball(GF_ICE, dir, 70 + plev, 3);
1731 else if (die < 96) fire_ball(GF_FIRE, dir, 80 + plev, 3);
1732 else if (die < 101) drain_life(dir, 100 + plev);
1735 earthquake(py, px, 12);
1739 destroy_area(py, px, 13+rand_int(5), TRUE);
1743 symbol_genocide(plev+50, TRUE);
1745 else if (die < 110) dispel_monsters(120);
1748 dispel_monsters(150);
1756 case 9: /* Chaos Bolt */
1757 if (!get_aim_dir(&dir)) return FALSE;
1759 fire_bolt_or_beam(beam, GF_CHAOS, dir,
1760 damroll(10 + ((plev - 5) / 4), 8));
1762 case 10: /* Sonic Boom */
1764 msg_print("¥É¡¼¥ó¡ªÉô²°¤¬Íɤ줿¡ª");
1766 msg_print("BOOM! Shake the room!");
1769 project(0, plev / 10 + 2, py, px,
1770 (60 + plev), GF_SOUND, PROJECT_KILL | PROJECT_ITEM, -1);
1772 case 11: /* Doom Bolt -- always beam in 2.0.7 or later */
1773 if (!get_aim_dir(&dir)) return FALSE;
1775 fire_beam(GF_MANA, dir, damroll(11 + ((plev - 5) / 4), 8));
1777 case 12: /* Fire Ball */
1778 if (!get_aim_dir(&dir)) return FALSE;
1780 fire_ball(GF_FIRE, dir, plev + 55, 2);
1782 case 13: /* Teleport Other */
1783 if (!get_aim_dir(&dir)) return FALSE;
1785 (void)fire_beam(GF_AWAY_ALL, dir, plev);
1787 case 14: /* Word of Destruction */
1788 destroy_area(py, px, 13+rand_int(5), TRUE);
1790 case 15: /* Invoke Logrus */
1791 if (!get_aim_dir(&dir)) return FALSE;
1793 fire_ball(GF_CHAOS, dir, plev*2 + 99, plev / 5);
1795 case 16: /* Polymorph Other */
1796 if (!get_aim_dir(&dir)) return FALSE;
1798 (void)poly_monster(dir);
1800 case 17: /* Chain Lightning */
1801 for (dir = 0; dir <= 9; dir++)
1802 fire_beam(GF_ELEC, dir, damroll(5 + (plev / 10), 8));
1804 case 18: /* Arcane Binding == Charging */
1805 return recharge(90);
1806 case 19: /* Disintegration */
1807 if (!get_aim_dir(&dir)) return FALSE;
1809 fire_ball(GF_DISINTEGRATE, dir, plev + 70, 3 + plev / 40);
1811 case 20: /* Alter Reality */
1814 case 21: /* Magic Rocket */
1815 if (!get_aim_dir(&dir)) return FALSE;
1818 msg_print("¥í¥±¥Ã¥Èȯ¼Í¡ª");
1820 msg_print("You launch a rocket!");
1823 fire_rocket(GF_ROCKET, dir, 120 + plev*2, 2);
1825 case 22: /* Chaos Branding */
1828 case 23: /* Summon monster, demon */
1830 bool pet = (randint(3) == 1);
1831 bool group = !(pet && (plev < 50));
1833 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, SUMMON_DEMON, group, FALSE, pet, FALSE, (bool)(!pet)))
1836 msg_print("ⲫ¤Î°½¤¬½¼Ëþ¤·¤¿¡£");
1838 msg_print("The area fills with a stench of sulphur and brimstone.");
1844 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
1846 msg_print("'What is thy bidding... Master?'");
1851 msg_print("¡ÖÈܤ·¤¼Ô¤è¡¢²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª ¤ªÁ°¤Îº²¤òĺ¤¯¤¾¡ª¡×");
1853 msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'");
1859 case 24: /* Beam of Gravity */
1860 if (!get_aim_dir(&dir)) return FALSE;
1862 fire_beam(GF_GRAVITY, dir, damroll(9 + ((plev - 5) / 4), 8));
1864 case 25: /* Meteor Swarm */
1867 int b = 10 + randint(10);
1868 for (i = 0; i < b; i++)
1870 int count = 0, d = 0;
1875 if (count > 20) break;
1876 x = px - 8 + rand_int(17);
1877 y = py - 8 + rand_int(17);
1879 if (!in_bounds(y,x) || (!cave_floor_bold(y,x) && (cave[y][x].feat != FEAT_TREES)) || !player_has_los_bold(y, x)) continue;
1881 dx = (px > x) ? (px - x) : (x - px);
1882 dy = (py > y) ? (py - y) : (y - py);
1884 /* Approximate distance */
1885 d = (dy > dx) ? (dy + (dx >> 1)) : (dx + (dy >> 1));
1889 if (count > 20) continue;
1891 project(0, 2, y, x, plev * 2, GF_METEOR, PROJECT_KILL | PROJECT_JUMP | PROJECT_ITEM, -1);
1895 case 26: /* Flame Strike */
1896 fire_ball(GF_FIRE, 0, 300 + (3 * plev), 8);
1898 case 27: /* Call Chaos */
1901 case 28: /* Polymorph Self */
1903 if (!get_check("ÊѿȤ·¤Þ¤¹¡£¤è¤í¤·¤¤¤Ç¤¹¤«¡©")) return FALSE;
1905 if (!get_check("You will polymorph yourself. Are you sure? ")) return FALSE;
1909 case 29: /* Mana Storm */
1910 if (!get_aim_dir(&dir)) return FALSE;
1912 fire_ball(GF_MANA, dir, 300 + (plev * 4), 4);
1914 case 30: /* Breathe Logrus */
1915 if (!get_aim_dir(&dir)) return FALSE;
1917 fire_ball(GF_CHAOS, dir, p_ptr->chp, 2);
1919 case 31: /* Call the Void */
1924 msg_format("¤¢¤Ê¤¿¤ÏÉÔÌÀ¤Ê¥«¥ª¥¹¤Î¼öʸ %d ¤ò¾§¤¨¤¿¡£", spell);
1926 msg_format("You cast an unknown Chaos spell: %d.", spell);
1936 static bool cast_death_spell(int spell)
1940 int plev = p_ptr->lev;
1943 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
1944 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
1945 else beam = plev / 2;
1949 case 0: /* Detect Undead & Demons -> Unlife */
1950 (void)detect_monsters_nonliving(DETECT_RAD_DEFAULT);
1952 case 1: /* Malediction */
1953 if (!get_aim_dir(&dir)) return FALSE;
1954 /* A radius-0 ball may (1) be aimed at objects etc.,
1955 * and will affect them; (2) may be aimed at ANY
1956 * visible monster, unlike a 'bolt' which must travel
1957 * to the monster. */
1959 fire_ball(GF_HELL_FIRE, dir,
1960 damroll(3 + ((plev - 1) / 5), 4), 0);
1962 if (randint(5) == 1)
1963 { /* Special effect first */
1964 dummy = randint(1000);
1966 fire_ball_hide(GF_DEATH_RAY, dir, plev * 200, 0);
1967 else if (dummy < 500)
1968 fire_ball_hide(GF_TURN_ALL, dir, plev, 0);
1969 else if (dummy < 800)
1970 fire_ball_hide(GF_OLD_CONF, dir, plev, 0);
1972 fire_ball_hide(GF_STUN, dir, plev, 0);
1975 case 2: /* Detect Evil */
1976 (void)detect_monsters_evil(DETECT_RAD_DEFAULT);
1978 case 3: /* Stinking Cloud */
1979 if (!get_aim_dir(&dir)) return FALSE;
1981 fire_ball(GF_POIS, dir, 10 + (plev / 2), 2);
1983 case 4: /* Black Sleep */
1984 if (!get_aim_dir(&dir)) return FALSE;
1986 (void)sleep_monster(dir);
1988 case 5: /* Resist Poison */
1989 (void)set_oppose_pois(randint(20) + 20, FALSE);
1991 case 6: /* Horrify */
1992 if (!get_aim_dir(&dir)) return FALSE;
1994 (void)fear_monster(dir, plev);
1995 (void)stun_monster(dir, plev);
1997 case 7: /* Enslave Undead */
1998 if (!get_aim_dir(&dir)) return FALSE;
2000 (void)control_one_undead(dir, plev);
2002 case 8: /* Orb of Entropy */
2003 if (!get_aim_dir(&dir)) return FALSE;
2005 fire_ball(GF_OLD_DRAIN, dir,
2006 (damroll(3, 6) + plev +
2007 (plev / (((p_ptr->pclass == CLASS_MAGE) ||
2008 (p_ptr->pclass == CLASS_HIGH_MAGE) ||
2009 (p_ptr->pclass == CLASS_SORCERER)) ? 2 : 4))),
2010 ((plev < 30) ? 2 : 3));
2012 case 9: /* Nether Bolt */
2013 if (!get_aim_dir(&dir)) return FALSE;
2015 fire_bolt_or_beam(beam, GF_NETHER, dir,
2016 damroll(8 + ((plev - 5) / 4), 8));
2018 case 10: /* Cloud kill */
2019 project(0, plev / 10 + 2, py, px,
2020 (30 + plev) * 2, GF_POIS, PROJECT_KILL | PROJECT_ITEM, -1);
2022 case 11: /* Genocide One */
2023 if (!get_aim_dir(&dir)) return FALSE;
2025 fire_ball_hide(GF_GENOCIDE, dir, plev + 50, 0);
2027 case 12: /* Poison Branding */
2030 case 13: /* Vampiric Drain */
2031 if (!get_aim_dir(&dir)) return FALSE;
2033 dummy = plev * 2 + randint(plev * 2); /* Dmg */
2034 if (drain_life(dir, dummy))
2036 chg_virtue(V_SACRIFICE, -1);
2037 chg_virtue(V_VITALITY, -1);
2039 (void)hp_player(dummy);
2040 /* Gain nutritional sustenance: 150/hp drained */
2041 /* A Food ration gives 5000 food points (by contrast) */
2042 /* Don't ever get more than "Full" this way */
2043 /* But if we ARE Gorged, it won't cure us */
2044 dummy = p_ptr->food + MIN(5000, 100 * dummy);
2045 if (p_ptr->food < PY_FOOD_MAX) /* Not gorged already */
2046 (void)set_food(dummy >= PY_FOOD_MAX ? PY_FOOD_MAX - 1 : dummy);
2049 case 14: /* Animate Dead */
2050 animate_dead(0, py, px);
2052 case 15: /* Genocide */
2053 (void)symbol_genocide(plev+50, TRUE);
2055 case 16: /* Berserk */
2056 (void)set_shero(randint(25) + 25, FALSE);
2057 (void)hp_player(30);
2058 (void)set_afraid(0);
2060 case 17: /* Invoke Spirits */
2062 int die = randint(100) + plev / 5;
2063 int vir = virtue_number(V_CHANCE);
2066 if (p_ptr->virtues[vir - 1] > 0)
2068 while (randint(400) < p_ptr->virtues[vir - 1]) die++;
2072 while (randint(400) < (0-p_ptr->virtues[vir - 1])) die--;
2076 if (!get_aim_dir(&dir)) return FALSE;
2079 msg_print("¤¢¤Ê¤¿¤Ï»à¼Ô¤¿¤Á¤ÎÎϤò¾·½¸¤·¤¿...");
2081 msg_print("You call on the power of the dead...");
2084 chg_virtue(V_CHANCE, 1);
2088 msg_print("¤¢¤Ê¤¿¤Ï¤ª¤É¤í¤ª¤É¤í¤·¤¤ÎϤΤ¦¤Í¤ê¤ò´¶¤¸¤¿¡ª");
2090 msg_print("You feel a surge of eldritch force!");
2097 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¤¢¤Ê¤¿¤Î¼þ¤ê¤ÎÃÏÌ̤«¤éµà¤Á¤¿¿Í±Æ¤¬Î©¤Á¾å¤¬¤Ã¤Æ¤¤¿¡ª");
2099 msg_print("Oh no! Mouldering forms rise from the earth around you!");
2102 (void)summon_specific(0, py, px, dun_level, SUMMON_UNDEAD, TRUE, FALSE, FALSE, TRUE, TRUE);
2103 chg_virtue(V_UNLIFE, 1);
2108 msg_print("̾¾õ¤·Æñ¤¤¼Ù°¤Ê¸ºß¤¬¤¢¤Ê¤¿¤Î¿´¤òÄ̤ê²á¤®¤Æ¹Ô¤Ã¤¿...");
2110 msg_print("An unnamable evil brushes against your mind...");
2113 set_afraid(p_ptr->afraid + randint(4) + 4);
2118 msg_print("¤¢¤Ê¤¿¤ÎƬ¤ËÂçÎ̤ÎÍ©Î¤Á¤ÎÁû¡¹¤·¤¤À¼¤¬²¡¤·´ó¤»¤Æ¤¤¿...");
2120 msg_print("Your head is invaded by a horde of gibbering spectral voices...");
2123 set_confused(p_ptr->confused + randint(4) + 4);
2131 fire_bolt_or_beam(beam - 10, GF_MISSILE, dir,
2132 damroll(3 + ((plev - 1) / 5), 4));
2136 confuse_monster (dir, plev);
2140 fire_ball(GF_POIS, dir, 20 + (plev / 2), 3);
2144 (void)lite_line(dir);
2148 fire_bolt_or_beam(beam - 10, GF_ELEC, dir,
2149 damroll(3+((plev-5)/4),8));
2153 fire_bolt_or_beam(beam - 10, GF_COLD, dir,
2154 damroll(5+((plev-5)/4),8));
2158 fire_bolt_or_beam(beam, GF_ACID, dir,
2159 damroll(6+((plev-5)/4),8));
2163 fire_bolt_or_beam(beam, GF_FIRE, dir,
2164 damroll(8+((plev-5)/4),8));
2168 drain_life(dir, 75);
2172 fire_ball(GF_ELEC, dir, 30 + plev / 2, 2);
2176 fire_ball(GF_ACID, dir, 40 + plev, 2);
2180 fire_ball(GF_ICE, dir, 70 + plev, 3);
2184 fire_ball(GF_FIRE, dir, 80 + plev, 3);
2188 drain_life(dir, 100 + plev);
2192 earthquake(py, px, 12);
2196 destroy_area(py, px, 13+rand_int(5), TRUE);
2200 symbol_genocide(plev+50, TRUE);
2204 dispel_monsters(120);
2208 dispel_monsters(150);
2216 msg_print("±¢±µ¤ÊÀ¼¤¬¥¯¥¹¥¯¥¹¾Ð¤¦¡£¡Ö¤â¤¦¤¹¤°¤ª¤Þ¤¨¤Ï²æ¡¹¤ÎÃç´Ö¤Ë¤Ê¤ë¤À¤í¤¦¡£¼å¤¼Ô¤è¡£¡×");
2218 msg_print("Sepulchral voices chuckle. 'Soon you will join us, mortal.'");
2223 case 18: /* Dark Bolt */
2224 if (!get_aim_dir(&dir)) return FALSE;
2226 fire_bolt_or_beam(beam, GF_DARK, dir,
2227 damroll(4 + ((plev - 5) / 4), 8));
2229 case 19: /* Battle Frenzy */
2230 (void)set_shero(randint(25) + 25, FALSE);
2231 (void)hp_player(30);
2232 (void)set_afraid(0);
2233 (void)set_fast(randint(20 + (plev / 2)) + (plev / 2), FALSE);
2235 case 20: /* Vampiric Branding */
2238 case 21: /* Vampirism True */
2239 if (!get_aim_dir(&dir)) return FALSE;
2241 chg_virtue(V_SACRIFICE, -1);
2242 chg_virtue(V_VITALITY, -1);
2244 for (dummy = 0; dummy < 3; dummy++)
2246 if (drain_life(dir, 100))
2250 case 22: /* Word of Death */
2251 (void)dispel_living(randint(plev * 3));
2253 case 23: /* Darkness Storm */
2254 if (!get_aim_dir(&dir)) return FALSE;
2256 fire_ball(GF_DARK, dir, 100+plev*2, 4);
2258 case 24: /* Death Ray */
2259 if (!get_aim_dir(&dir)) return FALSE;
2261 (void)death_ray(dir, plev);
2263 case 25: /* Raise the Dead */
2265 bool pet = (randint(3) == 1);
2269 type = (plev > 47 ? SUMMON_HI_UNDEAD : SUMMON_UNDEAD);
2272 group = (((plev > 24) && (randint(3) == 1)) ? TRUE : FALSE);
2279 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, type, group, FALSE, pet, (bool)(!pet), (bool)(!pet)))
2282 msg_print("Î䤿¤¤É÷¤¬¤¢¤Ê¤¿¤Î¼þ¤ê¤Ë¿á¤»Ï¤á¤¿¡£¤½¤ì¤ÏÉåÇÔ½¤ò±¿¤ó¤Ç¤¤¤ë...");
2284 msg_print("Cold winds begin to blow around you, carrying with them the stench of decay...");
2290 msg_print("¸Å¤¨¤Î»à¤»¤ë¼Ô¶¦¤¬¤¢¤Ê¤¿¤Ë»Å¤¨¤ë¤¿¤áÅÚ¤«¤éᴤä¿¡ª");
2292 msg_print("Ancient, long-dead forms arise from the ground to serve you!");
2297 msg_print("»à¼Ô¤¬á´¤Ã¤¿¡£Ì²¤ê¤ò˸¤²¤ë¤¢¤Ê¤¿¤òȳ¤¹¤ë¤¿¤á¤Ë¡ª");
2299 msg_print("'The dead arise... to punish you for disturbing them!'");
2302 chg_virtue(V_UNLIFE, 1);
2307 case 26: /* Esoteria */
2308 if (randint(50) > plev)
2309 return ident_spell(FALSE);
2311 return identify_fully(FALSE);
2313 case 27: /* Mimic vampire */
2314 (void)set_mimic(10+plev/2 + randint(10+plev/2), MIMIC_VAMPIRE, FALSE);
2316 case 28: /* Restore Life */
2317 (void)restore_level();
2319 case 29: /* Mass Genocide */
2320 (void)mass_genocide(plev+50, TRUE);
2322 case 30: /* Hellfire */
2323 if (!get_aim_dir(&dir)) return FALSE;
2325 fire_ball(GF_HELL_FIRE, dir, 666, 3);
2327 take_hit(DAMAGE_USELIFE, 20 + randint(30), "ÃϹö¤Î¹å²Ð¤Î¼öʸ¤ò¾§¤¨¤¿ÈèÏ«", -1);
2329 take_hit(DAMAGE_USELIFE, 20 + randint(30), "the strain of casting Hellfire", -1);
2333 case 31: /* Wraithform */
2334 set_wraith_form(randint(plev / 2) + (plev / 2), FALSE);
2337 msg_format("You cast an unknown Death spell: %d.", spell);
2345 static bool cast_trump_spell(int spell, bool success)
2349 int plev = p_ptr->lev;
2350 int summon_lev = plev * 2 / 3 + randint(plev/2);
2352 bool no_trump = FALSE;
2353 bool unique_okay = FALSE;
2356 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
2357 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
2358 else beam = plev / 2;
2360 if (summon_lev < 1) summon_lev = 1;
2361 if (!success || (randint(50+plev) < plev/10)) unique_okay = TRUE;
2364 case 0: /* Phase Door */
2367 teleport_player(10);
2370 case 1: /* Trump Spiders */
2372 bool pet = success; /* (randint(5) > 2) */
2375 msg_print("¤¢¤Ê¤¿¤ÏÃØéá¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2377 msg_print("You concentrate on the trump of an spider...");
2381 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_SPIDER, TRUE, FALSE, pet, FALSE, (bool)(!pet)))
2385 msg_print("¾¤´Ô¤µ¤ì¤¿ÃØéá¤ÏÅܤäƤ¤¤ë¡ª");
2387 msg_print("The summoned spiders get angry!");
2398 case 2: /* Shuffle */
2401 /* A limited power 'wonder' spell */
2402 int die = randint(120);
2403 int vir = virtue_number(V_CHANCE);
2405 if ((p_ptr->pclass == CLASS_ROGUE) ||
2406 (p_ptr->pclass == CLASS_HIGH_MAGE) ||
2407 (p_ptr->pclass == CLASS_SORCERER))
2408 die = (randint(110)) + plev / 5;
2409 /* Card sharks and high mages get a level bonus */
2413 if (p_ptr->virtues[vir - 1] > 0)
2415 while (randint(400) < p_ptr->virtues[vir - 1]) die++;
2419 while (randint(400) < (0-p_ptr->virtues[vir - 1])) die--;
2424 msg_print("¤¢¤Ê¤¿¤Ï¥«¡¼¥É¤òÀڤäưìËç°ú¤¤¤¿...");
2426 msg_print("You shuffle the deck and draw a card...");
2430 chg_virtue(V_CHANCE, 1);
2435 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡Ô»à¡Õ¤À¡ª");
2437 msg_print("Oh no! It's Death!");
2440 for (dummy = 0; dummy < randint(3); dummy++)
2441 (void)activate_hi_summon(py, px, FALSE);
2446 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡Ô°Ëâ¡Õ¤À¡ª");
2448 msg_print("Oh no! It's the Devil!");
2451 (void)summon_specific(0, py, px, dun_level, SUMMON_DEMON, TRUE, FALSE, FALSE, TRUE, TRUE);
2457 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡ÔÄߤé¤ì¤¿ÃË¡Õ¤À¡ª");
2459 msg_print("Oh no! It's the Hanged Man.");
2462 (void)activate_ty_curse(FALSE, &count);
2467 msg_print("¡ÔÉÔĴϤηõ¡Õ¤À¡£");
2469 msg_print("It's the swords of discord.");
2472 aggravate_monsters(0);
2477 msg_print("¡Ô¶ò¼Ô¡Õ¤À¡£");
2479 msg_print("It's the Fool.");
2482 (void)do_dec_stat(A_INT);
2483 (void)do_dec_stat(A_WIS);
2488 msg_print("´ñ̯¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
2490 msg_print("It's the picture of a strange monster.");
2493 if (!(summon_specific(0, py, px, (dun_level * 3) / 2, 32 + randint(6), TRUE, FALSE, FALSE, TRUE, TRUE)))
2499 msg_print("¡Ô·î¡Õ¤À¡£");
2501 msg_print("It's the Moon.");
2509 msg_print("¡Ô±¿Ì¿¤ÎÎØ¡Õ¤À¡£");
2511 msg_print("It's the Wheel of Fortune.");
2514 wild_magic(rand_int(32));
2519 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
2521 msg_print("It's a teleport trump card.");
2524 teleport_player(10);
2529 msg_print("¡ÔÀµµÁ¡Õ¤À¡£");
2531 msg_print("It's Justice.");
2534 set_blessed(p_ptr->lev, FALSE);
2539 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
2541 msg_print("It's a teleport trump card.");
2544 teleport_player(100);
2549 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
2551 msg_print("It's a teleport trump card.");
2554 teleport_player(200);
2559 msg_print("¡ÔÅã¡Õ¤À¡£");
2561 msg_print("It's the Tower.");
2569 msg_print("¡ÔÀáÀ©¡Õ¤À¡£");
2571 msg_print("It's Temperance.");
2574 sleep_monsters_touch();
2579 msg_print("¡ÔÅã¡Õ¤À¡£");
2581 msg_print("It's the Tower.");
2584 earthquake(py, px, 5);
2589 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
2591 msg_print("It's the picture of a friendly monster.");
2594 if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE1, FALSE, TRUE, TRUE, FALSE, FALSE)))
2600 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
2602 msg_print("It's the picture of a friendly monster.");
2605 if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE2, FALSE, TRUE, TRUE, FALSE, FALSE)))
2611 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
2613 msg_print("It's the picture of a friendly monster.");
2616 if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE4, FALSE, TRUE, TRUE, FALSE, FALSE)))
2622 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
2624 msg_print("It's the picture of a friendly monster.");
2627 if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE5, FALSE, TRUE, TRUE, FALSE, FALSE)))
2633 msg_print("¡ÔÎø¿Í¡Õ¤À¡£");
2635 msg_print("It's the Lovers.");
2638 if (get_aim_dir(&dir))
2639 (void)charm_monster(dir, MIN(p_ptr->lev, 20));
2644 msg_print("¡Ô±£¼Ô¡Õ¤À¡£");
2646 msg_print("It's the Hermit.");
2654 msg_print("¡Ô¿³È½¡Õ¤À¡£");
2656 msg_print("It's the Judgement.");
2659 do_cmd_rerate(FALSE);
2660 if (p_ptr->muta1 || p_ptr->muta2 || p_ptr->muta3)
2663 msg_print("Á´¤Æ¤ÎÆÍÁ³ÊÑ°Û¤¬¼£¤Ã¤¿¡£");
2665 msg_print("You are cured of all mutations.");
2668 p_ptr->muta1 = p_ptr->muta2 = p_ptr->muta3 = 0;
2669 p_ptr->update |= PU_BONUS;
2676 msg_print("¡ÔÂÀÍÛ¡Õ¤À¡£");
2678 msg_print("It's the Sun.");
2681 chg_virtue(V_KNOWLEDGE, 1);
2682 chg_virtue(V_ENLIGHTEN, 1);
2683 wiz_lite(FALSE, FALSE);
2688 msg_print("¡ÔÀ¤³¦¡Õ¤À¡£");
2690 msg_print("It's the World.");
2693 if (p_ptr->exp < PY_MAX_EXP)
2695 s32b ee = (p_ptr->exp / 25) + 1;
2696 if (ee > 5000) ee = 5000;
2698 msg_print("¹¹¤Ë·Ð¸³¤òÀѤó¤À¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
2700 msg_print("You feel more experienced.");
2708 case 3: /* Reset Recall */
2711 if (!reset_recall()) return FALSE;
2714 case 4: /* Teleport Self */
2717 teleport_player(plev * 4);
2720 case 5: /* Trump Spying */
2723 (void)set_tim_esp(randint(30) + 25, FALSE);
2726 case 6: /* Teleport Away */
2729 if (!get_aim_dir(&dir)) return FALSE;
2730 (void)fire_beam(GF_AWAY_ALL, dir, plev);
2733 case 7: /* Trump Animals */
2735 bool pet = success; /* was (randint(5) > 2) */
2736 int type = (pet ? SUMMON_ANIMAL_RANGER : SUMMON_ANIMAL);
2737 bool group = (pet ? FALSE : TRUE);
2740 msg_print("¤¢¤Ê¤¿¤Ïưʪ¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2742 msg_print("You concentrate on the trump of an animal...");
2746 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, type, group, FALSE, pet, FALSE, (bool)(!pet)))
2750 msg_print("¾¤´¤µ¤ì¤¿Æ°Êª¤ÏÅܤäƤ¤¤ë¡ª");
2752 msg_print("The summoned animal gets angry!");
2763 case 8: /* Trump Reach */
2766 if (!get_aim_dir(&dir)) return FALSE;
2767 fetch(dir, plev * 15, TRUE);
2770 case 9: /* Trump Kamikaze */
2775 if (!target_set(TARGET_KILL)) return FALSE;
2782 msg_print("¤¢¤Ê¤¿¤Ï¥«¥ß¥«¥¼¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2784 msg_print("You concentrate on several trumps at once...");
2788 for (dummy = 2 + rand_int(plev / 7); dummy > 0; dummy--)
2790 bool pet = success; /* was (randint(10) > 3) */
2791 bool group = (pet ? FALSE : TRUE);
2794 if (p_ptr->pclass == CLASS_BEASTMASTER)
2796 type = SUMMON_KAMIKAZE_LIVING;
2800 type = SUMMON_KAMIKAZE;
2803 if (summon_specific((pet ? -1 : 0), y, x, summon_lev, type, group, FALSE, pet, FALSE, (bool)(!pet)))
2807 msg_print("¾¤´Ô¤µ¤ì¤¿¥â¥ó¥¹¥¿¡¼¤ÏÅܤäƤ¤¤ë¡ª");
2809 msg_print("The summoned creatures get angry!");
2817 case 10: /* Phantasmal Servant */
2820 if (summon_specific(-1, py, px, (summon_lev * 3) / 2, SUMMON_PHANTOM, FALSE, TRUE, TRUE, FALSE, FALSE))
2823 msg_print("¸æÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¸æ¼ç¿ÍÍÍ¡©");
2825 msg_print("'Your wish, master?'");
2835 case 11: /* Speed Monster */
2838 bool old_target_pet = target_pet;
2840 if (!get_aim_dir(&dir))
2842 target_pet = old_target_pet;
2845 target_pet = old_target_pet;
2846 (void)speed_monster(dir);
2849 case 12: /* Teleport Level */
2853 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return FALSE;
2855 if (!get_check("Are you sure? (Teleport Level)")) return FALSE;
2857 (void)teleport_player_level();
2860 case 13: /* Dimension Door */
2864 msg_print("¼¡¸µ¤ÎÈ⤬³«¤¤¤¿¡£ÌÜŪÃϤòÁª¤ó¤Ç²¼¤µ¤¤¡£");
2866 msg_print("You open a dimensional gate. Choose a destination.");
2869 return dimension_door();
2872 case 14: /* Word of Recall */
2875 if (!word_of_recall()) return FALSE;
2878 case 15: /* Banish */
2881 banish_monsters(plev * 4);
2884 case 16: /* Swap Position */
2888 project_length = -1;
2889 if (!get_aim_dir(&dir))
2896 (void)teleport_swap(dir);
2900 case 17: /* Trump Undead */
2902 bool pet = success; /* (randint(10) > 3) */
2903 bool group = (pet ? FALSE : TRUE);
2906 msg_print("¤¢¤Ê¤¿¤Ï¥¢¥ó¥Ç¥Ã¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2908 msg_print("You concentrate on the trump of an undead creature...");
2912 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_UNDEAD, group, FALSE, pet, FALSE, (bool)(!pet)))
2916 msg_print("¾¤´Ô¤µ¤ì¤¿¥¢¥ó¥Ç¥Ã¥É¤ÏÅܤäƤ¤¤ë¡ª");
2918 msg_print("The summoned undead creature gets angry!");
2929 case 18: /* Trump Reptiles */
2931 bool pet = success; /* was (randint(5) > 2) */
2935 msg_print("¤¢¤Ê¤¿¤Ïà¨ÃîÎà¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2937 msg_print("You concentrate on the trump of a reptile...");
2941 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HYDRA, group, FALSE, pet, FALSE, (bool)(!pet)))
2945 msg_print("¾¤´Ô¤µ¤ì¤¿à¨ÃîÎà¤ÏÅܤäƤ¤¤ë¡ª");
2947 msg_print("The summoned reptile gets angry!");
2958 case 19: /* Trump Monsters */
2963 msg_print("¤¢¤Ê¤¿¤Ï¥â¥ó¥¹¥¿¡¼¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2965 msg_print("You concentrate on several trumps at once...");
2969 for (dummy = 0; dummy < 1 + ((plev - 15)/ 10); dummy++)
2971 bool pet = success; /* was (randint(10) > 3) */
2972 bool group = (pet ? FALSE : TRUE);
2975 if (p_ptr->pclass == CLASS_BEASTMASTER)
2977 type = SUMMON_LIVING;
2984 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, type, group, FALSE, pet, unique_okay, (bool)(!pet)))
2988 msg_print("¾¤´Ô¤µ¤ì¤¿¥â¥ó¥¹¥¿¡¼¤ÏÅܤäƤ¤¤ë¡ª");
2990 msg_print("The summoned creatures get angry!");
2998 case 20: /* Trump Hounds */
3000 bool pet = success; /* was (randint(5) > 2) */
3003 msg_print("¤¢¤Ê¤¿¤Ï¥Ï¥¦¥ó¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3005 msg_print("You concentrate on the trump of a hound...");
3009 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HOUND, TRUE, FALSE, pet, FALSE, (bool)(!pet)))
3013 msg_print("¾¤´Ô¤µ¤ì¤¿¥Ï¥¦¥ó¥É¤ÏÅܤäƤ¤¤ë¡ª");
3015 msg_print("The summoned hounds get angry!");
3026 case 21: /* Trump Branding */
3032 case 22: /* Living Trump */
3035 if (randint(7) == 1)
3036 /* Teleport control */
3039 /* Random teleportation (uncontrolled) */
3041 /* Gain the mutation */
3042 if (gain_random_mutation(dummy))
3044 msg_print("¤¢¤Ê¤¿¤ÏÀ¸¤¤Æ¤¤¤ë¥«¡¼¥É¤ËÊѤï¤Ã¤¿¡£");
3046 msg_print("You have turned into a Living Trump.");
3051 case 23: /* Trump Cyberdemon */
3053 bool pet = success; /* was (randint(10) > 3) */
3056 msg_print("¤¢¤Ê¤¿¤Ï¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3058 msg_print("You concentrate on the trump of a Cyberdemon...");
3062 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_CYBER, FALSE, FALSE, pet, FALSE, (bool)(!pet)))
3066 msg_print("¾¤´Ô¤µ¤ì¤¿¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤ÏÅܤäƤ¤¤ë¡ª");
3068 msg_print("The summoned Cyberdemon gets angry!");
3079 case 24: /* Trump Divination */
3082 (void)detect_all(DETECT_RAD_DEFAULT);
3085 case 25: /* Trump Lore */
3088 return identify_fully(FALSE);
3091 case 26: /* Heal Monster */
3094 bool old_target_pet = target_pet;
3096 if (!get_aim_dir(&dir))
3098 target_pet = old_target_pet;
3101 target_pet = old_target_pet;
3103 (void)heal_monster(dir, p_ptr->lev * 10 + 200);
3106 case 27: /* Trump Dragon */
3108 bool pet = success; /* was (randint(10) > 3) */
3109 bool group = (pet ? FALSE : TRUE);
3112 msg_print("¤¢¤Ê¤¿¤Ï¥É¥é¥´¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3114 msg_print("You concentrate on the trump of a dragon...");
3118 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_DRAGON, group, FALSE, pet, FALSE, (bool)(!pet)))
3122 msg_print("¾¤´Ô¤µ¤ì¤¿¥É¥é¥´¥ó¤ÏÅܤäƤ¤¤ë¡ª");
3124 msg_print("The summoned dragon gets angry!");
3135 case 28: /* Trump Meteor */
3138 int x, y, dx, dy, i;
3139 int b = 10 + randint(10);
3140 for (i = 0; i < b; i++)
3142 int count = 0, d = 0;
3147 if (count > 20) break;
3148 x = px - 8 + rand_int(17);
3149 y = py - 8 + rand_int(17);
3151 if (!in_bounds(y,x) || (!cave_floor_bold(y,x) && (cave[y][x].feat != FEAT_TREES)) || !player_has_los_bold(y, x)) continue;
3153 dx = (px > x) ? (px - x) : (x - px);
3154 dy = (py > y) ? (py - y) : (y - py);
3156 /* Approximate distance */
3157 d = (dy > dx) ? (dy + (dx >> 1)) : (dx + (dy >> 1));
3161 if (count > 20) continue;
3163 project(0, 2, y, x, plev * 2, GF_METEOR, PROJECT_KILL | PROJECT_JUMP | PROJECT_ITEM, -1);
3167 case 29: /* Trump Demon */
3169 bool pet = success; /* was (randint(10) > 3) */
3170 bool group = (pet ? FALSE : TRUE);
3173 msg_print("¤¢¤Ê¤¿¤Ï¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3175 msg_print("You concentrate on the trump of a demon...");
3179 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_DEMON, group, FALSE, pet, FALSE, (bool)(!pet)))
3183 msg_print("¾¤´Ô¤µ¤ì¤¿¥Ç¡¼¥â¥ó¤ÏÅܤäƤ¤¤ë¡ª");
3185 msg_print("The summoned demon gets angry!");
3196 case 30: /* Trump Greater Undead */
3198 bool pet = success; /* was (randint(10) > 3) */
3199 bool group = (pet ? FALSE : TRUE);
3202 msg_print("¤¢¤Ê¤¿¤Ï¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3204 msg_print("You concentrate on the trump of a greater undead being...");
3208 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HI_UNDEAD, group, FALSE, pet, unique_okay, (bool)(!pet)))
3212 msg_print("¾¤´Ô¤µ¤ì¤¿¾åµé¥¢¥ó¥Ç¥Ã¥É¤ÏÅܤäƤ¤¤ë¡ª");
3214 msg_print("The summoned greater undead creature gets angry!");
3225 case 31: /* Trump Ancient Dragon */
3227 bool pet = success; /* was (randint(10) > 3) */
3228 bool group = (pet ? FALSE : TRUE);
3230 if (p_ptr->pclass == CLASS_BEASTMASTER)
3232 type = SUMMON_HI_DRAGON_LIVING;
3236 type = SUMMON_HI_DRAGON;
3240 msg_print("¤¢¤Ê¤¿¤Ï¸ÅÂå¥É¥é¥´¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3242 msg_print("You concentrate on the trump of an ancient dragon...");
3246 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, type, group, FALSE, pet, unique_okay, (bool)(!pet)))
3250 msg_print("¾¤´Ô¤µ¤ì¤¿¸ÅÂå¥É¥é¥´¥ó¤ÏÅܤäƤ¤¤ë¡ª");
3252 msg_print("The summoned ancient dragon gets angry!");
3265 msg_format("̤ÃΤΥ«¡¼¥É¤Î¼öʸ¤Ç¤¹: %d", spell);
3267 msg_format("You cast an unknown Trump spell: %d.", spell);
3276 msg_print("ï¤â¤¢¤Ê¤¿¤Î¥«¡¼¥É¤Î¸Æ¤ÓÀ¼¤ËÅú¤¨¤Ê¤¤¡£");
3278 msg_print("Nobody answers to your Trump call.");
3287 static bool cast_arcane_spell(int spell)
3291 int plev = p_ptr->lev;
3293 bool no_trump = FALSE;
3295 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
3296 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
3297 else beam = plev / 2;
3302 if (!get_aim_dir(&dir)) return FALSE;
3304 fire_bolt_or_beam(beam - 10, GF_ELEC, dir,
3305 damroll(3 + ((plev - 1) / 5), 3));
3307 case 1: /* Wizard Lock */
3308 if (!get_aim_dir(&dir)) return FALSE;
3310 (void)wizard_lock(dir);
3312 case 2: /* Detect Invisibility */
3313 (void)detect_monsters_invis(DETECT_RAD_DEFAULT);
3315 case 3: /* Detect Monsters */
3316 (void)detect_monsters_normal(DETECT_RAD_DEFAULT);
3319 teleport_player(10);
3321 case 5: /* Light Area */
3322 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
3324 case 6: /* Trap & Door Destruction */
3325 if (!get_aim_dir(&dir)) return FALSE;
3327 (void)destroy_door(dir);
3329 case 7: /* Cure Light Wounds */
3330 (void)hp_player(damroll(2, 8));
3331 (void)set_cut(p_ptr->cut - 10);
3333 case 8: /* Detect Doors & Traps */
3334 (void)detect_traps(DETECT_RAD_DEFAULT);
3335 (void)detect_doors(DETECT_RAD_DEFAULT);
3336 (void)detect_stairs(DETECT_RAD_DEFAULT);
3338 case 9: /* Phlogiston */
3341 case 10: /* Detect Treasure */
3342 (void)detect_treasure(DETECT_RAD_DEFAULT);
3343 (void)detect_objects_gold(DETECT_RAD_DEFAULT);
3345 case 11: /* Detect Enchantment */
3346 (void)detect_objects_magic(DETECT_RAD_DEFAULT);
3348 case 12: /* Detect Objects */
3349 (void)detect_objects_normal(DETECT_RAD_DEFAULT);
3351 case 13: /* Cure Poison */
3352 (void)set_poisoned(0);
3354 case 14: /* Resist Cold */
3355 (void)set_oppose_cold(randint(20) + 20, FALSE);
3357 case 15: /* Resist Fire */
3358 (void)set_oppose_fire(randint(20) + 20, FALSE);
3360 case 16: /* Resist Lightning */
3361 (void)set_oppose_elec(randint(20) + 20, FALSE);
3363 case 17: /* Resist Acid */
3364 (void)set_oppose_acid(randint(20) + 20, FALSE);
3366 case 18: /* Cure Medium Wounds */
3367 (void)hp_player(damroll(4, 8));
3368 (void)set_cut((p_ptr->cut / 2) - 50);
3370 case 19: /* Teleport */
3371 teleport_player(plev * 5);
3373 case 20: /* Identify */
3374 return ident_spell(FALSE);
3375 case 21: /* Stone to Mud */
3376 if (!get_aim_dir(&dir)) return FALSE;
3378 (void)wall_to_mud(dir);
3380 case 22: /* Ray of Light */
3381 if (!get_aim_dir(&dir)) return FALSE;
3384 msg_print("¸÷Àþ¤¬Êü¤¿¤ì¤¿¡£");
3386 msg_print("A line of light appears.");
3389 (void)lite_line(dir);
3391 case 23: /* Satisfy Hunger */
3392 (void)set_food(PY_FOOD_MAX - 1);
3394 case 24: /* See Invisible */
3395 (void)set_tim_invis(randint(24) + 24, FALSE);
3397 case 25: /* Conjure Elemental */
3398 if (!summon_specific(-1, py, px, plev, SUMMON_ELEMENTAL, TRUE, TRUE, TRUE, FALSE, FALSE))
3401 case 26: /* Teleport Level */
3403 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return FALSE;
3405 if (!get_check("Are you sure? (Teleport Level)")) return FALSE;
3407 (void)teleport_player_level();
3409 case 27: /* Teleport Away */
3410 if (!get_aim_dir(&dir)) return FALSE;
3412 (void)fire_beam(GF_AWAY_ALL, dir, plev);
3414 case 28: /* Elemental Ball */
3415 if (!get_aim_dir(&dir)) return FALSE;
3419 case 1: dummy = GF_FIRE;break;
3420 case 2: dummy = GF_ELEC;break;
3421 case 3: dummy = GF_COLD;break;
3422 default: dummy = GF_ACID;break;
3424 fire_ball(dummy, dir, 75 + (plev), 2);
3426 case 29: /* Detection */
3427 (void)detect_all(DETECT_RAD_DEFAULT);
3429 case 30: /* Word of Recall */
3430 if (!word_of_recall()) return FALSE;
3432 case 31: /* Clairvoyance */
3433 chg_virtue(V_KNOWLEDGE, 1);
3434 chg_virtue(V_ENLIGHTEN, 1);
3435 wiz_lite(FALSE, FALSE);
3436 if (!p_ptr->telepathy)
3438 (void)set_tim_esp(randint(30) + 25, FALSE);
3442 msg_format("You cast an unknown Arcane spell: %d.", spell);
3448 msg_print("¥¨¥ì¥á¥ó¥¿¥ë¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3450 msg_print("No Elementals arrive.");
3457 static bool cast_enchant_spell(int spell)
3459 int plev = p_ptr->lev;
3461 bool no_trump = FALSE;
3465 case 0: /* Infravision */
3466 set_tim_infra(100 + randint(100), FALSE);
3468 case 1: /* Regeneration */
3469 set_tim_regen(80 + randint(80), FALSE);
3471 case 2: /* Satisfy Hunger */
3472 (void)set_food(PY_FOOD_MAX - 1);
3474 case 3: /* Resist Cold */
3475 (void)set_oppose_cold(randint(20) + 20, FALSE);
3477 case 4: /* Resist Fire */
3478 (void)set_oppose_fire(randint(20) + 20, FALSE);
3480 case 5: /* Heroism */
3481 (void)set_hero(randint(25) + 25, FALSE);
3482 (void)hp_player(10);
3483 (void)set_afraid(0);
3485 case 6: /* Resist Lightning */
3486 (void)set_oppose_elec(randint(20) + 20, FALSE);
3488 case 7: /* Resist Acid */
3489 (void)set_oppose_acid(randint(20) + 20, FALSE);
3491 case 8: /* See Invisibility */
3492 (void)set_tim_invis(randint(24) + 24, FALSE);
3494 case 9: /* Remove Curse */
3498 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
3500 msg_print("You feel as if someone is watching over you.");
3504 case 10: /* Resist Poison */
3505 (void)set_oppose_pois(randint(20) + 20, FALSE);
3507 case 11: /* Berserk */
3508 (void)set_shero(randint(25) + 25, FALSE);
3509 (void)hp_player(30);
3510 (void)set_afraid(0);
3512 case 12: /* Self Knowledge */
3513 (void)self_knowledge();
3515 case 13: /* Protection from Evil */
3516 (void)set_protevil(randint(25) + 3 * p_ptr->lev, FALSE);
3518 case 14: /* Healing */
3524 case 15: /* Mana Branding */
3525 return choose_ele_attack();
3527 case 16: /* Telepathy */
3528 (void)set_tim_esp(randint(30) + 25, FALSE);
3530 case 17: /* Stone Skin */
3531 (void)set_shield(randint(20) + 30, FALSE);
3533 case 18: /* Resistance */
3534 (void)set_oppose_acid(randint(20) + 20, FALSE);
3535 (void)set_oppose_elec(randint(20) + 20, FALSE);
3536 (void)set_oppose_fire(randint(20) + 20, FALSE);
3537 (void)set_oppose_cold(randint(20) + 20, FALSE);
3538 (void)set_oppose_pois(randint(20) + 20, FALSE);
3540 case 19: /* Haste */
3541 (void)set_fast(randint(20 + plev) + plev, FALSE);
3543 case 20: /* Walk through Wall */
3544 (void)set_kabenuke(randint(plev/2) + plev/2, FALSE);
3546 case 21: /* Pulish Shield */
3547 (void)pulish_shield();
3549 case 22: /* Create Golem */
3550 if (summon_specific(-1, py, px, plev, SUMMON_GOLEM, FALSE, TRUE, TRUE, FALSE, FALSE))
3553 msg_print("¥´¡¼¥ì¥à¤òºî¤Ã¤¿¡£");
3555 msg_print("You make a golem.");
3563 case 23: /* Magic armor */
3564 (void)set_magicdef(randint(20) + 20, FALSE);
3566 case 24: /* Remove Enchantment */
3567 if (!mundane_spell(TRUE)) return FALSE;
3569 case 25: /* Remove All Curse */
3570 if (remove_all_curse())
3573 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
3575 msg_print("You feel as if someone is watching over you.");
3579 case 26: /* Total Knowledge */
3580 return identify_fully(FALSE);
3582 case 27: /* Enchant Weapon */
3583 return enchant_spell(rand_int(4) + 1, rand_int(4) + 1, 0);
3585 case 28: /* Enchant Armor */
3586 return enchant_spell(0, 0, rand_int(3) + 2);
3588 case 29: /* Brand Weapon */
3589 brand_weapon(rand_int(17));
3591 case 30: /* Living Trump */
3592 if (randint(7) == 1)
3593 /* Teleport control */
3596 /* Random teleportation (uncontrolled) */
3598 /* Gain the mutation */
3599 if (gain_random_mutation(dummy))
3601 msg_print("¤¢¤Ê¤¿¤ÏÀ¸¤¤Æ¤¤¤ë¥«¡¼¥É¤ËÊѤï¤Ã¤¿¡£");
3603 msg_print("You have turned into a Living Trump.");
3606 case 31: /* Immune */
3607 return (choose_ele_immune(13 + randint(13)));
3610 msg_format("You cast an unknown Craft spell: %d.", spell);
3616 msg_print("¤¦¤Þ¤¯¥´¡¼¥ì¥à¤òºî¤ì¤Ê¤«¤Ã¤¿¡£");
3618 msg_print("No Golems arrive.");
3626 * An "item_tester_hook" for offer
3628 static bool item_tester_offer(object_type *o_ptr)
3630 /* Flasks of oil are okay */
3631 if (o_ptr->tval != TV_CORPSE) return (FALSE);
3633 if (o_ptr->sval != SV_CORPSE) return (FALSE);
3635 if (strchr("pht", r_info[o_ptr->pval].d_char)) return (TRUE);
3637 /* Assume not okay */
3642 static bool cast_daemon_spell(int spell)
3645 int plev = p_ptr->lev;
3647 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
3648 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
3649 else beam = plev / 2;
3653 case 0: /* Magic Missile */
3654 if (!get_aim_dir(&dir)) return FALSE;
3656 fire_bolt_or_beam(beam - 10, GF_MISSILE, dir,
3657 damroll(3 + ((plev - 1) / 5), 4));
3659 case 1: /* Detect Undead & Demons -> Unlife */
3660 (void)detect_monsters_nonliving(DETECT_RAD_DEFAULT);
3663 (void)set_blessed(randint(12) + 12, FALSE);
3665 case 3: /* Resist Fire */
3666 (void)set_oppose_fire(randint(20) + 20, FALSE);
3668 case 4: /* Horrify */
3669 if (!get_aim_dir(&dir)) return FALSE;
3671 (void)fear_monster(dir, plev);
3672 (void)stun_monster(dir, plev);
3674 case 5: /* Nether Bolt */
3675 if (!get_aim_dir(&dir)) return FALSE;
3677 fire_bolt_or_beam(beam, GF_NETHER, dir,
3678 damroll(6 + ((plev - 5) / 4), 8));
3680 case 6: /* Summon monster, demon */
3681 if (!summon_specific(-1, py, px, (plev * 3) / 2, SUMMON_MANES, TRUE, FALSE, TRUE, FALSE, FALSE))
3684 msg_print("¸ÅÂå¤Î»àÎî¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3686 msg_print("No Manes arrive.");
3690 case 7: /* Mini Hellfire */
3691 if (!get_aim_dir(&dir)) return FALSE;
3693 fire_ball(GF_HELL_FIRE, dir,
3694 (damroll(3, 6) + plev +
3695 (plev / (((p_ptr->pclass == CLASS_MAGE) ||
3696 (p_ptr->pclass == CLASS_HIGH_MAGE) ||
3697 (p_ptr->pclass == CLASS_SORCERER)) ? 2 : 4))),
3698 ((plev < 30) ? 2 : 3));
3700 case 8: /* Enslave Demon */
3701 if (!get_aim_dir(&dir)) return FALSE;
3703 (void)control_one_demon(dir, plev);
3705 case 9: /* Vision */
3706 map_area(DETECT_RAD_MAP);
3708 case 10: /* Resist Nether */
3709 (void)set_tim_res_nether(randint(20) + 20, FALSE);
3711 case 11: /* Plasma Bolt */
3712 if (!get_aim_dir(&dir)) return FALSE;
3714 fire_bolt_or_beam(beam, GF_PLASMA, dir,
3715 damroll(11 + ((plev - 5) / 4), 8));
3717 case 12: /* Fire Ball */
3718 if (!get_aim_dir(&dir)) return FALSE;
3720 fire_ball(GF_FIRE, dir, plev + 55, 2);
3722 case 13: /* Fire Branding */
3725 case 14: /* Nether Ball */
3726 if (!get_aim_dir(&dir)) return FALSE;
3728 fire_ball(GF_NETHER, dir, plev*3/2 + 100, plev / 20+2);
3730 case 15: /* Summon monster, demon */
3732 bool pet = (randint(3) != 1);
3733 bool group = !(pet && (plev < 50));
3735 if (summon_specific((pet ? -1 : 0), py, px, plev*2/3+randint(plev/2), SUMMON_DEMON, group, FALSE, pet, FALSE, (bool)(!pet)))
3738 msg_print("ⲫ¤Î°½¤¬½¼Ëþ¤·¤¿¡£");
3740 msg_print("The area fills with a stench of sulphur and brimstone.");
3746 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
3748 msg_print("'What is thy bidding... Master?'");
3753 msg_print("¡ÖÈܤ·¤¼Ô¤è¡¢²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª ¤ªÁ°¤Îº²¤òĺ¤¯¤¾¡ª¡×");
3755 msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'");
3762 msg_print("°Ëâ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3764 msg_print("No Greater Demon arrive.");
3769 case 16: /* Telepathy */
3770 (void)set_tim_esp(randint(30) + 25, FALSE);
3772 case 17: /* Demoncloak */
3774 int dur=randint(20) + 20;
3776 set_oppose_fire(dur, FALSE);
3777 set_oppose_cold(dur, FALSE);
3778 set_tim_sh_fire(dur, FALSE);
3782 case 18: /* Rain of Lava */
3783 fire_ball(GF_FIRE, 0, (55 + plev)*2, 3);
3784 fire_ball_hide(GF_LAVA_FLOW, 0, 2+randint(2), 3);
3786 case 19: /* Plasma ball */
3787 if (!get_aim_dir(&dir)) return FALSE;
3789 fire_ball(GF_PLASMA, dir, plev*3/2 + 80, 2 + plev/40);
3791 case 20: /* Mimic demon */
3792 (void)set_mimic(10+plev/2 + randint(10+plev/2), MIMIC_DEMON, FALSE);
3794 case 21: /* Nether Wave == Dispel Good */
3795 (void)dispel_monsters(randint(plev * 2));
3796 (void)dispel_good(randint(plev * 2));
3799 if (!get_aim_dir(&dir)) return FALSE;
3800 fire_ball(GF_NEXUS, dir, 100 + plev*2, 4);
3802 case 23: /* Hand Doom */
3803 if (!get_aim_dir(&dir)) return FALSE;
3805 else msg_print("<ÇËÌǤμê>¤òÊü¤Ã¤¿¡ª");
3807 else msg_print("You invokes the Hand of Doom!");
3810 fire_ball_hide(GF_HAND_DOOM, dir, plev * 2, 0);
3812 case 24: /* Heroism */
3813 (void)set_hero(randint(25) + 25, FALSE);
3814 (void)hp_player(10);
3815 (void)set_afraid(0);
3817 case 25: /* Tim resist time */
3818 (void)set_tim_res_time(randint(20)+20, FALSE);
3820 case 26: /* Circle of Madness */
3821 fire_ball(GF_CHAOS, 0, 50+plev, 3+plev/20);
3822 fire_ball(GF_CONFUSION, 0, 50+plev, 3+plev/20);
3823 fire_ball(GF_CHARM, 0, 20+plev, 3+plev/20);
3825 case 27: /* True Discharge Minion */
3828 case 28: /* Summon Greater Demon */
3835 item_tester_hook = item_tester_offer;
3837 q = "¤É¤Î»àÂΤòÊû¤²¤Þ¤¹¤«? ";
3838 s = "Êû¤²¤é¤ì¤ë»àÂΤò»ý¤Ã¤Æ¤¤¤Ê¤¤¡£";
3840 q = "Sacrifice which corpse? ";
3841 s = "You have nothing to scrifice.";
3843 if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return FALSE;
3845 /* Get the item (in the pack) */
3848 o_ptr = &inventory[item];
3851 /* Get the item (on the floor) */
3854 o_ptr = &o_list[0 - item];
3857 summon_lev = p_ptr->lev * 2 / 3 + r_info[o_ptr->pval].level;
3858 if (summon_specific(-1, py, px, summon_lev, SUMMON_HI_DEMON, TRUE, FALSE, TRUE, FALSE, FALSE))
3861 msg_print("ⲫ¤Î°½¤¬½¼Ëþ¤·¤¿¡£");
3863 msg_print("The area fills with a stench of sulphur and brimstone.");
3868 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
3870 msg_print("'What is thy bidding... Master?'");
3873 /* Decrease the item (from the pack) */
3876 inven_item_increase(item, -1);
3877 inven_item_describe(item);
3878 inven_item_optimize(item);
3881 /* Decrease the item (from the floor) */
3884 floor_item_increase(0 - item, -1);
3885 floor_item_describe(0 - item);
3886 floor_item_optimize(0 - item);
3892 msg_print("°Ëâ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3894 msg_print("No Greater Demon arrive.");
3899 case 29: /* Nether Storm */
3900 if (!get_aim_dir(&dir)) return FALSE;
3902 fire_ball(GF_NETHER, dir, plev*15, plev / 5);
3904 case 30: /* Blood curse */
3906 if (!get_aim_dir(&dir)) return FALSE;
3908 fire_ball_hide(GF_BLOOD_CURSE, dir, 600, 0);
3910 take_hit(DAMAGE_USELIFE, 20 + randint(30), "·ì¤Î¼ö¤¤", -1);
3912 take_hit(DAMAGE_USELIFE, 20 + randint(30), "Blood curse", -1);
3916 case 31: /* Mimic Demon lord */
3917 (void)set_mimic(15 + randint(15), MIMIC_DEMON_LORD, FALSE);
3920 msg_format("You cast an unknown Daemon spell: %d.", spell);
3928 void stop_singing(void)
3930 if (p_ptr->pclass != CLASS_BARD) return;
3932 if (p_ptr->magic_num1[1])
3934 p_ptr->magic_num1[1] = 0;
3937 if (!p_ptr->magic_num1[0]) return;
3939 set_action(ACTION_NONE);
3941 switch(p_ptr->magic_num1[0])
3944 if (!p_ptr->blessed)
3946 msg_print("¹â·é¤Êµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
3948 msg_print("The prayer has expired.");
3955 msg_print("¥Ò¡¼¥í¡¼¤Îµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
3957 msg_print("The heroism wears off.");
3959 /* Recalculate hitpoints */
3960 p_ptr->update |= (PU_HP);
3964 if (!p_ptr->tim_esp)
3967 msg_print("°Õ¼±¤Ï¸µ¤ËÌá¤Ã¤¿¡£");
3969 msg_print("Your consciousness contracts again.");
3971 /* Update the monsters */
3972 p_ptr->update |= (PU_MONSTERS);
3976 if (!p_ptr->tim_stealth)
3978 msg_print("»Ñ¤¬¤Ï¤Ã¤¤ê¤È¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¡£");
3980 msg_print("You are no longer hided.");
3984 if (!p_ptr->oppose_acid)
3986 msg_print("»À¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
3988 msg_print("You feel less resistant to acid.");
3990 if (!p_ptr->oppose_elec)
3992 msg_print("ÅÅ·â¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
3994 msg_print("You feel less resistant to elec.");
3996 if (!p_ptr->oppose_fire)
3998 msg_print("²Ð¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
4000 msg_print("You feel less resistant to fire.");
4002 if (!p_ptr->oppose_cold)
4004 msg_print("Î䵤¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
4006 msg_print("You feel less resistant to cold.");
4008 if (!p_ptr->oppose_pois)
4010 msg_print("ÆǤؤÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
4012 msg_print("You feel less resistant to pois.");
4018 msg_print("Æ°¤¤ÎÁÇÁᤵ¤¬¤Ê¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£");
4020 msg_print("You feel yourself slow down.");
4027 msg_print("¥Ò¡¼¥í¡¼¤Îµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
4029 msg_print("The heroism wears off.");
4031 /* Recalculate hitpoints */
4032 p_ptr->update |= (PU_HP);
4037 msg_print("Æ°¤¤ÎÁÇÁᤵ¤¬¤Ê¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£");
4039 msg_print("You feel yourself slow down.");
4046 msg_print("̵Ũ¤Ç¤Ï¤Ê¤¯¤Ê¤Ã¤¿¡£");
4048 msg_print("The invulnerability wears off.");
4051 p_ptr->redraw |= (PR_MAP);
4053 /* Update monsters */
4054 p_ptr->update |= (PU_MONSTERS);
4057 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
4061 p_ptr->magic_num1[0] = MUSIC_NONE;
4062 p_ptr->magic_num2[0] = 0;
4064 /* Recalculate bonuses */
4065 p_ptr->update |= (PU_BONUS | PU_HP);
4067 /* Redraw status bar */
4068 p_ptr->redraw |= (PR_STATUS);
4072 static bool cast_music_spell(int spell)
4074 int plev = p_ptr->lev;
4077 if(p_ptr->magic_num1[0])
4082 p_ptr->magic_num2[0] = spell;
4086 case 0: /* Song of Holding ÃÙÆߤβΠ*/
4088 msg_print("¤æ¤Ã¤¯¤ê¤È¤·¤¿¥á¥í¥Ç¥£¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
4090 msg_print("You start humming a slow, steady melody...");
4092 p_ptr->magic_num1[0] = MUSIC_SLOW;
4094 case 1: /* Song of Blessing ½ËÊ¡¤Î²Î */
4096 msg_print("¸·¤«¤Ê¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4098 msg_print("The holy power of the Music of the Ainur enters you...");
4100 p_ptr->magic_num1[0] = MUSIC_BLESS;
4103 case 2: /* Wrecking Note Êø²õ¤Î²»¿§ */
4104 if (!get_aim_dir(&dir)) return FALSE;
4105 fire_bolt(GF_SOUND, dir,
4106 damroll(4 + ((plev - 1) / 5), 4));
4108 case 3: /* Stun Pattern Û¯Û°¤ÎÀûΧ */
4110 msg_print("âÁÏǤµ¤»¤ë¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4112 msg_print("You weave a pattern of sounds to bewilder and daze...");
4114 p_ptr->magic_num1[0] = MUSIC_STUN;
4116 case 4: /* Flow of life À¸Ì¿¤Îή¤ì */
4118 msg_print("²Î¤òÄ̤·¤ÆÂΤ˳赤¤¬Ìá¤Ã¤Æ¤¤¿¡¥¡¥¡¥");
4120 msg_print("Life flows through you as you sing a song of healing...");
4122 p_ptr->magic_num1[0] = MUSIC_L_LIFE;
4124 case 5: /* Song of the Sun ÂÀÍۤβΠ*/
4126 msg_print("¸÷¤êµ±¤¯²Î¤¬ÊÕ¤ê¤ò¾È¤é¤·¤¿¡£");
4128 msg_print("Your uplifting song brings brightness to dark places...");
4130 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
4132 case 6: /* Song of fear ¶²ÉݤβΠ*/
4134 msg_print("¤ª¤É¤í¤ª¤É¤í¤·¤¤¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4136 msg_print("You start weaving a fearful pattern...");
4138 p_ptr->magic_num1[0] = MUSIC_FEAR;
4140 case 7: /* Heroic Ballad À襤¤Î²Î */
4142 msg_print("·ã¤·¤¤À襤¤Î²Î¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
4144 msg_print("You start singing a song of intense fighting...");
4146 p_ptr->magic_num1[0] = MUSIC_HERO;
4148 case 8: /* Clairaudience ÎîŪÃγР*/
4150 msg_print("ÀŤ«¤Ê²»³Ú¤¬´¶³Ð¤ò¸¦¤®À¡¤Þ¤µ¤»¤¿¡¥¡¥¡¥");
4152 msg_print("Your quiet music sharpens your sense of hearing...");
4154 p_ptr->magic_num1[0] = MUSIC_DETECT;
4156 case 9: /* º²¤Î²Î */
4158 msg_print("Àº¿À¤òDZ¤¸¶Ê¤²¤ë²Î¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
4160 msg_print("You start singing a song of soul in pain...");
4162 p_ptr->magic_num1[0] = MUSIC_PSI;
4164 case 10: /* Song of Lore Ãμ±¤Î²Î */
4166 msg_print("¤³¤ÎÀ¤³¦¤ÎÃ챤¬Î®¤ì¹þ¤ó¤Ç¤¤¿¡¥¡¥¡¥");
4168 msg_print("You recall the rich lore of the world...");
4170 p_ptr->magic_num1[0] = MUSIC_ID;
4172 case 11: /* hidding song ±£ÆۤβΠ*/
4174 msg_print("¤¢¤Ê¤¿¤Î»Ñ¤¬·Ê¿§¤Ë¤È¤±¤³¤ó¤Ç¤¤¤Ã¤¿¡¥¡¥¡¥");
4176 msg_print("Your song carries you beyond the sight of mortal eyes...");
4178 p_ptr->magic_num1[0] = MUSIC_STEALTH;
4180 case 12: /* Illusion Pattern ¸¸±Æ¤ÎÀûΧ */
4182 msg_print("ÊÕ¤ê°ìÌ̤˸¸±Æ¤¬¸½¤ì¤¿¡¥¡¥¡¥");
4184 msg_print("You weave a pattern of sounds to beguile and confuse...");
4186 p_ptr->magic_num1[0] = MUSIC_CONF;
4188 case 13: /* Doomcall (vibration song) ÇËÌǤζ«¤Ó */
4190 msg_print("¹ì²»¤¬¶Á¤¤¤¿¡¥¡¥¡¥");
4192 msg_print("The fury of the Downfall of Numenor lashes out...");
4194 p_ptr->magic_num1[0] = MUSIC_SOUND;
4196 case 14: /* Firiel's Song (song of the Undeads) ¥Õ¥£¥ê¥¨¥ë¤Î²Î */
4198 msg_print("À¸Ì¿¤ÈÉü³è¤Î¥Æ¡¼¥Þ¤òÁդǻϤ᤿¡¥¡¥¡¥");
4200 msg_print("The themes of life and revival are woven into your song...");
4202 animate_dead(0, py, px);
4204 case 15: /* Fellowship Chant (charming song) ι¤ÎÃç´Ö */
4206 msg_print("°Â¤é¤«¤Ê¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4208 msg_print("You weave a slow, soothing melody of imploration...");
4210 p_ptr->magic_num1[0] = MUSIC_CHARM;
4212 case 16: /* (wall breaking song) ʬ²ò²»ÇÈ */
4214 msg_print("Ê´ºÕ¤¹¤ë¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4216 msg_print("You weave a violent pattern of sounds to break wall.");
4218 p_ptr->magic_num1[0] = MUSIC_WALL;
4219 project(0, 0, py, px,
4220 0, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM | PROJECT_HIDE, -1);
4222 case 17: /* Finrod's Resistance (song of resistance) ¸µÁÇÂÑÀ */
4224 msg_print("¸µÁǤÎÎϤËÂФ¹¤ëǦÂѤβΤò²Î¤Ã¤¿¡£");
4226 msg_print("You sing a song of perseverance against powers...");
4228 p_ptr->magic_num1[0] = MUSIC_RESIST;
4230 case 18: /* Hobbit Melodies (song of time) ¥Û¥Ó¥Ã¥È¤Î¥á¥í¥Ç¥£ */
4232 msg_print("·Ú²÷¤Ê²Î¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
4234 msg_print("You start singing joyful pop song...");
4236 p_ptr->magic_num1[0] = MUSIC_SPEED;
4238 case 19: /* World Contortion ÏĤó¤ÀÀ¤³¦ */
4240 msg_print("²Î¤¬¶õ´Ö¤òÏĤ᤿¡¥¡¥¡¥");
4242 msg_print("Reality whirls wildly as you sing a dizzying melody...");
4244 project(0, plev/15 + 1, py, px, plev * 3 + 1, GF_AWAY_ALL , PROJECT_KILL, -1);
4246 case 20: /* Â໶¤Î²Î */
4248 msg_print("ÂѤ¨¤é¤ì¤Ê¤¤ÉÔ¶¨Ï²»¤¬Å¨¤òÀÕ¤áΩ¤Æ¤¿¡¥¡¥¡¥");
4250 msg_print("You cry out in an ear-wracking voice...");
4252 p_ptr->magic_num1[0] = MUSIC_DISPEL;
4254 case 21: /* The Voice of Saruman ¥µ¥ë¥Þ¥ó¤Î´Å¸À */
4256 msg_print("Í¥¤·¤¯¡¢Ì¥ÎÏŪ¤Ê²Î¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
4258 msg_print("You start humming a gentle and attractive song...");
4260 p_ptr->magic_num1[0] = MUSIC_SARUMAN;
4262 case 22: /* Song of Tempest (song of death) Íò¤Î²»¿§ */
4263 if (!get_aim_dir(&dir)) return FALSE;
4264 fire_beam(GF_SOUND, dir,
4265 damroll(15 + ((plev - 1) / 2), 10));
4267 case 23: /* (song of disruption) ¤â¤¦°ì¤Ä¤ÎÀ¤³¦ */
4269 msg_print("¼þ°Ï¤¬ÊѲ½¤·»Ï¤á¤¿¡¥¡¥¡¥");
4271 msg_print("You sing of the primeval shaping of Middle-earth...");
4275 case 24: /* Wrecking Pattern (destruction shriek) Ç˲õ¤ÎÀûΧ */
4277 msg_print("Ç˲õŪ¤Ê²Î¤¬¶Á¤¤ï¤¿¤Ã¤¿¡¥¡¥¡¥");
4279 msg_print("You weave a pattern of sounds to contort and shatter...");
4281 p_ptr->magic_num1[0] = MUSIC_QUAKE;
4283 case 25: /* ÄäÂڤβΠ*/
4285 msg_print("¤æ¤Ã¤¯¤ê¤È¤·¤¿¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4287 msg_print("You weave a very slow pattern which is almost likely to stop...");
4289 p_ptr->magic_num1[0] = MUSIC_STASIS;
4291 case 26: /* ¼é¤ê¤Î²Î */
4293 msg_print("²Î¤¬¿ÀÀ»¤Ê¾ì¤òºî¤ê½Ð¤·¤¿¡¥¡¥¡¥");
4295 msg_print("The holy power of the Music is creating sacred field...");
4299 case 27: /* ±Ñͺ¤Î»í */
4301 msg_print("±Ñͺ¤Î²Î¤ò¸ý¤º¤µ¤ó¤À¡¥¡¥¡¥");
4303 msg_print("You chant a powerful, heroic call to arms...");
4305 p_ptr->magic_num1[0] = MUSIC_SHERO;
4306 (void)hp_player(10);
4307 (void)set_afraid(0);
4309 case 28: /* ¥ä¥ô¥¡¥ó¥Ê¤Î½õ¤± */
4311 msg_print("²Î¤òÄ̤·¤ÆÂΤ˳赤¤¬Ìá¤Ã¤Æ¤¤¿¡¥¡¥¡¥");
4313 msg_print("Life flows through you as you sing the song...");
4315 p_ptr->magic_num1[0] = MUSIC_H_LIFE;
4317 case 29: /* ºÆÀ¸¤Î²Î */
4319 msg_print("°Å¹õ¤ÎÃæ¤Ë¸÷¤ÈÈþ¤ò¤Õ¤ê¤Þ¤¤¤¿¡£ÂΤ¬¸µ¤Î³èÎϤò¼è¤êÌᤷ¤¿¡£");
4321 msg_print("You strewed light and beauty in the dark as you sing. You feel refreshed.");
4323 (void)do_res_stat(A_STR);
4324 (void)do_res_stat(A_INT);
4325 (void)do_res_stat(A_WIS);
4326 (void)do_res_stat(A_DEX);
4327 (void)do_res_stat(A_CON);
4328 (void)do_res_stat(A_CHR);
4329 (void)restore_level();
4331 case 30: /* shriek of death ¥µ¥¦¥í¥ó¤ÎËâ½Ñ */
4332 if (!get_aim_dir(&dir)) return FALSE;
4333 fire_ball(GF_SOUND, dir, damroll(50 + plev, 10), 0);
4335 case 31: /* song of liberty ¥Õ¥£¥ó¥´¥ë¥Õ¥£¥ó¤ÎÄ©Àï */
4337 msg_print("¥Õ¥£¥ó¥´¥ë¥Õ¥£¥ó¤Î̽²¦¤Ø¤ÎÄ©Àï¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
4339 msg_print("You recall the valor of Fingolfin's challenge to the Dark Lord...");
4341 p_ptr->magic_num1[0] = MUSIC_INVULN;
4344 p_ptr->redraw |= (PR_MAP);
4346 /* Update monsters */
4347 p_ptr->update |= (PU_MONSTERS);
4350 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
4354 msg_format("̤ÃΤβÎ(%d)¤ò²Î¤Ã¤¿¡£", spell);
4356 msg_format("You sing an unknown song: %d.", spell);
4361 if (p_ptr->magic_num1[0]) set_action(ACTION_SING);
4363 /* Recalculate bonuses */
4364 p_ptr->update |= (PU_BONUS | PU_HP);
4366 /* Redraw status bar */
4367 p_ptr->redraw |= (PR_STATUS);
4375 void do_cmd_cast(void)
4378 use_skill_callback();
4379 #else /* USE_SCRIPT */
4380 int item, sval, spell, realm;
4395 /* Require spell ability */
4396 if (!p_ptr->realm1 && (p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE))
4399 msg_print("¼öʸ¤ò¾§¤¨¤é¤ì¤Ê¤¤¡ª");
4401 msg_print("You cannot cast spells!");
4408 if (p_ptr->blind || no_lite())
4411 msg_print("Ìܤ¬¸«¤¨¤Ê¤¤¡ª");
4413 msg_print("You cannot see!");
4415 if (p_ptr->pclass == CLASS_FORCETRAINER)
4422 /* Not when confused */
4423 if (p_ptr->confused)
4426 msg_print("º®Í𤷤Ƥ¤¤Æ¾§¤¨¤é¤ì¤Ê¤¤¡ª");
4428 msg_print("You are too confused!");
4434 prayer = spell_categoly_name(mp_ptr->spell_book);
4436 /* Restrict choices to spell books */
4437 item_tester_tval = mp_ptr->spell_book;
4441 q = "¤É¤Î¼öʸ½ñ¤ò»È¤¤¤Þ¤¹¤«? ";
4443 q = "Use which book? ";
4447 s = "¼öʸ½ñ¤¬¤Ê¤¤¡ª";
4449 s = "You have no spell books!";
4452 select_spellbook=TRUE;
4453 if (p_ptr->pclass == CLASS_FORCETRAINER)
4454 select_the_force = TRUE;
4455 if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))){
4456 select_spellbook = FALSE;
4457 select_the_force = FALSE;
4460 select_spellbook = FALSE;
4461 select_the_force = FALSE;
4463 if (item == 1111) { /* the_force */
4467 /* Get the item (in the pack) */
4470 o_ptr = &inventory[item];
4473 /* Get the item (on the floor) */
4476 o_ptr = &o_list[0 - item];
4480 if (object_cast_callback(o_ptr)) return;
4481 #endif /* USE_SCRIPT */
4483 /* Access the item's sval */
4486 if ((p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE) && (o_ptr->tval == REALM2_BOOK)) increment = 32;
4489 /* Track the object kind */
4490 object_kind_track(o_ptr->k_idx);
4492 /* Hack -- Handle stuff */
4495 if ((p_ptr->pclass == CLASS_SORCERER) || (p_ptr->pclass == CLASS_RED_MAGE))
4496 realm = o_ptr->tval - TV_LIFE_BOOK + 1;
4497 else if (increment) realm = p_ptr->realm2;
4498 else realm = p_ptr->realm1;
4500 /* Ask for a spell */
4502 if (!get_spell(&spell,
4503 ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "±Ó¾§¤¹¤ë" : (mp_ptr->spell_book == TV_MUSIC_BOOK) ? "²Î¤¦" : "¾§¤¨¤ë"),
4506 if (spell == -2) msg_format("¤½¤ÎËܤˤÏÃΤäƤ¤¤ë%s¤¬¤Ê¤¤¡£", prayer);
4510 if (!get_spell(&spell, ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "recite" : "cast"),
4514 msg_format("You don't know any %ss in that book.", prayer);
4520 use_realm = tval2realm(o_ptr->tval);
4522 if (!is_magic(use_realm))
4524 s_ptr = &technic_info[use_realm - MIN_TECHNIC - 1][spell];
4528 s_ptr = &mp_ptr->info[realm - 1][spell];
4531 if (p_ptr->pclass == CLASS_SORCERER)
4532 shouhimana = s_ptr->smana*2200 + 2399;
4533 else if (p_ptr->pclass == CLASS_RED_MAGE)
4534 shouhimana = s_ptr->smana*2600 + 2399;
4536 shouhimana = (s_ptr->smana*(3800-spell_exp[(increment ? spell+32 : spell)])+2399);
4539 else shouhimana *= 4;
4541 if(shouhimana < 1) shouhimana = 1;
4543 /* Verify "dangerous" spells */
4544 if (shouhimana > p_ptr->csp)
4548 msg_format("¤½¤Î%s¤ò%s¤Î¤Ë½½Ê¬¤Ê¥Þ¥¸¥Ã¥¯¥Ý¥¤¥ó¥È¤¬¤Ê¤¤¡£",prayer,
4549 ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "±Ó¾§¤¹¤ë" : (mp_ptr->spell_book == TV_LIFE_BOOK) ? "²Î¤¦" : "¾§¤¨¤ë"));
4551 msg_format("You do not have enough mana to %s this %s.",
4552 ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "recite" : "cast"),
4557 if (!over_exert) return;
4561 if (!get_check("¤½¤ì¤Ç¤âÄ©À路¤Þ¤¹¤«? ")) return;
4563 if (!get_check("Attempt it anyway? ")) return;
4569 /* Spell failure chance */
4570 chance = spell_chance(spell, use_realm - 1);
4573 if (rand_int(100) < chance)
4575 if (flush_failure) flush();
4578 msg_format("%s¤ò¤¦¤Þ¤¯¾§¤¨¤é¤ì¤Ê¤«¤Ã¤¿¡ª", prayer);
4580 msg_format("You failed to get the %s off!", prayer);
4585 if (realm == REALM_LIFE)
4587 if (randint(100) < chance)
4588 chg_virtue(V_FAITH, -1);
4590 else if (realm == REALM_DEATH)
4592 if (randint(100) < chance)
4593 chg_virtue(V_UNLIFE, -1);
4595 else if (realm == REALM_NATURE)
4597 if (randint(100) < chance)
4598 chg_virtue(V_NATURE, -1);
4600 else if (realm == REALM_DAEMON)
4602 if (randint(100) < chance)
4603 chg_virtue(V_JUSTICE, 1);
4605 else if (randint(100) < chance)
4607 chg_virtue(V_KNOWLEDGE, -1);
4610 if (realm == REALM_TRUMP)
4612 cast_trump_spell(spell, FALSE);
4614 else if ((o_ptr->tval == TV_CHAOS_BOOK) && (randint(100) < spell))
4617 msg_print("¥«¥ª¥¹Åª¤Ê¸ú²Ì¤òȯÀ¸¤·¤¿¡ª");
4619 msg_print("You produce a chaotic effect!");
4624 else if ((o_ptr->tval == TV_DEATH_BOOK) && (randint(100) < spell))
4626 if ((sval == 3) && (randint(2) == 1))
4628 sanity_blast(0, TRUE);
4633 msg_print("Äˤ¤¡ª");
4635 msg_print("It hurts!");
4639 take_hit(DAMAGE_LOSELIFE, damroll(o_ptr->sval + 1, 6), "°Å¹õËâË¡¤ÎµÕή", -1);
4641 take_hit(DAMAGE_LOSELIFE, damroll(o_ptr->sval + 1, 6), "a miscast Death spell", -1);
4644 if ((spell > 15) && (randint(6) == 1) && !p_ptr->hold_life)
4645 lose_exp(spell * 250);
4648 else if ((o_ptr->tval == TV_MUSIC_BOOK) && (randint(200) < spell))
4651 msg_print("¤¤¤ä¤Ê²»¤¬¶Á¤¤¤¿");
4653 msg_print("An infernal sound echoed.");
4656 aggravate_monsters(0);
4658 if (randint(100) >= chance)
4659 chg_virtue(V_CHANCE,-1);
4668 case REALM_LIFE: /* * LIFE * */
4669 cast = cast_life_spell(spell);
4671 case REALM_SORCERY: /* * SORCERY * */
4672 cast = cast_sorcery_spell(spell);
4674 case REALM_NATURE: /* * NATURE * */
4675 cast = cast_nature_spell(spell);
4677 case REALM_CHAOS: /* * CHAOS * */
4678 cast = cast_chaos_spell(spell);
4680 case REALM_DEATH: /* * DEATH * */
4681 cast = cast_death_spell(spell);
4683 case REALM_TRUMP: /* TRUMP */
4684 cast = cast_trump_spell(spell, TRUE);
4686 case REALM_ARCANE: /* ARCANE */
4687 cast = cast_arcane_spell(spell);
4689 case REALM_ENCHANT: /* ENCHANT */
4690 cast = cast_enchant_spell(spell);
4692 case REALM_DAEMON: /* DAEMON */
4693 cast = cast_daemon_spell(spell);
4695 case REALM_MUSIC: /* MUSIC */
4696 cast = cast_music_spell(spell);
4700 msg_format("You cast a spell from an unknown realm: realm %d, spell %d.", realm, spell);
4704 /* Canceled spells cost neither a turn nor mana */
4707 if (randint(100) < chance)
4708 chg_virtue(V_CHANCE,1);
4710 /* A spell was cast */
4712 (spell_worked2 & (1L << spell)) :
4713 (spell_worked1 & (1L << spell)))
4714 && (p_ptr->pclass != CLASS_SORCERER)
4715 && (p_ptr->pclass != CLASS_RED_MAGE))
4717 int e = s_ptr->sexp;
4719 /* The spell worked */
4720 if (realm == p_ptr->realm1)
4722 spell_worked1 |= (1L << spell);
4726 spell_worked2 |= (1L << spell);
4729 /* Gain experience */
4730 gain_exp(e * s_ptr->slevel);
4732 if (realm == REALM_LIFE)
4734 chg_virtue(V_FAITH, 1);
4735 chg_virtue(V_COMPASSION, 1);
4736 chg_virtue(V_VITALITY, 1);
4737 chg_virtue(V_HONOUR, 1);
4739 else if (realm == REALM_DEATH)
4741 chg_virtue(V_UNLIFE, 1);
4742 chg_virtue(V_JUSTICE, -1);
4743 chg_virtue(V_FAITH, -1);
4744 chg_virtue(V_VITALITY, -1);
4746 else if (realm == REALM_DAEMON)
4748 chg_virtue(V_JUSTICE, -1);
4749 chg_virtue(V_FAITH, -1);
4750 chg_virtue(V_HONOUR, -1);
4751 chg_virtue(V_TEMPERANCE, -1);
4753 else if (realm == REALM_NATURE)
4755 chg_virtue(V_NATURE, 1);
4756 chg_virtue(V_HARMONY, 1);
4759 chg_virtue(V_KNOWLEDGE, 1);
4761 if (realm == REALM_LIFE)
4763 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_FAITH, 1);
4764 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_COMPASSION, 1);
4765 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_VITALITY, 1);
4766 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_HONOUR, 1);
4768 else if (realm == REALM_DEATH)
4770 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_UNLIFE, 1);
4771 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_JUSTICE, -1);
4772 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_FAITH, -1);
4773 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_VITALITY, -1);
4775 else if (realm == REALM_DAEMON)
4777 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_JUSTICE, -1);
4778 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_FAITH, -1);
4779 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_HONOUR, -1);
4780 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_TEMPERANCE, -1);
4782 else if (realm == REALM_NATURE)
4784 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_NATURE, 1);
4785 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_HARMONY, 1);
4787 if (mp_ptr->spell_xtra & MAGIC_GAIN_EXP)
4789 if (spell_exp[(increment ? 32 : 0)+spell] < 900)
4790 spell_exp[(increment ? 32 : 0)+spell]+=60;
4791 else if(spell_exp[(increment ? 32 : 0)+spell] < 1200)
4792 {if ((dun_level > 4) && ((dun_level + 10) > p_ptr->lev)) spell_exp[(increment ? 32 : 0)+spell]+=8;}
4793 else if(spell_exp[(increment ? 32 : 0)+spell] < 1400)
4794 {if (((dun_level + 5) > p_ptr->lev) && ((dun_level + 5) > s_ptr->slevel)) spell_exp[(increment ? 32 : 0)+spell]+=2;}
4795 else if((spell_exp[(increment ? 32 : 0)+spell] < 1600) && !increment)
4796 {if (((dun_level + 5) > p_ptr->lev) && (dun_level > s_ptr->slevel)) spell_exp[(increment ? 32 : 0)+spell]+=1;}
4803 /* Sufficient mana */
4804 if (shouhimana <= p_ptr->csp)
4807 p_ptr->csp -= shouhimana;
4810 /* Over-exert the player */
4813 int oops = shouhimana;
4817 p_ptr->csp_frac = 0;
4821 msg_print("Àº¿À¤ò½¸Ã椷¤¹¤®¤Æµ¤¤ò¼º¤Ã¤Æ¤·¤Þ¤Ã¤¿¡ª");
4823 msg_print("You faint from the effort!");
4827 /* Hack -- Bypass free action */
4828 (void)set_paralyzed(p_ptr->paralyzed + randint(5 * oops + 1));
4830 if (realm == REALM_LIFE)
4831 chg_virtue(V_FAITH, -10);
4832 else if (realm == REALM_DEATH)
4833 chg_virtue(V_UNLIFE, -10);
4834 else if (realm == REALM_DAEMON)
4835 chg_virtue(V_JUSTICE, 10);
4836 else if (realm == REALM_NATURE)
4837 chg_virtue(V_NATURE, -10);
4839 chg_virtue(V_KNOWLEDGE, -10);
4841 /* Damage CON (possibly permanently) */
4842 if (rand_int(100) < 50)
4844 bool perm = (rand_int(100) < 25);
4848 msg_print("ÂΤò°¤¯¤·¤Æ¤·¤Þ¤Ã¤¿¡ª");
4850 msg_print("You have damaged your health!");
4854 /* Reduce constitution */
4855 (void)dec_stat(A_CON, 15 + randint(10), perm);
4860 p_ptr->redraw |= (PR_MANA);
4863 p_ptr->window |= (PW_PLAYER);
4864 p_ptr->window |= (PW_SPELL);
4865 #endif /* USE_SCRIPT */
4870 * Pray a prayer -- Unused in Hengband
4872 void do_cmd_pray(void)
4874 msg_print("Praying is not used in Hengband. Use magic spell casting instead.");
4877 static bool ang_sort_comp_pet_dismiss(vptr u, vptr v, int a, int b)
4879 u16b *who = (u16b*)(u);
4884 monster_type *m_ptr1 = &m_list[w1];
4885 monster_type *m_ptr2 = &m_list[w2];
4886 monster_race *r_ptr1 = &r_info[m_ptr1->r_idx];
4887 monster_race *r_ptr2 = &r_info[m_ptr2->r_idx];
4889 if (w1 == p_ptr->riding) return TRUE;
4890 if (w2 == p_ptr->riding) return FALSE;
4892 if (m_ptr1->nickname && !m_ptr2->nickname) return TRUE;
4893 if (m_ptr2->nickname && !m_ptr1->nickname) return FALSE;
4895 if ((r_ptr1->flags1 & RF1_UNIQUE) && !(r_ptr2->flags1 & RF1_UNIQUE)) return TRUE;
4896 if ((r_ptr2->flags1 & RF1_UNIQUE) && !(r_ptr1->flags1 & RF1_UNIQUE)) return FALSE;
4898 if (r_ptr1->level > r_ptr2->level) return TRUE;
4899 if (r_ptr2->level > r_ptr1->level) return FALSE;
4901 if (m_ptr1->hp > m_ptr2->hp) return TRUE;
4902 if (m_ptr2->hp > m_ptr1->hp) return FALSE;
4907 int calculate_upkeep(void)
4909 s32b old_friend_align = friend_align;
4911 bool have_a_unique = FALSE;
4914 total_friend_levels = 0;
4917 for (m_idx = m_max - 1; m_idx >=1; m_idx--)
4919 monster_type *m_ptr;
4920 monster_race *r_ptr;
4922 m_ptr = &m_list[m_idx];
4923 if (!m_ptr->r_idx) continue;
4924 r_ptr = &r_info[m_ptr->r_idx];
4929 if (r_ptr->flags1 & RF1_UNIQUE)
4931 if (p_ptr->pclass == CLASS_CAVALRY)
4933 if (p_ptr->riding == m_idx)
4934 total_friend_levels += (r_ptr->level+5)*2;
4935 else if (!have_a_unique && (r_info[m_ptr->r_idx].flags7 & RF7_RIDING))
4936 total_friend_levels += (r_ptr->level+5)*7/2;
4938 total_friend_levels += (r_ptr->level+5)*10;
4939 have_a_unique = TRUE;
4942 total_friend_levels += (r_ptr->level+5)*10;
4945 total_friend_levels += r_ptr->level;
4947 /* Determine pet alignment */
4948 if (r_ptr->flags3 & RF3_GOOD)
4950 friend_align += r_ptr->level;
4952 else if (r_ptr->flags3 & RF3_EVIL)
4954 friend_align -= r_ptr->level;
4958 if (old_friend_align != friend_align) p_ptr->update |= (PU_BONUS);
4962 upkeep_factor = (total_friend_levels - (p_ptr->lev * 80 / (cp_ptr->pet_upkeep_div)));
4963 if (upkeep_factor < 0) upkeep_factor = 0;
4964 if (upkeep_factor > 1000) upkeep_factor = 1000;
4965 return upkeep_factor;
4971 void do_cmd_pet_dismiss(void)
4973 monster_type *m_ptr;
4974 bool all_pets = FALSE;
4988 /* Allocate the "who" array */
4989 C_MAKE(who, max_m_idx, u16b);
4991 /* Process the monsters (backwards) */
4992 for (pet_ctr = m_max - 1; pet_ctr >= 1; pet_ctr--)
4994 if (is_pet(&m_list[pet_ctr]))
4995 who[max_pet++] = pet_ctr;
4998 /* Select the sort method */
4999 ang_sort_comp = ang_sort_comp_pet_dismiss;
5000 ang_sort_swap = ang_sort_swap_hook;
5002 ang_sort(who, &dummy_why, max_pet);
5004 /* Process the monsters (backwards) */
5005 for (i = 0; i < max_pet; i++)
5007 /* Access the monster */
5009 m_ptr = &m_list[pet_ctr];
5012 bool delete_this = FALSE;
5013 char friend_name[80];
5014 bool kakunin = ((pet_ctr == p_ptr->riding) || (m_ptr->nickname));
5015 monster_desc(friend_name, m_ptr, 0x80);
5017 if (all_pets && !kakunin)
5022 char check_friend[80];
5026 sprintf(check_friend, "%s¤òÊü¤·¤Þ¤¹¤«¡© [Yes/No]", friend_name);
5028 sprintf(check_friend, "Dismiss %s? [Yes/No]", friend_name);
5034 sprintf(check_friend, "%s¤òÊü¤·¤Þ¤¹¤«¡© [Yes/No/All(%dɤ)]", friend_name, max_pet-i);
5036 sprintf(check_friend, "Dismiss %s? [Yes/No/All(%d remain)]", friend_name, max_pet-i);
5039 /* Hack -- health bar for this monster */
5040 health_track(pet_ctr);
5042 /* Hack -- handle stuff */
5045 prt(check_friend, 0, 0);
5048 move_cursor_relative(m_ptr->fy, m_ptr->fx);
5052 if (ch == ESCAPE) break;
5053 if (strchr("YyNnAa", ch)) break;
5057 if (ch == 'A' || ch == 'a') all_pets = TRUE;
5059 if (ch == 'Y' || ch == 'y' || ch == 'A' || ch == 'a')
5064 sprintf(check_friend, "ËÜÅö¤Ë¤è¤í¤·¤¤¤Ç¤¹¤«¡© (%s) ", friend_name);
5066 sprintf(check_friend, "Really? (%s) ", friend_name);
5068 if (!get_check(check_friend)) continue;
5070 if (record_named_pet && m_ptr->nickname)
5074 monster_desc(m_name, m_ptr, 0x08);
5075 do_cmd_write_nikki(NIKKI_NAMED_PET, 2, m_name);
5083 if (pet_ctr == p_ptr->riding)
5086 msg_format("%s¤«¤é¹ß¤ê¤¿¡£", friend_name);
5088 msg_format("You have got off %s. ", friend_name);
5093 /* Update the monsters */
5094 p_ptr->update |= (PU_BONUS | PU_MONSTERS);
5095 p_ptr->redraw |= (PR_EXTRA);
5097 delete_monster_idx(pet_ctr);
5107 C_KILL(who, max_m_idx, u16b);
5110 msg_format("%d ɤ¤Î¥Ú¥Ã¥È¤òÊü¤·¤Þ¤·¤¿¡£", Dismissed);
5112 msg_format("You have dismissed %d pet%s.", Dismissed,
5113 (Dismissed == 1 ? "" : "s"));
5116 p_ptr->update |= (PU_MON_LITE);
5119 bool rakuba(int dam, bool force)
5121 int i, y, x, oy, ox;
5122 int sn = 0, sy = 0, sx = 0;
5124 monster_type *m_ptr = &m_list[p_ptr->riding];
5125 monster_race *r_ptr = &r_info[m_ptr->r_idx];
5127 if (!p_ptr->riding) return FALSE;
5128 if (p_ptr->wild_mode) return FALSE;
5130 if (dam >= 0 || force)
5134 int level = r_ptr->level;
5135 if (p_ptr->riding_ryoute) level += 20;
5136 if ((dam/2 + r_ptr->level) > (skill_exp[GINOU_RIDING]/30+10))
5138 if((skill_exp[GINOU_RIDING] < s_info[p_ptr->pclass].s_max[GINOU_RIDING]) && s_info[p_ptr->pclass].s_max[GINOU_RIDING] > 1000)
5140 if (r_ptr->level*100 > (skill_exp[GINOU_RIDING] + 1500))
5141 skill_exp[GINOU_RIDING] += (1+(r_ptr->level - skill_exp[GINOU_RIDING]/100 - 15));
5142 else skill_exp[GINOU_RIDING]++;
5145 if (rand_int(dam/2 + level*2) < (skill_exp[GINOU_RIDING]/30+10))
5147 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))
5153 /* Check around the player */
5154 for (i = 0; i < 8; i++)
5158 /* Access the location */
5159 y = py + ddy_ddd[i];
5160 x = px + ddx_ddd[i];
5162 c_ptr = &cave[y][x];
5164 /* Skip non-empty grids */
5165 if (cave_perma_grid(c_ptr)) continue;
5166 if (!cave_empty_grid2(c_ptr)) continue;
5168 if (c_ptr->m_idx) continue;
5170 /* Count "safe" grids */
5173 /* Randomize choice */
5174 if (rand_int(sn) > 0) continue;
5176 /* Save the safe location */
5181 monster_desc(m_name, m_ptr, 0);
5183 msg_format("%s¤«¤é¿¶¤êÍî¤È¤µ¤ì¤½¤¦¤Ë¤Ê¤Ã¤Æ¡¢Êɤˤ֤Ĥ«¤Ã¤¿¡£",m_name);
5184 take_hit(DAMAGE_NOESCAPE, r_ptr->level+3, "Êɤؤξ×ÆÍ", -1);
5186 msg_format("You have nearly fallen from %s, but bumped into wall.",m_name);
5187 take_hit(DAMAGE_NOESCAPE, r_ptr->level+3, "bumping into wall", -1);
5198 /* Redraw the old spot */
5201 /* Redraw the new spot */
5204 /* Check for new panel */
5209 p_ptr->pet_extra_flags &= ~(PF_RYOUTE);
5210 p_ptr->riding_ryoute = p_ptr->old_riding_ryoute = FALSE;
5214 p_ptr->update |= (PU_BONUS);
5217 p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW);
5219 /* Update the monsters */
5220 p_ptr->update |= (PU_DISTANCE);
5223 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
5225 p_ptr->redraw |= (PR_EXTRA);
5227 if (p_ptr->ffall && !force)
5229 monster_desc(m_name, m_ptr, 0);
5231 msg_format("%s¤«¤éÍî¤Á¤¿¤¬¡¢¶õÃæ¤Ç¤¦¤Þ¤¯ÂÎÀª¤òΩ¤Æľ¤·¤ÆÃåÃϤ·¤¿¡£",m_name);
5233 msg_format("You are thrown from %s, but make a good landing.",m_name);
5238 take_hit(DAMAGE_NOESCAPE, r_ptr->level+3, "ÍîÇÏ", -1);
5240 take_hit(DAMAGE_NOESCAPE, r_ptr->level+3, "Falling from riding", -1);
5242 p_ptr->redraw |= (PR_UHEALTH);
5247 bool do_riding(bool force)
5249 int oy, ox, x, y, dir = 0;
5251 monster_type *m_ptr;
5253 if (!get_rep_dir2(&dir)) return FALSE;
5256 c_ptr = &cave[y][x];
5260 /* Skip non-empty grids */
5261 if (!cave_empty_bold2(y, x) || c_ptr->m_idx)
5264 msg_print("¤½¤Á¤é¤Ë¤Ï¹ß¤ê¤é¤ì¤Þ¤»¤ó¡£");
5266 msg_print("You cannot go to that direction.");
5271 p_ptr->pet_extra_flags &= ~(PF_RYOUTE);
5272 p_ptr->riding_ryoute = p_ptr->old_riding_ryoute = FALSE;
5276 if (p_ptr->confused)
5279 msg_print("º®Í𤷤Ƥ¤¤Æ¾è¤ì¤Ê¤¤¡ª");
5281 msg_print("You are too confused!");
5285 if (!(c_ptr->m_idx))
5288 msg_print("¤½¤Î¾ì½ê¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
5290 msg_print("Here is no pet.");
5296 m_ptr = &m_list[c_ptr->m_idx];
5298 if (!is_pet(m_ptr) && !force)
5301 msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤Ï¥Ú¥Ã¥È¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£");
5303 msg_print("That monster is no a pet.");
5308 if (!(r_info[m_ptr->r_idx].flags7 & RF7_RIDING))
5311 msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤Ë¤Ï¾è¤ì¤Ê¤µ¤½¤¦¤À¡£");
5313 msg_print("This monster doesn't seem suitable for riding.");
5318 if (!(p_ptr->pass_wall) && (c_ptr->feat >= FEAT_RUBBLE) && (c_ptr->feat <= FEAT_PERM_SOLID))
5321 msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤ÏÊɤÎÃæ¤Ë¤¤¤ë¡£");
5323 msg_print("This monster is in the wall.");
5328 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)))
5331 msg_print("¥Ñ¥¿¡¼¥ó¤Î¾å¤«¤é¤Ï¾è¤ì¤Þ¤»¤ó¡£");
5333 msg_print("You cannot ride from on Pattern.");
5341 msg_print("¤½¤Î¾ì½ê¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
5343 msg_print("Here is no monster.");
5348 if (r_info[m_ptr->r_idx].level > randint((skill_exp[GINOU_RIDING]/50 + p_ptr->lev/2 +20)))
5351 msg_print("¤¦¤Þ¤¯¾è¤ì¤Ê¤«¤Ã¤¿¡£");
5353 msg_print("You failed to ride.");
5363 monster_desc(m_name, m_ptr, 0);
5366 msg_format("%s¤òµ¯¤³¤·¤¿¡£", m_name);
5368 msg_format("You have waked %s up.", m_name);
5372 p_ptr->riding = c_ptr->m_idx;
5375 /* Save the old location */
5379 /* Move the player to the safe location */
5383 /* Redraw the old spot */
5386 /* Redraw the new spot */
5389 /* Check for new panel */
5394 /* Mega-Hack -- Forget the view and lite */
5395 p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE);
5398 p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW);
5400 /* Update the monsters */
5401 p_ptr->update |= (PU_DISTANCE);
5403 /* Update the monsters */
5404 p_ptr->update |= (PU_BONUS);
5407 p_ptr->redraw |= (PR_MAP | PR_EXTRA);
5410 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
5412 p_ptr->redraw |= (PR_UHEALTH);
5418 void do_name_pet(void)
5420 monster_type *m_ptr;
5423 bool old_name = FALSE;
5424 bool old_target_pet = target_pet;
5427 if (!target_set(TARGET_KILL))
5429 target_pet = old_target_pet;
5432 target_pet = old_target_pet;
5434 if (cave[target_row][target_col].m_idx)
5436 m_ptr = &m_list[cave[target_row][target_col].m_idx];
5442 msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤Ï¥Ú¥Ã¥È¤Ç¤Ï¤Ê¤¤¡£");
5444 msg_format("This monster is not a pet.");
5448 if (r_info[m_ptr->r_idx].flags1 & RF1_UNIQUE)
5451 msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤Î̾Á°¤ÏÊѤ¨¤é¤ì¤Ê¤¤¡ª");
5453 msg_format("You cannot change name of this monster!");
5457 monster_desc(m_name, m_ptr, 0);
5461 msg_format("%s¤Ë̾Á°¤ò¤Ä¤±¤ë¡£", m_name);
5463 msg_format("Name %s.", m_name);
5468 /* Start with nothing */
5469 strcpy(out_val, "");
5471 /* Use old inscription */
5472 if (m_ptr->nickname)
5474 /* Start with the old inscription */
5475 strcpy(out_val, quark_str(m_ptr->nickname));
5479 /* Get a new inscription (possibly empty) */
5481 if (get_string("̾Á°: ", out_val, 15))
5483 if (get_string("Name: ", out_val, 15))
5489 /* Save the inscription */
5490 m_ptr->nickname = quark_add(out_val);
5491 if (record_named_pet)
5495 monster_desc(m_name, m_ptr, 0x08);
5496 do_cmd_write_nikki(NIKKI_NAMED_PET, 0, m_name);
5501 if (record_named_pet && old_name)
5505 monster_desc(m_name, m_ptr, 0x08);
5506 do_cmd_write_nikki(NIKKI_NAMED_PET, 1, m_name);
5508 m_ptr->nickname = 0;
5515 * Issue a pet command
5517 void do_cmd_pet(void)
5522 cptr power_desc[36];
5527 int pets = 0, pet_ctr;
5528 monster_type *m_ptr;
5538 /* Calculate pets */
5539 /* Process the monsters (backwards) */
5540 for (pet_ctr = m_max - 1; pet_ctr >= 1; pet_ctr--)
5542 /* Access the monster */
5543 m_ptr = &m_list[pet_ctr];
5545 if (is_pet(m_ptr)) pets++;
5549 power_desc[num] = "¥Ú¥Ã¥È¤òÊü¤¹";
5551 power_desc[num] = "dismiss pets";
5554 powers[num++] = PET_DISMISS;
5557 sprintf(buf,"¥Ú¥Ã¥È¤Î¥¿¡¼¥²¥Ã¥È¤ò»ØÄê (¸½ºß¡§%s)",
5558 (pet_t_m_idx ? r_name + r_info[m_list[pet_t_m_idx].r_idx].name : "»ØÄê¤Ê¤·"));
5560 sprintf(buf,"specify a targert of pet (now:%s)",
5561 (pet_t_m_idx ? r_name + r_info[m_list[pet_t_m_idx].r_idx].name : "nothing"));
5563 power_desc[num] = buf;
5565 powers[num++] = PET_TARGET;
5568 power_desc[num] = "¶á¤¯¤Ë¤¤¤í";
5570 power_desc[num] = "stay close";
5573 if (p_ptr->pet_follow_distance == PET_CLOSE_DIST) mode = num;
5574 powers[num++] = PET_STAY_CLOSE;
5577 power_desc[num] = "¤Ä¤¤¤ÆÍ褤";
5579 power_desc[num] = "follow me";
5582 if (p_ptr->pet_follow_distance == PET_FOLLOW_DIST) mode = num;
5583 powers[num++] = PET_FOLLOW_ME;
5586 power_desc[num] = "Ũ¤ò¸«¤Ä¤±¤ÆÅݤ»";
5588 power_desc[num] = "seek and destroy";
5591 if (p_ptr->pet_follow_distance == PET_DESTROY_DIST) mode = num;
5592 powers[num++] = PET_SEEK_AND_DESTROY;
5595 power_desc[num] = "¾¯¤·Î¥¤ì¤Æ¤¤¤í";
5597 power_desc[num] = "give me space";
5600 if (p_ptr->pet_follow_distance == PET_SPACE_DIST) mode = num;
5601 powers[num++] = PET_ALLOW_SPACE;
5604 power_desc[num] = "Î¥¤ì¤Æ¤¤¤í";
5606 power_desc[num] = "stay away";
5609 if (p_ptr->pet_follow_distance == PET_AWAY_DIST) mode = num;
5610 powers[num++] = PET_STAY_AWAY;
5612 if (p_ptr->pet_extra_flags & PF_OPEN_DOORS)
5615 power_desc[num] = "¥É¥¢¤ò³«¤±¤ë (¸½ºß:ON)";
5617 power_desc[num] = "pets open doors (now On)";
5624 power_desc[num] = "¥É¥¢¤ò³«¤±¤ë (¸½ºß:OFF)";
5626 power_desc[num] = "pets open doors (now Off)";
5630 powers[num++] = PET_OPEN_DOORS;
5632 if (p_ptr->pet_extra_flags & PF_PICKUP_ITEMS)
5635 power_desc[num] = "¥¢¥¤¥Æ¥à¤ò½¦¤¦ (¸½ºß:ON)";
5637 power_desc[num] = "pets pick up items (now On)";
5644 power_desc[num] = "¥¢¥¤¥Æ¥à¤ò½¦¤¦ (¸½ºß:OFF)";
5646 power_desc[num] = "pets pick up items (now Off)";
5650 powers[num++] = PET_TAKE_ITEMS;
5652 if (p_ptr->pet_extra_flags & PF_TELEPORT)
5655 power_desc[num] = "¥Æ¥ì¥Ý¡¼¥È·ÏËâË¡¤ò»È¤¦ (¸½ºß:ON)";
5657 power_desc[num] = "allow teleport (now On)";
5664 power_desc[num] = "¥Æ¥ì¥Ý¡¼¥È·ÏËâË¡¤ò»È¤¦ (¸½ºß:OFF)";
5666 power_desc[num] = "allow teleport (now Off)";
5670 powers[num++] = PET_TELEPORT;
5672 if (p_ptr->pet_extra_flags & PF_ATTACK_SPELL)
5675 power_desc[num] = "¹¶·âËâË¡¤ò»È¤¦ (¸½ºß:ON)";
5677 power_desc[num] = "allow cast attack spell (now On)";
5684 power_desc[num] = "¹¶·âËâË¡¤ò»È¤¦ (¸½ºß:OFF)";
5686 power_desc[num] = "allow cast attack spell (now Off)";
5690 powers[num++] = PET_ATTACK_SPELL;
5692 if (p_ptr->pet_extra_flags & PF_SUMMON_SPELL)
5695 power_desc[num] = "¾¤´ËâË¡¤ò»È¤¦ (¸½ºß:ON)";
5697 power_desc[num] = "allow cast summon spell (now On)";
5704 power_desc[num] = "¾¤´ËâË¡¤ò»È¤¦ (¸½ºß:OFF)";
5706 power_desc[num] = "allow cast summon spell (now Off)";
5710 powers[num++] = PET_SUMMON_SPELL;
5712 if (p_ptr->pet_extra_flags & PF_BALL_SPELL)
5715 power_desc[num] = "¥×¥ì¥¤¥ä¡¼¤ò´¬¤¹þ¤àÈÏ°ÏËâË¡¤ò»È¤¦ (¸½ºß:ON)";
5717 power_desc[num] = "allow involve player in area spell (now On)";
5724 power_desc[num] = "¥×¥ì¥¤¥ä¡¼¤ò´¬¤¹þ¤àÈÏ°ÏËâË¡¤ò»È¤¦ (¸½ºß:OFF)";
5726 power_desc[num] = "allow involve player in area spell (now Off)";
5730 powers[num++] = PET_BALL_SPELL;
5735 power_desc[num] = "¥Ú¥Ã¥È¤«¤é¹ß¤ê¤ë";
5737 power_desc[num] = "get off a pet";
5744 power_desc[num] = "¥Ú¥Ã¥È¤Ë¾è¤ë";
5746 power_desc[num] = "ride a pet";
5750 powers[num++] = PET_RIDING;
5753 power_desc[num] = "¥Ú¥Ã¥È¤Ë̾Á°¤ò¤Ä¤±¤ë¡£";
5755 power_desc[num] = "name pets";
5758 powers[num++] = PET_NAME;
5760 if (p_ptr->riding && buki_motteruka(INVEN_RARM) && (empty_hands(FALSE) & 0x00000001) && ((inventory[INVEN_RARM].weight > 99) || (inventory[INVEN_RARM].tval == TV_POLEARM)))
5762 if (p_ptr->pet_extra_flags & PF_RYOUTE)
5765 power_desc[num] = "Éð´ï¤òÊÒ¼ê¤Ç»ý¤Ä";
5767 power_desc[num] = "use one hand to control a riding pet";
5774 power_desc[num] = "Éð´ï¤òξ¼ê¤Ç»ý¤Ä";
5776 power_desc[num] = "use both hands for a weapon.";
5781 powers[num++] = PET_RYOUTE;
5784 /* Nothing chosen yet */
5787 /* Build a prompt (accept all spells) */
5790 /* Build a prompt (accept all spells) */
5792 strnfmt(out_val, 78, "(¥³¥Þ¥ó¥É %c-%c¡¢'*'=°ìÍ÷¡¢ESC=½ªÎ») ¥³¥Þ¥ó¥É¤òÁª¤ó¤Ç¤¯¤À¤µ¤¤:",
5794 strnfmt(out_val, 78, "(Command %c-%c, *=List, ESC=exit) Select a command: ",
5797 I2A(0), I2A(num - 1));
5802 strnfmt(out_val, 78, "(¥³¥Þ¥ó¥É %c-%c¡¢'*'=°ìÍ÷¡¢ESC=½ªÎ») ¥³¥Þ¥ó¥É¤òÁª¤ó¤Ç¤¯¤À¤µ¤¤:",
5804 strnfmt(out_val, 78, "(Command %c-%c, *=List, ESC=exit) Select a command: ",
5807 I2A(0), '0' + num - 27);
5813 /* Save the screen */
5820 prt(format("%s%c) %s", (ctr == mode) ? "*" : " ", I2A(ctr), power_desc[ctr]), y + ctr, x);
5826 prt("", y + ctr, x);
5833 /* Get a command from the user */
5834 while (!flag && get_com(out_val, &choice, TRUE))
5836 /* Request redraw */
5837 if ((choice == ' ') || (choice == '*') || (choice == '?'))
5849 /* Save the screen */
5856 sprintf(buf, "%s%c) %s", (ctr == mode) ? "*" : " ", I2A(ctr), power_desc[ctr]);
5857 prt(buf, y + ctr, x);
5863 prt("", y + ctr, x);
5877 /* Restore the screen */
5885 if (choice == '\r' && num == 1)
5890 if (isalpha(choice))
5893 ask = (isupper(choice));
5896 if (ask) choice = tolower(choice);
5898 /* Extract request */
5899 i = (islower(choice) ? A2I(choice) : -1);
5903 ask = FALSE; /* Can't uppercase digits */
5905 i = choice - '0' + 26;
5908 /* Totally Illegal */
5909 if ((i < 0) || (i >= num))
5920 strnfmt(buf, 78, "%s¤ò»È¤¤¤Þ¤¹¤«¡© ", power_desc[i]);
5922 strnfmt(buf, 78, "Use %s? ", power_desc[i]);
5926 /* Belay that order */
5927 if (!get_check(buf)) continue;
5934 /* Restore the screen */
5935 if (redraw) Term_load();
5937 /* Abort if needed */
5946 case PET_DISMISS: /* Dismiss pets */
5951 msg_print("¥Ú¥Ã¥È¤¬¤¤¤Ê¤¤¡ª");
5953 msg_print("You have no pets!");
5957 do_cmd_pet_dismiss();
5958 (void)calculate_upkeep();
5963 project_length = -1;
5964 if (!target_set(TARGET_KILL)) pet_t_m_idx = 0;
5967 cave_type *c_ptr = &cave[target_row][target_col];
5968 if (c_ptr->m_idx && (m_list[c_ptr->m_idx].ml))
5970 pet_t_m_idx = cave[target_row][target_col].m_idx;
5971 p_ptr->pet_follow_distance = PET_DESTROY_DIST;
5973 else pet_t_m_idx = 0;
5980 case PET_STAY_CLOSE:
5982 p_ptr->pet_follow_distance = PET_CLOSE_DIST;
5989 p_ptr->pet_follow_distance = PET_FOLLOW_DIST;
5993 /* "Seek and destoy" */
5994 case PET_SEEK_AND_DESTROY:
5996 p_ptr->pet_follow_distance = PET_DESTROY_DIST;
5999 /* "Give me space" */
6000 case PET_ALLOW_SPACE:
6002 p_ptr->pet_follow_distance = PET_SPACE_DIST;
6008 p_ptr->pet_follow_distance = PET_AWAY_DIST;
6011 /* flag - allow pets to open doors */
6012 case PET_OPEN_DOORS:
6014 if (p_ptr->pet_extra_flags & PF_OPEN_DOORS) p_ptr->pet_extra_flags &= ~(PF_OPEN_DOORS);
6015 else p_ptr->pet_extra_flags |= (PF_OPEN_DOORS);
6018 /* flag - allow pets to pickup items */
6019 case PET_TAKE_ITEMS:
6021 if (p_ptr->pet_extra_flags & PF_PICKUP_ITEMS)
6023 p_ptr->pet_extra_flags &= ~(PF_PICKUP_ITEMS);
6024 for (pet_ctr = m_max - 1; pet_ctr >= 1; pet_ctr--)
6026 /* Access the monster */
6027 m_ptr = &m_list[pet_ctr];
6031 monster_drop_carried_objects(m_ptr);
6035 else p_ptr->pet_extra_flags |= (PF_PICKUP_ITEMS);
6039 /* flag - allow pets to teleport */
6042 if (p_ptr->pet_extra_flags & PF_TELEPORT) p_ptr->pet_extra_flags &= ~(PF_TELEPORT);
6043 else p_ptr->pet_extra_flags |= (PF_TELEPORT);
6046 /* flag - allow pets to cast attack spell */
6047 case PET_ATTACK_SPELL:
6049 if (p_ptr->pet_extra_flags & PF_ATTACK_SPELL) p_ptr->pet_extra_flags &= ~(PF_ATTACK_SPELL);
6050 else p_ptr->pet_extra_flags |= (PF_ATTACK_SPELL);
6053 /* flag - allow pets to cast attack spell */
6054 case PET_SUMMON_SPELL:
6056 if (p_ptr->pet_extra_flags & PF_SUMMON_SPELL) p_ptr->pet_extra_flags &= ~(PF_SUMMON_SPELL);
6057 else p_ptr->pet_extra_flags |= (PF_SUMMON_SPELL);
6060 /* flag - allow pets to cast attack spell */
6061 case PET_BALL_SPELL:
6063 if (p_ptr->pet_extra_flags & PF_BALL_SPELL) p_ptr->pet_extra_flags &= ~(PF_BALL_SPELL);
6064 else p_ptr->pet_extra_flags |= (PF_BALL_SPELL);
6082 if (p_ptr->pet_extra_flags & PF_RYOUTE) p_ptr->pet_extra_flags &= ~(PF_RYOUTE);
6083 else p_ptr->pet_extra_flags |= (PF_RYOUTE);
6084 p_ptr->update |= (PU_BONUS);