3 @brief 魔法のインターフェイスと発動 / Purpose: Do everything for each spell
\r
6 2013 Deskull rearranged comment for Doxygen.
\r
10 #include "selfinfo.h"
\r
11 #include "cmd-quaff.h"
\r
12 #include "spells-summon.h"
\r
13 #include "realm-arcane.h"
\r
14 #include "realm-chaos.h"
\r
15 #include "realm-death.h"
\r
16 #include "realm-life.h"
\r
17 #include "realm-nature.h"
\r
18 #include "realm-sorcery.h"
\r
22 * 魔法の効果を「キャプション:ダイス+定数値」のフォーマットで出力する / Generate dice info string such as "foo 2d10"
\r
27 * @return フォーマットに従い整形された文字列
\r
29 cptr info_string_dice(cptr str, int dice, int sides, int base)
\r
33 return format("%s%d", str, base);
\r
37 return format("%s%dd%d", str, dice, sides);
\r
39 /* Dice plus base value */
\r
41 return format("%s%dd%d%+d", str, dice, sides, base);
\r
46 * @brief 魔法によるダメージを出力する / Generate damage-dice info string such as "dam 2d10"
\r
50 * @return フォーマットに従い整形された文字列
\r
52 cptr info_damage(int dice, int sides, int base)
\r
54 return info_string_dice(_("損傷:", "dam "), dice, sides, base);
\r
58 * @brief 魔法の効果時間を出力する / Generate duration info string such as "dur 20+1d20"
\r
61 * @return フォーマットに従い整形された文字列
\r
63 cptr info_duration(int base, int sides)
\r
65 return format(_("期間:%d+1d%d", "dur %d+1d%d"), base, sides);
\r
69 * @brief 魔法の効果範囲を出力する / Generate range info string such as "range 5"
\r
71 * @return フォーマットに従い整形された文字列
\r
73 cptr info_range(POSITION range)
\r
75 return format(_("範囲:%d", "range %d"), range);
\r
79 * @brief 魔法による回復量を出力する / Generate heal info string such as "heal 2d8"
\r
83 * @return フォーマットに従い整形された文字列
\r
85 cptr info_heal(int dice, int sides, int base)
\r
87 return info_string_dice(_("回復:", "heal "), dice, sides, base);
\r
91 * @brief 魔法効果発動までの遅延ターンを出力する / Generate delay info string such as "delay 15+1d15"
\r
94 * @return フォーマットに従い整形された文字列
\r
96 cptr info_delay(int base, int sides)
\r
98 return format(_("遅延:%d+1d%d", "delay %d+1d%d"), base, sides);
\r
103 * @brief 魔法によるダメージを出力する(固定値&複数回処理) / Generate multiple-damage info string such as "dam 25 each"
\r
105 * @return フォーマットに従い整形された文字列
\r
107 cptr info_multi_damage(HIT_POINT dam)
\r
109 return format(_("損傷:各%d", "dam %d each"), dam);
\r
114 * @brief 魔法によるダメージを出力する(ダイスのみ&複数回処理) / Generate multiple-damage-dice info string such as "dam 5d2 each"
\r
116 * @param sides ダイス目
\r
117 * @return フォーマットに従い整形された文字列
\r
119 cptr info_multi_damage_dice(int dice, int sides)
\r
121 return format(_("損傷:各%dd%d", "dam %dd%d each"), dice, sides);
\r
125 * @brief 魔法による一般的な効力値を出力する(固定値) / Generate power info string such as "power 100"
\r
127 * @return フォーマットに従い整形された文字列
\r
129 cptr info_power(int power)
\r
131 return format(_("効力:%d", "power %d"), power);
\r
136 * @brief 魔法による一般的な効力値を出力する(ダイス値) / Generate power info string such as "power 100"
\r
138 * @param sides ダイス目
\r
139 * @return フォーマットに従い整形された文字列
\r
142 * Generate power info string such as "power 1d100"
\r
144 cptr info_power_dice(int dice, int sides)
\r
146 return format(_("効力:%dd%d", "power %dd%d"), dice, sides);
\r
151 * @brief 魔法の効果半径を出力する / Generate radius info string such as "rad 100"
\r
153 * @return フォーマットに従い整形された文字列
\r
155 cptr info_radius(int rad)
\r
157 return format(_("半径:%d", "rad %d"), rad);
\r
162 * @brief 魔法効果の限界重量を出力する / Generate weight info string such as "max wgt 15"
\r
163 * @param weight 最大重量
\r
164 * @return フォーマットに従い整形された文字列
\r
166 cptr info_weight(int weight)
\r
169 return format("最大重量:%d.%dkg", lbtokg1(weight), lbtokg2(weight));
\r
171 return format("max wgt %d", weight/10);
\r
177 * @brief 歌の開始を処理する / Start singing if the player is a Bard
\r
178 * @param spell 領域魔法としてのID
\r
179 * @param song 魔法効果のID
\r
182 static void start_singing(SPELL_IDX spell, MAGIC_NUM1 song)
\r
184 /* Remember the song index */
\r
185 SINGING_SONG_EFFECT(p_ptr) = (MAGIC_NUM1)song;
\r
187 /* Remember the index of the spell which activated the song */
\r
188 SINGING_SONG_ID(p_ptr) = (MAGIC_NUM2)spell;
\r
191 /* Now the player is singing */
\r
192 set_action(ACTION_SING);
\r
195 /* Recalculate bonuses */
\r
196 p_ptr->update |= (PU_BONUS);
\r
198 /* Redraw status bar */
\r
199 p_ptr->redraw |= (PR_STATUS);
\r
203 * @brief 歌の停止を処理する / Stop singing if the player is a Bard
\r
206 void stop_singing(void)
\r
208 if (p_ptr->pclass != CLASS_BARD) return;
\r
210 /* Are there interupted song? */
\r
211 if (INTERUPTING_SONG_EFFECT(p_ptr))
\r
213 /* Forget interupted song */
\r
214 INTERUPTING_SONG_EFFECT(p_ptr) = MUSIC_NONE;
\r
218 /* The player is singing? */
\r
219 if (!SINGING_SONG_EFFECT(p_ptr)) return;
\r
221 /* Hack -- if called from set_action(), avoid recursive loop */
\r
222 if (p_ptr->action == ACTION_SING) set_action(ACTION_NONE);
\r
224 /* Message text of each song or etc. */
\r
225 do_spell(REALM_MUSIC, SINGING_SONG_ID(p_ptr), SPELL_STOP);
\r
227 SINGING_SONG_EFFECT(p_ptr) = MUSIC_NONE;
\r
228 SINGING_SONG_ID(p_ptr) = 0;
\r
230 /* Recalculate bonuses */
\r
231 p_ptr->update |= (PU_BONUS);
\r
233 /* Redraw status bar */
\r
234 p_ptr->redraw |= (PR_STATUS);
\r
241 * @brief トランプ領域魔法の各処理を行う
\r
242 * @param spell 魔法ID
\r
243 * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
\r
244 * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
\r
246 static cptr do_trump_spell(SPELL_IDX spell, BIT_FLAGS mode)
\r
248 bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
\r
249 bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
\r
250 bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
\r
251 bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
\r
252 bool fail = (mode == SPELL_FAIL) ? TRUE : FALSE;
\r
253 static const char s_random[] = _("ランダム", "random");
\r
256 int plev = p_ptr->lev;
\r
261 if (name) return _("ショート・テレポート", "Phase Door");
\r
262 if (desc) return _("近距離のテレポートをする。", "Teleport short distance.");
\r
265 POSITION range = 10;
\r
267 if (info) return info_range(range);
\r
271 teleport_player(range, 0L);
\r
277 if (name) return _("蜘蛛のカード", "Trump Spiders");
\r
278 if (desc) return _("蜘蛛を召喚する。", "Summons spiders.");
\r
283 msg_print(_("あなたは蜘蛛のカードに集中する...", "You concentrate on the trump of an spider..."));
\r
284 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_SPIDER, PM_ALLOW_GROUP))
\r
288 msg_print(_("召喚された蜘蛛は怒っている!", "The summoned spiders get angry!"));
\r
296 if (name) return _("シャッフル", "Shuffle");
\r
297 if (desc) return _("カードの占いをする。", "Causes random effects.");
\r
300 if (info) return s_random;
\r
310 if (name) return _("フロア・リセット", "Reset Recall");
\r
311 if (desc) return _("最深階を変更する。", "Resets the 'deepest' level for recall spell.");
\r
316 if (!reset_recall()) return NULL;
\r
322 if (name) return _("テレポート", "Teleport");
\r
323 if (desc) return _("遠距離のテレポートをする。", "Teleport long distance.");
\r
326 POSITION range = plev * 4;
\r
328 if (info) return info_range(range);
\r
332 teleport_player(range, 0L);
\r
338 if (name) return _("感知のカード", "Trump Spying");
\r
339 if (desc) return _("一定時間、テレパシー能力を得る。", "Gives telepathy for a while.");
\r
345 if (info) return info_duration(base, sides);
\r
349 set_tim_esp(randint1(sides) + base, FALSE);
\r
355 if (name) return _("テレポート・モンスター", "Teleport Away");
\r
356 if (desc) return _("モンスターをテレポートさせるビームを放つ。抵抗されると無効。", "Teleports all monsters on the line away unless resisted.");
\r
361 if (info) return info_power(power);
\r
365 if (!get_aim_dir(&dir)) return NULL;
\r
367 fire_beam(GF_AWAY_ALL, dir, power);
\r
373 if (name) return _("動物のカード", "Trump Animals");
\r
374 if (desc) return _("1体の動物を召喚する。", "Summons an animal.");
\r
379 int type = (!fail ? SUMMON_ANIMAL_RANGER : SUMMON_ANIMAL);
\r
380 msg_print(_("あなたは動物のカードに集中する...", "You concentrate on the trump of an animal..."));
\r
381 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, type, 0L))
\r
385 msg_print(_("召喚された動物は怒っている!", "The summoned animal gets angry!"));
\r
393 if (name) return _("移動のカード", "Trump Reach");
\r
394 if (desc) return _("アイテムを自分の足元へ移動させる。", "Pulls a distant item close to you.");
\r
397 int weight = plev * 15;
\r
399 if (info) return info_weight(weight);
\r
403 if (!get_aim_dir(&dir)) return NULL;
\r
405 fetch(dir, weight, FALSE);
\r
411 if (name) return _("カミカゼのカード", "Trump Kamikaze");
\r
412 if (desc) return _("複数の爆発するモンスターを召喚する。", "Summons monsters which explode by itself.");
\r
422 if (!target_set(TARGET_KILL)) return NULL;
\r
428 /* Summons near player when failed */
\r
433 if (p_ptr->pclass == CLASS_BEASTMASTER)
\r
434 type = SUMMON_KAMIKAZE_LIVING;
\r
436 type = SUMMON_KAMIKAZE;
\r
438 msg_print(_("あなたはカミカゼのカードに集中する...", "You concentrate on several trumps at once..."));
\r
439 if (trump_summoning(2 + randint0(plev / 7), !fail, y, x, 0, type, 0L))
\r
443 msg_print(_("召喚されたモンスターは怒っている!", "The summoned creatures get angry!"));
\r
451 if (name) return _("幻霊召喚", "Phantasmal Servant");
\r
452 if (desc) return _("1体の幽霊を召喚する。", "Summons a ghost.");
\r
455 /* Phantasmal Servant is not summoned as enemy when failed */
\r
458 int summon_lev = plev * 2 / 3 + randint1(plev / 2);
\r
460 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, (summon_lev * 3 / 2), SUMMON_PHANTOM, 0L))
\r
462 msg_print(_("御用でございますか、御主人様?", "'Your wish, master?'"));
\r
469 if (name) return _("スピード・モンスター", "Haste Monster");
\r
470 if (desc) return _("モンスター1体を加速させる。", "Hastes a monster.");
\r
477 /* Temporary enable target_pet option */
\r
478 bool old_target_pet = target_pet;
\r
481 result = get_aim_dir(&dir);
\r
483 /* Restore target_pet option */
\r
484 target_pet = old_target_pet;
\r
486 if (!result) return NULL;
\r
488 speed_monster(dir, plev);
\r
494 if (name) return _("テレポート・レベル", "Teleport Level");
\r
495 if (desc) return _("瞬時に上か下の階にテレポートする。", "Teleport to up or down stairs in a moment.");
\r
500 if (!get_check(_("本当に他の階にテレポートしますか?", "Are you sure? (Teleport Level)"))) return NULL;
\r
507 if (name) return _("次元の扉", "Dimension Door");
\r
508 if (desc) return _("短距離内の指定した場所にテレポートする。", "Teleport to given location.");
\r
511 POSITION range = plev / 2 + 10;
\r
513 if (info) return info_range(range);
\r
517 msg_print(_("次元の扉が開いた。目的地を選んで下さい。", "You open a dimensional gate. Choose a destination."));
\r
518 if (!dimension_door()) return NULL;
\r
524 if (name) return _("帰還の呪文", "Word of Recall");
\r
525 if (desc) return _("地上にいるときはダンジョンの最深階へ、ダンジョンにいるときは地上へと移動する。",
\r
526 "Recalls player from dungeon to town, or from town to the deepest level of dungeon.");
\r
532 if (info) return info_delay(base, sides);
\r
536 if (!word_of_recall()) return NULL;
\r
542 if (name) return _("怪物追放", "Banish");
\r
543 if (desc) return _("視界内の全てのモンスターをテレポートさせる。抵抗されると無効。", "Teleports all monsters in sight away unless resisted.");
\r
546 int power = plev * 4;
\r
548 if (info) return info_power(power);
\r
552 banish_monsters(power);
\r
558 if (name) return _("位置交換のカード", "Swap Position");
\r
559 if (desc) return _("1体のモンスターと位置を交換する。", "Swap positions of you and a monster.");
\r
566 /* HACK -- No range limit */
\r
567 project_length = -1;
\r
569 result = get_aim_dir(&dir);
\r
571 /* Restore range to default */
\r
572 project_length = 0;
\r
574 if (!result) return NULL;
\r
576 teleport_swap(dir);
\r
582 if (name) return _("アンデッドのカード", "Trump Undead");
\r
583 if (desc) return _("1体のアンデッドを召喚する。", "Summons an undead monster.");
\r
588 msg_print(_("あなたはアンデッドのカードに集中する...", "You concentrate on the trump of an undead creature..."));
\r
589 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_UNDEAD, 0L))
\r
593 msg_print(_("召喚されたアンデッドは怒っている!", "The summoned undead creature gets angry!"));
\r
601 if (name) return _("爬虫類のカード", "Trump Reptiles");
\r
602 if (desc) return _("1体のヒドラを召喚する。", "Summons a hydra.");
\r
607 msg_print(_("あなたは爬虫類のカードに集中する...", "You concentrate on the trump of a reptile..."));
\r
608 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_HYDRA, 0L))
\r
612 msg_print(_("召喚された爬虫類は怒っている!", "The summoned reptile gets angry!"));
\r
620 if (name) return _("モンスターのカード", "Trump Monsters");
\r
621 if (desc) return _("複数のモンスターを召喚する。", "Summons some monsters.");
\r
627 msg_print(_("あなたはモンスターのカードに集中する...", "You concentrate on several trumps at once..."));
\r
628 if (p_ptr->pclass == CLASS_BEASTMASTER)
\r
629 type = SUMMON_LIVING;
\r
633 if (trump_summoning((1 + (plev - 15)/ 10), !fail, p_ptr->y, p_ptr->x, 0, type, 0L))
\r
637 msg_print(_("召喚されたモンスターは怒っている!", "The summoned creatures get angry!"));
\r
646 if (name) return _("ハウンドのカード", "Trump Hounds");
\r
647 if (desc) return _("1グループのハウンドを召喚する。", "Summons a group of hounds.");
\r
652 msg_print(_("あなたはハウンドのカードに集中する...", "You concentrate on the trump of a hound..."));
\r
653 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_HOUND, PM_ALLOW_GROUP))
\r
657 msg_print(_("召喚されたハウンドは怒っている!", "The summoned hounds get angry!"));
\r
665 if (name) return _("トランプの刃", "Trump Branding");
\r
666 if (desc) return _("武器にトランプの属性をつける。", "Makes current weapon a Trump weapon.");
\r
677 if (name) return _("人間トランプ", "Living Trump");
\r
678 if (desc) return _("ランダムにテレポートする突然変異か、自分の意思でテレポートする突然変異が身につく。",
\r
679 "Gives mutation which makes you teleport randomly or makes you able to teleport at will.");
\r
687 /* Teleport control */
\r
690 /* Random teleportation (uncontrolled) */
\r
693 /* Gain the mutation */
\r
694 if (gain_random_mutation(mutation))
\r
696 msg_print(_("あなたは生きているカードに変わった。", "You have turned into a Living Trump."));
\r
703 if (name) return _("サイバーデーモンのカード", "Trump Cyberdemon");
\r
704 if (desc) return _("1体のサイバーデーモンを召喚する。", "Summons a cyber demon.");
\r
709 msg_print(_("あなたはサイバーデーモンのカードに集中する...", "You concentrate on the trump of a Cyberdemon..."));
\r
710 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_CYBER, 0L))
\r
714 msg_print(_("召喚されたサイバーデーモンは怒っている!", "The summoned Cyberdemon gets angry!"));
\r
722 if (name) return _("予見のカード", "Trump Divination");
\r
723 if (desc) return _("近くの全てのモンスター、罠、扉、階段、財宝、そしてアイテムを感知する。",
\r
724 "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.");
\r
727 int rad = DETECT_RAD_DEFAULT;
\r
729 if (info) return info_radius(rad);
\r
739 if (name) return _("知識のカード", "Trump Lore");
\r
740 if (desc) return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item.");
\r
745 if (!identify_fully(FALSE)) return NULL;
\r
751 if (name) return _("回復モンスター", "Heal Monster");
\r
752 if (desc) return _("モンスター1体の体力を回復させる。", "Heal a monster.");
\r
755 int heal = plev * 10 + 200;
\r
757 if (info) return info_heal(0, 0, heal);
\r
763 /* Temporary enable target_pet option */
\r
764 bool old_target_pet = target_pet;
\r
767 result = get_aim_dir(&dir);
\r
769 /* Restore target_pet option */
\r
770 target_pet = old_target_pet;
\r
772 if (!result) return NULL;
\r
774 heal_monster(dir, heal);
\r
780 if (name) return _("ドラゴンのカード", "Trump Dragon");
\r
781 if (desc) return _("1体のドラゴンを召喚する。", "Summons a dragon.");
\r
786 msg_print(_("あなたはドラゴンのカードに集中する...", "You concentrate on the trump of a dragon..."));
\r
787 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_DRAGON, 0L))
\r
791 msg_print(_("召喚されたドラゴンは怒っている!", "The summoned dragon gets angry!"));
\r
799 if (name) return _("隕石のカード", "Trump Meteor");
\r
800 if (desc) return _("自分の周辺に隕石を落とす。", "Makes meteor balls fall down to nearby random locations.");
\r
803 HIT_POINT dam = plev * 2;
\r
806 if (info) return info_multi_damage(dam);
\r
810 cast_meteor(dam, rad);
\r
816 if (name) return _("デーモンのカード", "Trump Demon");
\r
817 if (desc) return _("1体の悪魔を召喚する。", "Summons a demon.");
\r
822 msg_print(_("あなたはデーモンのカードに集中する...", "You concentrate on the trump of a demon..."));
\r
823 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_DEMON, 0L))
\r
827 msg_print(_("召喚されたデーモンは怒っている!", "The summoned demon gets angry!"));
\r
835 if (name) return _("地獄のカード", "Trump Greater Undead");
\r
836 if (desc) return _("1体の上級アンデッドを召喚する。", "Summons a greater undead.");
\r
841 msg_print(_("あなたは強力なアンデッドのカードに集中する...", "You concentrate on the trump of a greater undead being..."));
\r
842 /* May allow unique depend on level and dice roll */
\r
843 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_HI_UNDEAD, PM_ALLOW_UNIQUE))
\r
847 msg_print(_("召喚された上級アンデッドは怒っている!", "The summoned greater undead creature gets angry!"));
\r
855 if (name) return _("古代ドラゴンのカード", "Trump Ancient Dragon");
\r
856 if (desc) return _("1体の古代ドラゴンを召喚する。", "Summons an ancient dragon.");
\r
863 if (p_ptr->pclass == CLASS_BEASTMASTER)
\r
864 type = SUMMON_HI_DRAGON_LIVING;
\r
866 type = SUMMON_HI_DRAGON;
\r
868 msg_print(_("あなたは古代ドラゴンのカードに集中する...", "You concentrate on the trump of an ancient dragon..."));
\r
869 /* May allow unique depend on level and dice roll */
\r
870 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, type, PM_ALLOW_UNIQUE))
\r
874 msg_print(_("召喚された古代ドラゴンは怒っている!", "The summoned ancient dragon gets angry!"));
\r
887 * @brief 匠領域魔法の各処理を行う
\r
888 * @param spell 魔法ID
\r
889 * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
\r
890 * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
\r
892 static cptr do_craft_spell(SPELL_IDX spell, BIT_FLAGS mode)
\r
894 bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
\r
895 bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
\r
896 bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
\r
897 bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
\r
899 int plev = p_ptr->lev;
\r
904 if (name) return _("赤外線視力", "Infravision");
\r
905 if (desc) return _("一定時間、赤外線視力が増強される。", "Gives infravision for a while.");
\r
910 if (info) return info_duration(base, base);
\r
914 set_tim_infra(base + randint1(base), FALSE);
\r
920 if (name) return _("回復力強化", "Regeneration");
\r
921 if (desc) return _("一定時間、回復力が増強される。", "Gives regeneration ability for a while.");
\r
926 if (info) return info_duration(base, base);
\r
930 set_tim_regen(base + randint1(base), FALSE);
\r
936 if (name) return _("空腹充足", "Satisfy Hunger");
\r
937 if (desc) return _("満腹になる。", "Satisfies hunger.");
\r
942 set_food(PY_FOOD_MAX - 1);
\r
948 if (name) return _("耐冷気", "Resist Cold");
\r
949 if (desc) return _("一定時間、冷気への耐性を得る。装備による耐性に累積する。",
\r
950 "Gives resistance to cold. This resistance can be added to which from equipment for more powerful resistance.");
\r
955 if (info) return info_duration(base, base);
\r
959 set_oppose_cold(randint1(base) + base, FALSE);
\r
965 if (name) return _("耐火炎", "Resist Fire");
\r
966 if (desc) return _("一定時間、炎への耐性を得る。装備による耐性に累積する。",
\r
967 "Gives resistance to fire. This resistance can be added to which from equipment for more powerful resistance.");
\r
972 if (info) return info_duration(base, base);
\r
976 set_oppose_fire(randint1(base) + base, FALSE);
\r
982 if (name) return _("士気高揚", "Heroism");
\r
983 if (desc) return _("一定時間、ヒーロー気分になる。", "Removes fear, and gives bonus to hit and 10 more HP for a while.");
\r
988 if (info) return info_duration(base, base);
\r
992 set_hero(randint1(base) + base, FALSE);
\r
1000 if (name) return _("耐電撃", "Resist Lightning");
\r
1001 if (desc) return _("一定時間、電撃への耐性を得る。装備による耐性に累積する。",
\r
1002 "Gives resistance to electricity. This resistance can be added to which from equipment for more powerful resistance.");
\r
1007 if (info) return info_duration(base, base);
\r
1011 set_oppose_elec(randint1(base) + base, FALSE);
\r
1017 if (name) return _("耐酸", "Resist Acid");
\r
1018 if (desc) return _("一定時間、酸への耐性を得る。装備による耐性に累積する。",
\r
1019 "Gives resistance to acid. This resistance can be added to which from equipment for more powerful resistance.");
\r
1024 if (info) return info_duration(base, base);
\r
1028 set_oppose_acid(randint1(base) + base, FALSE);
\r
1034 if (name) return _("透明視認", "See Invisibility");
\r
1035 if (desc) return _("一定時間、透明なものが見えるようになる。", "Gives see invisible for a while.");
\r
1040 if (info) return info_duration(base, base);
\r
1044 set_tim_invis(randint1(base) + base, FALSE);
\r
1050 if (name) return _("解呪", "Remove Curse");
\r
1051 if (desc) return _("アイテムにかかった弱い呪いを解除する。", "Removes normal curses from equipped items.");
\r
1056 if (remove_curse())
\r
1058 msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));
\r
1065 if (name) return _("耐毒", "Resist Poison");
\r
1066 if (desc) return _("一定時間、毒への耐性を得る。装備による耐性に累積する。",
\r
1067 "Gives resistance to poison. This resistance can be added to which from equipment for more powerful resistance.");
\r
1072 if (info) return info_duration(base, base);
\r
1076 set_oppose_pois(randint1(base) + base, FALSE);
\r
1082 if (name) return _("狂戦士化", "Berserk");
\r
1083 if (desc) return _("狂戦士化し、恐怖を除去する。", "Gives bonus to hit and HP, immunity to fear for a while. But decreases AC.");
\r
1088 if (info) return info_duration(base, base);
\r
1092 set_shero(randint1(base) + base, FALSE);
\r
1100 if (name) return _("自己分析", "Self Knowledge");
\r
1101 if (desc) return _("現在の自分の状態を完全に知る。",
\r
1102 "Gives you useful info regarding your current resistances, the powers of your weapon and maximum limits of your stats.");
\r
1113 if (name) return _("対邪悪結界", "Protection from Evil");
\r
1114 if (desc) return _("邪悪なモンスターの攻撃を防ぐバリアを張る。", "Gives aura which protect you from evil monster's physical attack.");
\r
1117 int base = 3 * plev;
\r
1120 if (info) return info_duration(base, sides);
\r
1124 set_protevil(randint1(sides) + base, FALSE);
\r
1130 if (name) return _("癒し", "Cure");
\r
1131 if (desc) return _("毒、朦朧状態、負傷を全快させ、幻覚を直す。", "Heals poison, stun, cut and hallucination completely.");
\r
1145 if (name) return _("魔法剣", "Mana Branding");
\r
1146 if (desc) return _("一定時間、武器に冷気、炎、電撃、酸、毒のいずれかの属性をつける。武器を持たないと使えない。",
\r
1147 "Makes current weapon some elemental branded. You must wield weapons.");
\r
1150 int base = plev / 2;
\r
1152 if (info) return info_duration(base, base);
\r
1156 if (!choose_ele_attack()) return NULL;
\r
1162 if (name) return _("テレパシー", "Telepathy");
\r
1163 if (desc) return _("一定時間、テレパシー能力を得る。", "Gives telepathy for a while.");
\r
1169 if (info) return info_duration(base, sides);
\r
1173 set_tim_esp(randint1(sides) + base, FALSE);
\r
1179 if (name) return _("肌石化", "Stone Skin");
\r
1180 if (desc) return _("一定時間、ACを上昇させる。", "Gives bonus to AC for a while.");
\r
1186 if (info) return info_duration(base, sides);
\r
1190 set_shield(randint1(sides) + base, FALSE);
\r
1196 if (name) return _("全耐性", "Resistance");
\r
1197 if (desc) return _("一定時間、酸、電撃、炎、冷気、毒に対する耐性を得る。装備による耐性に累積する。",
\r
1198 "Gives resistance to fire, cold, electricity, acid and poison for a while. These resistances can be added to which from equipment for more powerful resistances.");
\r
1203 if (info) return info_duration(base, base);
\r
1207 set_oppose_acid(randint1(base) + base, FALSE);
\r
1208 set_oppose_elec(randint1(base) + base, FALSE);
\r
1209 set_oppose_fire(randint1(base) + base, FALSE);
\r
1210 set_oppose_cold(randint1(base) + base, FALSE);
\r
1211 set_oppose_pois(randint1(base) + base, FALSE);
\r
1217 if (name) return _("スピード", "Haste Self");
\r
1218 if (desc) return _("一定時間、加速する。", "Hastes you for a while.");
\r
1222 int sides = 20 + plev;
\r
1224 if (info) return info_duration(base, sides);
\r
1228 set_fast(randint1(sides) + base, FALSE);
\r
1234 if (name) return _("壁抜け", "Walk through Wall");
\r
1235 if (desc) return _("一定時間、半物質化し壁を通り抜けられるようになる。", "Gives ability to pass walls for a while.");
\r
1238 int base = plev / 2;
\r
1240 if (info) return info_duration(base, base);
\r
1244 set_kabenuke(randint1(base) + base, FALSE);
\r
1250 if (name) return _("盾磨き", "Polish Shield");
\r
1251 if (desc) return _("盾に反射の属性をつける。", "Makes a shield a shield of reflection.");
\r
1262 if (name) return _("ゴーレム製造", "Create Golem");
\r
1263 if (desc) return _("1体のゴーレムを製造する。", "Creates a golem.");
\r
1268 if (summon_specific(-1, p_ptr->y, p_ptr->x, plev, SUMMON_GOLEM, PM_FORCE_PET))
\r
1270 msg_print(_("ゴーレムを作った。", "You make a golem."));
\r
1274 msg_print(_("うまくゴーレムを作れなかった。", "No Golems arrive."));
\r
1281 if (name) return _("魔法の鎧", "Magical armor");
\r
1282 if (desc) return _("一定時間、魔法防御力とACが上がり、混乱と盲目の耐性、反射能力、麻痺知らず、浮遊を得る。",
\r
1283 "Gives resistance to magic, bonus to AC, resistance to confusion, blindness, reflection, free action and levitation for a while.");
\r
1288 if (info) return info_duration(base, base);
\r
1292 set_magicdef(randint1(base) + base, FALSE);
\r
1298 if (name) return _("装備無力化", "Remove Enchantment");
\r
1299 if (desc) return _("武器・防具にかけられたあらゆる魔力を完全に解除する。", "Removes all magics completely from any weapon or armor.");
\r
1304 if (!mundane_spell(TRUE)) return NULL;
\r
1310 if (name) return _("呪い粉砕", "Remove All Curse");
\r
1311 if (desc) return _("アイテムにかかった強力な呪いを解除する。", "Removes normal and heavy curse from equipped items.");
\r
1316 if (remove_all_curse())
\r
1318 msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));
\r
1325 if (name) return _("完全なる知識", "Knowledge True");
\r
1326 if (desc) return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item.");
\r
1331 if (!identify_fully(FALSE)) return NULL;
\r
1337 if (name) return _("武器強化", "Enchant Weapon");
\r
1338 if (desc) return _("武器の命中率修正とダメージ修正を強化する。", "Attempts to increase +to-hit, +to-dam of a weapon.");
\r
1343 if (!enchant_spell(randint0(4) + 1, randint0(4) + 1, 0)) return NULL;
\r
1349 if (name) return _("防具強化", "Enchant Armor");
\r
1350 if (desc) return _("鎧の防御修正を強化する。", "Attempts to increase +AC of an armor.");
\r
1355 if (!enchant_spell(0, 0, randint0(3) + 2)) return NULL;
\r
1361 if (name) return _("武器属性付与", "Brand Weapon");
\r
1362 if (desc) return _("武器にランダムに属性をつける。", "Makes current weapon a random ego weapon.");
\r
1367 brand_weapon(randint0(18));
\r
1373 if (name) return _("人間トランプ", "Living Trump");
\r
1374 if (desc) return _("ランダムにテレポートする突然変異か、自分の意思でテレポートする突然変異が身につく。",
\r
1375 "Gives mutation which makes you teleport randomly or makes you able to teleport at will.");
\r
1383 /* Teleport control */
\r
1386 /* Random teleportation (uncontrolled) */
\r
1389 /* Gain the mutation */
\r
1390 if (gain_random_mutation(mutation))
\r
1392 msg_print(_("あなたは生きているカードに変わった。", "You have turned into a Living Trump."));
\r
1399 if (name) return _("属性への免疫", "Immunity");
\r
1400 if (desc) return _("一定時間、冷気、炎、電撃、酸のいずれかに対する免疫を得る。",
\r
1401 "Gives an immunity to fire, cold, electricity or acid for a while.");
\r
1406 if (info) return info_duration(base, base);
\r
1410 if (!choose_ele_immune(base + randint1(base))) return NULL;
\r
1420 * @brief 悪魔領域魔法の各処理を行う
\r
1421 * @param spell 魔法ID
\r
1422 * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
\r
1423 * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
\r
1425 static cptr do_daemon_spell(SPELL_IDX spell, BIT_FLAGS mode)
\r
1427 bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
\r
1428 bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
\r
1429 bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
\r
1430 bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
\r
1431 static const char s_dam[] = _("損傷:", "dam ");
\r
1434 int plev = p_ptr->lev;
\r
1439 if (name) return _("マジック・ミサイル", "Magic Missile");
\r
1440 if (desc) return _("弱い魔法の矢を放つ。", "Fires a weak bolt of magic.");
\r
1443 int dice = 3 + (plev - 1) / 5;
\r
1446 if (info) return info_damage(dice, sides, 0);
\r
1450 if (!get_aim_dir(&dir)) return NULL;
\r
1452 fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir, damroll(dice, sides));
\r
1458 if (name) return _("無生命感知", "Detect Unlife");
\r
1459 if (desc) return _("近くの生命のないモンスターを感知する。", "Detects all nonliving monsters in your vicinity.");
\r
1462 int rad = DETECT_RAD_DEFAULT;
\r
1464 if (info) return info_radius(rad);
\r
1468 detect_monsters_nonliving(rad);
\r
1474 if (name) return _("邪なる祝福", "Evil Bless");
\r
1475 if (desc) return _("一定時間、命中率とACにボーナスを得る。", "Gives bonus to hit and AC for a few turns.");
\r
1480 if (info) return info_duration(base, base);
\r
1484 set_blessed(randint1(base) + base, FALSE);
\r
1490 if (name) return _("耐火炎", "Resist Fire");
\r
1491 if (desc) return _("一定時間、炎への耐性を得る。装備による耐性に累積する。",
\r
1492 "Gives resistance to fire, cold and electricity for a while. These resistances can be added to which from equipment for more powerful resistances.");
\r
1497 if (info) return info_duration(base, base);
\r
1501 set_oppose_fire(randint1(base) + base, FALSE);
\r
1507 if (name) return _("恐慌", "Horrify");
\r
1508 if (desc) return _("モンスター1体を恐怖させ、朦朧させる。抵抗されると無効。", "Attempts to scare and stun a monster.");
\r
1513 if (info) return info_power(power);
\r
1517 if (!get_aim_dir(&dir)) return NULL;
\r
1519 fear_monster(dir, power);
\r
1520 stun_monster(dir, power);
\r
1526 if (name) return _("地獄の矢", "Nether Bolt");
\r
1527 if (desc) return _("地獄のボルトもしくはビームを放つ。", "Fires a bolt or beam of nether.");
\r
1530 int dice = 6 + (plev - 5) / 4;
\r
1533 if (info) return info_damage(dice, sides, 0);
\r
1537 if (!get_aim_dir(&dir)) return NULL;
\r
1539 fire_bolt_or_beam(beam_chance(), GF_NETHER, dir, damroll(dice, sides));
\r
1545 if (name) return _("古代の死霊召喚", "Summon Manes");
\r
1546 if (desc) return _("古代の死霊を召喚する。", "Summons a manes.");
\r
1551 if (!summon_specific(-1, p_ptr->y, p_ptr->x, (plev * 3) / 2, SUMMON_MANES, (PM_ALLOW_GROUP | PM_FORCE_PET)))
\r
1553 msg_print(_("古代の死霊は現れなかった。", "No Manes arrive."));
\r
1560 if (name) return _("地獄の焔", "Hellish Flame");
\r
1561 if (desc) return _("邪悪な力を持つボールを放つ。善良なモンスターには大きなダメージを与える。",
\r
1562 "Fires a ball of evil power. Hurts good monsters greatly.");
\r
1567 int rad = (plev < 30) ? 2 : 3;
\r
1570 if (p_ptr->pclass == CLASS_MAGE ||
\r
1571 p_ptr->pclass == CLASS_HIGH_MAGE ||
\r
1572 p_ptr->pclass == CLASS_SORCERER)
\r
1573 base = plev + plev / 2;
\r
1575 base = plev + plev / 4;
\r
1578 if (info) return info_damage(dice, sides, base);
\r
1582 if (!get_aim_dir(&dir)) return NULL;
\r
1584 fire_ball(GF_HELL_FIRE, dir, damroll(dice, sides) + base, rad);
\r
1590 if (name) return _("デーモン支配", "Dominate Demon");
\r
1591 if (desc) return _("悪魔1体を魅了する。抵抗されると無効", "Attempts to charm a demon.");
\r
1596 if (info) return info_power(power);
\r
1600 if (!get_aim_dir(&dir)) return NULL;
\r
1602 control_one_demon(dir, power);
\r
1608 if (name) return _("ビジョン", "Vision");
\r
1609 if (desc) return _("周辺の地形を感知する。", "Maps nearby area.");
\r
1612 int rad = DETECT_RAD_MAP;
\r
1614 if (info) return info_radius(rad);
\r
1624 if (name) return _("耐地獄", "Resist Nether");
\r
1625 if (desc) return _("一定時間、地獄への耐性を得る。", "Gives resistance to nether for a while.");
\r
1630 if (info) return info_duration(base, base);
\r
1634 set_tim_res_nether(randint1(base) + base, FALSE);
\r
1640 if (name) return _("プラズマ・ボルト", "Plasma bolt");
\r
1641 if (desc) return _("プラズマのボルトもしくはビームを放つ。", "Fires a bolt or beam of plasma.");
\r
1644 int dice = 11 + (plev - 5) / 4;
\r
1647 if (info) return info_damage(dice, sides, 0);
\r
1651 if (!get_aim_dir(&dir)) return NULL;
\r
1653 fire_bolt_or_beam(beam_chance(), GF_PLASMA, dir, damroll(dice, sides));
\r
1659 if (name) return _("ファイア・ボール", "Fire Ball");
\r
1660 if (desc) return _("炎の球を放つ。", "Fires a ball of fire.");
\r
1663 HIT_POINT dam = plev + 55;
\r
1666 if (info) return info_damage(0, 0, dam);
\r
1670 if (!get_aim_dir(&dir)) return NULL;
\r
1672 fire_ball(GF_FIRE, dir, dam, rad);
\r
1678 if (name) return _("炎の刃", "Fire Branding");
\r
1679 if (desc) return _("武器に炎の属性をつける。", "Makes current weapon fire branded.");
\r
1690 if (name) return _("地獄球", "Nether Ball");
\r
1691 if (desc) return _("大きな地獄の球を放つ。", "Fires a huge ball of nether.");
\r
1694 HIT_POINT dam = plev * 3 / 2 + 100;
\r
1695 int rad = plev / 20 + 2;
\r
1697 if (info) return info_damage(0, 0, dam);
\r
1701 if (!get_aim_dir(&dir)) return NULL;
\r
1703 fire_ball(GF_NETHER, dir, dam, rad);
\r
1709 if (name) return _("デーモン召喚", "Summon Demon");
\r
1710 if (desc) return _("悪魔1体を召喚する。", "Summons a demon.");
\r
1715 bool pet = !one_in_(3);
\r
1718 if (pet) flg |= PM_FORCE_PET;
\r
1719 else flg |= PM_NO_PET;
\r
1720 if (!(pet && (plev < 50))) flg |= PM_ALLOW_GROUP;
\r
1722 if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, plev*2/3+randint1(plev/2), SUMMON_DEMON, flg))
\r
1724 msg_print(_("硫黄の悪臭が充満した。", "The area fills with a stench of sulphur and brimstone."));
\r
1728 msg_print(_("「ご用でございますか、ご主人様」", "'What is thy bidding... Master?'"));
\r
1732 msg_print(_("「卑しき者よ、我は汝の下僕にあらず! お前の魂を頂くぞ!」",
\r
1733 "'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'"));
\r
1738 msg_print(_("悪魔は現れなかった。", "No demons arrive."));
\r
1746 if (name) return _("悪魔の目", "Devilish Eye");
\r
1747 if (desc) return _("一定時間、テレパシー能力を得る。", "Gives telepathy for a while.");
\r
1753 if (info) return info_duration(base, sides);
\r
1757 set_tim_esp(randint1(sides) + base, FALSE);
\r
1763 if (name) return _("悪魔のクローク", "Devil Cloak");
\r
1764 if (desc) return _("恐怖を取り除き、一定時間、炎と冷気の耐性、炎のオーラを得る。耐性は装備による耐性に累積する。",
\r
1765 "Removes fear. Gives resistance to fire and cold, and aura of fire. These resistances can be added to which from equipment for more powerful resistances.");
\r
1768 TIME_EFFECT base = 20;
\r
1770 if (info) return info_duration(base, base);
\r
1774 TIME_EFFECT dur = randint1(base) + base;
\r
1776 set_oppose_fire(dur, FALSE);
\r
1777 set_oppose_cold(dur, FALSE);
\r
1778 set_tim_sh_fire(dur, FALSE);
\r
1786 if (name) return _("溶岩流", "The Flow of Lava");
\r
1787 if (desc) return _("自分を中心とした炎の球を作り出し、床を溶岩に変える。",
\r
1788 "Generates a ball of fire centered on you which transforms floors to magma.");
\r
1791 HIT_POINT dam = (55 + plev) * 2;
\r
1794 if (info) return info_damage(0, 0, dam/2);
\r
1798 fire_ball(GF_FIRE, 0, dam, rad);
\r
1799 fire_ball_hide(GF_LAVA_FLOW, 0, 2 + randint1(2), rad);
\r
1805 if (name) return _("プラズマ球", "Plasma Ball");
\r
1806 if (desc) return _("プラズマの球を放つ。", "Fires a ball of plasma.");
\r
1809 HIT_POINT dam = plev * 3 / 2 + 80;
\r
1810 int rad = 2 + plev / 40;
\r
1812 if (info) return info_damage(0, 0, dam);
\r
1816 if (!get_aim_dir(&dir)) return NULL;
\r
1818 fire_ball(GF_PLASMA, dir, dam, rad);
\r
1824 if (name) return _("悪魔変化", "Polymorph Demon");
\r
1825 if (desc) return _("一定時間、悪魔に変化する。変化している間は本来の種族の能力を失い、代わりに悪魔としての能力を得る。",
\r
1826 "Mimic a demon for a while. Loses abilities of original race and gets abilities as a demon.");
\r
1829 int base = 10 + plev / 2;
\r
1831 if (info) return info_duration(base, base);
\r
1835 set_mimic(base + randint1(base), MIMIC_DEMON, FALSE);
\r
1841 if (name) return _("地獄の波動", "Nather Wave");
\r
1842 if (desc) return _("視界内の全てのモンスターにダメージを与える。善良なモンスターに特に大きなダメージを与える。",
\r
1843 "Damages all monsters in sight. Hurts good monsters greatly.");
\r
1846 int sides1 = plev * 2;
\r
1847 int sides2 = plev * 2;
\r
1849 if (info) return format("%sd%d+d%d", s_dam, sides1, sides2);
\r
1853 dispel_monsters(randint1(sides1));
\r
1854 dispel_good(randint1(sides2));
\r
1860 if (name) return _("サキュバスの接吻", "Kiss of Succubus");
\r
1861 if (desc) return _("因果混乱の球を放つ。", "Fires a ball of nexus.");
\r
1864 HIT_POINT dam = 100 + plev * 2;
\r
1867 if (info) return info_damage(0, 0, dam);
\r
1871 if (!get_aim_dir(&dir)) return NULL;
\r
1872 fire_ball(GF_NEXUS, dir, dam, rad);
\r
1878 if (name) return _("破滅の手", "Doom Hand");
\r
1879 if (desc) return _("破滅の手を放つ。食らったモンスターはそのときのHPの半分前後のダメージを受ける。", "Attempts to make a monster's HP almost half.");
\r
1884 if (!get_aim_dir(&dir))
\r
1887 msg_print(_("<破滅の手>を放った!", "You invoke the Hand of Doom!"));
\r
1889 fire_ball_hide(GF_HAND_DOOM, dir, plev * 2, 0);
\r
1895 if (name) return _("士気高揚", "Raise the Morale");
\r
1896 if (desc) return _("一定時間、ヒーロー気分になる。", "Removes fear, and gives bonus to hit and 10 more HP for a while.");
\r
1901 if (info) return info_duration(base, base);
\r
1905 set_hero(randint1(base) + base, FALSE);
\r
1913 if (name) return _("不滅の肉体", "Immortal Body");
\r
1914 if (desc) return _("一定時間、時間逆転への耐性を得る。", "Gives resistance to time for a while.");
\r
1919 if (info) return info_duration(base, base);
\r
1923 set_tim_res_time(randint1(base)+base, FALSE);
\r
1929 if (name) return _("狂気の円環", "Insanity Circle");
\r
1930 if (desc) return _("自分を中心としたカオスの球、混乱の球を発生させ、近くのモンスターを魅了する。",
\r
1931 "Generate balls of chaos, confusion and charm centered on you.");
\r
1934 HIT_POINT dam = 50 + plev;
\r
1935 int power = 20 + plev;
\r
1936 int rad = 3 + plev / 20;
\r
1938 if (info) return format("%s%d+%d", s_dam, dam/2, dam/2);
\r
1942 fire_ball(GF_CHAOS, 0, dam, rad);
\r
1943 fire_ball(GF_CONFUSION, 0, dam, rad);
\r
1944 fire_ball(GF_CHARM, 0, power, rad);
\r
1950 if (name) return _("ペット爆破", "Explode Pets");
\r
1951 if (desc) return _("全てのペットを強制的に爆破させる。", "Makes all pets explode.");
\r
1956 discharge_minion();
\r
1962 if (name) return _("グレーターデーモン召喚", "Summon Greater Demon");
\r
1963 if (desc) return _("上級デーモンを召喚する。召喚するには人間('p','h','t'で表されるモンスター)の死体を捧げなければならない。",
\r
1964 "Summons greater demon. It need to sacrifice a corpse of human ('p','h' or 't').");
\r
1969 if (!cast_summon_greater_demon()) return NULL;
\r
1975 if (name) return _("地獄嵐", "Nether Storm");
\r
1976 if (desc) return _("超巨大な地獄の球を放つ。", "Generate a huge ball of nether.");
\r
1979 HIT_POINT dam = plev * 15;
\r
1980 int rad = plev / 5;
\r
1982 if (info) return info_damage(0, 0, dam);
\r
1986 if (!get_aim_dir(&dir)) return NULL;
\r
1988 fire_ball(GF_NETHER, dir, dam, rad);
\r
1994 if (name) return _("血の呪い", "Bloody Curse");
\r
1995 if (desc) return _("自分がダメージを受けることによって対象に呪いをかけ、ダメージを与え様々な効果を引き起こす。",
\r
1996 "Puts blood curse which damages and causes various effects on a monster. You also take damage.");
\r
1999 HIT_POINT dam = 600;
\r
2002 if (info) return info_damage(0, 0, dam);
\r
2006 if (!get_aim_dir(&dir)) return NULL;
\r
2008 fire_ball_hide(GF_BLOOD_CURSE, dir, dam, rad);
\r
2009 take_hit(DAMAGE_USELIFE, 20 + randint1(30), _("血の呪い", "Blood curse"), -1);
\r
2015 if (name) return _("魔王変化", "Polymorph Demonlord");
\r
2016 if (desc) return _("悪魔の王に変化する。変化している間は本来の種族の能力を失い、代わりに悪魔の王としての能力を得、壁を破壊しながら歩く。",
\r
2017 "Mimic a demon lord for a while. Loses abilities of original race and gets great abilities as a demon lord. Even hard walls can't stop your walking.");
\r
2022 if (info) return info_duration(base, base);
\r
2026 set_mimic(base + randint1(base), MIMIC_DEMON_LORD, FALSE);
\r
2036 * @brief 破邪領域魔法の各処理を行う
\r
2037 * @param spell 魔法ID
\r
2038 * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
\r
2039 * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
\r
2041 static cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
\r
2043 bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
\r
2044 bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
\r
2045 bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
\r
2046 bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
\r
2049 int plev = p_ptr->lev;
\r
2054 if (name) return _("懲罰", "Punishment");
\r
2055 if (desc) return _("電撃のボルトもしくはビームを放つ。", "Fires a bolt or beam of lightning.");
\r
2058 int dice = 3 + (plev - 1) / 5;
\r
2061 if (info) return info_damage(dice, sides, 0);
\r
2065 if (!get_aim_dir(&dir)) return NULL;
\r
2067 fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir, damroll(dice, sides));
\r
2073 if (name) return _("邪悪存在感知", "Detect Evil");
\r
2074 if (desc) return _("近くの邪悪なモンスターを感知する。", "Detects all evil monsters in your vicinity.");
\r
2077 int rad = DETECT_RAD_DEFAULT;
\r
2079 if (info) return info_radius(rad);
\r
2083 detect_monsters_evil(rad);
\r
2089 if (name) return _("恐怖除去", "Remove Fear");
\r
2090 if (desc) return _("恐怖を取り除く。", "Removes fear.");
\r
2101 if (name) return _("威圧", "Scare Monster");
\r
2102 if (desc) return _("モンスター1体を恐怖させる。抵抗されると無効。", "Attempts to scare a monster.");
\r
2107 if (info) return info_power(power);
\r
2111 if (!get_aim_dir(&dir)) return NULL;
\r
2113 fear_monster(dir, power);
\r
2119 if (name) return _("聖域", "Sanctuary");
\r
2120 if (desc) return _("隣接した全てのモンスターを眠らせる。抵抗されると無効。", "Attempts to sleep monsters in the adjacent squares.");
\r
2125 if (info) return info_power(power);
\r
2129 sleep_monsters_touch();
\r
2135 if (name) return _("入口", "Portal");
\r
2136 if (desc) return _("中距離のテレポートをする。", "Teleport medium distance.");
\r
2139 POSITION range = 25 + plev / 2;
\r
2141 if (info) return info_range(range);
\r
2145 teleport_player(range, 0L);
\r
2151 if (name) return _("スターダスト", "Star Dust");
\r
2152 if (desc) return _("ターゲット付近に閃光のボルトを連射する。", "Fires many bolts of light near the target.");
\r
2155 int dice = 3 + (plev - 1) / 9;
\r
2158 if (info) return info_multi_damage_dice(dice, sides);
\r
2162 if (!get_aim_dir(&dir)) return NULL;
\r
2163 fire_blast(GF_LITE, dir, dice, sides, 10, 3);
\r
2169 if (name) return _("身体浄化", "Purify");
\r
2170 if (desc) return _("傷、毒、朦朧から全快する。", "Heals all cut, stun and poison status.");
\r
2183 if (name) return _("邪悪飛ばし", "Scatter Evil");
\r
2184 if (desc) return _("邪悪なモンスター1体をテレポートさせる。抵抗されると無効。", "Attempts to teleport an evil monster away.");
\r
2187 int power = MAX_SIGHT * 5;
\r
2189 if (info) return info_power(power);
\r
2193 if (!get_aim_dir(&dir)) return NULL;
\r
2194 fire_ball(GF_AWAY_EVIL, dir, power, 0);
\r
2200 if (name) return _("聖なる光球", "Holy Orb");
\r
2201 if (desc) return _("聖なる力をもつ宝珠を放つ。邪悪なモンスターに対して大きなダメージを与えるが、善良なモンスターには効果がない。",
\r
2202 "Fires a ball with holy power. Hurts evil monsters greatly, but don't effect good monsters.");
\r
2207 int rad = (plev < 30) ? 2 : 3;
\r
2210 if (p_ptr->pclass == CLASS_PRIEST ||
\r
2211 p_ptr->pclass == CLASS_HIGH_MAGE ||
\r
2212 p_ptr->pclass == CLASS_SORCERER)
\r
2213 base = plev + plev / 2;
\r
2215 base = plev + plev / 4;
\r
2218 if (info) return info_damage(dice, sides, base);
\r
2222 if (!get_aim_dir(&dir)) return NULL;
\r
2224 fire_ball(GF_HOLY_FIRE, dir, damroll(dice, sides) + base, rad);
\r
2230 if (name) return _("悪魔払い", "Exorcism");
\r
2231 if (desc) return _("視界内の全てのアンデッド及び悪魔にダメージを与え、邪悪なモンスターを恐怖させる。",
\r
2232 "Damages all undead and demons in sight, and scares all evil monsters in sight.");
\r
2238 if (info) return info_damage(1, sides, 0);
\r
2242 dispel_undead(randint1(sides));
\r
2243 dispel_demons(randint1(sides));
\r
2250 if (name) return _("解呪", "Remove Curse");
\r
2251 if (desc) return _("アイテムにかかった弱い呪いを解除する。", "Removes normal curses from equipped items.");
\r
2256 if (remove_curse())
\r
2258 msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));
\r
2265 if (name) return _("透明視認", "Sense Unseen");
\r
2266 if (desc) return _("一定時間、透明なものが見えるようになる。", "Gives see invisible for a while.");
\r
2271 if (info) return info_duration(base, base);
\r
2275 set_tim_invis(randint1(base) + base, FALSE);
\r
2281 if (name) return _("対邪悪結界", "Protection from Evil");
\r
2282 if (desc) return _("邪悪なモンスターの攻撃を防ぐバリアを張る。", "Gives aura which protect you from evil monster's physical attack.");
\r
2286 int sides = 3 * plev;
\r
2288 if (info) return info_duration(base, sides);
\r
2292 set_protevil(randint1(sides) + base, FALSE);
\r
2298 if (name) return _("裁きの雷", "Judgment Thunder");
\r
2299 if (desc) return _("強力な電撃のボルトを放つ。", "Fires a powerful bolt of lightning.");
\r
2302 HIT_POINT dam = plev * 5;
\r
2304 if (info) return info_damage(0, 0, dam);
\r
2308 if (!get_aim_dir(&dir)) return NULL;
\r
2309 fire_bolt(GF_ELEC, dir, dam);
\r
2315 if (name) return _("聖なる御言葉", "Holy Word");
\r
2316 if (desc) return _("視界内の邪悪な存在に大きなダメージを与え、体力を回復し、毒、恐怖、朦朧状態、負傷から全快する。",
\r
2317 "Damages all evil monsters in sight, heals HP somewhat, and completely heals poison, fear, stun and cut status.");
\r
2320 int dam_sides = plev * 6;
\r
2323 if (info) return format(_("損:1d%d/回%d", "dam:d%d/h%d"), dam_sides, heal);
\r
2326 dispel_evil(randint1(dam_sides));
\r
2337 if (name) return _("開かれた道", "Unbarring Ways");
\r
2338 if (desc) return _("一直線上の全ての罠と扉を破壊する。", "Fires a beam which destroy traps and doors.");
\r
2343 if (!get_aim_dir(&dir)) return NULL;
\r
2345 destroy_door(dir);
\r
2351 if (name) return _("封魔", "Arrest");
\r
2352 if (desc) return _("邪悪なモンスターの動きを止める。", "Attempts to paralyze an evil monster.");
\r
2355 int power = plev * 2;
\r
2357 if (info) return info_power(power);
\r
2361 if (!get_aim_dir(&dir)) return NULL;
\r
2368 if (name) return _("聖なるオーラ", "Holy Aura");
\r
2369 if (desc) return _("一定時間、邪悪なモンスターを傷つける聖なるオーラを得る。",
\r
2370 "Gives aura of holy power which injures evil monsters which attacked you for a while.");
\r
2375 if (info) return info_duration(base, base);
\r
2379 set_tim_sh_holy(randint1(base) + base, FALSE);
\r
2385 if (name) return _("アンデッド&悪魔退散", "Dispel Undead & Demons");
\r
2386 if (desc) return _("視界内の全てのアンデッド及び悪魔にダメージを与える。", "Damages all undead and demons in sight.");
\r
2389 int sides = plev * 4;
\r
2391 if (info) return info_damage(1, sides, 0);
\r
2395 dispel_undead(randint1(sides));
\r
2396 dispel_demons(randint1(sides));
\r
2402 if (name) return _("邪悪退散", "Dispel Evil");
\r
2403 if (desc) return _("視界内の全ての邪悪なモンスターにダメージを与える。", "Damages all evil monsters in sight.");
\r
2406 int sides = plev * 4;
\r
2408 if (info) return info_damage(1, sides, 0);
\r
2412 dispel_evil(randint1(sides));
\r
2418 if (name) return _("聖なる刃", "Holy Blade");
\r
2419 if (desc) return _("通常の武器に滅邪の属性をつける。", "Makes current weapon especially deadly against evil monsters.");
\r
2430 if (name) return _("スターバースト", "Star Burst");
\r
2431 if (desc) return _("巨大な閃光の球を放つ。", "Fires a huge ball of powerful light.");
\r
2434 HIT_POINT dam = 100 + plev * 2;
\r
2437 if (info) return info_damage(0, 0, dam);
\r
2441 if (!get_aim_dir(&dir)) return NULL;
\r
2443 fire_ball(GF_LITE, dir, dam, rad);
\r
2449 if (name) return _("天使召喚", "Summon Angel");
\r
2450 if (desc) return _("天使を1体召喚する。", "Summons an angel.");
\r
2455 bool pet = !one_in_(3);
\r
2458 if (pet) flg |= PM_FORCE_PET;
\r
2459 else flg |= PM_NO_PET;
\r
2460 if (!(pet && (plev < 50))) flg |= PM_ALLOW_GROUP;
\r
2462 if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, (plev * 3) / 2, SUMMON_ANGEL, flg))
\r
2466 msg_print(_("「ご用でございますか、ご主人様」", "'What is thy bidding... Master?'"));
\r
2470 msg_print(_("「我は汝の下僕にあらず! 悪行者よ、悔い改めよ!」", "Mortal! Repent of thy impiousness."));
\r
2478 if (name) return _("士気高揚", "Heroism");
\r
2479 if (desc) return _("一定時間、ヒーロー気分になる。", "Removes fear, and gives bonus to hit and 10 more HP for a while.");
\r
2484 if (info) return info_duration(base, base);
\r
2488 set_hero(randint1(base) + base, FALSE);
\r
2496 if (name) return _("呪い退散", "Dispel Curse");
\r
2497 if (desc) return _("アイテムにかかった強力な呪いを解除する。", "Removes normal and heavy curse from equipped items.");
\r
2502 if (remove_all_curse())
\r
2504 msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));
\r
2511 if (name) return _("邪悪追放", "Banish Evil");
\r
2512 if (desc) return _("視界内の全ての邪悪なモンスターをテレポートさせる。抵抗されると無効。",
\r
2513 "Teleports all evil monsters in sight away unless resisted.");
\r
2518 if (info) return info_power(power);
\r
2522 if (banish_evil(power))
\r
2524 msg_print(_("神聖な力が邪悪を打ち払った!", "The holy power banishes evil!"));
\r
2531 if (name) return _("ハルマゲドン", "Armageddon");
\r
2532 if (desc) return _("周辺のアイテム、モンスター、地形を破壊する。", "Destroy everything in nearby area.");
\r
2540 destroy_area(p_ptr->y, p_ptr->x, base + randint1(sides), FALSE);
\r
2546 if (name) return _("目には目を", "An Eye for an Eye");
\r
2547 if (desc) return _("一定時間、自分がダメージを受けたときに攻撃を行ったモンスターに対して同等のダメージを与える。",
\r
2548 "Gives special aura for a while. When you are attacked by a monster, the monster are injured with same amount of damage as you take.");
\r
2553 if (info) return info_duration(base, base);
\r
2557 set_tim_eyeeye(randint1(base) + base, FALSE);
\r
2563 if (name) return _("神の怒り", "Wrath of the God");
\r
2564 if (desc) return _("ターゲットの周囲に分解の球を多数落とす。", "Drops many balls of disintegration near the target.");
\r
2567 HIT_POINT dam = plev * 3 + 25;
\r
2570 if (info) return info_multi_damage(dam);
\r
2574 if (!cast_wrath_of_the_god(dam, rad)) return NULL;
\r
2580 if (name) return _("神威", "Divine Intervention");
\r
2581 if (desc) return _("隣接するモンスターに聖なるダメージを与え、視界内のモンスターにダメージ、減速、朦朧、混乱、恐怖、眠りを与える。さらに体力を回復する。",
\r
2582 "Damages all adjacent monsters with holy power. Damages and attempt to slow, stun, confuse, scare and freeze all monsters in sight. And heals HP.");
\r
2585 int b_dam = plev * 11;
\r
2586 int d_dam = plev * 4;
\r
2588 int power = plev * 4;
\r
2590 if (info) return format(_("回%d/損%d+%d", "h%d/dm%d+%d"), heal, d_dam, b_dam/2);
\r
2593 project(0, 1, p_ptr->y, p_ptr->x, b_dam, GF_HOLY_FIRE, PROJECT_KILL, -1);
\r
2594 dispel_monsters(d_dam);
\r
2595 slow_monsters(plev);
\r
2596 stun_monsters(power);
\r
2597 confuse_monsters(power);
\r
2598 turn_monsters(power);
\r
2599 stasis_monsters(power);
\r
2606 if (name) return _("聖戦", "Crusade");
\r
2607 if (desc) return _("視界内の善良なモンスターをペットにしようとし、ならなかった場合及び善良でないモンスターを恐怖させる。さらに多数の加速された騎士を召喚し、ヒーロー、祝福、加速、対邪悪結界を得る。",
\r
2608 "Attempts to charm all good monsters in sight, and scare all non-charmed monsters, and summons great number of knights, and gives heroism, bless, speed and protection from evil.");
\r
2614 int sp_sides = 20 + plev;
\r
2615 int sp_base = plev;
\r
2619 for (i = 0; i < 12; i++)
\r
2622 POSITION my = 0, mx = 0;
\r
2626 scatter(&my, &mx, p_ptr->y, p_ptr->x, 4, 0);
\r
2628 /* Require empty grids */
\r
2629 if (cave_empty_bold2(my, mx)) break;
\r
2631 if (attempt < 0) continue;
\r
2632 summon_specific(-1, my, mx, plev, SUMMON_KNIGHTS, (PM_ALLOW_GROUP | PM_FORCE_PET | PM_HASTE));
\r
2634 set_hero(randint1(base) + base, FALSE);
\r
2635 set_blessed(randint1(base) + base, FALSE);
\r
2636 set_fast(randint1(sp_sides) + sp_base, FALSE);
\r
2637 set_protevil(randint1(base) + base, FALSE);
\r
2650 * @param spell 歌ID
\r
2651 * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST / SPELL_FAIL / SPELL_CONT / SPELL_STOP)
\r
2652 * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST / SPELL_FAIL / SPELL_CONT / SPELL_STOP 時はNULL文字列を返す。
\r
2654 static cptr do_music_spell(SPELL_IDX spell, BIT_FLAGS mode)
\r
2656 bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
\r
2657 bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
\r
2658 bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
\r
2659 bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
\r
2660 bool fail = (mode == SPELL_FAIL) ? TRUE : FALSE;
\r
2661 bool cont = (mode == SPELL_CONT) ? TRUE : FALSE;
\r
2662 bool stop = (mode == SPELL_STOP) ? TRUE : FALSE;
\r
2663 static const char s_dam[] = _("損傷:", "dam ");
\r
2666 int plev = p_ptr->lev;
\r
2671 if (name) return _("遅鈍の歌", "Song of Holding");
\r
2672 if (desc) return _("視界内の全てのモンスターを減速させる。抵抗されると無効。", "Attempts to slow all monsters in sight.");
\r
2674 /* Stop singing before start another */
\r
2675 if (cast || fail) stop_singing();
\r
2679 msg_print(_("ゆっくりとしたメロディを口ずさみ始めた...", "You start humming a slow, steady melody..."));
\r
2680 start_singing(spell, MUSIC_SLOW);
\r
2686 if (info) return info_power(power);
\r
2690 slow_monsters(plev);
\r
2696 if (name) return _("祝福の歌", "Song of Blessing");
\r
2697 if (desc) return _("命中率とACのボーナスを得る。", "Gives bonus to hit and AC for a few turns.");
\r
2699 /* Stop singing before start another */
\r
2700 if (cast || fail) stop_singing();
\r
2704 msg_print(_("厳かなメロディを奏で始めた...", "The holy power of the Music of the Ainur enters you..."));
\r
2705 start_singing(spell, MUSIC_BLESS);
\r
2710 if (!p_ptr->blessed)
\r
2712 msg_print(_("高潔な気分が消え失せた。", "The prayer has expired."));
\r
2719 if (name) return _("崩壊の音色", "Wrecking Note");
\r
2720 if (desc) return _("轟音のボルトを放つ。", "Fires a bolt of sound.");
\r
2722 /* Stop singing before start another */
\r
2723 if (cast || fail) stop_singing();
\r
2726 int dice = 4 + (plev - 1) / 5;
\r
2729 if (info) return info_damage(dice, sides, 0);
\r
2733 if (!get_aim_dir(&dir)) return NULL;
\r
2735 fire_bolt(GF_SOUND, dir, damroll(dice, sides));
\r
2741 if (name) return _("朦朧の旋律", "Stun Pattern");
\r
2742 if (desc) return _("視界内の全てのモンスターを朦朧させる。抵抗されると無効。", "Attempts to stun all monsters in sight.");
\r
2744 /* Stop singing before start another */
\r
2745 if (cast || fail) stop_singing();
\r
2749 msg_print(_("眩惑させるメロディを奏で始めた...", "You weave a pattern of sounds to bewilder and daze..."));
\r
2750 start_singing(spell, MUSIC_STUN);
\r
2754 int dice = plev / 10;
\r
2757 if (info) return info_power_dice(dice, sides);
\r
2761 stun_monsters(damroll(dice, sides));
\r
2768 if (name) return _("生命の流れ", "Flow of Life");
\r
2769 if (desc) return _("体力を少し回復させる。", "Heals HP a little.");
\r
2771 /* Stop singing before start another */
\r
2772 if (cast || fail) stop_singing();
\r
2776 msg_print(_("歌を通して体に活気が戻ってきた...", "Life flows through you as you sing a song of healing..."));
\r
2777 start_singing(spell, MUSIC_L_LIFE);
\r
2784 if (info) return info_heal(dice, sides, 0);
\r
2788 hp_player(damroll(dice, sides));
\r
2795 if (name) return _("太陽の歌", "Song of the Sun");
\r
2796 if (desc) return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently.");
\r
2798 /* Stop singing before start another */
\r
2799 if (cast || fail) stop_singing();
\r
2803 int sides = plev / 2;
\r
2804 int rad = plev / 10 + 1;
\r
2806 if (info) return info_damage(dice, sides, 0);
\r
2810 msg_print(_("光り輝く歌が辺りを照らした。", "Your uplifting song brings brightness to dark places..."));
\r
2811 lite_area(damroll(dice, sides), rad);
\r
2817 if (name) return _("恐怖の歌", "Song of Fear");
\r
2818 if (desc) return _("視界内の全てのモンスターを恐怖させる。抵抗されると無効。", "Attempts to scare all monsters in sight.");
\r
2820 /* Stop singing before start another */
\r
2821 if (cast || fail) stop_singing();
\r
2825 msg_print(_("おどろおどろしいメロディを奏で始めた...", "You start weaving a fearful pattern..."));
\r
2826 start_singing(spell, MUSIC_FEAR);
\r
2832 if (info) return info_power(power);
\r
2836 project_hack(GF_TURN_ALL, power);
\r
2843 if (name) return _("戦いの歌", "Heroic Ballad");
\r
2844 if (desc) return _("ヒーロー気分になる。", "Removes fear, and gives bonus to hit and 10 more HP for a while.");
\r
2846 /* Stop singing before start another */
\r
2847 if (cast || fail) stop_singing();
\r
2851 msg_print(_("激しい戦いの歌を歌った...", "You start singing a song of intense fighting..."));
\r
2853 (void)hp_player(10);
\r
2854 (void)set_afraid(0);
\r
2856 /* Recalculate hitpoints */
\r
2857 p_ptr->update |= (PU_HP);
\r
2859 start_singing(spell, MUSIC_HERO);
\r
2866 msg_print(_("ヒーローの気分が消え失せた。", "The heroism wears off."));
\r
2867 /* Recalculate hitpoints */
\r
2868 p_ptr->update |= (PU_HP);
\r
2875 if (name) return _("霊的知覚", "Clairaudience");
\r
2876 if (desc) return _("近くの罠/扉/階段を感知する。レベル15で全てのモンスター、20で財宝とアイテムを感知できるようになる。レベル25で周辺の地形を感知し、40でその階全体を永久に照らし、ダンジョン内のすべてのアイテムを感知する。この効果は歌い続けることで順に起こる。",
\r
2877 "Detects traps, doors and stairs in your vicinity. And detects all monsters at level 15, treasures and items at level 20. Maps nearby area at level 25. Lights and know the whole level at level 40. These effects occurs by turns while this song continues.");
\r
2879 /* Stop singing before start another */
\r
2880 if (cast || fail) stop_singing();
\r
2884 msg_print(_("静かな音楽が感覚を研ぎ澄まさせた...", "Your quiet music sharpens your sense of hearing..."));
\r
2885 /* Hack -- Initialize the turn count */
\r
2886 SINGING_COUNT(p_ptr) = 0;
\r
2887 start_singing(spell, MUSIC_DETECT);
\r
2891 int rad = DETECT_RAD_DEFAULT;
\r
2893 if (info) return info_radius(rad);
\r
2897 int count = SINGING_COUNT(p_ptr);
\r
2899 if (count >= 19) wiz_lite(FALSE);
\r
2903 if (plev > 39 && count < 19)
\r
2904 SINGING_COUNT(p_ptr) = count + 1;
\r
2908 /* There are too many hidden treasure. So... */
\r
2909 /* detect_treasure(rad); */
\r
2910 detect_objects_gold(rad);
\r
2911 detect_objects_normal(rad);
\r
2913 if (plev > 24 && count < 11)
\r
2914 SINGING_COUNT(p_ptr) = count + 1;
\r
2918 detect_monsters_invis(rad);
\r
2919 detect_monsters_normal(rad);
\r
2921 if (plev > 19 && count < 6)
\r
2922 SINGING_COUNT(p_ptr) = count + 1;
\r
2924 detect_traps(rad, TRUE);
\r
2925 detect_doors(rad);
\r
2926 detect_stairs(rad);
\r
2928 if (plev > 14 && count < 3)
\r
2929 SINGING_COUNT(p_ptr) = count + 1;
\r
2936 if (name) return _("魂の歌", "Soul Shriek");
\r
2937 if (desc) return _("視界内の全てのモンスターに対して精神攻撃を行う。", "Damages all monsters in sight with PSI damages.");
\r
2939 /* Stop singing before start another */
\r
2940 if (cast || fail) stop_singing();
\r
2944 msg_print(_("精神を捻じ曲げる歌を歌った...", "You start singing a song of soul in pain..."));
\r
2945 start_singing(spell, MUSIC_PSI);
\r
2950 int sides = plev * 3 / 2;
\r
2952 if (info) return info_damage(dice, sides, 0);
\r
2956 project_hack(GF_PSI, damroll(dice, sides));
\r
2963 if (name) return _("知識の歌", "Song of Lore");
\r
2964 if (desc) return _("自分のいるマスと隣りのマスに落ちているアイテムを鑑定する。", "Identifies all items which are in the adjacent squares.");
\r
2966 /* Stop singing before start another */
\r
2967 if (cast || fail) stop_singing();
\r
2971 msg_print(_("この世界の知識が流れ込んできた...", "You recall the rich lore of the world..."));
\r
2972 start_singing(spell, MUSIC_ID);
\r
2978 if (info) return info_radius(rad);
\r
2982 * MP不足で鑑定が発動される前に歌が中断してしまうのを防止。
\r
2986 project(0, rad, p_ptr->y, p_ptr->x, 0, GF_IDENTIFY, PROJECT_ITEM, -1);
\r
2993 if (name) return _("隠遁の歌", "Hiding Tune");
\r
2994 if (desc) return _("隠密行動能力を上昇させる。", "Gives improved stealth.");
\r
2996 /* Stop singing before start another */
\r
2997 if (cast || fail) stop_singing();
\r
3001 msg_print(_("あなたの姿が景色にとけこんでいった...", "Your song carries you beyond the sight of mortal eyes..."));
\r
3002 start_singing(spell, MUSIC_STEALTH);
\r
3007 if (!p_ptr->tim_stealth)
\r
3009 msg_print(_("姿がはっきりと見えるようになった。", "You are no longer hided."));
\r
3016 if (name) return _("幻影の旋律", "Illusion Pattern");
\r
3017 if (desc) return _("視界内の全てのモンスターを混乱させる。抵抗されると無効。", "Attempts to confuse all monsters in sight.");
\r
3019 /* Stop singing before start another */
\r
3020 if (cast || fail) stop_singing();
\r
3024 msg_print(_("辺り一面に幻影が現れた...", "You weave a pattern of sounds to beguile and confuse..."));
\r
3025 start_singing(spell, MUSIC_CONF);
\r
3029 int power = plev * 2;
\r
3031 if (info) return info_power(power);
\r
3035 confuse_monsters(power);
\r
3042 if (name) return _("破滅の叫び", "Doomcall");
\r
3043 if (desc) return _("視界内の全てのモンスターに対して轟音攻撃を行う。", "Damages all monsters in sight with booming sound.");
\r
3045 /* Stop singing before start another */
\r
3046 if (cast || fail) stop_singing();
\r
3050 msg_print(_("轟音が響いた...", "The fury of the Downfall of Numenor lashes out..."));
\r
3051 start_singing(spell, MUSIC_SOUND);
\r
3055 int dice = 10 + plev / 5;
\r
3058 if (info) return info_damage(dice, sides, 0);
\r
3062 project_hack(GF_SOUND, damroll(dice, sides));
\r
3069 if (name) return _("フィリエルの歌", "Firiel's Song");
\r
3070 if (desc) return _("周囲の死体や骨を生き返す。", "Resurrects nearby corpse and skeletons. And makes these your pets.");
\r
3073 /* Stop singing before start another */
\r
3074 if (cast || fail) stop_singing();
\r
3078 msg_print(_("生命と復活のテーマを奏で始めた...", "The themes of life and revival are woven into your song..."));
\r
3079 animate_dead(0, p_ptr->y, p_ptr->x);
\r
3085 if (name) return _("旅の仲間", "Fellowship Chant");
\r
3086 if (desc) return _("視界内の全てのモンスターを魅了する。抵抗されると無効。", "Attempts to charm all monsters in sight.");
\r
3088 /* Stop singing before start another */
\r
3089 if (cast || fail) stop_singing();
\r
3093 msg_print(_("安らかなメロディを奏で始めた...", "You weave a slow, soothing melody of imploration..."));
\r
3094 start_singing(spell, MUSIC_CHARM);
\r
3098 int dice = 10 + plev / 15;
\r
3101 if (info) return info_power_dice(dice, sides);
\r
3105 charm_monsters(damroll(dice, sides));
\r
3112 if (name) return _("分解音波", "Sound of disintegration");
\r
3113 if (desc) return _("壁を掘り進む。自分の足元のアイテムは蒸発する。", "Makes you be able to burrow into walls. Objects under your feet evaporate.");
\r
3115 /* Stop singing before start another */
\r
3116 if (cast || fail) stop_singing();
\r
3120 msg_print(_("粉砕するメロディを奏で始めた...", "You weave a violent pattern of sounds to break wall."));
\r
3121 start_singing(spell, MUSIC_WALL);
\r
3127 * MP不足で効果が発動される前に歌が中断してしまうのを防止。
\r
3131 project(0, 0, p_ptr->y, p_ptr->x,
\r
3132 0, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM | PROJECT_HIDE, -1);
\r
3138 if (name) return _("元素耐性", "Finrod's Resistance");
\r
3139 if (desc) return _("酸、電撃、炎、冷気、毒に対する耐性を得る。装備による耐性に累積する。",
\r
3140 "Gives resistance to fire, cold, electricity, acid and poison. These resistances can be added to which from equipment for more powerful resistances.");
\r
3142 /* Stop singing before start another */
\r
3143 if (cast || fail) stop_singing();
\r
3147 msg_print(_("元素の力に対する忍耐の歌を歌った。", "You sing a song of perseverance against powers..."));
\r
3148 start_singing(spell, MUSIC_RESIST);
\r
3153 if (!p_ptr->oppose_acid)
\r
3155 msg_print(_("酸への耐性が薄れた気がする。", "You feel less resistant to acid."));
\r
3158 if (!p_ptr->oppose_elec)
\r
3160 msg_print(_("電撃への耐性が薄れた気がする。", "You feel less resistant to elec."));
\r
3163 if (!p_ptr->oppose_fire)
\r
3165 msg_print(_("火への耐性が薄れた気がする。", "You feel less resistant to fire."));
\r
3168 if (!p_ptr->oppose_cold)
\r
3170 msg_print(_("冷気への耐性が薄れた気がする。", "You feel less resistant to cold."));
\r
3173 if (!p_ptr->oppose_pois)
\r
3175 msg_print(_("毒への耐性が薄れた気がする。", "You feel less resistant to pois."));
\r
3182 if (name) return _("ホビットのメロディ", "Hobbit Melodies");
\r
3183 if (desc) return _("加速する。", "Hastes you.");
\r
3185 /* Stop singing before start another */
\r
3186 if (cast || fail) stop_singing();
\r
3190 msg_print(_("軽快な歌を口ずさみ始めた...", "You start singing joyful pop song..."));
\r
3191 start_singing(spell, MUSIC_SPEED);
\r
3198 msg_print(_("動きの素早さがなくなったようだ。", "You feel yourself slow down."));
\r
3205 if (name) return _("歪んだ世界", "World Contortion");
\r
3206 if (desc) return _("近くのモンスターをテレポートさせる。抵抗されると無効。", "Teleports all nearby monsters away unless resisted.");
\r
3209 int rad = plev / 15 + 1;
\r
3210 int power = plev * 3 + 1;
\r
3212 if (info) return info_radius(rad);
\r
3214 /* Stop singing before start another */
\r
3215 if (cast || fail) stop_singing();
\r
3219 msg_print(_("歌が空間を歪めた...", "Reality whirls wildly as you sing a dizzying melody..."));
\r
3220 project(0, rad, p_ptr->y, p_ptr->x, power, GF_AWAY_ALL, PROJECT_KILL, -1);
\r
3226 if (name) return _("退散の歌", "Dispelling chant");
\r
3227 if (desc) return _("視界内の全てのモンスターにダメージを与える。邪悪なモンスターに特に大きなダメージを与える。",
\r
3228 "Damages all monsters in sight. Hurts evil monsters greatly.");
\r
3230 /* Stop singing before start another */
\r
3231 if (cast || fail) stop_singing();
\r
3235 msg_print(_("耐えられない不協和音が敵を責め立てた...", "You cry out in an ear-wracking voice..."));
\r
3236 start_singing(spell, MUSIC_DISPEL);
\r
3240 int m_sides = plev * 3;
\r
3241 int e_sides = plev * 3;
\r
3243 if (info) return format("%s1d%d+1d%d", s_dam, m_sides, e_sides);
\r
3247 dispel_monsters(randint1(m_sides));
\r
3248 dispel_evil(randint1(e_sides));
\r
3254 if (name) return _("サルマンの甘言", "The Voice of Saruman");
\r
3255 if (desc) return _("視界内の全てのモンスターを減速させ、眠らせようとする。抵抗されると無効。", "Attempts to slow and sleep all monsters in sight.");
\r
3257 /* Stop singing before start another */
\r
3258 if (cast || fail) stop_singing();
\r
3262 msg_print(_("優しく、魅力的な歌を口ずさみ始めた...", "You start humming a gentle and attractive song..."));
\r
3263 start_singing(spell, MUSIC_SARUMAN);
\r
3269 if (info) return info_power(power);
\r
3273 slow_monsters(plev);
\r
3274 sleep_monsters(plev);
\r
3281 if (name) return _("嵐の音色", "Song of the Tempest");
\r
3282 if (desc) return _("轟音のビームを放つ。", "Fires a beam of sound.");
\r
3285 int dice = 15 + (plev - 1) / 2;
\r
3288 if (info) return info_damage(dice, sides, 0);
\r
3290 /* Stop singing before start another */
\r
3291 if (cast || fail) stop_singing();
\r
3295 if (!get_aim_dir(&dir)) return NULL;
\r
3297 fire_beam(GF_SOUND, dir, damroll(dice, sides));
\r
3303 if (name) return _("もう一つの世界", "Ambarkanta");
\r
3304 if (desc) return _("現在の階を再構成する。", "Recreates current dungeon level.");
\r
3310 if (info) return info_delay(base, sides);
\r
3312 /* Stop singing before start another */
\r
3313 if (cast || fail) stop_singing();
\r
3317 msg_print(_("周囲が変化し始めた...", "You sing of the primeval shaping of Middle-earth..."));
\r
3324 if (name) return _("破壊の旋律", "Wrecking Pattern");
\r
3325 if (desc) return _("周囲のダンジョンを揺らし、壁と床をランダムに入れ変える。",
\r
3326 "Shakes dungeon structure, and results in random swapping of floors and walls.");
\r
3328 /* Stop singing before start another */
\r
3329 if (cast || fail) stop_singing();
\r
3333 msg_print(_("破壊的な歌が響きわたった...", "You weave a pattern of sounds to contort and shatter..."));
\r
3334 start_singing(spell, MUSIC_QUAKE);
\r
3340 if (info) return info_radius(rad);
\r
3344 earthquake(p_ptr->y, p_ptr->x, 10);
\r
3352 if (name) return _("停滞の歌", "Stationary Shriek");
\r
3353 if (desc) return _("視界内の全てのモンスターを麻痺させようとする。抵抗されると無効。", "Attempts to freeze all monsters in sight.");
\r
3355 /* Stop singing before start another */
\r
3356 if (cast || fail) stop_singing();
\r
3360 msg_print(_("ゆっくりとしたメロディを奏で始めた...", "You weave a very slow pattern which is almost likely to stop..."));
\r
3361 start_singing(spell, MUSIC_STASIS);
\r
3365 int power = plev * 4;
\r
3367 if (info) return info_power(power);
\r
3371 stasis_monsters(power);
\r
3378 if (name) return _("守りの歌", "Endurance");
\r
3379 if (desc) return _("自分のいる床の上に、モンスターが通り抜けたり召喚されたりすることができなくなるルーンを描く。",
\r
3380 "Sets a glyph on the floor beneath you. Monsters cannot attack you if you are on a glyph, but can try to break glyph.");
\r
3383 /* Stop singing before start another */
\r
3384 if (cast || fail) stop_singing();
\r
3388 msg_print(_("歌が神聖な場を作り出した...", "The holy power of the Music is creating sacred field..."));
\r
3395 if (name) return _("英雄の詩", "The Hero's Poem");
\r
3396 if (desc) return _("加速し、ヒーロー気分になり、視界内の全てのモンスターにダメージを与える。",
\r
3397 "Hastes you. Gives heroism. Damages all monsters in sight.");
\r
3399 /* Stop singing before start another */
\r
3400 if (cast || fail) stop_singing();
\r
3404 msg_print(_("英雄の歌を口ずさんだ...", "You chant a powerful, heroic call to arms..."));
\r
3405 (void)hp_player(10);
\r
3406 (void)set_afraid(0);
\r
3408 /* Recalculate hitpoints */
\r
3409 p_ptr->update |= (PU_HP);
\r
3411 start_singing(spell, MUSIC_SHERO);
\r
3418 msg_print(_("ヒーローの気分が消え失せた。", "The heroism wears off."));
\r
3419 /* Recalculate hitpoints */
\r
3420 p_ptr->update |= (PU_HP);
\r
3425 msg_print(_("動きの素早さがなくなったようだ。", "You feel yourself slow down."));
\r
3431 int sides = plev * 3;
\r
3433 if (info) return info_damage(dice, sides, 0);
\r
3437 dispel_monsters(damroll(dice, sides));
\r
3443 if (name) return _("ヤヴァンナの助け", "Relief of Yavanna");
\r
3444 if (desc) return _("強力な回復の歌で、負傷と朦朧状態も全快する。", "Powerful healing song. Also heals cut and stun completely.");
\r
3446 /* Stop singing before start another */
\r
3447 if (cast || fail) stop_singing();
\r
3451 msg_print(_("歌を通して体に活気が戻ってきた...", "Life flows through you as you sing the song..."));
\r
3452 start_singing(spell, MUSIC_H_LIFE);
\r
3459 if (info) return info_heal(dice, sides, 0);
\r
3463 hp_player(damroll(dice, sides));
\r
3472 if (name) return _("再生の歌", "Goddess' rebirth");
\r
3473 if (desc) return _("すべてのステータスと経験値を回復する。", "Restores all stats and experience.");
\r
3476 /* Stop singing before start another */
\r
3477 if (cast || fail) stop_singing();
\r
3481 msg_print(_("暗黒の中に光と美をふりまいた。体が元の活力を取り戻した。",
\r
3482 "You strewed light and beauty in the dark as you sing. You feel refreshed."));
\r
3483 (void)do_res_stat(A_STR);
\r
3484 (void)do_res_stat(A_INT);
\r
3485 (void)do_res_stat(A_WIS);
\r
3486 (void)do_res_stat(A_DEX);
\r
3487 (void)do_res_stat(A_CON);
\r
3488 (void)do_res_stat(A_CHR);
\r
3489 (void)restore_level();
\r
3495 if (name) return _("サウロンの魔術", "Wizardry of Sauron");
\r
3496 if (desc) return _("非常に強力でごく小さい轟音の球を放つ。", "Fires an extremely powerful tiny ball of sound.");
\r
3499 int dice = 50 + plev;
\r
3503 if (info) return info_damage(dice, sides, 0);
\r
3505 /* Stop singing before start another */
\r
3506 if (cast || fail) stop_singing();
\r
3510 if (!get_aim_dir(&dir)) return NULL;
\r
3512 fire_ball(GF_SOUND, dir, damroll(dice, sides), rad);
\r
3518 if (name) return _("フィンゴルフィンの挑戦", "Fingolfin's Challenge");
\r
3519 if (desc) return _("ダメージを受けなくなるバリアを張る。",
\r
3520 "Generates barrier which completely protect you from almost all damages. Takes a few your turns when the barrier breaks.");
\r
3522 /* Stop singing before start another */
\r
3523 if (cast || fail) stop_singing();
\r
3527 msg_print(_("フィンゴルフィンの冥王への挑戦を歌った...",
\r
3528 "You recall the valor of Fingolfin's challenge to the Dark Lord..."));
\r
3531 p_ptr->redraw |= (PR_MAP);
\r
3533 /* Update monsters */
\r
3534 p_ptr->update |= (PU_MONSTERS);
\r
3536 /* Window stuff */
\r
3537 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
\r
3539 start_singing(spell, MUSIC_INVULN);
\r
3544 if (!p_ptr->invuln)
\r
3546 msg_print(_("無敵ではなくなった。", "The invulnerability wears off."));
\r
3548 p_ptr->redraw |= (PR_MAP);
\r
3550 /* Update monsters */
\r
3551 p_ptr->update |= (PU_MONSTERS);
\r
3553 /* Window stuff */
\r
3554 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
\r
3565 * @brief 剣術の各処理を行う
\r
3566 * @param spell 剣術ID
\r
3567 * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_CAST)
\r
3568 * @return SPELL_NAME / SPELL_DESC 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
\r
3570 static cptr do_hissatsu_spell(SPELL_IDX spell, BIT_FLAGS mode)
\r
3572 bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
\r
3573 bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
\r
3574 bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
\r
3577 int plev = p_ptr->lev;
\r
3582 if (name) return _("飛飯綱", "Tobi-Izuna");
\r
3583 if (desc) return _("2マス離れたところにいるモンスターを攻撃する。", "Attacks a two squares distant monster.");
\r
3587 project_length = 2;
\r
3588 if (!get_aim_dir(&dir)) return NULL;
\r
3590 project_hook(GF_ATTACK, dir, HISSATSU_2, PROJECT_STOP | PROJECT_KILL);
\r
3595 if (name) return _("五月雨斬り", "3-Way Attack");
\r
3596 if (desc) return _("3方向に対して攻撃する。", "Attacks in 3 directions in one time.");
\r
3603 if (!get_rep_dir2(&dir)) return NULL;
\r
3604 if (dir == 5) return NULL;
\r
3606 for (cdir = 0;cdir < 8; cdir++)
\r
3608 if (cdd[cdir] == dir) break;
\r
3611 if (cdir == 8) return NULL;
\r
3613 y = p_ptr->y + ddy_cdd[cdir];
\r
3614 x = p_ptr->x + ddx_cdd[cdir];
\r
3615 if (cave[y][x].m_idx)
\r
3616 py_attack(y, x, 0);
\r
3618 msg_print(_("攻撃は空を切った。", "You attack the empty air."));
\r
3620 y = p_ptr->y + ddy_cdd[(cdir + 7) % 8];
\r
3621 x = p_ptr->x + ddx_cdd[(cdir + 7) % 8];
\r
3622 if (cave[y][x].m_idx)
\r
3623 py_attack(y, x, 0);
\r
3625 msg_print(_("攻撃は空を切った。", "You attack the empty air."));
\r
3627 y = p_ptr->y + ddy_cdd[(cdir + 1) % 8];
\r
3628 x = p_ptr->x + ddx_cdd[(cdir + 1) % 8];
\r
3629 if (cave[y][x].m_idx)
\r
3630 py_attack(y, x, 0);
\r
3632 msg_print(_("攻撃は空を切った。", "You attack the empty air."));
\r
3637 if (name) return _("ブーメラン", "Boomerang");
\r
3638 if (desc) return _("武器を手元に戻ってくるように投げる。戻ってこないこともある。",
\r
3639 "Throws current weapon. And it'll return to your hand unless failed.");
\r
3643 if (!do_cmd_throw(1, TRUE, -1)) return NULL;
\r
3648 if (name) return _("焔霊", "Burning Strike");
\r
3649 if (desc) return _("火炎耐性のないモンスターに大ダメージを与える。", "Attacks a monster with more damage unless it has resistance to fire.");
\r
3655 if (!get_rep_dir2(&dir)) return NULL;
\r
3656 if (dir == 5) return NULL;
\r
3658 y = p_ptr->y + ddy[dir];
\r
3659 x = p_ptr->x + ddx[dir];
\r
3661 if (cave[y][x].m_idx)
\r
3662 py_attack(y, x, HISSATSU_FIRE);
\r
3665 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
\r
3672 if (name) return _("殺気感知", "Detect Ferocity");
\r
3673 if (desc) return _("近くの思考することができるモンスターを感知する。", "Detects all monsters except mindless in your vicinity.");
\r
3677 detect_monsters_mind(DETECT_RAD_DEFAULT);
\r
3682 if (name) return _("みね打ち", "Strike to Stun");
\r
3683 if (desc) return _("相手にダメージを与えないが、朦朧とさせる。", "Attempts to stun a monster in the adjacent.");
\r
3689 if (!get_rep_dir2(&dir)) return NULL;
\r
3690 if (dir == 5) return NULL;
\r
3692 y = p_ptr->y + ddy[dir];
\r
3693 x = p_ptr->x + ddx[dir];
\r
3695 if (cave[y][x].m_idx)
\r
3696 py_attack(y, x, HISSATSU_MINEUCHI);
\r
3699 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
\r
3706 if (name) return _("カウンター", "Counter");
\r
3707 if (desc) return _("相手に攻撃されたときに反撃する。反撃するたびにMPを消費。",
\r
3708 "Prepares to counterattack. When attack by a monster, strikes back using SP each time.");
\r
3712 if (p_ptr->riding)
\r
3714 msg_print(_("乗馬中には無理だ。", "You cannot do it when riding."));
\r
3717 msg_print(_("相手の攻撃に対して身構えた。", "You prepare to counter blow."));
\r
3718 p_ptr->counter = TRUE;
\r
3723 if (name) return _("払い抜け", "Harainuke");
\r
3724 if (desc) return _("攻撃した後、反対側に抜ける。",
\r
3725 "Attacks monster with your weapons normally, then move through counter side of the monster.");
\r
3731 if (p_ptr->riding)
\r
3733 msg_print(_("乗馬中には無理だ。", "You cannot do it when riding."));
\r
3737 if (!get_rep_dir2(&dir)) return NULL;
\r
3739 if (dir == 5) return NULL;
\r
3740 y = p_ptr->y + ddy[dir];
\r
3741 x = p_ptr->x + ddx[dir];
\r
3743 if (!cave[y][x].m_idx)
\r
3745 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
\r
3749 py_attack(y, x, 0);
\r
3751 if (!player_can_enter(cave[y][x].feat, 0) || is_trap(cave[y][x].feat))
\r
3757 if (player_can_enter(cave[y][x].feat, 0) && !is_trap(cave[y][x].feat) && !cave[y][x].m_idx)
\r
3761 /* Move the player */
\r
3762 (void)move_player_effect(y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP);
\r
3768 if (name) return _("サーペンツタン", "Serpent's Tongue");
\r
3769 if (desc) return _("毒耐性のないモンスターに大ダメージを与える。", "Attacks a monster with more damage unless it has resistance to poison.");
\r
3775 if (!get_rep_dir2(&dir)) return NULL;
\r
3776 if (dir == 5) return NULL;
\r
3778 y = p_ptr->y + ddy[dir];
\r
3779 x = p_ptr->x + ddx[dir];
\r
3781 if (cave[y][x].m_idx)
\r
3782 py_attack(y, x, HISSATSU_POISON);
\r
3785 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
\r
3792 if (name) return _("斬魔剣弐の太刀", "Zammaken");
\r
3793 if (desc) return _("生命のない邪悪なモンスターに大ダメージを与えるが、他のモンスターには全く効果がない。",
\r
3794 "Attacks an evil unliving monster with great damage. No effect to other monsters.");
\r
3800 if (!get_rep_dir2(&dir)) return NULL;
\r
3801 if (dir == 5) return NULL;
\r
3803 y = p_ptr->y + ddy[dir];
\r
3804 x = p_ptr->x + ddx[dir];
\r
3806 if (cave[y][x].m_idx)
\r
3807 py_attack(y, x, HISSATSU_ZANMA);
\r
3810 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
\r
3817 if (name) return _("裂風剣", "Wind Blast");
\r
3818 if (desc) return _("攻撃した相手を後方へ吹き飛ばす。", "Attacks an adjacent monster, and blow it away.");
\r
3824 if (!get_rep_dir2(&dir)) return NULL;
\r
3825 if (dir == 5) return NULL;
\r
3827 y = p_ptr->y + ddy[dir];
\r
3828 x = p_ptr->x + ddx[dir];
\r
3830 if (cave[y][x].m_idx)
\r
3831 py_attack(y, x, 0);
\r
3834 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
\r
3837 if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
\r
3841 if (cave[y][x].m_idx)
\r
3844 POSITION ty = y, tx = x;
\r
3845 POSITION oy = y, ox = x;
\r
3846 MONSTER_IDX m_idx = cave[y][x].m_idx;
\r
3847 monster_type *m_ptr = &m_list[m_idx];
\r
3850 monster_desc(m_name, m_ptr, 0);
\r
3852 for (i = 0; i < 5; i++)
\r
3856 if (cave_empty_bold(y, x))
\r
3863 if ((ty != oy) || (tx != ox))
\r
3865 msg_format(_("%sを吹き飛ばした!", "You blow %s away!"), m_name);
\r
3866 cave[oy][ox].m_idx = 0;
\r
3867 cave[ty][tx].m_idx = m_idx;
\r
3871 update_mon(m_idx, TRUE);
\r
3872 lite_spot(oy, ox);
\r
3873 lite_spot(ty, tx);
\r
3875 if (r_info[m_ptr->r_idx].flags7 & (RF7_LITE_MASK | RF7_DARK_MASK))
\r
3876 p_ptr->update |= (PU_MON_LITE);
\r
3883 if (name) return _("刀匠の目利き", "Judge");
\r
3884 if (desc) return _("武器・防具を1つ識別する。レベル45以上で武器・防具の能力を完全に知ることができる。",
\r
3885 "Identifies a weapon or armor. Or *identifies* these at level 45.");
\r
3891 if (!identify_fully(TRUE)) return NULL;
\r
3895 if (!ident_spell(TRUE)) return NULL;
\r
3901 if (name) return _("破岩斬", "Rock Smash");
\r
3902 if (desc) return _("岩を壊し、岩石系のモンスターに大ダメージを与える。", "Breaks rock. Or greatly damage a monster made by rocks.");
\r
3908 if (!get_rep_dir2(&dir)) return NULL;
\r
3909 if (dir == 5) return NULL;
\r
3911 y = p_ptr->y + ddy[dir];
\r
3912 x = p_ptr->x + ddx[dir];
\r
3914 if (cave[y][x].m_idx)
\r
3915 py_attack(y, x, HISSATSU_HAGAN);
\r
3917 if (!cave_have_flag_bold(y, x, FF_HURT_ROCK)) break;
\r
3919 /* Destroy the feature */
\r
3920 cave_alter_feat(y, x, FF_HURT_ROCK);
\r
3922 /* Update some things */
\r
3923 p_ptr->update |= (PU_FLOW);
\r
3928 if (name) return _("乱れ雪月花", "Midare-Setsugekka");
\r
3929 if (desc) return _("攻撃回数が増え、冷気耐性のないモンスターに大ダメージを与える。",
\r
3930 "Attacks a monster with increased number of attacks and more damage unless it has resistance to cold.");
\r
3936 if (!get_rep_dir2(&dir)) return NULL;
\r
3937 if (dir == 5) return NULL;
\r
3939 y = p_ptr->y + ddy[dir];
\r
3940 x = p_ptr->x + ddx[dir];
\r
3942 if (cave[y][x].m_idx)
\r
3943 py_attack(y, x, HISSATSU_COLD);
\r
3946 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
\r
3953 if (name) return _("急所突き", "Spot Aiming");
\r
3954 if (desc) return _("モンスターを一撃で倒す攻撃を繰り出す。失敗すると1点しかダメージを与えられない。",
\r
3955 "Attempts to kill a monster instantly. If failed cause only 1HP of damage.");
\r
3961 if (!get_rep_dir2(&dir)) return NULL;
\r
3962 if (dir == 5) return NULL;
\r
3964 y = p_ptr->y + ddy[dir];
\r
3965 x = p_ptr->x + ddx[dir];
\r
3967 if (cave[y][x].m_idx)
\r
3968 py_attack(y, x, HISSATSU_KYUSHO);
\r
3971 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
\r
3978 if (name) return _("魔神斬り", "Majingiri");
\r
3979 if (desc) return _("会心の一撃で攻撃する。攻撃がかわされやすい。",
\r
3980 "Attempts to attack with critical hit. But this attack is easy to evade for a monster.");
\r
3986 if (!get_rep_dir2(&dir)) return NULL;
\r
3987 if (dir == 5) return NULL;
\r
3989 y = p_ptr->y + ddy[dir];
\r
3990 x = p_ptr->x + ddx[dir];
\r
3992 if (cave[y][x].m_idx)
\r
3993 py_attack(y, x, HISSATSU_MAJIN);
\r
3996 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
\r
4003 if (name) return _("捨て身", "Desperate Attack");
\r
4004 if (desc) return _("強力な攻撃を繰り出す。次のターンまでの間、食らうダメージが増える。",
\r
4005 "Attacks with all of your power. But all damages you take will be doubled for one turn.");
\r
4011 if (!get_rep_dir2(&dir)) return NULL;
\r
4012 if (dir == 5) return NULL;
\r
4014 y = p_ptr->y + ddy[dir];
\r
4015 x = p_ptr->x + ddx[dir];
\r
4017 if (cave[y][x].m_idx)
\r
4018 py_attack(y, x, HISSATSU_SUTEMI);
\r
4021 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
\r
4024 p_ptr->sutemi = TRUE;
\r
4029 if (name) return _("雷撃鷲爪斬", "Lightning Eagle");
\r
4030 if (desc) return _("電撃耐性のないモンスターに非常に大きいダメージを与える。",
\r
4031 "Attacks a monster with more damage unless it has resistance to electricity.");
\r
4037 if (!get_rep_dir2(&dir)) return NULL;
\r
4038 if (dir == 5) return NULL;
\r
4040 y = p_ptr->y + ddy[dir];
\r
4041 x = p_ptr->x + ddx[dir];
\r
4043 if (cave[y][x].m_idx)
\r
4044 py_attack(y, x, HISSATSU_ELEC);
\r
4047 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
\r
4054 if (name) return _("入身", "Rush Attack");
\r
4055 if (desc) return _("素早く相手に近寄り攻撃する。", "Steps close to a monster and attacks at a time.");
\r
4059 if (!rush_attack(NULL)) return NULL;
\r
4064 if (name) return _("赤流渦", "Bloody Maelstrom");
\r
4065 if (desc) return _("自分自身も傷を作りつつ、その傷が深いほど大きい威力で全方向の敵を攻撃できる。生きていないモンスターには効果がない。",
\r
4066 "Attacks all adjacent monsters with power corresponding to your cut status. Then increases your cut status. No effect to unliving monsters.");
\r
4073 monster_type *m_ptr;
\r
4075 if (p_ptr->cut < 300)
\r
4076 set_cut(p_ptr->cut + 300);
\r
4078 set_cut(p_ptr->cut * 2);
\r
4080 for (dir = 0; dir < 8; dir++)
\r
4082 y = p_ptr->y + ddy_ddd[dir];
\r
4083 x = p_ptr->x + ddx_ddd[dir];
\r
4084 c_ptr = &cave[y][x];
\r
4086 /* Get the monster */
\r
4087 m_ptr = &m_list[c_ptr->m_idx];
\r
4089 /* Hack -- attack monsters */
\r
4090 if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))
\r
4092 if (!monster_living(&r_info[m_ptr->r_idx]))
\r
4096 monster_desc(m_name, m_ptr, 0);
\r
4097 msg_format(_("%sには効果がない!", "%s is unharmed!"), m_name);
\r
4099 else py_attack(y, x, HISSATSU_SEKIRYUKA);
\r
4106 if (name) return _("激震撃", "Earthquake Blow");
\r
4107 if (desc) return _("地震を起こす。", "Shakes dungeon structure, and results in random swapping of floors and walls.");
\r
4113 if (!get_rep_dir2(&dir)) return NULL;
\r
4114 if (dir == 5) return NULL;
\r
4116 y = p_ptr->y + ddy[dir];
\r
4117 x = p_ptr->x + ddx[dir];
\r
4119 if (cave[y][x].m_idx)
\r
4120 py_attack(y, x, HISSATSU_QUAKE);
\r
4122 earthquake(p_ptr->y, p_ptr->x, 10);
\r
4127 if (name) return _("地走り", "Crack");
\r
4128 if (desc) return _("衝撃波のビームを放つ。", "Fires a beam of shock wave.");
\r
4132 int total_damage = 0, basedam, i;
\r
4133 u32b flgs[TR_FLAG_SIZE];
\r
4134 object_type *o_ptr;
\r
4135 if (!get_aim_dir(&dir)) return NULL;
\r
4136 msg_print(_("武器を大きく振り下ろした。", "You swing your weapon downward."));
\r
4137 for (i = 0; i < 2; i++)
\r
4141 if (!buki_motteruka(INVEN_RARM+i)) break;
\r
4142 o_ptr = &inventory[INVEN_RARM+i];
\r
4143 basedam = (o_ptr->dd * (o_ptr->ds + 1)) * 50;
\r
4144 damage = o_ptr->to_d * 100;
\r
4145 object_flags(o_ptr, flgs);
\r
4146 if ((o_ptr->name1 == ART_VORPAL_BLADE) || (o_ptr->name1 == ART_CHAINSWORD))
\r
4148 /* vorpal blade */
\r
4152 else if (have_flag(flgs, TR_VORPAL))
\r
4154 /* vorpal flag only */
\r
4158 damage += basedam;
\r
4159 damage *= p_ptr->num_blow[i];
\r
4160 total_damage += damage / 200;
\r
4161 if (i) total_damage = total_damage*7/10;
\r
4163 fire_beam(GF_FORCE, dir, total_damage);
\r
4168 if (name) return _("気迫の雄叫び", "War Cry");
\r
4169 if (desc) return _("視界内の全モンスターに対して轟音の攻撃を行う。さらに、近くにいるモンスターを怒らせる。",
\r
4170 "Damages all monsters in sight with sound. Aggravate nearby monsters.");
\r
4174 msg_print(_("雄叫びをあげた!", "You roar out!"));
\r
4175 project_hack(GF_SOUND, randint1(plev * 3));
\r
4176 aggravate_monsters(0);
\r
4181 if (name) return _("無双三段", "Musou-Sandan");
\r
4182 if (desc) return _("強力な3段攻撃を繰り出す。", "Attacks with powerful 3 strikes.");
\r
4188 if (!get_rep_dir2(&dir)) return NULL;
\r
4189 if (dir == 5) return NULL;
\r
4191 for (i = 0; i < 3; i++)
\r
4195 MONSTER_IDX m_idx;
\r
4197 monster_type *m_ptr;
\r
4199 y = p_ptr->y + ddy[dir];
\r
4200 x = p_ptr->x + ddx[dir];
\r
4201 c_ptr = &cave[y][x];
\r
4204 py_attack(y, x, HISSATSU_3DAN);
\r
4207 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
\r
4211 if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
\r
4216 /* Monster is dead? */
\r
4217 if (!c_ptr->m_idx) break;
\r
4219 ny = y + ddy[dir];
\r
4220 nx = x + ddx[dir];
\r
4221 m_idx = c_ptr->m_idx;
\r
4222 m_ptr = &m_list[m_idx];
\r
4224 /* Monster cannot move back? */
\r
4225 if (!monster_can_enter(ny, nx, &r_info[m_ptr->r_idx], 0))
\r
4228 if (i < 2) msg_print(NULL);
\r
4233 cave[ny][nx].m_idx = m_idx;
\r
4237 update_mon(m_idx, TRUE);
\r
4239 /* Redraw the old spot */
\r
4242 /* Redraw the new spot */
\r
4243 lite_spot(ny, nx);
\r
4245 /* Player can move forward? */
\r
4246 if (player_can_enter(c_ptr->feat, 0))
\r
4248 /* Move the player */
\r
4249 if (!move_player_effect(y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP)) break;
\r
4257 if (i < 2) msg_print(NULL);
\r
4263 if (name) return _("吸血鬼の牙", "Vampire's Fang");
\r
4264 if (desc) return _("攻撃した相手の体力を吸いとり、自分の体力を回復させる。生命を持たないモンスターには通じない。",
\r
4265 "Attacks with vampiric strikes which absorbs HP from a monster and gives them to you. No effect to unliving monsters.");
\r
4271 if (!get_rep_dir2(&dir)) return NULL;
\r
4272 if (dir == 5) return NULL;
\r
4274 y = p_ptr->y + ddy[dir];
\r
4275 x = p_ptr->x + ddx[dir];
\r
4277 if (cave[y][x].m_idx)
\r
4278 py_attack(y, x, HISSATSU_DRAIN);
\r
4281 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
\r
4288 if (name) return _("幻惑", "Moon Dazzling");
\r
4289 if (desc) return _("視界内の起きている全モンスターに朦朧、混乱、眠りを与えようとする。", "Attempts to stun, confuse and sleep all waking monsters.");
\r
4293 msg_print(_("武器を不規則に揺らした...", "You irregularly wave your weapon..."));
\r
4294 project_hack(GF_ENGETSU, plev * 4);
\r
4295 project_hack(GF_ENGETSU, plev * 4);
\r
4296 project_hack(GF_ENGETSU, plev * 4);
\r
4301 if (name) return _("百人斬り", "Hundred Slaughter");
\r
4302 if (desc) return _("連続して入身でモンスターを攻撃する。攻撃するたびにMPを消費。MPがなくなるか、モンスターを倒せなかったら百人斬りは終了する。",
\r
4303 "Performs a series of rush attacks. The series continues while killing each monster in a time and SP remains.");
\r
4307 const int mana_cost_per_monster = 8;
\r
4308 bool is_new = TRUE;
\r
4313 if (!rush_attack(&mdeath)) break;
\r
4316 /* Reserve needed mana point */
\r
4317 p_ptr->csp -= technic_info[REALM_HISSATSU - MIN_TECHNIC][26].smana;
\r
4321 p_ptr->csp -= mana_cost_per_monster;
\r
4323 if (!mdeath) break;
\r
4326 p_ptr->redraw |= PR_MANA;
\r
4329 while (p_ptr->csp > mana_cost_per_monster);
\r
4331 if (is_new) return NULL;
\r
4333 /* Restore reserved mana */
\r
4334 p_ptr->csp += technic_info[REALM_HISSATSU - MIN_TECHNIC][26].smana;
\r
4339 if (name) return _("天翔龍閃", "Dragonic Flash");
\r
4340 if (desc) return _("視界内の場所を指定して、その場所と自分の間にいる全モンスターを攻撃し、その場所に移動する。",
\r
4341 "Runs toward given location while attacking all monsters on the path.");
\r
4347 if (!tgt_pt(&x, &y)) return NULL;
\r
4349 if (!cave_player_teleportable_bold(y, x, 0L) ||
\r
4350 (distance(y, x, p_ptr->y, p_ptr->x) > MAX_SIGHT / 2) ||
\r
4351 !projectable(p_ptr->y, p_ptr->x, y, x))
\r
4353 msg_print(_("失敗!", "You cannot move to that place!"));
\r
4356 if (p_ptr->anti_tele)
\r
4358 msg_print(_("不思議な力がテレポートを防いだ!", "A mysterious force prevents you from teleporting!"));
\r
4361 project(0, 0, y, x, HISSATSU_ISSEN, GF_ATTACK, PROJECT_BEAM | PROJECT_KILL, -1);
\r
4362 teleport_player_to(y, x, 0L);
\r
4367 if (name) return _("二重の剣撃", "Twin Slash");
\r
4368 if (desc) return _("1ターンで2度攻撃を行う。", "double attacks at a time.");
\r
4374 if (!get_rep_dir(&dir, FALSE)) return NULL;
\r
4376 y = p_ptr->y + ddy[dir];
\r
4377 x = p_ptr->x + ddx[dir];
\r
4379 if (cave[y][x].m_idx)
\r
4381 py_attack(y, x, 0);
\r
4382 if (cave[y][x].m_idx)
\r
4385 py_attack(y, x, 0);
\r
4390 msg_print(_("その方向にはモンスターはいません。", "You don't see any monster in this direction"));
\r
4397 if (name) return _("虎伏絶刀勢", "Kofuku-Zettousei");
\r
4398 if (desc) return _("強力な攻撃を行い、近くの場所にも効果が及ぶ。", "Performs a powerful attack which even effect nearby monsters.");
\r
4402 int total_damage = 0, basedam, i;
\r
4404 u32b flgs[TR_FLAG_SIZE];
\r
4405 object_type *o_ptr;
\r
4407 if (!get_rep_dir2(&dir)) return NULL;
\r
4408 if (dir == 5) return NULL;
\r
4410 y = p_ptr->y + ddy[dir];
\r
4411 x = p_ptr->x + ddx[dir];
\r
4413 if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
\r
4415 msg_print(_("なぜか攻撃することができない。", "Something prevent you from attacking."));
\r
4418 msg_print(_("武器を大きく振り下ろした。", "You swing your weapon downward."));
\r
4419 for (i = 0; i < 2; i++)
\r
4422 if (!buki_motteruka(INVEN_RARM+i)) break;
\r
4423 o_ptr = &inventory[INVEN_RARM+i];
\r
4424 basedam = (o_ptr->dd * (o_ptr->ds + 1)) * 50;
\r
4425 damage = o_ptr->to_d * 100;
\r
4426 object_flags(o_ptr, flgs);
\r
4427 if ((o_ptr->name1 == ART_VORPAL_BLADE) || (o_ptr->name1 == ART_CHAINSWORD))
\r
4429 /* vorpal blade */
\r
4433 else if (have_flag(flgs, TR_VORPAL))
\r
4435 /* vorpal flag only */
\r
4439 damage += basedam;
\r
4440 damage += p_ptr->to_d[i] * 100;
\r
4441 damage *= p_ptr->num_blow[i];
\r
4442 total_damage += (damage / 100);
\r
4444 project(0, (cave_have_flag_bold(y, x, FF_PROJECT) ? 5 : 0), y, x, total_damage * 3 / 2, GF_METEOR, PROJECT_KILL | PROJECT_JUMP | PROJECT_ITEM, -1);
\r
4449 if (name) return _("慶雲鬼忍剣", "Keiun-Kininken");
\r
4450 if (desc) return _("自分もダメージをくらうが、相手に非常に大きなダメージを与える。アンデッドには特に効果がある。",
\r
4451 "Attacks a monster with extremely powerful damage. But you also takes some damages. Hurts a undead monster greatly.");
\r
4457 if (!get_rep_dir2(&dir)) return NULL;
\r
4458 if (dir == 5) return NULL;
\r
4460 y = p_ptr->y + ddy[dir];
\r
4461 x = p_ptr->x + ddx[dir];
\r
4463 if (cave[y][x].m_idx)
\r
4464 py_attack(y, x, HISSATSU_UNDEAD);
\r
4467 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
\r
4470 take_hit(DAMAGE_NOESCAPE, 100 + randint1(100), _("慶雲鬼忍剣を使った衝撃", "exhaustion on using Keiun-Kininken"), -1);
\r
4475 if (name) return _("切腹", "Harakiri");
\r
4476 if (desc) return _("「武士道とは、死ぬことと見つけたり。」", "'Busido is found in death'");
\r
4481 if (!get_check(_("本当に自殺しますか?", "Do you really want to commit suicide? "))) return NULL;
\r
4482 /* Special Verification for suicide */
\r
4483 prt(_("確認のため '@' を押して下さい。", "Please verify SUICIDE by typing the '@' sign: "), 0, 0);
\r
4488 if (i != '@') return NULL;
\r
4489 if (p_ptr->total_winner)
\r
4491 take_hit(DAMAGE_FORCE, 9999, "Seppuku", -1);
\r
4492 p_ptr->total_winner = TRUE;
\r
4496 msg_print(_("武士道とは、死ぬことと見つけたり。", "Meaning of Bushi-do is found in the death."));
\r
4497 take_hit(DAMAGE_FORCE, 9999, "Seppuku", -1);
\r
4507 * @brief 呪術領域の武器呪縛の対象にできる武器かどうかを返す。 / An "item_tester_hook" for offer
\r
4508 * @param o_ptr オブジェクト構造体の参照ポインタ
\r
4509 * @return 呪縛可能な武器ならばTRUEを返す
\r
4511 static bool item_tester_hook_weapon_except_bow(object_type *o_ptr)
\r
4513 switch (o_ptr->tval)
\r
4528 * @brief 呪術領域の各処理に使える呪われた装備かどうかを返す。 / An "item_tester_hook" for offer
\r
4529 * @param o_ptr オブジェクト構造体の参照ポインタ
\r
4530 * @return 使える装備ならばTRUEを返す
\r
4532 static bool item_tester_hook_cursed(object_type *o_ptr)
\r
4534 return (bool)(object_is_cursed(o_ptr));
\r
4538 * @brief 呪術領域魔法の各処理を行う
\r
4539 * @param spell 魔法ID
\r
4540 * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST / SPELL_CONT / SPELL_STOP)
\r
4541 * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST / SPELL_CONT / SPELL_STOP 時はNULL文字列を返す。
\r
4543 static cptr do_hex_spell(SPELL_IDX spell, BIT_FLAGS mode)
\r
4545 bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
\r
4546 bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
\r
4547 bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
\r
4548 bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
\r
4549 bool cont = (mode == SPELL_CONT) ? TRUE : FALSE;
\r
4550 bool stop = (mode == SPELL_STOP) ? TRUE : FALSE;
\r
4554 PLAYER_LEVEL plev = p_ptr->lev;
\r
4559 /*** 1st book (0-7) ***/
\r
4561 if (name) return _("邪なる祝福", "Evily blessing");
\r
4562 if (desc) return _("祝福により攻撃精度と防御力が上がる。", "Attempts to increase +to_hit of a weapon and AC");
\r
4565 if (!p_ptr->blessed)
\r
4567 msg_print(_("高潔な気分になった!", "You feel righteous!"));
\r
4572 if (!p_ptr->blessed)
\r
4574 msg_print(_("高潔な気分が消え失せた。", "The prayer has expired."));
\r
4580 if (name) return _("軽傷の治癒", "Cure light wounds");
\r
4581 if (desc) return _("HPや傷を少し回復させる。", "Heals cut and HP a little.");
\r
4582 if (info) return info_heal(1, 10, 0);
\r
4585 msg_print(_("気分が良くなってくる。", "You feel better and better."));
\r
4589 hp_player(damroll(1, 10));
\r
4590 set_cut(p_ptr->cut - 10);
\r
4595 if (name) return _("悪魔のオーラ", "Demonic aura");
\r
4596 if (desc) return _("炎のオーラを身にまとい、回復速度が速くなる。", "Gives fire aura and regeneration.");
\r
4599 msg_print(_("体が炎のオーラで覆われた。", "You have enveloped by fiery aura!"));
\r
4603 msg_print(_("炎のオーラが消え去った。", "Fiery aura disappeared."));
\r
4608 if (name) return _("悪臭霧", "Stinking mist");
\r
4609 if (desc) return _("視界内のモンスターに微弱量の毒のダメージを与える。", "Deals few damages of poison to all monsters in your sight.");
\r
4610 power = plev / 2 + 5;
\r
4611 if (info) return info_damage(1, power, 0);
\r
4614 project_hack(GF_POIS, randint1(power));
\r
4619 if (name) return _("腕力強化", "Extra might");
\r
4620 if (desc) return _("術者の腕力を上昇させる。", "Attempts to increase your strength.");
\r
4623 msg_print(_("何だか力が湧いて来る。", "You feel you get stronger."));
\r
4628 if (name) return _("武器呪縛", "Curse weapon");
\r
4629 if (desc) return _("装備している武器を呪う。", "Curses your weapon.");
\r
4634 char o_name[MAX_NLEN];
\r
4635 object_type *o_ptr;
\r
4636 u32b f[TR_FLAG_SIZE];
\r
4638 item_tester_hook = item_tester_hook_weapon_except_bow;
\r
4639 q = _("どれを呪いますか?", "Which weapon do you curse?");
\r
4640 s = _("武器を装備していない。", "You wield no weapons.");
\r
4642 if (!get_item(&item, q, s, (USE_EQUIP))) return FALSE;
\r
4644 o_ptr = &inventory[item];
\r
4645 object_desc(o_name, o_ptr, OD_NAME_ONLY);
\r
4646 object_flags(o_ptr, f);
\r
4648 if (!get_check(format(_("本当に %s を呪いますか?", "Do you curse %s, really?"), o_name))) return FALSE;
\r
4650 if (!one_in_(3) &&
\r
4651 (object_is_artifact(o_ptr) || have_flag(f, TR_BLESSED)))
\r
4653 msg_format(_("%s は呪いを跳ね返した。", "%s resists the effect."), o_name);
\r
4656 if (o_ptr->to_d > 0)
\r
4658 o_ptr->to_d -= randint1(3) % 2;
\r
4659 if (o_ptr->to_d < 0) o_ptr->to_d = 0;
\r
4661 if (o_ptr->to_h > 0)
\r
4663 o_ptr->to_h -= randint1(3) % 2;
\r
4664 if (o_ptr->to_h < 0) o_ptr->to_h = 0;
\r
4666 if (o_ptr->to_a > 0)
\r
4668 o_ptr->to_a -= randint1(3) % 2;
\r
4669 if (o_ptr->to_a < 0) o_ptr->to_a = 0;
\r
4671 msg_format(_("%s は劣化してしまった。", "Your %s was disenchanted!"), o_name);
\r
4676 int curse_rank = 0;
\r
4677 msg_format(_("恐怖の暗黒オーラがあなたの%sを包み込んだ!", "A terrible black aura blasts your %s!"), o_name);
\r
4678 o_ptr->curse_flags |= (TRC_CURSED);
\r
4680 if (object_is_artifact(o_ptr) || object_is_ego(o_ptr))
\r
4683 if (one_in_(3)) o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
\r
4686 o_ptr->curse_flags |= (TRC_TY_CURSE);
\r
4687 if (one_in_(666)) o_ptr->curse_flags |= (TRC_PERMA_CURSE);
\r
4689 add_flag(o_ptr->art_flags, TR_AGGRAVATE);
\r
4690 add_flag(o_ptr->art_flags, TR_VORPAL);
\r
4691 add_flag(o_ptr->art_flags, TR_VAMPIRIC);
\r
4692 msg_print(_("血だ!血だ!血だ!", "Blood, Blood, Blood!"));
\r
4697 o_ptr->curse_flags |= get_curse(curse_rank, o_ptr);
\r
4700 p_ptr->update |= (PU_BONUS);
\r
4706 if (name) return _("邪悪感知", "Evil detection");
\r
4707 if (desc) return _("周囲の邪悪なモンスターを感知する。", "Detects evil monsters.");
\r
4708 if (info) return info_range(MAX_SIGHT);
\r
4711 msg_print(_("邪悪な生物の存在を感じ取ろうとした。", "You attend to the presence of evil creatures."));
\r
4716 if (name) return _("我慢", "Patience");
\r
4717 if (desc) return _("数ターン攻撃を耐えた後、受けたダメージを地獄の業火として周囲に放出する。",
\r
4718 "Bursts hell fire strongly after patients any damage while few turns.");
\r
4719 power = MIN(200, (HEX_REVENGE_POWER(p_ptr) * 2));
\r
4720 if (info) return info_damage(0, 0, power);
\r
4723 int a = 3 - (p_ptr->pspeed - 100) / 10;
\r
4724 MAGIC_NUM2 r = 3 + randint1(3) + MAX(0, MIN(3, a));
\r
4726 if (HEX_REVENGE_TURN(p_ptr) > 0)
\r
4728 msg_print(_("すでに我慢をしている。", "You are already patienting."));
\r
4732 HEX_REVENGE_TYPE(p_ptr) = 1;
\r
4733 HEX_REVENGE_TURN(p_ptr) = r;
\r
4734 HEX_REVENGE_POWER(p_ptr) = 0;
\r
4735 msg_print(_("じっと耐えることにした。", "You decide to patient all damages."));
\r
4740 int rad = 2 + (power / 50);
\r
4742 HEX_REVENGE_TURN(p_ptr)--;
\r
4744 if ((HEX_REVENGE_TURN(p_ptr) <= 0) || (power >= 200))
\r
4746 msg_print(_("我慢が解かれた!", "Time for end of patioence!"));
\r
4749 project(0, rad, p_ptr->y, p_ptr->x, power, GF_HELL_FIRE,
\r
4750 (PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL), -1);
\r
4752 if (p_ptr->wizard)
\r
4754 msg_format(_("%d点のダメージを返した。", "You return %d damages."), power);
\r
4758 HEX_REVENGE_TYPE(p_ptr) = 0;
\r
4759 HEX_REVENGE_TURN(p_ptr) = 0;
\r
4760 HEX_REVENGE_POWER(p_ptr) = 0;
\r
4765 /*** 2nd book (8-15) ***/
\r
4767 if (name) return _("氷の鎧", "Ice armor");
\r
4768 if (desc) return _("氷のオーラを身にまとい、防御力が上昇する。", "Gives fire aura and bonus to AC.");
\r
4771 msg_print(_("体が氷の鎧で覆われた。", "You have enveloped by ice armor!"));
\r
4775 msg_print(_("氷の鎧が消え去った。", "Ice armor disappeared."));
\r
4780 if (name) return _("重傷の治癒", "Cure serious wounds");
\r
4781 if (desc) return _("体力や傷を多少回復させる。", "Heals cut and HP more.");
\r
4782 if (info) return info_heal(2, 10, 0);
\r
4785 msg_print(_("気分が良くなってくる。", "You feel better and better."));
\r
4789 hp_player(damroll(2, 10));
\r
4790 set_cut((p_ptr->cut / 2) - 10);
\r
4795 if (name) return _("薬品吸入", "Inhail potion");
\r
4796 if (desc) return _("呪文詠唱を中止することなく、薬の効果を得ることができる。", "Quaffs a potion without canceling of casting a spell.");
\r
4799 CASTING_HEX_FLAGS(p_ptr) |= (1L << HEX_INHAIL);
\r
4800 do_cmd_quaff_potion();
\r
4801 CASTING_HEX_FLAGS(p_ptr) &= ~(1L << HEX_INHAIL);
\r
4807 if (name) return _("衰弱の霧", "Hypodynamic mist");
\r
4808 if (desc) return _("視界内のモンスターに微弱量の衰弱属性のダメージを与える。",
\r
4809 "Deals few damages of hypodynamia to all monsters in your sight.");
\r
4810 power = (plev / 2) + 5;
\r
4811 if (info) return info_damage(1, power, 0);
\r
4814 project_hack(GF_HYPODYNAMIA, randint1(power));
\r
4819 if (name) return _("魔剣化", "Swords to runeswords");
\r
4820 if (desc) return _("武器の攻撃力を上げる。切れ味を得、呪いに応じて与えるダメージが上昇し、善良なモンスターに対するダメージが2倍になる。",
\r
4821 "Gives vorpal ability to your weapon. Increases damages by your weapon acccording to curse of your weapon.");
\r
4825 msg_print("あなたの武器が黒く輝いた。");
\r
4827 if (!empty_hands(FALSE))
\r
4828 msg_print("Your weapons glow bright black.");
\r
4830 msg_print("Your weapon glows bright black.");
\r
4836 msg_print("武器の輝きが消え去った。");
\r
4838 msg_format("Brightness of weapon%s disappeared.", (empty_hands(FALSE)) ? "" : "s");
\r
4844 if (name) return _("混乱の手", "Touch of confusion");
\r
4845 if (desc) return _("攻撃した際モンスターを混乱させる。", "Confuses a monster when you attack.");
\r
4848 msg_print(_("あなたの手が赤く輝き始めた。", "Your hands glow bright red."));
\r
4852 msg_print(_("手の輝きがなくなった。", "Brightness on your hands disappeard."));
\r
4857 if (name) return _("肉体強化", "Building up");
\r
4858 if (desc) return _("術者の腕力、器用さ、耐久力を上昇させる。攻撃回数の上限を 1 増加させる。",
\r
4859 "Attempts to increases your strength, dexterity and constitusion.");
\r
4862 msg_print(_("身体が強くなった気がした。", "You feel your body is developed more now."));
\r
4867 if (name) return _("反テレポート結界", "Anti teleport barrier");
\r
4868 if (desc) return _("視界内のモンスターのテレポートを阻害するバリアを張る。", "Obstructs all teleportations by monsters in your sight.");
\r
4869 power = plev * 3 / 2;
\r
4870 if (info) return info_power(power);
\r
4873 msg_print(_("テレポートを防ぐ呪いをかけた。", "You feel anyone can not teleport except you."));
\r
4877 /*** 3rd book (16-23) ***/
\r
4879 if (name) return _("衝撃のクローク", "Cloak of shock");
\r
4880 if (desc) return _("電気のオーラを身にまとい、動きが速くなる。", "Gives lightning aura and a bonus to speed.");
\r
4883 msg_print(_("体が稲妻のオーラで覆われた。", "You have enveloped by electrical aura!"));
\r
4887 msg_print(_("稲妻のオーラが消え去った。", "Electrical aura disappeared."));
\r
4892 if (name) return _("致命傷の治癒", "Cure critical wounds");
\r
4893 if (desc) return _("体力や傷を回復させる。", "Heals cut and HP greatry.");
\r
4894 if (info) return info_heal(4, 10, 0);
\r
4897 msg_print(_("気分が良くなってくる。", "You feel better and better."));
\r
4901 hp_player(damroll(4, 10));
\r
4909 if (name) return _("呪力封入", "Recharging");
\r
4910 if (desc) return _("魔法の道具に魔力を再充填する。", "Recharges a magic device.");
\r
4912 if (info) return info_power(power);
\r
4915 if (!recharge(power)) return NULL;
\r
4921 if (name) return _("死者復活", "Animate Dead");
\r
4922 if (desc) return _("死体を蘇らせてペットにする。", "Raises corpses and skeletons from dead.");
\r
4925 msg_print(_("死者への呼びかけを始めた。", "You start to call deads.!"));
\r
4929 animate_dead(0, p_ptr->y, p_ptr->x);
\r
4934 if (name) return _("防具呪縛", "Curse armor");
\r
4935 if (desc) return _("装備している防具に呪いをかける。", "Curse a piece of armour that you wielding.");
\r
4940 char o_name[MAX_NLEN];
\r
4941 object_type *o_ptr;
\r
4942 u32b f[TR_FLAG_SIZE];
\r
4944 item_tester_hook = object_is_armour;
\r
4945 q = _("どれを呪いますか?", "Which piece of armour do you curse?");
\r
4946 s = _("防具を装備していない。", "You wield no piece of armours.");
\r
4948 if (!get_item(&item, q, s, (USE_EQUIP))) return FALSE;
\r
4950 o_ptr = &inventory[item];
\r
4951 object_desc(o_name, o_ptr, OD_NAME_ONLY);
\r
4952 object_flags(o_ptr, f);
\r
4954 if (!get_check(format(_("本当に %s を呪いますか?", "Do you curse %s, really?"), o_name))) return FALSE;
\r
4956 if (!one_in_(3) &&
\r
4957 (object_is_artifact(o_ptr) || have_flag(f, TR_BLESSED)))
\r
4959 msg_format(_("%s は呪いを跳ね返した。", "%s resists the effect."), o_name);
\r
4962 if (o_ptr->to_d > 0)
\r
4964 o_ptr->to_d -= randint1(3) % 2;
\r
4965 if (o_ptr->to_d < 0) o_ptr->to_d = 0;
\r
4967 if (o_ptr->to_h > 0)
\r
4969 o_ptr->to_h -= randint1(3) % 2;
\r
4970 if (o_ptr->to_h < 0) o_ptr->to_h = 0;
\r
4972 if (o_ptr->to_a > 0)
\r
4974 o_ptr->to_a -= randint1(3) % 2;
\r
4975 if (o_ptr->to_a < 0) o_ptr->to_a = 0;
\r
4977 msg_format(_("%s は劣化してしまった。", "Your %s was disenchanted!"), o_name);
\r
4982 int curse_rank = 0;
\r
4983 msg_format(_("恐怖の暗黒オーラがあなたの%sを包み込んだ!", "A terrible black aura blasts your %s!"), o_name);
\r
4984 o_ptr->curse_flags |= (TRC_CURSED);
\r
4986 if (object_is_artifact(o_ptr) || object_is_ego(o_ptr))
\r
4989 if (one_in_(3)) o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
\r
4992 o_ptr->curse_flags |= (TRC_TY_CURSE);
\r
4993 if (one_in_(666)) o_ptr->curse_flags |= (TRC_PERMA_CURSE);
\r
4995 add_flag(o_ptr->art_flags, TR_AGGRAVATE);
\r
4996 add_flag(o_ptr->art_flags, TR_RES_POIS);
\r
4997 add_flag(o_ptr->art_flags, TR_RES_DARK);
\r
4998 add_flag(o_ptr->art_flags, TR_RES_NETHER);
\r
4999 msg_print(_("血だ!血だ!血だ!", "Blood, Blood, Blood!"));
\r
5004 o_ptr->curse_flags |= get_curse(curse_rank, o_ptr);
\r
5007 p_ptr->update |= (PU_BONUS);
\r
5013 if (name) return _("影のクローク", "Cloak of shadow");
\r
5014 if (desc) return _("影のオーラを身にまとい、敵に影のダメージを与える。", "Gives aura of shadow.");
\r
5017 object_type *o_ptr = &inventory[INVEN_OUTER];
\r
5019 if (!o_ptr->k_idx)
\r
5021 msg_print(_("クロークを身につけていない!", "You don't ware any cloak."));
\r
5024 else if (!object_is_cursed(o_ptr))
\r
5026 msg_print(_("クロークは呪われていない!", "Your cloak is not cursed."));
\r
5031 msg_print(_("影のオーラを身にまとった。", "You have enveloped by shadow aura!"));
\r
5036 object_type *o_ptr = &inventory[INVEN_OUTER];
\r
5038 if ((!o_ptr->k_idx) || (!object_is_cursed(o_ptr)))
\r
5040 do_spell(REALM_HEX, spell, SPELL_STOP);
\r
5041 CASTING_HEX_FLAGS(p_ptr) &= ~(1L << spell);
\r
5042 CASTING_HEX_NUM(p_ptr)--;
\r
5043 if (!SINGING_SONG_ID(p_ptr)) set_action(ACTION_NONE);
\r
5048 msg_print(_("影のオーラが消え去った。", "Shadow aura disappeared."));
\r
5053 if (name) return _("苦痛を魔力に", "Pains to mana");
\r
5054 if (desc) return _("視界内のモンスターに精神ダメージ与え、魔力を吸い取る。", "Deals psychic damages to all monsters in sight, and drains some mana.");
\r
5055 power = plev * 3 / 2;
\r
5056 if (info) return info_damage(1, power, 0);
\r
5059 project_hack(GF_PSI_DRAIN, randint1(power));
\r
5064 if (name) return _("目には目を", "Eye for an eye");
\r
5065 if (desc) return _("打撃や魔法で受けたダメージを、攻撃元のモンスターにも与える。", "Returns same damage which you got to the monster which damaged you.");
\r
5068 msg_print(_("復讐したい欲望にかられた。", "You wish strongly you want to revenge anything."));
\r
5072 /*** 4th book (24-31) ***/
\r
5074 if (name) return _("反増殖結界", "Anti multiply barrier");
\r
5075 if (desc) return _("その階の増殖するモンスターの増殖を阻止する。", "Obstructs all multiplying by monsters in entire floor.");
\r
5078 msg_print(_("増殖を阻止する呪いをかけた。", "You feel anyone can not already multiply."));
\r
5083 if (name) return _("全復活", "Restoration");
\r
5084 if (desc) return _("経験値を徐々に復活し、減少した能力値を回復させる。", "Restores experience and status.");
\r
5087 msg_print(_("体が元の活力を取り戻し始めた。", "You feel your lost status starting to return."));
\r
5091 bool flag = FALSE;
\r
5092 int d = (p_ptr->max_exp - p_ptr->exp);
\r
5093 int r = (p_ptr->exp / 20);
\r
5099 p_ptr->exp = p_ptr->max_exp;
\r
5103 /* Check the experience */
\r
5104 check_experience();
\r
5108 for (i = A_STR; i < 6; i ++)
\r
5110 if (p_ptr->stat_cur[i] < p_ptr->stat_max[i])
\r
5112 if (p_ptr->stat_cur[i] < 18)
\r
5113 p_ptr->stat_cur[i]++;
\r
5115 p_ptr->stat_cur[i] += 10;
\r
5117 if (p_ptr->stat_cur[i] > p_ptr->stat_max[i])
\r
5118 p_ptr->stat_cur[i] = p_ptr->stat_max[i];
\r
5120 /* Recalculate bonuses */
\r
5121 p_ptr->update |= (PU_BONUS);
\r
5129 msg_format(_("%sの呪文の詠唱をやめた。", "Finish casting '%^s'."), do_spell(REALM_HEX, HEX_RESTORE, SPELL_NAME));
\r
5130 CASTING_HEX_FLAGS(p_ptr) &= ~(1L << HEX_RESTORE);
\r
5131 if (cont) CASTING_HEX_NUM(p_ptr)--;
\r
5132 if (CASTING_HEX_NUM(p_ptr)) p_ptr->action = ACTION_NONE;
\r
5134 /* Redraw status */
\r
5135 p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
\r
5136 p_ptr->redraw |= (PR_EXTRA);
\r
5144 if (name) return _("呪力吸収", "Drain curse power");
\r
5145 if (desc) return _("呪われた武器の呪いを吸収して魔力を回復する。", "Drains curse on your weapon and heals SP a little.");
\r
5150 u32b f[TR_FLAG_SIZE];
\r
5151 object_type *o_ptr;
\r
5153 item_tester_hook = item_tester_hook_cursed;
\r
5154 q = _("どの装備品から吸収しますか?", "Which cursed equipment do you drain mana from?");
\r
5155 s = _("呪われたアイテムを装備していない。", "You have no cursed equipment.");
\r
5157 if (!get_item(&item, q, s, (USE_EQUIP))) return FALSE;
\r
5159 o_ptr = &inventory[item];
\r
5160 object_flags(o_ptr, f);
\r
5162 p_ptr->csp += (p_ptr->lev / 5) + randint1(p_ptr->lev / 5);
\r
5163 if (have_flag(f, TR_TY_CURSE) || (o_ptr->curse_flags & TRC_TY_CURSE)) p_ptr->csp += randint1(5);
\r
5164 if (p_ptr->csp > p_ptr->msp) p_ptr->csp = p_ptr->msp;
\r
5166 if (o_ptr->curse_flags & TRC_PERMA_CURSE)
\r
5170 else if (o_ptr->curse_flags & TRC_HEAVY_CURSE)
\r
5174 msg_print(_("呪いを全て吸い取った。", "Heavy curse vanished away."));
\r
5175 o_ptr->curse_flags = 0L;
\r
5178 else if ((o_ptr->curse_flags & (TRC_CURSED)) && one_in_(3))
\r
5180 msg_print(_("呪いを全て吸い取った。", "Curse vanished away."));
\r
5181 o_ptr->curse_flags = 0L;
\r
5189 if (name) return _("吸血の刃", "Swords to vampires");
\r
5190 if (desc) return _("吸血属性で攻撃する。", "Gives vampiric ability to your weapon.");
\r
5194 msg_print("あなたの武器が血を欲している。");
\r
5196 if (!empty_hands(FALSE))
\r
5197 msg_print("Your weapons want more blood now.");
\r
5199 msg_print("Your weapon wants more blood now.");
\r
5205 msg_print("武器の渇望が消え去った。");
\r
5207 msg_format("Thirsty of weapon%s disappeared.", (empty_hands(FALSE)) ? "" : "s");
\r
5213 if (name) return _("朦朧の言葉", "Word of stun");
\r
5214 if (desc) return _("視界内のモンスターを朦朧とさせる。", "Stuns all monsters in your sight.");
\r
5216 if (info) return info_power(power);
\r
5219 stun_monsters(power);
\r
5224 if (name) return _("影移動", "Moving into shadow");
\r
5225 if (desc) return _("モンスターの隣のマスに瞬間移動する。", "Teleports you close to a monster.");
\r
5232 for (i = 0; i < 3; i++)
\r
5234 if (!tgt_pt(&x, &y)) return FALSE;
\r
5238 for (dir = 0; dir < 8; dir++)
\r
5240 int dy = y + ddy_ddd[dir];
\r
5241 int dx = x + ddx_ddd[dir];
\r
5242 if (dir == 5) continue;
\r
5243 if(cave[dy][dx].m_idx) flag = TRUE;
\r
5246 if (!cave_empty_bold(y, x) || (cave[y][x].info & CAVE_ICKY) ||
\r
5247 (distance(y, x, p_ptr->y, p_ptr->x) > plev + 2))
\r
5249 msg_print(_("そこには移動できない。", "Can not teleport to there."));
\r
5255 if (flag && randint0(plev * plev / 2))
\r
5257 teleport_player_to(y, x, 0L);
\r
5261 msg_print(_("おっと!", "Oops!"));
\r
5262 teleport_player(30, 0L);
\r
5270 if (name) return _("反魔法結界", "Anti magic barrier");
\r
5271 if (desc) return _("視界内のモンスターの魔法を阻害するバリアを張る。", "Obstructs all magic spell of monsters in your sight.");
\r
5272 power = plev * 3 / 2;
\r
5273 if (info) return info_power(power);
\r
5276 msg_print(_("魔法を防ぐ呪いをかけた。", "You feel anyone can not cast spells except you."));
\r
5281 if (name) return _("復讐の宣告", "Revenge sentence");
\r
5282 if (desc) return _("数ターン後にそれまで受けたダメージに応じた威力の地獄の劫火の弾を放つ。",
\r
5283 "Fires a ball of hell fire to try revenging after few turns.");
\r
5284 power = HEX_REVENGE_POWER(p_ptr);
\r
5285 if (info) return info_damage(0, 0, power);
\r
5289 int a = 3 - (p_ptr->pspeed - 100) / 10;
\r
5290 r = 1 + randint1(2) + MAX(0, MIN(3, a));
\r
5292 if (HEX_REVENGE_TURN(p_ptr) > 0)
\r
5294 msg_print(_("すでに復讐は宣告済みだ。", "You already pronounced your revenge."));
\r
5298 HEX_REVENGE_TYPE(p_ptr) = 2;
\r
5299 HEX_REVENGE_TURN(p_ptr) = r;
\r
5300 msg_format(_("あなたは復讐を宣告した。あと %d ターン。", "You pronounce your revenge. %d turns left."), r);
\r
5305 HEX_REVENGE_TURN(p_ptr)--;
\r
5307 if (HEX_REVENGE_TURN(p_ptr) <= 0)
\r
5317 msg_print(_("復讐の時だ!", "Time to revenge!"));
\r
5319 while (!get_aim_dir(&dir));
\r
5321 fire_ball(GF_HELL_FIRE, dir, power, 1);
\r
5323 if (p_ptr->wizard)
\r
5325 msg_format(_("%d点のダメージを返した。", "You return %d damages."), power);
\r
5330 msg_print(_("復讐する気が失せた。", "You are not a mood to revenge."));
\r
5332 HEX_REVENGE_POWER(p_ptr) = 0;
\r
5338 /* start casting */
\r
5339 if ((cast) && (add))
\r
5342 CASTING_HEX_FLAGS(p_ptr) |= 1L << (spell);
\r
5343 CASTING_HEX_NUM(p_ptr)++;
\r
5345 if (p_ptr->action != ACTION_SPELL) set_action(ACTION_SPELL);
\r
5348 /* Redraw status */
\r
5351 p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
\r
5352 p_ptr->redraw |= (PR_EXTRA | PR_HP | PR_MANA);
\r
5360 * @brief 魔法処理のメインルーチン
\r
5361 * @param realm 魔法領域のID
\r
5362 * @param spell 各領域の魔法ID
\r
5363 * @param mode 求める処理
\r
5364 * @return 各領域魔法に各種テキストを求めた場合は文字列参照ポインタ、そうでない場合はNULLポインタを返す。
\r
5366 cptr do_spell(REALM_IDX realm, SPELL_IDX spell, BIT_FLAGS mode)
\r
5370 case REALM_LIFE: return do_life_spell(spell, mode);
\r
5371 case REALM_SORCERY: return do_sorcery_spell(spell, mode);
\r
5372 case REALM_NATURE: return do_nature_spell(spell, mode);
\r
5373 case REALM_CHAOS: return do_chaos_spell(spell, mode);
\r
5374 case REALM_DEATH: return do_death_spell(spell, mode);
\r
5375 case REALM_TRUMP: return do_trump_spell(spell, mode);
\r
5376 case REALM_ARCANE: return do_arcane_spell(spell, mode);
\r
5377 case REALM_CRAFT: return do_craft_spell(spell, mode);
\r
5378 case REALM_DAEMON: return do_daemon_spell(spell, mode);
\r
5379 case REALM_CRUSADE: return do_crusade_spell(spell, mode);
\r
5380 case REALM_MUSIC: return do_music_spell(spell, mode);
\r
5381 case REALM_HISSATSU: return do_hissatsu_spell(spell, mode);
\r
5382 case REALM_HEX: return do_hex_spell(spell, mode);
\r