3 /* Purpose: Spell/Prayer commands */
6 * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke
8 * This software may be copied and distributed for educational, research, and
9 * not for profit purposes provided that this copyright and statement are
10 * included in all such copies.
15 #include "spellstips.h"
17 cptr spell_categoly_name(int tval)
22 case TV_HISSATSU_BOOK:
31 case TV_HISSATSU_BOOK:
44 * Allow user to choose a spell/prayer from the given book.
46 * If a valid spell is chosen, saves it in '*sn' and returns TRUE
47 * If the user hits escape, returns FALSE, and set '*sn' to -1
48 * If there are no legal choices, returns FALSE, and sets '*sn' to -2
50 * The "prompt" should be "cast", "recite", or "study"
51 * The "known" should be TRUE for cast/pray, FALSE for study
54 bool select_spellbook=FALSE;
55 bool select_the_force=FALSE;
57 static int get_spell(int *sn, cptr prompt, int sval, bool learned, int use_realm)
65 bool flag, redraw, okay;
73 int menu_line = (use_menu ? 1 : 0);
75 #ifdef ALLOW_REPEAT /* TNB */
77 /* Get the spell, if available */
80 /* Verify the spell */
81 if (spell_okay(*sn, learned, FALSE, use_realm - 1))
88 #endif /* ALLOW_REPEAT -- TNB */
90 p = spell_categoly_name(mp_ptr->spell_book);
93 for (spell = 0; spell < 32; spell++)
95 /* Check for this spell */
96 if ((fake_spell_flags[sval] & (1L << spell)))
98 /* Collect this spell */
99 spells[num++] = spell;
103 /* Assume no usable spells */
106 /* Assume no spells available */
109 /* Check for "okay" spells */
110 for (i = 0; i < num; i++)
112 /* Look for "okay" spells */
113 if (spell_okay(spells[i], learned, FALSE, use_realm - 1)) okay = TRUE;
116 /* No "okay" spells */
117 if (!okay) return (FALSE);
118 if (((use_realm) != p_ptr->realm1) && ((use_realm) != p_ptr->realm2) && (p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE)) return FALSE;
119 if (((p_ptr->pclass == CLASS_SORCERER) || (p_ptr->pclass == CLASS_RED_MAGE)) && !is_magic(use_realm)) return FALSE;
120 if ((p_ptr->pclass == CLASS_RED_MAGE) && ((use_realm) != REALM_ARCANE) && (sval > 1)) return FALSE;
122 /* Assume cancelled */
125 /* Nothing chosen yet */
135 p_ptr->window |= (PW_SPELL);
141 /* Build a prompt (accept all spells) */
143 jverb1( prompt, jverb_buf );
144 (void) strnfmt(out_val, 78, "(%^s:%c-%c, '*'¤Ç°ìÍ÷, ESC¤ÇÃæÃÇ) ¤É¤Î%s¤ò%^s¤Þ¤¹¤«? ",
145 p, I2A(0), I2A(num - 1), p, jverb_buf );
147 (void)strnfmt(out_val, 78, "(%^ss %c-%c, *=List, ESC=exit) %^s which %s? ",
148 p, I2A(0), I2A(num - 1), prompt, p);
151 /* Get a spell from the user */
153 choice = (always_show_list || use_menu) ? ESCAPE:1;
156 if( choice==ESCAPE ) choice = ' ';
157 else if( !get_com(out_val, &choice, TRUE) )break;
159 if (use_menu && choice != ' ')
174 menu_line += (num - 1);
196 if (menu_line > num) menu_line -= num;
197 /* Display a list of spells */
198 print_spells(menu_line, spells, num, 1, 15, use_realm - 1);
204 if ((choice == ' ') || (choice == '*') || (choice == '?'))
212 /* Save the screen */
215 /* Display a list of spells */
216 print_spells(menu_line, spells, num, 1, 15, use_realm - 1);
222 if (use_menu) continue;
227 /* Restore the screen */
237 ask = (isupper(choice));
240 if (ask) choice = tolower(choice);
242 /* Extract request */
243 i = (islower(choice) ? A2I(choice) : -1);
246 /* Totally Illegal */
247 if ((i < 0) || (i >= num))
253 /* Save the spell index */
256 /* Require "okay" spells */
257 if (!spell_okay(spell, learned, FALSE, use_realm - 1))
261 msg_format("¤½¤Î%s¤ò%s¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¡£", p, prompt);
263 msg_format("You may not %s that %s.", prompt, p);
274 /* Access the spell */
275 if (!is_magic(use_realm))
277 s_ptr = &technic_info[use_realm - MIN_TECHNIC - 1][spell];
281 s_ptr = &mp_ptr->info[use_realm - 1][spell % 32];
284 if (use_realm == REALM_HISSATSU)
286 shouhimana = s_ptr->smana;
290 if (p_ptr->pclass == CLASS_SORCERER)
291 shouhimana = s_ptr->smana*2200 + 2399;
292 else if (p_ptr->pclass == CLASS_RED_MAGE)
293 shouhimana = s_ptr->smana*2600 + 2399;
295 shouhimana = (s_ptr->smana*(3800-spell_exp[spell])+2399);
298 else shouhimana *= 4;
300 if(shouhimana < 1) shouhimana = 1;
305 jverb1( prompt, jverb_buf );
306 /* ±ÑÆüÀÚ¤êÂؤ¨µ¡Ç½¤ËÂбþ */
307 (void) strnfmt(tmp_val, 78, "%s(MP%d, ¼ºÇÔΨ%d%%)¤ò%s¤Þ¤¹¤«? ",
308 spell_names[technic2magic(use_realm)-1][spell % 32], shouhimana,
309 spell_chance(spell, use_realm -1),jverb_buf);
311 (void)strnfmt(tmp_val, 78, "%^s %s (%d mana, %d%% fail)? ",
312 prompt, spell_names[technic2magic(use_realm)-1][spell % 32], shouhimana,
313 spell_chance(spell, use_realm - 1));
317 /* Belay that order */
318 if (!get_check(tmp_val)) continue;
326 /* Restore the screen */
327 if (redraw) screen_load();
334 p_ptr->window |= (PW_SPELL);
341 /* Abort if needed */
342 if (!flag) return (FALSE);
344 /* Save the choice */
347 #ifdef ALLOW_REPEAT /* TNB */
351 #endif /* ALLOW_REPEAT -- TNB */
358 static bool item_tester_learn_spell(object_type *o_ptr)
360 s32b choices = realm_choices2[p_ptr->pclass];
362 if (p_ptr->pclass == CLASS_PRIEST)
364 if ((p_ptr->realm1 == REALM_LIFE) || (p_ptr->realm1 == REALM_HAJA))
366 choices &= ~(CH_DEATH | CH_DAEMON);
368 else if ((p_ptr->realm1 == REALM_DEATH) || (p_ptr->realm1 == REALM_DAEMON))
370 choices &= ~(CH_LIFE | CH_HAJA);
374 if ((o_ptr->tval < TV_LIFE_BOOK) || (o_ptr->tval > (TV_LIFE_BOOK + MAX_REALM - 1))) return (FALSE);
375 if ((o_ptr->tval == TV_MUSIC_BOOK) && (p_ptr->pclass == CLASS_BARD)) return (TRUE);
376 else if (!is_magic(tval2realm(o_ptr->tval))) return FALSE;
377 if ((REALM1_BOOK == o_ptr->tval) || (REALM2_BOOK == o_ptr->tval)) return (TRUE);
378 if (choices & (0x0001 << (tval2realm(o_ptr->tval) - 1))) return (TRUE);
384 * Peruse the spells/prayers in a book
386 * Note that *all* spells in the book are listed
388 * Note that browsing is allowed while confused or blind,
389 * and in the dark, primarily to allow browsing in stores.
391 void do_cmd_browse(void)
393 int item, sval, use_realm = 0, j, line;
406 /* Warriors are illiterate */
407 if (!(p_ptr->realm1 || p_ptr->realm2) && (p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE))
410 msg_print("ËܤòÆɤळ¤È¤¬¤Ç¤¤Ê¤¤¡ª");
412 msg_print("You cannot read books!");
418 if (p_ptr->special_defense & KATA_MUSOU)
420 set_action(ACTION_NONE);
423 /* Restrict choices to "useful" books */
424 if (p_ptr->realm2 == REALM_NONE) item_tester_tval = mp_ptr->spell_book;
425 else item_tester_hook = item_tester_learn_spell;
429 q = "¤É¤ÎËܤòÆɤߤޤ¹¤«? ";
431 q = "Browse which book? ";
435 s = "Æɤá¤ëËܤ¬¤Ê¤¤¡£";
437 s = "You have no books that you can read.";
440 select_spellbook=TRUE;
441 if (p_ptr->pclass == CLASS_FORCETRAINER)
442 select_the_force = TRUE;
443 if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))){
444 select_spellbook = FALSE;
445 select_the_force = FALSE;
448 select_spellbook = FALSE;
449 select_the_force = FALSE;
451 if (item == 1111) { /* the_force */
452 do_cmd_mind_browse();
455 /* Get the item (in the pack) */
458 o_ptr = &inventory[item];
461 /* Get the item (on the floor) */
464 o_ptr = &o_list[0 - item];
467 /* Access the item's sval */
470 use_realm = tval2realm(o_ptr->tval);
471 if ((p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE) && is_magic(use_realm))
473 if (o_ptr->tval == REALM2_BOOK) increment = 32;
474 else if (o_ptr->tval != REALM1_BOOK) increment = 64;
477 /* Track the object kind */
478 object_kind_track(o_ptr->k_idx);
480 /* Hack -- Handle stuff */
485 for (spell = 0; spell < 32; spell++)
487 /* Check for this spell */
488 if ((fake_spell_flags[sval] & (1L << spell)))
490 /* Collect this spell */
491 spells[num++] = spell;
496 /* Save the screen */
499 /* Clear the top line */
502 /* Keep browsing spells. Exit browsing on cancel. */
505 /* Ask for a spell, allow cancel */
507 if (!get_spell(&spell, "Æɤà", o_ptr->sval, TRUE, use_realm))
509 if (!get_spell(&spell, "browse", o_ptr->sval, TRUE, use_realm))
512 /* If cancelled, leave immediately. */
513 if (spell == -1) break;
515 /* Display a list of spells */
516 print_spells(0, spells, num, 1, 15, use_realm - 1);
518 /* Notify that there's nothing to see, and wait. */
519 if (use_realm == REALM_HISSATSU)
521 prt("Æɤá¤ëµ»¤¬¤Ê¤¤¡£", 0, 0);
523 prt("No techniques to browse.", 0, 0);
527 prt("Æɤá¤ë¼öʸ¤¬¤Ê¤¤¡£", 0, 0);
529 prt("No spells to browse.", 0, 0);
534 /* Restore the screen */
540 /* Clear lines, position cursor (really should use strlen here) */
541 Term_erase(14, 14, 255);
542 Term_erase(14, 13, 255);
543 Term_erase(14, 12, 255);
544 Term_erase(14, 11, 255);
546 /* Access the spell */
547 if (!is_magic(use_realm))
549 s_ptr = &technic_info[use_realm - MIN_TECHNIC - 1][spell];
553 s_ptr = &mp_ptr->info[use_realm - 1][spell];
556 roff_to_buf( spell_tips[technic2magic(use_realm)-1][spell] ,62,temp);
557 for(j=0, line = 11;temp[j];j+=(1+strlen(&temp[j])))
559 prt(&temp[j], line, 15);
564 /* Restore the screen */
569 static void change_realm2(int next_realm)
574 for (i = 0; i < 64; i++)
576 spell_order[j] = spell_order[i];
577 if(spell_order[i] < 32) j++;
582 for (i = 32; i < 64; i++)
588 spell_forgotten2 = 0L;
591 sprintf(tmp,"ËâË¡¤ÎÎΰè¤ò%s¤«¤é%s¤ËÊѹ¹¤·¤¿¡£", realm_names[p_ptr->realm2], realm_names[next_realm]);
593 sprintf(tmp,"change magic realm from %s to %s.", realm_names[p_ptr->realm2], realm_names[next_realm]);
595 do_cmd_write_nikki(NIKKI_BUNSHOU, 0, tmp);
596 p_ptr->old_realm |= 1 << (p_ptr->realm2-1);
597 p_ptr->realm2 = next_realm;
599 p_ptr->notice |= (PN_REORDER);
600 p_ptr->update |= (PU_SPELLS);
606 * Study a book to gain a new spell/prayer
608 void do_cmd_study(void)
612 bool learned = FALSE;
614 /* Spells of realm2 will have an increment of +32 */
617 cptr p = spell_categoly_name(mp_ptr->spell_book);
626 msg_print("ËܤòÆɤळ¤È¤¬¤Ç¤¤Ê¤¤¡ª");
628 msg_print("You cannot read books!");
634 if (p_ptr->blind || no_lite())
637 msg_print("Ìܤ¬¸«¤¨¤Ê¤¤¡ª");
639 msg_print("You cannot see!");
648 msg_print("º®Í𤷤Ƥ¤¤ÆÆɤá¤Ê¤¤¡ª");
650 msg_print("You are too confused!");
656 if (!(p_ptr->new_spells))
659 msg_format("¿·¤·¤¤%s¤ò³Ð¤¨¤ë¤³¤È¤Ï¤Ç¤¤Ê¤¤¡ª", p);
661 msg_format("You cannot learn any new %ss!", p);
667 if (p_ptr->special_defense & KATA_MUSOU)
669 set_action(ACTION_NONE);
672 p = spell_categoly_name(mp_ptr->spell_book);
675 if( p_ptr->new_spells < 10 ){
676 msg_format("¤¢¤È %d ¤Ä¤Î%s¤ò³Ø¤Ù¤ë¡£", p_ptr->new_spells, p);
678 msg_format("¤¢¤È %d ¸Ä¤Î%s¤ò³Ø¤Ù¤ë¡£", p_ptr->new_spells, p);
681 msg_format("You can learn %d new %s%s.", p_ptr->new_spells, p,
682 (p_ptr->new_spells == 1?"":"s"));
688 /* Restrict choices to "useful" books */
689 if (p_ptr->realm2 == REALM_NONE) item_tester_tval = mp_ptr->spell_book;
690 else item_tester_hook = item_tester_learn_spell;
694 q = "¤É¤ÎËܤ«¤é³Ø¤Ó¤Þ¤¹¤«? ";
696 q = "Study which book? ";
700 s = "Æɤá¤ëËܤ¬¤Ê¤¤¡£";
702 s = "You have no books that you can read.";
705 select_spellbook=TRUE;
706 if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return;
707 select_spellbook=FALSE;
709 /* Get the item (in the pack) */
712 o_ptr = &inventory[item];
715 /* Get the item (on the floor) */
718 o_ptr = &o_list[0 - item];
721 /* Access the item's sval */
724 if (o_ptr->tval == REALM2_BOOK) increment = 32;
725 else if (o_ptr->tval != REALM1_BOOK)
728 if (!get_check("ËÜÅö¤ËËâË¡¤ÎÎΰè¤òÊѹ¹¤·¤Þ¤¹¤«¡©")) return;
730 if (!get_check("Really, change magic realm? ")) return;
732 change_realm2(tval2realm(o_ptr->tval));
736 /* Track the object kind */
737 object_kind_track(o_ptr->k_idx);
739 /* Hack -- Handle stuff */
742 /* Mage -- Learn a selected spell */
743 if (mp_ptr->spell_book != TV_LIFE_BOOK)
745 /* Ask for a spell, allow cancel */
747 if (!get_spell(&spell, "³Ø¤Ö", sval, FALSE, o_ptr->tval - TV_LIFE_BOOK + 1)
748 && (spell == -1)) return;
750 if (!get_spell(&spell, "study", sval, FALSE, o_ptr->tval - TV_LIFE_BOOK + 1)
751 && (spell == -1)) return;
756 /* Priest -- Learn a random prayer */
764 for (spell = 0; spell < 32; spell++)
766 /* Check spells in the book */
767 if ((fake_spell_flags[sval] & (1L << spell)))
769 /* Skip non "okay" prayers */
770 if (!spell_okay(spell, FALSE, TRUE,
771 (increment ? p_ptr->realm2 - 1 : p_ptr->realm1 - 1))) continue;
773 /* Hack -- Prepare the randomizer */
776 /* Hack -- Apply the randomizer */
777 if (one_in_(k)) gift = spell;
785 /* Nothing to study */
790 msg_format("¤½¤ÎËܤˤϳؤ֤٤%s¤¬¤Ê¤¤¡£", p);
792 msg_format("You cannot learn any %ss in that book.", p);
801 if (increment) spell += increment;
803 /* Learn the spell */
806 if (spell_learned1 & (1L << spell)) learned = TRUE;
807 else spell_learned1 |= (1L << spell);
811 if (spell_learned2 & (1L << (spell - 32))) learned = TRUE;
812 else spell_learned2 |= (1L << (spell - 32));
817 int max_exp = (spell < 32) ? 1600 : 1400;
818 int old_exp = spell_exp[spell];
820 cptr name = spell_names[technic2magic(increment ? p_ptr->realm2 : p_ptr->realm1)-1][spell%32];
822 if (old_exp >= max_exp)
825 msg_format("¤½¤Î%s¤Ï´°Á´¤Ë»È¤¤¤³¤Ê¤»¤ë¤Î¤Ç³Ø¤ÖɬÍפϤʤ¤¡£", spell_categoly_name(mp_ptr->spell_book));
827 msg_format("You don't need to study this %s anymore.", spell_categoly_name(mp_ptr->spell_book));
832 if (!get_check(format("%s¤Î%s¤ò¤µ¤é¤Ë³Ø¤Ó¤Þ¤¹¡£¤è¤í¤·¤¤¤Ç¤¹¤«¡©", name, spell_categoly_name(mp_ptr->spell_book))))
834 if (!get_check(format("You will study a %s of %s again. Are you sure? ", spell_categoly_name(mp_ptr->spell_book), name)))
839 else if (old_exp >= 1400)
841 spell_exp[spell] = 1600;
844 else if (old_exp >= 1200)
846 if (spell >= 32) spell_exp[spell] = 1400;
847 else spell_exp[spell] += 200;
850 else if (old_exp >= 900)
852 spell_exp[spell] = 1200+(old_exp-900)*2/3;
857 spell_exp[spell] = 900+(old_exp)/3;
861 msg_format("%s¤Î½ÏÎýÅÙ¤¬%s¤Ë¾å¤¬¤Ã¤¿¡£", name, shougou_moji[new_rank]);
863 msg_format("Your proficiency of %s is now %s rank.", name, shougou_moji[new_rank]);
868 /* Find the next open entry in "spell_order[]" */
869 for (i = 0; i < 64; i++)
871 /* Stop at the first empty space */
872 if (spell_order[i] == 99) break;
875 /* Add the spell to the known list */
876 spell_order[i++] = spell;
878 /* Mention the result */
880 /* ±ÑÆüÀÚ¤êÂؤ¨µ¡Ç½¤ËÂбþ */
881 if (mp_ptr->spell_book == TV_MUSIC_BOOK)
883 msg_format("%s¤ò³Ø¤ó¤À¡£",
884 spell_names[technic2magic(increment ? p_ptr->realm2 : p_ptr->realm1)-1][spell % 32]);
888 msg_format("%s¤Î%s¤ò³Ø¤ó¤À¡£",
889 spell_names[technic2magic(increment ? p_ptr->realm2 : p_ptr->realm1)-1][spell % 32] ,p);
892 msg_format("You have learned the %s of %s.",
893 p, spell_names[technic2magic(increment ? p_ptr->realm2 : p_ptr->realm1)-1][spell % 32]);
900 if (mp_ptr->spell_book == TV_LIFE_BOOK)
901 chg_virtue(V_FAITH, 1);
902 else if (mp_ptr->spell_book == TV_DEATH_BOOK)
903 chg_virtue(V_UNLIFE, 1);
904 else if (mp_ptr->spell_book == TV_NATURE_BOOK)
905 chg_virtue(V_NATURE, 1);
907 chg_virtue(V_KNOWLEDGE, 1);
912 /* One less spell available */
913 p_ptr->learned_spells++;
915 /* Message if needed */
916 if (p_ptr->new_spells)
920 if( p_ptr->new_spells < 10 ){
921 msg_format("¤¢¤È %d ¤Ä¤Î%s¤ò³Ø¤Ù¤ë¡£", p_ptr->new_spells, p);
923 msg_format("¤¢¤È %d ¸Ä¤Î%s¤ò³Ø¤Ù¤ë¡£", p_ptr->new_spells, p);
926 msg_format("You can learn %d more %s%s.",
927 p_ptr->new_spells, p,
928 (p_ptr->new_spells != 1) ? "s" : "");
935 p_ptr->update |= (PU_SPELLS);
940 void wild_magic(int spell)
943 int type = SUMMON_BIZARRE1 + randint0(6);
945 if (type < SUMMON_BIZARRE1) type = SUMMON_BIZARRE1;
946 else if (type > SUMMON_BIZARRE6) type = SUMMON_BIZARRE6;
948 switch (randint1(spell) + randint1(8) + 1)
958 teleport_player(100);
962 teleport_player(200);
972 lite_area(damroll(2, 3), 2);
975 destroy_doors_touch();
980 sleep_monsters_touch();
984 trap_creation(py, px);
993 aggravate_monsters(0);
996 earthquake(py, px, 5);
1000 (void)gain_random_mutation(0);
1004 apply_disenchant(1);
1010 fire_ball(GF_CHAOS, 0, spell + 5, 1 + (spell / 10));
1017 while (counter++ < 8)
1019 (void)summon_specific(0, py, px, (dun_level * 3) / 2, type, TRUE, FALSE, FALSE, FALSE, TRUE);
1024 activate_hi_summon(py, px, FALSE);
1027 (void)summon_cyber(-1, py, px);
1032 (void)activate_ty_curse(FALSE, &count);
1041 static bool cast_life_spell(int spell)
1044 int plev = p_ptr->lev;
1048 case 0: /* Detect Evil */
1049 (void)detect_monsters_evil(DETECT_RAD_DEFAULT);
1051 case 1: /* Cure Light Wounds */
1052 (void)hp_player(damroll(2, 10));
1053 (void)set_cut(p_ptr->cut - 10);
1056 (void)set_blessed(randint1(12) + 12, FALSE);
1058 case 3: /* Remove Fear */
1059 (void)set_afraid(0);
1061 case 4: /* Call Light */
1062 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
1064 case 5: /* Detect Traps + Secret Doors */
1065 (void)detect_traps(DETECT_RAD_DEFAULT);
1066 (void)detect_doors(DETECT_RAD_DEFAULT);
1067 (void)detect_stairs(DETECT_RAD_DEFAULT);
1069 case 6: /* Cure Medium Wounds */
1070 (void)hp_player(damroll(4, 10));
1071 (void)set_cut((p_ptr->cut / 2) - 20);
1073 case 7: /* Satisfy Hunger */
1074 (void)set_food(PY_FOOD_MAX - 1);
1076 case 8: /* Remove Curse */
1080 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
1082 msg_print("You feel as if someone is watching over you.");
1086 case 9: /* Cure Poison */
1087 (void)set_poisoned(0);
1089 case 10: /* Cure Critical Wounds */
1090 (void)hp_player(damroll(8, 10));
1094 case 11: /* Sense Unseen */
1095 (void)set_tim_invis(randint1(24) + 24, FALSE);
1097 case 12: /* Holy Orb */
1098 if (!get_aim_dir(&dir)) return FALSE;
1100 fire_ball(GF_HOLY_FIRE, dir,
1101 (damroll(3, 6) + plev +
1102 (plev / ((p_ptr->pclass == CLASS_PRIEST ||
1103 p_ptr->pclass == CLASS_HIGH_MAGE ||
1104 p_ptr->pclass == CLASS_SORCERER) ? 2 : 4))),
1105 ((plev < 30) ? 2 : 3));
1108 case 13: /* Protection from Evil */
1109 (void)set_protevil(randint1(25) + 3 * p_ptr->lev, FALSE);
1111 case 14: /* Healing */
1112 (void)hp_player(300);
1116 case 15: /* Glyph of Warding */
1119 case 16: /* Exorcism */
1120 (void)dispel_undead(randint1(plev));
1121 (void)dispel_demons(randint1(plev));
1122 (void)turn_evil(plev);
1124 case 17: /* Dispel Curse */
1125 if (remove_all_curse())
1128 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
1130 msg_print("You feel as if someone is watching over you.");
1134 case 18: /* Dispel Undead + Demons */
1135 (void)dispel_undead(randint1(plev * 3));
1136 (void)dispel_demons(randint1(plev * 3));
1138 case 19: /* 'Day of the Dove' */
1139 charm_monsters(plev * 2);
1141 case 20: /* Dispel Evil */
1142 (void)dispel_evil(randint1(plev * 4));
1144 case 21: /* Banishment */
1145 if (banish_evil(100))
1148 msg_print("¿À¤Î¸æÎϤ¬¼Ù°¤òÂǤÁʧ¤Ã¤¿¡ª");
1150 msg_print("The power of your god banishes evil!");
1155 case 22: /* Holy Word */
1156 (void)dispel_evil(randint1(plev * 4));
1157 (void)hp_player(1000);
1158 (void)set_afraid(0);
1159 (void)set_poisoned(0);
1163 case 23: /* Warding True */
1167 case 24: /* Heroism */
1168 (void)set_hero(randint1(25) + 25, FALSE);
1169 (void)hp_player(10);
1170 (void)set_afraid(0);
1172 case 25: /* Prayer */
1173 (void)set_blessed(randint1(48) + 48, FALSE);
1175 case 26: /* Turn Undead */
1176 (void)mass_genocide_undead(plev+50,TRUE);
1178 case 27: /* Restoration */
1179 (void)do_res_stat(A_STR);
1180 (void)do_res_stat(A_INT);
1181 (void)do_res_stat(A_WIS);
1182 (void)do_res_stat(A_DEX);
1183 (void)do_res_stat(A_CON);
1184 (void)do_res_stat(A_CHR);
1185 (void)restore_level();
1187 case 28: /* Healing True */
1188 (void)hp_player(2000);
1192 case 29: /* Holy Vision */
1193 return identify_fully(FALSE);
1194 case 30: /* Divine Intervention */
1195 project(0, 1, py, px, 500, GF_HOLY_FIRE, PROJECT_KILL, -1);
1196 dispel_monsters(plev * 4);
1198 stun_monsters(plev * 4);
1199 confuse_monsters(plev * 4);
1200 turn_monsters(plev * 4);
1201 stasis_monsters(plev * 4);
1202 summon_specific(-1, py, px, plev, SUMMON_ANGEL, TRUE, TRUE, TRUE, FALSE, FALSE);
1203 (void)set_hero(randint1(25) + 25, FALSE);
1204 (void)hp_player(300);
1205 (void)set_fast(randint1(20 + plev) + plev, FALSE);
1206 (void)set_afraid(0);
1208 case 31: /* Ultimate resistance */
1210 int v = randint1(plev/2)+plev/2;
1211 (void)set_fast(v, FALSE);
1212 set_oppose_acid(v, FALSE);
1213 set_oppose_elec(v, FALSE);
1214 set_oppose_fire(v, FALSE);
1215 set_oppose_cold(v, FALSE);
1216 set_oppose_pois(v, FALSE);
1217 set_ultimate_res(v, FALSE);
1222 msg_format("¤¢¤Ê¤¿¤ÏÉÔÌÀ¤Ê¥é¥¤¥Õ¤Î¼öʸ %d ¤ò¾§¤¨¤¿¡£", spell);
1224 msg_format("You cast an unknown Life spell: %d.", spell);
1235 static bool cast_sorcery_spell(int spell)
1238 int plev = p_ptr->lev;
1242 case 0: /* Detect Monsters */
1243 (void)detect_monsters_normal(DETECT_RAD_DEFAULT);
1245 case 1: /* Phase Door */
1246 teleport_player(10);
1248 case 2: /* Detect Doors and Traps */
1249 (void)detect_traps(DETECT_RAD_DEFAULT);
1250 (void)detect_doors(DETECT_RAD_DEFAULT);
1251 (void)detect_stairs(DETECT_RAD_DEFAULT);
1253 case 3: /* Light Area */
1254 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
1256 case 4: /* Confuse Monster */
1257 if (!get_aim_dir(&dir)) return FALSE;
1259 (void)confuse_monster(dir, (plev * 3) / 2);
1261 case 5: /* Teleport */
1262 teleport_player(plev * 5);
1264 case 6: /* Sleep Monster */
1265 if (!get_aim_dir(&dir)) return FALSE;
1267 (void)sleep_monster(dir);
1269 case 7: /* Recharging */
1270 return recharge(plev * 4);
1271 case 8: /* Magic Mapping */
1272 map_area(DETECT_RAD_MAP);
1274 case 9: /* Identify */
1275 return ident_spell(FALSE);
1276 case 10: /* Slow Monster */
1277 if (!get_aim_dir(&dir)) return FALSE;
1279 (void)slow_monster(dir);
1281 case 11: /* Mass Sleep */
1282 (void)sleep_monsters();
1284 case 12: /* Teleport Away */
1285 if (!get_aim_dir(&dir)) return FALSE;
1287 (void)fire_beam(GF_AWAY_ALL, dir, plev);
1289 case 13: /* Haste Self */
1290 (void)set_fast(randint1(20 + plev) + plev, FALSE);
1292 case 14: /* Detection True */
1293 (void)detect_all(DETECT_RAD_DEFAULT);
1295 case 15: /* Identify True */
1296 return identify_fully(FALSE);
1297 case 16: /* Detect Objects and Treasure*/
1298 (void)detect_objects_normal(DETECT_RAD_DEFAULT);
1299 (void)detect_treasure(DETECT_RAD_DEFAULT);
1300 (void)detect_objects_gold(DETECT_RAD_DEFAULT);
1302 case 17: /* Charm Monster */
1303 if (!get_aim_dir(&dir)) return FALSE;
1305 (void)charm_monster(dir, plev);
1307 case 18: /* Sense Minds */
1308 (void)set_tim_esp(randint1(30) + 25, FALSE);
1310 case 19: /* Teleport to town */
1313 case 20: /* Self knowledge */
1314 (void)self_knowledge();
1316 case 21: /* Teleport Level */
1318 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return FALSE;
1320 if (!get_check("Are you sure? (Teleport Level)")) return FALSE;
1322 (void)teleport_player_level();
1324 case 22: /* Word of Recall */
1325 if (!word_of_recall()) return FALSE;
1327 case 23: /* Dimension Door */
1329 msg_print("¼¡¸µ¤ÎÈ⤬³«¤¤¤¿¡£ÌÜŪÃϤòÁª¤ó¤Ç²¼¤µ¤¤¡£");
1331 msg_print("You open a dimensional gate. Choose a destination.");
1334 return dimension_door();
1335 case 24: /* Probing */
1338 case 25: /* Explosive Rune */
1341 case 26: /* Telekinesis */
1342 if (!get_aim_dir(&dir)) return FALSE;
1344 fetch(dir, plev * 15, FALSE);
1346 case 27: /* Clairvoyance */
1347 chg_virtue(V_KNOWLEDGE, 1);
1348 chg_virtue(V_ENLIGHTEN, 1);
1350 wiz_lite(FALSE, FALSE);
1351 if (!(p_ptr->telepathy))
1353 (void)set_tim_esp(randint1(30) + 25, FALSE);
1356 case 28: /* Charm Monsters */
1357 charm_monsters(plev * 2);
1359 case 29: /* Alchemy */
1361 case 30: /* Banish */
1362 banish_monsters(plev * 4);
1364 case 31: /* Globe of Invulnerability */
1365 (void)set_invuln(randint1(4) + 4, FALSE);
1369 msg_format("¤¢¤Ê¤¿¤ÏÉÔÌÀ¤Ê¥½¡¼¥µ¥ê¡¼¤Î¼öʸ %d ¤ò¾§¤¨¤¿¡£", spell);
1371 msg_format("You cast an unknown Sorcery spell: %d.", spell);
1381 static bool cast_nature_spell(int spell)
1385 int plev = p_ptr->lev;
1386 bool no_trump = FALSE;
1388 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
1389 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
1390 else beam = plev / 2;
1394 case 0: /* Detect Creatures */
1395 (void)detect_monsters_normal(DETECT_RAD_DEFAULT);
1397 case 1: /* Lightning Bolt */
1398 project_length = plev / 6 + 2;
1399 if (!get_aim_dir(&dir)) return FALSE;
1401 fire_beam(GF_ELEC, dir,
1402 damroll(3 + ((plev - 1) / 5), 4));
1404 case 2: /* Detect Doors & Traps */
1405 (void)detect_traps(DETECT_RAD_DEFAULT);
1406 (void)detect_doors(DETECT_RAD_DEFAULT);
1407 (void)detect_stairs(DETECT_RAD_DEFAULT);
1409 case 3: /* Produce Food */
1410 (void)set_food(PY_FOOD_MAX - 1);
1412 case 4: /* Daylight */
1413 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
1414 if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)
1417 msg_print("Æü¤Î¸÷¤¬¤¢¤Ê¤¿¤ÎÆùÂΤò¾Ç¤¬¤·¤¿¡ª");
1419 msg_print("The daylight scorches your flesh!");
1423 take_hit(DAMAGE_NOESCAPE, damroll(2, 2), "Æü¤Î¸÷", -1);
1425 take_hit(DAMAGE_NOESCAPE, damroll(2, 2), "daylight", -1);
1430 case 5: /* Animal Taming */
1431 if (!get_aim_dir(&dir)) return FALSE;
1433 (void)charm_animal(dir, plev);
1435 case 6: /* Resist Environment */
1436 (void)set_oppose_cold(randint1(20) + 20, FALSE);
1437 (void)set_oppose_fire(randint1(20) + 20, FALSE);
1438 (void)set_oppose_elec(randint1(20) + 20, FALSE);
1440 case 7: /* Cure Wounds & Poison */
1441 (void)hp_player(damroll(2, 8));
1443 (void)set_poisoned(0);
1445 case 8: /* Stone to Mud */
1446 if (!get_aim_dir(&dir)) return FALSE;
1448 (void)wall_to_mud(dir);
1450 case 9: /* Frost Bolt */
1451 if (!get_aim_dir(&dir)) return FALSE;
1452 fire_bolt_or_beam(beam - 10, GF_COLD, dir,
1453 damroll(3 + ((plev - 5) / 4), 8));
1455 case 10: /* Nature Awareness -- downgraded */
1456 map_area(DETECT_RAD_MAP);
1457 (void)detect_traps(DETECT_RAD_DEFAULT);
1458 (void)detect_doors(DETECT_RAD_DEFAULT);
1459 (void)detect_stairs(DETECT_RAD_DEFAULT);
1460 (void)detect_monsters_normal(DETECT_RAD_DEFAULT);
1462 case 11: /* Fire Bolt */
1463 if (!get_aim_dir(&dir)) return FALSE;
1464 fire_bolt_or_beam(beam - 10, GF_FIRE, dir,
1465 damroll(5 + ((plev - 5) / 4), 8));
1467 case 12: /* Ray of Sunlight */
1468 if (!get_aim_dir(&dir)) return FALSE;
1470 msg_print("ÂÀÍÛ¸÷Àþ¤¬¸½¤ì¤¿¡£");
1472 msg_print("A line of sunlight appears.");
1475 (void)lite_line(dir);
1477 case 13: /* Entangle */
1480 case 14: /* Summon Animals */
1481 if (!(summon_specific(-1, py, px, plev, SUMMON_ANIMAL_RANGER, TRUE, TRUE, TRUE, FALSE, FALSE)))
1484 case 15: /* Herbal Healing */
1485 (void)hp_player(500);
1488 (void)set_poisoned(0);
1490 case 16: /* Stair Building */
1491 (void)stair_creation();
1493 case 17: /* Stone Skin */
1494 (void)set_shield(randint1(20) + 30, FALSE);
1496 case 18: /* Resistance True */
1497 (void)set_oppose_acid(randint1(20) + 20, FALSE);
1498 (void)set_oppose_elec(randint1(20) + 20, FALSE);
1499 (void)set_oppose_fire(randint1(20) + 20, FALSE);
1500 (void)set_oppose_cold(randint1(20) + 20, FALSE);
1501 (void)set_oppose_pois(randint1(20) + 20, FALSE);
1503 case 19: /* Tree Creation */
1504 (void)tree_creation();
1506 case 20: /* Animal Friendship */
1507 (void)charm_animals(plev * 2);
1509 case 21: /* Stone Tell */
1510 return identify_fully(FALSE);
1511 case 22: /* Wall of Stone */
1514 case 23: /* Protection from Corrosion */
1516 case 24: /* Earthquake */
1517 earthquake(py, px, 10);
1519 case 25: /* Whirlwind Attack */
1523 monster_type *m_ptr;
1525 for (dir = 0; dir < 8; dir++)
1527 y = py + ddy_ddd[dir];
1528 x = px + ddx_ddd[dir];
1529 c_ptr = &cave[y][x];
1531 /* Get the monster */
1532 m_ptr = &m_list[c_ptr->m_idx];
1534 /* Hack -- attack monsters */
1535 if (c_ptr->m_idx && (m_ptr->ml || cave_floor_bold(y, x)))
1540 case 26: /* Blizzard */
1541 if (!get_aim_dir(&dir)) return FALSE;
1543 fire_ball(GF_COLD, dir, 70 + plev * 3 / 2, (plev / 12) + 1);
1545 case 27: /* Lightning Storm */
1546 if (!get_aim_dir(&dir)) return FALSE;
1547 fire_ball(GF_ELEC, dir, 90 + plev * 3 / 2, (plev / 12) + 1);
1549 case 28: /* Whirlpool */
1550 if (!get_aim_dir(&dir)) return FALSE;
1551 fire_ball(GF_WATER, dir, 100 + plev * 3 / 2, (plev / 12) + 1);
1553 case 29: /* Call Sunlight */
1554 fire_ball(GF_LITE, 0, 150, 8);
1555 chg_virtue(V_KNOWLEDGE, 1);
1556 chg_virtue(V_ENLIGHTEN, 1);
1557 wiz_lite(FALSE, FALSE);
1558 if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)
1561 msg_print("Æü¸÷¤¬¤¢¤Ê¤¿¤ÎÆùÂΤò¾Ç¤¬¤·¤¿¡ª");
1563 msg_print("The sunlight scorches your flesh!");
1567 take_hit(DAMAGE_NOESCAPE, 50, "Æü¸÷", -1);
1569 take_hit(DAMAGE_NOESCAPE, 50, "sunlight", -1);
1574 case 30: /* Elemental Branding */
1575 brand_weapon(randint0(2));
1577 case 31: /* Nature's Wrath */
1578 (void)dispel_monsters(plev * 4);
1579 earthquake(py, px, 20 + (plev / 2));
1580 project(0, 1 + plev / 12, py, px,
1581 (100 + plev) * 2, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM, -1);
1585 msg_format("¤¢¤Ê¤¿¤ÏÉÔÌÀ¤Ê¥Í¥¤¥Á¥ã¡¼¤Î¼öʸ %d ¤ò¾§¤¨¤¿¡£", spell);
1587 msg_format("You cast an unknown Nature spell: %d.", spell);
1595 msg_print("ưʪ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
1597 msg_print("No animals arrive.");
1605 static bool cast_chaos_spell(int spell)
1608 int plev = p_ptr->lev;
1610 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
1611 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
1612 else beam = plev / 2;
1616 case 0: /* Magic Missile */
1617 if (!get_aim_dir(&dir)) return FALSE;
1619 fire_bolt_or_beam(beam - 10, GF_MISSILE, dir,
1620 damroll(3 + ((plev - 1) / 5), 4));
1622 case 1: /* Trap / Door destruction */
1623 (void)destroy_doors_touch();
1625 case 2: /* Flash of Light == Light Area */
1626 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
1628 case 3: /* Touch of Confusion */
1629 if (!(p_ptr->special_attack & ATTACK_CONFUSE))
1632 msg_print("¤¢¤Ê¤¿¤Î¼ê¤Ï¸÷¤ê»Ï¤á¤¿¡£");
1634 msg_print("Your hands start glowing.");
1637 p_ptr->special_attack |= ATTACK_CONFUSE;
1638 p_ptr->redraw |= (PR_STATUS);
1641 case 4: /* Mana Burst */
1642 if (!get_aim_dir(&dir)) return FALSE;
1644 fire_ball(GF_MISSILE, dir,
1645 (damroll(3, 5) + plev +
1646 (plev / (((p_ptr->pclass == CLASS_MAGE)
1647 || (p_ptr->pclass == CLASS_HIGH_MAGE)
1648 || (p_ptr->pclass == CLASS_SORCERER)) ? 2 : 4))),
1649 ((plev < 30) ? 2 : 3));
1650 /* Shouldn't actually use GF_MANA, as it will destroy all
1651 * items on the floor */
1653 case 5: /* Fire Bolt */
1654 if (!get_aim_dir(&dir)) return FALSE;
1656 fire_bolt_or_beam(beam, GF_FIRE, dir,
1657 damroll(8 + ((plev - 5) / 4), 8));
1659 case 6: /* Fist of Force ("Fist of Fun") */
1660 if (!get_aim_dir(&dir)) return FALSE;
1662 fire_ball(GF_DISINTEGRATE, dir,
1663 damroll(8 + ((plev - 5) / 4), 8), 0);
1665 case 7: /* Teleport Self */
1666 teleport_player(plev * 5);
1668 case 8: /* Wonder */
1670 /* This spell should become more useful (more
1671 controlled) as the player gains experience levels.
1672 Thus, add 1/5 of the player's level to the die roll.
1673 This eliminates the worst effects later on, while
1674 keeping the results quite random. It also allows
1675 some potent effects only at high level. */
1677 int die = randint1(100) + plev / 5;
1678 int vir = virtue_number(V_CHANCE);
1681 if (p_ptr->virtues[vir - 1] > 0)
1683 while (randint1(400) < p_ptr->virtues[vir - 1]) die++;
1687 while (randint1(400) < (0-p_ptr->virtues[vir - 1])) die--;
1692 chg_virtue(V_CHANCE, 1);
1694 if (!get_aim_dir(&dir)) return FALSE;
1697 msg_print("¤¢¤Ê¤¿¤ÏÎϤ¬¤ß¤Ê¤®¤ë¤Î¤ò´¶¤¸¤¿¡ª");
1699 msg_print("You feel a surge of power!");
1702 if (die < 8) clone_monster(dir);
1703 else if (die < 14) speed_monster(dir);
1704 else if (die < 26) heal_monster(dir, damroll(4, 6));
1705 else if (die < 31) poly_monster(dir);
1707 fire_bolt_or_beam(beam - 10, GF_MISSILE, dir,
1708 damroll(3 + ((plev - 1) / 5), 4));
1709 else if (die < 41) confuse_monster(dir, plev);
1710 else if (die < 46) fire_ball(GF_POIS, dir, 20 + (plev / 2), 3);
1711 else if (die < 51) (void)lite_line(dir);
1713 fire_bolt_or_beam(beam - 10, GF_ELEC, dir,
1714 damroll(3 + ((plev - 5) / 4), 8));
1716 fire_bolt_or_beam(beam - 10, GF_COLD, dir,
1717 damroll(5 + ((plev - 5) / 4), 8));
1719 fire_bolt_or_beam(beam, GF_ACID, dir,
1720 damroll(6 + ((plev - 5) / 4), 8));
1722 fire_bolt_or_beam(beam, GF_FIRE, dir,
1723 damroll(8 + ((plev - 5) / 4), 8));
1724 else if (die < 76) drain_life(dir, 75);
1725 else if (die < 81) fire_ball(GF_ELEC, dir, 30 + plev / 2, 2);
1726 else if (die < 86) fire_ball(GF_ACID, dir, 40 + plev, 2);
1727 else if (die < 91) fire_ball(GF_ICE, dir, 70 + plev, 3);
1728 else if (die < 96) fire_ball(GF_FIRE, dir, 80 + plev, 3);
1729 else if (die < 101) drain_life(dir, 100 + plev);
1732 earthquake(py, px, 12);
1736 destroy_area(py, px, 13+randint0(5), TRUE);
1740 symbol_genocide(plev+50, TRUE);
1742 else if (die < 110) dispel_monsters(120);
1745 dispel_monsters(150);
1753 case 9: /* Chaos Bolt */
1754 if (!get_aim_dir(&dir)) return FALSE;
1756 fire_bolt_or_beam(beam, GF_CHAOS, dir,
1757 damroll(10 + ((plev - 5) / 4), 8));
1759 case 10: /* Sonic Boom */
1761 msg_print("¥É¡¼¥ó¡ªÉô²°¤¬Íɤ줿¡ª");
1763 msg_print("BOOM! Shake the room!");
1766 project(0, plev / 10 + 2, py, px,
1767 (60 + plev), GF_SOUND, PROJECT_KILL | PROJECT_ITEM, -1);
1769 case 11: /* Doom Bolt -- always beam in 2.0.7 or later */
1770 if (!get_aim_dir(&dir)) return FALSE;
1772 fire_beam(GF_MANA, dir, damroll(11 + ((plev - 5) / 4), 8));
1774 case 12: /* Fire Ball */
1775 if (!get_aim_dir(&dir)) return FALSE;
1777 fire_ball(GF_FIRE, dir, plev + 55, 2);
1779 case 13: /* Teleport Other */
1780 if (!get_aim_dir(&dir)) return FALSE;
1782 (void)fire_beam(GF_AWAY_ALL, dir, plev);
1784 case 14: /* Word of Destruction */
1785 destroy_area(py, px, 13+randint0(5), TRUE);
1787 case 15: /* Invoke Logrus */
1788 if (!get_aim_dir(&dir)) return FALSE;
1790 fire_ball(GF_CHAOS, dir, plev*2 + 99, plev / 5);
1792 case 16: /* Polymorph Other */
1793 if (!get_aim_dir(&dir)) return FALSE;
1795 (void)poly_monster(dir);
1797 case 17: /* Chain Lightning */
1798 for (dir = 0; dir <= 9; dir++)
1799 fire_beam(GF_ELEC, dir, damroll(5 + (plev / 10), 8));
1801 case 18: /* Arcane Binding == Charging */
1802 return recharge(90);
1803 case 19: /* Disintegration */
1804 if (!get_aim_dir(&dir)) return FALSE;
1806 fire_ball(GF_DISINTEGRATE, dir, plev + 70, 3 + plev / 40);
1808 case 20: /* Alter Reality */
1811 case 21: /* Magic Rocket */
1812 if (!get_aim_dir(&dir)) return FALSE;
1815 msg_print("¥í¥±¥Ã¥Èȯ¼Í¡ª");
1817 msg_print("You launch a rocket!");
1820 fire_rocket(GF_ROCKET, dir, 120 + plev*2, 2);
1822 case 22: /* Chaos Branding */
1825 case 23: /* Summon monster, demon */
1827 bool pet = !one_in_(3);
1828 bool group = !(pet && (plev < 50));
1830 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, SUMMON_DEMON, group, FALSE, pet, FALSE, (bool)(!pet)))
1833 msg_print("ⲫ¤Î°½¤¬½¼Ëþ¤·¤¿¡£");
1835 msg_print("The area fills with a stench of sulphur and brimstone.");
1841 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
1843 msg_print("'What is thy bidding... Master?'");
1848 msg_print("¡ÖÈܤ·¤¼Ô¤è¡¢²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª ¤ªÁ°¤Îº²¤òĺ¤¯¤¾¡ª¡×");
1850 msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'");
1856 case 24: /* Beam of Gravity */
1857 if (!get_aim_dir(&dir)) return FALSE;
1859 fire_beam(GF_GRAVITY, dir, damroll(9 + ((plev - 5) / 4), 8));
1861 case 25: /* Meteor Swarm */
1864 int b = 10 + randint1(10);
1865 for (i = 0; i < b; i++)
1867 int count = 0, d = 0;
1872 if (count > 20) break;
1873 x = px - 8 + randint0(17);
1874 y = py - 8 + randint0(17);
1876 if (!in_bounds(y,x) || (!cave_floor_bold(y,x) && (cave[y][x].feat != FEAT_TREES)) || !player_has_los_bold(y, x)) continue;
1878 dx = (px > x) ? (px - x) : (x - px);
1879 dy = (py > y) ? (py - y) : (y - py);
1881 /* Approximate distance */
1882 d = (dy > dx) ? (dy + (dx >> 1)) : (dx + (dy >> 1));
1886 if (count > 20) continue;
1888 project(0, 2, y, x, plev * 2, GF_METEOR, PROJECT_KILL | PROJECT_JUMP | PROJECT_ITEM, -1);
1892 case 26: /* Flame Strike */
1893 fire_ball(GF_FIRE, 0, 300 + (3 * plev), 8);
1895 case 27: /* Call Chaos */
1898 case 28: /* Polymorph Self */
1900 if (!get_check("ÊѿȤ·¤Þ¤¹¡£¤è¤í¤·¤¤¤Ç¤¹¤«¡©")) return FALSE;
1902 if (!get_check("You will polymorph yourself. Are you sure? ")) return FALSE;
1906 case 29: /* Mana Storm */
1907 if (!get_aim_dir(&dir)) return FALSE;
1909 fire_ball(GF_MANA, dir, 300 + (plev * 4), 4);
1911 case 30: /* Breathe Logrus */
1912 if (!get_aim_dir(&dir)) return FALSE;
1914 fire_ball(GF_CHAOS, dir, p_ptr->chp, 2);
1916 case 31: /* Call the Void */
1921 msg_format("¤¢¤Ê¤¿¤ÏÉÔÌÀ¤Ê¥«¥ª¥¹¤Î¼öʸ %d ¤ò¾§¤¨¤¿¡£", spell);
1923 msg_format("You cast an unknown Chaos spell: %d.", spell);
1933 static bool cast_death_spell(int spell)
1937 int plev = p_ptr->lev;
1940 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
1941 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
1942 else beam = plev / 2;
1946 case 0: /* Detect Undead & Demons -> Unlife */
1947 (void)detect_monsters_nonliving(DETECT_RAD_DEFAULT);
1949 case 1: /* Malediction */
1950 if (!get_aim_dir(&dir)) return FALSE;
1951 /* A radius-0 ball may (1) be aimed at objects etc.,
1952 * and will affect them; (2) may be aimed at ANY
1953 * visible monster, unlike a 'bolt' which must travel
1954 * to the monster. */
1956 fire_ball(GF_HELL_FIRE, dir,
1957 damroll(3 + ((plev - 1) / 5), 4), 0);
1960 { /* Special effect first */
1961 dummy = randint1(1000);
1963 fire_ball_hide(GF_DEATH_RAY, dir, plev * 200, 0);
1964 else if (dummy < 500)
1965 fire_ball_hide(GF_TURN_ALL, dir, plev, 0);
1966 else if (dummy < 800)
1967 fire_ball_hide(GF_OLD_CONF, dir, plev, 0);
1969 fire_ball_hide(GF_STUN, dir, plev, 0);
1972 case 2: /* Detect Evil */
1973 (void)detect_monsters_evil(DETECT_RAD_DEFAULT);
1975 case 3: /* Stinking Cloud */
1976 if (!get_aim_dir(&dir)) return FALSE;
1978 fire_ball(GF_POIS, dir, 10 + (plev / 2), 2);
1980 case 4: /* Black Sleep */
1981 if (!get_aim_dir(&dir)) return FALSE;
1983 (void)sleep_monster(dir);
1985 case 5: /* Resist Poison */
1986 (void)set_oppose_pois(randint1(20) + 20, FALSE);
1988 case 6: /* Horrify */
1989 if (!get_aim_dir(&dir)) return FALSE;
1991 (void)fear_monster(dir, plev);
1992 (void)stun_monster(dir, plev);
1994 case 7: /* Enslave Undead */
1995 if (!get_aim_dir(&dir)) return FALSE;
1997 (void)control_one_undead(dir, plev);
1999 case 8: /* Orb of Entropy */
2000 if (!get_aim_dir(&dir)) return FALSE;
2002 fire_ball(GF_OLD_DRAIN, dir,
2003 (damroll(3, 6) + plev +
2004 (plev / (((p_ptr->pclass == CLASS_MAGE) ||
2005 (p_ptr->pclass == CLASS_HIGH_MAGE) ||
2006 (p_ptr->pclass == CLASS_SORCERER)) ? 2 : 4))),
2007 ((plev < 30) ? 2 : 3));
2009 case 9: /* Nether Bolt */
2010 if (!get_aim_dir(&dir)) return FALSE;
2012 fire_bolt_or_beam(beam, GF_NETHER, dir,
2013 damroll(8 + ((plev - 5) / 4), 8));
2015 case 10: /* Cloud kill */
2016 project(0, plev / 10 + 2, py, px,
2017 (30 + plev) * 2, GF_POIS, PROJECT_KILL | PROJECT_ITEM, -1);
2019 case 11: /* Genocide One */
2020 if (!get_aim_dir(&dir)) return FALSE;
2022 fire_ball_hide(GF_GENOCIDE, dir, plev + 50, 0);
2024 case 12: /* Poison Branding */
2027 case 13: /* Vampiric Drain */
2028 if (!get_aim_dir(&dir)) return FALSE;
2030 dummy = plev * 2 + randint1(plev * 2); /* Dmg */
2031 if (drain_life(dir, dummy))
2033 chg_virtue(V_SACRIFICE, -1);
2034 chg_virtue(V_VITALITY, -1);
2036 (void)hp_player(dummy);
2037 /* Gain nutritional sustenance: 150/hp drained */
2038 /* A Food ration gives 5000 food points (by contrast) */
2039 /* Don't ever get more than "Full" this way */
2040 /* But if we ARE Gorged, it won't cure us */
2041 dummy = p_ptr->food + MIN(5000, 100 * dummy);
2042 if (p_ptr->food < PY_FOOD_MAX) /* Not gorged already */
2043 (void)set_food(dummy >= PY_FOOD_MAX ? PY_FOOD_MAX - 1 : dummy);
2046 case 14: /* Animate Dead */
2047 animate_dead(0, py, px);
2049 case 15: /* Genocide */
2050 (void)symbol_genocide(plev+50, TRUE);
2052 case 16: /* Berserk */
2053 (void)set_shero(randint1(25) + 25, FALSE);
2054 (void)hp_player(30);
2055 (void)set_afraid(0);
2057 case 17: /* Invoke Spirits */
2059 int die = randint1(100) + plev / 5;
2060 int vir = virtue_number(V_CHANCE);
2063 if (p_ptr->virtues[vir - 1] > 0)
2065 while (randint1(400) < p_ptr->virtues[vir - 1]) die++;
2069 while (randint1(400) < (0-p_ptr->virtues[vir - 1])) die--;
2073 if (!get_aim_dir(&dir)) return FALSE;
2076 msg_print("¤¢¤Ê¤¿¤Ï»à¼Ô¤¿¤Á¤ÎÎϤò¾·½¸¤·¤¿...");
2078 msg_print("You call on the power of the dead...");
2081 chg_virtue(V_CHANCE, 1);
2085 msg_print("¤¢¤Ê¤¿¤Ï¤ª¤É¤í¤ª¤É¤í¤·¤¤ÎϤΤ¦¤Í¤ê¤ò´¶¤¸¤¿¡ª");
2087 msg_print("You feel a surge of eldritch force!");
2094 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¤¢¤Ê¤¿¤Î¼þ¤ê¤ÎÃÏÌ̤«¤éµà¤Á¤¿¿Í±Æ¤¬Î©¤Á¾å¤¬¤Ã¤Æ¤¤¿¡ª");
2096 msg_print("Oh no! Mouldering forms rise from the earth around you!");
2099 (void)summon_specific(0, py, px, dun_level, SUMMON_UNDEAD, TRUE, FALSE, FALSE, TRUE, TRUE);
2100 chg_virtue(V_UNLIFE, 1);
2105 msg_print("̾¾õ¤·Æñ¤¤¼Ù°¤Ê¸ºß¤¬¤¢¤Ê¤¿¤Î¿´¤òÄ̤ê²á¤®¤Æ¹Ô¤Ã¤¿...");
2107 msg_print("An unnamable evil brushes against your mind...");
2110 set_afraid(p_ptr->afraid + randint1(4) + 4);
2115 msg_print("¤¢¤Ê¤¿¤ÎƬ¤ËÂçÎ̤ÎÍ©Î¤Á¤ÎÁû¡¹¤·¤¤À¼¤¬²¡¤·´ó¤»¤Æ¤¤¿...");
2117 msg_print("Your head is invaded by a horde of gibbering spectral voices...");
2120 set_confused(p_ptr->confused + randint1(4) + 4);
2128 fire_bolt_or_beam(beam - 10, GF_MISSILE, dir,
2129 damroll(3 + ((plev - 1) / 5), 4));
2133 confuse_monster (dir, plev);
2137 fire_ball(GF_POIS, dir, 20 + (plev / 2), 3);
2141 (void)lite_line(dir);
2145 fire_bolt_or_beam(beam - 10, GF_ELEC, dir,
2146 damroll(3+((plev-5)/4),8));
2150 fire_bolt_or_beam(beam - 10, GF_COLD, dir,
2151 damroll(5+((plev-5)/4),8));
2155 fire_bolt_or_beam(beam, GF_ACID, dir,
2156 damroll(6+((plev-5)/4),8));
2160 fire_bolt_or_beam(beam, GF_FIRE, dir,
2161 damroll(8+((plev-5)/4),8));
2165 drain_life(dir, 75);
2169 fire_ball(GF_ELEC, dir, 30 + plev / 2, 2);
2173 fire_ball(GF_ACID, dir, 40 + plev, 2);
2177 fire_ball(GF_ICE, dir, 70 + plev, 3);
2181 fire_ball(GF_FIRE, dir, 80 + plev, 3);
2185 drain_life(dir, 100 + plev);
2189 earthquake(py, px, 12);
2193 destroy_area(py, px, 13+randint0(5), TRUE);
2197 symbol_genocide(plev+50, TRUE);
2201 dispel_monsters(120);
2205 dispel_monsters(150);
2213 msg_print("±¢±µ¤ÊÀ¼¤¬¥¯¥¹¥¯¥¹¾Ð¤¦¡£¡Ö¤â¤¦¤¹¤°¤ª¤Þ¤¨¤Ï²æ¡¹¤ÎÃç´Ö¤Ë¤Ê¤ë¤À¤í¤¦¡£¼å¤¼Ô¤è¡£¡×");
2215 msg_print("Sepulchral voices chuckle. 'Soon you will join us, mortal.'");
2220 case 18: /* Dark Bolt */
2221 if (!get_aim_dir(&dir)) return FALSE;
2223 fire_bolt_or_beam(beam, GF_DARK, dir,
2224 damroll(4 + ((plev - 5) / 4), 8));
2226 case 19: /* Battle Frenzy */
2227 (void)set_shero(randint1(25) + 25, FALSE);
2228 (void)hp_player(30);
2229 (void)set_afraid(0);
2230 (void)set_fast(randint1(20 + (plev / 2)) + (plev / 2), FALSE);
2232 case 20: /* Vampiric Branding */
2235 case 21: /* Vampirism True */
2236 if (!get_aim_dir(&dir)) return FALSE;
2238 chg_virtue(V_SACRIFICE, -1);
2239 chg_virtue(V_VITALITY, -1);
2241 for (dummy = 0; dummy < 3; dummy++)
2243 if (drain_life(dir, 100))
2247 case 22: /* Word of Death */
2248 (void)dispel_living(randint1(plev * 3));
2250 case 23: /* Darkness Storm */
2251 if (!get_aim_dir(&dir)) return FALSE;
2253 fire_ball(GF_DARK, dir, 100+plev*2, 4);
2255 case 24: /* Death Ray */
2256 if (!get_aim_dir(&dir)) return FALSE;
2258 (void)death_ray(dir, plev);
2260 case 25: /* Raise the Dead */
2262 bool pet = one_in_(3);
2266 type = (plev > 47 ? SUMMON_HI_UNDEAD : SUMMON_UNDEAD);
2269 group = (((plev > 24) && one_in_(3)) ? TRUE : FALSE);
2276 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, type, group, FALSE, pet, (bool)(!pet), (bool)(!pet)))
2279 msg_print("Î䤿¤¤É÷¤¬¤¢¤Ê¤¿¤Î¼þ¤ê¤Ë¿á¤»Ï¤á¤¿¡£¤½¤ì¤ÏÉåÇÔ½¤ò±¿¤ó¤Ç¤¤¤ë...");
2281 msg_print("Cold winds begin to blow around you, carrying with them the stench of decay...");
2287 msg_print("¸Å¤¨¤Î»à¤»¤ë¼Ô¶¦¤¬¤¢¤Ê¤¿¤Ë»Å¤¨¤ë¤¿¤áÅÚ¤«¤éᴤä¿¡ª");
2289 msg_print("Ancient, long-dead forms arise from the ground to serve you!");
2294 msg_print("»à¼Ô¤¬á´¤Ã¤¿¡£Ì²¤ê¤ò˸¤²¤ë¤¢¤Ê¤¿¤òȳ¤¹¤ë¤¿¤á¤Ë¡ª");
2296 msg_print("'The dead arise... to punish you for disturbing them!'");
2299 chg_virtue(V_UNLIFE, 1);
2304 case 26: /* Esoteria */
2305 if (randint1(50) > plev)
2306 return ident_spell(FALSE);
2308 return identify_fully(FALSE);
2310 case 27: /* Mimic vampire */
2311 (void)set_mimic(10+plev/2 + randint1(10+plev/2), MIMIC_VAMPIRE, FALSE);
2313 case 28: /* Restore Life */
2314 (void)restore_level();
2316 case 29: /* Mass Genocide */
2317 (void)mass_genocide(plev+50, TRUE);
2319 case 30: /* Hellfire */
2320 if (!get_aim_dir(&dir)) return FALSE;
2322 fire_ball(GF_HELL_FIRE, dir, 666, 3);
2324 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "ÃϹö¤Î¹å²Ð¤Î¼öʸ¤ò¾§¤¨¤¿ÈèÏ«", -1);
2326 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "the strain of casting Hellfire", -1);
2330 case 31: /* Wraithform */
2331 set_wraith_form(randint1(plev / 2) + (plev / 2), FALSE);
2334 msg_format("You cast an unknown Death spell: %d.", spell);
2342 static bool cast_trump_spell(int spell, bool success)
2346 int plev = p_ptr->lev;
2347 int summon_lev = plev * 2 / 3 + randint1(plev/2);
2349 bool no_trump = FALSE;
2350 bool unique_okay = FALSE;
2353 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
2354 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
2355 else beam = plev / 2;
2357 if (summon_lev < 1) summon_lev = 1;
2358 if (!success || (randint1(50+plev) < plev/10)) unique_okay = TRUE;
2361 case 0: /* Phase Door */
2364 teleport_player(10);
2367 case 1: /* Trump Spiders */
2369 bool pet = success; /* (randint1(5) > 2) */
2372 msg_print("¤¢¤Ê¤¿¤ÏÃØéá¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2374 msg_print("You concentrate on the trump of an spider...");
2378 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_SPIDER, TRUE, FALSE, pet, FALSE, (bool)(!pet)))
2382 msg_print("¾¤´Ô¤µ¤ì¤¿ÃØéá¤ÏÅܤäƤ¤¤ë¡ª");
2384 msg_print("The summoned spiders get angry!");
2395 case 2: /* Shuffle */
2398 /* A limited power 'wonder' spell */
2399 int die = randint1(120);
2400 int vir = virtue_number(V_CHANCE);
2402 if ((p_ptr->pclass == CLASS_ROGUE) ||
2403 (p_ptr->pclass == CLASS_HIGH_MAGE) ||
2404 (p_ptr->pclass == CLASS_SORCERER))
2405 die = (randint1(110)) + plev / 5;
2406 /* Card sharks and high mages get a level bonus */
2410 if (p_ptr->virtues[vir - 1] > 0)
2412 while (randint1(400) < p_ptr->virtues[vir - 1]) die++;
2416 while (randint1(400) < (0-p_ptr->virtues[vir - 1])) die--;
2421 msg_print("¤¢¤Ê¤¿¤Ï¥«¡¼¥É¤òÀڤäưìËç°ú¤¤¤¿...");
2423 msg_print("You shuffle the deck and draw a card...");
2427 chg_virtue(V_CHANCE, 1);
2432 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡Ô»à¡Õ¤À¡ª");
2434 msg_print("Oh no! It's Death!");
2437 for (dummy = 0; dummy < randint1(3); dummy++)
2438 (void)activate_hi_summon(py, px, FALSE);
2443 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡Ô°Ëâ¡Õ¤À¡ª");
2445 msg_print("Oh no! It's the Devil!");
2448 (void)summon_specific(0, py, px, dun_level, SUMMON_DEMON, TRUE, FALSE, FALSE, TRUE, TRUE);
2454 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡ÔÄߤé¤ì¤¿ÃË¡Õ¤À¡ª");
2456 msg_print("Oh no! It's the Hanged Man.");
2459 (void)activate_ty_curse(FALSE, &count);
2464 msg_print("¡ÔÉÔĴϤηõ¡Õ¤À¡£");
2466 msg_print("It's the swords of discord.");
2469 aggravate_monsters(0);
2474 msg_print("¡Ô¶ò¼Ô¡Õ¤À¡£");
2476 msg_print("It's the Fool.");
2479 (void)do_dec_stat(A_INT);
2480 (void)do_dec_stat(A_WIS);
2485 msg_print("´ñ̯¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
2487 msg_print("It's the picture of a strange monster.");
2490 if (!(summon_specific(0, py, px, (dun_level * 3) / 2, 32 + randint1(6), TRUE, FALSE, FALSE, TRUE, TRUE)))
2496 msg_print("¡Ô·î¡Õ¤À¡£");
2498 msg_print("It's the Moon.");
2506 msg_print("¡Ô±¿Ì¿¤ÎÎØ¡Õ¤À¡£");
2508 msg_print("It's the Wheel of Fortune.");
2511 wild_magic(randint0(32));
2516 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
2518 msg_print("It's a teleport trump card.");
2521 teleport_player(10);
2526 msg_print("¡ÔÀµµÁ¡Õ¤À¡£");
2528 msg_print("It's Justice.");
2531 set_blessed(p_ptr->lev, FALSE);
2536 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
2538 msg_print("It's a teleport trump card.");
2541 teleport_player(100);
2546 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
2548 msg_print("It's a teleport trump card.");
2551 teleport_player(200);
2556 msg_print("¡ÔÅã¡Õ¤À¡£");
2558 msg_print("It's the Tower.");
2566 msg_print("¡ÔÀáÀ©¡Õ¤À¡£");
2568 msg_print("It's Temperance.");
2571 sleep_monsters_touch();
2576 msg_print("¡ÔÅã¡Õ¤À¡£");
2578 msg_print("It's the Tower.");
2581 earthquake(py, px, 5);
2586 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
2588 msg_print("It's the picture of a friendly monster.");
2591 if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE1, FALSE, TRUE, TRUE, FALSE, FALSE)))
2597 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
2599 msg_print("It's the picture of a friendly monster.");
2602 if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE2, FALSE, TRUE, TRUE, FALSE, FALSE)))
2608 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
2610 msg_print("It's the picture of a friendly monster.");
2613 if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE4, FALSE, TRUE, TRUE, FALSE, FALSE)))
2619 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
2621 msg_print("It's the picture of a friendly monster.");
2624 if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE5, FALSE, TRUE, TRUE, FALSE, FALSE)))
2630 msg_print("¡ÔÎø¿Í¡Õ¤À¡£");
2632 msg_print("It's the Lovers.");
2635 if (get_aim_dir(&dir))
2636 (void)charm_monster(dir, MIN(p_ptr->lev, 20));
2641 msg_print("¡Ô±£¼Ô¡Õ¤À¡£");
2643 msg_print("It's the Hermit.");
2651 msg_print("¡Ô¿³È½¡Õ¤À¡£");
2653 msg_print("It's the Judgement.");
2656 do_cmd_rerate(FALSE);
2657 if (p_ptr->muta1 || p_ptr->muta2 || p_ptr->muta3)
2660 msg_print("Á´¤Æ¤ÎÆÍÁ³ÊÑ°Û¤¬¼£¤Ã¤¿¡£");
2662 msg_print("You are cured of all mutations.");
2665 p_ptr->muta1 = p_ptr->muta2 = p_ptr->muta3 = 0;
2666 p_ptr->update |= PU_BONUS;
2673 msg_print("¡ÔÂÀÍÛ¡Õ¤À¡£");
2675 msg_print("It's the Sun.");
2678 chg_virtue(V_KNOWLEDGE, 1);
2679 chg_virtue(V_ENLIGHTEN, 1);
2680 wiz_lite(FALSE, FALSE);
2685 msg_print("¡ÔÀ¤³¦¡Õ¤À¡£");
2687 msg_print("It's the World.");
2690 if (p_ptr->exp < PY_MAX_EXP)
2692 s32b ee = (p_ptr->exp / 25) + 1;
2693 if (ee > 5000) ee = 5000;
2695 msg_print("¹¹¤Ë·Ð¸³¤òÀѤó¤À¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
2697 msg_print("You feel more experienced.");
2705 case 3: /* Reset Recall */
2708 if (!reset_recall()) return FALSE;
2711 case 4: /* Teleport Self */
2714 teleport_player(plev * 4);
2717 case 5: /* Trump Spying */
2720 (void)set_tim_esp(randint1(30) + 25, FALSE);
2723 case 6: /* Teleport Away */
2726 if (!get_aim_dir(&dir)) return FALSE;
2727 (void)fire_beam(GF_AWAY_ALL, dir, plev);
2730 case 7: /* Trump Animals */
2732 bool pet = success; /* was (randint1(5) > 2) */
2733 int type = (pet ? SUMMON_ANIMAL_RANGER : SUMMON_ANIMAL);
2734 bool group = (pet ? FALSE : TRUE);
2737 msg_print("¤¢¤Ê¤¿¤Ïưʪ¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2739 msg_print("You concentrate on the trump of an animal...");
2743 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, type, group, FALSE, pet, FALSE, (bool)(!pet)))
2747 msg_print("¾¤´¤µ¤ì¤¿Æ°Êª¤ÏÅܤäƤ¤¤ë¡ª");
2749 msg_print("The summoned animal gets angry!");
2760 case 8: /* Trump Reach */
2763 if (!get_aim_dir(&dir)) return FALSE;
2764 fetch(dir, plev * 15, TRUE);
2767 case 9: /* Trump Kamikaze */
2772 if (!target_set(TARGET_KILL)) return FALSE;
2779 msg_print("¤¢¤Ê¤¿¤Ï¥«¥ß¥«¥¼¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2781 msg_print("You concentrate on several trumps at once...");
2785 for (dummy = 2 + randint0(plev / 7); dummy > 0; dummy--)
2787 bool pet = success; /* was (randint1(10) > 3) */
2788 bool group = (pet ? FALSE : TRUE);
2791 if (p_ptr->pclass == CLASS_BEASTMASTER)
2793 type = SUMMON_KAMIKAZE_LIVING;
2797 type = SUMMON_KAMIKAZE;
2800 if (summon_specific((pet ? -1 : 0), y, x, summon_lev, type, group, FALSE, pet, FALSE, (bool)(!pet)))
2804 msg_print("¾¤´Ô¤µ¤ì¤¿¥â¥ó¥¹¥¿¡¼¤ÏÅܤäƤ¤¤ë¡ª");
2806 msg_print("The summoned creatures get angry!");
2814 case 10: /* Phantasmal Servant */
2817 if (summon_specific(-1, py, px, (summon_lev * 3) / 2, SUMMON_PHANTOM, FALSE, TRUE, TRUE, FALSE, FALSE))
2820 msg_print("¸æÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¸æ¼ç¿ÍÍÍ¡©");
2822 msg_print("'Your wish, master?'");
2832 case 11: /* Speed Monster */
2835 bool old_target_pet = target_pet;
2837 if (!get_aim_dir(&dir))
2839 target_pet = old_target_pet;
2842 target_pet = old_target_pet;
2843 (void)speed_monster(dir);
2846 case 12: /* Teleport Level */
2850 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return FALSE;
2852 if (!get_check("Are you sure? (Teleport Level)")) return FALSE;
2854 (void)teleport_player_level();
2857 case 13: /* Dimension Door */
2861 msg_print("¼¡¸µ¤ÎÈ⤬³«¤¤¤¿¡£ÌÜŪÃϤòÁª¤ó¤Ç²¼¤µ¤¤¡£");
2863 msg_print("You open a dimensional gate. Choose a destination.");
2866 return dimension_door();
2869 case 14: /* Word of Recall */
2872 if (!word_of_recall()) return FALSE;
2875 case 15: /* Banish */
2878 banish_monsters(plev * 4);
2881 case 16: /* Swap Position */
2885 project_length = -1;
2886 if (!get_aim_dir(&dir))
2893 (void)teleport_swap(dir);
2897 case 17: /* Trump Undead */
2899 bool pet = success; /* (randint1(10) > 3) */
2900 bool group = (pet ? FALSE : TRUE);
2903 msg_print("¤¢¤Ê¤¿¤Ï¥¢¥ó¥Ç¥Ã¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2905 msg_print("You concentrate on the trump of an undead creature...");
2909 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_UNDEAD, group, FALSE, pet, FALSE, (bool)(!pet)))
2913 msg_print("¾¤´Ô¤µ¤ì¤¿¥¢¥ó¥Ç¥Ã¥É¤ÏÅܤäƤ¤¤ë¡ª");
2915 msg_print("The summoned undead creature gets angry!");
2926 case 18: /* Trump Reptiles */
2928 bool pet = success; /* was (randint1(5) > 2) */
2932 msg_print("¤¢¤Ê¤¿¤Ïà¨ÃîÎà¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2934 msg_print("You concentrate on the trump of a reptile...");
2938 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HYDRA, group, FALSE, pet, FALSE, (bool)(!pet)))
2942 msg_print("¾¤´Ô¤µ¤ì¤¿à¨ÃîÎà¤ÏÅܤäƤ¤¤ë¡ª");
2944 msg_print("The summoned reptile gets angry!");
2955 case 19: /* Trump Monsters */
2960 msg_print("¤¢¤Ê¤¿¤Ï¥â¥ó¥¹¥¿¡¼¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
2962 msg_print("You concentrate on several trumps at once...");
2966 for (dummy = 0; dummy < 1 + ((plev - 15)/ 10); dummy++)
2968 bool pet = success; /* was (randint1(10) > 3) */
2969 bool group = (pet ? FALSE : TRUE);
2972 if (p_ptr->pclass == CLASS_BEASTMASTER)
2974 type = SUMMON_LIVING;
2981 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, type, group, FALSE, pet, unique_okay, (bool)(!pet)))
2985 msg_print("¾¤´Ô¤µ¤ì¤¿¥â¥ó¥¹¥¿¡¼¤ÏÅܤäƤ¤¤ë¡ª");
2987 msg_print("The summoned creatures get angry!");
2995 case 20: /* Trump Hounds */
2997 bool pet = success; /* was (randint1(5) > 2) */
3000 msg_print("¤¢¤Ê¤¿¤Ï¥Ï¥¦¥ó¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3002 msg_print("You concentrate on the trump of a hound...");
3006 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HOUND, TRUE, FALSE, pet, FALSE, (bool)(!pet)))
3010 msg_print("¾¤´Ô¤µ¤ì¤¿¥Ï¥¦¥ó¥É¤ÏÅܤäƤ¤¤ë¡ª");
3012 msg_print("The summoned hounds get angry!");
3023 case 21: /* Trump Branding */
3029 case 22: /* Living Trump */
3033 /* Teleport control */
3036 /* Random teleportation (uncontrolled) */
3038 /* Gain the mutation */
3039 if (gain_random_mutation(dummy))
3041 msg_print("¤¢¤Ê¤¿¤ÏÀ¸¤¤Æ¤¤¤ë¥«¡¼¥É¤ËÊѤï¤Ã¤¿¡£");
3043 msg_print("You have turned into a Living Trump.");
3048 case 23: /* Trump Cyberdemon */
3050 bool pet = success; /* was (randint1(10) > 3) */
3053 msg_print("¤¢¤Ê¤¿¤Ï¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3055 msg_print("You concentrate on the trump of a Cyberdemon...");
3059 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_CYBER, FALSE, FALSE, pet, FALSE, (bool)(!pet)))
3063 msg_print("¾¤´Ô¤µ¤ì¤¿¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤ÏÅܤäƤ¤¤ë¡ª");
3065 msg_print("The summoned Cyberdemon gets angry!");
3076 case 24: /* Trump Divination */
3079 (void)detect_all(DETECT_RAD_DEFAULT);
3082 case 25: /* Trump Lore */
3085 return identify_fully(FALSE);
3088 case 26: /* Heal Monster */
3091 bool old_target_pet = target_pet;
3093 if (!get_aim_dir(&dir))
3095 target_pet = old_target_pet;
3098 target_pet = old_target_pet;
3100 (void)heal_monster(dir, p_ptr->lev * 10 + 200);
3103 case 27: /* Trump Dragon */
3105 bool pet = success; /* was (randint1(10) > 3) */
3106 bool group = (pet ? FALSE : TRUE);
3109 msg_print("¤¢¤Ê¤¿¤Ï¥É¥é¥´¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3111 msg_print("You concentrate on the trump of a dragon...");
3115 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_DRAGON, group, FALSE, pet, FALSE, (bool)(!pet)))
3119 msg_print("¾¤´Ô¤µ¤ì¤¿¥É¥é¥´¥ó¤ÏÅܤäƤ¤¤ë¡ª");
3121 msg_print("The summoned dragon gets angry!");
3132 case 28: /* Trump Meteor */
3135 int x, y, dx, dy, i;
3136 int b = 10 + randint1(10);
3137 for (i = 0; i < b; i++)
3139 int count = 0, d = 0;
3144 if (count > 20) break;
3145 x = px - 8 + randint0(17);
3146 y = py - 8 + randint0(17);
3148 if (!in_bounds(y,x) || (!cave_floor_bold(y,x) && (cave[y][x].feat != FEAT_TREES)) || !player_has_los_bold(y, x)) continue;
3150 dx = (px > x) ? (px - x) : (x - px);
3151 dy = (py > y) ? (py - y) : (y - py);
3153 /* Approximate distance */
3154 d = (dy > dx) ? (dy + (dx >> 1)) : (dx + (dy >> 1));
3158 if (count > 20) continue;
3160 project(0, 2, y, x, plev * 2, GF_METEOR, PROJECT_KILL | PROJECT_JUMP | PROJECT_ITEM, -1);
3164 case 29: /* Trump Demon */
3166 bool pet = success; /* was (randint1(10) > 3) */
3167 bool group = (pet ? FALSE : TRUE);
3170 msg_print("¤¢¤Ê¤¿¤Ï¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3172 msg_print("You concentrate on the trump of a demon...");
3176 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_DEMON, group, FALSE, pet, FALSE, (bool)(!pet)))
3180 msg_print("¾¤´Ô¤µ¤ì¤¿¥Ç¡¼¥â¥ó¤ÏÅܤäƤ¤¤ë¡ª");
3182 msg_print("The summoned demon gets angry!");
3193 case 30: /* Trump Greater Undead */
3195 bool pet = success; /* was (randint1(10) > 3) */
3196 bool group = (pet ? FALSE : TRUE);
3199 msg_print("¤¢¤Ê¤¿¤Ï¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3201 msg_print("You concentrate on the trump of a greater undead being...");
3205 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HI_UNDEAD, group, FALSE, pet, unique_okay, (bool)(!pet)))
3209 msg_print("¾¤´Ô¤µ¤ì¤¿¾åµé¥¢¥ó¥Ç¥Ã¥É¤ÏÅܤäƤ¤¤ë¡ª");
3211 msg_print("The summoned greater undead creature gets angry!");
3222 case 31: /* Trump Ancient Dragon */
3224 bool pet = success; /* was (randint1(10) > 3) */
3225 bool group = (pet ? FALSE : TRUE);
3227 if (p_ptr->pclass == CLASS_BEASTMASTER)
3229 type = SUMMON_HI_DRAGON_LIVING;
3233 type = SUMMON_HI_DRAGON;
3237 msg_print("¤¢¤Ê¤¿¤Ï¸ÅÂå¥É¥é¥´¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
3239 msg_print("You concentrate on the trump of an ancient dragon...");
3243 if (summon_specific((pet ? -1 : 0), py, px, summon_lev, type, group, FALSE, pet, unique_okay, (bool)(!pet)))
3247 msg_print("¾¤´Ô¤µ¤ì¤¿¸ÅÂå¥É¥é¥´¥ó¤ÏÅܤäƤ¤¤ë¡ª");
3249 msg_print("The summoned ancient dragon gets angry!");
3262 msg_format("̤ÃΤΥ«¡¼¥É¤Î¼öʸ¤Ç¤¹: %d", spell);
3264 msg_format("You cast an unknown Trump spell: %d.", spell);
3273 msg_print("ï¤â¤¢¤Ê¤¿¤Î¥«¡¼¥É¤Î¸Æ¤ÓÀ¼¤ËÅú¤¨¤Ê¤¤¡£");
3275 msg_print("Nobody answers to your Trump call.");
3284 static bool cast_arcane_spell(int spell)
3288 int plev = p_ptr->lev;
3290 bool no_trump = FALSE;
3292 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
3293 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
3294 else beam = plev / 2;
3299 if (!get_aim_dir(&dir)) return FALSE;
3301 fire_bolt_or_beam(beam - 10, GF_ELEC, dir,
3302 damroll(3 + ((plev - 1) / 5), 3));
3304 case 1: /* Wizard Lock */
3305 if (!get_aim_dir(&dir)) return FALSE;
3307 (void)wizard_lock(dir);
3309 case 2: /* Detect Invisibility */
3310 (void)detect_monsters_invis(DETECT_RAD_DEFAULT);
3312 case 3: /* Detect Monsters */
3313 (void)detect_monsters_normal(DETECT_RAD_DEFAULT);
3316 teleport_player(10);
3318 case 5: /* Light Area */
3319 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
3321 case 6: /* Trap & Door Destruction */
3322 if (!get_aim_dir(&dir)) return FALSE;
3324 (void)destroy_door(dir);
3326 case 7: /* Cure Light Wounds */
3327 (void)hp_player(damroll(2, 8));
3328 (void)set_cut(p_ptr->cut - 10);
3330 case 8: /* Detect Doors & Traps */
3331 (void)detect_traps(DETECT_RAD_DEFAULT);
3332 (void)detect_doors(DETECT_RAD_DEFAULT);
3333 (void)detect_stairs(DETECT_RAD_DEFAULT);
3335 case 9: /* Phlogiston */
3338 case 10: /* Detect Treasure */
3339 (void)detect_treasure(DETECT_RAD_DEFAULT);
3340 (void)detect_objects_gold(DETECT_RAD_DEFAULT);
3342 case 11: /* Detect Enchantment */
3343 (void)detect_objects_magic(DETECT_RAD_DEFAULT);
3345 case 12: /* Detect Objects */
3346 (void)detect_objects_normal(DETECT_RAD_DEFAULT);
3348 case 13: /* Cure Poison */
3349 (void)set_poisoned(0);
3351 case 14: /* Resist Cold */
3352 (void)set_oppose_cold(randint1(20) + 20, FALSE);
3354 case 15: /* Resist Fire */
3355 (void)set_oppose_fire(randint1(20) + 20, FALSE);
3357 case 16: /* Resist Lightning */
3358 (void)set_oppose_elec(randint1(20) + 20, FALSE);
3360 case 17: /* Resist Acid */
3361 (void)set_oppose_acid(randint1(20) + 20, FALSE);
3363 case 18: /* Cure Medium Wounds */
3364 (void)hp_player(damroll(4, 8));
3365 (void)set_cut((p_ptr->cut / 2) - 50);
3367 case 19: /* Teleport */
3368 teleport_player(plev * 5);
3370 case 20: /* Identify */
3371 return ident_spell(FALSE);
3372 case 21: /* Stone to Mud */
3373 if (!get_aim_dir(&dir)) return FALSE;
3375 (void)wall_to_mud(dir);
3377 case 22: /* Ray of Light */
3378 if (!get_aim_dir(&dir)) return FALSE;
3381 msg_print("¸÷Àþ¤¬Êü¤¿¤ì¤¿¡£");
3383 msg_print("A line of light appears.");
3386 (void)lite_line(dir);
3388 case 23: /* Satisfy Hunger */
3389 (void)set_food(PY_FOOD_MAX - 1);
3391 case 24: /* See Invisible */
3392 (void)set_tim_invis(randint1(24) + 24, FALSE);
3394 case 25: /* Conjure Elemental */
3395 if (!summon_specific(-1, py, px, plev, SUMMON_ELEMENTAL, TRUE, TRUE, TRUE, FALSE, FALSE))
3398 case 26: /* Teleport Level */
3400 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return FALSE;
3402 if (!get_check("Are you sure? (Teleport Level)")) return FALSE;
3404 (void)teleport_player_level();
3406 case 27: /* Teleport Away */
3407 if (!get_aim_dir(&dir)) return FALSE;
3409 (void)fire_beam(GF_AWAY_ALL, dir, plev);
3411 case 28: /* Elemental Ball */
3412 if (!get_aim_dir(&dir)) return FALSE;
3414 switch (randint1(4))
3416 case 1: dummy = GF_FIRE;break;
3417 case 2: dummy = GF_ELEC;break;
3418 case 3: dummy = GF_COLD;break;
3419 default: dummy = GF_ACID;break;
3421 fire_ball(dummy, dir, 75 + (plev), 2);
3423 case 29: /* Detection */
3424 (void)detect_all(DETECT_RAD_DEFAULT);
3426 case 30: /* Word of Recall */
3427 if (!word_of_recall()) return FALSE;
3429 case 31: /* Clairvoyance */
3430 chg_virtue(V_KNOWLEDGE, 1);
3431 chg_virtue(V_ENLIGHTEN, 1);
3432 wiz_lite(FALSE, FALSE);
3433 if (!p_ptr->telepathy)
3435 (void)set_tim_esp(randint1(30) + 25, FALSE);
3439 msg_format("You cast an unknown Arcane spell: %d.", spell);
3445 msg_print("¥¨¥ì¥á¥ó¥¿¥ë¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3447 msg_print("No Elementals arrive.");
3454 static bool cast_enchant_spell(int spell)
3456 int plev = p_ptr->lev;
3458 bool no_trump = FALSE;
3462 case 0: /* Infravision */
3463 set_tim_infra(100 + randint1(100), FALSE);
3465 case 1: /* Regeneration */
3466 set_tim_regen(80 + randint1(80), FALSE);
3468 case 2: /* Satisfy Hunger */
3469 (void)set_food(PY_FOOD_MAX - 1);
3471 case 3: /* Resist Cold */
3472 (void)set_oppose_cold(randint1(20) + 20, FALSE);
3474 case 4: /* Resist Fire */
3475 (void)set_oppose_fire(randint1(20) + 20, FALSE);
3477 case 5: /* Heroism */
3478 (void)set_hero(randint1(25) + 25, FALSE);
3479 (void)hp_player(10);
3480 (void)set_afraid(0);
3482 case 6: /* Resist Lightning */
3483 (void)set_oppose_elec(randint1(20) + 20, FALSE);
3485 case 7: /* Resist Acid */
3486 (void)set_oppose_acid(randint1(20) + 20, FALSE);
3488 case 8: /* See Invisibility */
3489 (void)set_tim_invis(randint1(24) + 24, FALSE);
3491 case 9: /* Remove Curse */
3495 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
3497 msg_print("You feel as if someone is watching over you.");
3501 case 10: /* Resist Poison */
3502 (void)set_oppose_pois(randint1(20) + 20, FALSE);
3504 case 11: /* Berserk */
3505 (void)set_shero(randint1(25) + 25, FALSE);
3506 (void)hp_player(30);
3507 (void)set_afraid(0);
3509 case 12: /* Self Knowledge */
3510 (void)self_knowledge();
3512 case 13: /* Protection from Evil */
3513 (void)set_protevil(randint1(25) + 3 * p_ptr->lev, FALSE);
3515 case 14: /* Healing */
3521 case 15: /* Mana Branding */
3522 return choose_ele_attack();
3524 case 16: /* Telepathy */
3525 (void)set_tim_esp(randint1(30) + 25, FALSE);
3527 case 17: /* Stone Skin */
3528 (void)set_shield(randint1(20) + 30, FALSE);
3530 case 18: /* Resistance */
3531 (void)set_oppose_acid(randint1(20) + 20, FALSE);
3532 (void)set_oppose_elec(randint1(20) + 20, FALSE);
3533 (void)set_oppose_fire(randint1(20) + 20, FALSE);
3534 (void)set_oppose_cold(randint1(20) + 20, FALSE);
3535 (void)set_oppose_pois(randint1(20) + 20, FALSE);
3537 case 19: /* Haste */
3538 (void)set_fast(randint1(20 + plev) + plev, FALSE);
3540 case 20: /* Walk through Wall */
3541 (void)set_kabenuke(randint1(plev/2) + plev/2, FALSE);
3543 case 21: /* Pulish Shield */
3544 (void)pulish_shield();
3546 case 22: /* Create Golem */
3547 if (summon_specific(-1, py, px, plev, SUMMON_GOLEM, FALSE, TRUE, TRUE, FALSE, FALSE))
3550 msg_print("¥´¡¼¥ì¥à¤òºî¤Ã¤¿¡£");
3552 msg_print("You make a golem.");
3560 case 23: /* Magic armor */
3561 (void)set_magicdef(randint1(20) + 20, FALSE);
3563 case 24: /* Remove Enchantment */
3564 if (!mundane_spell(TRUE)) return FALSE;
3566 case 25: /* Remove All Curse */
3567 if (remove_all_curse())
3570 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
3572 msg_print("You feel as if someone is watching over you.");
3576 case 26: /* Total Knowledge */
3577 return identify_fully(FALSE);
3579 case 27: /* Enchant Weapon */
3580 return enchant_spell(randint0(4) + 1, randint0(4) + 1, 0);
3582 case 28: /* Enchant Armor */
3583 return enchant_spell(0, 0, randint0(3) + 2);
3585 case 29: /* Brand Weapon */
3586 brand_weapon(randint0(18));
3588 case 30: /* Living Trump */
3590 /* Teleport control */
3593 /* Random teleportation (uncontrolled) */
3595 /* Gain the mutation */
3596 if (gain_random_mutation(dummy))
3598 msg_print("¤¢¤Ê¤¿¤ÏÀ¸¤¤Æ¤¤¤ë¥«¡¼¥É¤ËÊѤï¤Ã¤¿¡£");
3600 msg_print("You have turned into a Living Trump.");
3603 case 31: /* Immune */
3604 return (choose_ele_immune(13 + randint1(13)));
3607 msg_format("You cast an unknown Craft spell: %d.", spell);
3613 msg_print("¤¦¤Þ¤¯¥´¡¼¥ì¥à¤òºî¤ì¤Ê¤«¤Ã¤¿¡£");
3615 msg_print("No Golems arrive.");
3623 * An "item_tester_hook" for offer
3625 static bool item_tester_offer(object_type *o_ptr)
3627 /* Flasks of oil are okay */
3628 if (o_ptr->tval != TV_CORPSE) return (FALSE);
3630 if (o_ptr->sval != SV_CORPSE) return (FALSE);
3632 if (strchr("pht", r_info[o_ptr->pval].d_char)) return (TRUE);
3634 /* Assume not okay */
3639 static bool cast_daemon_spell(int spell)
3642 int plev = p_ptr->lev;
3644 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
3645 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
3646 else beam = plev / 2;
3650 case 0: /* Magic Missile */
3651 if (!get_aim_dir(&dir)) return FALSE;
3653 fire_bolt_or_beam(beam - 10, GF_MISSILE, dir,
3654 damroll(3 + ((plev - 1) / 5), 4));
3656 case 1: /* Detect Undead & Demons -> Unlife */
3657 (void)detect_monsters_nonliving(DETECT_RAD_DEFAULT);
3660 (void)set_blessed(randint1(12) + 12, FALSE);
3662 case 3: /* Resist Fire */
3663 (void)set_oppose_fire(randint1(20) + 20, FALSE);
3665 case 4: /* Horrify */
3666 if (!get_aim_dir(&dir)) return FALSE;
3668 (void)fear_monster(dir, plev);
3669 (void)stun_monster(dir, plev);
3671 case 5: /* Nether Bolt */
3672 if (!get_aim_dir(&dir)) return FALSE;
3674 fire_bolt_or_beam(beam, GF_NETHER, dir,
3675 damroll(6 + ((plev - 5) / 4), 8));
3677 case 6: /* Summon monster, demon */
3678 if (!summon_specific(-1, py, px, (plev * 3) / 2, SUMMON_MANES, TRUE, FALSE, TRUE, FALSE, FALSE))
3681 msg_print("¸ÅÂå¤Î»àÎî¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3683 msg_print("No Manes arrive.");
3687 case 7: /* Mini Hellfire */
3688 if (!get_aim_dir(&dir)) return FALSE;
3690 fire_ball(GF_HELL_FIRE, dir,
3691 (damroll(3, 6) + plev +
3692 (plev / (((p_ptr->pclass == CLASS_MAGE) ||
3693 (p_ptr->pclass == CLASS_HIGH_MAGE) ||
3694 (p_ptr->pclass == CLASS_SORCERER)) ? 2 : 4))),
3695 ((plev < 30) ? 2 : 3));
3697 case 8: /* Enslave Demon */
3698 if (!get_aim_dir(&dir)) return FALSE;
3700 (void)control_one_demon(dir, plev);
3702 case 9: /* Vision */
3703 map_area(DETECT_RAD_MAP);
3705 case 10: /* Resist Nether */
3706 (void)set_tim_res_nether(randint1(20) + 20, FALSE);
3708 case 11: /* Plasma Bolt */
3709 if (!get_aim_dir(&dir)) return FALSE;
3711 fire_bolt_or_beam(beam, GF_PLASMA, dir,
3712 damroll(11 + ((plev - 5) / 4), 8));
3714 case 12: /* Fire Ball */
3715 if (!get_aim_dir(&dir)) return FALSE;
3717 fire_ball(GF_FIRE, dir, plev + 55, 2);
3719 case 13: /* Fire Branding */
3722 case 14: /* Nether Ball */
3723 if (!get_aim_dir(&dir)) return FALSE;
3725 fire_ball(GF_NETHER, dir, plev*3/2 + 100, plev / 20+2);
3727 case 15: /* Summon monster, demon */
3729 bool pet = !one_in_(3);
3730 bool group = !(pet && (plev < 50));
3732 if (summon_specific((pet ? -1 : 0), py, px, plev*2/3+randint1(plev/2), SUMMON_DEMON, group, FALSE, pet, FALSE, (bool)(!pet)))
3735 msg_print("ⲫ¤Î°½¤¬½¼Ëþ¤·¤¿¡£");
3737 msg_print("The area fills with a stench of sulphur and brimstone.");
3743 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
3745 msg_print("'What is thy bidding... Master?'");
3750 msg_print("¡ÖÈܤ·¤¼Ô¤è¡¢²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª ¤ªÁ°¤Îº²¤òĺ¤¯¤¾¡ª¡×");
3752 msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'");
3759 msg_print("°Ëâ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3761 msg_print("No Greater Demon arrive.");
3766 case 16: /* Telepathy */
3767 (void)set_tim_esp(randint1(30) + 25, FALSE);
3769 case 17: /* Demoncloak */
3771 int dur=randint1(20) + 20;
3773 set_oppose_fire(dur, FALSE);
3774 set_oppose_cold(dur, FALSE);
3775 set_tim_sh_fire(dur, FALSE);
3779 case 18: /* Rain of Lava */
3780 fire_ball(GF_FIRE, 0, (55 + plev)*2, 3);
3781 fire_ball_hide(GF_LAVA_FLOW, 0, 2+randint1(2), 3);
3783 case 19: /* Plasma ball */
3784 if (!get_aim_dir(&dir)) return FALSE;
3786 fire_ball(GF_PLASMA, dir, plev*3/2 + 80, 2 + plev/40);
3788 case 20: /* Mimic demon */
3789 (void)set_mimic(10+plev/2 + randint1(10+plev/2), MIMIC_DEMON, FALSE);
3791 case 21: /* Nether Wave == Dispel Good */
3792 (void)dispel_monsters(randint1(plev * 2));
3793 (void)dispel_good(randint1(plev * 2));
3796 if (!get_aim_dir(&dir)) return FALSE;
3797 fire_ball(GF_NEXUS, dir, 100 + plev*2, 4);
3799 case 23: /* Hand Doom */
3800 if (!get_aim_dir(&dir)) return FALSE;
3802 else msg_print("<ÇËÌǤμê>¤òÊü¤Ã¤¿¡ª");
3804 else msg_print("You invokes the Hand of Doom!");
3807 fire_ball_hide(GF_HAND_DOOM, dir, plev * 2, 0);
3809 case 24: /* Heroism */
3810 (void)set_hero(randint1(25) + 25, FALSE);
3811 (void)hp_player(10);
3812 (void)set_afraid(0);
3814 case 25: /* Tim resist time */
3815 (void)set_tim_res_time(randint1(20)+20, FALSE);
3817 case 26: /* Circle of Madness */
3818 fire_ball(GF_CHAOS, 0, 50+plev, 3+plev/20);
3819 fire_ball(GF_CONFUSION, 0, 50+plev, 3+plev/20);
3820 fire_ball(GF_CHARM, 0, 20+plev, 3+plev/20);
3822 case 27: /* True Discharge Minion */
3825 case 28: /* Summon Greater Demon */
3832 item_tester_hook = item_tester_offer;
3834 q = "¤É¤Î»àÂΤòÊû¤²¤Þ¤¹¤«? ";
3835 s = "Êû¤²¤é¤ì¤ë»àÂΤò»ý¤Ã¤Æ¤¤¤Ê¤¤¡£";
3837 q = "Sacrifice which corpse? ";
3838 s = "You have nothing to scrifice.";
3840 if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return FALSE;
3842 /* Get the item (in the pack) */
3845 o_ptr = &inventory[item];
3848 /* Get the item (on the floor) */
3851 o_ptr = &o_list[0 - item];
3854 summon_lev = p_ptr->lev * 2 / 3 + r_info[o_ptr->pval].level;
3855 if (summon_specific(-1, py, px, summon_lev, SUMMON_HI_DEMON, TRUE, FALSE, TRUE, FALSE, FALSE))
3858 msg_print("ⲫ¤Î°½¤¬½¼Ëþ¤·¤¿¡£");
3860 msg_print("The area fills with a stench of sulphur and brimstone.");
3865 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
3867 msg_print("'What is thy bidding... Master?'");
3870 /* Decrease the item (from the pack) */
3873 inven_item_increase(item, -1);
3874 inven_item_describe(item);
3875 inven_item_optimize(item);
3878 /* Decrease the item (from the floor) */
3881 floor_item_increase(0 - item, -1);
3882 floor_item_describe(0 - item);
3883 floor_item_optimize(0 - item);
3889 msg_print("°Ëâ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3891 msg_print("No Greater Demon arrive.");
3896 case 29: /* Nether Storm */
3897 if (!get_aim_dir(&dir)) return FALSE;
3899 fire_ball(GF_NETHER, dir, plev*15, plev / 5);
3901 case 30: /* Blood curse */
3903 if (!get_aim_dir(&dir)) return FALSE;
3905 fire_ball_hide(GF_BLOOD_CURSE, dir, 600, 0);
3907 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "·ì¤Î¼ö¤¤", -1);
3909 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "Blood curse", -1);
3913 case 31: /* Mimic Demon lord */
3914 (void)set_mimic(15 + randint1(15), MIMIC_DEMON_LORD, FALSE);
3917 msg_format("You cast an unknown Daemon spell: %d.", spell);
3925 static bool cast_haja_spell(int spell) /* nanka */
3929 int plev = p_ptr->lev;
3931 if (p_ptr->pclass == CLASS_MAGE) beam = plev;
3932 else if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) beam = plev + 10;
3933 else beam = plev / 2;
3938 if (!get_aim_dir(&dir)) return FALSE;
3940 fire_bolt_or_beam(beam - 10, GF_ELEC, dir,
3941 damroll(3 + ((plev - 1) / 5), 4));
3944 (void)detect_monsters_evil(DETECT_RAD_DEFAULT);
3947 (void)set_blessed(randint1(12) + 12, FALSE);
3949 case 3: /* Remove Fear */
3950 (void)set_afraid(0);
3953 if (!get_aim_dir(&dir)) return FALSE;
3955 (void)fear_monster(dir, plev);
3958 (void)sleep_monsters_touch();
3961 if (!get_aim_dir(&dir)) return FALSE;
3962 fire_blast(GF_LITE, dir, 3+((plev-1)/5), 3, 10, 1);
3965 teleport_player(plev*3);
3969 (void)set_poisoned(0);
3971 case 9: /* Exorcism */
3972 (void)dispel_undead(randint1(plev));
3973 (void)dispel_demons(randint1(plev));
3974 (void)turn_evil(plev);
3976 case 10: /* Holy Orb */
3977 if (!get_aim_dir(&dir)) return FALSE;
3979 fire_ball(GF_HOLY_FIRE, dir,
3980 (damroll(3, 6) + plev +
3981 (plev / ((p_ptr->pclass == CLASS_PRIEST ||
3982 p_ptr->pclass == CLASS_HIGH_MAGE ||
3983 p_ptr->pclass == CLASS_SORCERER) ? 2 : 4))),
3984 ((plev < 30) ? 2 : 3));
3987 case 11: /* Sense Unseen */
3988 (void)set_tim_invis(randint1(24) + 24, FALSE);
3990 case 12: /* Protection from Evil */
3991 (void)set_protevil(randint1(25) + 3 * p_ptr->lev, FALSE);
3993 case 13: /* Dispel Undead + Demons */
3994 (void)dispel_undead(randint1(plev * 3));
3995 (void)dispel_demons(randint1(plev * 3));
3998 if (!get_aim_dir(&dir)) return FALSE;
3999 (void)fire_ball(GF_ELEC, dir, plev*2+99, plev/5);
4001 case 15: /* Holy Word */
4002 (void)dispel_evil(randint1(plev * 6));
4003 (void)hp_player(150);
4004 (void)set_afraid(0);
4005 (void)set_poisoned(0);
4010 if (!get_aim_dir(&dir)) return FALSE;
4012 (void)destroy_door(dir);
4014 case 17: /* Remove Curse */
4018 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
4020 msg_print("You feel as if someone is watching over you.");
4025 set_tim_sh_holy(randint1(20)+20, FALSE);
4028 (void)set_fast(randint1(20 + plev) + plev, FALSE);
4030 case 20: /* Dispel Evil */
4031 (void)dispel_evil(randint1(plev * 4));
4036 case 22: /* Star Burst */
4037 if (!get_aim_dir(&dir)) return FALSE;
4039 fire_ball(GF_LITE, dir, 100+plev*2, 4);
4041 case 23: /* Summon monster, angel */
4043 bool pet = !one_in_(3);
4044 bool group = !(pet && (plev < 50));
4046 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, SUMMON_ANGEL, group, FALSE, pet, FALSE, (bool)(!pet)))
4050 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
4052 msg_print("'What is thy bidding... Master?'");
4057 msg_print("¡ÖÈܤ·¤¼Ô¤è¡¢²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª ¤ªÁ°¤Îº²¤òĺ¤¯¤¾¡ª¡×"); /* nanka */
4059 msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'");
4065 case 24: /* Heroism */
4066 (void)set_hero(randint1(25) + 25, FALSE);
4067 (void)hp_player(10);
4068 (void)set_afraid(0);
4070 case 25: /* Remove All Curse */
4071 if (remove_all_curse())
4074 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
4076 msg_print("You feel as if someone is watching over you.");
4080 case 26: /* Banishment */
4081 if (banish_evil(100))
4084 msg_print("¿À¤Î¸æÎϤ¬¼Ù°¤òÂǤÁʧ¤Ã¤¿¡ª");
4086 msg_print("The power of your god banishes evil!");
4091 case 27: /* Word of Destruction */
4092 destroy_area(py, px, 13+randint0(5), TRUE);
4094 case 28: /* Eye for an Eye */
4095 set_tim_eyeeye(randint1(4)+4, FALSE);
4098 if (!get_aim_dir(&dir)) return FALSE;
4100 fire_ball(GF_DISINTEGRATE, dir, 100, 4);
4101 fire_ball(GF_FORCE, dir, 150, 4);
4102 fire_ball(GF_ELEC, dir, 200, 4);
4104 case 30: /* Divine Intervention */
4105 project(0, 1, py, px, plev*11, GF_HOLY_FIRE, PROJECT_KILL, -1);
4106 dispel_monsters(plev * 4);
4108 stun_monsters(plev * 4);
4109 confuse_monsters(plev * 4);
4110 turn_monsters(plev * 4);
4111 stasis_monsters(plev * 4);
4112 (void)hp_player(150);
4118 for (i = 0; i < 12; i++)
4125 scatter(&my, &mx, py, px, 4, 0);
4127 /* Require empty grids */
4128 if (cave_empty_bold2(my, mx)) break;
4130 if (attempt < 0) continue;
4131 summon_specific(-1, my, mx, plev, SUMMON_KNIGHTS, TRUE, FALSE, TRUE, FALSE, FALSE);
4133 (void)set_hero(randint1(25) + 25, FALSE);
4134 (void)set_blessed(randint1(25) + 25, FALSE);
4135 (void)set_fast(randint1(20 + plev) + plev, FALSE);
4136 (void)set_afraid(0);
4141 msg_format("¤¢¤Ê¤¿¤ÏÉÔÌÀ¤ÊÇ˼٤μöʸ %d ¤ò¾§¤¨¤¿¡£", spell);
4143 msg_format("You cast an unknown nanka spell: %d.", spell);
4154 void stop_singing(void)
4156 if (p_ptr->pclass != CLASS_BARD) return;
4158 if (p_ptr->magic_num1[1])
4160 p_ptr->magic_num1[1] = 0;
4163 if (!p_ptr->magic_num1[0]) return;
4165 set_action(ACTION_NONE);
4167 switch(p_ptr->magic_num1[0])
4170 if (!p_ptr->blessed)
4172 msg_print("¹â·é¤Êµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
4174 msg_print("The prayer has expired.");
4181 msg_print("¥Ò¡¼¥í¡¼¤Îµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
4183 msg_print("The heroism wears off.");
4185 /* Recalculate hitpoints */
4186 p_ptr->update |= (PU_HP);
4190 if (!p_ptr->tim_esp)
4193 msg_print("°Õ¼±¤Ï¸µ¤ËÌá¤Ã¤¿¡£");
4195 msg_print("Your consciousness contracts again.");
4197 /* Update the monsters */
4198 p_ptr->update |= (PU_MONSTERS);
4202 if (!p_ptr->tim_stealth)
4204 msg_print("»Ñ¤¬¤Ï¤Ã¤¤ê¤È¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¡£");
4206 msg_print("You are no longer hided.");
4210 if (!p_ptr->oppose_acid)
4212 msg_print("»À¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
4214 msg_print("You feel less resistant to acid.");
4216 if (!p_ptr->oppose_elec)
4218 msg_print("ÅÅ·â¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
4220 msg_print("You feel less resistant to elec.");
4222 if (!p_ptr->oppose_fire)
4224 msg_print("²Ð¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
4226 msg_print("You feel less resistant to fire.");
4228 if (!p_ptr->oppose_cold)
4230 msg_print("Î䵤¤Ø¤ÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
4232 msg_print("You feel less resistant to cold.");
4234 if (!p_ptr->oppose_pois)
4236 msg_print("ÆǤؤÎÂÑÀ¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
4238 msg_print("You feel less resistant to pois.");
4244 msg_print("Æ°¤¤ÎÁÇÁᤵ¤¬¤Ê¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£");
4246 msg_print("You feel yourself slow down.");
4253 msg_print("¥Ò¡¼¥í¡¼¤Îµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
4255 msg_print("The heroism wears off.");
4257 /* Recalculate hitpoints */
4258 p_ptr->update |= (PU_HP);
4263 msg_print("Æ°¤¤ÎÁÇÁᤵ¤¬¤Ê¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£");
4265 msg_print("You feel yourself slow down.");
4272 msg_print("̵Ũ¤Ç¤Ï¤Ê¤¯¤Ê¤Ã¤¿¡£");
4274 msg_print("The invulnerability wears off.");
4277 p_ptr->redraw |= (PR_MAP);
4279 /* Update monsters */
4280 p_ptr->update |= (PU_MONSTERS);
4283 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
4287 p_ptr->magic_num1[0] = MUSIC_NONE;
4288 p_ptr->magic_num2[0] = 0;
4290 /* Recalculate bonuses */
4291 p_ptr->update |= (PU_BONUS | PU_HP);
4293 /* Redraw status bar */
4294 p_ptr->redraw |= (PR_STATUS);
4298 static bool cast_music_spell(int spell)
4300 int plev = p_ptr->lev;
4303 if(p_ptr->magic_num1[0])
4308 p_ptr->magic_num2[0] = spell;
4312 case 0: /* Song of Holding ÃÙÆߤβΠ*/
4314 msg_print("¤æ¤Ã¤¯¤ê¤È¤·¤¿¥á¥í¥Ç¥£¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
4316 msg_print("You start humming a slow, steady melody...");
4318 p_ptr->magic_num1[0] = MUSIC_SLOW;
4320 case 1: /* Song of Blessing ½ËÊ¡¤Î²Î */
4322 msg_print("¸·¤«¤Ê¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4324 msg_print("The holy power of the Music of the Ainur enters you...");
4326 p_ptr->magic_num1[0] = MUSIC_BLESS;
4329 case 2: /* Wrecking Note Êø²õ¤Î²»¿§ */
4330 if (!get_aim_dir(&dir)) return FALSE;
4331 fire_bolt(GF_SOUND, dir,
4332 damroll(4 + ((plev - 1) / 5), 4));
4334 case 3: /* Stun Pattern Û¯Û°¤ÎÀûΧ */
4336 msg_print("âÁÏǤµ¤»¤ë¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4338 msg_print("You weave a pattern of sounds to bewilder and daze...");
4340 p_ptr->magic_num1[0] = MUSIC_STUN;
4342 case 4: /* Flow of life À¸Ì¿¤Îή¤ì */
4344 msg_print("²Î¤òÄ̤·¤ÆÂΤ˳赤¤¬Ìá¤Ã¤Æ¤¤¿¡¥¡¥¡¥");
4346 msg_print("Life flows through you as you sing a song of healing...");
4348 p_ptr->magic_num1[0] = MUSIC_L_LIFE;
4350 case 5: /* Song of the Sun ÂÀÍۤβΠ*/
4352 msg_print("¸÷¤êµ±¤¯²Î¤¬ÊÕ¤ê¤ò¾È¤é¤·¤¿¡£");
4354 msg_print("Your uplifting song brings brightness to dark places...");
4356 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
4358 case 6: /* Song of fear ¶²ÉݤβΠ*/
4360 msg_print("¤ª¤É¤í¤ª¤É¤í¤·¤¤¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4362 msg_print("You start weaving a fearful pattern...");
4364 p_ptr->magic_num1[0] = MUSIC_FEAR;
4366 case 7: /* Heroic Ballad À襤¤Î²Î */
4368 msg_print("·ã¤·¤¤À襤¤Î²Î¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
4370 msg_print("You start singing a song of intense fighting...");
4372 p_ptr->magic_num1[0] = MUSIC_HERO;
4374 case 8: /* Clairaudience ÎîŪÃγР*/
4376 msg_print("ÀŤ«¤Ê²»³Ú¤¬´¶³Ð¤ò¸¦¤®À¡¤Þ¤µ¤»¤¿¡¥¡¥¡¥");
4378 msg_print("Your quiet music sharpens your sense of hearing...");
4380 p_ptr->magic_num1[0] = MUSIC_DETECT;
4382 case 9: /* º²¤Î²Î */
4384 msg_print("Àº¿À¤òDZ¤¸¶Ê¤²¤ë²Î¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
4386 msg_print("You start singing a song of soul in pain...");
4388 p_ptr->magic_num1[0] = MUSIC_PSI;
4390 case 10: /* Song of Lore Ãμ±¤Î²Î */
4392 msg_print("¤³¤ÎÀ¤³¦¤ÎÃ챤¬Î®¤ì¹þ¤ó¤Ç¤¤¿¡¥¡¥¡¥");
4394 msg_print("You recall the rich lore of the world...");
4396 p_ptr->magic_num1[0] = MUSIC_ID;
4398 case 11: /* hidding song ±£ÆۤβΠ*/
4400 msg_print("¤¢¤Ê¤¿¤Î»Ñ¤¬·Ê¿§¤Ë¤È¤±¤³¤ó¤Ç¤¤¤Ã¤¿¡¥¡¥¡¥");
4402 msg_print("Your song carries you beyond the sight of mortal eyes...");
4404 p_ptr->magic_num1[0] = MUSIC_STEALTH;
4406 case 12: /* Illusion Pattern ¸¸±Æ¤ÎÀûΧ */
4408 msg_print("ÊÕ¤ê°ìÌ̤˸¸±Æ¤¬¸½¤ì¤¿¡¥¡¥¡¥");
4410 msg_print("You weave a pattern of sounds to beguile and confuse...");
4412 p_ptr->magic_num1[0] = MUSIC_CONF;
4414 case 13: /* Doomcall (vibration song) ÇËÌǤζ«¤Ó */
4416 msg_print("¹ì²»¤¬¶Á¤¤¤¿¡¥¡¥¡¥");
4418 msg_print("The fury of the Downfall of Numenor lashes out...");
4420 p_ptr->magic_num1[0] = MUSIC_SOUND;
4422 case 14: /* Firiel's Song (song of the Undeads) ¥Õ¥£¥ê¥¨¥ë¤Î²Î */
4424 msg_print("À¸Ì¿¤ÈÉü³è¤Î¥Æ¡¼¥Þ¤òÁդǻϤ᤿¡¥¡¥¡¥");
4426 msg_print("The themes of life and revival are woven into your song...");
4428 animate_dead(0, py, px);
4430 case 15: /* Fellowship Chant (charming song) ι¤ÎÃç´Ö */
4432 msg_print("°Â¤é¤«¤Ê¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4434 msg_print("You weave a slow, soothing melody of imploration...");
4436 p_ptr->magic_num1[0] = MUSIC_CHARM;
4438 case 16: /* (wall breaking song) ʬ²ò²»ÇÈ */
4440 msg_print("Ê´ºÕ¤¹¤ë¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4442 msg_print("You weave a violent pattern of sounds to break wall.");
4444 p_ptr->magic_num1[0] = MUSIC_WALL;
4445 project(0, 0, py, px,
4446 0, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM | PROJECT_HIDE, -1);
4448 case 17: /* Finrod's Resistance (song of resistance) ¸µÁÇÂÑÀ */
4450 msg_print("¸µÁǤÎÎϤËÂФ¹¤ëǦÂѤβΤò²Î¤Ã¤¿¡£");
4452 msg_print("You sing a song of perseverance against powers...");
4454 p_ptr->magic_num1[0] = MUSIC_RESIST;
4456 case 18: /* Hobbit Melodies (song of time) ¥Û¥Ó¥Ã¥È¤Î¥á¥í¥Ç¥£ */
4458 msg_print("·Ú²÷¤Ê²Î¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
4460 msg_print("You start singing joyful pop song...");
4462 p_ptr->magic_num1[0] = MUSIC_SPEED;
4464 case 19: /* World Contortion ÏĤó¤ÀÀ¤³¦ */
4466 msg_print("²Î¤¬¶õ´Ö¤òÏĤ᤿¡¥¡¥¡¥");
4468 msg_print("Reality whirls wildly as you sing a dizzying melody...");
4470 project(0, plev/15 + 1, py, px, plev * 3 + 1, GF_AWAY_ALL , PROJECT_KILL, -1);
4472 case 20: /* Â໶¤Î²Î */
4474 msg_print("ÂѤ¨¤é¤ì¤Ê¤¤ÉÔ¶¨Ï²»¤¬Å¨¤òÀÕ¤áΩ¤Æ¤¿¡¥¡¥¡¥");
4476 msg_print("You cry out in an ear-wracking voice...");
4478 p_ptr->magic_num1[0] = MUSIC_DISPEL;
4480 case 21: /* The Voice of Saruman ¥µ¥ë¥Þ¥ó¤Î´Å¸À */
4482 msg_print("Í¥¤·¤¯¡¢Ì¥ÎÏŪ¤Ê²Î¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
4484 msg_print("You start humming a gentle and attractive song...");
4486 p_ptr->magic_num1[0] = MUSIC_SARUMAN;
4488 case 22: /* Song of Tempest (song of death) Íò¤Î²»¿§ */
4489 if (!get_aim_dir(&dir)) return FALSE;
4490 fire_beam(GF_SOUND, dir,
4491 damroll(15 + ((plev - 1) / 2), 10));
4493 case 23: /* (song of disruption) ¤â¤¦°ì¤Ä¤ÎÀ¤³¦ */
4495 msg_print("¼þ°Ï¤¬ÊѲ½¤·»Ï¤á¤¿¡¥¡¥¡¥");
4497 msg_print("You sing of the primeval shaping of Middle-earth...");
4501 case 24: /* Wrecking Pattern (destruction shriek) Ç˲õ¤ÎÀûΧ */
4503 msg_print("Ç˲õŪ¤Ê²Î¤¬¶Á¤¤ï¤¿¤Ã¤¿¡¥¡¥¡¥");
4505 msg_print("You weave a pattern of sounds to contort and shatter...");
4507 p_ptr->magic_num1[0] = MUSIC_QUAKE;
4509 case 25: /* ÄäÂڤβΠ*/
4511 msg_print("¤æ¤Ã¤¯¤ê¤È¤·¤¿¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
4513 msg_print("You weave a very slow pattern which is almost likely to stop...");
4515 p_ptr->magic_num1[0] = MUSIC_STASIS;
4517 case 26: /* ¼é¤ê¤Î²Î */
4519 msg_print("²Î¤¬¿ÀÀ»¤Ê¾ì¤òºî¤ê½Ð¤·¤¿¡¥¡¥¡¥");
4521 msg_print("The holy power of the Music is creating sacred field...");
4525 case 27: /* ±Ñͺ¤Î»í */
4527 msg_print("±Ñͺ¤Î²Î¤ò¸ý¤º¤µ¤ó¤À¡¥¡¥¡¥");
4529 msg_print("You chant a powerful, heroic call to arms...");
4531 p_ptr->magic_num1[0] = MUSIC_SHERO;
4532 (void)hp_player(10);
4533 (void)set_afraid(0);
4535 case 28: /* ¥ä¥ô¥¡¥ó¥Ê¤Î½õ¤± */
4537 msg_print("²Î¤òÄ̤·¤ÆÂΤ˳赤¤¬Ìá¤Ã¤Æ¤¤¿¡¥¡¥¡¥");
4539 msg_print("Life flows through you as you sing the song...");
4541 p_ptr->magic_num1[0] = MUSIC_H_LIFE;
4543 case 29: /* ºÆÀ¸¤Î²Î */
4545 msg_print("°Å¹õ¤ÎÃæ¤Ë¸÷¤ÈÈþ¤ò¤Õ¤ê¤Þ¤¤¤¿¡£ÂΤ¬¸µ¤Î³èÎϤò¼è¤êÌᤷ¤¿¡£");
4547 msg_print("You strewed light and beauty in the dark as you sing. You feel refreshed.");
4549 (void)do_res_stat(A_STR);
4550 (void)do_res_stat(A_INT);
4551 (void)do_res_stat(A_WIS);
4552 (void)do_res_stat(A_DEX);
4553 (void)do_res_stat(A_CON);
4554 (void)do_res_stat(A_CHR);
4555 (void)restore_level();
4557 case 30: /* shriek of death ¥µ¥¦¥í¥ó¤ÎËâ½Ñ */
4558 if (!get_aim_dir(&dir)) return FALSE;
4559 fire_ball(GF_SOUND, dir, damroll(50 + plev, 10), 0);
4561 case 31: /* song of liberty ¥Õ¥£¥ó¥´¥ë¥Õ¥£¥ó¤ÎÄ©Àï */
4563 msg_print("¥Õ¥£¥ó¥´¥ë¥Õ¥£¥ó¤Î̽²¦¤Ø¤ÎÄ©Àï¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
4565 msg_print("You recall the valor of Fingolfin's challenge to the Dark Lord...");
4567 p_ptr->magic_num1[0] = MUSIC_INVULN;
4570 p_ptr->redraw |= (PR_MAP);
4572 /* Update monsters */
4573 p_ptr->update |= (PU_MONSTERS);
4576 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
4580 msg_format("̤ÃΤβÎ(%d)¤ò²Î¤Ã¤¿¡£", spell);
4582 msg_format("You sing an unknown song: %d.", spell);
4587 if (p_ptr->magic_num1[0]) set_action(ACTION_SING);
4589 /* Recalculate bonuses */
4590 p_ptr->update |= (PU_BONUS | PU_HP);
4592 /* Redraw status bar */
4593 p_ptr->redraw |= (PR_STATUS);
4601 void do_cmd_cast(void)
4603 int item, sval, spell, realm;
4618 /* Require spell ability */
4619 if (!p_ptr->realm1 && (p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE))
4622 msg_print("¼öʸ¤ò¾§¤¨¤é¤ì¤Ê¤¤¡ª");
4624 msg_print("You cannot cast spells!");
4631 if (p_ptr->blind || no_lite())
4634 msg_print("Ìܤ¬¸«¤¨¤Ê¤¤¡ª");
4636 msg_print("You cannot see!");
4638 if (p_ptr->pclass == CLASS_FORCETRAINER)
4645 /* Not when confused */
4646 if (p_ptr->confused)
4649 msg_print("º®Í𤷤Ƥ¤¤Æ¾§¤¨¤é¤ì¤Ê¤¤¡ª");
4651 msg_print("You are too confused!");
4657 prayer = spell_categoly_name(mp_ptr->spell_book);
4659 /* Restrict choices to spell books */
4660 item_tester_tval = mp_ptr->spell_book;
4664 q = "¤É¤Î¼öʸ½ñ¤ò»È¤¤¤Þ¤¹¤«? ";
4666 q = "Use which book? ";
4670 s = "¼öʸ½ñ¤¬¤Ê¤¤¡ª";
4672 s = "You have no spell books!";
4675 select_spellbook=TRUE;
4676 if (p_ptr->pclass == CLASS_FORCETRAINER)
4677 select_the_force = TRUE;
4678 if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))){
4679 select_spellbook = FALSE;
4680 select_the_force = FALSE;
4683 select_spellbook = FALSE;
4684 select_the_force = FALSE;
4686 if (item == 1111) { /* the_force */
4690 /* Get the item (in the pack) */
4693 o_ptr = &inventory[item];
4696 /* Get the item (on the floor) */
4699 o_ptr = &o_list[0 - item];
4702 /* Access the item's sval */
4705 if ((p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE) && (o_ptr->tval == REALM2_BOOK)) increment = 32;
4708 /* Track the object kind */
4709 object_kind_track(o_ptr->k_idx);
4711 /* Hack -- Handle stuff */
4714 if ((p_ptr->pclass == CLASS_SORCERER) || (p_ptr->pclass == CLASS_RED_MAGE))
4715 realm = o_ptr->tval - TV_LIFE_BOOK + 1;
4716 else if (increment) realm = p_ptr->realm2;
4717 else realm = p_ptr->realm1;
4719 /* Ask for a spell */
4721 if (!get_spell(&spell,
4722 ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "±Ó¾§¤¹¤ë" : (mp_ptr->spell_book == TV_MUSIC_BOOK) ? "²Î¤¦" : "¾§¤¨¤ë"),
4725 if (spell == -2) msg_format("¤½¤ÎËܤˤÏÃΤäƤ¤¤ë%s¤¬¤Ê¤¤¡£", prayer);
4729 if (!get_spell(&spell, ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "recite" : "cast"),
4733 msg_format("You don't know any %ss in that book.", prayer);
4739 use_realm = tval2realm(o_ptr->tval);
4741 if (!is_magic(use_realm))
4743 s_ptr = &technic_info[use_realm - MIN_TECHNIC - 1][spell];
4747 s_ptr = &mp_ptr->info[realm - 1][spell];
4750 if (p_ptr->pclass == CLASS_SORCERER)
4751 shouhimana = s_ptr->smana*2200 + 2399;
4752 else if (p_ptr->pclass == CLASS_RED_MAGE)
4753 shouhimana = s_ptr->smana*2600 + 2399;
4755 shouhimana = (s_ptr->smana*(3800-spell_exp[(increment ? spell+32 : spell)])+2399);
4758 else shouhimana *= 4;
4760 if(shouhimana < 1) shouhimana = 1;
4762 /* Verify "dangerous" spells */
4763 if (shouhimana > p_ptr->csp)
4767 msg_format("¤½¤Î%s¤ò%s¤Î¤Ë½½Ê¬¤Ê¥Þ¥¸¥Ã¥¯¥Ý¥¤¥ó¥È¤¬¤Ê¤¤¡£",prayer,
4768 ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "±Ó¾§¤¹¤ë" : (mp_ptr->spell_book == TV_LIFE_BOOK) ? "²Î¤¦" : "¾§¤¨¤ë"));
4770 msg_format("You do not have enough mana to %s this %s.",
4771 ((mp_ptr->spell_book == TV_LIFE_BOOK) ? "recite" : "cast"),
4776 if (!over_exert) return;
4780 if (!get_check_strict("¤½¤ì¤Ç¤âÄ©À路¤Þ¤¹¤«? ", CHECK_OKAY_CANCEL)) return;
4782 if (!get_check_strict("Attempt it anyway? ", CHECK_OKAY_CANCEL)) return;
4788 /* Spell failure chance */
4789 chance = spell_chance(spell, use_realm - 1);
4792 if (randint0(100) < chance)
4794 if (flush_failure) flush();
4797 msg_format("%s¤ò¤¦¤Þ¤¯¾§¤¨¤é¤ì¤Ê¤«¤Ã¤¿¡ª", prayer);
4799 msg_format("You failed to get the %s off!", prayer);
4804 if (realm == REALM_LIFE) /* nanka */
4806 if (randint1(100) < chance)
4807 chg_virtue(V_FAITH, -1);
4809 else if (realm == REALM_DEATH)
4811 if (randint1(100) < chance)
4812 chg_virtue(V_UNLIFE, -1);
4814 else if (realm == REALM_NATURE)
4816 if (randint1(100) < chance)
4817 chg_virtue(V_NATURE, -1);
4819 else if (realm == REALM_DAEMON)
4821 if (randint1(100) < chance)
4822 chg_virtue(V_JUSTICE, 1);
4824 if (realm == REALM_HAJA) /* nanka */
4826 if (randint1(100) < chance)
4827 chg_virtue(V_FAITH, -1);
4829 else if (randint1(100) < chance)
4831 chg_virtue(V_KNOWLEDGE, -1);
4834 if (realm == REALM_TRUMP)
4836 cast_trump_spell(spell, FALSE);
4838 else if ((o_ptr->tval == TV_CHAOS_BOOK) && (randint1(100) < spell))
4841 msg_print("¥«¥ª¥¹Åª¤Ê¸ú²Ì¤òȯÀ¸¤·¤¿¡ª");
4843 msg_print("You produce a chaotic effect!");
4848 else if ((o_ptr->tval == TV_DEATH_BOOK) && (randint1(100) < spell))
4850 if ((sval == 3) && one_in_(2))
4852 sanity_blast(0, TRUE);
4857 msg_print("Äˤ¤¡ª");
4859 msg_print("It hurts!");
4863 take_hit(DAMAGE_LOSELIFE, damroll(o_ptr->sval + 1, 6), "°Å¹õËâË¡¤ÎµÕή", -1);
4865 take_hit(DAMAGE_LOSELIFE, damroll(o_ptr->sval + 1, 6), "a miscast Death spell", -1);
4868 if ((spell > 15) && one_in_(6) && !p_ptr->hold_life)
4869 lose_exp(spell * 250);
4872 else if ((o_ptr->tval == TV_MUSIC_BOOK) && (randint1(200) < spell))
4875 msg_print("¤¤¤ä¤Ê²»¤¬¶Á¤¤¤¿");
4877 msg_print("An infernal sound echoed.");
4880 aggravate_monsters(0);
4882 if (randint1(100) >= chance)
4883 chg_virtue(V_CHANCE,-1);
4892 case REALM_LIFE: /* * LIFE * */
4893 cast = cast_life_spell(spell);
4895 case REALM_SORCERY: /* * SORCERY * */
4896 cast = cast_sorcery_spell(spell);
4898 case REALM_NATURE: /* * NATURE * */
4899 cast = cast_nature_spell(spell);
4901 case REALM_CHAOS: /* * CHAOS * */
4902 cast = cast_chaos_spell(spell);
4904 case REALM_DEATH: /* * DEATH * */
4905 cast = cast_death_spell(spell);
4907 case REALM_TRUMP: /* TRUMP */
4908 cast = cast_trump_spell(spell, TRUE);
4910 case REALM_ARCANE: /* ARCANE */
4911 cast = cast_arcane_spell(spell);
4913 case REALM_ENCHANT: /* ENCHANT */
4914 cast = cast_enchant_spell(spell);
4916 case REALM_DAEMON: /* DAEMON */
4917 cast = cast_daemon_spell(spell);
4919 case REALM_HAJA: /* HAJA */
4920 cast = cast_haja_spell(spell);
4922 case REALM_MUSIC: /* MUSIC */
4923 cast = cast_music_spell(spell);
4927 msg_format("You cast a spell from an unknown realm: realm %d, spell %d.", realm, spell);
4931 /* Canceled spells cost neither a turn nor mana */
4934 if (randint1(100) < chance)
4935 chg_virtue(V_CHANCE,1);
4937 /* A spell was cast */
4939 (spell_worked2 & (1L << spell)) :
4940 (spell_worked1 & (1L << spell)))
4941 && (p_ptr->pclass != CLASS_SORCERER)
4942 && (p_ptr->pclass != CLASS_RED_MAGE))
4944 int e = s_ptr->sexp;
4946 /* The spell worked */
4947 if (realm == p_ptr->realm1)
4949 spell_worked1 |= (1L << spell);
4953 spell_worked2 |= (1L << spell);
4956 /* Gain experience */
4957 gain_exp(e * s_ptr->slevel);
4959 if (realm == REALM_LIFE) /* nanka */
4961 chg_virtue(V_FAITH, 1);
4962 chg_virtue(V_COMPASSION, 1);
4963 chg_virtue(V_VITALITY, 1);
4964 chg_virtue(V_HONOUR, 1);
4966 else if (realm == REALM_DEATH)
4968 chg_virtue(V_UNLIFE, 1);
4969 chg_virtue(V_JUSTICE, -1);
4970 chg_virtue(V_FAITH, -1);
4971 chg_virtue(V_VITALITY, -1);
4973 else if (realm == REALM_DAEMON)
4975 chg_virtue(V_JUSTICE, -1);
4976 chg_virtue(V_FAITH, -1);
4977 chg_virtue(V_HONOUR, -1);
4978 chg_virtue(V_TEMPERANCE, -1);
4980 else if (realm == REALM_HAJA) /* nanka */
4982 chg_virtue(V_FAITH, 1);
4983 chg_virtue(V_COMPASSION, 1);
4984 chg_virtue(V_VITALITY, 1);
4985 chg_virtue(V_HONOUR, 1);
4987 else if (realm == REALM_NATURE)
4989 chg_virtue(V_NATURE, 1);
4990 chg_virtue(V_HARMONY, 1);
4993 chg_virtue(V_KNOWLEDGE, 1);
4995 if (realm == REALM_LIFE) /* nanka */
4997 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_FAITH, 1);
4998 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_COMPASSION, 1);
4999 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_VITALITY, 1);
5000 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_HONOUR, 1);
5002 else if (realm == REALM_DEATH)
5004 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_UNLIFE, 1);
5005 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_JUSTICE, -1);
5006 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_FAITH, -1);
5007 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_VITALITY, -1);
5009 else if (realm == REALM_DAEMON)
5011 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_JUSTICE, -1);
5012 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_FAITH, -1);
5013 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_HONOUR, -1);
5014 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_TEMPERANCE, -1);
5016 else if (realm == REALM_HAJA) /* nanka */
5018 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_FAITH, 1);
5019 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_COMPASSION, 1);
5020 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_VITALITY, 1);
5021 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_HONOUR, 1);
5023 else if (realm == REALM_NATURE)
5025 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_NATURE, 1);
5026 if (randint1(100 + p_ptr->lev) < shouhimana) chg_virtue(V_HARMONY, 1);
5028 if (mp_ptr->spell_xtra & MAGIC_GAIN_EXP)
5030 if (spell_exp[(increment ? 32 : 0)+spell] < 900)
5031 spell_exp[(increment ? 32 : 0)+spell]+=60;
5032 else if(spell_exp[(increment ? 32 : 0)+spell] < 1200)
5033 {if ((dun_level > 4) && ((dun_level + 10) > p_ptr->lev)) spell_exp[(increment ? 32 : 0)+spell]+=8;}
5034 else if(spell_exp[(increment ? 32 : 0)+spell] < 1400)
5035 {if (((dun_level + 5) > p_ptr->lev) && ((dun_level + 5) > s_ptr->slevel)) spell_exp[(increment ? 32 : 0)+spell]+=2;}
5036 else if((spell_exp[(increment ? 32 : 0)+spell] < 1600) && !increment)
5037 {if (((dun_level + 5) > p_ptr->lev) && (dun_level > s_ptr->slevel)) spell_exp[(increment ? 32 : 0)+spell]+=1;}
5044 /* Sufficient mana */
5045 if (shouhimana <= p_ptr->csp)
5048 p_ptr->csp -= shouhimana;
5051 /* Over-exert the player */
5054 int oops = shouhimana;
5058 p_ptr->csp_frac = 0;
5062 msg_print("Àº¿À¤ò½¸Ã椷¤¹¤®¤Æµ¤¤ò¼º¤Ã¤Æ¤·¤Þ¤Ã¤¿¡ª");
5064 msg_print("You faint from the effort!");
5068 /* Hack -- Bypass free action */
5069 (void)set_paralyzed(p_ptr->paralyzed + randint1(5 * oops + 1));
5071 if (realm == REALM_LIFE) /* nanka */
5072 chg_virtue(V_FAITH, -10);
5073 else if (realm == REALM_DEATH)
5074 chg_virtue(V_UNLIFE, -10);
5075 else if (realm == REALM_DAEMON)
5076 chg_virtue(V_JUSTICE, 10);
5077 else if (realm == REALM_NATURE)
5078 chg_virtue(V_NATURE, -10);
5079 else if (realm == REALM_HAJA) /* nanka */
5080 chg_virtue(V_FAITH, -10);
5082 chg_virtue(V_KNOWLEDGE, -10);
5084 /* Damage CON (possibly permanently) */
5085 if (randint0(100) < 50)
5087 bool perm = (randint0(100) < 25);
5091 msg_print("ÂΤò°¤¯¤·¤Æ¤·¤Þ¤Ã¤¿¡ª");
5093 msg_print("You have damaged your health!");
5097 /* Reduce constitution */
5098 (void)dec_stat(A_CON, 15 + randint1(10), perm);
5103 p_ptr->redraw |= (PR_MANA);
5106 p_ptr->window |= (PW_PLAYER);
5107 p_ptr->window |= (PW_SPELL);
5112 * Pray a prayer -- Unused in Hengband
5114 void do_cmd_pray(void)
5116 msg_print("Praying is not used in Hengband. Use magic spell casting instead.");
5119 static bool ang_sort_comp_pet_dismiss(vptr u, vptr v, int a, int b)
5121 u16b *who = (u16b*)(u);
5126 monster_type *m_ptr1 = &m_list[w1];
5127 monster_type *m_ptr2 = &m_list[w2];
5128 monster_race *r_ptr1 = &r_info[m_ptr1->r_idx];
5129 monster_race *r_ptr2 = &r_info[m_ptr2->r_idx];
5131 if (w1 == p_ptr->riding) return TRUE;
5132 if (w2 == p_ptr->riding) return FALSE;
5134 if (m_ptr1->nickname && !m_ptr2->nickname) return TRUE;
5135 if (m_ptr2->nickname && !m_ptr1->nickname) return FALSE;
5137 if ((r_ptr1->flags1 & RF1_UNIQUE) && !(r_ptr2->flags1 & RF1_UNIQUE)) return TRUE;
5138 if ((r_ptr2->flags1 & RF1_UNIQUE) && !(r_ptr1->flags1 & RF1_UNIQUE)) return FALSE;
5140 if (r_ptr1->level > r_ptr2->level) return TRUE;
5141 if (r_ptr2->level > r_ptr1->level) return FALSE;
5143 if (m_ptr1->hp > m_ptr2->hp) return TRUE;
5144 if (m_ptr2->hp > m_ptr1->hp) return FALSE;
5149 int calculate_upkeep(void)
5151 s32b old_friend_align = friend_align;
5153 bool have_a_unique = FALSE;
5156 total_friend_levels = 0;
5159 for (m_idx = m_max - 1; m_idx >=1; m_idx--)
5161 monster_type *m_ptr;
5162 monster_race *r_ptr;
5164 m_ptr = &m_list[m_idx];
5165 if (!m_ptr->r_idx) continue;
5166 r_ptr = &r_info[m_ptr->r_idx];
5171 if (r_ptr->flags1 & RF1_UNIQUE)
5173 if (p_ptr->pclass == CLASS_CAVALRY)
5175 if (p_ptr->riding == m_idx)
5176 total_friend_levels += (r_ptr->level+5)*2;
5177 else if (!have_a_unique && (r_info[m_ptr->r_idx].flags7 & RF7_RIDING))
5178 total_friend_levels += (r_ptr->level+5)*7/2;
5180 total_friend_levels += (r_ptr->level+5)*10;
5181 have_a_unique = TRUE;
5184 total_friend_levels += (r_ptr->level+5)*10;
5187 total_friend_levels += r_ptr->level;
5189 /* Determine pet alignment */
5190 if (r_ptr->flags3 & RF3_GOOD)
5192 friend_align += r_ptr->level;
5194 else if (r_ptr->flags3 & RF3_EVIL)
5196 friend_align -= r_ptr->level;
5200 if (old_friend_align != friend_align) p_ptr->update |= (PU_BONUS);
5204 upkeep_factor = (total_friend_levels - (p_ptr->lev * 80 / (cp_ptr->pet_upkeep_div)));
5205 if (upkeep_factor < 0) upkeep_factor = 0;
5206 if (upkeep_factor > 1000) upkeep_factor = 1000;
5207 return upkeep_factor;
5213 void do_cmd_pet_dismiss(void)
5215 monster_type *m_ptr;
5216 bool all_pets = FALSE;
5230 /* Allocate the "who" array */
5231 C_MAKE(who, max_m_idx, u16b);
5233 /* Process the monsters (backwards) */
5234 for (pet_ctr = m_max - 1; pet_ctr >= 1; pet_ctr--)
5236 if (is_pet(&m_list[pet_ctr]))
5237 who[max_pet++] = pet_ctr;
5240 /* Select the sort method */
5241 ang_sort_comp = ang_sort_comp_pet_dismiss;
5242 ang_sort_swap = ang_sort_swap_hook;
5244 ang_sort(who, &dummy_why, max_pet);
5246 /* Process the monsters (backwards) */
5247 for (i = 0; i < max_pet; i++)
5250 char friend_name[80];
5254 /* Access the monster */
5256 m_ptr = &m_list[pet_ctr];
5258 delete_this = FALSE;
5259 kakunin = ((pet_ctr == p_ptr->riding) || (m_ptr->nickname));
5260 monster_desc(friend_name, m_ptr, 0x80);
5264 /* Hack -- health bar for this monster */
5265 health_track(pet_ctr);
5267 /* Hack -- handle stuff */
5271 sprintf(buf, "%s¤òÊü¤·¤Þ¤¹¤«¡© [Yes/No/Unnamed (%dɤ)]", friend_name, max_pet-i);
5273 sprintf(buf, "Dismiss %s? [Yes/No/Unnamed (%d remain)]", friend_name, max_pet-i);
5278 move_cursor_relative(m_ptr->fy, m_ptr->fx);
5284 if (ch == 'Y' || ch == 'y')
5291 sprintf(buf, "ËÜÅö¤Ë¤è¤í¤·¤¤¤Ç¤¹¤«¡© (%s) ", friend_name);
5293 sprintf(buf, "Are you sure? (%s) ", friend_name);
5295 if (!get_check(buf))
5296 delete_this = FALSE;
5301 if (ch == 'U' || ch == 'u')
5307 if (ch == ESCAPE || ch == 'N' || ch == 'n')
5314 if ((all_pets && !kakunin) || (!all_pets && delete_this))
5316 if (record_named_pet && m_ptr->nickname)
5320 monster_desc(m_name, m_ptr, 0x08);
5321 do_cmd_write_nikki(NIKKI_NAMED_PET, 2, m_name);
5324 if (pet_ctr == p_ptr->riding)
5327 msg_format("%s¤«¤é¹ß¤ê¤¿¡£", friend_name);
5329 msg_format("You have got off %s. ", friend_name);
5334 /* Update the monsters */
5335 p_ptr->update |= (PU_BONUS | PU_MONSTERS);
5336 p_ptr->redraw |= (PR_EXTRA);
5339 /* HACK : Add the line to message buffer */
5341 sprintf(buf, "%s ¤òÎ¥¤·¤¿¡£", friend_name);
5343 sprintf(buf, "Dismissed %s.", friend_name);
5346 p_ptr->window |= (PW_MESSAGE);
5349 delete_monster_idx(pet_ctr);
5358 C_KILL(who, max_m_idx, u16b);
5361 msg_format("%d ɤ¤Î¥Ú¥Ã¥È¤òÊü¤·¤Þ¤·¤¿¡£", Dismissed);
5363 msg_format("You have dismissed %d pet%s.", Dismissed,
5364 (Dismissed == 1 ? "" : "s"));
5366 if (Dismissed == 0 && all_pets)
5367 msg_print("'U'nnamed ¤Ï¡¢¾èÇϰʳ°¤Î̾Á°¤Î¤Ê¤¤¥Ú¥Ã¥È¤À¤±¤òÁ´¤Æ²òÊü¤·¤Þ¤¹¡£");
5369 p_ptr->update |= (PU_MON_LITE);
5372 bool rakuba(int dam, bool force)
5374 int i, y, x, oy, ox;
5375 int sn = 0, sy = 0, sx = 0;
5377 monster_type *m_ptr = &m_list[p_ptr->riding];
5378 monster_race *r_ptr = &r_info[m_ptr->r_idx];
5380 if (!p_ptr->riding) return FALSE;
5381 if (p_ptr->wild_mode) return FALSE;
5383 if (dam >= 0 || force)
5387 int level = r_ptr->level;
5388 if (p_ptr->riding_ryoute) level += 20;
5389 if ((dam/2 + r_ptr->level) > (skill_exp[GINOU_RIDING]/30+10))
5391 if((skill_exp[GINOU_RIDING] < s_info[p_ptr->pclass].s_max[GINOU_RIDING]) && s_info[p_ptr->pclass].s_max[GINOU_RIDING] > 1000)
5393 if (r_ptr->level*100 > (skill_exp[GINOU_RIDING] + 1500))
5394 skill_exp[GINOU_RIDING] += (1+(r_ptr->level - skill_exp[GINOU_RIDING]/100 - 15));
5395 else skill_exp[GINOU_RIDING]++;
5398 if (randint0(dam/2 + level*2) < (skill_exp[GINOU_RIDING]/30+10))
5400 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))
5406 /* Check around the player */
5407 for (i = 0; i < 8; i++)
5411 /* Access the location */
5412 y = py + ddy_ddd[i];
5413 x = px + ddx_ddd[i];
5415 c_ptr = &cave[y][x];
5417 /* Skip non-empty grids */
5418 if (cave_perma_grid(c_ptr)) continue;
5419 if (!cave_empty_grid2(c_ptr)) continue;
5421 if (c_ptr->m_idx) continue;
5423 /* Count "safe" grids */
5426 /* Randomize choice */
5427 if (randint0(sn) > 0) continue;
5429 /* Save the safe location */
5434 monster_desc(m_name, m_ptr, 0);
5436 msg_format("%s¤«¤é¿¶¤êÍî¤È¤µ¤ì¤½¤¦¤Ë¤Ê¤Ã¤Æ¡¢Êɤˤ֤Ĥ«¤Ã¤¿¡£",m_name);
5437 take_hit(DAMAGE_NOESCAPE, r_ptr->level+3, "Êɤؤξ×ÆÍ", -1);
5439 msg_format("You have nearly fallen from %s, but bumped into wall.",m_name);
5440 take_hit(DAMAGE_NOESCAPE, r_ptr->level+3, "bumping into wall", -1);
5451 /* Redraw the old spot */
5454 /* Redraw the new spot */
5457 /* Check for new panel */
5462 p_ptr->pet_extra_flags &= ~(PF_RYOUTE);
5463 p_ptr->riding_ryoute = p_ptr->old_riding_ryoute = FALSE;
5467 p_ptr->update |= (PU_BONUS);
5470 p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW);
5472 /* Update the monsters */
5473 p_ptr->update |= (PU_DISTANCE);
5476 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
5478 p_ptr->redraw |= (PR_EXTRA);
5480 if (p_ptr->ffall && !force)
5482 monster_desc(m_name, m_ptr, 0);
5484 msg_format("%s¤«¤éÍî¤Á¤¿¤¬¡¢¶õÃæ¤Ç¤¦¤Þ¤¯ÂÎÀª¤òΩ¤Æľ¤·¤ÆÃåÃϤ·¤¿¡£",m_name);
5486 msg_format("You are thrown from %s, but make a good landing.",m_name);
5491 take_hit(DAMAGE_NOESCAPE, r_ptr->level+3, "ÍîÇÏ", -1);
5493 take_hit(DAMAGE_NOESCAPE, r_ptr->level+3, "Falling from riding", -1);
5495 p_ptr->redraw |= (PR_UHEALTH);
5500 bool do_riding(bool force)
5502 int oy, ox, x, y, dir = 0;
5504 monster_type *m_ptr;
5506 if (!get_rep_dir2(&dir)) return FALSE;
5509 c_ptr = &cave[y][x];
5513 /* Skip non-empty grids */
5514 if (!cave_empty_bold2(y, x) || c_ptr->m_idx)
5517 msg_print("¤½¤Á¤é¤Ë¤Ï¹ß¤ê¤é¤ì¤Þ¤»¤ó¡£");
5519 msg_print("You cannot go to that direction.");
5524 p_ptr->pet_extra_flags &= ~(PF_RYOUTE);
5525 p_ptr->riding_ryoute = p_ptr->old_riding_ryoute = FALSE;
5529 if (p_ptr->confused)
5532 msg_print("º®Í𤷤Ƥ¤¤Æ¾è¤ì¤Ê¤¤¡ª");
5534 msg_print("You are too confused!");
5538 if (!(c_ptr->m_idx))
5541 msg_print("¤½¤Î¾ì½ê¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
5543 msg_print("Here is no pet.");
5549 m_ptr = &m_list[c_ptr->m_idx];
5551 if (!is_pet(m_ptr) && !force)
5554 msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤Ï¥Ú¥Ã¥È¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£");
5556 msg_print("That monster is no a pet.");
5561 if (!(r_info[m_ptr->r_idx].flags7 & RF7_RIDING))
5564 msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤Ë¤Ï¾è¤ì¤Ê¤µ¤½¤¦¤À¡£");
5566 msg_print("This monster doesn't seem suitable for riding.");
5571 if (!(p_ptr->pass_wall) && (c_ptr->feat >= FEAT_RUBBLE) && (c_ptr->feat <= FEAT_PERM_SOLID))
5574 msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤ÏÊɤÎÃæ¤Ë¤¤¤ë¡£");
5576 msg_print("This monster is in the wall.");
5581 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)))
5584 msg_print("¥Ñ¥¿¡¼¥ó¤Î¾å¤«¤é¤Ï¾è¤ì¤Þ¤»¤ó¡£");
5586 msg_print("You cannot ride from on Pattern.");
5594 msg_print("¤½¤Î¾ì½ê¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
5596 msg_print("Here is no monster.");
5601 if (r_info[m_ptr->r_idx].level > randint1((skill_exp[GINOU_RIDING]/50 + p_ptr->lev/2 +20)))
5604 msg_print("¤¦¤Þ¤¯¾è¤ì¤Ê¤«¤Ã¤¿¡£");
5606 msg_print("You failed to ride.");
5616 monster_desc(m_name, m_ptr, 0);
5619 msg_format("%s¤òµ¯¤³¤·¤¿¡£", m_name);
5621 msg_format("You have waked %s up.", m_name);
5625 p_ptr->riding = c_ptr->m_idx;
5628 /* Save the old location */
5632 /* Move the player to the safe location */
5636 /* Redraw the old spot */
5639 /* Redraw the new spot */
5642 /* Check for new panel */
5647 /* Mega-Hack -- Forget the view and lite */
5648 p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE);
5651 p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW);
5653 /* Update the monsters */
5654 p_ptr->update |= (PU_DISTANCE);
5656 /* Update the monsters */
5657 p_ptr->update |= (PU_BONUS);
5660 p_ptr->redraw |= (PR_MAP | PR_EXTRA);
5663 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
5665 p_ptr->redraw |= (PR_UHEALTH);
5671 void do_name_pet(void)
5673 monster_type *m_ptr;
5676 bool old_name = FALSE;
5677 bool old_target_pet = target_pet;
5680 if (!target_set(TARGET_KILL))
5682 target_pet = old_target_pet;
5685 target_pet = old_target_pet;
5687 if (cave[target_row][target_col].m_idx)
5689 m_ptr = &m_list[cave[target_row][target_col].m_idx];
5695 msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤Ï¥Ú¥Ã¥È¤Ç¤Ï¤Ê¤¤¡£");
5697 msg_format("This monster is not a pet.");
5701 if (r_info[m_ptr->r_idx].flags1 & RF1_UNIQUE)
5704 msg_print("¤½¤Î¥â¥ó¥¹¥¿¡¼¤Î̾Á°¤ÏÊѤ¨¤é¤ì¤Ê¤¤¡ª");
5706 msg_format("You cannot change name of this monster!");
5710 monster_desc(m_name, m_ptr, 0);
5714 msg_format("%s¤Ë̾Á°¤ò¤Ä¤±¤ë¡£", m_name);
5716 msg_format("Name %s.", m_name);
5721 /* Start with nothing */
5722 strcpy(out_val, "");
5724 /* Use old inscription */
5725 if (m_ptr->nickname)
5727 /* Start with the old inscription */
5728 strcpy(out_val, quark_str(m_ptr->nickname));
5732 /* Get a new inscription (possibly empty) */
5734 if (get_string("̾Á°: ", out_val, 15))
5736 if (get_string("Name: ", out_val, 15))
5742 /* Save the inscription */
5743 m_ptr->nickname = quark_add(out_val);
5744 if (record_named_pet)
5748 monster_desc(m_name, m_ptr, 0x08);
5749 do_cmd_write_nikki(NIKKI_NAMED_PET, 0, m_name);
5754 if (record_named_pet && old_name)
5758 monster_desc(m_name, m_ptr, 0x08);
5759 do_cmd_write_nikki(NIKKI_NAMED_PET, 1, m_name);
5761 m_ptr->nickname = 0;
5768 * Issue a pet command
5770 void do_cmd_pet(void)
5775 cptr power_desc[36];
5780 int pets = 0, pet_ctr;
5781 monster_type *m_ptr;
5788 char target_buf[160];
5792 /* Calculate pets */
5793 /* Process the monsters (backwards) */
5794 for (pet_ctr = m_max - 1; pet_ctr >= 1; pet_ctr--)
5796 /* Access the monster */
5797 m_ptr = &m_list[pet_ctr];
5799 if (is_pet(m_ptr)) pets++;
5803 power_desc[num] = "¥Ú¥Ã¥È¤òÊü¤¹";
5805 power_desc[num] = "dismiss pets";
5808 powers[num++] = PET_DISMISS;
5811 sprintf(target_buf,"¥Ú¥Ã¥È¤Î¥¿¡¼¥²¥Ã¥È¤ò»ØÄê (¸½ºß¡§%s)",
5812 (pet_t_m_idx ? r_name + r_info[m_list[pet_t_m_idx].r_idx].name : "»ØÄê¤Ê¤·"));
5814 sprintf(target_buf,"specify a targert of pet (now:%s)",
5815 (pet_t_m_idx ? r_name + r_info[m_list[pet_t_m_idx].r_idx].name : "nothing"));
5817 power_desc[num] = target_buf;
5819 powers[num++] = PET_TARGET;
5822 power_desc[num] = "¶á¤¯¤Ë¤¤¤í";
5824 power_desc[num] = "stay close";
5827 if (p_ptr->pet_follow_distance == PET_CLOSE_DIST) mode = num;
5828 powers[num++] = PET_STAY_CLOSE;
5831 power_desc[num] = "¤Ä¤¤¤ÆÍ褤";
5833 power_desc[num] = "follow me";
5836 if (p_ptr->pet_follow_distance == PET_FOLLOW_DIST) mode = num;
5837 powers[num++] = PET_FOLLOW_ME;
5840 power_desc[num] = "Ũ¤ò¸«¤Ä¤±¤ÆÅݤ»";
5842 power_desc[num] = "seek and destroy";
5845 if (p_ptr->pet_follow_distance == PET_DESTROY_DIST) mode = num;
5846 powers[num++] = PET_SEEK_AND_DESTROY;
5849 power_desc[num] = "¾¯¤·Î¥¤ì¤Æ¤¤¤í";
5851 power_desc[num] = "give me space";
5854 if (p_ptr->pet_follow_distance == PET_SPACE_DIST) mode = num;
5855 powers[num++] = PET_ALLOW_SPACE;
5858 power_desc[num] = "Î¥¤ì¤Æ¤¤¤í";
5860 power_desc[num] = "stay away";
5863 if (p_ptr->pet_follow_distance == PET_AWAY_DIST) mode = num;
5864 powers[num++] = PET_STAY_AWAY;
5866 if (p_ptr->pet_extra_flags & PF_OPEN_DOORS)
5869 power_desc[num] = "¥É¥¢¤ò³«¤±¤ë (¸½ºß:ON)";
5871 power_desc[num] = "pets open doors (now On)";
5878 power_desc[num] = "¥É¥¢¤ò³«¤±¤ë (¸½ºß:OFF)";
5880 power_desc[num] = "pets open doors (now Off)";
5884 powers[num++] = PET_OPEN_DOORS;
5886 if (p_ptr->pet_extra_flags & PF_PICKUP_ITEMS)
5889 power_desc[num] = "¥¢¥¤¥Æ¥à¤ò½¦¤¦ (¸½ºß:ON)";
5891 power_desc[num] = "pets pick up items (now On)";
5898 power_desc[num] = "¥¢¥¤¥Æ¥à¤ò½¦¤¦ (¸½ºß:OFF)";
5900 power_desc[num] = "pets pick up items (now Off)";
5904 powers[num++] = PET_TAKE_ITEMS;
5906 if (p_ptr->pet_extra_flags & PF_TELEPORT)
5909 power_desc[num] = "¥Æ¥ì¥Ý¡¼¥È·ÏËâË¡¤ò»È¤¦ (¸½ºß:ON)";
5911 power_desc[num] = "allow teleport (now On)";
5918 power_desc[num] = "¥Æ¥ì¥Ý¡¼¥È·ÏËâË¡¤ò»È¤¦ (¸½ºß:OFF)";
5920 power_desc[num] = "allow teleport (now Off)";
5924 powers[num++] = PET_TELEPORT;
5926 if (p_ptr->pet_extra_flags & PF_ATTACK_SPELL)
5929 power_desc[num] = "¹¶·âËâË¡¤ò»È¤¦ (¸½ºß:ON)";
5931 power_desc[num] = "allow cast attack spell (now On)";
5938 power_desc[num] = "¹¶·âËâË¡¤ò»È¤¦ (¸½ºß:OFF)";
5940 power_desc[num] = "allow cast attack spell (now Off)";
5944 powers[num++] = PET_ATTACK_SPELL;
5946 if (p_ptr->pet_extra_flags & PF_SUMMON_SPELL)
5949 power_desc[num] = "¾¤´ËâË¡¤ò»È¤¦ (¸½ºß:ON)";
5951 power_desc[num] = "allow cast summon spell (now On)";
5958 power_desc[num] = "¾¤´ËâË¡¤ò»È¤¦ (¸½ºß:OFF)";
5960 power_desc[num] = "allow cast summon spell (now Off)";
5964 powers[num++] = PET_SUMMON_SPELL;
5966 if (p_ptr->pet_extra_flags & PF_BALL_SPELL)
5969 power_desc[num] = "¥×¥ì¥¤¥ä¡¼¤ò´¬¤¹þ¤àÈÏ°ÏËâË¡¤ò»È¤¦ (¸½ºß:ON)";
5971 power_desc[num] = "allow involve player in area spell (now On)";
5978 power_desc[num] = "¥×¥ì¥¤¥ä¡¼¤ò´¬¤¹þ¤àÈÏ°ÏËâË¡¤ò»È¤¦ (¸½ºß:OFF)";
5980 power_desc[num] = "allow involve player in area spell (now Off)";
5984 powers[num++] = PET_BALL_SPELL;
5989 power_desc[num] = "¥Ú¥Ã¥È¤«¤é¹ß¤ê¤ë";
5991 power_desc[num] = "get off a pet";
5998 power_desc[num] = "¥Ú¥Ã¥È¤Ë¾è¤ë";
6000 power_desc[num] = "ride a pet";
6004 powers[num++] = PET_RIDING;
6007 power_desc[num] = "¥Ú¥Ã¥È¤Ë̾Á°¤ò¤Ä¤±¤ë¡£";
6009 power_desc[num] = "name pets";
6012 powers[num++] = PET_NAME;
6014 if (p_ptr->riding && buki_motteruka(INVEN_RARM) && (empty_hands(FALSE) & 0x00000001) && ((inventory[INVEN_RARM].weight > 99) || (inventory[INVEN_RARM].tval == TV_POLEARM)))
6016 if (p_ptr->pet_extra_flags & PF_RYOUTE)
6019 power_desc[num] = "Éð´ï¤òÊÒ¼ê¤Ç»ý¤Ä";
6021 power_desc[num] = "use one hand to control a riding pet";
6028 power_desc[num] = "Éð´ï¤òξ¼ê¤Ç»ý¤Ä";
6030 power_desc[num] = "use both hands for a weapon.";
6035 powers[num++] = PET_RYOUTE;
6038 /* Nothing chosen yet */
6041 /* Build a prompt (accept all spells) */
6044 /* Build a prompt (accept all spells) */
6046 strnfmt(out_val, 78, "(¥³¥Þ¥ó¥É %c-%c¡¢'*'=°ìÍ÷¡¢ESC=½ªÎ») ¥³¥Þ¥ó¥É¤òÁª¤ó¤Ç¤¯¤À¤µ¤¤:",
6048 strnfmt(out_val, 78, "(Command %c-%c, *=List, ESC=exit) Select a command: ",
6051 I2A(0), I2A(num - 1));
6056 strnfmt(out_val, 78, "(¥³¥Þ¥ó¥É %c-%c¡¢'*'=°ìÍ÷¡¢ESC=½ªÎ») ¥³¥Þ¥ó¥É¤òÁª¤ó¤Ç¤¯¤À¤µ¤¤:",
6058 strnfmt(out_val, 78, "(Command %c-%c, *=List, ESC=exit) Select a command: ",
6061 I2A(0), '0' + num - 27);
6067 /* Save the screen */
6074 prt(format("%s%c) %s", (ctr == mode) ? "*" : " ", I2A(ctr), power_desc[ctr]), y + ctr, x);
6080 prt("", y + ctr, x);
6087 /* Get a command from the user */
6088 while (!flag && get_com(out_val, &choice, TRUE))
6090 /* Request redraw */
6091 if ((choice == ' ') || (choice == '*') || (choice == '?'))
6103 /* Save the screen */
6110 sprintf(buf, "%s%c) %s", (ctr == mode) ? "*" : " ", I2A(ctr), power_desc[ctr]);
6111 prt(buf, y + ctr, x);
6117 prt("", y + ctr, x);
6131 /* Restore the screen */
6139 if (isalpha(choice))
6142 ask = (isupper(choice));
6145 if (ask) choice = tolower(choice);
6147 /* Extract request */
6148 i = (islower(choice) ? A2I(choice) : -1);
6152 ask = FALSE; /* Can't uppercase digits */
6154 i = choice - '0' + 26;
6157 /* Totally Illegal */
6158 if ((i < 0) || (i >= num))
6169 strnfmt(buf, 78, "%s¤ò»È¤¤¤Þ¤¹¤«¡© ", power_desc[i]);
6171 strnfmt(buf, 78, "Use %s? ", power_desc[i]);
6175 /* Belay that order */
6176 if (!get_check(buf)) continue;
6183 /* Restore the screen */
6184 if (redraw) Term_load();
6186 /* Abort if needed */
6195 case PET_DISMISS: /* Dismiss pets */
6200 msg_print("¥Ú¥Ã¥È¤¬¤¤¤Ê¤¤¡ª");
6202 msg_print("You have no pets!");
6206 do_cmd_pet_dismiss();
6207 (void)calculate_upkeep();
6212 project_length = -1;
6213 if (!target_set(TARGET_KILL)) pet_t_m_idx = 0;
6216 cave_type *c_ptr = &cave[target_row][target_col];
6217 if (c_ptr->m_idx && (m_list[c_ptr->m_idx].ml))
6219 pet_t_m_idx = cave[target_row][target_col].m_idx;
6220 p_ptr->pet_follow_distance = PET_DESTROY_DIST;
6222 else pet_t_m_idx = 0;
6229 case PET_STAY_CLOSE:
6231 p_ptr->pet_follow_distance = PET_CLOSE_DIST;
6238 p_ptr->pet_follow_distance = PET_FOLLOW_DIST;
6242 /* "Seek and destoy" */
6243 case PET_SEEK_AND_DESTROY:
6245 p_ptr->pet_follow_distance = PET_DESTROY_DIST;
6248 /* "Give me space" */
6249 case PET_ALLOW_SPACE:
6251 p_ptr->pet_follow_distance = PET_SPACE_DIST;
6257 p_ptr->pet_follow_distance = PET_AWAY_DIST;
6260 /* flag - allow pets to open doors */
6261 case PET_OPEN_DOORS:
6263 if (p_ptr->pet_extra_flags & PF_OPEN_DOORS) p_ptr->pet_extra_flags &= ~(PF_OPEN_DOORS);
6264 else p_ptr->pet_extra_flags |= (PF_OPEN_DOORS);
6267 /* flag - allow pets to pickup items */
6268 case PET_TAKE_ITEMS:
6270 if (p_ptr->pet_extra_flags & PF_PICKUP_ITEMS)
6272 p_ptr->pet_extra_flags &= ~(PF_PICKUP_ITEMS);
6273 for (pet_ctr = m_max - 1; pet_ctr >= 1; pet_ctr--)
6275 /* Access the monster */
6276 m_ptr = &m_list[pet_ctr];
6280 monster_drop_carried_objects(m_ptr);
6284 else p_ptr->pet_extra_flags |= (PF_PICKUP_ITEMS);
6288 /* flag - allow pets to teleport */
6291 if (p_ptr->pet_extra_flags & PF_TELEPORT) p_ptr->pet_extra_flags &= ~(PF_TELEPORT);
6292 else p_ptr->pet_extra_flags |= (PF_TELEPORT);
6295 /* flag - allow pets to cast attack spell */
6296 case PET_ATTACK_SPELL:
6298 if (p_ptr->pet_extra_flags & PF_ATTACK_SPELL) p_ptr->pet_extra_flags &= ~(PF_ATTACK_SPELL);
6299 else p_ptr->pet_extra_flags |= (PF_ATTACK_SPELL);
6302 /* flag - allow pets to cast attack spell */
6303 case PET_SUMMON_SPELL:
6305 if (p_ptr->pet_extra_flags & PF_SUMMON_SPELL) p_ptr->pet_extra_flags &= ~(PF_SUMMON_SPELL);
6306 else p_ptr->pet_extra_flags |= (PF_SUMMON_SPELL);
6309 /* flag - allow pets to cast attack spell */
6310 case PET_BALL_SPELL:
6312 if (p_ptr->pet_extra_flags & PF_BALL_SPELL) p_ptr->pet_extra_flags &= ~(PF_BALL_SPELL);
6313 else p_ptr->pet_extra_flags |= (PF_BALL_SPELL);
6331 if (p_ptr->pet_extra_flags & PF_RYOUTE) p_ptr->pet_extra_flags &= ~(PF_RYOUTE);
6332 else p_ptr->pet_extra_flags |= (PF_RYOUTE);
6333 p_ptr->update |= (PU_BONUS);