3 /* Purpose: Spell/Prayer commands */
6 * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke
8 * This software may be copied and distributed for educational, research, and
9 * not for profit purposes provided that this copyright and statement are
10 * included in all such copies.
15 #include "spellstips.h"
17 cptr spell_categoly_name(int tval)
22 case TV_HISSATSU_BOOK:
31 case TV_HISSATSU_BOOK:
44 * Allow user to choose a spell/prayer from the given book.
46 * If a valid spell is chosen, saves it in '*sn' and returns TRUE
47 * If the user hits escape, returns FALSE, and set '*sn' to -1
48 * If there are no legal choices, returns FALSE, and sets '*sn' to -2
50 * The "prompt" should be "cast", "recite", or "study"
51 * The "known" should be TRUE for cast/pray, FALSE for study
54 bool select_spellbook=FALSE;
55 bool select_the_force=FALSE;
57 static int get_spell(int *sn, cptr prompt, int sval, bool learned, int use_realm)
65 bool flag, redraw, okay;
73 int menu_line = (use_menu ? 1 : 0);
75 #ifdef ALLOW_REPEAT /* TNB */
77 /* Get the spell, if available */
80 /* Verify the spell */
81 if (spell_okay(*sn, learned, FALSE, use_realm - 1))
88 #endif /* ALLOW_REPEAT -- TNB */
90 p = spell_categoly_name(mp_ptr->spell_book);
93 for (spell = 0; spell < 32; spell++)
95 /* Check for this spell */
96 if ((fake_spell_flags[sval] & (1L << spell)))
98 /* Collect this spell */
99 spells[num++] = spell;
103 /* Assume no usable spells */
106 /* Assume no spells available */
109 /* Check for "okay" spells */
110 for (i = 0; i < num; i++)
112 /* Look for "okay" spells */
113 if (spell_okay(spells[i], learned, FALSE, use_realm - 1)) okay = TRUE;
116 /* No "okay" spells */
117 if (!okay) return (FALSE);
118 if (((use_realm) != p_ptr->realm1) && ((use_realm) != p_ptr->realm2) && (p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE)) return FALSE;
119 if (((p_ptr->pclass == CLASS_SORCERER) || (p_ptr->pclass == CLASS_RED_MAGE)) && !is_magic(use_realm)) return FALSE;
120 if ((p_ptr->pclass == CLASS_RED_MAGE) && ((use_realm) != REALM_ARCANE) && (sval > 1)) return FALSE;
122 /* Assume cancelled */
125 /* Nothing chosen yet */
135 p_ptr->window |= (PW_SPELL);
141 /* Build a prompt (accept all spells) */
143 jverb1( prompt, jverb_buf );
144 (void) strnfmt(out_val, 78, "(%^s:%c-%c, '*'¤Ç°ìÍ÷, ESC¤ÇÃæÃÇ) ¤É¤Î%s¤ò%^s¤Þ¤¹¤«? ",
145 p, I2A(0), I2A(num - 1), p, jverb_buf );
147 (void)strnfmt(out_val, 78, "(%^ss %c-%c, *=List, ESC=exit) %^s which %s? ",
148 p, I2A(0), I2A(num - 1), prompt, p);
151 /* Get a spell from the user */
153 choice = (always_show_list || use_menu) ? ESCAPE:1;
156 if( choice==ESCAPE ) choice = ' ';
157 else if( !get_com(out_val, &choice, TRUE) )break;
159 if (use_menu && choice != ' ')
174 menu_line += (num - 1);
195 if (menu_line > num) menu_line -= num;
196 /* Display a list of spells */
197 print_spells(menu_line, spells, num, 1, 15, use_realm - 1);
203 if ((choice == ' ') || (choice == '*') || (choice == '?'))
211 /* Save the screen */
214 /* Display a list of spells */
215 print_spells(menu_line, spells, num, 1, 15, use_realm - 1);
221 if (use_menu) continue;
226 /* Restore the screen */
236 ask = (isupper(choice));
239 if (ask) choice = tolower(choice);
241 /* Extract request */
242 i = (islower(choice) ? A2I(choice) : -1);
245 /* Totally Illegal */
246 if ((i < 0) || (i >= num))
252 /* Save the spell index */
255 /* Require "okay" spells */
256 if (!spell_okay(spell, learned, FALSE, use_realm - 1))
260 msg_format("¤½¤Î%s¤ò%s¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¡£", p, prompt);
262 msg_format("You may not %s that %s.", prompt, p);
273 /* Access the spell */
274 if (!is_magic(use_realm))
276 s_ptr = &technic_info[use_realm - MIN_TECHNIC - 1][spell];
280 s_ptr = &mp_ptr->info[use_realm - 1][spell % 32];
283 if (use_realm == REALM_HISSATSU)
285 shouhimana = s_ptr->smana;
289 if (p_ptr->pclass == CLASS_SORCERER)
290 shouhimana = s_ptr->smana*2200 + 2399;
291 else if (p_ptr->pclass == CLASS_RED_MAGE)
292 shouhimana = s_ptr->smana*2600 + 2399;
294 shouhimana = (s_ptr->smana*(3800-spell_exp[spell])+2399);
297 else shouhimana *= 4;
299 if(shouhimana < 1) shouhimana = 1;
304 jverb1( prompt, jverb_buf );
305 /* ±ÑÆüÀÚ¤êÂؤ¨µ¡Ç½¤ËÂбþ */
306 (void) strnfmt(tmp_val, 78, "%s(MP%d, ¼ºÇÔΨ%d%%)¤ò%s¤Þ¤¹¤«? ",
307 spell_names[technic2magic(use_realm)-1][spell % 32], shouhimana,
308 spell_chance(spell, use_realm -1),jverb_buf);
310 (void)strnfmt(tmp_val, 78, "%^s %s (%d mana, %d%% fail)? ",
311 prompt, spell_names[technic2magic(use_realm)-1][spell % 32], shouhimana,
312 spell_chance(spell, use_realm - 1));
316 /* Belay that order */
317 if (!get_check(tmp_val)) continue;
325 /* Restore the screen */
326 if (redraw) screen_load();
333 p_ptr->window |= (PW_SPELL);
340 /* Abort if needed */
341 if (!flag) return (FALSE);
343 /* Save the choice */
346 #ifdef ALLOW_REPEAT /* TNB */
350 #endif /* ALLOW_REPEAT -- TNB */
357 static bool item_tester_learn_spell(object_type *o_ptr)
359 s32b choices = realm_choices2[p_ptr->pclass];
361 if (p_ptr->pclass == CLASS_PRIEST)
363 if (p_ptr->realm1 == REALM_LIFE)
365 choices &= ~(CH_DEATH | CH_DAEMON);
367 else if ((p_ptr->realm1 == REALM_DEATH) || (p_ptr->realm1 == REALM_DAEMON))
369 choices &= ~(CH_LIFE);
373 if ((o_ptr->tval < TV_LIFE_BOOK) || (o_ptr->tval > (TV_LIFE_BOOK + MAX_REALM - 1))) return (FALSE);
374 if ((o_ptr->tval == TV_MUSIC_BOOK) && (p_ptr->pclass == CLASS_BARD)) return (TRUE);
375 else if (!is_magic(tval2realm(o_ptr->tval))) return FALSE;
376 if ((REALM1_BOOK == o_ptr->tval) || (REALM2_BOOK == o_ptr->tval)) return (TRUE);
377 if (choices & (0x0001 << (tval2realm(o_ptr->tval) - 1))) return (TRUE);
383 * Peruse the spells/prayers in a book
385 * Note that *all* spells in the book are listed
387 * Note that browsing is allowed while confused or blind,
388 * and in the dark, primarily to allow browsing in stores.
390 void do_cmd_browse(void)
392 int item, sval, use_realm = 0, j, line;
405 /* Warriors are illiterate */
406 if (!(p_ptr->realm1 || p_ptr->realm2) && (p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE))
409 msg_print("ËܤòÆɤळ¤È¤¬¤Ç¤¤Ê¤¤¡ª");
411 msg_print("You cannot read books!");
417 if (p_ptr->special_defense & KATA_MUSOU)
419 set_action(ACTION_NONE);
422 /* Restrict choices to "useful" books */
423 if (p_ptr->realm2 == REALM_NONE) item_tester_tval = mp_ptr->spell_book;
424 else item_tester_hook = item_tester_learn_spell;
428 q = "¤É¤ÎËܤòÆɤߤޤ¹¤«? ";
430 q = "Browse which book? ";
434 s = "Æɤá¤ëËܤ¬¤Ê¤¤¡£";
436 s = "You have no books that you can read.";
439 select_spellbook=TRUE;
440 if (p_ptr->pclass == CLASS_FORCETRAINER)
441 select_the_force = TRUE;
442 if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))){
443 select_spellbook = FALSE;
444 select_the_force = FALSE;
447 select_spellbook = FALSE;
448 select_the_force = FALSE;
450 if (item == 1111) { /* the_force */
451 do_cmd_mind_browse();
454 /* Get the item (in the pack) */
457 o_ptr = &inventory[item];
460 /* Get the item (on the floor) */
463 o_ptr = &o_list[0 - item];
466 /* Access the item's sval */
469 use_realm = tval2realm(o_ptr->tval);
470 if ((p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE) && is_magic(use_realm))
472 if (o_ptr->tval == REALM2_BOOK) increment = 32;
473 else if (o_ptr->tval != REALM1_BOOK) increment = 64;
476 /* Track the object kind */
477 object_kind_track(o_ptr->k_idx);
479 /* Hack -- Handle stuff */
484 for (spell = 0; spell < 32; spell++)
486 /* Check for this spell */
487 if ((fake_spell_flags[sval] & (1L << spell)))
489 /* Collect this spell */
490 spells[num++] = spell;
495 /* Save the screen */
498 /* Clear the top line */
501 /* Keep browsing spells. Exit browsing on cancel. */
504 /* Ask for a spell, allow cancel */
506 if (!get_spell(&spell, "Æɤà", o_ptr->sval, TRUE, use_realm))
508 if (!get_spell(&spell, "browse", o_ptr->sval, TRUE, use_realm))
511 /* If cancelled, leave immediately. */
512 if (spell == -1) break;
514 /* Display a list of spells */
515 print_spells(0, spells, num, 1, 15, use_realm - 1);
517 /* Notify that there's nothing to see, and wait. */
518 if (use_realm == REALM_HISSATSU)
520 prt("Æɤá¤ëµ»¤¬¤Ê¤¤¡£", 0, 0);
522 prt("No techniques to browse.", 0, 0);
526 prt("Æɤá¤ë¼öʸ¤¬¤Ê¤¤¡£", 0, 0);
528 prt("No spells to browse.", 0, 0);
533 /* Restore the screen */
539 /* Clear lines, position cursor (really should use strlen here) */
540 Term_erase(14, 14, 255);
541 Term_erase(14, 13, 255);
542 Term_erase(14, 12, 255);
543 Term_erase(14, 11, 255);
545 /* Access the spell */
546 if (!is_magic(use_realm))
548 s_ptr = &technic_info[use_realm - MIN_TECHNIC - 1][spell];
552 s_ptr = &mp_ptr->info[use_realm - 1][spell];
555 roff_to_buf( spell_tips[technic2magic(use_realm)-1][spell] ,62,temp);
556 for(j=0, line = 11;temp[j];j+=(1+strlen(&temp[j])))
558 prt(&temp[j], line, 15);
563 /* Restore the screen */
568 static void change_realm2(int next_realm)
573 for (i = 0; i < 64; i++)
575 spell_order[j] = spell_order[i];
576 if(spell_order[i] < 32) j++;
581 for (i = 32; i < 64; i++)
587 spell_forgotten2 = 0L;
590 sprintf(tmp,"ËâË¡¤ÎÎΰè¤ò%s¤«¤é%s¤ËÊѹ¹¤·¤¿¡£", realm_names[p_ptr->realm2], realm_names[next_realm]);
592 sprintf(tmp,"change magic realm from %s to %s.", realm_names[p_ptr->realm2], realm_names[next_realm]);
594 do_cmd_write_nikki(NIKKI_BUNSHOU, 0, tmp);
595 p_ptr->old_realm |= 1 << (p_ptr->realm2-1);
596 p_ptr->realm2 = next_realm;
598 p_ptr->notice |= (PN_REORDER);
599 p_ptr->update |= (PU_SPELLS);
605 * Study a book to gain a new spell/prayer
607 void do_cmd_study(void)
611 bool learned = FALSE;
613 /* Spells of realm2 will have an increment of +32 */
616 cptr p = spell_categoly_name(mp_ptr->spell_book);
625 msg_print("ËܤòÆɤळ¤È¤¬¤Ç¤¤Ê¤¤¡ª");
627 msg_print("You cannot read books!");
633 if (p_ptr->blind || no_lite())
636 msg_print("Ìܤ¬¸«¤¨¤Ê¤¤¡ª");
638 msg_print("You cannot see!");
647 msg_print("º®Í𤷤Ƥ¤¤ÆÆɤá¤Ê¤¤¡ª");
649 msg_print("You are too confused!");
655 if (!(p_ptr->new_spells))
658 msg_format("¿·¤·¤¤%s¤ò³Ð¤¨¤ë¤³¤È¤Ï¤Ç¤¤Ê¤¤¡ª", p);
660 msg_format("You cannot learn any new %ss!", p);
666 if (p_ptr->special_defense & KATA_MUSOU)
668 set_action(ACTION_NONE);
671 p = spell_categoly_name(mp_ptr->spell_book);
674 if( p_ptr->new_spells < 10 ){
675 msg_format("¤¢¤È %d ¤Ä¤Î%s¤ò³Ø¤Ù¤ë¡£", p_ptr->new_spells, p);
677 msg_format("¤¢¤È %d ¸Ä¤Î%s¤ò³Ø¤Ù¤ë¡£", p_ptr->new_spells, p);
680 msg_format("You can learn %d new %s%s.", p_ptr->new_spells, p,
681 (p_ptr->new_spells == 1?"":"s"));
687 /* Restrict choices to "useful" books */
688 if (p_ptr->realm2 == REALM_NONE) item_tester_tval = mp_ptr->spell_book;
689 else item_tester_hook = item_tester_learn_spell;
693 q = "¤É¤ÎËܤ«¤é³Ø¤Ó¤Þ¤¹¤«? ";
695 q = "Study which book? ";
699 s = "Æɤá¤ëËܤ¬¤Ê¤¤¡£";
701 s = "You have no books that you can read.";
704 select_spellbook=TRUE;
705 if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return;
706 select_spellbook=FALSE;
708 /* Get the item (in the pack) */
711 o_ptr = &inventory[item];
714 /* Get the item (on the floor) */
717 o_ptr = &o_list[0 - item];
720 /* Access the item's sval */
723 if (o_ptr->tval == REALM2_BOOK) increment = 32;
724 else if (o_ptr->tval != REALM1_BOOK)
727 if (!get_check("ËÜÅö¤ËËâË¡¤ÎÎΰè¤òÊѹ¹¤·¤Þ¤¹¤«¡©")) return;
729 if (!get_check("Really, change magic realm? ")) return;
731 change_realm2(tval2realm(o_ptr->tval));
735 /* Track the object kind */
736 object_kind_track(o_ptr->k_idx);
738 /* Hack -- Handle stuff */
741 /* Mage -- Learn a selected spell */
742 if (mp_ptr->spell_book != TV_LIFE_BOOK)
744 /* Ask for a spell, allow cancel */
746 if (!get_spell(&spell, "³Ø¤Ö", sval, FALSE, o_ptr->tval - TV_LIFE_BOOK + 1)
747 && (spell == -1)) return;
749 if (!get_spell(&spell, "study", sval, FALSE, o_ptr->tval - TV_LIFE_BOOK + 1)
750 && (spell == -1)) return;
755 /* Priest -- Learn a random prayer */
763 for (spell = 0; spell < 32; spell++)
765 /* Check spells in the book */
766 if ((fake_spell_flags[sval] & (1L << spell)))
768 /* Skip non "okay" prayers */
769 if (!spell_okay(spell, FALSE, TRUE,
770 (increment ? p_ptr->realm2 - 1 : p_ptr->realm1 - 1))) continue;
772 /* Hack -- Prepare the randomizer */
775 /* Hack -- Apply the randomizer */
776 if (rand_int(k) == 0) gift = spell;
784 /* Nothing to study */
789 msg_format("¤½¤ÎËܤˤϳؤ֤٤%s¤¬¤Ê¤¤¡£", p);
791 msg_format("You cannot learn any %ss in that book.", p);
800 if (increment) spell += increment;
802 /* Learn the spell */
805 if (spell_learned1 & (1L << spell)) learned = TRUE;
806 else spell_learned1 |= (1L << spell);
810 if (spell_learned2 & (1L << (spell - 32))) learned = TRUE;
811 else spell_learned2 |= (1L << (spell - 32));
816 int max_exp = (spell < 32) ? 1600 : 1400;
817 int old_exp = spell_exp[spell];
819 cptr name = spell_names[technic2magic(increment ? p_ptr->realm2 : p_ptr->realm1)-1][spell%32];
821 if (old_exp >= max_exp)
824 msg_format("¤½¤Î%s¤Ï´°Á´¤Ë»È¤¤¤³¤Ê¤»¤ë¤Î¤Ç³Ø¤ÖɬÍפϤʤ¤¡£", spell_categoly_name(mp_ptr->spell_book));
826 msg_format("You don't need to study this %s anymore.", spell_categoly_name(mp_ptr->spell_book));
831 if (!get_check(format("%s¤Î%s¤ò¤µ¤é¤Ë³Ø¤Ó¤Þ¤¹¡£¤è¤í¤·¤¤¤Ç¤¹¤«¡©", name, spell_categoly_name(mp_ptr->spell_book))))
833 if (!get_check(format("You will study a %s of %s again. Are you sure? ", spell_categoly_name(mp_ptr->spell_book), name)))
838 else if (old_exp >= 1400)
840 spell_exp[spell] = 1600;
843 else if (old_exp >= 1200)
845 if (spell >= 32) spell_exp[spell] = 1400;
846 else spell_exp[spell] += 200;
849 else if (old_exp >= 900)
851 spell_exp[spell] = 1200+(old_exp-900)*2/3;
856 spell_exp[spell] = 900+(old_exp)/3;
860 msg_format("%s¤Î½ÏÎýÅÙ¤¬%s¤Ë¾å¤¬¤Ã¤¿¡£", name, shougou_moji[new_rank]);
862 msg_format("Your proficiency of %s is now %s rank.", name, shougou_moji[new_rank]);
867 /* Find the next open entry in "spell_order[]" */
868 for (i = 0; i < 64; i++)
870 /* Stop at the first empty space */
871 if (spell_order[i] == 99) break;
874 /* Add the spell to the known list */
875 spell_order[i++] = spell;
877 /* Mention the result */
879 /* ±ÑÆüÀÚ¤êÂؤ¨µ¡Ç½¤ËÂбþ */
880 if (mp_ptr->spell_book == TV_MUSIC_BOOK)
882 msg_format("%s¤ò³Ø¤ó¤À¡£",
883 spell_names[technic2magic(increment ? p_ptr->realm2 : p_ptr->realm1)-1][spell % 32]);
887 msg_format("%s¤Î%s¤ò³Ø¤ó¤À¡£",
888 spell_names[technic2magic(increment ? p_ptr->realm2 : p_ptr->realm1)-1][spell % 32] ,p);
891 msg_format("You have learned the %s of %s.",
892 p, spell_names[technic2magic(increment ? p_ptr->realm2 : p_ptr->realm1)-1][spell % 32]);
899 if (mp_ptr->spell_book == TV_LIFE_BOOK)
900 chg_virtue(V_FAITH, 1);
901 else if (mp_ptr->spell_book == TV_DEATH_BOOK)
902 chg_virtue(V_UNLIFE, 1);
903 else if (mp_ptr->spell_book == TV_NATURE_BOOK)
904 chg_virtue(V_NATURE, 1);
906 chg_virtue(V_KNOWLEDGE, 1);
911 /* One less spell available */
912 p_ptr->learned_spells++;
914 /* Message if needed */
915 if (p_ptr->new_spells)
919 if( p_ptr->new_spells < 10 ){
920 msg_format("¤¢¤È %d ¤Ä¤Î%s¤ò³Ø¤Ù¤ë¡£", p_ptr->new_spells, p);
922 msg_format("¤¢¤È %d ¸Ä¤Î%s¤ò³Ø¤Ù¤ë¡£", p_ptr->new_spells, p);
925 msg_format("You can learn %d more %s%s.",
926 p_ptr->new_spells, p,
927 (p_ptr->new_spells != 1) ? "s" : "");
934 p_ptr->update |= (PU_SPELLS);
939 void wild_magic(int spell)
942 int type = SUMMON_BIZARRE1 + rand_int(6);
944 if (type < SUMMON_BIZARRE1) type = SUMMON_BIZARRE1;
945 else if (type > SUMMON_BIZARRE6) type = SUMMON_BIZARRE6;
947 switch (randint(spell) + randint(8) + 1)
957 teleport_player(100);
961 teleport_player(200);
971 lite_area(damroll(2, 3), 2);
974 destroy_doors_touch();
979 sleep_monsters_touch();
983 trap_creation(py, px);
992 aggravate_monsters(0);
995 earthquake(py, px, 5);
999 (void)gain_random_mutation(0);
1003 apply_disenchant(0);
1009 fire_ball(GF_CHAOS, 0, spell + 5, 1 + (spell / 10));
1016 while (counter++ < 8)
1018 (void)summon_specific(0, py, px, (dun_level * 3) / 2, type, TRUE, FALSE, FALSE, FALSE, TRUE);
1023 activate_hi_summon(py, px, FALSE);
1026 (void)summon_cyber(-1, py, px);
1031 (void)activate_ty_curse(FALSE, &count);
1040 static bool cast_life_spell(int spell)
1043 int plev = p_ptr->lev;
1047 case 0: /* Detect Evil */
1048 (void)detect_monsters_evil(DETECT_RAD_DEFAULT);
1050 case 1: /* Cure Light Wounds */
1051 (void)hp_player(damroll(2, 10));
1052 (void)set_cut(p_ptr->cut - 10);
1055 (void)set_blessed(randint(12) + 12, FALSE);
1057 case 3: /* Remove Fear */
1058 (void)set_afraid(0);
1060 case 4: /* Call Light */
1061 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
1063 case 5: /* Detect Traps + Secret Doors */
1064 (void)detect_traps(DETECT_RAD_DEFAULT);
1065 (void)detect_doors(DETECT_RAD_DEFAULT);
1066 (void)detect_stairs(DETECT_RAD_DEFAULT);
1068 case 6: /* Cure Medium Wounds */
1069 (void)hp_player(damroll(4, 10));
1070 (void)set_cut((p_ptr->cut / 2) - 20);
1072 case 7: /* Satisfy Hunger */
1073 (void)set_food(PY_FOOD_MAX - 1);
1075 case 8: /* Remove Curse */
1079 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
1081 msg_print("You feel as if someone is watching over you.");
1085 case 9: /* Cure Poison */
1086 (void)set_poisoned(0);
1088 case 10: /* Cure Critical Wounds */
1089 (void)hp_player(damroll(8, 10));
1093 case 11: /* Sense Unseen */
1094 (void)set_tim_invis(randint(24) + 24, FALSE);
1096 case 12: /* Holy Orb */
1097 if (!get_aim_dir(&dir)) return FALSE;
1099 fire_ball(GF_HOLY_FIRE, dir,
1100 (damroll(3, 6) + plev +
1101 (plev / ((p_ptr->pclass == CLASS_PRIEST ||
1102 p_ptr->pclass == CLASS_HIGH_MAGE ||
1103 p_ptr->pclass == CLASS_SORCERER) ? 2 : 4))),
1104 ((plev < 30) ? 2 : 3));
1107 case 13: /* Protection from Evil */
1108 (void)set_protevil(randint(25) + 3 * p_ptr->lev, FALSE);
1110 case 14: /* Healing */
1111 (void)hp_player(300);
1115 case 15: /* Glyph of Warding */
1118 case 16: /* Exorcism */
1119 (void)dispel_undead(randint(plev));
1120 (void)dispel_demons(randint(plev));
1121 (void)turn_evil(plev);
1123 case 17: /* Dispel Curse */
1124 if (remove_all_curse())
1127 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
1129 msg_print("You feel as if someone is watching over you.");
1133 case 18: /* Dispel Undead + Demons */
1134 (void)dispel_undead(randint(plev * 3));
1135 (void)dispel_demons(randint(plev * 3));
1137 case 19: /* 'Day of the Dove' */
1138 charm_monsters(plev * 2);
1140 case 20: /* Dispel Evil */
1141 (void)dispel_evil(randint(plev * 4));
1143 case 21: /* Banishment */
1144 if (banish_evil(100))
1147 msg_print("¿À¤Î¸æÎϤ¬¼Ù°¤òÂǤÁʧ¤Ã¤¿¡ª");
1149 msg_print("The power of your god banishes evil!");
1154 case 22: /* Holy Word */
1155 (void)dispel_evil(randint(plev * 4));
1156 (void)hp_player(1000);
1157 (void)set_afraid(0);
1158 (void)set_poisoned(0);
1162 case 23: /* Warding True */
1166 case 24: /* Heroism */
1167 (void)set_hero(randint(25) + 25, FALSE);
1168 (void)hp_player(10);
1169 (void)set_afraid(0);
1171 case 25: /* Prayer */
1172 (void)set_blessed(randint(48) + 48, FALSE);
1174 case 26: /* Turn Undead */
1175 (void)mass_genocide_undead(plev+50,TRUE);
1177 case 27: /* Restoration */
1178 (void)do_res_stat(A_STR);
1179 (void)do_res_stat(A_INT);
1180 (void)do_res_stat(A_WIS);
1181 (void)do_res_stat(A_DEX);
1182 (void)do_res_stat(A_CON);
1183 (void)do_res_stat(A_CHR);
1184 (void)restore_level();
1186 case 28: /* Healing True */
1187 (void)hp_player(2000);
1191 case 29: /* Holy Vision */
1192 return identify_fully(FALSE);
1193 case 30: /* Divine Intervention */
1194 project(0, 1, py, px, 500, GF_HOLY_FIRE, PROJECT_KILL, -1);
1195 dispel_monsters(plev * 4);
1197 stun_monsters(plev * 4);
1198 confuse_monsters(plev * 4);
1199 turn_monsters(plev * 4);
1200 stasis_monsters(plev * 4);
1201 summon_specific(-1, py, px, plev, SUMMON_ANGEL, TRUE, TRUE, TRUE, FALSE, FALSE);
1202 (void)set_hero(randint(25) + 25, FALSE);
1203 (void)hp_player(300);
1204 (void)set_fast(randint(20 + plev) + plev, FALSE);
1205 (void)set_afraid(0);
1207 case 31: /* Ultimate resistance */
1209 int v = randint(plev/2)+plev/2;
1210 (void)set_fast(v, FALSE);
1211 set_oppose_acid(v, FALSE);
1212 set_oppose_elec(v, FALSE);
1213 set_oppose_fire(v, FALSE);
1214 set_oppose_cold(v, FALSE);
1215 set_oppose_pois(v, FALSE);
1216 set_ultimate_res(v, FALSE);
1221 msg_format("¤¢¤Ê¤¿¤ÏÉÔÌÀ¤Ê¥é¥¤¥Õ¤Î¼öʸ %d ¤ò¾§¤¨¤¿¡£", spell);
1223 msg_format("You cast an unknown Life spell: %d.", spell);
1234 static bool cast_sorcery_spell(int spell)
1237 int plev = p_ptr->lev;
1241 case 0: /* Detect Monsters */
1242 (void)detect_monsters_normal(DETECT_RAD_DEFAULT);
1244 case 1: /* Phase Door */
1245 teleport_player(10);
1247 case 2: /* Detect Doors and Traps */
1248 (void)detect_traps(DETECT_RAD_DEFAULT);
1249 (void)detect_doors(DETECT_RAD_DEFAULT);
1250 (void)detect_stairs(DETECT_RAD_DEFAULT);
1252 case 3: /* Light Area */
1253 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
1255 case 4: /* Confuse Monster */
1256 if (!get_aim_dir(&dir)) return FALSE;
1258 (void)confuse_monster(dir, (plev * 3) / 2);
1260 case 5: /* Teleport */
1261 teleport_player(plev * 5);
1263 case 6: /* Sleep Monster */
1264 if (!get_aim_dir(&dir)) return FALSE;
1266 (void)sleep_monster(dir);
1268 case 7: /* Recharging */
1269 return recharge(plev * 4);
1270 case 8: /* Magic Mapping */
1271 map_area(DETECT_RAD_MAP);
1273 case 9: /* Identify */
1274 return ident_spell(FALSE);
1275 case 10: /* Slow Monster */
1276 if (!get_aim_dir(&dir)) return FALSE;
1278 (void)slow_monster(dir);
1280 case 11: /* Mass Sleep */
1281 (void)sleep_monsters();
1283 case 12: /* Teleport Away */
1284 if (!get_aim_dir(&dir)) return FALSE;
1286 (void)fire_beam(GF_AWAY_ALL, dir, plev);
1288 case 13: /* Haste Self */
1289 (void)set_fast(randint(20 + plev) + plev, FALSE);
1291 case 14: /* Detection True */
1292 (void)detect_all(DETECT_RAD_DEFAULT);
1294 case 15: /* Identify True */
1295 return identify_fully(FALSE);
1296 case 16: /* Detect Objects and Treasure*/
1297 (void)detect_objects_normal(DETECT_RAD_DEFAULT);
1298 (void)detect_treasure(DETECT_RAD_DEFAULT);
1299 (void)detect_objects_gold(DETECT_RAD_DEFAULT);
1301 case 17: /* Charm Monster */
1302 if (!get_aim_dir(&dir)) return FALSE;
1304 (void)charm_monster(dir, plev);
1306 case 18: /* Sense Minds */
1307 (void)set_tim_esp(randint(30) + 25, FALSE);
1309 case 19: /* Teleport to town */
1312 case 20: /* Self knowledge */
1313 (void)self_knowledge();
1315 case 21: /* Teleport Level */
1317 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return FALSE;
1319 if (!get_check("Are you sure? (Teleport Level)")) return FALSE;
1321 (void)teleport_player_level();
1323 case 22: /* Word of Recall */
1324 if (!word_of_recall()) return FALSE;
1326 case 23: /* Dimension Door */
1328 msg_print("¼¡¸µ¤ÎÈ⤬³«¤¤¤¿¡£ÌÜŪÃϤòÁª¤ó¤Ç²¼¤µ¤¤¡£");
1330 msg_print("You open a dimensional gate. Choose a destination.");
1333 return dimension_door();
1334 case 24: /* Probing */
1337 case 25: /* Explosive Rune */
1340 case 26: /* Telekinesis */
1341 if (!get_aim_dir(&dir)) return FALSE;
1343 fetch(dir, plev * 15, FALSE);
1345 case 27: /* Clairvoyance */
1346 chg_virtue(V_KNOWLEDGE, 1);
1347 chg_virtue(V_ENLIGHTEN, 1);
1349 wiz_lite(FALSE, FALSE);
1350 if (!(p_ptr->telepathy))
1352 (void)set_tim_esp(randint(30) + 25, FALSE);
1355 case 28: /* Charm Monsters */
1356 charm_monsters(plev * 2);
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, (bool)(!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, (bool)(!pet), (bool)(!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, (bool)(!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, (bool)(!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, (bool)(!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, (bool)(!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, (bool)(!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, (bool)(!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, (bool)(!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, (bool)(!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, (bool)(!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, (bool)(!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, (bool)(!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, (bool)(!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 */
3399 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return FALSE;
3401 if (!get_check("Are you sure? (Teleport Level)")) return FALSE;
3403 (void)teleport_player_level();
3405 case 27: /* Teleport Away */
3406 if (!get_aim_dir(&dir)) return FALSE;
3408 (void)fire_beam(GF_AWAY_ALL, dir, plev);
3410 case 28: /* Elemental Ball */
3411 if (!get_aim_dir(&dir)) return FALSE;
3415 case 1: dummy = GF_FIRE;break;
3416 case 2: dummy = GF_ELEC;break;
3417 case 3: dummy = GF_COLD;break;
3418 default: dummy = GF_ACID;break;
3420 fire_ball(dummy, dir, 75 + (plev), 2);
3422 case 29: /* Detection */
3423 (void)detect_all(DETECT_RAD_DEFAULT);
3425 case 30: /* Word of Recall */
3426 if (!word_of_recall()) return FALSE;
3428 case 31: /* Clairvoyance */
3429 chg_virtue(V_KNOWLEDGE, 1);
3430 chg_virtue(V_ENLIGHTEN, 1);
3431 wiz_lite(FALSE, FALSE);
3432 if (!p_ptr->telepathy)
3434 (void)set_tim_esp(randint(30) + 25, FALSE);
3438 msg_format("You cast an unknown Arcane spell: %d.", spell);
3444 msg_print("¥¨¥ì¥á¥ó¥¿¥ë¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3446 msg_print("No Elementals arrive.");
3453 static bool cast_enchant_spell(int spell)
3455 int plev = p_ptr->lev;
3457 bool no_trump = FALSE;
3461 case 0: /* Infravision */
3462 set_tim_infra(100 + randint(100), FALSE);
3464 case 1: /* Regeneration */
3465 set_tim_regen(80 + randint(80), FALSE);
3467 case 2: /* Satisfy Hunger */
3468 (void)set_food(PY_FOOD_MAX - 1);
3470 case 3: /* Resist Cold */
3471 (void)set_oppose_cold(randint(20) + 20, FALSE);
3473 case 4: /* Resist Fire */
3474 (void)set_oppose_fire(randint(20) + 20, FALSE);
3476 case 5: /* Heroism */
3477 (void)set_hero(randint(25) + 25, FALSE);
3478 (void)hp_player(10);
3479 (void)set_afraid(0);
3481 case 6: /* Resist Lightning */
3482 (void)set_oppose_elec(randint(20) + 20, FALSE);
3484 case 7: /* Resist Acid */
3485 (void)set_oppose_acid(randint(20) + 20, FALSE);
3487 case 8: /* See Invisibility */
3488 (void)set_tim_invis(randint(24) + 24, FALSE);
3490 case 9: /* Remove Curse */
3494 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
3496 msg_print("You feel as if someone is watching over you.");
3500 case 10: /* Resist Poison */
3501 (void)set_oppose_pois(randint(20) + 20, FALSE);
3503 case 11: /* Berserk */
3504 (void)set_shero(randint(25) + 25, FALSE);
3505 (void)hp_player(30);
3506 (void)set_afraid(0);
3508 case 12: /* Self Knowledge */
3509 (void)self_knowledge();
3511 case 13: /* Protection from Evil */
3512 (void)set_protevil(randint(25) + 3 * p_ptr->lev, FALSE);
3514 case 14: /* Healing */
3520 case 15: /* Mana Branding */
3521 return choose_ele_attack();
3523 case 16: /* Telepathy */
3524 (void)set_tim_esp(randint(30) + 25, FALSE);
3526 case 17: /* Stone Skin */
3527 (void)set_shield(randint(20) + 30, FALSE);
3529 case 18: /* Resistance */
3530 (void)set_oppose_acid(randint(20) + 20, FALSE);
3531 (void)set_oppose_elec(randint(20) + 20, FALSE);
3532 (void)set_oppose_fire(randint(20) + 20, FALSE);
3533 (void)set_oppose_cold(randint(20) + 20, FALSE);
3534 (void)set_oppose_pois(randint(20) + 20, FALSE);
3536 case 19: /* Haste */
3537 (void)set_fast(randint(20 + plev) + plev, FALSE);
3539 case 20: /* Walk through Wall */
3540 (void)set_kabenuke(randint(plev/2) + plev/2, FALSE);
3542 case 21: /* Pulish Shield */
3543 (void)pulish_shield();
3545 case 22: /* Create Golem */
3546 if (summon_specific(-1, py, px, plev, SUMMON_GOLEM, FALSE, TRUE, TRUE, FALSE, FALSE))
3549 msg_print("¥´¡¼¥ì¥à¤òºî¤Ã¤¿¡£");
3551 msg_print("You make a golem.");
3559 case 23: /* Magic armor */
3560 (void)set_magicdef(randint(20) + 20, FALSE);
3562 case 24: /* Remove Enchantment */
3563 if (!mundane_spell(TRUE)) return FALSE;
3565 case 25: /* Remove All Curse */
3566 if (remove_all_curse())
3569 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
3571 msg_print("You feel as if someone is watching over you.");
3575 case 26: /* Total Knowledge */
3576 return identify_fully(FALSE);
3578 case 27: /* Enchant Weapon */
3579 return enchant_spell(rand_int(4) + 1, rand_int(4) + 1, 0);
3581 case 28: /* Enchant Armor */
3582 return enchant_spell(0, 0, rand_int(3) + 2);
3584 case 29: /* Brand Weapon */
3585 brand_weapon(rand_int(17));
3587 case 30: /* Living Trump */
3588 if (randint(7) == 1)
3589 /* Teleport control */
3592 /* Random teleportation (uncontrolled) */
3594 /* Gain the mutation */
3595 if (gain_random_mutation(dummy))
3597 msg_print("¤¢¤Ê¤¿¤ÏÀ¸¤¤Æ¤¤¤ë¥«¡¼¥É¤ËÊѤï¤Ã¤¿¡£");
3599 msg_print("You have turned into a Living Trump.");
3602 case 31: /* Immune */
3603 return (choose_ele_immune(13 + randint(13)));
3606 msg_format("You cast an unknown Craft spell: %d.", spell);
3612 msg_print("¤¦¤Þ¤¯¥´¡¼¥ì¥à¤òºî¤ì¤Ê¤«¤Ã¤¿¡£");
3614 msg_print("No Golems arrive.");
3622 * An "item_tester_hook" for offer
3624 static bool item_tester_offer(object_type *o_ptr)
3626 /* Flasks of oil are okay */
3627 if (o_ptr->tval != TV_CORPSE) return (FALSE);
3629 if (o_ptr->sval != SV_CORPSE) return (FALSE);
3631 if (strchr("pht", r_info[o_ptr->pval].d_char)) return (TRUE);
3633 /* Assume not okay */
3638 static bool cast_daemon_spell(int spell)
3641 int plev = p_ptr->lev;
3643 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
3644 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
3645 else beam = plev / 2;
3649 case 0: /* Magic Missile */
3650 if (!get_aim_dir(&dir)) return FALSE;
3652 fire_bolt_or_beam(beam - 10, GF_MISSILE, dir,
3653 damroll(3 + ((plev - 1) / 5), 4));
3655 case 1: /* Detect Undead & Demons -> Unlife */
3656 (void)detect_monsters_nonliving(DETECT_RAD_DEFAULT);
3659 (void)set_blessed(randint(12) + 12, FALSE);
3661 case 3: /* Resist Fire */
3662 (void)set_oppose_fire(randint(20) + 20, FALSE);
3664 case 4: /* Horrify */
3665 if (!get_aim_dir(&dir)) return FALSE;
3667 (void)fear_monster(dir, plev);
3668 (void)stun_monster(dir, plev);
3670 case 5: /* Nether Bolt */
3671 if (!get_aim_dir(&dir)) return FALSE;
3673 fire_bolt_or_beam(beam, GF_NETHER, dir,
3674 damroll(6 + ((plev - 5) / 4), 8));
3676 case 6: /* Summon monster, demon */
3677 if (!summon_specific(-1, py, px, (plev * 3) / 2, SUMMON_MANES, TRUE, FALSE, TRUE, FALSE, FALSE))
3680 msg_print("¸ÅÂå¤Î»àÎî¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3682 msg_print("No Manes arrive.");
3686 case 7: /* Mini Hellfire */
3687 if (!get_aim_dir(&dir)) return FALSE;
3689 fire_ball(GF_HELL_FIRE, dir,
3690 (damroll(3, 6) + plev +
3691 (plev / (((p_ptr->pclass == CLASS_MAGE) ||
3692 (p_ptr->pclass == CLASS_HIGH_MAGE) ||
3693 (p_ptr->pclass == CLASS_SORCERER)) ? 2 : 4))),
3694 ((plev < 30) ? 2 : 3));
3696 case 8: /* Enslave Demon */
3697 if (!get_aim_dir(&dir)) return FALSE;
3699 (void)control_one_demon(dir, plev);
3701 case 9: /* Vision */
3702 map_area(DETECT_RAD_MAP);
3704 case 10: /* Resist Nether */
3705 (void)set_tim_res_nether(randint(20) + 20, FALSE);
3707 case 11: /* Plasma Bolt */
3708 if (!get_aim_dir(&dir)) return FALSE;
3710 fire_bolt_or_beam(beam, GF_PLASMA, dir,
3711 damroll(11 + ((plev - 5) / 4), 8));
3713 case 12: /* Fire Ball */
3714 if (!get_aim_dir(&dir)) return FALSE;
3716 fire_ball(GF_FIRE, dir, plev + 55, 2);
3718 case 13: /* Fire Branding */
3721 case 14: /* Nether Ball */
3722 if (!get_aim_dir(&dir)) return FALSE;
3724 fire_ball(GF_NETHER, dir, plev*3/2 + 100, plev / 20+2);
3726 case 15: /* Summon monster, demon */
3728 bool pet = (randint(3) != 1);
3729 bool group = !(pet && (plev < 50));
3731 if (summon_specific((pet ? -1 : 0), py, px, plev*2/3+randint(plev/2), SUMMON_DEMON, group, FALSE, pet, FALSE, (bool)(!pet)))
3734 msg_print("ⲫ¤Î°½¤¬½¼Ëþ¤·¤¿¡£");
3736 msg_print("The area fills with a stench of sulphur and brimstone.");
3742 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
3744 msg_print("'What is thy bidding... Master?'");
3749 msg_print("¡ÖÈܤ·¤¼Ô¤è¡¢²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª ¤ªÁ°¤Îº²¤òĺ¤¯¤¾¡ª¡×");
3751 msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'");
3758 msg_print("°Ëâ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3760 msg_print("No Greater Demon arrive.");
3765 case 16: /* Telepathy */
3766 (void)set_tim_esp(randint(30) + 25, FALSE);
3768 case 17: /* Demoncloak */
3770 int dur=randint(20) + 20;
3772 set_oppose_fire(dur, FALSE);
3773 set_oppose_cold(dur, FALSE);
3774 set_tim_sh_fire(dur, FALSE);
3778 case 18: /* Rain of Lava */
3779 fire_ball(GF_FIRE, 0, (55 + plev)*2, 3);
3780 fire_ball_hide(GF_LAVA_FLOW, 0, 2+randint(2), 3);
3782 case 19: /* Plasma ball */
3783 if (!get_aim_dir(&dir)) return FALSE;
3785 fire_ball(GF_PLASMA, dir, plev*3/2 + 80, 2 + plev/40);
3787 case 20: /* Mimic demon */
3788 (void)set_mimic(10+plev/2 + randint(10+plev/2), MIMIC_DEMON, FALSE);
3790 case 21: /* Nether Wave == Dispel Good */
3791 (void)dispel_monsters(randint(plev * 2));
3792 (void)dispel_good(randint(plev * 2));
3795 if (!get_aim_dir(&dir)) return FALSE;
3796 fire_ball(GF_NEXUS, dir, 100 + plev*2, 4);
3798 case 23: /* Hand Doom */
3799 if (!get_aim_dir(&dir)) return FALSE;
3801 else msg_print("<ÇËÌǤμê>¤òÊü¤Ã¤¿¡ª");
3803 else msg_print("You invokes the Hand of Doom!");
3806 fire_ball_hide(GF_HAND_DOOM, dir, plev * 2, 0);
3808 case 24: /* Heroism */
3809 (void)set_hero(randint(25) + 25, FALSE);
3810 (void)hp_player(10);
3811 (void)set_afraid(0);
3813 case 25: /* Tim resist time */
3814 (void)set_tim_res_time(randint(20)+20, FALSE);
3816 case 26: /* Circle of Madness */
3817 fire_ball(GF_CHAOS, 0, 50+plev, 3+plev/20);
3818 fire_ball(GF_CONFUSION, 0, 50+plev, 3+plev/20);
3819 fire_ball(GF_CHARM, 0, 20+plev, 3+plev/20);
3821 case 27: /* True Discharge Minion */
3824 case 28: /* Summon Greater Demon */
3831 item_tester_hook = item_tester_offer;
3833 q = "¤É¤Î»àÂΤòÊû¤²¤Þ¤¹¤«? ";
3834 s = "Êû¤²¤é¤ì¤ë»àÂΤò»ý¤Ã¤Æ¤¤¤Ê¤¤¡£";
3836 q = "Sacrifice which corpse? ";
3837 s = "You have nothing to scrifice.";
3839 if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return FALSE;
3841 /* Get the item (in the pack) */
3844 o_ptr = &inventory[item];
3847 /* Get the item (on the floor) */
3850 o_ptr = &o_list[0 - item];
3853 summon_lev = p_ptr->lev * 2 / 3 + r_info[o_ptr->pval].level;
3854 if (summon_specific(-1, py, px, summon_lev, SUMMON_HI_DEMON, TRUE, FALSE, TRUE, FALSE, FALSE))
3857 msg_print("ⲫ¤Î°½¤¬½¼Ëþ¤·¤¿¡£");
3859 msg_print("The area fills with a stench of sulphur and brimstone.");
3864 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
3866 msg_print("'What is thy bidding... Master?'");
3869 /* Decrease the item (from the pack) */
3872 inven_item_increase(item, -1);
3873 inven_item_describe(item);
3874 inven_item_optimize(item);
3877 /* Decrease the item (from the floor) */
3880 floor_item_increase(0 - item, -1);
3881 floor_item_describe(0 - item);
3882 floor_item_optimize(0 - item);
3888 msg_print("°Ëâ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3890 msg_print("No Greater Demon arrive.");
3895 case 29: /* Nether Storm */
3896 if (!get_aim_dir(&dir)) return FALSE;
3898 fire_ball(GF_NETHER, dir, plev*15, plev / 5);
3900 case 30: /* Blood curse */
3902 if (!get_aim_dir(&dir)) return FALSE;
3904 fire_ball_hide(GF_BLOOD_CURSE, dir, 600, 0);
3906 take_hit(DAMAGE_USELIFE, 20 + randint(30), "·ì¤Î¼ö¤¤", -1);
3908 take_hit(DAMAGE_USELIFE, 20 + randint(30), "Blood curse", -1);
3912 case 31: /* Mimic Demon lord */
3913 (void)set_mimic(15 + randint(15), MIMIC_DEMON_LORD, FALSE);
3916 msg_format("You cast an unknown Daemon spell: %d.", spell);
3924 void stop_singing(void)
3926 if (p_ptr->pclass != CLASS_BARD) return;
3928 if (p_ptr->magic_num1[1])
3930 p_ptr->magic_num1[1] = 0;
3933 if (!p_ptr->magic_num1[0]) return;
3935 set_action(ACTION_NONE);
3937 switch(p_ptr->magic_num1[0])
3940 if (!p_ptr->blessed)
3942 msg_print("¹â·é¤Êµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
3944 msg_print("The prayer has expired.");
3951 msg_print("¥Ò¡¼¥í¡¼¤Îµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
3953 msg_print("The heroism wears off.");
3955 /* Recalculate hitpoints */
3956 p_ptr->update |= (PU_HP);
3960 if (!p_ptr->tim_esp)
3963 msg_print("°Õ¼±¤Ï¸µ¤ËÌá¤Ã¤¿¡£");
3965 msg_print("Your consciousness contracts again.");
3967 /* Update the monsters */
3968 p_ptr->update |= (PU_MONSTERS);
3972 if (!p_ptr->tim_stealth)
3974 msg_print("»Ñ¤¬¤Ï¤Ã¤¤ê¤È¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¡£");
3976 msg_print("You are no longer hided.");
3980 if (!p_ptr->oppose_acid)
3982 msg_print("»À¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
3984 msg_print("You feel less resistant to acid.");
3986 if (!p_ptr->oppose_elec)
3988 msg_print("ÅÅ·â¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
3990 msg_print("You feel less resistant to elec.");
3992 if (!p_ptr->oppose_fire)
3994 msg_print("²Ð¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
3996 msg_print("You feel less resistant to fire.");
3998 if (!p_ptr->oppose_cold)
4000 msg_print("Î䵤¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
4002 msg_print("You feel less resistant to cold.");
4004 if (!p_ptr->oppose_pois)
4006 msg_print("ÆǤؤÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
4008 msg_print("You feel less resistant to pois.");
4014 msg_print("Æ°¤¤ÎÁÇÁᤵ¤¬¤Ê¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£");
4016 msg_print("You feel yourself slow down.");
4023 msg_print("¥Ò¡¼¥í¡¼¤Îµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
4025 msg_print("The heroism wears off.");
4027 /* Recalculate hitpoints */
4028 p_ptr->update |= (PU_HP);
4033 msg_print("Æ°¤¤ÎÁÇÁᤵ¤¬¤Ê¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£");
4035 msg_print("You feel yourself slow down.");
4042 msg_print("̵Ũ¤Ç¤Ï¤Ê¤¯¤Ê¤Ã¤¿¡£");
4044 msg_print("The invulnerability wears off.");
4047 p_ptr->redraw |= (PR_MAP);
4049 /* Update monsters */
4050 p_ptr->update |= (PU_MONSTERS);
4053 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
4057 p_ptr->magic_num1[0] = MUSIC_NONE;
4058 p_ptr->magic_num2[0] = 0;
4060 /* Recalculate bonuses */
4061 p_ptr->update |= (PU_BONUS | PU_HP);
4063 /* Redraw status bar */
4064 p_ptr->redraw |= (PR_STATUS);
4068 static bool cast_music_spell(int spell)
4070 int plev = p_ptr->lev;
4073 if(p_ptr->magic_num1[0])
4078 p_ptr->magic_num2[0] = spell;
4082 case 0: /* Song of Holding ÃÙÆߤβΠ*/
4084 msg_print("¤æ¤Ã¤¯¤ê¤È¤·¤¿¥á¥í¥Ç¥£¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
4086 msg_print("You start humming a slow, steady melody...");
4088 p_ptr->magic_num1[0] = MUSIC_SLOW;
4090 case 1: /* Song of Blessing ½ËÊ¡¤Î²Î */
4092 msg_print("¸·¤«¤Ê¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4094 msg_print("The holy power of the Music of the Ainur enters you...");
4096 p_ptr->magic_num1[0] = MUSIC_BLESS;
4099 case 2: /* Wrecking Note Êø²õ¤Î²»¿§ */
4100 if (!get_aim_dir(&dir)) return FALSE;
4101 fire_bolt(GF_SOUND, dir,
4102 damroll(4 + ((plev - 1) / 5), 4));
4104 case 3: /* Stun Pattern Û¯Û°¤ÎÀûΧ */
4106 msg_print("âÁÏǤµ¤»¤ë¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4108 msg_print("You weave a pattern of sounds to bewilder and daze...");
4110 p_ptr->magic_num1[0] = MUSIC_STUN;
4112 case 4: /* Flow of life À¸Ì¿¤Îή¤ì */
4114 msg_print("²Î¤òÄ̤·¤ÆÂΤ˳赤¤¬Ìá¤Ã¤Æ¤¤¿¡¥¡¥¡¥");
4116 msg_print("Life flows through you as you sing a song of healing...");
4118 p_ptr->magic_num1[0] = MUSIC_L_LIFE;
4120 case 5: /* Song of the Sun ÂÀÍۤβΠ*/
4122 msg_print("¸÷¤êµ±¤¯²Î¤¬ÊÕ¤ê¤ò¾È¤é¤·¤¿¡£");
4124 msg_print("Your uplifting song brings brightness to dark places...");
4126 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
4128 case 6: /* Song of fear ¶²ÉݤβΠ*/
4130 msg_print("¤ª¤É¤í¤ª¤É¤í¤·¤¤¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4132 msg_print("You start weaving a fearful pattern...");
4134 p_ptr->magic_num1[0] = MUSIC_FEAR;
4136 case 7: /* Heroic Ballad À襤¤Î²Î */
4138 msg_print("·ã¤·¤¤À襤¤Î²Î¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
4140 msg_print("You start singing a song of intense fighting...");
4142 p_ptr->magic_num1[0] = MUSIC_HERO;
4144 case 8: /* Clairaudience ÎîŪÃγР*/
4146 msg_print("ÀŤ«¤Ê²»³Ú¤¬´¶³Ð¤ò¸¦¤®À¡¤Þ¤µ¤»¤¿¡¥¡¥¡¥");
4148 msg_print("Your quiet music sharpens your sense of hearing...");
4150 p_ptr->magic_num1[0] = MUSIC_DETECT;
4152 case 9: /* º²¤Î²Î */
4154 msg_print("Àº¿À¤òDZ¤¸¶Ê¤²¤ë²Î¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
4156 msg_print("You start singing a song of soul in pain...");
4158 p_ptr->magic_num1[0] = MUSIC_PSI;
4160 case 10: /* Song of Lore Ãμ±¤Î²Î */
4162 msg_print("¤³¤ÎÀ¤³¦¤ÎÃ챤¬Î®¤ì¹þ¤ó¤Ç¤¤¿¡¥¡¥¡¥");
4164 msg_print("You recall the rich lore of the world...");
4166 p_ptr->magic_num1[0] = MUSIC_ID;
4168 case 11: /* hidding song ±£ÆۤβΠ*/
4170 msg_print("¤¢¤Ê¤¿¤Î»Ñ¤¬·Ê¿§¤Ë¤È¤±¤³¤ó¤Ç¤¤¤Ã¤¿¡¥¡¥¡¥");
4172 msg_print("Your song carries you beyond the sight of mortal eyes...");
4174 p_ptr->magic_num1[0] = MUSIC_STEALTH;
4176 case 12: /* Illusion Pattern ¸¸±Æ¤ÎÀûΧ */
4178 msg_print("ÊÕ¤ê°ìÌ̤˸¸±Æ¤¬¸½¤ì¤¿¡¥¡¥¡¥");
4180 msg_print("You weave a pattern of sounds to beguile and confuse...");
4182 p_ptr->magic_num1[0] = MUSIC_CONF;
4184 case 13: /* Doomcall (vibration song) ÇËÌǤζ«¤Ó */
4186 msg_print("¹ì²»¤¬¶Á¤¤¤¿¡¥¡¥¡¥");
4188 msg_print("The fury of the Downfall of Numenor lashes out...");
4190 p_ptr->magic_num1[0] = MUSIC_SOUND;
4192 case 14: /* Firiel's Song (song of the Undeads) ¥Õ¥£¥ê¥¨¥ë¤Î²Î */
4194 msg_print("À¸Ì¿¤ÈÉü³è¤Î¥Æ¡¼¥Þ¤òÁդǻϤ᤿¡¥¡¥¡¥");
4196 msg_print("The themes of life and revival are woven into your song...");
4198 animate_dead(0, py, px);
4200 case 15: /* Fellowship Chant (charming song) ι¤ÎÃç´Ö */
4202 msg_print("°Â¤é¤«¤Ê¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4204 msg_print("You weave a slow, soothing melody of imploration...");
4206 p_ptr->magic_num1[0] = MUSIC_CHARM;
4208 case 16: /* (wall breaking song) ʬ²ò²»ÇÈ */
4210 msg_print("Ê´ºÕ¤¹¤ë¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4212 msg_print("You weave a violent pattern of sounds to break wall.");
4214 p_ptr->magic_num1[0] = MUSIC_WALL;
4215 project(0, 0, py, px,
4216 0, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM | PROJECT_HIDE, -1);
4218 case 17: /* Finrod's Resistance (song of resistance) ¸µÁÇÂÑÀ */
4220 msg_print("¸µÁǤÎÎϤËÂФ¹¤ëǦÂѤβΤò²Î¤Ã¤¿¡£");
4222 msg_print("You sing a song of perseverance against powers...");
4224 p_ptr->magic_num1[0] = MUSIC_RESIST;
4226 case 18: /* Hobbit Melodies (song of time) ¥Û¥Ó¥Ã¥È¤Î¥á¥í¥Ç¥£ */
4228 msg_print("·Ú²÷¤Ê²Î¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
4230 msg_print("You start singing joyful pop song...");
4232 p_ptr->magic_num1[0] = MUSIC_SPEED;
4234 case 19: /* World Contortion ÏĤó¤ÀÀ¤³¦ */
4236 msg_print("²Î¤¬¶õ´Ö¤òÏĤ᤿¡¥¡¥¡¥");
4238 msg_print("Reality whirls wildly as you sing a dizzying melody...");
4240 project(0, plev/15 + 1, py, px, plev * 3 + 1, GF_AWAY_ALL , PROJECT_KILL, -1);
4242 case 20: /* Â໶¤Î²Î */
4244 msg_print("ÂѤ¨¤é¤ì¤Ê¤¤ÉÔ¶¨Ï²»¤¬Å¨¤òÀÕ¤áΩ¤Æ¤¿¡¥¡¥¡¥");
4246 msg_print("You cry out in an ear-wracking voice...");
4248 p_ptr->magic_num1[0] = MUSIC_DISPEL;
4250 case 21: /* The Voice of Saruman ¥µ¥ë¥Þ¥ó¤Î´Å¸À */
4252 msg_print("Í¥¤·¤¯¡¢Ì¥ÎÏŪ¤Ê²Î¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
4254 msg_print("You start humming a gentle and attractive song...");
4256 p_ptr->magic_num1[0] = MUSIC_SARUMAN;
4258 case 22: /* Song of Tempest (song of death) Íò¤Î²»¿§ */
4259 if (!get_aim_dir(&dir)) return FALSE;
4260 fire_beam(GF_SOUND, dir,
4261 damroll(15 + ((plev - 1) / 2), 10));
4263 case 23: /* (song of disruption) ¤â¤¦°ì¤Ä¤ÎÀ¤³¦ */
4265 msg_print("¼þ°Ï¤¬ÊѲ½¤·»Ï¤á¤¿¡¥¡¥¡¥");
4267 msg_print("You sing of the primeval shaping of Middle-earth...");
4271 case 24: /* Wrecking Pattern (destruction shriek) Ç˲õ¤ÎÀûΧ */
4273 msg_print("Ç˲õŪ¤Ê²Î¤¬¶Á¤¤ï¤¿¤Ã¤¿¡¥¡¥¡¥");
4275 msg_print("You weave a pattern of sounds to contort and shatter...");
4277 p_ptr->magic_num1[0] = MUSIC_QUAKE;
4279 case 25: /* ÄäÂڤβΠ*/
4281 msg_print("¤æ¤Ã¤¯¤ê¤È¤·¤¿¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4283 msg_print("You weave a very slow pattern which is almost likely to stop...");
4285 p_ptr->magic_num1[0] = MUSIC_STASIS;
4287 case 26: /* ¼é¤ê¤Î²Î */
4289 msg_print("²Î¤¬¿ÀÀ»¤Ê¾ì¤òºî¤ê½Ð¤·¤¿¡¥¡¥¡¥");
4291 msg_print("The holy power of the Music is creating sacred field...");
4295 case 27: /* ±Ñͺ¤Î»í */
4297 msg_print("±Ñͺ¤Î²Î¤ò¸ý¤º¤µ¤ó¤À¡¥¡¥¡¥");
4299 msg_print("You chant a powerful, heroic call to arms...");
4301 p_ptr->magic_num1[0] = MUSIC_SHERO;
4302 (void)hp_player(10);
4303 (void)set_afraid(0);
4305 case 28: /* ¥ä¥ô¥¡¥ó¥Ê¤Î½õ¤± */
4307 msg_print("²Î¤òÄ̤·¤ÆÂΤ˳赤¤¬Ìá¤Ã¤Æ¤¤¿¡¥¡¥¡¥");
4309 msg_print("Life flows through you as you sing the song...");
4311 p_ptr->magic_num1[0] = MUSIC_H_LIFE;
4313 case 29: /* ºÆÀ¸¤Î²Î */
4315 msg_print("°Å¹õ¤ÎÃæ¤Ë¸÷¤ÈÈþ¤ò¤Õ¤ê¤Þ¤¤¤¿¡£ÂΤ¬¸µ¤Î³èÎϤò¼è¤êÌᤷ¤¿¡£");
4317 msg_print("You strewed light and beauty in the dark as you sing. You feel refreshed.");
4319 (void)do_res_stat(A_STR);
4320 (void)do_res_stat(A_INT);
4321 (void)do_res_stat(A_WIS);
4322 (void)do_res_stat(A_DEX);
4323 (void)do_res_stat(A_CON);
4324 (void)do_res_stat(A_CHR);
4325 (void)restore_level();
4327 case 30: /* shriek of death ¥µ¥¦¥í¥ó¤ÎËâ½Ñ */
4328 if (!get_aim_dir(&dir)) return FALSE;
4329 fire_ball(GF_SOUND, dir, damroll(50 + plev, 10), 0);
4331 case 31: /* song of liberty ¥Õ¥£¥ó¥´¥ë¥Õ¥£¥ó¤ÎÄ©Àï */
4333 msg_print("¥Õ¥£¥ó¥´¥ë¥Õ¥£¥ó¤Î̽²¦¤Ø¤ÎÄ©Àï¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
4335 msg_print("You recall the valor of Fingolfin's challenge to the Dark Lord...");
4337 p_ptr->magic_num1[0] = MUSIC_INVULN;
4340 p_ptr->redraw |= (PR_MAP);
4342 /* Update monsters */
4343 p_ptr->update |= (PU_MONSTERS);
4346 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
4350 msg_format("̤ÃΤβÎ(%d)¤ò²Î¤Ã¤¿¡£", spell);
4352 msg_format("You sing an unknown song: %d.", spell);
4357 if (p_ptr->magic_num1[0]) set_action(ACTION_SING);
4359 /* Recalculate bonuses */
4360 p_ptr->update |= (PU_BONUS | PU_HP);
4362 /* Redraw status bar */
4363 p_ptr->redraw |= (PR_STATUS);
4371 void do_cmd_cast(void)
4373 int item, sval, spell, realm;
4388 /* Require spell ability */
4389 if (!p_ptr->realm1 && (p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE))
4392 msg_print("¼öʸ¤ò¾§¤¨¤é¤ì¤Ê¤¤¡ª");
4394 msg_print("You cannot cast spells!");
4401 if (p_ptr->blind || no_lite())
4404 msg_print("Ìܤ¬¸«¤¨¤Ê¤¤¡ª");
4406 msg_print("You cannot see!");
4408 if (p_ptr->pclass == CLASS_FORCETRAINER)
4415 /* Not when confused */
4416 if (p_ptr->confused)
4419 msg_print("º®Í𤷤Ƥ¤¤Æ¾§¤¨¤é¤ì¤Ê¤¤¡ª");
4421 msg_print("You are too confused!");
4427 prayer = spell_categoly_name(mp_ptr->spell_book);
4429 /* Restrict choices to spell books */
4430 item_tester_tval = mp_ptr->spell_book;
4434 q = "¤É¤Î¼öʸ½ñ¤ò»È¤¤¤Þ¤¹¤«? ";
4436 q = "Use which book? ";
4440 s = "¼öʸ½ñ¤¬¤Ê¤¤¡ª";
4442 s = "You have no spell books!";
4445 select_spellbook=TRUE;
4446 if (p_ptr->pclass == CLASS_FORCETRAINER)
4447 select_the_force = TRUE;
4448 if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))){
4449 select_spellbook = FALSE;
4450 select_the_force = FALSE;
4453 select_spellbook = FALSE;
4454 select_the_force = FALSE;
4456 if (item == 1111) { /* the_force */
4460 /* Get the item (in the pack) */
4463 o_ptr = &inventory[item];
4466 /* Get the item (on the floor) */
4469 o_ptr = &o_list[0 - item];
4472 /* Access the item's sval */
4475 if ((p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE) && (o_ptr->tval == REALM2_BOOK)) increment = 32;
4478 /* Track the object kind */
4479 object_kind_track(o_ptr->k_idx);
4481 /* Hack -- Handle stuff */
4484 if ((p_ptr->pclass == CLASS_SORCERER) || (p_ptr->pclass == CLASS_RED_MAGE))
4485 realm = o_ptr->tval - TV_LIFE_BOOK + 1;
4486 else if (increment) realm = p_ptr->realm2;
4487 else realm = p_ptr->realm1;
4489 /* Ask for a spell */
4491 if (!get_spell(&spell,
4492 ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "±Ó¾§¤¹¤ë" : (mp_ptr->spell_book == TV_MUSIC_BOOK) ? "²Î¤¦" : "¾§¤¨¤ë"),
4495 if (spell == -2) msg_format("¤½¤ÎËܤˤÏÃΤäƤ¤¤ë%s¤¬¤Ê¤¤¡£", prayer);
4499 if (!get_spell(&spell, ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "recite" : "cast"),
4503 msg_format("You don't know any %ss in that book.", prayer);
4509 use_realm = tval2realm(o_ptr->tval);
4511 if (!is_magic(use_realm))
4513 s_ptr = &technic_info[use_realm - MIN_TECHNIC - 1][spell];
4517 s_ptr = &mp_ptr->info[realm - 1][spell];
4520 if (p_ptr->pclass == CLASS_SORCERER)
4521 shouhimana = s_ptr->smana*2200 + 2399;
4522 else if (p_ptr->pclass == CLASS_RED_MAGE)
4523 shouhimana = s_ptr->smana*2600 + 2399;
4525 shouhimana = (s_ptr->smana*(3800-spell_exp[(increment ? spell+32 : spell)])+2399);
4528 else shouhimana *= 4;
4530 if(shouhimana < 1) shouhimana = 1;
4532 /* Verify "dangerous" spells */
4533 if (shouhimana > p_ptr->csp)
4537 msg_format("¤½¤Î%s¤ò%s¤Î¤Ë½½Ê¬¤Ê¥Þ¥¸¥Ã¥¯¥Ý¥¤¥ó¥È¤¬¤Ê¤¤¡£",prayer,
4538 ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "±Ó¾§¤¹¤ë" : (mp_ptr->spell_book == TV_LIFE_BOOK) ? "²Î¤¦" : "¾§¤¨¤ë"));
4540 msg_format("You do not have enough mana to %s this %s.",
4541 ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "recite" : "cast"),
4546 if (!over_exert) return;
4550 if (!get_check("¤½¤ì¤Ç¤âÄ©À路¤Þ¤¹¤«? ")) return;
4552 if (!get_check("Attempt it anyway? ")) return;
4558 /* Spell failure chance */
4559 chance = spell_chance(spell, use_realm - 1);
4562 if (rand_int(100) < chance)
4564 if (flush_failure) flush();
4567 msg_format("%s¤ò¤¦¤Þ¤¯¾§¤¨¤é¤ì¤Ê¤«¤Ã¤¿¡ª", prayer);
4569 msg_format("You failed to get the %s off!", prayer);
4574 if (realm == REALM_LIFE)
4576 if (randint(100) < chance)
4577 chg_virtue(V_FAITH, -1);
4579 else if (realm == REALM_DEATH)
4581 if (randint(100) < chance)
4582 chg_virtue(V_UNLIFE, -1);
4584 else if (realm == REALM_NATURE)
4586 if (randint(100) < chance)
4587 chg_virtue(V_NATURE, -1);
4589 else if (realm == REALM_DAEMON)
4591 if (randint(100) < chance)
4592 chg_virtue(V_JUSTICE, 1);
4594 else if (randint(100) < chance)
4596 chg_virtue(V_KNOWLEDGE, -1);
4599 if (realm == REALM_TRUMP)
4601 cast_trump_spell(spell, FALSE);
4603 else if ((o_ptr->tval == TV_CHAOS_BOOK) && (randint(100) < spell))
4606 msg_print("¥«¥ª¥¹Åª¤Ê¸ú²Ì¤òȯÀ¸¤·¤¿¡ª");
4608 msg_print("You produce a chaotic effect!");
4613 else if ((o_ptr->tval == TV_DEATH_BOOK) && (randint(100) < spell))
4615 if ((sval == 3) && (randint(2) == 1))
4617 sanity_blast(0, TRUE);
4622 msg_print("Äˤ¤¡ª");
4624 msg_print("It hurts!");
4628 take_hit(DAMAGE_LOSELIFE, damroll(o_ptr->sval + 1, 6), "°Å¹õËâË¡¤ÎµÕή", -1);
4630 take_hit(DAMAGE_LOSELIFE, damroll(o_ptr->sval + 1, 6), "a miscast Death spell", -1);
4633 if ((spell > 15) && (randint(6) == 1) && !p_ptr->hold_life)
4634 lose_exp(spell * 250);
4637 else if ((o_ptr->tval == TV_MUSIC_BOOK) && (randint(200) < spell))
4640 msg_print("¤¤¤ä¤Ê²»¤¬¶Á¤¤¤¿");
4642 msg_print("An infernal sound echoed.");
4645 aggravate_monsters(0);
4647 if (randint(100) >= chance)
4648 chg_virtue(V_CHANCE,-1);
4657 case REALM_LIFE: /* * LIFE * */
4658 cast = cast_life_spell(spell);
4660 case REALM_SORCERY: /* * SORCERY * */
4661 cast = cast_sorcery_spell(spell);
4663 case REALM_NATURE: /* * NATURE * */
4664 cast = cast_nature_spell(spell);
4666 case REALM_CHAOS: /* * CHAOS * */
4667 cast = cast_chaos_spell(spell);
4669 case REALM_DEATH: /* * DEATH * */
4670 cast = cast_death_spell(spell);
4672 case REALM_TRUMP: /* TRUMP */
4673 cast = cast_trump_spell(spell, TRUE);
4675 case REALM_ARCANE: /* ARCANE */
4676 cast = cast_arcane_spell(spell);
4678 case REALM_ENCHANT: /* ENCHANT */
4679 cast = cast_enchant_spell(spell);
4681 case REALM_DAEMON: /* DAEMON */
4682 cast = cast_daemon_spell(spell);
4684 case REALM_MUSIC: /* MUSIC */
4685 cast = cast_music_spell(spell);
4689 msg_format("You cast a spell from an unknown realm: realm %d, spell %d.", realm, spell);
4693 /* Canceled spells cost neither a turn nor mana */
4696 if (randint(100) < chance)
4697 chg_virtue(V_CHANCE,1);
4699 /* A spell was cast */
4701 (spell_worked2 & (1L << spell)) :
4702 (spell_worked1 & (1L << spell)))
4703 && (p_ptr->pclass != CLASS_SORCERER)
4704 && (p_ptr->pclass != CLASS_RED_MAGE))
4706 int e = s_ptr->sexp;
4708 /* The spell worked */
4709 if (realm == p_ptr->realm1)
4711 spell_worked1 |= (1L << spell);
4715 spell_worked2 |= (1L << spell);
4718 /* Gain experience */
4719 gain_exp(e * s_ptr->slevel);
4721 if (realm == REALM_LIFE)
4723 chg_virtue(V_FAITH, 1);
4724 chg_virtue(V_COMPASSION, 1);
4725 chg_virtue(V_VITALITY, 1);
4726 chg_virtue(V_HONOUR, 1);
4728 else if (realm == REALM_DEATH)
4730 chg_virtue(V_UNLIFE, 1);
4731 chg_virtue(V_JUSTICE, -1);
4732 chg_virtue(V_FAITH, -1);
4733 chg_virtue(V_VITALITY, -1);
4735 else if (realm == REALM_DAEMON)
4737 chg_virtue(V_JUSTICE, -1);
4738 chg_virtue(V_FAITH, -1);
4739 chg_virtue(V_HONOUR, -1);
4740 chg_virtue(V_TEMPERANCE, -1);
4742 else if (realm == REALM_NATURE)
4744 chg_virtue(V_NATURE, 1);
4745 chg_virtue(V_HARMONY, 1);
4748 chg_virtue(V_KNOWLEDGE, 1);
4750 if (realm == REALM_LIFE)
4752 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_FAITH, 1);
4753 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_COMPASSION, 1);
4754 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_VITALITY, 1);
4755 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_HONOUR, 1);
4757 else if (realm == REALM_DEATH)
4759 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_UNLIFE, 1);
4760 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_JUSTICE, -1);
4761 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_FAITH, -1);
4762 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_VITALITY, -1);
4764 else if (realm == REALM_DAEMON)
4766 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_JUSTICE, -1);
4767 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_FAITH, -1);
4768 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_HONOUR, -1);
4769 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_TEMPERANCE, -1);
4771 else if (realm == REALM_NATURE)
4773 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_NATURE, 1);
4774 if (randint(100 + p_ptr->lev) < shouhimana) chg_virtue(V_HARMONY, 1);
4776 if (mp_ptr->spell_xtra & MAGIC_GAIN_EXP)
4778 if (spell_exp[(increment ? 32 : 0)+spell] < 900)
4779 spell_exp[(increment ? 32 : 0)+spell]+=60;
4780 else if(spell_exp[(increment ? 32 : 0)+spell] < 1200)
4781 {if ((dun_level > 4) && ((dun_level + 10) > p_ptr->lev)) spell_exp[(increment ? 32 : 0)+spell]+=8;}
4782 else if(spell_exp[(increment ? 32 : 0)+spell] < 1400)
4783 {if (((dun_level + 5) > p_ptr->lev) && ((dun_level + 5) > s_ptr->slevel)) spell_exp[(increment ? 32 : 0)+spell]+=2;}
4784 else if((spell_exp[(increment ? 32 : 0)+spell] < 1600) && !increment)
4785 {if (((dun_level + 5) > p_ptr->lev) && (dun_level > s_ptr->slevel)) spell_exp[(increment ? 32 : 0)+spell]+=1;}
4792 /* Sufficient mana */
4793 if (shouhimana <= p_ptr->csp)
4796 p_ptr->csp -= shouhimana;
4799 /* Over-exert the player */
4802 int oops = shouhimana;
4806 p_ptr->csp_frac = 0;
4810 msg_print("Àº¿À¤ò½¸Ã椷¤¹¤®¤Æµ¤¤ò¼º¤Ã¤Æ¤·¤Þ¤Ã¤¿¡ª");
4812 msg_print("You faint from the effort!");
4816 /* Hack -- Bypass free action */
4817 (void)set_paralyzed(p_ptr->paralyzed + randint(5 * oops + 1));
4819 if (realm == REALM_LIFE)
4820 chg_virtue(V_FAITH, -10);
4821 else if (realm == REALM_DEATH)
4822 chg_virtue(V_UNLIFE, -10);
4823 else if (realm == REALM_DAEMON)
4824 chg_virtue(V_JUSTICE, 10);
4825 else if (realm == REALM_NATURE)
4826 chg_virtue(V_NATURE, -10);
4828 chg_virtue(V_KNOWLEDGE, -10);
4830 /* Damage CON (possibly permanently) */
4831 if (rand_int(100) < 50)
4833 bool perm = (rand_int(100) < 25);
4837 msg_print("ÂΤò°¤¯¤·¤Æ¤·¤Þ¤Ã¤¿¡ª");
4839 msg_print("You have damaged your health!");
4843 /* Reduce constitution */
4844 (void)dec_stat(A_CON, 15 + randint(10), perm);
4849 p_ptr->redraw |= (PR_MANA);
4852 p_ptr->window |= (PW_PLAYER);
4853 p_ptr->window |= (PW_SPELL);
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] < s_info[p_ptr->pclass].s_max[GINOU_RIDING]) && s_info[p_ptr->pclass].s_max[GINOU_RIDING] > 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);