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;
71 unsigned char jverb_buf[128];
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 */
1320 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return FALSE;
1321 (void)teleport_player_level();
1323 case 22: /* Word of Recall */
1324 if (!word_of_recall()) return FALSE;
1326 case 23: /* Explosive Rune */
1329 case 24: /* Probing */
1332 case 25: /* Telekinesis */
1333 if (!get_aim_dir(&dir)) return FALSE;
1335 fetch(dir, plev * 15, FALSE);
1337 case 26: /* Clairvoyance */
1338 chg_virtue(V_KNOWLEDGE, 1);
1339 chg_virtue(V_ENLIGHTEN, 1);
1341 wiz_lite(FALSE, FALSE);
1342 if (!(p_ptr->telepathy))
1344 (void)set_tim_esp(randint(30) + 25, FALSE);
1347 case 27: /* Charm Monsters */
1348 charm_monsters(plev * 2);
1350 case 28: /* Dimension Door */
1352 msg_print("¼¡¸µ¤ÎÈ⤬³«¤¤¤¿¡£ÌÜŪÃϤòÁª¤ó¤Ç²¼¤µ¤¤¡£");
1354 msg_print("You open a dimensional gate. Choose a destination.");
1357 return dimension_door();
1358 case 29: /* Alchemy */
1360 case 30: /* Banish */
1361 banish_monsters(plev * 4);
1363 case 31: /* Globe of Invulnerability */
1364 (void)set_invuln(randint(4) + 4, FALSE);
1368 msg_format("¤¢¤Ê¤¿¤ÏÉÔÌÀ¤Ê¥½¡¼¥µ¥ê¡¼¤Î¼öʸ %d ¤ò¾§¤¨¤¿¡£", spell);
1370 msg_format("You cast an unknown Sorcery spell: %d.", spell);
1380 static bool cast_nature_spell(int spell)
1384 int plev = p_ptr->lev;
1385 bool no_trump = FALSE;
1387 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
1388 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
1389 else beam = plev / 2;
1393 case 0: /* Detect Creatures */
1394 (void)detect_monsters_normal(DETECT_RAD_DEFAULT);
1396 case 1: /* Lightning Bolt */
1397 project_length = plev / 6 + 2;
1398 if (!get_aim_dir(&dir)) return FALSE;
1400 fire_beam(GF_ELEC, dir,
1401 damroll(3 + ((plev - 1) / 5), 4));
1403 case 2: /* Detect Doors & Traps */
1404 (void)detect_traps(DETECT_RAD_DEFAULT);
1405 (void)detect_doors(DETECT_RAD_DEFAULT);
1406 (void)detect_stairs(DETECT_RAD_DEFAULT);
1408 case 3: /* Produce Food */
1409 (void)set_food(PY_FOOD_MAX - 1);
1411 case 4: /* Daylight */
1412 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
1413 if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)
1416 msg_print("Æü¤Î¸÷¤¬¤¢¤Ê¤¿¤ÎÆùÂΤò¾Ç¤¬¤·¤¿¡ª");
1418 msg_print("The daylight scorches your flesh!");
1422 take_hit(DAMAGE_NOESCAPE, damroll(2, 2), "Æü¤Î¸÷", -1);
1424 take_hit(DAMAGE_NOESCAPE, damroll(2, 2), "daylight", -1);
1429 case 5: /* Animal Taming */
1430 if (!get_aim_dir(&dir)) return FALSE;
1432 (void)charm_animal(dir, plev);
1434 case 6: /* Resist Environment */
1435 (void)set_oppose_cold(randint(20) + 20, FALSE);
1436 (void)set_oppose_fire(randint(20) + 20, FALSE);
1437 (void)set_oppose_elec(randint(20) + 20, FALSE);
1439 case 7: /* Cure Wounds & Poison */
1440 (void)hp_player(damroll(2, 8));
1442 (void)set_poisoned(0);
1444 case 8: /* Stone to Mud */
1445 if (!get_aim_dir(&dir)) return FALSE;
1447 (void)wall_to_mud(dir);
1449 case 9: /* Frost Bolt */
1450 if (!get_aim_dir(&dir)) return FALSE;
1451 fire_bolt_or_beam(beam - 10, GF_COLD, dir,
1452 damroll(3 + ((plev - 5) / 4), 8));
1454 case 10: /* Nature Awareness -- downgraded */
1455 map_area(DETECT_RAD_MAP);
1456 (void)detect_traps(DETECT_RAD_DEFAULT);
1457 (void)detect_doors(DETECT_RAD_DEFAULT);
1458 (void)detect_stairs(DETECT_RAD_DEFAULT);
1459 (void)detect_monsters_normal(DETECT_RAD_DEFAULT);
1461 case 11: /* Fire Bolt */
1462 if (!get_aim_dir(&dir)) return FALSE;
1463 fire_bolt_or_beam(beam - 10, GF_FIRE, dir,
1464 damroll(5 + ((plev - 5) / 4), 8));
1466 case 12: /* Ray of Sunlight */
1467 if (!get_aim_dir(&dir)) return FALSE;
1469 msg_print("ÂÀÍÛ¸÷Àþ¤¬¸½¤ì¤¿¡£");
1471 msg_print("A line of sunlight appears.");
1474 (void)lite_line(dir);
1476 case 13: /* Entangle */
1479 case 14: /* Summon Animals */
1480 if (!(summon_specific(-1, py, px, plev, SUMMON_ANIMAL_RANGER, TRUE, TRUE, TRUE, FALSE, FALSE)))
1483 case 15: /* Herbal Healing */
1484 (void)hp_player(500);
1487 (void)set_poisoned(0);
1489 case 16: /* Stair Building */
1490 (void)stair_creation();
1492 case 17: /* Stone Skin */
1493 (void)set_shield(randint(20) + 30, FALSE);
1495 case 18: /* Resistance True */
1496 (void)set_oppose_acid(randint(20) + 20, FALSE);
1497 (void)set_oppose_elec(randint(20) + 20, FALSE);
1498 (void)set_oppose_fire(randint(20) + 20, FALSE);
1499 (void)set_oppose_cold(randint(20) + 20, FALSE);
1500 (void)set_oppose_pois(randint(20) + 20, FALSE);
1502 case 19: /* Tree Creation */
1503 (void)tree_creation();
1505 case 20: /* Animal Friendship */
1506 (void)charm_animals(plev * 2);
1508 case 21: /* Stone Tell */
1509 return identify_fully(FALSE);
1510 case 22: /* Wall of Stone */
1513 case 23: /* Protection from Corrosion */
1515 case 24: /* Earthquake */
1516 earthquake(py, px, 10);
1518 case 25: /* Whirlwind Attack */
1522 monster_type *m_ptr;
1524 for (dir = 0; dir < 8; dir++)
1526 y = py + ddy_ddd[dir];
1527 x = px + ddx_ddd[dir];
1528 c_ptr = &cave[y][x];
1530 /* Get the monster */
1531 m_ptr = &m_list[c_ptr->m_idx];
1533 /* Hack -- attack monsters */
1534 if (c_ptr->m_idx && (m_ptr->ml || cave_floor_bold(y, x)))
1539 case 26: /* Blizzard */
1540 if (!get_aim_dir(&dir)) return FALSE;
1542 fire_ball(GF_COLD, dir, 70 + plev * 3 / 2, (plev / 12) + 1);
1544 case 27: /* Lightning Storm */
1545 if (!get_aim_dir(&dir)) return FALSE;
1546 fire_ball(GF_ELEC, dir, 90 + plev * 3 / 2, (plev / 12) + 1);
1548 case 28: /* Whirlpool */
1549 if (!get_aim_dir(&dir)) return FALSE;
1550 fire_ball(GF_WATER, dir, 100 + plev * 3 / 2, (plev / 12) + 1);
1552 case 29: /* Call Sunlight */
1553 fire_ball(GF_LITE, 0, 150, 8);
1554 chg_virtue(V_KNOWLEDGE, 1);
1555 chg_virtue(V_ENLIGHTEN, 1);
1556 wiz_lite(FALSE, FALSE);
1557 if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)
1560 msg_print("Æü¸÷¤¬¤¢¤Ê¤¿¤ÎÆùÂΤò¾Ç¤¬¤·¤¿¡ª");
1562 msg_print("The sunlight scorches your flesh!");
1566 take_hit(DAMAGE_NOESCAPE, 50, "Æü¸÷", -1);
1568 take_hit(DAMAGE_NOESCAPE, 50, "sunlight", -1);
1573 case 30: /* Elemental Branding */
1574 brand_weapon(rand_int(2));
1576 case 31: /* Nature's Wrath */
1577 (void)dispel_monsters(plev * 4);
1578 earthquake(py, px, 20 + (plev / 2));
1579 project(0, 1 + plev / 12, py, px,
1580 (100 + plev) * 2, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM, -1);
1584 msg_format("¤¢¤Ê¤¿¤ÏÉÔÌÀ¤Ê¥Í¥¤¥Á¥ã¡¼¤Î¼öʸ %d ¤ò¾§¤¨¤¿¡£", spell);
1586 msg_format("You cast an unknown Nature spell: %d.", spell);
1594 msg_print("ưʪ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
1596 msg_print("No animals arrive.");
1604 static bool cast_chaos_spell(int spell)
1607 int plev = p_ptr->lev;
1609 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
1610 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
1611 else beam = plev / 2;
1615 case 0: /* Magic Missile */
1616 if (!get_aim_dir(&dir)) return FALSE;
1618 fire_bolt_or_beam(beam - 10, GF_MISSILE, dir,
1619 damroll(3 + ((plev - 1) / 5), 4));
1621 case 1: /* Trap / Door destruction */
1622 (void)destroy_doors_touch();
1624 case 2: /* Flash of Light == Light Area */
1625 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
1627 case 3: /* Touch of Confusion */
1628 if (!(p_ptr->special_attack & ATTACK_CONFUSE))
1631 msg_print("¤¢¤Ê¤¿¤Î¼ê¤Ï¸÷¤ê»Ï¤á¤¿¡£");
1633 msg_print("Your hands start glowing.");
1636 p_ptr->special_attack |= ATTACK_CONFUSE;
1637 p_ptr->redraw |= (PR_STATUS);
1640 case 4: /* Mana Burst */
1641 if (!get_aim_dir(&dir)) return FALSE;
1643 fire_ball(GF_MISSILE, dir,
1644 (damroll(3, 5) + plev +
1645 (plev / (((p_ptr->pclass == CLASS_MAGE)
1646 || (p_ptr->pclass == CLASS_HIGH_MAGE)
1647 || (p_ptr->pclass == CLASS_SORCERER)) ? 2 : 4))),
1648 ((plev < 30) ? 2 : 3));
1649 /* Shouldn't actually use GF_MANA, as it will destroy all
1650 * items on the floor */
1652 case 5: /* Fire Bolt */
1653 if (!get_aim_dir(&dir)) return FALSE;
1655 fire_bolt_or_beam(beam, GF_FIRE, dir,
1656 damroll(8 + ((plev - 5) / 4), 8));
1658 case 6: /* Fist of Force ("Fist of Fun") */
1659 if (!get_aim_dir(&dir)) return FALSE;
1661 fire_ball(GF_DISINTEGRATE, dir,
1662 damroll(8 + ((plev - 5) / 4), 8), 0);
1664 case 7: /* Teleport Self */
1665 teleport_player(plev * 5);
1667 case 8: /* Wonder */
1669 /* This spell should become more useful (more
1670 controlled) as the player gains experience levels.
1671 Thus, add 1/5 of the player's level to the die roll.
1672 This eliminates the worst effects later on, while
1673 keeping the results quite random. It also allows
1674 some potent effects only at high level. */
1676 int die = randint(100) + plev / 5;
1677 int vir = virtue_number(V_CHANCE);
1680 if (p_ptr->virtues[vir - 1] > 0)
1682 while (randint(400) < p_ptr->virtues[vir - 1]) die++;
1686 while (randint(400) < (0-p_ptr->virtues[vir - 1])) die--;
1691 chg_virtue(V_CHANCE, 1);
1693 if (!get_aim_dir(&dir)) return FALSE;
1696 msg_print("¤¢¤Ê¤¿¤ÏÎϤ¬¤ß¤Ê¤®¤ë¤Î¤ò´¶¤¸¤¿¡ª");
1698 msg_print("You feel a surge of power!");
1701 if (die < 8) clone_monster(dir);
1702 else if (die < 14) speed_monster(dir);
1703 else if (die < 26) heal_monster(dir, damroll(4, 6));
1704 else if (die < 31) poly_monster(dir);
1706 fire_bolt_or_beam(beam - 10, GF_MISSILE, dir,
1707 damroll(3 + ((plev - 1) / 5), 4));
1708 else if (die < 41) confuse_monster(dir, plev);
1709 else if (die < 46) fire_ball(GF_POIS, dir, 20 + (plev / 2), 3);
1710 else if (die < 51) (void)lite_line(dir);
1712 fire_bolt_or_beam(beam - 10, GF_ELEC, dir,
1713 damroll(3 + ((plev - 5) / 4), 8));
1715 fire_bolt_or_beam(beam - 10, GF_COLD, dir,
1716 damroll(5 + ((plev - 5) / 4), 8));
1718 fire_bolt_or_beam(beam, GF_ACID, dir,
1719 damroll(6 + ((plev - 5) / 4), 8));
1721 fire_bolt_or_beam(beam, GF_FIRE, dir,
1722 damroll(8 + ((plev - 5) / 4), 8));
1723 else if (die < 76) drain_life(dir, 75);
1724 else if (die < 81) fire_ball(GF_ELEC, dir, 30 + plev / 2, 2);
1725 else if (die < 86) fire_ball(GF_ACID, dir, 40 + plev, 2);
1726 else if (die < 91) fire_ball(GF_ICE, dir, 70 + plev, 3);
1727 else if (die < 96) fire_ball(GF_FIRE, dir, 80 + plev, 3);
1728 else if (die < 101) drain_life(dir, 100 + plev);
1731 earthquake(py, px, 12);
1735 destroy_area(py, px, 13+rand_int(5), TRUE);
1739 symbol_genocide(plev+50, TRUE);
1741 else if (die < 110) dispel_monsters(120);
1744 dispel_monsters(150);
1752 case 9: /* Chaos Bolt */
1753 if (!get_aim_dir(&dir)) return FALSE;
1755 fire_bolt_or_beam(beam, GF_CHAOS, dir,
1756 damroll(10 + ((plev - 5) / 4), 8));
1758 case 10: /* Sonic Boom */
1760 msg_print("¥É¡¼¥ó¡ªÉô²°¤¬Íɤ줿¡ª");
1762 msg_print("BOOM! Shake the room!");
1765 project(0, plev / 10 + 2, py, px,
1766 (60 + plev), GF_SOUND, PROJECT_KILL | PROJECT_ITEM, -1);
1768 case 11: /* Doom Bolt -- always beam in 2.0.7 or later */
1769 if (!get_aim_dir(&dir)) return FALSE;
1771 fire_beam(GF_MANA, dir, damroll(11 + ((plev - 5) / 4), 8));
1773 case 12: /* Fire Ball */
1774 if (!get_aim_dir(&dir)) return FALSE;
1776 fire_ball(GF_FIRE, dir, plev + 55, 2);
1778 case 13: /* Teleport Other */
1779 if (!get_aim_dir(&dir)) return FALSE;
1781 (void)fire_beam(GF_AWAY_ALL, dir, plev);
1783 case 14: /* Word of Destruction */
1784 destroy_area(py, px, 13+rand_int(5), TRUE);
1786 case 15: /* Invoke Logrus */
1787 if (!get_aim_dir(&dir)) return FALSE;
1789 fire_ball(GF_CHAOS, dir, plev*2 + 99, plev / 5);
1791 case 16: /* Polymorph Other */
1792 if (!get_aim_dir(&dir)) return FALSE;
1794 (void)poly_monster(dir);
1796 case 17: /* Chain Lightning */
1797 for (dir = 0; dir <= 9; dir++)
1798 fire_beam(GF_ELEC, dir, damroll(5 + (plev / 10), 8));
1800 case 18: /* Arcane Binding == Charging */
1801 return recharge(90);
1802 case 19: /* Disintegration */
1803 if (!get_aim_dir(&dir)) return FALSE;
1805 fire_ball(GF_DISINTEGRATE, dir, plev + 70, 3 + plev / 40);
1807 case 20: /* Alter Reality */
1810 case 21: /* Magic Rocket */
1811 if (!get_aim_dir(&dir)) return FALSE;
1814 msg_print("¥í¥±¥Ã¥Èȯ¼Í¡ª");
1816 msg_print("You launch a rocket!");
1819 fire_rocket(GF_ROCKET, dir, 120 + plev*2, 2);
1821 case 22: /* Chaos Branding */
1824 case 23: /* Summon monster, demon */
1826 bool pet = (randint(3) == 1);
1827 bool group = !(pet && (plev < 50));
1829 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, SUMMON_DEMON, group, FALSE, pet, FALSE, !pet))
1832 msg_print("ⲫ¤Î°½¤¬½¼Ëþ¤·¤¿¡£");
1834 msg_print("The area fills with a stench of sulphur and brimstone.");
1840 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
1842 msg_print("'What is thy bidding... Master?'");
1847 msg_print("¡ÖÈܤ·¤¼Ô¤è¡¢²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª ¤ªÁ°¤Îº²¤òĺ¤¯¤¾¡ª¡×");
1849 msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'");
1855 case 24: /* Beam of Gravity */
1856 if (!get_aim_dir(&dir)) return FALSE;
1858 fire_beam(GF_GRAVITY, dir, damroll(9 + ((plev - 5) / 4), 8));
1860 case 25: /* Meteor Swarm */
1863 int b = 10 + randint(10);
1864 for (i = 0; i < b; i++)
1866 int count = 0, d = 0;
1871 if (count > 20) break;
1872 x = px - 8 + rand_int(17);
1873 y = py - 8 + rand_int(17);
1875 if (!in_bounds(y,x) || (!cave_floor_bold(y,x) && (cave[y][x].feat != FEAT_TREES)) || !player_has_los_bold(y, x)) continue;
1877 dx = (px > x) ? (px - x) : (x - px);
1878 dy = (py > y) ? (py - y) : (y - py);
1880 /* Approximate distance */
1881 d = (dy > dx) ? (dy + (dx >> 1)) : (dx + (dy >> 1));
1885 if (count > 20) continue;
1887 project(0, 2, y, x, plev * 2, GF_METEOR, PROJECT_KILL | PROJECT_JUMP | PROJECT_ITEM, -1);
1891 case 26: /* Flame Strike */
1892 fire_ball(GF_FIRE, 0, 300 + (3 * plev), 8);
1894 case 27: /* Call Chaos */
1897 case 28: /* Polymorph Self */
1899 if (!get_check("ÊѿȤ·¤Þ¤¹¡£¤è¤í¤·¤¤¤Ç¤¹¤«¡©")) return FALSE;
1901 if (!get_check("You will polymorph yourself. Are you sure?")) return FALSE;
1905 case 29: /* Mana Storm */
1906 if (!get_aim_dir(&dir)) return FALSE;
1908 fire_ball(GF_MANA, dir, 300 + (plev * 4), 4);
1910 case 30: /* Breathe Logrus */
1911 if (!get_aim_dir(&dir)) return FALSE;
1913 fire_ball(GF_CHAOS, dir, p_ptr->chp, 2);
1915 case 31: /* Call the Void */
1920 msg_format("¤¢¤Ê¤¿¤ÏÉÔÌÀ¤Ê¥«¥ª¥¹¤Î¼öʸ %d ¤ò¾§¤¨¤¿¡£", spell);
1922 msg_format("You cast an unknown Chaos spell: %d.", spell);
1932 static bool cast_death_spell(int spell)
1936 int plev = p_ptr->lev;
1939 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
1940 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
1941 else beam = plev / 2;
1945 case 0: /* Detect Undead & Demons -> Unlife */
1946 (void)detect_monsters_nonliving(DETECT_RAD_DEFAULT);
1948 case 1: /* Malediction */
1949 if (!get_aim_dir(&dir)) return FALSE;
1950 /* A radius-0 ball may (1) be aimed at objects etc.,
1951 * and will affect them; (2) may be aimed at ANY
1952 * visible monster, unlike a 'bolt' which must travel
1953 * to the monster. */
1955 fire_ball(GF_HELL_FIRE, dir,
1956 damroll(3 + ((plev - 1) / 5), 4), 0);
1958 if (randint(5) == 1)
1959 { /* Special effect first */
1960 dummy = randint(1000);
1962 fire_ball_hide(GF_DEATH_RAY, dir, plev * 200, 0);
1963 else if (dummy < 500)
1964 fire_ball_hide(GF_TURN_ALL, dir, plev, 0);
1965 else if (dummy < 800)
1966 fire_ball_hide(GF_OLD_CONF, dir, plev, 0);
1968 fire_ball_hide(GF_STUN, dir, plev, 0);
1971 case 2: /* Detect Evil */
1972 (void)detect_monsters_evil(DETECT_RAD_DEFAULT);
1974 case 3: /* Stinking Cloud */
1975 if (!get_aim_dir(&dir)) return FALSE;
1977 fire_ball(GF_POIS, dir, 10 + (plev / 2), 2);
1979 case 4: /* Black Sleep */
1980 if (!get_aim_dir(&dir)) return FALSE;
1982 (void)sleep_monster(dir);
1984 case 5: /* Resist Poison */
1985 (void)set_oppose_pois(randint(20) + 20, FALSE);
1987 case 6: /* Horrify */
1988 if (!get_aim_dir(&dir)) return FALSE;
1990 (void)fear_monster(dir, plev);
1991 (void)stun_monster(dir, plev);
1993 case 7: /* Enslave Undead */
1994 if (!get_aim_dir(&dir)) return FALSE;
1996 (void)control_one_undead(dir, plev);
1998 case 8: /* Orb of Entropy */
1999 if (!get_aim_dir(&dir)) return FALSE;
2001 fire_ball(GF_OLD_DRAIN, dir,
2002 (damroll(3, 6) + plev +
2003 (plev / (((p_ptr->pclass == CLASS_MAGE) ||
2004 (p_ptr->pclass == CLASS_HIGH_MAGE) ||
2005 (p_ptr->pclass == CLASS_SORCERER)) ? 2 : 4))),
2006 ((plev < 30) ? 2 : 3));
2008 case 9: /* Nether Bolt */
2009 if (!get_aim_dir(&dir)) return FALSE;
2011 fire_bolt_or_beam(beam, GF_NETHER, dir,
2012 damroll(8 + ((plev - 5) / 4), 8));
2014 case 10: /* Cloud kill */
2015 project(0, plev / 10 + 2, py, px,
2016 (30 + plev) * 2, GF_POIS, PROJECT_KILL | PROJECT_ITEM, -1);
2018 case 11: /* Genocide One */
2019 if (!get_aim_dir(&dir)) return FALSE;
2021 fire_ball_hide(GF_GENOCIDE, dir, plev + 50, 0);
2023 case 12: /* Poison Branding */
2026 case 13: /* Vampiric Drain */
2027 if (!get_aim_dir(&dir)) return FALSE;
2029 dummy = plev * 2 + randint(plev * 2); /* Dmg */
2030 if (drain_life(dir, dummy))
2032 chg_virtue(V_SACRIFICE, -1);
2033 chg_virtue(V_VITALITY, -1);
2035 (void)hp_player(dummy);
2036 /* Gain nutritional sustenance: 150/hp drained */
2037 /* A Food ration gives 5000 food points (by contrast) */
2038 /* Don't ever get more than "Full" this way */
2039 /* But if we ARE Gorged, it won't cure us */
2040 dummy = p_ptr->food + MIN(5000, 100 * dummy);
2041 if (p_ptr->food < PY_FOOD_MAX) /* Not gorged already */
2042 (void)set_food(dummy >= PY_FOOD_MAX ? PY_FOOD_MAX - 1 : dummy);
2045 case 14: /* Animate Dead */
2046 animate_dead(0, py, px);
2048 case 15: /* Genocide */
2049 (void)symbol_genocide(plev+50, TRUE);
2051 case 16: /* Berserk */
2052 (void)set_shero(randint(25) + 25, FALSE);
2053 (void)hp_player(30);
2054 (void)set_afraid(0);
2056 case 17: /* Invoke Spirits */
2058 int die = randint(100) + plev / 5;
2059 int vir = virtue_number(V_CHANCE);
2062 if (p_ptr->virtues[vir - 1] > 0)
2064 while (randint(400) < p_ptr->virtues[vir - 1]) die++;
2068 while (randint(400) < (0-p_ptr->virtues[vir - 1])) die--;
2072 if (!get_aim_dir(&dir)) return FALSE;
2075 msg_print("¤¢¤Ê¤¿¤Ï»à¼Ô¤¿¤Á¤ÎÎϤò¾·½¸¤·¤¿...");
2077 msg_print("You call on the power of the dead...");
2080 chg_virtue(V_CHANCE, 1);
2084 msg_print("¤¢¤Ê¤¿¤Ï¤ª¤É¤í¤ª¤É¤í¤·¤¤ÎϤΤ¦¤Í¤ê¤ò´¶¤¸¤¿¡ª");
2086 msg_print("You feel a surge of eldritch force!");
2093 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¤¢¤Ê¤¿¤Î¼þ¤ê¤ÎÃÏÌ̤«¤éµà¤Á¤¿¿Í±Æ¤¬Î©¤Á¾å¤¬¤Ã¤Æ¤¤¿¡ª");
2095 msg_print("Oh no! Mouldering forms rise from the earth around you!");
2098 (void)summon_specific(0, py, px, dun_level, SUMMON_UNDEAD, TRUE, FALSE, FALSE, TRUE, TRUE);
2099 chg_virtue(V_UNLIFE, 1);
2104 msg_print("̾¾õ¤·Æñ¤¤¼Ù°¤Ê¸ºß¤¬¤¢¤Ê¤¿¤Î¿´¤òÄ̤ê²á¤®¤Æ¹Ô¤Ã¤¿...");
2106 msg_print("An unnamable evil brushes against your mind...");
2109 set_afraid(p_ptr->afraid + randint(4) + 4);
2114 msg_print("¤¢¤Ê¤¿¤ÎƬ¤ËÂçÎ̤ÎÍ©Î¤Á¤ÎÁû¡¹¤·¤¤À¼¤¬²¡¤·´ó¤»¤Æ¤¤¿...");
2116 msg_print("Your head is invaded by a horde of gibbering spectral voices...");
2119 set_confused(p_ptr->confused + randint(4) + 4);
2127 fire_bolt_or_beam(beam - 10, GF_MISSILE, dir,
2128 damroll(3 + ((plev - 1) / 5), 4));
2132 confuse_monster (dir, plev);
2136 fire_ball(GF_POIS, dir, 20 + (plev / 2), 3);
2140 (void)lite_line(dir);
2144 fire_bolt_or_beam(beam - 10, GF_ELEC, dir,
2145 damroll(3+((plev-5)/4),8));
2149 fire_bolt_or_beam(beam - 10, GF_COLD, dir,
2150 damroll(5+((plev-5)/4),8));
2154 fire_bolt_or_beam(beam, GF_ACID, dir,
2155 damroll(6+((plev-5)/4),8));
2159 fire_bolt_or_beam(beam, GF_FIRE, dir,
2160 damroll(8+((plev-5)/4),8));
2164 drain_life(dir, 75);
2168 fire_ball(GF_ELEC, dir, 30 + plev / 2, 2);
2172 fire_ball(GF_ACID, dir, 40 + plev, 2);
2176 fire_ball(GF_ICE, dir, 70 + plev, 3);
2180 fire_ball(GF_FIRE, dir, 80 + plev, 3);
2184 drain_life(dir, 100 + plev);
2188 earthquake(py, px, 12);
2192 destroy_area(py, px, 13+rand_int(5), TRUE);
2196 symbol_genocide(plev+50, TRUE);
2200 dispel_monsters(120);
2204 dispel_monsters(150);
2212 msg_print("±¢±µ¤ÊÀ¼¤¬¥¯¥¹¥¯¥¹¾Ð¤¦¡£¡Ö¤â¤¦¤¹¤°¤ª¤Þ¤¨¤Ï²æ¡¹¤ÎÃç´Ö¤Ë¤Ê¤ë¤À¤í¤¦¡£¼å¤¼Ô¤è¡£¡×");
2214 msg_print("Sepulchral voices chuckle. 'Soon you will join us, mortal.'");
2219 case 18: /* Dark Bolt */
2220 if (!get_aim_dir(&dir)) return FALSE;
2222 fire_bolt_or_beam(beam, GF_DARK, dir,
2223 damroll(4 + ((plev - 5) / 4), 8));
2225 case 19: /* Battle Frenzy */
2226 (void)set_shero(randint(25) + 25, FALSE);
2227 (void)hp_player(30);
2228 (void)set_afraid(0);
2229 (void)set_fast(randint(20 + (plev / 2)) + (plev / 2), FALSE);
2231 case 20: /* Vampiric Branding */
2234 case 21: /* Vampirism True */
2235 if (!get_aim_dir(&dir)) return FALSE;
2237 chg_virtue(V_SACRIFICE, -1);
2238 chg_virtue(V_VITALITY, -1);
2240 for (dummy = 0; dummy < 3; dummy++)
2242 if (drain_life(dir, 100))
2246 case 22: /* Word of Death */
2247 (void)dispel_living(randint(plev * 3));
2249 case 23: /* Darkness Storm */
2250 if (!get_aim_dir(&dir)) return FALSE;
2252 fire_ball(GF_DARK, dir, 100+plev*2, 4);
2254 case 24: /* Death Ray */
2255 if (!get_aim_dir(&dir)) return FALSE;
2257 (void)death_ray(dir, plev);
2259 case 25: /* Raise the Dead */
2261 bool pet = (randint(3) == 1);
2265 type = (plev > 47 ? SUMMON_HI_UNDEAD : SUMMON_UNDEAD);
2268 group = (((plev > 24) && (randint(3) == 1)) ? TRUE : FALSE);
2275 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, type, group, FALSE, pet, !pet, !pet))
2278 msg_print("Î䤿¤¤É÷¤¬¤¢¤Ê¤¿¤Î¼þ¤ê¤Ë¿á¤»Ï¤á¤¿¡£¤½¤ì¤ÏÉåÇÔ½¤ò±¿¤ó¤Ç¤¤¤ë...");
2280 msg_print("Cold winds begin to blow around you, carrying with them the stench of decay...");
2286 msg_print("¸Å¤¨¤Î»à¤»¤ë¼Ô¶¦¤¬¤¢¤Ê¤¿¤Ë»Å¤¨¤ë¤¿¤áÅÚ¤«¤éᴤä¿¡ª");
2288 msg_print("Ancient, long-dead forms arise from the ground to serve you!");
2293 msg_print("»à¼Ô¤¬á´¤Ã¤¿¡£Ì²¤ê¤ò˸¤²¤ë¤¢¤Ê¤¿¤òȳ¤¹¤ë¤¿¤á¤Ë¡ª");
2295 msg_print("'The dead arise... to punish you for disturbing them!'");
2298 chg_virtue(V_UNLIFE, 1);
2303 case 26: /* Esoteria */
2304 if (randint(50) > plev)
2305 return ident_spell(FALSE);
2307 return identify_fully(FALSE);
2309 case 27: /* Mimic vampire */
2310 (void)set_mimic(10+plev/2 + randint(10+plev/2), MIMIC_VAMPIRE, FALSE);
2312 case 28: /* Restore Life */
2313 (void)restore_level();
2315 case 29: /* Mass Genocide */
2316 (void)mass_genocide(plev+50, TRUE);
2318 case 30: /* Hellfire */
2319 if (!get_aim_dir(&dir)) return FALSE;
2321 fire_ball(GF_HELL_FIRE, dir, 666, 3);
2323 take_hit(DAMAGE_USELIFE, 20 + randint(30), "ÃϹö¤Î¹å²Ð¤Î¼öʸ¤ò¾§¤¨¤¿ÈèÏ«", -1);
2325 take_hit(DAMAGE_USELIFE, 20 + randint(30), "the strain of casting Hellfire", -1);
2329 case 31: /* Wraithform */
2330 set_wraith_form(randint(plev / 2) + (plev / 2), FALSE);
2333 msg_format("You cast an unknown Death spell: %d.", spell);
2341 static bool cast_trump_spell(int spell, bool success)
2345 int plev = p_ptr->lev;
2346 int summon_lev = plev * 2 / 3 + randint(plev/2);
2348 bool no_trump = FALSE;
2349 bool unique_okay = FALSE;
2352 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
2353 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
2354 else beam = plev / 2;
2356 if (summon_lev < 1) summon_lev = 1;
2357 if (!success || (randint(50+plev) < plev/10)) unique_okay = TRUE;
2360 case 0: /* Phase Door */
2363 teleport_player(10);
2366 case 1: /* Trump Spiders */
2368 bool pet = success; /* (randint(5) > 2) */
2371 msg_print("¤¢¤Ê¤¿¤ÏÃØéá¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2373 msg_print("You concentrate on the trump of an spider...");
2377 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_SPIDER, TRUE, FALSE, pet, FALSE, !pet))
2381 msg_print("¾¤´Ô¤µ¤ì¤¿ÃØéá¤ÏÅܤäƤ¤¤ë¡ª");
2383 msg_print("The summoned spiders get angry!");
2394 case 2: /* Shuffle */
2397 /* A limited power 'wonder' spell */
2398 int die = randint(120);
2399 int vir = virtue_number(V_CHANCE);
2401 if ((p_ptr->pclass == CLASS_ROGUE) ||
2402 (p_ptr->pclass == CLASS_HIGH_MAGE) ||
2403 (p_ptr->pclass == CLASS_SORCERER))
2404 die = (randint(110)) + plev / 5;
2405 /* Card sharks and high mages get a level bonus */
2409 if (p_ptr->virtues[vir - 1] > 0)
2411 while (randint(400) < p_ptr->virtues[vir - 1]) die++;
2415 while (randint(400) < (0-p_ptr->virtues[vir - 1])) die--;
2420 msg_print("¤¢¤Ê¤¿¤Ï¥«¡¼¥É¤òÀڤäưìËç°ú¤¤¤¿...");
2422 msg_print("You shuffle the deck and draw a card...");
2426 chg_virtue(V_CHANCE, 1);
2431 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡Ô»à¡Õ¤À¡ª");
2433 msg_print("Oh no! It's Death!");
2436 for (dummy = 0; dummy < randint(3); dummy++)
2437 (void)activate_hi_summon(py, px, FALSE);
2442 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡Ô°Ëâ¡Õ¤À¡ª");
2444 msg_print("Oh no! It's the Devil!");
2447 (void)summon_specific(0, py, px, dun_level, SUMMON_DEMON, TRUE, FALSE, FALSE, TRUE, TRUE);
2453 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡ÔÄߤé¤ì¤¿ÃË¡Õ¤À¡ª");
2455 msg_print("Oh no! It's the Hanged Man.");
2458 (void)activate_ty_curse(FALSE, &count);
2463 msg_print("¡ÔÉÔĴϤηõ¡Õ¤À¡£");
2465 msg_print("It's the swords of discord.");
2468 aggravate_monsters(0);
2473 msg_print("¡Ô¶ò¼Ô¡Õ¤À¡£");
2475 msg_print("It's the Fool.");
2478 (void)do_dec_stat(A_INT);
2479 (void)do_dec_stat(A_WIS);
2484 msg_print("´ñ̯¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
2486 msg_print("It's the picture of a strange monster.");
2489 if (!(summon_specific(0, py, px, (dun_level * 3) / 2, 32 + randint(6), TRUE, FALSE, FALSE, TRUE, TRUE)))
2495 msg_print("¡Ô·î¡Õ¤À¡£");
2497 msg_print("It's the Moon.");
2505 msg_print("¡Ô±¿Ì¿¤ÎÎØ¡Õ¤À¡£");
2507 msg_print("It's the Wheel of Fortune.");
2510 wild_magic(rand_int(32));
2515 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
2517 msg_print("It's a teleport trump card.");
2520 teleport_player(10);
2525 msg_print("¡ÔÀµµÁ¡Õ¤À¡£");
2527 msg_print("It's Justice.");
2530 set_blessed(p_ptr->lev, FALSE);
2535 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
2537 msg_print("It's a teleport trump card.");
2540 teleport_player(100);
2545 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
2547 msg_print("It's a teleport trump card.");
2550 teleport_player(200);
2555 msg_print("¡ÔÅã¡Õ¤À¡£");
2557 msg_print("It's the Tower.");
2565 msg_print("¡ÔÀáÀ©¡Õ¤À¡£");
2567 msg_print("It's Temperance.");
2570 sleep_monsters_touch();
2575 msg_print("¡ÔÅã¡Õ¤À¡£");
2577 msg_print("It's the Tower.");
2580 earthquake(py, px, 5);
2585 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
2587 msg_print("It's the picture of a friendly monster.");
2590 if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE1, FALSE, TRUE, TRUE, FALSE, FALSE)))
2596 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
2598 msg_print("It's the picture of a friendly monster.");
2601 if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE2, FALSE, TRUE, TRUE, FALSE, FALSE)))
2607 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
2609 msg_print("It's the picture of a friendly monster.");
2612 if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE4, FALSE, TRUE, TRUE, FALSE, FALSE)))
2618 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
2620 msg_print("It's the picture of a friendly monster.");
2623 if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE5, FALSE, TRUE, TRUE, FALSE, FALSE)))
2629 msg_print("¡ÔÎø¿Í¡Õ¤À¡£");
2631 msg_print("It's the Lovers.");
2634 if (get_aim_dir(&dir))
2635 (void)charm_monster(dir, MIN(p_ptr->lev, 20));
2640 msg_print("¡Ô±£¼Ô¡Õ¤À¡£");
2642 msg_print("It's the Hermit.");
2650 msg_print("¡Ô¿³È½¡Õ¤À¡£");
2652 msg_print("It's the Judgement.");
2655 do_cmd_rerate(FALSE);
2656 if (p_ptr->muta1 || p_ptr->muta2 || p_ptr->muta3)
2659 msg_print("Á´¤Æ¤ÎÆÍÁ³ÊÑ°Û¤¬¼£¤Ã¤¿¡£");
2661 msg_print("You are cured of all mutations.");
2664 p_ptr->muta1 = p_ptr->muta2 = p_ptr->muta3 = 0;
2665 p_ptr->update |= PU_BONUS;
2672 msg_print("¡ÔÂÀÍÛ¡Õ¤À¡£");
2674 msg_print("It's the Sun.");
2677 chg_virtue(V_KNOWLEDGE, 1);
2678 chg_virtue(V_ENLIGHTEN, 1);
2679 wiz_lite(FALSE, FALSE);
2684 msg_print("¡ÔÀ¤³¦¡Õ¤À¡£");
2686 msg_print("It's the World.");
2689 if (p_ptr->exp < PY_MAX_EXP)
2691 s32b ee = (p_ptr->exp / 25) + 1;
2692 if (ee > 5000) ee = 5000;
2694 msg_print("¹¹¤Ë·Ð¸³¤òÀѤó¤À¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
2696 msg_print("You feel more experienced.");
2704 case 3: /* Reset Recall */
2707 if (!reset_recall()) return FALSE;
2710 case 4: /* Teleport Self */
2713 teleport_player(plev * 4);
2716 case 5: /* Trump Spying */
2719 (void)set_tim_esp(randint(30) + 25, FALSE);
2722 case 6: /* Teleport Away */
2725 if (!get_aim_dir(&dir)) return FALSE;
2726 (void)fire_beam(GF_AWAY_ALL, dir, plev);
2729 case 7: /* Trump Animals */
2731 bool pet = success; /* was (randint(5) > 2) */
2732 int type = (pet ? SUMMON_ANIMAL_RANGER : SUMMON_ANIMAL);
2733 bool group = (pet ? FALSE : TRUE);
2736 msg_print("¤¢¤Ê¤¿¤Ïưʪ¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2738 msg_print("You concentrate on the trump of an animal...");
2742 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, type, group, FALSE, pet, FALSE, !pet))
2746 msg_print("¾¤´¤µ¤ì¤¿Æ°Êª¤ÏÅܤäƤ¤¤ë¡ª");
2748 msg_print("The summoned animal gets angry!");
2759 case 8: /* Trump Reach */
2762 if (!get_aim_dir(&dir)) return FALSE;
2763 fetch(dir, plev * 15, TRUE);
2766 case 9: /* Trump Kamikaze */
2771 if (!target_set(TARGET_KILL)) return FALSE;
2778 msg_print("¤¢¤Ê¤¿¤Ï¥«¥ß¥«¥¼¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2780 msg_print("You concentrate on several trumps at once...");
2784 for (dummy = 2 + rand_int(plev / 7); dummy > 0; dummy--)
2786 bool pet = success; /* was (randint(10) > 3) */
2787 bool group = (pet ? FALSE : TRUE);
2790 if (p_ptr->pclass == CLASS_BEASTMASTER)
2792 type = SUMMON_KAMIKAZE_LIVING;
2796 type = SUMMON_KAMIKAZE;
2799 if (summon_specific((pet ? -1 : 0), y, x, summon_lev, type, group, FALSE, pet, FALSE, !pet))
2803 msg_print("¾¤´Ô¤µ¤ì¤¿¥â¥ó¥¹¥¿¡¼¤ÏÅܤäƤ¤¤ë¡ª");
2805 msg_print("The summoned creatures get angry!");
2813 case 10: /* Phantasmal Servant */
2816 if (summon_specific(-1, py, px, (summon_lev * 3) / 2, SUMMON_PHANTOM, FALSE, TRUE, TRUE, FALSE, FALSE))
2819 msg_print("¸æÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¸æ¼ç¿ÍÍÍ¡©");
2821 msg_print("'Your wish, master?'");
2831 case 11: /* Speed Monster */
2834 bool old_target_pet = target_pet;
2836 if (!get_aim_dir(&dir))
2838 target_pet = old_target_pet;
2841 target_pet = old_target_pet;
2842 (void)speed_monster(dir);
2845 case 12: /* Teleport Level */
2849 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return FALSE;
2851 if (!get_check("Are you sure? (Teleport Level)")) return FALSE;
2853 (void)teleport_player_level();
2856 case 13: /* Dimension Door */
2860 msg_print("¼¡¸µ¤ÎÈ⤬³«¤¤¤¿¡£ÌÜŪÃϤòÁª¤ó¤Ç²¼¤µ¤¤¡£");
2862 msg_print("You open a dimensional gate. Choose a destination.");
2865 return dimension_door();
2868 case 14: /* Word of Recall */
2871 if (!word_of_recall()) return FALSE;
2874 case 15: /* Banish */
2877 banish_monsters(plev * 4);
2880 case 16: /* Swap Position */
2884 project_length = -1;
2885 if (!get_aim_dir(&dir))
2892 (void)teleport_swap(dir);
2896 case 17: /* Trump Undead */
2898 bool pet = success; /* (randint(10) > 3) */
2899 bool group = (pet ? FALSE : TRUE);
2902 msg_print("¤¢¤Ê¤¿¤Ï¥¢¥ó¥Ç¥Ã¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2904 msg_print("You concentrate on the trump of an undead creature...");
2908 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_UNDEAD, group, FALSE, pet, FALSE, !pet))
2912 msg_print("¾¤´Ô¤µ¤ì¤¿¥¢¥ó¥Ç¥Ã¥É¤ÏÅܤäƤ¤¤ë¡ª");
2914 msg_print("The summoned undead creature gets angry!");
2925 case 18: /* Trump Reptiles */
2927 bool pet = success; /* was (randint(5) > 2) */
2931 msg_print("¤¢¤Ê¤¿¤Ïà¨ÃîÎà¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2933 msg_print("You concentrate on the trump of a reptile...");
2937 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HYDRA, group, FALSE, pet, FALSE, !pet))
2941 msg_print("¾¤´Ô¤µ¤ì¤¿à¨ÃîÎà¤ÏÅܤäƤ¤¤ë¡ª");
2943 msg_print("The summoned reptile gets angry!");
2954 case 19: /* Trump Monsters */
2959 msg_print("¤¢¤Ê¤¿¤Ï¥â¥ó¥¹¥¿¡¼¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2961 msg_print("You concentrate on several trumps at once...");
2965 for (dummy = 0; dummy < 1 + ((plev - 15)/ 10); dummy++)
2967 bool pet = success; /* was (randint(10) > 3) */
2968 bool group = (pet ? FALSE : TRUE);
2971 if (p_ptr->pclass == CLASS_BEASTMASTER)
2973 type = SUMMON_LIVING;
2980 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, type, group, FALSE, pet, unique_okay, !pet))
2984 msg_print("¾¤´Ô¤µ¤ì¤¿¥â¥ó¥¹¥¿¡¼¤ÏÅܤäƤ¤¤ë¡ª");
2986 msg_print("The summoned creatures get angry!");
2994 case 20: /* Trump Hounds */
2996 bool pet = success; /* was (randint(5) > 2) */
2999 msg_print("¤¢¤Ê¤¿¤Ï¥Ï¥¦¥ó¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3001 msg_print("You concentrate on the trump of a hound...");
3005 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HOUND, TRUE, FALSE, pet, FALSE, !pet))
3009 msg_print("¾¤´Ô¤µ¤ì¤¿¥Ï¥¦¥ó¥É¤ÏÅܤäƤ¤¤ë¡ª");
3011 msg_print("The summoned hounds get angry!");
3022 case 21: /* Trump Branding */
3028 case 22: /* Living Trump */
3031 if (randint(7) == 1)
3032 /* Teleport control */
3035 /* Random teleportation (uncontrolled) */
3037 /* Gain the mutation */
3038 if (gain_random_mutation(dummy))
3040 msg_print("¤¢¤Ê¤¿¤ÏÀ¸¤¤Æ¤¤¤ë¥«¡¼¥É¤ËÊѤï¤Ã¤¿¡£");
3042 msg_print("You have turned into a Living Trump.");
3047 case 23: /* Trump Cyberdemon */
3049 bool pet = success; /* was (randint(10) > 3) */
3052 msg_print("¤¢¤Ê¤¿¤Ï¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3054 msg_print("You concentrate on the trump of a Cyberdemon...");
3058 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_CYBER, FALSE, FALSE, pet, FALSE, !pet))
3062 msg_print("¾¤´Ô¤µ¤ì¤¿¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤ÏÅܤäƤ¤¤ë¡ª");
3064 msg_print("The summoned Cyberdemon gets angry!");
3075 case 24: /* Trump Divination */
3078 (void)detect_all(DETECT_RAD_DEFAULT);
3081 case 25: /* Trump Lore */
3084 return identify_fully(FALSE);
3087 case 26: /* Heal Monster */
3090 bool old_target_pet = target_pet;
3092 if (!get_aim_dir(&dir))
3094 target_pet = old_target_pet;
3097 target_pet = old_target_pet;
3099 (void)heal_monster(dir, p_ptr->lev * 10 + 200);
3102 case 27: /* Trump Dragon */
3104 bool pet = success; /* was (randint(10) > 3) */
3105 bool group = (pet ? FALSE : TRUE);
3108 msg_print("¤¢¤Ê¤¿¤Ï¥É¥é¥´¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3110 msg_print("You concentrate on the trump of a dragon...");
3114 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_DRAGON, group, FALSE, pet, FALSE, !pet))
3118 msg_print("¾¤´Ô¤µ¤ì¤¿¥É¥é¥´¥ó¤ÏÅܤäƤ¤¤ë¡ª");
3120 msg_print("The summoned dragon gets angry!");
3131 case 28: /* Trump Meteor */
3134 int x, y, dx, dy, i;
3135 int b = 10 + randint(10);
3136 for (i = 0; i < b; i++)
3138 int count = 0, d = 0;
3143 if (count > 20) break;
3144 x = px - 8 + rand_int(17);
3145 y = py - 8 + rand_int(17);
3147 if (!in_bounds(y,x) || (!cave_floor_bold(y,x) && (cave[y][x].feat != FEAT_TREES)) || !player_has_los_bold(y, x)) continue;
3149 dx = (px > x) ? (px - x) : (x - px);
3150 dy = (py > y) ? (py - y) : (y - py);
3152 /* Approximate distance */
3153 d = (dy > dx) ? (dy + (dx >> 1)) : (dx + (dy >> 1));
3157 if (count > 20) continue;
3159 project(0, 2, y, x, plev * 2, GF_METEOR, PROJECT_KILL | PROJECT_JUMP | PROJECT_ITEM, -1);
3163 case 29: /* Trump Demon */
3165 bool pet = success; /* was (randint(10) > 3) */
3166 bool group = (pet ? FALSE : TRUE);
3169 msg_print("¤¢¤Ê¤¿¤Ï¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3171 msg_print("You concentrate on the trump of a demon...");
3175 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_DEMON, group, FALSE, pet, FALSE, !pet))
3179 msg_print("¾¤´Ô¤µ¤ì¤¿¥Ç¡¼¥â¥ó¤ÏÅܤäƤ¤¤ë¡ª");
3181 msg_print("The summoned demon gets angry!");
3192 case 30: /* Trump Greater Undead */
3194 bool pet = success; /* was (randint(10) > 3) */
3195 bool group = (pet ? FALSE : TRUE);
3198 msg_print("¤¢¤Ê¤¿¤Ï¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3200 msg_print("You concentrate on the trump of a greater undead being...");
3204 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HI_UNDEAD, group, FALSE, pet, unique_okay, !pet))
3208 msg_print("¾¤´Ô¤µ¤ì¤¿¾åµé¥¢¥ó¥Ç¥Ã¥É¤ÏÅܤäƤ¤¤ë¡ª");
3210 msg_print("The summoned greater undead creature gets angry!");
3221 case 31: /* Trump Ancient Dragon */
3223 bool pet = success; /* was (randint(10) > 3) */
3224 bool group = (pet ? FALSE : TRUE);
3226 if (p_ptr->pclass == CLASS_BEASTMASTER)
3228 type = SUMMON_HI_DRAGON_LIVING;
3232 type = SUMMON_HI_DRAGON;
3236 msg_print("¤¢¤Ê¤¿¤Ï¸ÅÂå¥É¥é¥´¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3238 msg_print("You concentrate on the trump of an ancient dragon...");
3242 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, type, group, FALSE, pet, unique_okay, !pet))
3246 msg_print("¾¤´Ô¤µ¤ì¤¿¸ÅÂå¥É¥é¥´¥ó¤ÏÅܤäƤ¤¤ë¡ª");
3248 msg_print("The summoned ancient dragon gets angry!");
3261 msg_format("̤ÃΤΥ«¡¼¥É¤Î¼öʸ¤Ç¤¹: %d", spell);
3263 msg_format("You cast an unknown Trump spell: %d.", spell);
3272 msg_print("ï¤â¤¢¤Ê¤¿¤Î¥«¡¼¥É¤Î¸Æ¤ÓÀ¼¤ËÅú¤¨¤Ê¤¤¡£");
3274 msg_print("Nobody answers to your Trump call.");
3283 static bool cast_arcane_spell(int spell)
3287 int plev = p_ptr->lev;
3289 bool no_trump = FALSE;
3291 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
3292 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
3293 else beam = plev / 2;
3298 if (!get_aim_dir(&dir)) return FALSE;
3300 fire_bolt_or_beam(beam - 10, GF_ELEC, dir,
3301 damroll(3 + ((plev - 1) / 5), 3));
3303 case 1: /* Wizard Lock */
3304 if (!get_aim_dir(&dir)) return FALSE;
3306 (void)wizard_lock(dir);
3308 case 2: /* Detect Invisibility */
3309 (void)detect_monsters_invis(DETECT_RAD_DEFAULT);
3311 case 3: /* Detect Monsters */
3312 (void)detect_monsters_normal(DETECT_RAD_DEFAULT);
3315 teleport_player(10);
3317 case 5: /* Light Area */
3318 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
3320 case 6: /* Trap & Door Destruction */
3321 if (!get_aim_dir(&dir)) return FALSE;
3323 (void)destroy_door(dir);
3325 case 7: /* Cure Light Wounds */
3326 (void)hp_player(damroll(2, 8));
3327 (void)set_cut(p_ptr->cut - 10);
3329 case 8: /* Detect Doors & Traps */
3330 (void)detect_traps(DETECT_RAD_DEFAULT);
3331 (void)detect_doors(DETECT_RAD_DEFAULT);
3332 (void)detect_stairs(DETECT_RAD_DEFAULT);
3334 case 9: /* Phlogiston */
3337 case 10: /* Detect Treasure */
3338 (void)detect_treasure(DETECT_RAD_DEFAULT);
3339 (void)detect_objects_gold(DETECT_RAD_DEFAULT);
3341 case 11: /* Detect Enchantment */
3342 (void)detect_objects_magic(DETECT_RAD_DEFAULT);
3344 case 12: /* Detect Objects */
3345 (void)detect_objects_normal(DETECT_RAD_DEFAULT);
3347 case 13: /* Cure Poison */
3348 (void)set_poisoned(0);
3350 case 14: /* Resist Cold */
3351 (void)set_oppose_cold(randint(20) + 20, FALSE);
3353 case 15: /* Resist Fire */
3354 (void)set_oppose_fire(randint(20) + 20, FALSE);
3356 case 16: /* Resist Lightning */
3357 (void)set_oppose_elec(randint(20) + 20, FALSE);
3359 case 17: /* Resist Acid */
3360 (void)set_oppose_acid(randint(20) + 20, FALSE);
3362 case 18: /* Cure Medium Wounds */
3363 (void)hp_player(damroll(4, 8));
3364 (void)set_cut((p_ptr->cut / 2) - 50);
3366 case 19: /* Teleport */
3367 teleport_player(plev * 5);
3369 case 20: /* Identify */
3370 return ident_spell(FALSE);
3371 case 21: /* Stone to Mud */
3372 if (!get_aim_dir(&dir)) return FALSE;
3374 (void)wall_to_mud(dir);
3376 case 22: /* Ray of Light */
3377 if (!get_aim_dir(&dir)) return FALSE;
3380 msg_print("¸÷Àþ¤¬Êü¤¿¤ì¤¿¡£");
3382 msg_print("A line of light appears.");
3385 (void)lite_line(dir);
3387 case 23: /* Satisfy Hunger */
3388 (void)set_food(PY_FOOD_MAX - 1);
3390 case 24: /* See Invisible */
3391 (void)set_tim_invis(randint(24) + 24, FALSE);
3393 case 25: /* Conjure Elemental */
3394 if (!summon_specific(-1, py, px, plev, SUMMON_ELEMENTAL, TRUE, TRUE, TRUE, FALSE, FALSE))
3397 case 26: /* Teleport Level */
3398 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return FALSE;
3399 (void)teleport_player_level();
3401 case 27: /* Teleport Away */
3402 if (!get_aim_dir(&dir)) return FALSE;
3404 (void)fire_beam(GF_AWAY_ALL, dir, plev);
3406 case 28: /* Elemental Ball */
3407 if (!get_aim_dir(&dir)) return FALSE;
3411 case 1: dummy = GF_FIRE;break;
3412 case 2: dummy = GF_ELEC;break;
3413 case 3: dummy = GF_COLD;break;
3414 default: dummy = GF_ACID;break;
3416 fire_ball(dummy, dir, 75 + (plev), 2);
3418 case 29: /* Detection */
3419 (void)detect_all(DETECT_RAD_DEFAULT);
3421 case 30: /* Word of Recall */
3422 if (!word_of_recall()) return FALSE;
3424 case 31: /* Clairvoyance */
3425 chg_virtue(V_KNOWLEDGE, 1);
3426 chg_virtue(V_ENLIGHTEN, 1);
3427 wiz_lite(FALSE, FALSE);
3428 if (!p_ptr->telepathy)
3430 (void)set_tim_esp(randint(30) + 25, FALSE);
3434 msg_format("You cast an unknown Arcane spell: %d.", spell);
3440 msg_print("¥¨¥ì¥á¥ó¥¿¥ë¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3442 msg_print("No Elementals arrive.");
3449 static bool cast_enchant_spell(int spell)
3451 int plev = p_ptr->lev;
3453 bool no_trump = FALSE;
3457 case 0: /* Infravision */
3458 set_tim_infra(100 + randint(100), FALSE);
3460 case 1: /* Regeneration */
3461 set_tim_regen(80 + randint(80), FALSE);
3463 case 2: /* Satisfy Hunger */
3464 (void)set_food(PY_FOOD_MAX - 1);
3466 case 3: /* Resist Cold */
3467 (void)set_oppose_cold(randint(20) + 20, FALSE);
3469 case 4: /* Resist Fire */
3470 (void)set_oppose_fire(randint(20) + 20, FALSE);
3472 case 5: /* Heroism */
3473 (void)set_hero(randint(25) + 25, FALSE);
3474 (void)hp_player(10);
3475 (void)set_afraid(0);
3477 case 6: /* Resist Lightning */
3478 (void)set_oppose_elec(randint(20) + 20, FALSE);
3480 case 7: /* Resist Acid */
3481 (void)set_oppose_acid(randint(20) + 20, FALSE);
3483 case 8: /* See Invisibility */
3484 (void)set_tim_invis(randint(24) + 24, FALSE);
3486 case 9: /* Remove Curse */
3490 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
3492 msg_print("You feel as if someone is watching over you.");
3496 case 10: /* Resist Poison */
3497 (void)set_oppose_pois(randint(20) + 20, FALSE);
3499 case 11: /* Berserk */
3500 (void)set_shero(randint(25) + 25, FALSE);
3501 (void)hp_player(30);
3502 (void)set_afraid(0);
3504 case 12: /* Self Knowledge */
3505 (void)self_knowledge();
3507 case 13: /* Protection from Evil */
3508 (void)set_protevil(randint(25) + 3 * p_ptr->lev, FALSE);
3510 case 14: /* Healing */
3516 case 15: /* Mana Branding */
3517 return choose_ele_attack();
3519 case 16: /* Telepathy */
3520 (void)set_tim_esp(randint(30) + 25, FALSE);
3522 case 17: /* Stone Skin */
3523 (void)set_shield(randint(20) + 30, FALSE);
3525 case 18: /* Resistance */
3526 (void)set_oppose_acid(randint(20) + 20, FALSE);
3527 (void)set_oppose_elec(randint(20) + 20, FALSE);
3528 (void)set_oppose_fire(randint(20) + 20, FALSE);
3529 (void)set_oppose_cold(randint(20) + 20, FALSE);
3530 (void)set_oppose_pois(randint(20) + 20, FALSE);
3532 case 19: /* Haste */
3533 (void)set_fast(randint(20 + plev) + plev, FALSE);
3535 case 20: /* Walk through Wall */
3536 (void)set_kabenuke(randint(plev/2) + plev/2, FALSE);
3538 case 21: /* Pulish Shield */
3539 (void)pulish_shield();
3541 case 22: /* Create Golem */
3542 if (summon_specific(-1, py, px, plev, SUMMON_GOLEM, FALSE, TRUE, TRUE, FALSE, FALSE))
3545 msg_print("¥´¡¼¥ì¥à¤òºî¤Ã¤¿¡£");
3547 msg_print("You make a golem.");
3555 case 23: /* Magic armor */
3556 (void)set_magicdef(randint(20) + 20, FALSE);
3558 case 24: /* Remove Enchantment */
3559 if (!mundane_spell(TRUE)) return FALSE;
3561 case 25: /* Remove All Curse */
3562 if (remove_all_curse())
3565 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
3567 msg_print("You feel as if someone is watching over you.");
3571 case 26: /* Total Knowledge */
3572 return identify_fully(FALSE);
3574 case 27: /* Enchant Weapon */
3575 return enchant_spell(rand_int(4) + 1, rand_int(4) + 1, 0);
3577 case 28: /* Enchant Armor */
3578 return enchant_spell(0, 0, rand_int(3) + 2);
3580 case 29: /* Brand Weapon */
3581 brand_weapon(rand_int(17));
3583 case 30: /* Living Trump */
3584 if (randint(7) == 1)
3585 /* Teleport control */
3588 /* Random teleportation (uncontrolled) */
3590 /* Gain the mutation */
3591 if (gain_random_mutation(dummy))
3593 msg_print("¤¢¤Ê¤¿¤ÏÀ¸¤¤Æ¤¤¤ë¥«¡¼¥É¤ËÊѤï¤Ã¤¿¡£");
3595 msg_print("You have turned into a Living Trump.");
3598 case 31: /* Immune */
3599 return (choose_ele_immune(13 + randint(13)));
3602 msg_format("You cast an unknown Craft spell: %d.", spell);
3608 msg_print("¤¦¤Þ¤¯¥´¡¼¥ì¥à¤òºî¤ì¤Ê¤«¤Ã¤¿¡£");
3610 msg_print("No Golems arrive.");
3618 * An "item_tester_hook" for offer
3620 static bool item_tester_offer(object_type *o_ptr)
3622 /* Flasks of oil are okay */
3623 if (o_ptr->tval != TV_CORPSE) return (FALSE);
3625 if (o_ptr->sval != SV_CORPSE) return (FALSE);
3627 if (strchr("pht", r_info[o_ptr->pval].d_char)) return (TRUE);
3629 /* Assume not okay */
3634 static bool cast_daemon_spell(int spell)
3637 int plev = p_ptr->lev;
3639 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
3640 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
3641 else beam = plev / 2;
3645 case 0: /* Magic Missile */
3646 if (!get_aim_dir(&dir)) return FALSE;
3648 fire_bolt_or_beam(beam - 10, GF_MISSILE, dir,
3649 damroll(3 + ((plev - 1) / 5), 4));
3651 case 1: /* Detect Undead & Demons -> Unlife */
3652 (void)detect_monsters_nonliving(DETECT_RAD_DEFAULT);
3655 (void)set_blessed(randint(12) + 12, FALSE);
3657 case 3: /* Resist Fire */
3658 (void)set_oppose_fire(randint(20) + 20, FALSE);
3660 case 4: /* Horrify */
3661 if (!get_aim_dir(&dir)) return FALSE;
3663 (void)fear_monster(dir, plev);
3664 (void)stun_monster(dir, plev);
3666 case 5: /* Nether Bolt */
3667 if (!get_aim_dir(&dir)) return FALSE;
3669 fire_bolt_or_beam(beam, GF_NETHER, dir,
3670 damroll(6 + ((plev - 5) / 4), 8));
3672 case 6: /* Summon monster, demon */
3673 if (!summon_specific(-1, py, px, (plev * 3) / 2, SUMMON_MANES, TRUE, FALSE, TRUE, FALSE, FALSE))
3676 msg_print("¸ÅÂå¤Î»àÎî¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3678 msg_print("No Manes arrive.");
3682 case 7: /* Mini Hellfire */
3683 if (!get_aim_dir(&dir)) return FALSE;
3685 fire_ball(GF_HELL_FIRE, dir,
3686 (damroll(3, 6) + plev +
3687 (plev / (((p_ptr->pclass == CLASS_MAGE) ||
3688 (p_ptr->pclass == CLASS_HIGH_MAGE) ||
3689 (p_ptr->pclass == CLASS_SORCERER)) ? 2 : 4))),
3690 ((plev < 30) ? 2 : 3));
3692 case 8: /* Enslave Demon */
3693 if (!get_aim_dir(&dir)) return FALSE;
3695 (void)control_one_demon(dir, plev);
3697 case 9: /* Vision */
3698 map_area(DETECT_RAD_MAP);
3700 case 10: /* Resist Nether */
3701 (void)set_tim_res_nether(randint(20) + 20, FALSE);
3703 case 11: /* Plasma Bolt */
3704 if (!get_aim_dir(&dir)) return FALSE;
3706 fire_bolt_or_beam(beam, GF_PLASMA, dir,
3707 damroll(11 + ((plev - 5) / 4), 8));
3709 case 12: /* Fire Ball */
3710 if (!get_aim_dir(&dir)) return FALSE;
3712 fire_ball(GF_FIRE, dir, plev + 55, 2);
3714 case 13: /* Fire Branding */
3717 case 14: /* Nether Ball */
3718 if (!get_aim_dir(&dir)) return FALSE;
3720 fire_ball(GF_NETHER, dir, plev*3/2 + 100, plev / 20+2);
3722 case 15: /* Summon monster, demon */
3724 bool pet = (randint(3) != 1);
3725 bool group = !(pet && (plev < 50));
3727 if (summon_specific((pet ? -1 : 0), py, px, plev*2/3+randint(plev/2), SUMMON_DEMON, group, FALSE, pet, FALSE, !pet))
3730 msg_print("ⲫ¤Î°½¤¬½¼Ëþ¤·¤¿¡£");
3732 msg_print("The area fills with a stench of sulphur and brimstone.");
3738 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
3740 msg_print("'What is thy bidding... Master?'");
3745 msg_print("¡ÖÈܤ·¤¼Ô¤è¡¢²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª ¤ªÁ°¤Îº²¤òĺ¤¯¤¾¡ª¡×");
3747 msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'");
3754 msg_print("°Ëâ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3756 msg_print("No Greater Demon arrive.");
3761 case 16: /* Telepathy */
3762 (void)set_tim_esp(randint(30) + 25, FALSE);
3764 case 17: /* Demoncloak */
3766 int dur=randint(20) + 20;
3768 set_oppose_fire(dur, FALSE);
3769 set_oppose_cold(dur, FALSE);
3770 set_tim_sh_fire(dur, FALSE);
3774 case 18: /* Rain of Lava */
3775 fire_ball(GF_FIRE, 0, (55 + plev)*2, 3);
3776 fire_ball_hide(GF_LAVA_FLOW, 0, 2+randint(2), 3);
3778 case 19: /* Plasma ball */
3779 if (!get_aim_dir(&dir)) return FALSE;
3781 fire_ball(GF_PLASMA, dir, plev*3/2 + 80, 2 + plev/40);
3783 case 20: /* Mimic demon */
3784 (void)set_mimic(10+plev/2 + randint(10+plev/2), MIMIC_DEMON, FALSE);
3786 case 21: /* Nether Wave == Dispel Good */
3787 (void)dispel_monsters(randint(plev * 2));
3788 (void)dispel_good(randint(plev * 2));
3791 if (!get_aim_dir(&dir)) return FALSE;
3792 fire_ball(GF_NEXUS, dir, 100 + plev*2, 4);
3794 case 23: /* Hand Doom */
3795 if (!get_aim_dir(&dir)) return FALSE;
3797 else msg_print("<ÇËÌǤμê>¤òÊü¤Ã¤¿¡ª");
3799 else msg_print("You invokes the Hand of Doom!");
3802 fire_ball_hide(GF_HAND_DOOM, dir, plev * 2, 0);
3804 case 24: /* Heroism */
3805 (void)set_hero(randint(25) + 25, FALSE);
3806 (void)hp_player(10);
3807 (void)set_afraid(0);
3809 case 25: /* Tim resist time */
3810 (void)set_tim_res_time(randint(20)+20, FALSE);
3812 case 26: /* Circle of Madness */
3813 fire_ball(GF_CHAOS, 0, 50+plev, 3+plev/20);
3814 fire_ball(GF_CONFUSION, 0, 50+plev, 3+plev/20);
3815 fire_ball(GF_CHARM, 0, 20+plev, 3+plev/20);
3817 case 27: /* True Discharge Minion */
3818 discharge_minion(TRUE);
3820 case 28: /* Summon Greater Demon */
3827 item_tester_hook = item_tester_offer;
3829 q = "¤É¤Î»àÂΤòÊû¤²¤Þ¤¹¤«? ";
3830 s = "Êû¤²¤é¤ì¤ë»àÂΤò»ý¤Ã¤Æ¤¤¤Ê¤¤¡£";
3832 q = "Sacrifice which corpse? ";
3833 s = "You have nothing to scrifice.";
3835 if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return FALSE;
3837 /* Get the item (in the pack) */
3840 o_ptr = &inventory[item];
3843 /* Get the item (on the floor) */
3846 o_ptr = &o_list[0 - item];
3849 summon_lev = p_ptr->lev * 2 / 3 + r_info[o_ptr->pval].level;
3850 if (summon_specific(-1, py, px, summon_lev, SUMMON_HI_DEMON, TRUE, FALSE, TRUE, FALSE, FALSE))
3853 msg_print("ⲫ¤Î°½¤¬½¼Ëþ¤·¤¿¡£");
3855 msg_print("The area fills with a stench of sulphur and brimstone.");
3860 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
3862 msg_print("'What is thy bidding... Master?'");
3865 /* Decrease the item (from the pack) */
3868 inven_item_increase(item, -1);
3869 inven_item_describe(item);
3870 inven_item_optimize(item);
3873 /* Decrease the item (from the floor) */
3876 floor_item_increase(0 - item, -1);
3877 floor_item_describe(0 - item);
3878 floor_item_optimize(0 - item);
3884 msg_print("°Ëâ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3886 msg_print("No Greater Demon arrive.");
3891 case 29: /* Nether Storm */
3892 if (!get_aim_dir(&dir)) return FALSE;
3894 fire_ball(GF_NETHER, dir, plev*15, plev / 5);
3896 case 30: /* Blood curse */
3898 if (!get_aim_dir(&dir)) return FALSE;
3900 fire_ball_hide(GF_BLOOD_CURSE, dir, 600, 0);
3902 take_hit(DAMAGE_USELIFE, 20 + randint(30), "·ì¤Î¼ö¤¤", -1);
3904 take_hit(DAMAGE_USELIFE, 20 + randint(30), "Blood curse", -1);
3908 case 31: /* Mimic Demon lord */
3909 (void)set_mimic(15 + randint(15), MIMIC_DEMON_LORD, FALSE);
3912 msg_format("You cast an unknown Daemon spell: %d.", spell);
3920 void stop_singing(void)
3922 if (p_ptr->pclass != CLASS_BARD) return;
3924 if (p_ptr->magic_num1[1])
3926 p_ptr->magic_num1[1] = 0;
3929 if (!p_ptr->magic_num1[0]) return;
3931 set_action(ACTION_NONE);
3933 switch(p_ptr->magic_num1[0])
3936 if (!p_ptr->blessed)
3938 msg_print("¹â·é¤Êµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
3940 msg_print("The prayer has expired.");
3947 msg_print("¥Ò¡¼¥í¡¼¤Îµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
3949 msg_print("The heroism wears off.");
3951 /* Recalculate hitpoints */
3952 p_ptr->update |= (PU_HP);
3956 if (!p_ptr->tim_esp)
3959 msg_print("°Õ¼±¤Ï¸µ¤ËÌá¤Ã¤¿¡£");
3961 msg_print("Your consciousness contracts again.");
3963 /* Update the monsters */
3964 p_ptr->update |= (PU_MONSTERS);
3968 if (!p_ptr->tim_stealth)
3970 msg_print("»Ñ¤¬¤Ï¤Ã¤¤ê¤È¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¡£");
3972 msg_print("You are no longer hided.");
3976 if (!p_ptr->oppose_acid)
3978 msg_print("»À¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
3980 msg_print("You feel less resistant to acid.");
3982 if (!p_ptr->oppose_elec)
3984 msg_print("ÅÅ·â¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
3986 msg_print("You feel less resistant to elec.");
3988 if (!p_ptr->oppose_fire)
3990 msg_print("²Ð¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
3992 msg_print("You feel less resistant to fire.");
3994 if (!p_ptr->oppose_cold)
3996 msg_print("Î䵤¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
3998 msg_print("You feel less resistant to cold.");
4000 if (!p_ptr->oppose_pois)
4002 msg_print("ÆǤؤÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
4004 msg_print("You feel less resistant to pois.");
4010 msg_print("Æ°¤¤ÎÁÇÁᤵ¤¬¤Ê¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£");
4012 msg_print("You feel yourself slow down.");
4019 msg_print("¥Ò¡¼¥í¡¼¤Îµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
4021 msg_print("The heroism wears off.");
4023 /* Recalculate hitpoints */
4024 p_ptr->update |= (PU_HP);
4029 msg_print("Æ°¤¤ÎÁÇÁᤵ¤¬¤Ê¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£");
4031 msg_print("You feel yourself slow down.");
4038 msg_print("̵Ũ¤Ç¤Ï¤Ê¤¯¤Ê¤Ã¤¿¡£");
4040 msg_print("The invulnerability wears off.");
4043 p_ptr->redraw |= (PR_MAP);
4045 /* Update monsters */
4046 p_ptr->update |= (PU_MONSTERS);
4049 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
4053 p_ptr->magic_num1[0] = MUSIC_NONE;
4054 p_ptr->magic_num2[0] = 0;
4056 /* Recalculate bonuses */
4057 p_ptr->update |= (PU_BONUS | PU_HP);
4059 /* Redraw status bar */
4060 p_ptr->redraw |= (PR_STATUS);
4064 static bool cast_music_spell(int spell)
4066 int plev = p_ptr->lev;
4069 if(p_ptr->magic_num1[0])
4074 p_ptr->magic_num2[0] = spell;
4078 case 0: /* Song of Holding ÃÙÆߤβÎ*/
4080 msg_print("¤æ¤Ã¤¯¤ê¤È¤·¤¿¥á¥í¥Ç¥£¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
4082 msg_print("You start humming a slow, steady melody...");
4084 p_ptr->magic_num1[0] = MUSIC_SLOW;
4086 case 1: /* Song of Blessing ½ËÊ¡¤Î²Î */
4088 msg_print("¸·¤«¤Ê¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4090 msg_print("The holy power of the Music of the Ainur enters you...");
4092 p_ptr->magic_num1[0] = MUSIC_BLESS;
4095 case 2: /* Wrecking Note Êø²õ¤Î²»¿§ */
4096 if (!get_aim_dir(&dir)) return FALSE;
4097 fire_bolt(GF_SOUND, dir,
4098 damroll(4 + ((plev - 1) / 5), 4));
4100 case 3: /* Stun Pattern Û¯Û°¤ÎÀûΧ */
4102 msg_print("âÁÏǤµ¤»¤ë¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4104 msg_print("You weave a pattern of sounds to bewilder and daze...");
4106 p_ptr->magic_num1[0] = MUSIC_STUN;
4108 case 4: /* Flow of life À¸Ì¿¤Îή¤ì */
4110 msg_print("²Î¤òÄ̤·¤ÆÂΤ˳赤¤¬Ìá¤Ã¤Æ¤¤¿¡¥¡¥¡¥");
4112 msg_print("Life flows through you as you sing a song of healing...");
4114 p_ptr->magic_num1[0] = MUSIC_L_LIFE;
4116 case 5: /* Song of the Sun ÂÀÍۤβΠ*/
4118 msg_print("¸÷¤êµ±¤¯²Î¤¬ÊÕ¤ê¤ò¾È¤é¤·¤¿¡£");
4120 msg_print("Your uplifting song brings brightness to dark places...");
4122 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
4124 case 6: /* Song of fear ¶²ÉݤβΠ*/
4126 msg_print("¤ª¤É¤í¤ª¤É¤í¤·¤¤¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4128 msg_print("You start weaving a fearful pattern...");
4130 p_ptr->magic_num1[0] = MUSIC_FEAR;
4132 case 7: /* Heroic Ballad À襤¤Î²Î */
4134 msg_print("·ã¤·¤¤À襤¤Î²Î¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
4136 msg_print("You start singing a song of intense fighting...");
4138 p_ptr->magic_num1[0] = MUSIC_HERO;
4140 case 8: /* Clairaudience ÎîŪÃγР*/
4142 msg_print("ÀŤ«¤Ê²»³Ú¤¬´¶³Ð¤ò¸¦¤®À¡¤Þ¤µ¤»¤¿¡¥¡¥¡¥");
4144 msg_print("Your quiet music sharpens your sense of hearing...");
4146 p_ptr->magic_num1[0] = MUSIC_DETECT;
4148 case 9: /* º²¤Î²Î */
4150 msg_print("Àº¿À¤òDZ¤¸¶Ê¤²¤ë²Î¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
4152 msg_print("You start singing a song of soul in pain...");
4154 p_ptr->magic_num1[0] = MUSIC_PSI;
4156 case 10: /* Song of Lore Ãμ±¤Î²Î */
4158 msg_print("¤³¤ÎÀ¤³¦¤ÎÃ챤¬Î®¤ì¹þ¤ó¤Ç¤¤¿¡¥¡¥¡¥");
4160 msg_print("You recall the rich lore of the world...");
4162 p_ptr->magic_num1[0] = MUSIC_ID;
4164 case 11: /* hidding song ±£ÆۤβΠ*/
4166 msg_print("¤¢¤Ê¤¿¤Î»Ñ¤¬·Ê¿§¤Ë¤È¤±¤³¤ó¤Ç¤¤¤Ã¤¿¡¥¡¥¡¥");
4168 msg_print("Your song carries you beyond the sight of mortal eyes...");
4170 p_ptr->magic_num1[0] = MUSIC_STEALTH;
4172 case 12: /* Illusion Pattern ¸¸±Æ¤ÎÀûΧ */
4174 msg_print("ÊÕ¤ê°ìÌ̤˸¸±Æ¤¬¸½¤ì¤¿¡¥¡¥¡¥");
4176 msg_print("You weave a pattern of sounds to beguile and confuse...");
4178 p_ptr->magic_num1[0] = MUSIC_CONF;
4180 case 13: /* Doomcall (vibration song) ÇËÌǤζ«¤Ó */
4182 msg_print("¹ì²»¤¬¶Á¤¤¤¿¡¥¡¥¡¥");
4184 msg_print("The fury of the Downfall of Numenor lashes out...");
4186 p_ptr->magic_num1[0] = MUSIC_SOUND;
4188 case 14: /* Firiel's Song (song of the Undeads) ¥Õ¥£¥ê¥¨¥ë¤Î²Î */
4190 msg_print("À¸Ì¿¤ÈÉü³è¤Î¥Æ¡¼¥Þ¤òÁդǻϤ᤿¡¥¡¥¡¥");
4192 msg_print("The themes of life and revival are woven into your song...");
4194 animate_dead(0, py, px);
4196 case 15: /* Fellowship Chant (charming song) ι¤ÎÃç´Ö */
4198 msg_print("°Â¤é¤«¤Ê¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4200 msg_print("You weave a slow, soothing melody of imploration...");
4202 p_ptr->magic_num1[0] = MUSIC_CHARM;
4204 case 16: /* (wall breaking song) ʬ²ò²»ÇÈ */
4206 msg_print("Ê´ºÕ¤¹¤ë¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4208 msg_print("You weave a violent pattern of sounds to break wall.");
4210 p_ptr->magic_num1[0] = MUSIC_WALL;
4211 project(0, 0, py, px,
4212 0, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM | PROJECT_HIDE, -1);
4214 case 17: /* Finrod's Resistance (song of resistance) ¸µÁÇÂÑÀ */
4216 msg_print("¸µÁǤÎÎϤËÂФ¹¤ëǦÂѤβΤò²Î¤Ã¤¿¡£");
4218 msg_print("You sing a song of perseverance against powers...");
4220 p_ptr->magic_num1[0] = MUSIC_RESIST;
4222 case 18: /* Hobbit Melodies (song of time) ¥Û¥Ó¥Ã¥È¤Î¥á¥í¥Ç¥£ */
4224 msg_print("·Ú²÷¤Ê²Î¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
4226 msg_print("You start singing joyful pop song...");
4228 p_ptr->magic_num1[0] = MUSIC_SPEED;
4230 case 19: /* World Contortion ÏĤó¤ÀÀ¤³¦ */
4232 msg_print("²Î¤¬¶õ´Ö¤òÏĤ᤿¡¥¡¥¡¥");
4234 msg_print("Reality whirls wildly as you sing a dizzying melody...");
4236 project(0, plev/15 + 1, py, px, plev * 3 + 1, GF_AWAY_ALL , PROJECT_KILL, -1);
4238 case 20: /* Â໶¤Î²Î */
4240 msg_print("ÂѤ¨¤é¤ì¤Ê¤¤ÉÔ¶¨Ï²»¤¬Å¨¤òÀÕ¤áΩ¤Æ¤¿¡¥¡¥¡¥");
4242 msg_print("You cry out in an ear-wracking voice...");
4244 p_ptr->magic_num1[0] = MUSIC_DISPEL;
4246 case 21: /* The Voice of Saruman ¥µ¥ë¥Þ¥ó¤Î´Å¸À */
4248 msg_print("Í¥¤·¤¯¡¢Ì¥ÎÏŪ¤Ê²Î¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
4250 msg_print("You start humming a gentle and attractive song...");
4252 p_ptr->magic_num1[0] = MUSIC_SARUMAN;
4254 case 22: /* Song of Tempest (song of death) Íò¤Î²»¿§ */
4255 if (!get_aim_dir(&dir)) return FALSE;
4256 fire_beam(GF_SOUND, dir,
4257 damroll(15 + ((plev - 1) / 2), 10));
4259 case 23: /* (song of disruption) ¤â¤¦°ì¤Ä¤ÎÀ¤³¦ */
4261 msg_print("¼þ°Ï¤¬ÊѲ½¤·»Ï¤á¤¿¡¥¡¥¡¥");
4263 msg_print("You sing of the primeval shaping of Middle-earth...");
4267 case 24: /* Wrecking Pattern (destruction shriek) Ç˲õ¤ÎÀûΧ */
4269 msg_print("Ç˲õŪ¤Ê²Î¤¬¶Á¤¤ï¤¿¤Ã¤¿¡¥¡¥¡¥");
4271 msg_print("You weave a pattern of sounds to contort and shatter...");
4273 p_ptr->magic_num1[0] = MUSIC_QUAKE;
4275 case 25: /* ÄäÂڤβΠ*/
4277 msg_print("¤æ¤Ã¤¯¤ê¤È¤·¤¿¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4279 msg_print("You weave a very slow pattern which is almost likely to stop...");
4281 p_ptr->magic_num1[0] = MUSIC_STASIS;
4283 case 26: /* ¼é¤ê¤Î²Î */
4285 msg_print("²Î¤¬¿ÀÀ»¤Ê¾ì¤òºî¤ê½Ð¤·¤¿¡¥¡¥¡¥");
4287 msg_print("The holy power of the Music is creating sacred field...");
4291 case 27: /* ±Ñͺ¤Î»í */
4293 msg_print("±Ñͺ¤Î²Î¤ò¸ý¤º¤µ¤ó¤À¡¥¡¥¡¥");
4295 msg_print("You chant a powerful, heroic call to arms...");
4297 p_ptr->magic_num1[0] = MUSIC_SHERO;
4298 (void)hp_player(10);
4299 (void)set_afraid(0);
4301 case 28: /* ¥ä¥ô¥¡¥ó¥Ê¤Î½õ¤± */
4303 msg_print("²Î¤òÄ̤·¤ÆÂΤ˳赤¤¬Ìá¤Ã¤Æ¤¤¿¡¥¡¥¡¥");
4305 msg_print("Life flows through you as you sing the song...");
4307 p_ptr->magic_num1[0] = MUSIC_H_LIFE;
4309 case 29: /* ºÆÀ¸¤Î²Î */
4311 msg_print("°Å¹õ¤ÎÃæ¤Ë¸÷¤ÈÈþ¤ò¤Õ¤ê¤Þ¤¤¤¿¡£ÂΤ¬¸µ¤Î³èÎϤò¼è¤êÌᤷ¤¿¡£");
4313 msg_print("You strewed light and beauty in the dark as you sing. You feel refreshed.");
4315 (void)do_res_stat(A_STR);
4316 (void)do_res_stat(A_INT);
4317 (void)do_res_stat(A_WIS);
4318 (void)do_res_stat(A_DEX);
4319 (void)do_res_stat(A_CON);
4320 (void)do_res_stat(A_CHR);
4321 (void)restore_level();
4323 case 30: /* shriek of death ¥µ¥¦¥í¥ó¤ÎËâ½Ñ */
4324 if (!get_aim_dir(&dir)) return FALSE;
4325 fire_ball(GF_SOUND, dir, damroll(50 + plev, 10), 0);
4327 case 31: /* song of liberty ¥Õ¥£¥ó¥´¥ë¥Õ¥£¥ó¤ÎÄ©Àï */
4329 msg_print("¥Õ¥£¥ó¥´¥ë¥Õ¥£¥ó¤Î̽²¦¤Ø¤ÎÄ©Àï¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
4331 msg_print("You recall the valor of Fingolfin's challenge to the Dark Lord...");
4333 p_ptr->magic_num1[0] = MUSIC_INVULN;
4336 p_ptr->redraw |= (PR_MAP);
4338 /* Update monsters */
4339 p_ptr->update |= (PU_MONSTERS);
4342 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
4346 msg_format("̤ÃΤβÎ(%d)¤ò²Î¤Ã¤¿¡£", spell);
4348 msg_format("You sing an unknown song: %d.", spell);
4353 if (p_ptr->magic_num1[0]) set_action(ACTION_SING);
4355 /* Recalculate bonuses */
4356 p_ptr->update |= (PU_BONUS | PU_HP);
4358 /* Redraw status bar */
4359 p_ptr->redraw |= (PR_STATUS);
4367 void do_cmd_cast(void)
4370 use_skill_callback();
4371 #else /* USE_SCRIPT */
4372 int item, sval, spell, realm;
4387 /* Require spell ability */
4388 if (!p_ptr->realm1 && (p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE))
4391 msg_print("¼öʸ¤ò¾§¤¨¤é¤ì¤Ê¤¤¡ª");
4393 msg_print("You cannot cast spells!");
4400 if (p_ptr->blind || no_lite())
4403 msg_print("Ìܤ¬¸«¤¨¤Ê¤¤¡ª");
4405 msg_print("You cannot see!");
4407 if (p_ptr->pclass == CLASS_FORCETRAINER)
4414 /* Not when confused */
4415 if (p_ptr->confused)
4418 msg_print("º®Í𤷤Ƥ¤¤Æ¾§¤¨¤é¤ì¤Ê¤¤¡ª");
4420 msg_print("You are too confused!");
4426 prayer = spell_categoly_name(mp_ptr->spell_book);
4428 /* Restrict choices to spell books */
4429 item_tester_tval = mp_ptr->spell_book;
4433 q = "¤É¤Î¼öʸ½ñ¤ò»È¤¤¤Þ¤¹¤«? ";
4435 q = "Use which book? ";
4439 s = "¼öʸ½ñ¤¬¤Ê¤¤¡ª";
4441 s = "You have no spell books!";
4444 select_spellbook=TRUE;
4445 if (p_ptr->pclass == CLASS_FORCETRAINER)
4446 select_the_force = TRUE;
4447 if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))){
4448 select_spellbook = FALSE;
4449 select_the_force = FALSE;
4452 select_spellbook = FALSE;
4453 select_the_force = FALSE;
4455 if (item == 1111) { /* the_force */
4459 /* Get the item (in the pack) */
4462 o_ptr = &inventory[item];
4465 /* Get the item (on the floor) */
4468 o_ptr = &o_list[0 - item];
4472 if (object_cast_callback(o_ptr)) return;
4473 #endif /* USE_SCRIPT */
4475 /* Access the item's sval */
4478 if ((p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE) && (o_ptr->tval == REALM2_BOOK)) increment = 32;
4481 /* Track the object kind */
4482 object_kind_track(o_ptr->k_idx);
4484 /* Hack -- Handle stuff */
4487 if ((p_ptr->pclass == CLASS_SORCERER) || (p_ptr->pclass == CLASS_RED_MAGE))
4488 realm = o_ptr->tval - TV_LIFE_BOOK + 1;
4489 else if (increment) realm = p_ptr->realm2;
4490 else realm = p_ptr->realm1;
4492 /* Ask for a spell */
4494 if (!get_spell(&spell,
4495 ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "±Ó¾§¤¹¤ë" : (mp_ptr->spell_book == TV_MUSIC_BOOK) ? "²Î¤¦" : "¾§¤¨¤ë"),
4498 if (spell == -2) msg_format("¤½¤ÎËܤˤÏÃΤäƤ¤¤ë%s¤¬¤Ê¤¤¡£", prayer);
4502 if (!get_spell(&spell, ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "recite" : "cast"),
4506 msg_format("You don't know any %ss in that book.", prayer);
4512 use_realm = tval2realm(o_ptr->tval);
4514 if (!is_magic(use_realm))
4516 s_ptr = &technic_info[use_realm - MIN_TECHNIC - 1][spell];
4520 s_ptr = &mp_ptr->info[realm - 1][spell];
4523 if (p_ptr->pclass == CLASS_SORCERER)
4524 shouhimana = s_ptr->smana*2200 + 2399;
4525 else if (p_ptr->pclass == CLASS_RED_MAGE)
4526 shouhimana = s_ptr->smana*2600 + 2399;
4528 shouhimana = (s_ptr->smana*(3800-spell_exp[(increment ? spell+32 : spell)])+2399);
4531 else shouhimana *= 4;
4533 if(shouhimana < 1) shouhimana = 1;
4535 /* Verify "dangerous" spells */
4536 if (shouhimana > p_ptr->csp)
4540 msg_format("¤½¤Î%s¤ò%s¤Î¤Ë½½Ê¬¤Ê¥Þ¥¸¥Ã¥¯¥Ý¥¤¥ó¥È¤¬¤Ê¤¤¡£",prayer,
4541 ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "±Ó¾§¤¹¤ë" : (mp_ptr->spell_book == TV_LIFE_BOOK) ? "²Î¤¦" : "¾§¤¨¤ë"));
4543 msg_format("You do not have enough mana to %s this %s.",
4544 ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "recite" : "cast"),
4549 if (!over_exert) return;
4553 if (!get_check("¤½¤ì¤Ç¤âÄ©À路¤Þ¤¹¤«? ")) return;
4555 if (!get_check("Attempt it anyway? ")) return;
4561 /* Spell failure chance */
4562 chance = spell_chance(spell, use_realm - 1);
4565 if (rand_int(100) < chance)
4567 if (flush_failure) flush();
4570 msg_format("%s¤ò¤¦¤Þ¤¯¾§¤¨¤é¤ì¤Ê¤«¤Ã¤¿¡ª", prayer);
4572 msg_format("You failed to get the %s off!", prayer);
4577 if (realm == REALM_LIFE)
4579 if (randint(100) < chance)
4580 chg_virtue(V_FAITH, -1);
4582 else if (realm == REALM_DEATH)
4584 if (randint(100) < chance)
4585 chg_virtue(V_UNLIFE, -1);
4587 else if (realm == REALM_NATURE)
4589 if (randint(100) < chance)
4590 chg_virtue(V_NATURE, -1);
4592 else if (realm == REALM_DAEMON)
4594 if (randint(100) < chance)
4595 chg_virtue(V_JUSTICE, 1);
4597 else if (randint(100) < chance)
4599 chg_virtue(V_KNOWLEDGE, -1);
4602 if (realm == REALM_TRUMP)
4604 cast_trump_spell(spell, FALSE);
4606 else if ((o_ptr->tval == TV_CHAOS_BOOK) && (randint(100) < spell))
4609 msg_print("¥«¥ª¥¹Åª¤Ê¸ú²Ì¤òȯÀ¸¤·¤¿¡ª");
4611 msg_print("You produce a chaotic effect!");
4616 else if ((o_ptr->tval == TV_DEATH_BOOK) && (randint(100) < spell))
4618 if ((sval == 3) && (randint(2) == 1))
4620 sanity_blast(0, TRUE);
4625 msg_print("Äˤ¤¡ª");
4627 msg_print("It hurts!");
4631 take_hit(DAMAGE_LOSELIFE, damroll(o_ptr->sval + 1, 6), "°Å¹õËâË¡¤ÎµÕή", -1);
4633 take_hit(DAMAGE_LOSELIFE, damroll(o_ptr->sval + 1, 6), "a miscast Death spell", -1);
4636 if ((spell > 15) && (randint(6) == 1) && !p_ptr->hold_life)
4637 lose_exp(spell * 250);
4640 else if ((o_ptr->tval == TV_MUSIC_BOOK) && (randint(200) < spell))
4642 msg_print("¤¤¤ä¤Ê²»¤¬¶Á¤¤¤¿");
4644 aggravate_monsters(0);
4646 if (randint(100) >= chance)
4647 chg_virtue(V_CHANCE,-1);
4656 case REALM_LIFE: /* * LIFE * */
4657 cast = cast_life_spell(spell);
4659 case REALM_SORCERY: /* * SORCERY * */
4660 cast = cast_sorcery_spell(spell);
4662 case REALM_NATURE: /* * NATURE * */
4663 cast = cast_nature_spell(spell);
4665 case REALM_CHAOS: /* * CHAOS * */
4666 cast = cast_chaos_spell(spell);
4668 case REALM_DEATH: /* * DEATH * */
4669 cast = cast_death_spell(spell);
4671 case REALM_TRUMP: /* TRUMP */
4672 cast = cast_trump_spell(spell, TRUE);
4674 case REALM_ARCANE: /* ARCANE */
4675 cast = cast_arcane_spell(spell);
4677 case REALM_ENCHANT: /* ENCHANT */
4678 cast = cast_enchant_spell(spell);
4680 case REALM_DAEMON: /* DAEMON */
4681 cast = cast_daemon_spell(spell);
4683 case REALM_MUSIC: /* MUSIC */
4684 cast = cast_music_spell(spell);
4688 msg_format("You cast a spell from an unknown realm: realm %d, spell %d.", realm, spell);
4692 /* Canceled spells cost neither a turn nor mana */
4695 if (randint(100) < chance)
4696 chg_virtue(V_CHANCE,1);
4698 /* A spell was cast */
4700 (spell_worked2 & (1L << spell)) :
4701 (spell_worked1 & (1L << spell)))
4702 && (p_ptr->pclass != CLASS_SORCERER)
4703 && (p_ptr->pclass != CLASS_RED_MAGE))
4705 int e = s_ptr->sexp;
4707 /* The spell worked */
4708 if (realm == p_ptr->realm1)
4710 spell_worked1 |= (1L << spell);
4714 spell_worked2 |= (1L << spell);
4717 /* Gain experience */
4718 gain_exp(e * s_ptr->slevel);
4720 if (realm == REALM_LIFE)
4722 chg_virtue(V_FAITH, 1);
4723 chg_virtue(V_COMPASSION, 1);
4724 chg_virtue(V_VITALITY, 1);
4725 chg_virtue(V_HONOUR, 1);
4727 else if (realm == REALM_DEATH)
4729 chg_virtue(V_UNLIFE, 1);
4730 chg_virtue(V_JUSTICE, -1);
4731 chg_virtue(V_FAITH, -1);
4732 chg_virtue(V_VITALITY, -1);
4734 else if (realm == REALM_DAEMON)
4736 chg_virtue(V_JUSTICE, -1);
4737 chg_virtue(V_FAITH, -1);
4738 chg_virtue(V_HONOUR, -1);
4739 chg_virtue(V_TEMPERANCE, -1);
4741 else if (realm == REALM_NATURE)
4743 chg_virtue(V_NATURE, 1);
4744 chg_virtue(V_HARMONY, 1);
4747 chg_virtue(V_KNOWLEDGE, 1);
4749 if (realm == REALM_LIFE)
4751 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_FAITH, 1);
4752 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_COMPASSION, 1);
4753 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_VITALITY, 1);
4754 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_HONOUR, 1);
4756 else if (realm == REALM_DEATH)
4758 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_UNLIFE, 1);
4759 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_JUSTICE, -1);
4760 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_FAITH, -1);
4761 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_VITALITY, -1);
4763 else if (realm == REALM_DAEMON)
4765 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_JUSTICE, -1);
4766 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_FAITH, -1);
4767 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_HONOUR, -1);
4768 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_TEMPERANCE, -1);
4770 else if (realm == REALM_NATURE)
4772 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_NATURE, 1);
4773 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_HARMONY, 1);
4775 if (mp_ptr->spell_xtra & MAGIC_GAIN_EXP)
4777 if (spell_exp[(increment ? 32 : 0)+spell] < 900)
4778 spell_exp[(increment ? 32 : 0)+spell]+=60;
4779 else if(spell_exp[(increment ? 32 : 0)+spell] < 1200)
4780 {if ((dun_level > 4) && ((dun_level + 10) > p_ptr->lev)) spell_exp[(increment ? 32 : 0)+spell]+=8;}
4781 else if(spell_exp[(increment ? 32 : 0)+spell] < 1400)
4782 {if (((dun_level + 5) > p_ptr->lev) && ((dun_level + 5) > s_ptr->slevel)) spell_exp[(increment ? 32 : 0)+spell]+=2;}
4783 else if((spell_exp[(increment ? 32 : 0)+spell] < 1600) && !increment)
4784 {if (((dun_level + 5) > p_ptr->lev) && (dun_level > s_ptr->slevel)) spell_exp[(increment ? 32 : 0)+spell]+=1;}
4791 /* Sufficient mana */
4792 if (shouhimana <= p_ptr->csp)
4795 p_ptr->csp -= shouhimana;
4798 /* Over-exert the player */
4801 int oops = shouhimana;
4805 p_ptr->csp_frac = 0;
4809 msg_print("Àº¿À¤ò½¸Ã椷¤¹¤®¤Æµ¤¤ò¼º¤Ã¤Æ¤·¤Þ¤Ã¤¿¡ª");
4811 msg_print("You faint from the effort!");
4815 /* Hack -- Bypass free action */
4816 (void)set_paralyzed(p_ptr->paralyzed + randint(5 * oops + 1));
4818 if (realm == REALM_LIFE)
4819 chg_virtue(V_FAITH, -10);
4820 else if (realm == REALM_DEATH)
4821 chg_virtue(V_UNLIFE, -10);
4822 else if (realm == REALM_DAEMON)
4823 chg_virtue(V_JUSTICE, 10);
4824 else if (realm == REALM_NATURE)
4825 chg_virtue(V_NATURE, -10);
4827 chg_virtue(V_KNOWLEDGE, -10);
4829 /* Damage CON (possibly permanently) */
4830 if (rand_int(100) < 50)
4832 bool perm = (rand_int(100) < 25);
4836 msg_print("ÂΤò°¤¯¤·¤Æ¤·¤Þ¤Ã¤¿¡ª");
4838 msg_print("You have damaged your health!");
4842 /* Reduce constitution */
4843 (void)dec_stat(A_CON, 15 + randint(10), perm);
4848 p_ptr->redraw |= (PR_MANA);
4851 p_ptr->window |= (PW_PLAYER);
4852 p_ptr->window |= (PW_SPELL);
4853 #endif /* USE_SCRIPT */
4858 * Pray a prayer -- Unused in Hengband
4860 void do_cmd_pray(void)
4862 msg_print("Praying is not used in Hengband. Use magic spell casting instead.");
4865 static bool ang_sort_comp_pet_dismiss(vptr u, vptr v, int a, int b)
4867 u16b *who = (u16b*)(u);
4872 monster_type *m_ptr1 = &m_list[w1];
4873 monster_type *m_ptr2 = &m_list[w2];
4874 monster_race *r_ptr1 = &r_info[m_ptr1->r_idx];
4875 monster_race *r_ptr2 = &r_info[m_ptr2->r_idx];
4877 if (w1 == p_ptr->riding) return TRUE;
4878 if (w2 == p_ptr->riding) return FALSE;
4880 if (m_ptr1->nickname && !m_ptr2->nickname) return TRUE;
4881 if (m_ptr2->nickname && !m_ptr1->nickname) return FALSE;
4883 if ((r_ptr1->flags1 & RF1_UNIQUE) && !(r_ptr2->flags1 & RF1_UNIQUE)) return TRUE;
4884 if ((r_ptr2->flags1 & RF1_UNIQUE) && !(r_ptr1->flags1 & RF1_UNIQUE)) return FALSE;
4886 if (r_ptr1->level > r_ptr2->level) return TRUE;
4887 if (r_ptr2->level > r_ptr1->level) return FALSE;
4889 if (m_ptr1->hp > m_ptr2->hp) return TRUE;
4890 if (m_ptr2->hp > m_ptr1->hp) return FALSE;
4895 int calculate_upkeep(void)
4897 s32b old_friend_align = friend_align;
4899 bool have_a_unique = FALSE;
4902 total_friend_levels = 0;
4905 for (m_idx = m_max - 1; m_idx >=1; m_idx--)
4907 monster_type *m_ptr;
4908 monster_race *r_ptr;
4910 m_ptr = &m_list[m_idx];
4911 if (!m_ptr->r_idx) continue;
4912 r_ptr = &r_info[m_ptr->r_idx];
4917 if (r_ptr->flags1 & RF1_UNIQUE)
4919 if (p_ptr->pclass == CLASS_CAVALRY)
4921 if (p_ptr->riding == m_idx)
4922 total_friend_levels += (r_ptr->level+5)*2;
4923 else if (!have_a_unique && (r_info[m_ptr->r_idx].flags7 & RF7_RIDING))
4924 total_friend_levels += (r_ptr->level+5)*7/2;
4926 total_friend_levels += (r_ptr->level+5)*10;
4927 have_a_unique = TRUE;
4930 total_friend_levels += (r_ptr->level+5)*10;
4933 total_friend_levels += r_ptr->level;
4935 /* Determine pet alignment */
4936 if (r_ptr->flags3 & RF3_GOOD)
4938 friend_align += r_ptr->level;
4940 else if (r_ptr->flags3 & RF3_EVIL)
4942 friend_align -= r_ptr->level;
4946 if (old_friend_align != friend_align) p_ptr->update |= (PU_BONUS);
4950 upkeep_factor = (total_friend_levels - (p_ptr->lev * 80 / (cp_ptr->pet_upkeep_div)));
4951 if (upkeep_factor < 0) upkeep_factor = 0;
4952 if (upkeep_factor > 1000) upkeep_factor = 1000;
4953 return upkeep_factor;
4959 void do_cmd_pet_dismiss(void)
4961 monster_type *m_ptr;
4962 bool all_pets = FALSE;
4976 /* Allocate the "who" array */
4977 C_MAKE(who, max_m_idx, u16b);
4979 /* Process the monsters (backwards) */
4980 for (pet_ctr = m_max - 1; pet_ctr >= 1; pet_ctr--)
4982 if (is_pet(&m_list[pet_ctr]))
4983 who[max_pet++] = pet_ctr;
4986 /* Select the sort method */
4987 ang_sort_comp = ang_sort_comp_pet_dismiss;
4988 ang_sort_swap = ang_sort_swap_hook;
4990 ang_sort(who, &dummy_why, max_pet);
4992 /* Process the monsters (backwards) */
4993 for (i = 0; i < max_pet; i++)
4995 /* Access the monster */
4997 m_ptr = &m_list[pet_ctr];
5000 bool delete_this = FALSE;
5001 char friend_name[80];
5002 bool kakunin = ((pet_ctr == p_ptr->riding) || (m_ptr->nickname));
5003 monster_desc(friend_name, m_ptr, 0x80);
5005 if (all_pets && !kakunin)
5010 char check_friend[80];
5014 sprintf(check_friend, "%s¤òÊü¤·¤Þ¤¹¤«¡© [Yes/No]", friend_name);
5016 sprintf(check_friend, "Dismiss %s? [Yes/No]", friend_name);
5022 sprintf(check_friend, "%s¤òÊü¤·¤Þ¤¹¤«¡© [Yes/No/All(%dɤ)]", friend_name, max_pet-i);
5024 sprintf(check_friend, "Dismiss %s? [Yes/No/All(%d remain)]", friend_name, max_pet-i);
5027 /* Hack -- health bar for this monster */
5028 health_track(pet_ctr);
5030 /* Hack -- handle stuff */
5033 prt(check_friend, 0, 0);
5036 move_cursor_relative(m_ptr->fy, m_ptr->fx);
5040 if (ch == ESCAPE) break;
5041 if (strchr("YyNnAa", ch)) break;
5045 if (ch == 'A' || ch == 'a') all_pets = TRUE;
5047 if (ch == 'Y' || ch == 'y' || ch == 'A' || ch == 'a')
5052 sprintf(check_friend, "ËÜÅö¤Ë¤è¤í¤·¤¤¤Ç¤¹¤«¡© (%s) ", friend_name);
5054 sprintf(check_friend, "Really? (%s) ", friend_name);
5056 if (!get_check(check_friend)) continue;
5058 if (record_named_pet && m_ptr->nickname)
5062 monster_desc(m_name, m_ptr, 0x08);
5063 do_cmd_write_nikki(NIKKI_NAMED_PET, 2, m_name);
5071 if (pet_ctr == p_ptr->riding)
5074 msg_format("%s¤«¤é¹ß¤ê¤¿¡£", friend_name);
5076 msg_format("You have got off %s. ", friend_name);
5081 /* Update the monsters */
5082 p_ptr->update |= (PU_BONUS | PU_MONSTERS);
5083 p_ptr->redraw |= (PR_EXTRA);
5085 delete_monster_idx(pet_ctr);
5095 C_KILL(who, max_m_idx, u16b);
5098 msg_format("%d ɤ¤Î¥Ú¥Ã¥È¤òÊü¤·¤Þ¤·¤¿¡£", Dismissed);
5100 msg_format("You have dismissed %d pet%s.", Dismissed,
5101 (Dismissed == 1 ? "" : "s"));
5104 p_ptr->update |= (PU_MON_LITE);
5107 bool rakuba(int dam, bool force)
5109 int i, y, x, oy, ox;
5110 int sn = 0, sy = 0, sx = 0;
5112 monster_type *m_ptr = &m_list[p_ptr->riding];
5113 monster_race *r_ptr = &r_info[m_ptr->r_idx];
5115 if (!p_ptr->riding) return FALSE;
5116 if (p_ptr->wild_mode) return FALSE;
5118 if (dam >= 0 || force)
5122 int level = r_ptr->level;
5123 if (p_ptr->riding_ryoute) level += 20;
5124 if ((dam/2 + r_ptr->level) > (skill_exp[GINOU_RIDING]/30+10))
5126 if((skill_exp[GINOU_RIDING] < skill_exp_settei[p_ptr->pclass][GINOU_RIDING][1]) && skill_exp_settei[p_ptr->pclass][GINOU_RIDING][1] > 1000)
5128 if (r_ptr->level*100 > (skill_exp[GINOU_RIDING] + 1500))
5129 skill_exp[GINOU_RIDING] += (1+(r_ptr->level - skill_exp[GINOU_RIDING]/100 - 15));
5130 else skill_exp[GINOU_RIDING]++;
5133 if (rand_int(dam/2 + level*2) < (skill_exp[GINOU_RIDING]/30+10))
5135 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))
5141 /* Check around the player */
5142 for (i = 0; i < 8; i++)
5146 /* Access the location */
5147 y = py + ddy_ddd[i];
5148 x = px + ddx_ddd[i];
5150 c_ptr = &cave[y][x];
5152 /* Skip non-empty grids */
5153 if (cave_perma_grid(c_ptr)) continue;
5154 if (!cave_empty_grid2(c_ptr)) continue;
5156 if (c_ptr->m_idx) continue;
5158 /* Count "safe" grids */
5161 /* Randomize choice */
5162 if (rand_int(sn) > 0) continue;
5164 /* Save the safe location */
5169 monster_desc(m_name, m_ptr, 0);
5171 msg_format("%s¤«¤é¿¶¤êÍî¤È¤µ¤ì¤½¤¦¤Ë¤Ê¤Ã¤Æ¡¢Êɤˤ֤Ĥ«¤Ã¤¿¡£",m_name);
5172 take_hit(DAMAGE_NOESCAPE, r_ptr->level+3, "Êɤؤξ×ÆÍ", -1);
5174 msg_format("You have nearly fallen from %s, but bumped into wall.",m_name);
5175 take_hit(DAMAGE_NOESCAPE, r_ptr->level+3, "bumping into wall", -1);
5186 /* Redraw the old spot */
5189 /* Redraw the new spot */
5192 /* Check for new panel */
5197 p_ptr->pet_extra_flags &= ~(PF_RYOUTE);
5198 p_ptr->riding_ryoute = p_ptr->old_riding_ryoute = FALSE;
5202 p_ptr->update |= (PU_BONUS);
5205 p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW);
5207 /* Update the monsters */
5208 p_ptr->update |= (PU_DISTANCE);
5211 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
5213 p_ptr->redraw |= (PR_EXTRA);
5215 if (p_ptr->ffall && !force)
5217 monster_desc(m_name, m_ptr, 0);
5219 msg_format("%s¤«¤éÍî¤Á¤¿¤¬¡¢¶õÃæ¤Ç¤¦¤Þ¤¯ÂÎÀª¤òΩ¤Æľ¤·¤ÆÃåÃϤ·¤¿¡£",m_name);
5221 msg_format("You are thrown from %s, but make a good landing.",m_name);
5226 take_hit(DAMAGE_NOESCAPE, r_ptr->level+3, "ÍîÇÏ", -1);
5228 take_hit(DAMAGE_NOESCAPE, r_ptr->level+3, "Falling from riding", -1);
5230 p_ptr->redraw |= (PR_UHEALTH);
5235 bool do_riding(bool force)
5237 int oy, ox, x, y, dir = 0;
5239 monster_type *m_ptr;
5241 if (!get_rep_dir2(&dir)) return FALSE;
5244 c_ptr = &cave[y][x];
5248 /* Skip non-empty grids */
5249 if (!cave_empty_bold2(y, x) || c_ptr->m_idx)
5252 msg_print("¤½¤Á¤é¤Ë¤Ï¹ß¤ê¤é¤ì¤Þ¤»¤ó¡£");
5254 msg_print("You cannot go to that direction.");
5259 p_ptr->pet_extra_flags &= ~(PF_RYOUTE);
5260 p_ptr->riding_ryoute = p_ptr->old_riding_ryoute = FALSE;
5264 if (p_ptr->confused)
5267 msg_print("º®Í𤷤Ƥ¤¤Æ¾è¤ì¤Ê¤¤¡ª");
5269 msg_print("You are too confused!");
5273 if (!(c_ptr->m_idx))
5276 msg_print("¤½¤Î¾ì½ê¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
5278 msg_print("Here is no pet.");
5284 m_ptr = &m_list[c_ptr->m_idx];
5286 if (!is_pet(m_ptr) && !force)
5289 msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤Ï¥Ú¥Ã¥È¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£");
5291 msg_print("That monster is no a pet.");
5296 if (!(r_info[m_ptr->r_idx].flags7 & RF7_RIDING))
5299 msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤Ë¤Ï¾è¤ì¤Ê¤µ¤½¤¦¤À¡£");
5301 msg_print("This monster doesn't seem suitable for riding.");
5306 if (!(p_ptr->pass_wall) && (c_ptr->feat >= FEAT_RUBBLE) && (c_ptr->feat <= FEAT_PERM_SOLID))
5309 msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤ÏÊɤÎÃæ¤Ë¤¤¤ë¡£");
5311 msg_print("This monster is in the wall.");
5316 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)))
5319 msg_print("¥Ñ¥¿¡¼¥ó¤Î¾å¤«¤é¤Ï¾è¤ì¤Þ¤»¤ó¡£");
5321 msg_print("You cannot ride from on Pattern.");
5329 msg_print("¤½¤Î¾ì½ê¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
5331 msg_print("Here is no monster.");
5336 if (r_info[m_ptr->r_idx].level > randint((skill_exp[GINOU_RIDING]/50 + p_ptr->lev/2 +20)))
5339 msg_print("¤¦¤Þ¤¯¾è¤ì¤Ê¤«¤Ã¤¿¡£");
5341 msg_print("You failed to ride.");
5351 monster_desc(m_name, m_ptr, 0);
5354 msg_format("%s¤òµ¯¤³¤·¤¿¡£", m_name);
5356 msg_format("You have waked %s up.", m_name);
5360 p_ptr->riding = c_ptr->m_idx;
5363 /* Save the old location */
5367 /* Move the player to the safe location */
5371 /* Redraw the old spot */
5374 /* Redraw the new spot */
5377 /* Check for new panel */
5382 /* Mega-Hack -- Forget the view and lite */
5383 p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE);
5386 p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW);
5388 /* Update the monsters */
5389 p_ptr->update |= (PU_DISTANCE);
5391 /* Update the monsters */
5392 p_ptr->update |= (PU_BONUS);
5395 p_ptr->redraw |= (PR_MAP | PR_EXTRA);
5398 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
5400 p_ptr->redraw |= (PR_UHEALTH);
5406 void do_name_pet(void)
5408 monster_type *m_ptr;
5411 bool old_name = FALSE;
5412 bool old_target_pet = target_pet;
5415 if (!target_set(TARGET_KILL))
5417 target_pet = old_target_pet;
5420 target_pet = old_target_pet;
5422 if (cave[target_row][target_col].m_idx)
5424 m_ptr = &m_list[cave[target_row][target_col].m_idx];
5430 msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤Ï¥Ú¥Ã¥È¤Ç¤Ï¤Ê¤¤¡£");
5432 msg_format("This monster is not a pet.");
5436 if (r_info[m_ptr->r_idx].flags1 & RF1_UNIQUE)
5439 msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤Î̾Á°¤ÏÊѤ¨¤é¤ì¤Ê¤¤¡ª");
5441 msg_format("You cannot change name of this monster!");
5445 monster_desc(m_name, m_ptr, 0);
5449 msg_format("%s¤Ë̾Á°¤ò¤Ä¤±¤ë¡£", m_name);
5451 msg_format("Name %s.", m_name);
5456 /* Start with nothing */
5457 strcpy(out_val, "");
5459 /* Use old inscription */
5460 if (m_ptr->nickname)
5462 /* Start with the old inscription */
5463 strcpy(out_val, quark_str(m_ptr->nickname));
5467 /* Get a new inscription (possibly empty) */
5469 if (get_string("̾Á°: ", out_val, 15))
5471 if (get_string("Name: ", out_val, 15))
5477 /* Save the inscription */
5478 m_ptr->nickname = quark_add(out_val);
5479 if (record_named_pet)
5483 monster_desc(m_name, m_ptr, 0x08);
5484 do_cmd_write_nikki(NIKKI_NAMED_PET, 0, m_name);
5489 if (record_named_pet && old_name)
5493 monster_desc(m_name, m_ptr, 0x08);
5494 do_cmd_write_nikki(NIKKI_NAMED_PET, 1, m_name);
5496 m_ptr->nickname = 0;
5503 * Issue a pet command
5505 void do_cmd_pet(void)
5510 cptr power_desc[36];
5515 int pets = 0, pet_ctr;
5516 monster_type *m_ptr;
5526 /* Calculate pets */
5527 /* Process the monsters (backwards) */
5528 for (pet_ctr = m_max - 1; pet_ctr >= 1; pet_ctr--)
5530 /* Access the monster */
5531 m_ptr = &m_list[pet_ctr];
5533 if (is_pet(m_ptr)) pets++;
5537 power_desc[num] = "¥Ú¥Ã¥È¤òÊü¤¹";
5539 power_desc[num] = "dismiss pets";
5542 powers[num++] = PET_DISMISS;
5545 sprintf(buf,"¥Ú¥Ã¥È¤Î¥¿¡¼¥²¥Ã¥È¤ò»ØÄê (¸½ºß¡§%s)",
5546 (pet_t_m_idx ? r_name + r_info[m_list[pet_t_m_idx].r_idx].name : "»ØÄê¤Ê¤·"));
5548 sprintf(buf,"specify a targert of pet (now:%s)",
5549 (pet_t_m_idx ? r_name + r_info[m_list[pet_t_m_idx].r_idx].name : "nothing"));
5551 power_desc[num] = buf;
5553 powers[num++] = PET_TARGET;
5556 power_desc[num] = "¶á¤¯¤Ë¤¤¤í";
5558 power_desc[num] = "stay close";
5561 if (p_ptr->pet_follow_distance == PET_CLOSE_DIST) mode = num;
5562 powers[num++] = PET_STAY_CLOSE;
5565 power_desc[num] = "¤Ä¤¤¤ÆÍ褤";
5567 power_desc[num] = "follow me";
5570 if (p_ptr->pet_follow_distance == PET_FOLLOW_DIST) mode = num;
5571 powers[num++] = PET_FOLLOW_ME;
5574 power_desc[num] = "Ũ¤ò¸«¤Ä¤±¤ÆÅݤ»";
5576 power_desc[num] = "seek and destroy";
5579 if (p_ptr->pet_follow_distance == PET_DESTROY_DIST) mode = num;
5580 powers[num++] = PET_SEEK_AND_DESTROY;
5583 power_desc[num] = "¾¯¤·Î¥¤ì¤Æ¤¤¤í";
5585 power_desc[num] = "give me space";
5588 if (p_ptr->pet_follow_distance == PET_SPACE_DIST) mode = num;
5589 powers[num++] = PET_ALLOW_SPACE;
5592 power_desc[num] = "Î¥¤ì¤Æ¤¤¤í";
5594 power_desc[num] = "stay away";
5597 if (p_ptr->pet_follow_distance == PET_AWAY_DIST) mode = num;
5598 powers[num++] = PET_STAY_AWAY;
5600 if (p_ptr->pet_extra_flags & PF_OPEN_DOORS)
5603 power_desc[num] = "¥É¥¢¤ò³«¤±¤ë (¸½ºß:ON)";
5605 power_desc[num] = "pets open doors (now On)";
5612 power_desc[num] = "¥É¥¢¤ò³«¤±¤ë (¸½ºß:OFF)";
5614 power_desc[num] = "pets open doors (now Off)";
5618 powers[num++] = PET_OPEN_DOORS;
5620 if (p_ptr->pet_extra_flags & PF_PICKUP_ITEMS)
5623 power_desc[num] = "¥¢¥¤¥Æ¥à¤ò½¦¤¦ (¸½ºß:ON)";
5625 power_desc[num] = "pets pick up items (now On)";
5632 power_desc[num] = "¥¢¥¤¥Æ¥à¤ò½¦¤¦ (¸½ºß:OFF)";
5634 power_desc[num] = "pets pick up items (now Off)";
5638 powers[num++] = PET_TAKE_ITEMS;
5640 if (p_ptr->pet_extra_flags & PF_TELEPORT)
5643 power_desc[num] = "¥Æ¥ì¥Ý¡¼¥È·ÏËâË¡¤ò»È¤¦ (¸½ºß:ON)";
5645 power_desc[num] = "allow teleport (now On)";
5652 power_desc[num] = "¥Æ¥ì¥Ý¡¼¥È·ÏËâË¡¤ò»È¤¦ (¸½ºß:OFF)";
5654 power_desc[num] = "allow teleport (now Off)";
5658 powers[num++] = PET_TELEPORT;
5660 if (p_ptr->pet_extra_flags & PF_ATTACK_SPELL)
5663 power_desc[num] = "¹¶·âËâË¡¤ò»È¤¦ (¸½ºß:ON)";
5665 power_desc[num] = "allow cast attack spell (now On)";
5672 power_desc[num] = "¹¶·âËâË¡¤ò»È¤¦ (¸½ºß:OFF)";
5674 power_desc[num] = "allow cast attack spell (now Off)";
5678 powers[num++] = PET_ATTACK_SPELL;
5680 if (p_ptr->pet_extra_flags & PF_SUMMON_SPELL)
5683 power_desc[num] = "¾¤´ËâË¡¤ò»È¤¦ (¸½ºß:ON)";
5685 power_desc[num] = "allow cast summon spell (now On)";
5692 power_desc[num] = "¾¤´ËâË¡¤ò»È¤¦ (¸½ºß:OFF)";
5694 power_desc[num] = "allow cast summon spell (now Off)";
5698 powers[num++] = PET_SUMMON_SPELL;
5700 if (p_ptr->pet_extra_flags & PF_BALL_SPELL)
5703 power_desc[num] = "¥×¥ì¥¤¥ä¡¼¤ò´¬¤¹þ¤àÈÏ°ÏËâË¡¤ò»È¤¦ (¸½ºß:ON)";
5705 power_desc[num] = "allow involve player in area spell (now On)";
5712 power_desc[num] = "¥×¥ì¥¤¥ä¡¼¤ò´¬¤¹þ¤àÈÏ°ÏËâË¡¤ò»È¤¦ (¸½ºß:OFF)";
5714 power_desc[num] = "allow involve player in area spell (now Off)";
5718 powers[num++] = PET_BALL_SPELL;
5723 power_desc[num] = "¥Ú¥Ã¥È¤«¤é¹ß¤ê¤ë";
5725 power_desc[num] = "get off a pet";
5732 power_desc[num] = "¥Ú¥Ã¥È¤Ë¾è¤ë";
5734 power_desc[num] = "ride a pet";
5738 powers[num++] = PET_RIDING;
5741 power_desc[num] = "¥Ú¥Ã¥È¤Ë̾Á°¤ò¤Ä¤±¤ë¡£";
5743 power_desc[num] = "name pets";
5746 powers[num++] = PET_NAME;
5748 if (p_ptr->riding && buki_motteruka(INVEN_RARM) && (empty_hands(FALSE) & 0x00000001) && ((inventory[INVEN_RARM].weight > 99) || (inventory[INVEN_RARM].tval == TV_POLEARM)))
5750 if (p_ptr->pet_extra_flags & PF_RYOUTE)
5753 power_desc[num] = "Éð´ï¤òÊÒ¼ê¤Ç»ý¤Ä";
5755 power_desc[num] = "use one hand to control a riding pet";
5762 power_desc[num] = "Éð´ï¤òξ¼ê¤Ç»ý¤Ä";
5764 power_desc[num] = "use both hands for a weapon.";
5769 powers[num++] = PET_RYOUTE;
5772 /* Nothing chosen yet */
5775 /* Build a prompt (accept all spells) */
5778 /* Build a prompt (accept all spells) */
5780 strnfmt(out_val, 78, "(¥³¥Þ¥ó¥É %c-%c¡¢'*'=°ìÍ÷¡¢ESC=½ªÎ») ¥³¥Þ¥ó¥É¤òÁª¤ó¤Ç¤¯¤À¤µ¤¤:",
5782 strnfmt(out_val, 78, "(Command %c-%c, *=List, ESC=exit) Select a command: ",
5785 I2A(0), I2A(num - 1));
5790 strnfmt(out_val, 78, "(¥³¥Þ¥ó¥É %c-%c¡¢'*'=°ìÍ÷¡¢ESC=½ªÎ») ¥³¥Þ¥ó¥É¤òÁª¤ó¤Ç¤¯¤À¤µ¤¤:",
5792 strnfmt(out_val, 78, "(Command %c-%c, *=List, ESC=exit) Select a command: ",
5795 I2A(0), '0' + num - 27);
5801 /* Save the screen */
5808 prt(format("%s%c) %s", (ctr == mode) ? "*" : " ", I2A(ctr), power_desc[ctr]), y + ctr, x);
5814 prt("", y + ctr, x);
5821 /* Get a command from the user */
5822 while (!flag && get_com(out_val, &choice, TRUE))
5824 /* Request redraw */
5825 if ((choice == ' ') || (choice == '*') || (choice == '?'))
5837 /* Save the screen */
5844 sprintf(buf, "%s%c) %s", (ctr == mode) ? "*" : " ", I2A(ctr), power_desc[ctr]);
5845 prt(buf, y + ctr, x);
5851 prt("", y + ctr, x);
5865 /* Restore the screen */
5873 if (choice == '\r' && num == 1)
5878 if (isalpha(choice))
5881 ask = (isupper(choice));
5884 if (ask) choice = tolower(choice);
5886 /* Extract request */
5887 i = (islower(choice) ? A2I(choice) : -1);
5891 ask = FALSE; /* Can't uppercase digits */
5893 i = choice - '0' + 26;
5896 /* Totally Illegal */
5897 if ((i < 0) || (i >= num))
5908 strnfmt(buf, 78, "%s¤ò»È¤¤¤Þ¤¹¤«¡© ", power_desc[i]);
5910 strnfmt(buf, 78, "Use %s? ", power_desc[i]);
5914 /* Belay that order */
5915 if (!get_check(buf)) continue;
5922 /* Restore the screen */
5923 if (redraw) Term_load();
5925 /* Abort if needed */
5934 case PET_DISMISS: /* Dismiss pets */
5939 msg_print("¥Ú¥Ã¥È¤¬¤¤¤Ê¤¤¡ª");
5941 msg_print("You have no pets!");
5945 do_cmd_pet_dismiss();
5946 (void)calculate_upkeep();
5951 project_length = -1;
5952 if (!target_set(TARGET_KILL)) pet_t_m_idx = 0;
5955 cave_type *c_ptr = &cave[target_row][target_col];
5956 if (c_ptr->m_idx && (m_list[c_ptr->m_idx].ml))
5958 pet_t_m_idx = cave[target_row][target_col].m_idx;
5959 p_ptr->pet_follow_distance = PET_DESTROY_DIST;
5961 else pet_t_m_idx = 0;
5968 case PET_STAY_CLOSE:
5970 p_ptr->pet_follow_distance = PET_CLOSE_DIST;
5977 p_ptr->pet_follow_distance = PET_FOLLOW_DIST;
5981 /* "Seek and destoy" */
5982 case PET_SEEK_AND_DESTROY:
5984 p_ptr->pet_follow_distance = PET_DESTROY_DIST;
5987 /* "Give me space" */
5988 case PET_ALLOW_SPACE:
5990 p_ptr->pet_follow_distance = PET_SPACE_DIST;
5996 p_ptr->pet_follow_distance = PET_AWAY_DIST;
5999 /* flag - allow pets to open doors */
6000 case PET_OPEN_DOORS:
6002 if (p_ptr->pet_extra_flags & PF_OPEN_DOORS) p_ptr->pet_extra_flags &= ~(PF_OPEN_DOORS);
6003 else p_ptr->pet_extra_flags |= (PF_OPEN_DOORS);
6006 /* flag - allow pets to pickup items */
6007 case PET_TAKE_ITEMS:
6009 if (p_ptr->pet_extra_flags & PF_PICKUP_ITEMS)
6011 p_ptr->pet_extra_flags &= ~(PF_PICKUP_ITEMS);
6012 for (pet_ctr = m_max - 1; pet_ctr >= 1; pet_ctr--)
6014 /* Access the monster */
6015 m_ptr = &m_list[pet_ctr];
6019 monster_drop_carried_objects(m_ptr);
6023 else p_ptr->pet_extra_flags |= (PF_PICKUP_ITEMS);
6027 /* flag - allow pets to teleport */
6030 if (p_ptr->pet_extra_flags & PF_TELEPORT) p_ptr->pet_extra_flags &= ~(PF_TELEPORT);
6031 else p_ptr->pet_extra_flags |= (PF_TELEPORT);
6034 /* flag - allow pets to cast attack spell */
6035 case PET_ATTACK_SPELL:
6037 if (p_ptr->pet_extra_flags & PF_ATTACK_SPELL) p_ptr->pet_extra_flags &= ~(PF_ATTACK_SPELL);
6038 else p_ptr->pet_extra_flags |= (PF_ATTACK_SPELL);
6041 /* flag - allow pets to cast attack spell */
6042 case PET_SUMMON_SPELL:
6044 if (p_ptr->pet_extra_flags & PF_SUMMON_SPELL) p_ptr->pet_extra_flags &= ~(PF_SUMMON_SPELL);
6045 else p_ptr->pet_extra_flags |= (PF_SUMMON_SPELL);
6048 /* flag - allow pets to cast attack spell */
6049 case PET_BALL_SPELL:
6051 if (p_ptr->pet_extra_flags & PF_BALL_SPELL) p_ptr->pet_extra_flags &= ~(PF_BALL_SPELL);
6052 else p_ptr->pet_extra_flags |= (PF_BALL_SPELL);
6070 if (p_ptr->pet_extra_flags & PF_RYOUTE) p_ptr->pet_extra_flags &= ~(PF_RYOUTE);
6071 else p_ptr->pet_extra_flags |= (PF_RYOUTE);
6072 p_ptr->update |= (PU_BONUS);