3 @brief 魔法のインターフェイスと発動 / Purpose: Do everything for each spell
6 2013 Deskull rearranged comment for Doxygen.
15 * 魔法の効果を「キャプション:ダイス+定数値」のフォーマットで出力する / Generate dice info string such as "foo 2d10"
20 * @return フォーマットに従い整形された文字列
22 static cptr info_string_dice(cptr str, int dice, int sides, int base)
26 return format("%s%d", str, base);
30 return format("%s%dd%d", str, dice, sides);
32 /* Dice plus base value */
34 return format("%s%dd%d%+d", str, dice, sides, base);
39 * @brief 魔法によるダメージを出力する / Generate damage-dice info string such as "dam 2d10"
43 * @return フォーマットに従い整形された文字列
45 static cptr info_damage(int dice, int sides, int base)
47 return info_string_dice(_("損傷:", "dam "), dice, sides, base);
51 * @brief 魔法の効果時間を出力する / Generate duration info string such as "dur 20+1d20"
54 * @return フォーマットに従い整形された文字列
56 static cptr info_duration(int base, int sides)
58 return format(_("期間:%d+1d%d", "dur %d+1d%d"), base, sides);
62 * @brief 魔法の効果範囲を出力する / Generate range info string such as "range 5"
64 * @return フォーマットに従い整形された文字列
66 static cptr info_range(POSITION range)
68 return format(_("範囲:%d", "range %d"), range);
72 * @brief 魔法による回復量を出力する / Generate heal info string such as "heal 2d8"
76 * @return フォーマットに従い整形された文字列
78 static cptr info_heal(int dice, int sides, int base)
80 return info_string_dice(_("回復:", "heal "), dice, sides, base);
84 * @brief 魔法効果発動までの遅延ターンを出力する / Generate delay info string such as "delay 15+1d15"
87 * @return フォーマットに従い整形された文字列
89 static cptr info_delay(int base, int sides)
91 return format(_("遅延:%d+1d%d", "delay %d+1d%d"), base, sides);
96 * @brief 魔法によるダメージを出力する(固定値&複数回処理) / Generate multiple-damage info string such as "dam 25 each"
98 * @return フォーマットに従い整形された文字列
100 static cptr info_multi_damage(HIT_POINT dam)
102 return format(_("損傷:各%d", "dam %d each"), dam);
107 * @brief 魔法によるダメージを出力する(ダイスのみ&複数回処理) / Generate multiple-damage-dice info string such as "dam 5d2 each"
110 * @return フォーマットに従い整形された文字列
112 static cptr info_multi_damage_dice(int dice, int sides)
114 return format(_("損傷:各%dd%d", "dam %dd%d each"), dice, sides);
118 * @brief 魔法による一般的な効力値を出力する(固定値) / Generate power info string such as "power 100"
120 * @return フォーマットに従い整形された文字列
122 static cptr info_power(int power)
124 return format(_("効力:%d", "power %d"), power);
129 * @brief 魔法による一般的な効力値を出力する(ダイス値) / Generate power info string such as "power 100"
132 * @return フォーマットに従い整形された文字列
135 * Generate power info string such as "power 1d100"
137 static cptr info_power_dice(int dice, int sides)
139 return format(_("効力:%dd%d", "power %dd%d"), dice, sides);
144 * @brief 魔法の効果半径を出力する / Generate radius info string such as "rad 100"
146 * @return フォーマットに従い整形された文字列
148 static cptr info_radius(int rad)
150 return format(_("半径:%d", "rad %d"), rad);
155 * @brief 魔法効果の限界重量を出力する / Generate weight info string such as "max wgt 15"
157 * @return フォーマットに従い整形された文字列
159 static cptr info_weight(int weight)
162 return format("最大重量:%d.%dkg", lbtokg1(weight), lbtokg2(weight));
164 return format("max wgt %d", weight/10);
170 * @brief 一部ボルト魔法のビーム化確率を算出する / Prepare standard probability to become beam for fire_bolt_or_beam()
173 * ハードコーティングによる実装が行われている。
174 * メイジは(レベル)%、ハイメイジ、スペルマスターは(レベル)%、それ以外の職業は(レベル/2)%
176 static int beam_chance(void)
178 if (p_ptr->pclass == CLASS_MAGE)
180 if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER)
181 return p_ptr->lev + 10;
183 return p_ptr->lev / 2;
187 * @brief トランプ魔法独自の召喚処理を行う / Handle summoning and failure of trump spells
188 * @param num summon_specific()関数を呼び出す回数
189 * @param pet ペット化として召喚されるか否か
194 * @param mode モンスター生成条件フラグ
195 * @return モンスターが(敵対も含めて)召還されたならばTRUEを返す。
197 static bool trump_summoning(int num, bool pet, POSITION y, POSITION x, DEPTH lev, int type, BIT_FLAGS mode)
199 PLAYER_LEVEL plev = p_ptr->lev;
203 bool success = FALSE;
206 if (!lev) lev = plev * 2 / 3 + randint1(plev / 2);
211 mode |= PM_FORCE_PET;
213 /* Only sometimes allow unique monster */
214 if (mode & PM_ALLOW_UNIQUE)
217 if (randint1(50 + plev) >= plev / 10)
218 mode &= ~PM_ALLOW_UNIQUE;
221 /* Player is who summons */
226 /* Prevent taming, allow unique monster */
229 /* Behave as if they appear by themselfs */
233 for (i = 0; i < num; i++)
235 if (summon_specific(who, y, x, lev, type, mode))
241 msg_print(_("誰もあなたのカードの呼び声に答えない。", "Nobody answers to your Trump call."));
249 * @brief 「ワンダー」のランダムな効果を決定して処理する。
253 * This spell should become more useful (more controlled) as the\n
254 * player gains experience levels. Thus, add 1/5 of the player's\n
255 * level to the die roll. This eliminates the worst effects later on,\n
256 * while keeping the results quite random. It also allows some potent\n
257 * effects only at high level.
259 static void cast_wonder(int dir)
261 int plev = p_ptr->lev;
262 int die = randint1(100) + plev / 5;
263 int vir = virtue_number(V_CHANCE);
267 if (p_ptr->virtues[vir - 1] > 0)
269 while (randint1(400) < p_ptr->virtues[vir - 1]) die++;
273 while (randint1(400) < (0-p_ptr->virtues[vir - 1])) die--;
278 chg_virtue(V_CHANCE, 1);
282 msg_print(_("あなたは力がみなぎるのを感じた!", "You feel a surge of power!"));
285 if (die < 8) clone_monster(dir);
286 else if (die < 14) speed_monster(dir, plev);
287 else if (die < 26) heal_monster(dir, damroll(4, 6));
288 else if (die < 31) poly_monster(dir, plev);
290 fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir,
291 damroll(3 + ((plev - 1) / 5), 4));
292 else if (die < 41) confuse_monster(dir, plev);
293 else if (die < 46) fire_ball(GF_POIS, dir, 20 + (plev / 2), 3);
294 else if (die < 51) (void)lite_line(dir, damroll(6, 8));
296 fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir,
297 damroll(3 + ((plev - 5) / 4), 8));
299 fire_bolt_or_beam(beam_chance() - 10, GF_COLD, dir,
300 damroll(5 + ((plev - 5) / 4), 8));
302 fire_bolt_or_beam(beam_chance(), GF_ACID, dir,
303 damroll(6 + ((plev - 5) / 4), 8));
305 fire_bolt_or_beam(beam_chance(), GF_FIRE, dir,
306 damroll(8 + ((plev - 5) / 4), 8));
307 else if (die < 76) hypodynamic_bolt(dir, 75);
308 else if (die < 81) fire_ball(GF_ELEC, dir, 30 + plev / 2, 2);
309 else if (die < 86) fire_ball(GF_ACID, dir, 40 + plev, 2);
310 else if (die < 91) fire_ball(GF_ICE, dir, 70 + plev, 3);
311 else if (die < 96) fire_ball(GF_FIRE, dir, 80 + plev, 3);
312 else if (die < 101) hypodynamic_bolt(dir, 100 + plev);
315 earthquake(p_ptr->y, p_ptr->x, 12);
319 (void)destroy_area(p_ptr->y, p_ptr->x, 13 + randint0(5), FALSE);
323 symbol_genocide(plev+50, TRUE);
325 else if (die < 110) dispel_monsters(120);
328 dispel_monsters(150);
330 sleep_monsters(plev);
337 * @brief 「悪霊召喚」のランダムな効果を決定して処理する。
341 static void cast_invoke_spirits(int dir)
343 int plev = p_ptr->lev;
344 int die = randint1(100) + plev / 5;
345 int vir = virtue_number(V_CHANCE);
349 if (p_ptr->virtues[vir - 1] > 0)
351 while (randint1(400) < p_ptr->virtues[vir - 1]) die++;
355 while (randint1(400) < (0-p_ptr->virtues[vir - 1])) die--;
359 msg_print(_("あなたは死者たちの力を招集した...", "You call on the power of the dead..."));
361 chg_virtue(V_CHANCE, 1);
365 msg_print(_("あなたはおどろおどろしい力のうねりを感じた!", "You feel a surge of eldritch force!"));
371 msg_print(_("なんてこった!あなたの周りの地面から朽ちた人影が立ち上がってきた!",
372 "Oh no! Mouldering forms rise from the earth around you!"));
374 (void)summon_specific(0, p_ptr->y, p_ptr->x, dun_level, SUMMON_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
375 chg_virtue(V_UNLIFE, 1);
379 msg_print(_("名状し難い邪悪な存在があなたの心を通り過ぎて行った...", "An unnamable evil brushes against your mind..."));
381 set_afraid(p_ptr->afraid + randint1(4) + 4);
385 msg_print(_("あなたの頭に大量の幽霊たちの騒々しい声が押し寄せてきた...",
386 "Your head is invaded by a horde of gibbering spectral voices..."));
388 set_confused(p_ptr->confused + randint1(4) + 4);
392 poly_monster(dir, plev);
396 fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir,
397 damroll(3 + ((plev - 1) / 5), 4));
401 confuse_monster (dir, plev);
405 fire_ball(GF_POIS, dir, 20 + (plev / 2), 3);
409 (void)lite_line(dir, damroll(6, 8));
413 fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir,
414 damroll(3+((plev-5)/4),8));
418 fire_bolt_or_beam(beam_chance() - 10, GF_COLD, dir,
419 damroll(5+((plev-5)/4),8));
423 fire_bolt_or_beam(beam_chance(), GF_ACID, dir,
424 damroll(6+((plev-5)/4),8));
428 fire_bolt_or_beam(beam_chance(), GF_FIRE, dir,
429 damroll(8+((plev-5)/4),8));
433 hypodynamic_bolt(dir, 75);
437 fire_ball(GF_ELEC, dir, 30 + plev / 2, 2);
441 fire_ball(GF_ACID, dir, 40 + plev, 2);
445 fire_ball(GF_ICE, dir, 70 + plev, 3);
449 fire_ball(GF_FIRE, dir, 80 + plev, 3);
453 hypodynamic_bolt(dir, 100 + plev);
457 earthquake(p_ptr->y, p_ptr->x, 12);
461 (void)destroy_area(p_ptr->y, p_ptr->x, 13 + randint0(5), FALSE);
465 symbol_genocide(plev+50, TRUE);
469 dispel_monsters(120);
473 dispel_monsters(150);
475 sleep_monsters(plev);
481 msg_print(_("陰欝な声がクスクス笑う。「もうすぐおまえは我々の仲間になるだろう。弱き者よ。」",
482 "Sepulchral voices chuckle. 'Soon you will join us, mortal.'"));
487 * @brief カオス的効果あるいは及びシャッフルの「運命の輪」効果を引数基準に処理する。
488 * @param spell 基準となる引数ID
491 static void wild_magic(SPELL_IDX spell)
494 int type = SUMMON_MOLD + randint0(6);
496 if (type < SUMMON_MOLD) type = SUMMON_MOLD;
497 else if (type > SUMMON_MIMIC) type = SUMMON_MIMIC;
499 switch (randint1(spell) + randint1(8) + 1)
504 teleport_player(10, TELEPORT_PASSIVE);
509 teleport_player(100, TELEPORT_PASSIVE);
513 teleport_player(200, TELEPORT_PASSIVE);
523 lite_area(damroll(2, 3), 2);
526 destroy_doors_touch();
532 sleep_monsters_touch();
536 trap_creation(p_ptr->y, p_ptr->x);
545 aggravate_monsters(0);
548 earthquake(p_ptr->y, p_ptr->x, 5);
552 (void)gain_random_mutation(0);
562 fire_ball(GF_CHAOS, 0, spell + 5, 1 + (spell / 10));
569 while (counter++ < 8)
571 (void)summon_specific(0, p_ptr->y, p_ptr->x, (dun_level * 3) / 2, type, (PM_ALLOW_GROUP | PM_NO_PET));
576 activate_hi_summon(p_ptr->y, p_ptr->x, FALSE);
579 (void)summon_cyber(-1, p_ptr->y, p_ptr->x);
584 (void)activate_ty_curse(FALSE, &count);
591 * @brief トランプ領域の「シャッフル」の効果をランダムに決めて処理する。
594 static void cast_shuffle(void)
596 int plev = p_ptr->lev;
599 int vir = virtue_number(V_CHANCE);
602 /* Card sharks and high mages get a level bonus */
603 if ((p_ptr->pclass == CLASS_ROGUE) ||
604 (p_ptr->pclass == CLASS_HIGH_MAGE) ||
605 (p_ptr->pclass == CLASS_SORCERER))
606 die = (randint1(110)) + plev / 5;
613 if (p_ptr->virtues[vir - 1] > 0)
615 while (randint1(400) < p_ptr->virtues[vir - 1]) die++;
619 while (randint1(400) < (0-p_ptr->virtues[vir - 1])) die--;
623 msg_print(_("あなたはカードを切って一枚引いた...", "You shuffle the deck and draw a card..."));
626 chg_virtue(V_CHANCE, 1);
630 msg_print(_("なんてこった!《死》だ!", "Oh no! It's Death!"));
632 for (i = 0; i < randint1(3); i++)
633 activate_hi_summon(p_ptr->y, p_ptr->x, FALSE);
637 msg_print(_("なんてこった!《悪魔》だ!", "Oh no! It's the Devil!"));
638 summon_specific(0, p_ptr->y, p_ptr->x, dun_level, SUMMON_DEMON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
643 msg_print(_("なんてこった!《吊られた男》だ!", "Oh no! It's the Hanged Man."));
644 activate_ty_curse(FALSE, &count);
648 msg_print(_("《不調和の剣》だ。", "It's the swords of discord."));
649 aggravate_monsters(0);
653 msg_print(_("《愚者》だ。", "It's the Fool."));
659 msg_print(_("奇妙なモンスターの絵だ。", "It's the picture of a strange monster."));
660 trump_summoning(1, FALSE, p_ptr->y, p_ptr->x, (dun_level * 3 / 2), (32 + randint1(6)), PM_ALLOW_GROUP | PM_ALLOW_UNIQUE);
664 msg_print(_("《月》だ。", "It's the Moon."));
669 msg_print(_("《運命の輪》だ。", "It's the Wheel of Fortune."));
670 wild_magic(randint0(32));
674 msg_print(_("テレポート・カードだ。", "It's a teleport trump card."));
675 teleport_player(10, TELEPORT_PASSIVE);
679 msg_print(_("《正義》だ。", "It's Justice."));
680 set_blessed(p_ptr->lev, FALSE);
684 msg_print(_("テレポート・カードだ。", "It's a teleport trump card."));
685 teleport_player(100, TELEPORT_PASSIVE);
689 msg_print(_("テレポート・カードだ。", "It's a teleport trump card."));
690 teleport_player(200, TELEPORT_PASSIVE);
694 msg_print(_("《塔》だ。", "It's the Tower."));
699 msg_print(_("《節制》だ。", "It's Temperance."));
700 sleep_monsters_touch();
704 msg_print(_("《塔》だ。", "It's the Tower."));
706 earthquake(p_ptr->y, p_ptr->x, 5);
710 msg_print(_("友好的なモンスターの絵だ。", "It's the picture of a friendly monster."));
711 trump_summoning(1, TRUE, p_ptr->y, p_ptr->x, (dun_level * 3 / 2), SUMMON_MOLD, 0L);
715 msg_print(_("友好的なモンスターの絵だ。", "It's the picture of a friendly monster."));
716 trump_summoning(1, TRUE, p_ptr->y, p_ptr->x, (dun_level * 3 / 2), SUMMON_BAT, 0L);
720 msg_print(_("友好的なモンスターの絵だ。", "It's the picture of a friendly monster."));
721 trump_summoning(1, TRUE, p_ptr->y, p_ptr->x, (dun_level * 3 / 2), SUMMON_VORTEX, 0L);
725 msg_print(_("友好的なモンスターの絵だ。", "It's the picture of a friendly monster."));
726 trump_summoning(1, TRUE, p_ptr->y, p_ptr->x, (dun_level * 3 / 2), SUMMON_COIN_MIMIC, 0L);
730 msg_print(_("《恋人》だ。", "It's the Lovers."));
732 if (get_aim_dir(&dir))
733 charm_monster(dir, MIN(p_ptr->lev, 20));
737 msg_print(_("《隠者》だ。", "It's the Hermit."));
742 msg_print(_("《審判》だ。", "It's the Judgement."));
743 do_cmd_rerate(FALSE);
744 lose_all_mutations();
748 msg_print(_("《太陽》だ。", "It's the Sun."));
749 chg_virtue(V_KNOWLEDGE, 1);
750 chg_virtue(V_ENLIGHTEN, 1);
755 msg_print(_("《世界》だ。", "It's the World."));
756 if (p_ptr->exp < PY_MAX_EXP)
758 s32b ee = (p_ptr->exp / 25) + 1;
759 if (ee > 5000) ee = 5000;
760 msg_print(_("更に経験を積んだような気がする。", "You feel more experienced."));
767 * @brief カオス魔法「流星群」の処理としてプレイヤーを中心に隕石落下処理を10+1d10回繰り返す。
768 * / Drop 10+1d10 meteor ball at random places near the player
773 static void cast_meteor(HIT_POINT dam, int rad)
776 int b = 10 + randint1(10);
778 for (i = 0; i < b; i++)
780 POSITION y = 0, x = 0;
783 for (count = 0; count <= 20; count++)
787 x = p_ptr->x - 8 + randint0(17);
788 y = p_ptr->y - 8 + randint0(17);
790 dx = (p_ptr->x > x) ? (p_ptr->x - x) : (x - p_ptr->x);
791 dy = (p_ptr->y > y) ? (p_ptr->y - y) : (y - p_ptr->y);
793 /* Approximate distance */
794 d = (dy > dx) ? (dy + (dx >> 1)) : (dx + (dy >> 1));
796 if (d >= 9) continue;
798 if (!in_bounds(y, x) || !projectable(p_ptr->y, p_ptr->x, y, x)
799 || !cave_have_flag_bold(y, x, FF_PROJECT)) continue;
805 if (count > 20) continue;
807 project(0, rad, y, x, dam, GF_METEOR, PROJECT_KILL | PROJECT_JUMP | PROJECT_ITEM, -1);
813 * @brief 破邪魔法「神の怒り」の処理としてターゲットを指定した後分解のボールを最大20回発生させる。
816 * @return ターゲットを指定し、実行したならばTRUEを返す。
818 static bool cast_wrath_of_the_god(HIT_POINT dam, int rad)
823 int b = 10 + randint1(10);
825 if (!get_aim_dir(&dir)) return FALSE;
827 /* Use the given direction */
828 tx = p_ptr->x + 99 * ddx[dir];
829 ty = p_ptr->y + 99 * ddy[dir];
831 /* Hack -- Use an actual "target" */
832 if ((dir == 5) && target_okay())
843 /* Hack -- Stop at the target */
844 if ((y == ty) && (x == tx)) break;
848 mmove2(&ny, &nx, p_ptr->y, p_ptr->x, ty, tx);
850 /* Stop at maximum range */
851 if (MAX_RANGE <= distance(p_ptr->y, p_ptr->x, ny, nx)) break;
853 /* Stopped by walls/doors */
854 if (!cave_have_flag_bold(ny, nx, FF_PROJECT)) break;
856 /* Stopped by monsters */
857 if ((dir != 5) && cave[ny][nx].m_idx != 0) break;
859 /* Save the new location */
866 for (i = 0; i < b; i++)
868 int count = 20, d = 0;
874 x = tx - 5 + randint0(11);
875 y = ty - 5 + randint0(11);
877 dx = (tx > x) ? (tx - x) : (x - tx);
878 dy = (ty > y) ? (ty - y) : (y - ty);
880 /* Approximate distance */
881 d = (dy > dx) ? (dy + (dx >> 1)) : (dx + (dy >> 1));
882 /* Within the radius */
886 if (count < 0) continue;
888 /* Cannot penetrate perm walls */
889 if (!in_bounds(y,x) ||
890 cave_stop_disintegration(y,x) ||
891 !in_disintegration_range(ty, tx, y, x))
894 project(0, rad, y, x, dam, GF_DISINTEGRATE, PROJECT_JUMP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL, -1);
901 * @brief 悪魔領域のグレーターデーモン召喚に利用可能な死体かどうかを返す。 / An "item_tester_hook" for offer
902 * @param o_ptr オブジェクト構造体の参照ポインタ
903 * @return 生贄に使用可能な死体ならばTRUEを返す。
905 static bool item_tester_offer(object_type *o_ptr)
907 /* Flasks of oil are okay */
908 if (o_ptr->tval != TV_CORPSE) return (FALSE);
910 if (o_ptr->sval != SV_CORPSE) return (FALSE);
912 if (my_strchr("pht", r_info[o_ptr->pval].d_char)) return (TRUE);
914 /* Assume not okay */
919 * @brief 悪魔領域のグレーターデーモン召喚を処理する / Daemon spell Summon Greater Demon
920 * @return 処理を実行したならばTRUEを返す。
922 static bool cast_summon_greater_demon(void)
924 PLAYER_LEVEL plev = p_ptr->lev;
930 item_tester_hook = item_tester_offer;
931 q = _("どの死体を捧げますか? ", "Sacrifice which corpse? ");
932 s = _("捧げられる死体を持っていない。", "You have nothing to scrifice.");
933 if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return FALSE;
935 /* Get the item (in the pack) */
938 o_ptr = &inventory[item];
941 /* Get the item (on the floor) */
944 o_ptr = &o_list[0 - item];
947 summon_lev = plev * 2 / 3 + r_info[o_ptr->pval].level;
949 if (summon_specific(-1, p_ptr->y, p_ptr->x, summon_lev, SUMMON_HI_DEMON, (PM_ALLOW_GROUP | PM_FORCE_PET)))
951 msg_print(_("硫黄の悪臭が充満した。", "The area fills with a stench of sulphur and brimstone."));
952 msg_print(_("「ご用でございますか、ご主人様」", "'What is thy bidding... Master?'"));
954 /* Decrease the item (from the pack) */
957 inven_item_increase(item, -1);
958 inven_item_describe(item);
959 inven_item_optimize(item);
962 /* Decrease the item (from the floor) */
965 floor_item_increase(0 - item, -1);
966 floor_item_describe(0 - item);
967 floor_item_optimize(0 - item);
972 msg_print(_("悪魔は現れなかった。", "No Greater Demon arrive."));
979 * @brief 歌の開始を処理する / Start singing if the player is a Bard
980 * @param spell 領域魔法としてのID
981 * @param song 魔法効果のID
984 static void start_singing(SPELL_IDX spell, MAGIC_NUM1 song)
986 /* Remember the song index */
987 SINGING_SONG_EFFECT(p_ptr) = (MAGIC_NUM1)song;
989 /* Remember the index of the spell which activated the song */
990 SINGING_SONG_ID(p_ptr) = (MAGIC_NUM2)spell;
993 /* Now the player is singing */
994 set_action(ACTION_SING);
997 /* Recalculate bonuses */
998 p_ptr->update |= (PU_BONUS);
1000 /* Redraw status bar */
1001 p_ptr->redraw |= (PR_STATUS);
1005 * @brief 歌の停止を処理する / Stop singing if the player is a Bard
1008 void stop_singing(void)
1010 if (p_ptr->pclass != CLASS_BARD) return;
1012 /* Are there interupted song? */
1013 if (INTERUPTING_SONG_EFFECT(p_ptr))
1015 /* Forget interupted song */
1016 INTERUPTING_SONG_EFFECT(p_ptr) = MUSIC_NONE;
1020 /* The player is singing? */
1021 if (!SINGING_SONG_EFFECT(p_ptr)) return;
1023 /* Hack -- if called from set_action(), avoid recursive loop */
1024 if (p_ptr->action == ACTION_SING) set_action(ACTION_NONE);
1026 /* Message text of each song or etc. */
1027 do_spell(REALM_MUSIC, SINGING_SONG_ID(p_ptr), SPELL_STOP);
1029 SINGING_SONG_EFFECT(p_ptr) = MUSIC_NONE;
1030 SINGING_SONG_ID(p_ptr) = 0;
1032 /* Recalculate bonuses */
1033 p_ptr->update |= (PU_BONUS);
1035 /* Redraw status bar */
1036 p_ptr->redraw |= (PR_STATUS);
1041 * @brief 生命領域魔法の各処理を行う
1043 * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
1044 * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
1046 static cptr do_life_spell(SPELL_IDX spell, BIT_FLAGS mode)
1048 bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
1049 bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
1050 bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
1051 bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
1054 int plev = p_ptr->lev;
1059 if (name) return _("軽傷の治癒", "Cure Light Wounds");
1060 if (desc) return _("怪我と体力を少し回復させる。", "Heals cut and HP a little.");
1065 if (info) return info_heal(dice, sides, 0);
1069 hp_player(damroll(dice, sides));
1070 set_cut(p_ptr->cut - 10);
1076 if (name) return _("祝福", "Bless");
1077 if (desc) return _("一定時間、命中率とACにボーナスを得る。", "Gives bonus to hit and AC for a few turns.");
1081 if (info) return info_duration(base, base);
1085 set_blessed(randint1(base) + base, FALSE);
1091 if (name) return _("軽傷", "Cause Light Wounds");
1092 if (desc) return _("1体のモンスターに小ダメージを与える。抵抗されると無効。", "Wounds a monster a little unless resisted.");
1094 int dice = 3 + (plev - 1) / 5;
1097 if (info) return info_damage(dice, sides, 0);
1101 if (!get_aim_dir(&dir)) return NULL;
1102 fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0);
1108 if (name) return _("光の召喚", "Call Light");
1109 if (desc) return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently.");
1112 int sides = plev / 2;
1113 int rad = plev / 10 + 1;
1115 if (info) return info_damage(dice, sides, 0);
1119 lite_area(damroll(dice, sides), rad);
1125 if (name) return _("罠 & 隠し扉感知", "Detect Doors & Traps");
1126 if (desc) return _("近くの全ての罠と扉と階段を感知する。", "Detects traps, doors, and stairs in your vicinity.");
1128 int rad = DETECT_RAD_DEFAULT;
1130 if (info) return info_radius(rad);
1134 detect_traps(rad, TRUE);
1142 if (name) return _("重傷の治癒", "Cure Medium Wounds");
1143 if (desc) return _("怪我と体力を中程度回復させる。", "Heals cut and HP more.");
1148 if (info) return info_heal(dice, sides, 0);
1152 hp_player(damroll(dice, sides));
1153 set_cut((p_ptr->cut / 2) - 20);
1159 if (name) return _("解毒", "Cure Poison");
1160 if (desc) return _("体内の毒を取り除く。", "Cure poison status.");
1170 if (name) return _("空腹充足", "Satisfy Hunger");
1171 if (desc) return _("満腹にする。", "Satisfies hunger.");
1175 set_food(PY_FOOD_MAX - 1);
1181 if (name) return _("解呪", "Remove Curse");
1182 if (desc) return _("アイテムにかかった弱い呪いを解除する。", "Removes normal curses from equipped items.");
1188 msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));
1195 if (name) return _("重傷", "Cause Medium Wounds");
1196 if (desc) return _("1体のモンスターに中ダメージを与える。抵抗されると無効。", "Wounds a monster unless resisted.");
1198 int sides = 8 + (plev - 5) / 4;
1201 if (info) return info_damage(dice, sides, 0);
1205 if (!get_aim_dir(&dir)) return NULL;
1206 fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0);
1212 if (name) return _("致命傷の治癒", "Cure Critical Wounds");
1213 if (desc) return _("体力を大幅に回復させ、負傷と朦朧状態も全快する。", "Heals cut, stun and HP greatly.");
1218 if (info) return info_heal(dice, sides, 0);
1222 hp_player(damroll(dice, sides));
1230 if (name) return _("耐熱耐寒", "Resist Heat and Cold");
1231 if (desc) return _("一定時間、火炎と冷気に対する耐性を得る。装備による耐性に累積する。",
1232 "Gives resistance to fire and cold. These resistances can be added to which from equipment for more powerful resistances.");
1237 if (info) return info_duration(base, base);
1241 set_oppose_cold(randint1(base) + base, FALSE);
1242 set_oppose_fire(randint1(base) + base, FALSE);
1248 if (name) return _("周辺感知", "Sense Surroundings");
1249 if (desc) return _("周辺の地形を感知する。", "Maps nearby area.");
1252 int rad = DETECT_RAD_MAP;
1254 if (info) return info_radius(rad);
1264 if (name) return _("パニック・アンデッド", "Turn Undead");
1265 if (desc) return _("視界内のアンデッドを恐怖させる。抵抗されると無効。", "Attempts to scare undead monsters in sight.");
1276 if (name) return _("体力回復", "Healing");
1277 if (desc) return _("極めて強力な回復呪文で、負傷と朦朧状態も全快する。", "Much powerful healing magic, and heals cut and stun completely.");
1282 if (info) return info_heal(0, 0, heal);
1294 if (name) return _("結界の紋章", "Glyph of Warding");
1295 if (desc) return _("自分のいる床の上に、モンスターが通り抜けたり召喚されたりすることができなくなるルーンを描く。",
1296 "Sets a glyph on the floor beneath you. Monsters cannot attack you if you are on a glyph, but can try to break glyph.");
1307 if (name) return _("*解呪*", "Dispel Curse");
1308 if (desc) return _("アイテムにかかった強力な呪いを解除する。", "Removes normal and heavy curse from equipped items.");
1313 if (remove_all_curse())
1315 msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));
1322 if (name) return _("鑑識", "Perception");
1323 if (desc) return _("アイテムを識別する。", "Identifies an item.");
1328 if (!ident_spell(FALSE)) return NULL;
1334 if (name) return _("アンデッド退散", "Dispel Undead");
1335 if (desc) return _("視界内の全てのアンデッドにダメージを与える。", "Damages all undead monsters in sight.");
1339 int sides = plev * 5;
1341 if (info) return info_damage(dice, sides, 0);
1345 dispel_undead(damroll(dice, sides));
1351 if (name) return _("凪の刻", "Day of the Dove");
1352 if (desc) return _("視界内の全てのモンスターを魅了する。抵抗されると無効。", "Attempts to charm all monsters in sight.");
1355 int power = plev * 2;
1357 if (info) return info_power(power);
1361 charm_monsters(power);
1367 if (name) return _("致命傷", "Cause Critical Wounds");
1368 if (desc) return _("1体のモンスターに大ダメージを与える。抵抗されると無効。", "Wounds a monster critically unless resisted.");
1371 int dice = 5 + (plev - 5) / 3;
1374 if (info) return info_damage(dice, sides, 0);
1378 if (!get_aim_dir(&dir)) return NULL;
1379 fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0);
1385 if (name) return _("帰還の詔", "Word of Recall");
1386 if (desc) return _("地上にいるときはダンジョンの最深階へ、ダンジョンにいるときは地上へと移動する。", "Recalls player from dungeon to town, or from town to the deepest level of dungeon.");
1392 if (info) return info_delay(base, sides);
1396 if (!word_of_recall()) return NULL;
1402 if (name) return _("真実の祭壇", "Alter Reality");
1403 if (desc) return _("現在の階を再構成する。", "Recreates current dungeon level.");
1409 if (info) return info_delay(base, sides);
1419 if (name) return _("真・結界", "Warding True");
1420 if (desc) return _("自分のいる床と周囲8マスの床の上に、モンスターが通り抜けたり召喚されたりすることができなくなるルーンを描く。", "Creates glyphs in all adjacent squares and under you.");
1425 if (info) return info_radius(rad);
1436 if (name) return _("不毛化", "Sterilization");
1437 if (desc) return _("この階の増殖するモンスターが増殖できなくなる。", "Prevents any breeders on current level from breeding.");
1442 num_repro += MAX_REPRO;
1448 if (name) return _("全感知", "Detection");
1449 if (desc) return _("近くの全てのモンスター、罠、扉、階段、財宝、そしてアイテムを感知する。", "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.");
1452 int rad = DETECT_RAD_DEFAULT;
1454 if (info) return info_radius(rad);
1464 if (name) return _("アンデッド消滅", "Annihilate Undead");
1465 if (desc) return _("自分の周囲にいるアンデッドを現在の階から消し去る。抵抗されると無効。",
1466 "Eliminates all nearby undead monsters, exhausting you. Powerful or unique monsters may be able to resist.");
1469 int power = plev + 50;
1471 if (info) return info_power(power);
1475 mass_genocide_undead(power, TRUE);
1481 if (name) return _("千里眼", "Clairvoyance");
1482 if (desc) return _("その階全体を永久に照らし、ダンジョン内すべてのアイテムを感知する。", "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.");
1493 if (name) return _("全復活", "Restoration");
1494 if (desc) return _("すべてのステータスと経験値を回復する。", "Restores all stats and experience.");
1511 if (name) return _("*体力回復*", "Healing True");
1512 if (desc) return _("最強の治癒の魔法で、負傷と朦朧状態も全快する。", "The greatest healing magic. Heals all HP, cut and stun.");
1517 if (info) return info_heal(0, 0, heal);
1529 if (name) return _("聖なるビジョン", "Holy Vision");
1530 if (desc) return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item.");
1535 if (!identify_fully(FALSE)) return NULL;
1541 if (name) return _("究極の耐性", "Ultimate Resistance");
1542 if (desc) return _("一定時間、あらゆる耐性を付け、ACと魔法防御能力を上昇させる。", "Gives ultimate resistance, bonus to AC and speed.");
1545 TIME_EFFECT base = (TIME_EFFECT)plev / 2;
1547 if (info) return info_duration(base, base);
1551 TIME_EFFECT v = randint1(base) + base;
1553 set_oppose_acid(v, FALSE);
1554 set_oppose_elec(v, FALSE);
1555 set_oppose_fire(v, FALSE);
1556 set_oppose_cold(v, FALSE);
1557 set_oppose_pois(v, FALSE);
1558 set_ultimate_res(v, FALSE);
1568 * @brief 仙術領域魔法の各処理を行う
1570 * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
1571 * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
1573 static cptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
1575 bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
1576 bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
1577 bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
1578 bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
1581 int plev = p_ptr->lev;
1586 if (name) return _("モンスター感知", "Detect Monsters");
1587 if (desc) return _("近くの全ての見えるモンスターを感知する。", "Detects all monsters in your vicinity unless invisible.");
1590 int rad = DETECT_RAD_DEFAULT;
1592 if (info) return info_radius(rad);
1596 detect_monsters_normal(rad);
1602 if (name) return _("ショート・テレポート", "Phase Door");
1603 if (desc) return _("近距離のテレポートをする。", "Teleport short distance.");
1606 POSITION range = 10;
1608 if (info) return info_range(range);
1612 teleport_player(range, 0L);
1618 if (name) return _("罠と扉感知", "Detect Doors and Traps");
1619 if (desc) return _("近くの全ての扉と罠を感知する。", "Detects traps, doors, and stairs in your vicinity.");
1622 int rad = DETECT_RAD_DEFAULT;
1624 if (info) return info_radius(rad);
1628 detect_traps(rad, TRUE);
1636 if (name) return _("ライト・エリア", "Light Area");
1637 if (desc) return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently.");
1641 int sides = plev / 2;
1642 int rad = plev / 10 + 1;
1644 if (info) return info_damage(dice, sides, 0);
1648 lite_area(damroll(dice, sides), rad);
1654 if (name) return _("パニック・モンスター", "Confuse Monster");
1655 if (desc) return _("モンスター1体を混乱させる。抵抗されると無効。", "Attempts to confuse a monster.");
1658 int power = (plev * 3) / 2;
1660 if (info) return info_power(power);
1664 if (!get_aim_dir(&dir)) return NULL;
1666 confuse_monster(dir, power);
1672 if (name) return _("テレポート", "Teleport");
1673 if (desc) return _("遠距離のテレポートをする。", "Teleport long distance.");
1676 POSITION range = plev * 5;
1678 if (info) return info_range(range);
1682 teleport_player(range, 0L);
1688 if (name) return _("スリープ・モンスター", "Sleep Monster");
1689 if (desc) return _("モンスター1体を眠らせる。抵抗されると無効。", "Attempts to sleep a monster.");
1694 if (info) return info_power(power);
1698 if (!get_aim_dir(&dir)) return NULL;
1700 sleep_monster(dir, plev);
1706 if (name) return _("魔力充填", "Recharging");
1707 if (desc) return _("杖/魔法棒の充填回数を増やすか、充填中のロッドの充填時間を減らす。", "Recharges staffs, wands or rods.");
1710 int power = plev * 4;
1712 if (info) return info_power(power);
1716 if (!recharge(power)) return NULL;
1722 if (name) return _("魔法の地図", "Magic Mapping");
1723 if (desc) return _("周辺の地形を感知する。", "Maps nearby area.");
1726 int rad = DETECT_RAD_MAP;
1728 if (info) return info_radius(rad);
1738 if (name) return _("鑑定", "Identify");
1739 if (desc) return _("アイテムを識別する。", "Identifies an item.");
1744 if (!ident_spell(FALSE)) return NULL;
1750 if (name) return _("スロウ・モンスター", "Slow Monster");
1751 if (desc) return _("モンスター1体を減速さる。抵抗されると無効。", "Attempts to slow a monster.");
1756 if (info) return info_power(power);
1760 if (!get_aim_dir(&dir)) return NULL;
1762 slow_monster(dir, plev);
1768 if (name) return _("周辺スリープ", "Mass Sleep");
1769 if (desc) return _("視界内の全てのモンスターを眠らせる。抵抗されると無効。", "Attempts to sleep all monsters in sight.");
1774 if (info) return info_power(power);
1778 sleep_monsters(plev);
1784 if (name) return _("テレポート・モンスター", "Teleport Away");
1785 if (desc) return _("モンスターをテレポートさせるビームを放つ。抵抗されると無効。", "Teleports all monsters on the line away unless resisted.");
1790 if (info) return info_power(power);
1794 if (!get_aim_dir(&dir)) return NULL;
1796 fire_beam(GF_AWAY_ALL, dir, power);
1802 if (name) return _("スピード", "Haste Self");
1803 if (desc) return _("一定時間、加速する。", "Hastes you for a while.");
1807 int sides = 20 + plev;
1809 if (info) return info_duration(base, sides);
1813 set_fast(randint1(sides) + base, FALSE);
1819 if (name) return _("真・感知", "Detection True");
1820 if (desc) return _("近くの全てのモンスター、罠、扉、階段、財宝、そしてアイテムを感知する。",
1821 "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.");
1824 int rad = DETECT_RAD_DEFAULT;
1826 if (info) return info_radius(rad);
1836 if (name) return _("真・鑑定", "Identify True");
1837 if (desc) return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item.");
1842 if (!identify_fully(FALSE)) return NULL;
1848 if (name) return _("物体と財宝感知", "Detect items and Treasure");
1849 if (desc) return _("近くの全てのアイテムと財宝を感知する。", "Detects all treasures and items in your vicinity.");
1852 int rad = DETECT_RAD_DEFAULT;
1854 if (info) return info_radius(rad);
1858 detect_objects_normal(rad);
1859 detect_treasure(rad);
1860 detect_objects_gold(rad);
1866 if (name) return _("チャーム・モンスター", "Charm Monster");
1867 if (desc) return _("モンスター1体を魅了する。抵抗されると無効。", "Attempts to charm a monster.");
1872 if (info) return info_power(power);
1876 if (!get_aim_dir(&dir)) return NULL;
1878 charm_monster(dir, power);
1884 if (name) return _("精神感知", "Sense Minds");
1885 if (desc) return _("一定時間、テレパシー能力を得る。", "Gives telepathy for a while.");
1891 if (info) return info_duration(base, sides);
1895 set_tim_esp(randint1(sides) + base, FALSE);
1901 if (name) return _("街移動", "Teleport to town");
1902 if (desc) return _("街へ移動する。地上にいるときしか使えない。", "Teleport to a town which you choose in a moment. Can only be used outdoors.");
1907 if (!tele_town()) return NULL;
1913 if (name) return _("自己分析", "Self Knowledge");
1914 if (desc) return _("現在の自分の状態を完全に知る。",
1915 "Gives you useful info regarding your current resistances, the powers of your weapon and maximum limits of your stats.");
1926 if (name) return _("テレポート・レベル", "Teleport Level");
1927 if (desc) return _("瞬時に上か下の階にテレポートする。", "Teleport to up or down stairs in a moment.");
1932 if (!get_check(_("本当に他の階にテレポートしますか?", "Are you sure? (Teleport Level)"))) return NULL;
1939 if (name) return _("帰還の呪文", "Word of Recall");
1940 if (desc) return _("地上にいるときはダンジョンの最深階へ、ダンジョンにいるときは地上へと移動する。",
1941 "Recalls player from dungeon to town, or from town to the deepest level of dungeon.");
1947 if (info) return info_delay(base, sides);
1951 if (!word_of_recall()) return NULL;
1957 if (name) return _("次元の扉", "Dimension Door");
1958 if (desc) return _("短距離内の指定した場所にテレポートする。", "Teleport to given location.");
1961 POSITION range = plev / 2 + 10;
1963 if (info) return info_range(range);
1967 msg_print(_("次元の扉が開いた。目的地を選んで下さい。", "You open a dimensional gate. Choose a destination."));
1968 if (!dimension_door()) return NULL;
1974 if (name) return _("調査", "Probing");
1975 if (desc) return _("モンスターの属性、残り体力、最大体力、スピード、正体を知る。",
1976 "Proves all monsters' alignment, HP, speed and their true character.");
1987 if (name) return _("爆発のルーン", "Explosive Rune");
1988 if (desc) return _("自分のいる床の上に、モンスターが通ると爆発してダメージを与えるルーンを描く。",
1989 "Sets a glyph under you. The glyph will explode when a monster moves on it.");
1996 if (info) return info_damage(dice, sides, base);
2006 if (name) return _("念動力", "Telekinesis");
2007 if (desc) return _("アイテムを自分の足元へ移動させる。", "Pulls a distant item close to you.");
2010 int weight = plev * 15;
2012 if (info) return info_weight(weight);
2016 if (!get_aim_dir(&dir)) return NULL;
2018 fetch(dir, weight, FALSE);
2024 if (name) return _("千里眼", "Clairvoyance");
2025 if (desc) return _("その階全体を永久に照らし、ダンジョン内すべてのアイテムを感知する。さらに、一定時間テレパシー能力を得る。",
2026 "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.");
2032 if (info) return info_duration(base, sides);
2036 chg_virtue(V_KNOWLEDGE, 1);
2037 chg_virtue(V_ENLIGHTEN, 1);
2041 if (!p_ptr->telepathy)
2043 set_tim_esp(randint1(sides) + base, FALSE);
2050 if (name) return _("魅了の視線", "Charm monsters");
2051 if (desc) return _("視界内の全てのモンスターを魅了する。抵抗されると無効。", "Attempts to charm all monsters in sight.");
2054 int power = plev * 2;
2056 if (info) return info_power(power);
2060 charm_monsters(power);
2066 if (name) return _("錬金術", "Alchemy");
2067 if (desc) return _("アイテム1つをお金に変える。", "Turns an item into 1/3 of its value in gold.");
2072 if (!alchemy()) return NULL;
2078 if (name) return _("怪物追放", "Banishment");
2079 if (desc) return _("視界内の全てのモンスターをテレポートさせる。抵抗されると無効。", "Teleports all monsters in sight away unless resisted.");
2082 int power = plev * 4;
2084 if (info) return info_power(power);
2088 banish_monsters(power);
2094 if (name) return _("無傷の球", "Globe of Invulnerability");
2095 if (desc) return _("一定時間、ダメージを受けなくなるバリアを張る。切れた瞬間に少しターンを消費するので注意。",
2096 "Generates barrier which completely protect you from almost all damages. Takes a few your turns when the barrier breaks or duration time is exceeded.");
2101 if (info) return info_duration(base, base);
2105 set_invuln(randint1(base) + base, FALSE);
2116 * @brief 自然領域魔法の各処理を行う
2118 * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
2119 * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
2121 static cptr do_nature_spell(SPELL_IDX spell, BIT_FLAGS mode)
2123 bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
2124 bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
2125 bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
2126 bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
2128 static const char s_dam[] = _("損傷:", "dam ");
2129 static const char s_rng[] = _("射程", "rng ");
2132 int plev = p_ptr->lev;
2137 if (name) return _("モンスター感知", "Detect Creatures");
2138 if (desc) return _("近くの全ての見えるモンスターを感知する。", "Detects all monsters in your vicinity unless invisible.");
2141 int rad = DETECT_RAD_DEFAULT;
2143 if (info) return info_radius(rad);
2147 detect_monsters_normal(rad);
2153 if (name) return _("稲妻", "Lightning");
2154 if (desc) return _("電撃の短いビームを放つ。", "Fires a short beam of lightning.");
2157 int dice = 3 + (plev - 1) / 5;
2159 POSITION range = plev / 6 + 2;
2161 if (info) return format("%s%dd%d %s%d", s_dam, dice, sides, s_rng, range);
2165 project_length = range;
2167 if (!get_aim_dir(&dir)) return NULL;
2169 fire_beam(GF_ELEC, dir, damroll(dice, sides));
2175 if (name) return _("罠と扉感知", "Detect Doors and Traps");
2176 if (desc) return _("近くの全ての罠と扉を感知する。", "Detects traps, doors, and stairs in your vicinity.");
2179 int rad = DETECT_RAD_DEFAULT;
2181 if (info) return info_radius(rad);
2185 detect_traps(rad, TRUE);
2193 if (name) return _("食糧生成", "Produce Food");
2194 if (desc) return _("食料を一つ作り出す。", "Produces a Ration of Food.");
2199 object_type forge, *q_ptr = &forge;
2200 msg_print(_("食料を生成した。", "A food ration is produced."));
2202 /* Create the food ration */
2203 object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_RATION));
2205 /* Drop the object from heaven */
2206 drop_near(q_ptr, -1, p_ptr->y, p_ptr->x);
2212 if (name) return _("日の光", "Daylight");
2213 if (desc) return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently.");
2217 int sides = plev / 2;
2218 int rad = (plev / 10) + 1;
2220 if (info) return info_damage(dice, sides, 0);
2224 lite_area(damroll(dice, sides), rad);
2226 if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)
2228 msg_print(_("日の光があなたの肉体を焦がした!", "The daylight scorches your flesh!"));
2229 take_hit(DAMAGE_NOESCAPE, damroll(2, 2), _("日の光", "daylight"), -1);
2236 if (name) return _("動物習し", "Animal Taming");
2237 if (desc) return _("動物1体を魅了する。抵抗されると無効。", "Attempts to charm an animal.");
2242 if (info) return info_power(power);
2246 if (!get_aim_dir(&dir)) return NULL;
2248 charm_animal(dir, power);
2254 if (name) return _("環境への耐性", "Resist Environment");
2255 if (desc) return _("一定時間、冷気、炎、電撃に対する耐性を得る。装備による耐性に累積する。",
2256 "Gives resistance to fire, cold and electricity for a while. These resistances can be added to which from equipment for more powerful resistances.");
2261 if (info) return info_duration(base, base);
2265 set_oppose_cold(randint1(base) + base, FALSE);
2266 set_oppose_fire(randint1(base) + base, FALSE);
2267 set_oppose_elec(randint1(base) + base, FALSE);
2273 if (name) return _("傷と毒治療", "Cure Wounds & Poison");
2274 if (desc) return _("怪我を全快させ、毒を体から完全に取り除き、体力を少し回復させる。", "Heals all cut and poison status. Heals HP a little.");
2280 if (info) return info_heal(dice, sides, 0);
2284 hp_player(damroll(dice, sides));
2292 if (name) return _("岩石溶解", "Stone to Mud");
2293 if (desc) return _("壁を溶かして床にする。", "Turns one rock square to mud.");
2300 if (info) return info_damage(dice, sides, base);
2304 if (!get_aim_dir(&dir)) return NULL;
2306 wall_to_mud(dir, 20 + randint1(30));
2312 if (name) return _("アイス・ボルト", "Frost Bolt");
2313 if (desc) return _("冷気のボルトもしくはビームを放つ。", "Fires a bolt or beam of cold.");
2316 int dice = 3 + (plev - 5) / 4;
2319 if (info) return info_damage(dice, sides, 0);
2323 if (!get_aim_dir(&dir)) return NULL;
2324 fire_bolt_or_beam(beam_chance() - 10, GF_COLD, dir, damroll(dice, sides));
2330 if (name) return _("自然の覚醒", "Nature Awareness");
2331 if (desc) return _("周辺の地形を感知し、近くの罠、扉、階段、全てのモンスターを感知する。",
2332 "Maps nearby area. Detects all monsters, traps, doors and stairs.");
2335 int rad1 = DETECT_RAD_MAP;
2336 int rad2 = DETECT_RAD_DEFAULT;
2338 if (info) return info_radius(MAX(rad1, rad2));
2343 detect_traps(rad2, TRUE);
2345 detect_stairs(rad2);
2346 detect_monsters_normal(rad2);
2352 if (name) return _("ファイア・ボルト", "Fire Bolt");
2353 if (desc) return _("火炎のボルトもしくはビームを放つ。", "Fires a bolt or beam of fire.");
2356 int dice = 5 + (plev - 5) / 4;
2359 if (info) return info_damage(dice, sides, 0);
2363 if (!get_aim_dir(&dir)) return NULL;
2364 fire_bolt_or_beam(beam_chance() - 10, GF_FIRE, dir, damroll(dice, sides));
2370 if (name) return _("太陽光線", "Ray of Sunlight");
2371 if (desc) return _("光線を放つ。光りを嫌うモンスターに効果がある。", "Fires a beam of light which damages to light-sensitive monsters.");
2377 if (info) return info_damage(dice, sides, 0);
2381 if (!get_aim_dir(&dir)) return NULL;
2382 msg_print(_("太陽光線が現れた。", "A line of sunlight appears."));
2383 lite_line(dir, damroll(6, 8));
2389 if (name) return _("足かせ", "Entangle");
2390 if (desc) return _("視界内の全てのモンスターを減速させる。抵抗されると無効。", "Attempts to slow all monsters in sight.");
2395 if (info) return info_power(power);
2399 slow_monsters(plev);
2405 if (name) return _("動物召喚", "Summon Animal");
2406 if (desc) return _("動物を1体召喚する。", "Summons an animal.");
2411 if (!(summon_specific(-1, p_ptr->y, p_ptr->x, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET))))
2413 msg_print(_("動物は現れなかった。", "No animals arrive."));
2421 if (name) return _("薬草治療", "Herbal Healing");
2422 if (desc) return _("体力を大幅に回復させ、負傷、朦朧状態、毒から全快する。", "Heals HP greatly. And heals cut, stun and poison completely.");
2427 if (info) return info_heal(0, 0, heal);
2440 if (name) return _("階段生成", "Stair Building");
2441 if (desc) return _("自分のいる位置に階段を作る。", "Creates a stair which goes down or up.");
2452 if (name) return _("肌石化", "Stone Skin");
2453 if (desc) return _("一定時間、ACを上昇させる。", "Gives bonus to AC for a while.");
2459 if (info) return info_duration(base, sides);
2463 set_shield(randint1(sides) + base, FALSE);
2469 if (name) return _("真・耐性", "Resistance True");
2470 if (desc) return _("一定時間、酸、電撃、炎、冷気、毒に対する耐性を得る。装備による耐性に累積する。",
2471 "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.");
2476 if (info) return info_duration(base, base);
2480 set_oppose_acid(randint1(base) + base, FALSE);
2481 set_oppose_elec(randint1(base) + base, FALSE);
2482 set_oppose_fire(randint1(base) + base, FALSE);
2483 set_oppose_cold(randint1(base) + base, FALSE);
2484 set_oppose_pois(randint1(base) + base, FALSE);
2490 if (name) return _("森林創造", "Forest Creation");
2491 if (desc) return _("周囲に木を作り出す。", "Creates trees in all adjacent squares.");
2502 if (name) return _("動物友和", "Animal Friendship");
2503 if (desc) return _("視界内の全ての動物を魅了する。抵抗されると無効。", "Attempts to charm all animals in sight.");
2506 int power = plev * 2;
2508 if (info) return info_power(power);
2512 charm_animals(power);
2518 if (name) return _("試金石", "Stone Tell");
2519 if (desc) return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item.");
2524 if (!identify_fully(FALSE)) return NULL;
2530 if (name) return _("石の壁", "Wall of Stone");
2531 if (desc) return _("自分の周囲に花崗岩の壁を作る。", "Creates granite walls in all adjacent squares.");
2542 if (name) return _("腐食防止", "Protect from Corrosion");
2543 if (desc) return _("アイテムを酸で傷つかないよう加工する。", "Makes an equipment acid-proof.");
2548 if (!rustproof()) return NULL;
2554 if (name) return _("地震", "Earthquake");
2555 if (desc) return _("周囲のダンジョンを揺らし、壁と床をランダムに入れ変える。",
2556 "Shakes dungeon structure, and results in random swapping of floors and walls.");
2561 if (info) return info_radius(rad);
2565 earthquake(p_ptr->y, p_ptr->x, rad);
2571 if (name) return _("カマイタチ", "Cyclone");
2572 if (desc) return _("全方向に向かって攻撃する。", "Attacks all adjacent monsters.");
2579 monster_type *m_ptr;
2581 for (dir = 0; dir < 8; dir++)
2583 y = p_ptr->y + ddy_ddd[dir];
2584 x = p_ptr->x + ddx_ddd[dir];
2585 c_ptr = &cave[y][x];
2587 /* Get the monster */
2588 m_ptr = &m_list[c_ptr->m_idx];
2590 /* Hack -- attack monsters */
2591 if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))
2599 if (name) return _("ブリザード", "Blizzard");
2600 if (desc) return _("巨大な冷気の球を放つ。", "Fires a huge ball of cold.");
2603 HIT_POINT dam = 70 + plev * 3 / 2;
2604 int rad = plev / 12 + 1;
2606 if (info) return info_damage(0, 0, dam);
2610 if (!get_aim_dir(&dir)) return NULL;
2612 fire_ball(GF_COLD, dir, dam, rad);
2618 if (name) return _("稲妻嵐", "Lightning Storm");
2619 if (desc) return _("巨大な電撃の球を放つ。", "Fires a huge electric ball.");
2622 HIT_POINT dam = 90 + plev * 3 / 2;
2623 int rad = plev / 12 + 1;
2625 if (info) return info_damage(0, 0, dam);
2629 if (!get_aim_dir(&dir)) return NULL;
2630 fire_ball(GF_ELEC, dir, dam, rad);
2637 if (name) return _("渦潮", "Whirlpool");
2638 if (desc) return _("巨大な水の球を放つ。", "Fires a huge ball of water.");
2641 HIT_POINT dam = 100 + plev * 3 / 2;
2642 int rad = plev / 12 + 1;
2644 if (info) return info_damage(0, 0, dam);
2648 if (!get_aim_dir(&dir)) return NULL;
2649 fire_ball(GF_WATER, dir, dam, rad);
2655 if (name) return _("陽光召喚", "Call Sunlight");
2656 if (desc) return _("自分を中心とした光の球を発生させる。さらに、その階全体を永久に照らし、ダンジョン内すべてのアイテムを感知する。",
2657 "Generates ball of light centered on you. Maps and lights whole dungeon level. Knows all objects location.");
2660 HIT_POINT dam = 150;
2663 if (info) return info_damage(0, 0, dam/2);
2667 fire_ball(GF_LITE, 0, dam, rad);
2668 chg_virtue(V_KNOWLEDGE, 1);
2669 chg_virtue(V_ENLIGHTEN, 1);
2672 if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)
2674 msg_print(_("日光があなたの肉体を焦がした!", "The sunlight scorches your flesh!"));
2675 take_hit(DAMAGE_NOESCAPE, 50, _("日光", "sunlight"), -1);
2682 if (name) return _("精霊の刃", "Elemental Branding");
2683 if (desc) return _("武器に炎か冷気の属性をつける。", "Makes current weapon fire or frost branded.");
2688 brand_weapon(randint0(2));
2694 if (name) return _("自然の脅威", "Nature's Wrath");
2695 if (desc) return _("近くの全てのモンスターにダメージを与え、地震を起こし、自分を中心とした分解の球を発生させる。",
2696 "Damages all monsters in sight. Makes quake. Generates disintegration ball centered on you.");
2699 int d_dam = 4 * plev;
2700 int b_dam = (100 + plev) * 2;
2701 int b_rad = 1 + plev / 12;
2702 int q_rad = 20 + plev / 2;
2704 if (info) return format("%s%d+%d", s_dam, d_dam, b_dam/2);
2708 dispel_monsters(d_dam);
2709 earthquake(p_ptr->y, p_ptr->x, q_rad);
2710 project(0, b_rad, p_ptr->y, p_ptr->x, b_dam, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM, -1);
2721 * @brief カオス領域魔法の各処理を行う
2723 * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
2724 * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
2726 static cptr do_chaos_spell(SPELL_IDX spell, BIT_FLAGS mode)
2728 bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
2729 bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
2730 bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
2731 bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
2733 static const char s_dam[] = _("損傷:", "dam ");
2734 static const char s_random[] = _("ランダム", "random");
2737 int plev = p_ptr->lev;
2742 if (name) return _("マジック・ミサイル", "Magic Missile");
2743 if (desc) return _("弱い魔法の矢を放つ。", "Fires a weak bolt of magic.");
2746 int dice = 3 + ((plev - 1) / 5);
2749 if (info) return info_damage(dice, sides, 0);
2753 if (!get_aim_dir(&dir)) return NULL;
2755 fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir, damroll(dice, sides));
2761 if (name) return _("トラップ/ドア破壊", "Trap / Door Destruction");
2762 if (desc) return _("隣接する罠と扉を破壊する。", "Destroys all traps in adjacent squares.");
2767 if (info) return info_radius(rad);
2771 destroy_doors_touch();
2777 if (name) return _("閃光", "Flash of Light");
2778 if (desc) return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently.");
2782 int sides = plev / 2;
2783 int rad = (plev / 10) + 1;
2785 if (info) return info_damage(dice, sides, 0);
2789 lite_area(damroll(dice, sides), rad);
2795 if (name) return _("混乱の手", "Touch of Confusion");
2796 if (desc) return _("相手を混乱させる攻撃をできるようにする。", "Attempts to confuse the next monster that you hit.");
2801 if (!(p_ptr->special_attack & ATTACK_CONFUSE))
2803 msg_print(_("あなたの手は光り始めた。", "Your hands start glowing."));
2804 p_ptr->special_attack |= ATTACK_CONFUSE;
2805 p_ptr->redraw |= (PR_STATUS);
2812 if (name) return _("魔力炸裂", "Mana Burst");
2813 if (desc) return _("魔法の球を放つ。", "Fires a ball of magic.");
2818 int rad = (plev < 30) ? 2 : 3;
2821 if (p_ptr->pclass == CLASS_MAGE ||
2822 p_ptr->pclass == CLASS_HIGH_MAGE ||
2823 p_ptr->pclass == CLASS_SORCERER)
2824 base = plev + plev / 2;
2826 base = plev + plev / 4;
2829 if (info) return info_damage(dice, sides, base);
2833 if (!get_aim_dir(&dir)) return NULL;
2835 fire_ball(GF_MISSILE, dir, damroll(dice, sides) + base, rad);
2838 * Shouldn't actually use GF_MANA, as
2839 * it will destroy all items on the
2847 if (name) return _("ファイア・ボルト", "Fire Bolt");
2848 if (desc) return _("炎のボルトもしくはビームを放つ。", "Fires a bolt or beam of fire.");
2851 int dice = 8 + (plev - 5) / 4;
2854 if (info) return info_damage(dice, sides, 0);
2858 if (!get_aim_dir(&dir)) return NULL;
2860 fire_bolt_or_beam(beam_chance(), GF_FIRE, dir, damroll(dice, sides));
2866 if (name) return _("力の拳", "Fist of Force");
2867 if (desc) return _("ごく小さな分解の球を放つ。", "Fires a tiny ball of disintegration.");
2870 int dice = 8 + ((plev - 5) / 4);
2873 if (info) return info_damage(dice, sides, 0);
2877 if (!get_aim_dir(&dir)) return NULL;
2879 fire_ball(GF_DISINTEGRATE, dir,
2880 damroll(dice, sides), 0);
2886 if (name) return _("テレポート", "Teleport Self");
2887 if (desc) return _("遠距離のテレポートをする。", "Teleport long distance.");
2890 POSITION range = plev * 5;
2892 if (info) return info_range(range);
2896 teleport_player(range, 0L);
2902 if (name) return _("ワンダー", "Wonder");
2903 if (desc) return _("モンスターにランダムな効果を与える。", "Fires something with random effects.");
2906 if (info) return s_random;
2911 if (!get_aim_dir(&dir)) return NULL;
2919 if (name) return _("カオス・ボルト", "Chaos Bolt");
2920 if (desc) return _("カオスのボルトもしくはビームを放つ。", "Fires a bolt or ball of chaos.");
2923 int dice = 10 + (plev - 5) / 4;
2926 if (info) return info_damage(dice, sides, 0);
2930 if (!get_aim_dir(&dir)) return NULL;
2932 fire_bolt_or_beam(beam_chance(), GF_CHAOS, dir, damroll(dice, sides));
2938 if (name) return _("ソニック・ブーム", "Sonic Boom");
2939 if (desc) return _("自分を中心とした轟音の球を発生させる。", "Generates a ball of sound centered on you.");
2942 HIT_POINT dam = 60 + plev;
2943 int rad = plev / 10 + 2;
2945 if (info) return info_damage(0, 0, dam/2);
2949 msg_print(_("ドーン!部屋が揺れた!", "BOOM! Shake the room!"));
2950 project(0, rad, p_ptr->y, p_ptr->x, dam, GF_SOUND, PROJECT_KILL | PROJECT_ITEM, -1);
2956 if (name) return _("破滅の矢", "Doom Bolt");
2957 if (desc) return _("純粋な魔力のビームを放つ。", "Fires a beam of pure mana.");
2960 int dice = 11 + (plev - 5) / 4;
2963 if (info) return info_damage(dice, sides, 0);
2967 if (!get_aim_dir(&dir)) return NULL;
2969 fire_beam(GF_MANA, dir, damroll(dice, sides));
2975 if (name) return _("ファイア・ボール", "Fire Ball");
2976 if (desc) return _("炎の球を放つ。", "Fires a ball of fire.");
2979 HIT_POINT dam = plev + 55;
2982 if (info) return info_damage(0, 0, dam);
2986 if (!get_aim_dir(&dir)) return NULL;
2988 fire_ball(GF_FIRE, dir, dam, rad);
2994 if (name) return _("テレポート・アウェイ", "Teleport Other");
2995 if (desc) return _("モンスターをテレポートさせるビームを放つ。抵抗されると無効。", "Teleports all monsters on the line away unless resisted.");
3000 if (info) return info_power(power);
3004 if (!get_aim_dir(&dir)) return NULL;
3006 fire_beam(GF_AWAY_ALL, dir, power);
3012 if (name) return _("破壊の言葉", "Word of Destruction");
3013 if (desc) return _("周辺のアイテム、モンスター、地形を破壊する。", "Destroy everything in nearby area.");
3021 destroy_area(p_ptr->y, p_ptr->x, base + randint1(sides), FALSE);
3027 if (name) return _("ログルス発動", "Invoke Logrus");
3028 if (desc) return _("巨大なカオスの球を放つ。", "Fires a huge ball of chaos.");
3031 HIT_POINT dam = plev * 2 + 99;
3034 if (info) return info_damage(0, 0, dam);
3038 if (!get_aim_dir(&dir)) return NULL;
3040 fire_ball(GF_CHAOS, dir, dam, rad);
3046 if (name) return _("他者変容", "Polymorph Other");
3047 if (desc) return _("モンスター1体を変身させる。抵抗されると無効。", "Attempts to polymorph a monster.");
3052 if (info) return info_power(power);
3056 if (!get_aim_dir(&dir)) return NULL;
3058 poly_monster(dir, plev);
3064 if (name) return _("連鎖稲妻", "Chain Lightning");
3065 if (desc) return _("全方向に対して電撃のビームを放つ。", "Fires lightning beams in all directions.");
3068 int dice = 5 + plev / 10;
3071 if (info) return info_damage(dice, sides, 0);
3075 for (dir = 0; dir <= 9; dir++)
3076 fire_beam(GF_ELEC, dir, damroll(dice, sides));
3082 if (name) return _("魔力封入", "Arcane Binding");
3083 if (desc) return _("杖/魔法棒の充填回数を増やすか、充填中のロッドの充填時間を減らす。", "Recharges staffs, wands or rods.");
3088 if (info) return info_power(power);
3092 if (!recharge(power)) return NULL;
3098 if (name) return _("原子分解", "Disintegrate");
3099 if (desc) return _("巨大な分解の球を放つ。", "Fires a huge ball of disintegration.");
3102 HIT_POINT dam = plev + 70;
3103 int rad = 3 + plev / 40;
3105 if (info) return info_damage(0, 0, dam);
3109 if (!get_aim_dir(&dir)) return NULL;
3111 fire_ball(GF_DISINTEGRATE, dir, dam, rad);
3117 if (name) return _("現実変容", "Alter Reality");
3118 if (desc) return _("現在の階を再構成する。", "Recreates current dungeon level.");
3124 if (info) return info_delay(base, sides);
3134 if (name) return _("マジック・ロケット", "Magic Rocket");
3135 if (desc) return _("ロケットを発射する。", "Fires a magic rocket.");
3138 HIT_POINT dam = 120 + plev * 2;
3141 if (info) return info_damage(0, 0, dam);
3145 if (!get_aim_dir(&dir)) return NULL;
3147 msg_print(_("ロケット発射!", "You launch a rocket!"));
3148 fire_rocket(GF_ROCKET, dir, dam, rad);
3154 if (name) return _("混沌の刃", "Chaos Branding");
3155 if (desc) return _("武器にカオスの属性をつける。", "Makes current weapon a Chaotic weapon.");
3166 if (name) return _("悪魔召喚", "Summon Demon");
3167 if (desc) return _("悪魔を1体召喚する。", "Summons a demon.");
3173 bool pet = !one_in_(3);
3175 if (pet) flg |= PM_FORCE_PET;
3176 else flg |= PM_NO_PET;
3177 if (!(pet && (plev < 50))) flg |= PM_ALLOW_GROUP;
3179 if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, (plev * 3) / 2, SUMMON_DEMON, flg))
3181 msg_print(_("硫黄の悪臭が充満した。", "The area fills with a stench of sulphur and brimstone."));
3184 msg_print(_("「ご用でございますか、ご主人様」", "'What is thy bidding... Master?'"));
3188 msg_print(_("「卑しき者よ、我は汝の下僕にあらず! お前の魂を頂くぞ!」",
3189 "'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'"));
3197 if (name) return _("重力光線", "Beam of Gravity");
3198 if (desc) return _("重力のビームを放つ。", "Fires a beam of gravity.");
3201 int dice = 9 + (plev - 5) / 4;
3204 if (info) return info_damage(dice, sides, 0);
3208 if (!get_aim_dir(&dir)) return NULL;
3210 fire_beam(GF_GRAVITY, dir, damroll(dice, sides));
3216 if (name) return _("流星群", "Meteor Swarm");
3217 if (desc) return _("自分の周辺に隕石を落とす。", "Makes meteor balls fall down to nearby random locations.");
3220 HIT_POINT dam = plev * 2;
3223 if (info) return info_multi_damage(dam);
3227 cast_meteor(dam, rad);
3233 if (name) return _("焔の一撃", "Flame Strike");
3234 if (desc) return _("自分を中心とした超巨大な炎の球を発生させる。", "Generate a huge ball of fire centered on you.");
3237 HIT_POINT dam = 300 + 3 * plev;
3240 if (info) return info_damage(0, 0, dam/2);
3244 fire_ball(GF_FIRE, 0, dam, rad);
3250 if (name) return _("混沌召来", "Call Chaos");
3251 if (desc) return _("ランダムな属性の球やビームを発生させる。", "Generate random kind of balls or beams.");
3254 if (info) return format("%s150 / 250", s_dam);
3264 if (name) return _("自己変容", "Polymorph Self");
3265 if (desc) return _("自分を変身させようとする。", "Polymorphs yourself.");
3270 if (!get_check(_("変身します。よろしいですか?", "You will polymorph yourself. Are you sure? "))) return NULL;
3277 if (name) return _("魔力の嵐", "Mana Storm");
3278 if (desc) return _("非常に強力で巨大な純粋な魔力の球を放つ。", "Fires an extremely powerful huge ball of pure mana.");
3281 HIT_POINT dam = 300 + plev * 4;
3284 if (info) return info_damage(0, 0, dam);
3288 if (!get_aim_dir(&dir)) return NULL;
3290 fire_ball(GF_MANA, dir, dam, rad);
3296 if (name) return _("ログルスのブレス", "Breathe Logrus");
3297 if (desc) return _("非常に強力なカオスの球を放つ。", "Fires an extremely powerful ball of chaos.");
3300 HIT_POINT dam = p_ptr->chp;
3303 if (info) return info_damage(0, 0, dam);
3307 if (!get_aim_dir(&dir)) return NULL;
3309 fire_ball(GF_CHAOS, dir, dam, rad);
3315 if (name) return _("虚無召来", "Call the Void");
3316 if (desc) return _("自分に周囲に向かって、ロケット、純粋な魔力の球、放射性廃棄物の球を放つ。ただし、壁に隣接して使用すると広範囲を破壊する。",
3317 "Fires rockets, mana balls and nuclear waste balls in all directions each unless you are not adjacent to any walls. Otherwise *destroys* huge area.");
3320 if (info) return format("%s3 * 175", s_dam);
3334 * @brief 暗黒領域魔法の各処理を行う
3336 * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
3337 * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
3339 static cptr do_death_spell(SPELL_IDX spell, BIT_FLAGS mode)
3341 bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
3342 bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
3343 bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
3344 bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
3346 static const char s_dam[] = _("損傷:", "dam ");
3347 static const char s_random[] = _("ランダム", "random");
3350 int plev = p_ptr->lev;
3355 if (name) return _("無生命感知", "Detect Unlife");
3356 if (desc) return _("近くの生命のないモンスターを感知する。", "Detects all nonliving monsters in your vicinity.");
3359 int rad = DETECT_RAD_DEFAULT;
3361 if (info) return info_radius(rad);
3365 detect_monsters_nonliving(rad);
3371 if (name) return _("呪殺弾", "Malediction");
3372 if (desc) return _("ごく小さな邪悪な力を持つボールを放つ。善良なモンスターには大きなダメージを与える。",
3373 "Fires a tiny ball of evil power which hurts good monsters greatly.");
3376 int dice = 3 + (plev - 1) / 5;
3380 if (info) return info_damage(dice, sides, 0);
3384 if (!get_aim_dir(&dir)) return NULL;
3387 * A radius-0 ball may (1) be aimed at
3388 * objects etc., and will affect them;
3389 * (2) may be aimed at ANY visible
3390 * monster, unlike a 'bolt' which must
3391 * travel to the monster.
3394 fire_ball(GF_HELL_FIRE, dir, damroll(dice, sides), rad);
3398 /* Special effect first */
3399 int effect = randint1(1000);
3402 fire_ball_hide(GF_DEATH_RAY, dir, plev * 200, 0);
3403 else if (effect < 500)
3404 fire_ball_hide(GF_TURN_ALL, dir, plev, 0);
3405 else if (effect < 800)
3406 fire_ball_hide(GF_OLD_CONF, dir, plev, 0);
3408 fire_ball_hide(GF_STUN, dir, plev, 0);
3415 if (name) return _("邪悪感知", "Detect Evil");
3416 if (desc) return _("近くの邪悪なモンスターを感知する。", "Detects all evil monsters in your vicinity.");
3419 int rad = DETECT_RAD_DEFAULT;
3421 if (info) return info_radius(rad);
3425 detect_monsters_evil(rad);
3431 if (name) return _("悪臭雲", "Stinking Cloud");
3432 if (desc) return _("毒の球を放つ。", "Fires a ball of poison.");
3435 HIT_POINT dam = 10 + plev / 2;
3438 if (info) return info_damage(0, 0, dam);
3442 if (!get_aim_dir(&dir)) return NULL;
3444 fire_ball(GF_POIS, dir, dam, rad);
3450 if (name) return _("黒い眠り", "Black Sleep");
3451 if (desc) return _("1体のモンスターを眠らせる。抵抗されると無効。", "Attempts to sleep a monster.");
3456 if (info) return info_power(power);
3460 if (!get_aim_dir(&dir)) return NULL;
3462 sleep_monster(dir, plev);
3468 if (name) return _("耐毒", "Resist Poison");
3469 if (desc) return _("一定時間、毒への耐性を得る。装備による耐性に累積する。",
3470 "Gives resistance to poison. This resistance can be added to which from equipment for more powerful resistance.");
3475 if (info) return info_duration(base, base);
3479 set_oppose_pois(randint1(base) + base, FALSE);
3485 if (name) return _("恐慌", "Horrify");
3486 if (desc) return _("モンスター1体を恐怖させ、朦朧させる。抵抗されると無効。", "Attempts to scare and stun a monster.");
3491 if (info) return info_power(power);
3495 if (!get_aim_dir(&dir)) return NULL;
3497 fear_monster(dir, power);
3498 stun_monster(dir, power);
3504 if (name) return _("アンデッド従属", "Enslave Undead");
3505 if (desc) return _("アンデッド1体を魅了する。抵抗されると無効。", "Attempts to charm an undead monster.");
3510 if (info) return info_power(power);
3514 if (!get_aim_dir(&dir)) return NULL;
3516 control_one_undead(dir, power);
3522 if (name) return _("エントロピーの球", "Orb of Entropy");
3523 if (desc) return _("生命のある者のHPと最大HP双方にダメージを与える効果のある球を放つ。", "Fires a ball which damages to both HP and MaxHP of living monsters.");
3528 int rad = (plev < 30) ? 2 : 3;
3531 if (p_ptr->pclass == CLASS_MAGE ||
3532 p_ptr->pclass == CLASS_HIGH_MAGE ||
3533 p_ptr->pclass == CLASS_SORCERER)
3534 base = plev + plev / 2;
3536 base = plev + plev / 4;
3539 if (info) return info_damage(dice, sides, base);
3543 if (!get_aim_dir(&dir)) return NULL;
3545 fire_ball(GF_HYPODYNAMIA, dir, damroll(dice, sides) + base, rad);
3551 if (name) return _("地獄の矢", "Nether Bolt");
3552 if (desc) return _("地獄のボルトもしくはビームを放つ。", "Fires a bolt or beam of nether.");
3555 int dice = 8 + (plev - 5) / 4;
3558 if (info) return info_damage(dice, sides, 0);
3562 if (!get_aim_dir(&dir)) return NULL;
3564 fire_bolt_or_beam(beam_chance(), GF_NETHER, dir, damroll(dice, sides));
3570 if (name) return _("殺戮雲", "Cloud kill");
3571 if (desc) return _("自分を中心とした毒の球を発生させる。", "Generate a ball of poison centered on you.");
3574 HIT_POINT dam = (30 + plev) * 2;
3575 int rad = plev / 10 + 2;
3577 if (info) return info_damage(0, 0, dam/2);
3581 project(0, rad, p_ptr->y, p_ptr->x, dam, GF_POIS, PROJECT_KILL | PROJECT_ITEM, -1);
3587 if (name) return _("モンスター消滅", "Genocide One");
3588 if (desc) return _("モンスター1体を消し去る。経験値やアイテムは手に入らない。抵抗されると無効。", "Attempts to vanish a monster.");
3591 int power = plev + 50;
3593 if (info) return info_power(power);
3597 if (!get_aim_dir(&dir)) return NULL;
3599 fire_ball_hide(GF_GENOCIDE, dir, power, 0);
3605 if (name) return _("毒の刃", "Poison Branding");
3606 if (desc) return _("武器に毒の属性をつける。", "Makes current weapon poison branded.");
3617 if (name) return _("吸血の矢", "Vampiric Bolt");
3618 if (desc) return _("ボルトによりモンスター1体から生命力を吸いとる。吸いとった生命力によって満腹度が上がる。",
3619 "Absorbs some HP from a monster and gives them to you by bolt. You will also gain nutritional sustenance from this.");
3623 int sides = plev * 2;
3624 int base = plev * 2;
3626 if (info) return info_damage(dice, sides, base);
3630 HIT_POINT dam = base + damroll(dice, sides);
3632 if (!get_aim_dir(&dir)) return NULL;
3634 if (hypodynamic_bolt(dir, dam))
3636 chg_virtue(V_SACRIFICE, -1);
3637 chg_virtue(V_VITALITY, -1);
3642 * Gain nutritional sustenance:
3645 * A Food ration gives 5000
3646 * food points (by contrast)
3647 * Don't ever get more than
3648 * "Full" this way But if we
3649 * ARE Gorged, it won't cure
3652 dam = p_ptr->food + MIN(5000, 100 * dam);
3654 /* Not gorged already */
3655 if (p_ptr->food < PY_FOOD_MAX)
3656 set_food(dam >= PY_FOOD_MAX ? PY_FOOD_MAX - 1 : dam);
3663 if (name) return _("反魂の術", "Animate dead");
3664 if (desc) return _("周囲の死体や骨を生き返す。", "Resurrects nearby corpse and skeletons. And makes these your pets.");
3669 animate_dead(0, p_ptr->y, p_ptr->x);
3675 if (name) return _("抹殺", "Genocide");
3676 if (desc) return _("指定した文字のモンスターを現在の階から消し去る。抵抗されると無効。",
3677 "Eliminates an entire class of monster, exhausting you. Powerful or unique monsters may resist.");
3680 int power = plev+50;
3682 if (info) return info_power(power);
3686 symbol_genocide(power, TRUE);
3692 if (name) return _("狂戦士化", "Berserk");
3693 if (desc) return _("狂戦士化し、恐怖を除去する。", "Gives bonus to hit and HP, immunity to fear for a while. But decreases AC.");
3698 if (info) return info_duration(base, base);
3702 set_shero(randint1(base) + base, FALSE);
3710 if (name) return _("悪霊召喚", "Invoke Spirits");
3711 if (desc) return _("ランダムで様々な効果が起こる。", "Causes random effects.");
3714 if (info) return s_random;
3718 if (!get_aim_dir(&dir)) return NULL;
3720 cast_invoke_spirits(dir);
3726 if (name) return _("暗黒の矢", "Dark Bolt");
3727 if (desc) return _("暗黒のボルトもしくはビームを放つ。", "Fires a bolt or beam of darkness.");
3730 int dice = 4 + (plev - 5) / 4;
3733 if (info) return info_damage(dice, sides, 0);
3737 if (!get_aim_dir(&dir)) return NULL;
3739 fire_bolt_or_beam(beam_chance(), GF_DARK, dir, damroll(dice, sides));
3745 if (name) return _("狂乱戦士", "Battle Frenzy");
3746 if (desc) return _("狂戦士化し、恐怖を除去し、加速する。",
3747 "Gives another bonus to hit and HP, immunity to fear for a while. Hastes you. But decreases AC.");
3751 int sp_base = plev / 2;
3752 int sp_sides = 20 + plev / 2;
3754 if (info) return info_duration(b_base, b_base);
3758 set_shero(randint1(25) + 25, FALSE);
3761 set_fast(randint1(sp_sides) + sp_base, FALSE);
3767 if (name) return _("吸血の刃", "Vampiric Branding");
3768 if (desc) return _("武器に吸血の属性をつける。", "Makes current weapon Vampiric.");
3779 if (name) return _("吸血の連矢", "Vampiric Bolts");
3780 if (desc) return _("3連射のボルトによりモンスター1体から生命力を吸いとる。吸いとった生命力によって体力が回復する。",
3781 "Fires 3 bolts. Each of the bolts absorbs some HP from a monster and gives them to you.");
3783 HIT_POINT dam = 100;
3785 if (info) return format("%s3*%d", s_dam, dam);
3791 if (!get_aim_dir(&dir)) return NULL;
3793 chg_virtue(V_SACRIFICE, -1);
3794 chg_virtue(V_VITALITY, -1);
3796 for (i = 0; i < 3; i++)
3798 if (hypodynamic_bolt(dir, dam))
3806 if (name) return _("死の言魂", "Nether Wave");
3807 if (desc) return _("視界内の生命のあるモンスターにダメージを与える。", "Damages all living monsters in sight.");
3810 int sides = plev * 3;
3812 if (info) return info_damage(1, sides, 0);
3816 dispel_living(randint1(sides));
3822 if (name) return _("暗黒の嵐", "Darkness Storm");
3823 if (desc) return _("巨大な暗黒の球を放つ。", "Fires a huge ball of darkness.");
3826 HIT_POINT dam = 100 + plev * 2;
3829 if (info) return info_damage(0, 0, dam);
3833 if (!get_aim_dir(&dir)) return NULL;
3835 fire_ball(GF_DARK, dir, dam, rad);
3841 if (name) return _("死の光線", "Death Ray");
3842 if (desc) return _("死の光線を放つ。", "Fires a beam of death.");
3847 if (!get_aim_dir(&dir)) return NULL;
3849 death_ray(dir, plev);
3855 if (name) return _("死者召喚", "Raise the Dead");
3856 if (desc) return _("1体のアンデッドを召喚する。", "Summons an undead monster.");
3862 bool pet = one_in_(3);
3865 type = (plev > 47 ? SUMMON_HI_UNDEAD : SUMMON_UNDEAD);
3867 if (!pet || (pet && (plev > 24) && one_in_(3)))
3868 flg |= PM_ALLOW_GROUP;
3870 if (pet) flg |= PM_FORCE_PET;
3871 else flg |= (PM_ALLOW_UNIQUE | PM_NO_PET);
3873 if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, (plev * 3) / 2, type, flg))
3875 msg_print(_("冷たい風があなたの周りに吹き始めた。それは腐敗臭を運んでいる...",
3876 "Cold winds begin to blow around you, carrying with them the stench of decay..."));
3881 msg_print(_("古えの死せる者共があなたに仕えるため土から甦った!",
3882 "Ancient, long-dead forms arise from the ground to serve you!"));
3886 msg_print(_("死者が甦った。眠りを妨げるあなたを罰するために!",
3887 "'The dead arise... to punish you for disturbing them!'"));
3890 chg_virtue(V_UNLIFE, 1);
3897 if (name) return _("死者の秘伝", "Esoteria");
3898 if (desc) return _("アイテムを1つ識別する。レベルが高いとアイテムの能力を完全に知ることができる。",
3899 "Identifies an item. Or *identifies* an item at higher level.");
3904 if (randint1(50) > plev)
3906 if (!ident_spell(FALSE)) return NULL;
3910 if (!identify_fully(FALSE)) return NULL;
3917 if (name) return _("吸血鬼変化", "Polymorph Vampire");
3918 if (desc) return _("一定時間、吸血鬼に変化する。変化している間は本来の種族の能力を失い、代わりに吸血鬼としての能力を得る。",
3919 "Mimic a vampire for a while. Loses abilities of original race and gets abilities as a vampire.");
3922 int base = 10 + plev / 2;
3924 if (info) return info_duration(base, base);
3928 set_mimic(base + randint1(base), MIMIC_VAMPIRE, FALSE);
3934 if (name) return _("経験値復活", "Restore Life");
3935 if (desc) return _("失った経験値を回復する。", "Restore lost experience.");
3946 if (name) return _("周辺抹殺", "Mass Genocide");
3947 if (desc) return _("自分の周囲にいるモンスターを現在の階から消し去る。抵抗されると無効。",
3948 "Eliminates all nearby monsters, exhausting you. Powerful or unique monsters may be able to resist.");
3951 int power = plev + 50;
3953 if (info) return info_power(power);
3957 mass_genocide(power, TRUE);
3963 if (name) return _("地獄の劫火", "Hellfire");
3964 if (desc) return _("邪悪な力を持つ宝珠を放つ。善良なモンスターには大きなダメージを与える。",
3965 "Fires a powerful ball of evil power. Hurts good monsters greatly.");
3968 HIT_POINT dam = 666;
3971 if (info) return info_damage(0, 0, dam);
3975 if (!get_aim_dir(&dir)) return NULL;
3977 fire_ball(GF_HELL_FIRE, dir, dam, rad);
3978 take_hit(DAMAGE_USELIFE, 20 + randint1(30), _("地獄の劫火の呪文を唱えた疲労", "the strain of casting Hellfire"), -1);
3984 if (name) return _("幽体化", "Wraithform");
3985 if (desc) return _("一定時間、壁を通り抜けることができ受けるダメージが軽減される幽体の状態に変身する。",
3986 "Becomes wraith form which gives ability to pass walls and makes all damages half.");
3989 int base = plev / 2;
3991 if (info) return info_duration(base, base);
3995 set_wraith_form(randint1(base) + base, FALSE);
4006 * @brief トランプ領域魔法の各処理を行う
4008 * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
4009 * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
4011 static cptr do_trump_spell(SPELL_IDX spell, BIT_FLAGS mode)
4013 bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
4014 bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
4015 bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
4016 bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
4017 bool fail = (mode == SPELL_FAIL) ? TRUE : FALSE;
4018 static const char s_random[] = _("ランダム", "random");
4021 int plev = p_ptr->lev;
4026 if (name) return _("ショート・テレポート", "Phase Door");
4027 if (desc) return _("近距離のテレポートをする。", "Teleport short distance.");
4030 POSITION range = 10;
4032 if (info) return info_range(range);
4036 teleport_player(range, 0L);
4042 if (name) return _("蜘蛛のカード", "Trump Spiders");
4043 if (desc) return _("蜘蛛を召喚する。", "Summons spiders.");
4048 msg_print(_("あなたは蜘蛛のカードに集中する...", "You concentrate on the trump of an spider..."));
4049 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_SPIDER, PM_ALLOW_GROUP))
4053 msg_print(_("召喚された蜘蛛は怒っている!", "The summoned spiders get angry!"));
4061 if (name) return _("シャッフル", "Shuffle");
4062 if (desc) return _("カードの占いをする。", "Causes random effects.");
4065 if (info) return s_random;
4075 if (name) return _("フロア・リセット", "Reset Recall");
4076 if (desc) return _("最深階を変更する。", "Resets the 'deepest' level for recall spell.");
4081 if (!reset_recall()) return NULL;
4087 if (name) return _("テレポート", "Teleport");
4088 if (desc) return _("遠距離のテレポートをする。", "Teleport long distance.");
4091 POSITION range = plev * 4;
4093 if (info) return info_range(range);
4097 teleport_player(range, 0L);
4103 if (name) return _("感知のカード", "Trump Spying");
4104 if (desc) return _("一定時間、テレパシー能力を得る。", "Gives telepathy for a while.");
4110 if (info) return info_duration(base, sides);
4114 set_tim_esp(randint1(sides) + base, FALSE);
4120 if (name) return _("テレポート・モンスター", "Teleport Away");
4121 if (desc) return _("モンスターをテレポートさせるビームを放つ。抵抗されると無効。", "Teleports all monsters on the line away unless resisted.");
4126 if (info) return info_power(power);
4130 if (!get_aim_dir(&dir)) return NULL;
4132 fire_beam(GF_AWAY_ALL, dir, power);
4138 if (name) return _("動物のカード", "Trump Animals");
4139 if (desc) return _("1体の動物を召喚する。", "Summons an animal.");
4144 int type = (!fail ? SUMMON_ANIMAL_RANGER : SUMMON_ANIMAL);
4145 msg_print(_("あなたは動物のカードに集中する...", "You concentrate on the trump of an animal..."));
4146 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, type, 0L))
4150 msg_print(_("召喚された動物は怒っている!", "The summoned animal gets angry!"));
4158 if (name) return _("移動のカード", "Trump Reach");
4159 if (desc) return _("アイテムを自分の足元へ移動させる。", "Pulls a distant item close to you.");
4162 int weight = plev * 15;
4164 if (info) return info_weight(weight);
4168 if (!get_aim_dir(&dir)) return NULL;
4170 fetch(dir, weight, FALSE);
4176 if (name) return _("カミカゼのカード", "Trump Kamikaze");
4177 if (desc) return _("複数の爆発するモンスターを召喚する。", "Summons monsters which explode by itself.");
4187 if (!target_set(TARGET_KILL)) return NULL;
4193 /* Summons near player when failed */
4198 if (p_ptr->pclass == CLASS_BEASTMASTER)
4199 type = SUMMON_KAMIKAZE_LIVING;
4201 type = SUMMON_KAMIKAZE;
4203 msg_print(_("あなたはカミカゼのカードに集中する...", "You concentrate on several trumps at once..."));
4204 if (trump_summoning(2 + randint0(plev / 7), !fail, y, x, 0, type, 0L))
4208 msg_print(_("召喚されたモンスターは怒っている!", "The summoned creatures get angry!"));
4216 if (name) return _("幻霊召喚", "Phantasmal Servant");
4217 if (desc) return _("1体の幽霊を召喚する。", "Summons a ghost.");
4220 /* Phantasmal Servant is not summoned as enemy when failed */
4223 int summon_lev = plev * 2 / 3 + randint1(plev / 2);
4225 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, (summon_lev * 3 / 2), SUMMON_PHANTOM, 0L))
4227 msg_print(_("御用でございますか、御主人様?", "'Your wish, master?'"));
4234 if (name) return _("スピード・モンスター", "Haste Monster");
4235 if (desc) return _("モンスター1体を加速させる。", "Hastes a monster.");
4242 /* Temporary enable target_pet option */
4243 bool old_target_pet = target_pet;
4246 result = get_aim_dir(&dir);
4248 /* Restore target_pet option */
4249 target_pet = old_target_pet;
4251 if (!result) return NULL;
4253 speed_monster(dir, plev);
4259 if (name) return _("テレポート・レベル", "Teleport Level");
4260 if (desc) return _("瞬時に上か下の階にテレポートする。", "Teleport to up or down stairs in a moment.");
4265 if (!get_check(_("本当に他の階にテレポートしますか?", "Are you sure? (Teleport Level)"))) return NULL;
4272 if (name) return _("次元の扉", "Dimension Door");
4273 if (desc) return _("短距離内の指定した場所にテレポートする。", "Teleport to given location.");
4276 POSITION range = plev / 2 + 10;
4278 if (info) return info_range(range);
4282 msg_print(_("次元の扉が開いた。目的地を選んで下さい。", "You open a dimensional gate. Choose a destination."));
4283 if (!dimension_door()) return NULL;
4289 if (name) return _("帰還の呪文", "Word of Recall");
4290 if (desc) return _("地上にいるときはダンジョンの最深階へ、ダンジョンにいるときは地上へと移動する。",
4291 "Recalls player from dungeon to town, or from town to the deepest level of dungeon.");
4297 if (info) return info_delay(base, sides);
4301 if (!word_of_recall()) return NULL;
4307 if (name) return _("怪物追放", "Banish");
4308 if (desc) return _("視界内の全てのモンスターをテレポートさせる。抵抗されると無効。", "Teleports all monsters in sight away unless resisted.");
4311 int power = plev * 4;
4313 if (info) return info_power(power);
4317 banish_monsters(power);
4323 if (name) return _("位置交換のカード", "Swap Position");
4324 if (desc) return _("1体のモンスターと位置を交換する。", "Swap positions of you and a monster.");
4331 /* HACK -- No range limit */
4332 project_length = -1;
4334 result = get_aim_dir(&dir);
4336 /* Restore range to default */
4339 if (!result) return NULL;
4347 if (name) return _("アンデッドのカード", "Trump Undead");
4348 if (desc) return _("1体のアンデッドを召喚する。", "Summons an undead monster.");
4353 msg_print(_("あなたはアンデッドのカードに集中する...", "You concentrate on the trump of an undead creature..."));
4354 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_UNDEAD, 0L))
4358 msg_print(_("召喚されたアンデッドは怒っている!", "The summoned undead creature gets angry!"));
4366 if (name) return _("爬虫類のカード", "Trump Reptiles");
4367 if (desc) return _("1体のヒドラを召喚する。", "Summons a hydra.");
4372 msg_print(_("あなたは爬虫類のカードに集中する...", "You concentrate on the trump of a reptile..."));
4373 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_HYDRA, 0L))
4377 msg_print(_("召喚された爬虫類は怒っている!", "The summoned reptile gets angry!"));
4385 if (name) return _("モンスターのカード", "Trump Monsters");
4386 if (desc) return _("複数のモンスターを召喚する。", "Summons some monsters.");
4392 msg_print(_("あなたはモンスターのカードに集中する...", "You concentrate on several trumps at once..."));
4393 if (p_ptr->pclass == CLASS_BEASTMASTER)
4394 type = SUMMON_LIVING;
4398 if (trump_summoning((1 + (plev - 15)/ 10), !fail, p_ptr->y, p_ptr->x, 0, type, 0L))
4402 msg_print(_("召喚されたモンスターは怒っている!", "The summoned creatures get angry!"));
4411 if (name) return _("ハウンドのカード", "Trump Hounds");
4412 if (desc) return _("1グループのハウンドを召喚する。", "Summons a group of hounds.");
4417 msg_print(_("あなたはハウンドのカードに集中する...", "You concentrate on the trump of a hound..."));
4418 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_HOUND, PM_ALLOW_GROUP))
4422 msg_print(_("召喚されたハウンドは怒っている!", "The summoned hounds get angry!"));
4430 if (name) return _("トランプの刃", "Trump Branding");
4431 if (desc) return _("武器にトランプの属性をつける。", "Makes current weapon a Trump weapon.");
4442 if (name) return _("人間トランプ", "Living Trump");
4443 if (desc) return _("ランダムにテレポートする突然変異か、自分の意思でテレポートする突然変異が身につく。",
4444 "Gives mutation which makes you teleport randomly or makes you able to teleport at will.");
4452 /* Teleport control */
4455 /* Random teleportation (uncontrolled) */
4458 /* Gain the mutation */
4459 if (gain_random_mutation(mutation))
4461 msg_print(_("あなたは生きているカードに変わった。", "You have turned into a Living Trump."));
4468 if (name) return _("サイバーデーモンのカード", "Trump Cyberdemon");
4469 if (desc) return _("1体のサイバーデーモンを召喚する。", "Summons a cyber demon.");
4474 msg_print(_("あなたはサイバーデーモンのカードに集中する...", "You concentrate on the trump of a Cyberdemon..."));
4475 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_CYBER, 0L))
4479 msg_print(_("召喚されたサイバーデーモンは怒っている!", "The summoned Cyberdemon gets angry!"));
4487 if (name) return _("予見のカード", "Trump Divination");
4488 if (desc) return _("近くの全てのモンスター、罠、扉、階段、財宝、そしてアイテムを感知する。",
4489 "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.");
4492 int rad = DETECT_RAD_DEFAULT;
4494 if (info) return info_radius(rad);
4504 if (name) return _("知識のカード", "Trump Lore");
4505 if (desc) return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item.");
4510 if (!identify_fully(FALSE)) return NULL;
4516 if (name) return _("回復モンスター", "Heal Monster");
4517 if (desc) return _("モンスター1体の体力を回復させる。", "Heal a monster.");
4520 int heal = plev * 10 + 200;
4522 if (info) return info_heal(0, 0, heal);
4528 /* Temporary enable target_pet option */
4529 bool old_target_pet = target_pet;
4532 result = get_aim_dir(&dir);
4534 /* Restore target_pet option */
4535 target_pet = old_target_pet;
4537 if (!result) return NULL;
4539 heal_monster(dir, heal);
4545 if (name) return _("ドラゴンのカード", "Trump Dragon");
4546 if (desc) return _("1体のドラゴンを召喚する。", "Summons a dragon.");
4551 msg_print(_("あなたはドラゴンのカードに集中する...", "You concentrate on the trump of a dragon..."));
4552 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_DRAGON, 0L))
4556 msg_print(_("召喚されたドラゴンは怒っている!", "The summoned dragon gets angry!"));
4564 if (name) return _("隕石のカード", "Trump Meteor");
4565 if (desc) return _("自分の周辺に隕石を落とす。", "Makes meteor balls fall down to nearby random locations.");
4568 HIT_POINT dam = plev * 2;
4571 if (info) return info_multi_damage(dam);
4575 cast_meteor(dam, rad);
4581 if (name) return _("デーモンのカード", "Trump Demon");
4582 if (desc) return _("1体の悪魔を召喚する。", "Summons a demon.");
4587 msg_print(_("あなたはデーモンのカードに集中する...", "You concentrate on the trump of a demon..."));
4588 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_DEMON, 0L))
4592 msg_print(_("召喚されたデーモンは怒っている!", "The summoned demon gets angry!"));
4600 if (name) return _("地獄のカード", "Trump Greater Undead");
4601 if (desc) return _("1体の上級アンデッドを召喚する。", "Summons a greater undead.");
4606 msg_print(_("あなたは強力なアンデッドのカードに集中する...", "You concentrate on the trump of a greater undead being..."));
4607 /* May allow unique depend on level and dice roll */
4608 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_HI_UNDEAD, PM_ALLOW_UNIQUE))
4612 msg_print(_("召喚された上級アンデッドは怒っている!", "The summoned greater undead creature gets angry!"));
4620 if (name) return _("古代ドラゴンのカード", "Trump Ancient Dragon");
4621 if (desc) return _("1体の古代ドラゴンを召喚する。", "Summons an ancient dragon.");
4628 if (p_ptr->pclass == CLASS_BEASTMASTER)
4629 type = SUMMON_HI_DRAGON_LIVING;
4631 type = SUMMON_HI_DRAGON;
4633 msg_print(_("あなたは古代ドラゴンのカードに集中する...", "You concentrate on the trump of an ancient dragon..."));
4634 /* May allow unique depend on level and dice roll */
4635 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, type, PM_ALLOW_UNIQUE))
4639 msg_print(_("召喚された古代ドラゴンは怒っている!", "The summoned ancient dragon gets angry!"));
4652 * @brief 秘術領域魔法の各処理を行う
4654 * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
4655 * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
4657 static cptr do_arcane_spell(SPELL_IDX spell, BIT_FLAGS mode)
4659 bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
4660 bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
4661 bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
4662 bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
4665 int plev = p_ptr->lev;
4670 if (name) return _("電撃", "Zap");
4671 if (desc) return _("電撃のボルトもしくはビームを放つ。", "Fires a bolt or beam of lightning.");
4674 int dice = 3 + (plev - 1) / 5;
4677 if (info) return info_damage(dice, sides, 0);
4681 if (!get_aim_dir(&dir)) return NULL;
4683 fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir, damroll(dice, sides));
4689 if (name) return _("魔法の施錠", "Wizard Lock");
4690 if (desc) return _("扉に鍵をかける。", "Locks a door.");
4695 if (!get_aim_dir(&dir)) return NULL;
4703 if (name) return _("透明体感知", "Detect Invisibility");
4704 if (desc) return _("近くの透明なモンスターを感知する。", "Detects all invisible monsters in your vicinity.");
4707 int rad = DETECT_RAD_DEFAULT;
4709 if (info) return info_radius(rad);
4713 detect_monsters_invis(rad);
4719 if (name) return _("モンスター感知", "Detect Monsters");
4720 if (desc) return _("近くの全ての見えるモンスターを感知する。", "Detects all monsters in your vicinity unless invisible.");
4723 int rad = DETECT_RAD_DEFAULT;
4725 if (info) return info_radius(rad);
4729 detect_monsters_normal(rad);
4735 if (name) return _("ショート・テレポート", "Blink");
4736 if (desc) return _("近距離のテレポートをする。", "Teleport short distance.");
4739 POSITION range = 10;
4741 if (info) return info_range(range);
4745 teleport_player(range, 0L);
4751 if (name) return _("ライト・エリア", "Light Area");
4752 if (desc) return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently.");
4756 int sides = plev / 2;
4757 int rad = plev / 10 + 1;
4759 if (info) return info_damage(dice, sides, 0);
4763 lite_area(damroll(dice, sides), rad);
4769 if (name) return _("罠と扉 破壊", "Trap & Door Destruction");
4770 if (desc) return _("一直線上の全ての罠と扉を破壊する。", "Fires a beam which destroy traps and doors.");
4775 if (!get_aim_dir(&dir)) return NULL;
4783 if (name) return _("軽傷の治癒", "Cure Light Wounds");
4784 if (desc) return _("怪我と体力を少し回復させる。", "Heals cut and HP a little.");
4790 if (info) return info_heal(dice, sides, 0);
4794 hp_player(damroll(dice, sides));
4795 set_cut(p_ptr->cut - 10);
4801 if (name) return _("罠と扉 感知", "Detect Doors & Traps");
4802 if (desc) return _("近くの全ての罠と扉と階段を感知する。", "Detects traps, doors, and stairs in your vicinity.");
4805 int rad = DETECT_RAD_DEFAULT;
4807 if (info) return info_radius(rad);
4811 detect_traps(rad, TRUE);
4819 if (name) return _("燃素", "Phlogiston");
4820 if (desc) return _("光源に燃料を補給する。", "Adds more turns of light to a lantern or torch.");
4831 if (name) return _("財宝感知", "Detect Treasure");
4832 if (desc) return _("近くの財宝を感知する。", "Detects all treasures in your vicinity.");
4835 int rad = DETECT_RAD_DEFAULT;
4837 if (info) return info_radius(rad);
4841 detect_treasure(rad);
4842 detect_objects_gold(rad);
4848 if (name) return _("魔法 感知", "Detect Enchantment");
4849 if (desc) return _("近くの魔法がかかったアイテムを感知する。", "Detects all magical items in your vicinity.");
4852 int rad = DETECT_RAD_DEFAULT;
4854 if (info) return info_radius(rad);
4858 detect_objects_magic(rad);
4864 if (name) return _("アイテム感知", "Detect Objects");
4865 if (desc) return _("近くの全てのアイテムを感知する。", "Detects all items in your vicinity.");
4868 int rad = DETECT_RAD_DEFAULT;
4870 if (info) return info_radius(rad);
4874 detect_objects_normal(rad);
4880 if (name) return _("解毒", "Cure Poison");
4881 if (desc) return _("毒を体内から完全に取り除く。", "Cures poison status.");
4892 if (name) return _("耐冷", "Resist Cold");
4893 if (desc) return _("一定時間、冷気への耐性を得る。装備による耐性に累積する。", "Gives resistance to cold. This resistance can be added to which from equipment for more powerful resistance.");
4898 if (info) return info_duration(base, base);
4902 set_oppose_cold(randint1(base) + base, FALSE);
4908 if (name) return _("耐火", "Resist Fire");
4909 if (desc) return _("一定時間、炎への耐性を得る。装備による耐性に累積する。",
4910 "Gives resistance to fire. This resistance can be added to which from equipment for more powerful resistance.");
4915 if (info) return info_duration(base, base);
4919 set_oppose_fire(randint1(base) + base, FALSE);
4925 if (name) return _("耐電", "Resist Lightning");
4926 if (desc) return _("一定時間、電撃への耐性を得る。装備による耐性に累積する。",
4927 "Gives resistance to electricity. This resistance can be added to which from equipment for more powerful resistance.");
4932 if (info) return info_duration(base, base);
4936 set_oppose_elec(randint1(base) + base, FALSE);
4942 if (name) return _("耐酸", "Resist Acid");
4943 if (desc) return _("一定時間、酸への耐性を得る。装備による耐性に累積する。",
4944 "Gives resistance to acid. This resistance can be added to which from equipment for more powerful resistance.");
4949 if (info) return info_duration(base, base);
4953 set_oppose_acid(randint1(base) + base, FALSE);
4959 if (name) return _("重傷の治癒", "Cure Medium Wounds");
4960 if (desc) return _("怪我と体力を中程度回復させる。", "Heals cut and HP more.");
4966 if (info) return info_heal(dice, sides, 0);
4970 hp_player(damroll(dice, sides));
4971 set_cut((p_ptr->cut / 2) - 50);
4977 if (name) return _("テレポート", "Teleport");
4978 if (desc) return _("遠距離のテレポートをする。", "Teleport long distance.");
4981 POSITION range = plev * 5;
4983 if (info) return info_range(range);
4987 teleport_player(range, 0L);
4993 if (name) return _("鑑定", "Identify");
4994 if (desc) return _("アイテムを識別する。", "Identifies an item.");
4999 if (!ident_spell(FALSE)) return NULL;
5005 if (name) return _("岩石溶解", "Stone to Mud");
5006 if (desc) return _("壁を溶かして床にする。", "Turns one rock square to mud.");
5013 if (info) return info_damage(dice, sides, base);
5017 if (!get_aim_dir(&dir)) return NULL;
5019 wall_to_mud(dir, 20 + randint1(30));
5025 if (name) return _("閃光", "Ray of Light");
5026 if (desc) return _("光線を放つ。光りを嫌うモンスターに効果がある。", "Fires a beam of light which damages to light-sensitive monsters.");
5032 if (info) return info_damage(dice, sides, 0);
5036 if (!get_aim_dir(&dir)) return NULL;
5038 msg_print(_("光線が放たれた。", "A line of light appears."));
5039 lite_line(dir, damroll(6, 8));
5045 if (name) return _("空腹充足", "Satisfy Hunger");
5046 if (desc) return _("満腹にする。", "Satisfies hunger.");
5051 set_food(PY_FOOD_MAX - 1);
5057 if (name) return _("透明視認", "See Invisible");
5058 if (desc) return _("一定時間、透明なものが見えるようになる。", "Gives see invisible for a while.");
5063 if (info) return info_duration(base, base);
5067 set_tim_invis(randint1(base) + base, FALSE);
5073 if (name) return _("エレメンタル召喚", "Conjure Elemental");
5074 if (desc) return _("1体のエレメンタルを召喚する。", "Summons an elemental.");
5079 if (!summon_specific(-1, p_ptr->y, p_ptr->x, plev, SUMMON_ELEMENTAL, (PM_ALLOW_GROUP | PM_FORCE_PET)))
5081 msg_print(_("エレメンタルは現れなかった。", "No Elementals arrive."));
5088 if (name) return _("テレポート・レベル", "Teleport Level");
5089 if (desc) return _("瞬時に上か下の階にテレポートする。", "Teleport to up or down stairs in a moment.");
5094 if (!get_check(_("本当に他の階にテレポートしますか?", "Are you sure? (Teleport Level)"))) return NULL;
5101 if (name) return _("テレポート・モンスター", "Teleport Away");
5102 if (desc) return _("モンスターをテレポートさせるビームを放つ。抵抗されると無効。", "Teleports all monsters on the line away unless resisted.");
5107 if (info) return info_power(power);
5111 if (!get_aim_dir(&dir)) return NULL;
5113 fire_beam(GF_AWAY_ALL, dir, power);
5119 if (name) return _("元素の球", "Elemental Ball");
5120 if (desc) return _("炎、電撃、冷気、酸のどれかの球を放つ。", "Fires a ball of some elements.");
5123 HIT_POINT dam = 75 + plev;
5126 if (info) return info_damage(0, 0, dam);
5132 if (!get_aim_dir(&dir)) return NULL;
5134 switch (randint1(4))
5136 case 1: type = GF_FIRE;break;
5137 case 2: type = GF_ELEC;break;
5138 case 3: type = GF_COLD;break;
5139 default: type = GF_ACID;break;
5142 fire_ball(type, dir, dam, rad);
5148 if (name) return _("全感知", "Detection");
5149 if (desc) return _("近くの全てのモンスター、罠、扉、階段、財宝、そしてアイテムを感知する。",
5150 "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.");
5153 int rad = DETECT_RAD_DEFAULT;
5155 if (info) return info_radius(rad);
5165 if (name) return _("帰還の呪文", "Word of Recall");
5166 if (desc) return _("地上にいるときはダンジョンの最深階へ、ダンジョンにいるときは地上へと移動する。",
5167 "Recalls player from dungeon to town, or from town to the deepest level of dungeon.");
5173 if (info) return info_delay(base, sides);
5177 if (!word_of_recall()) return NULL;
5183 if (name) return _("千里眼", "Clairvoyance");
5184 if (desc) return _("その階全体を永久に照らし、ダンジョン内すべてのアイテムを感知する。さらに、一定時間テレパシー能力を得る。",
5185 "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.");
5191 if (info) return info_duration(base, sides);
5195 chg_virtue(V_KNOWLEDGE, 1);
5196 chg_virtue(V_ENLIGHTEN, 1);
5200 if (!p_ptr->telepathy)
5202 set_tim_esp(randint1(sides) + base, FALSE);
5213 * @brief 匠領域魔法の各処理を行う
5215 * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
5216 * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
5218 static cptr do_craft_spell(SPELL_IDX spell, BIT_FLAGS mode)
5220 bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
5221 bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
5222 bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
5223 bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
5225 int plev = p_ptr->lev;
5230 if (name) return _("赤外線視力", "Infravision");
5231 if (desc) return _("一定時間、赤外線視力が増強される。", "Gives infravision for a while.");
5236 if (info) return info_duration(base, base);
5240 set_tim_infra(base + randint1(base), FALSE);
5246 if (name) return _("回復力強化", "Regeneration");
5247 if (desc) return _("一定時間、回復力が増強される。", "Gives regeneration ability for a while.");
5252 if (info) return info_duration(base, base);
5256 set_tim_regen(base + randint1(base), FALSE);
5262 if (name) return _("空腹充足", "Satisfy Hunger");
5263 if (desc) return _("満腹になる。", "Satisfies hunger.");
5268 set_food(PY_FOOD_MAX - 1);
5274 if (name) return _("耐冷気", "Resist Cold");
5275 if (desc) return _("一定時間、冷気への耐性を得る。装備による耐性に累積する。",
5276 "Gives resistance to cold. This resistance can be added to which from equipment for more powerful resistance.");
5281 if (info) return info_duration(base, base);
5285 set_oppose_cold(randint1(base) + base, FALSE);
5291 if (name) return _("耐火炎", "Resist Fire");
5292 if (desc) return _("一定時間、炎への耐性を得る。装備による耐性に累積する。",
5293 "Gives resistance to fire. This resistance can be added to which from equipment for more powerful resistance.");
5298 if (info) return info_duration(base, base);
5302 set_oppose_fire(randint1(base) + base, FALSE);
5308 if (name) return _("士気高揚", "Heroism");
5309 if (desc) return _("一定時間、ヒーロー気分になる。", "Removes fear, and gives bonus to hit and 10 more HP for a while.");
5314 if (info) return info_duration(base, base);
5318 set_hero(randint1(base) + base, FALSE);
5326 if (name) return _("耐電撃", "Resist Lightning");
5327 if (desc) return _("一定時間、電撃への耐性を得る。装備による耐性に累積する。",
5328 "Gives resistance to electricity. This resistance can be added to which from equipment for more powerful resistance.");
5333 if (info) return info_duration(base, base);
5337 set_oppose_elec(randint1(base) + base, FALSE);
5343 if (name) return _("耐酸", "Resist Acid");
5344 if (desc) return _("一定時間、酸への耐性を得る。装備による耐性に累積する。",
5345 "Gives resistance to acid. This resistance can be added to which from equipment for more powerful resistance.");
5350 if (info) return info_duration(base, base);
5354 set_oppose_acid(randint1(base) + base, FALSE);
5360 if (name) return _("透明視認", "See Invisibility");
5361 if (desc) return _("一定時間、透明なものが見えるようになる。", "Gives see invisible for a while.");
5366 if (info) return info_duration(base, base);
5370 set_tim_invis(randint1(base) + base, FALSE);
5376 if (name) return _("解呪", "Remove Curse");
5377 if (desc) return _("アイテムにかかった弱い呪いを解除する。", "Removes normal curses from equipped items.");
5384 msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));
5391 if (name) return _("耐毒", "Resist Poison");
5392 if (desc) return _("一定時間、毒への耐性を得る。装備による耐性に累積する。",
5393 "Gives resistance to poison. This resistance can be added to which from equipment for more powerful resistance.");
5398 if (info) return info_duration(base, base);
5402 set_oppose_pois(randint1(base) + base, FALSE);
5408 if (name) return _("狂戦士化", "Berserk");
5409 if (desc) return _("狂戦士化し、恐怖を除去する。", "Gives bonus to hit and HP, immunity to fear for a while. But decreases AC.");
5414 if (info) return info_duration(base, base);
5418 set_shero(randint1(base) + base, FALSE);
5426 if (name) return _("自己分析", "Self Knowledge");
5427 if (desc) return _("現在の自分の状態を完全に知る。",
5428 "Gives you useful info regarding your current resistances, the powers of your weapon and maximum limits of your stats.");
5439 if (name) return _("対邪悪結界", "Protection from Evil");
5440 if (desc) return _("邪悪なモンスターの攻撃を防ぐバリアを張る。", "Gives aura which protect you from evil monster's physical attack.");
5443 int base = 3 * plev;
5446 if (info) return info_duration(base, sides);
5450 set_protevil(randint1(sides) + base, FALSE);
5456 if (name) return _("癒し", "Cure");
5457 if (desc) return _("毒、朦朧状態、負傷を全快させ、幻覚を直す。", "Heals poison, stun, cut and hallucination completely.");
5471 if (name) return _("魔法剣", "Mana Branding");
5472 if (desc) return _("一定時間、武器に冷気、炎、電撃、酸、毒のいずれかの属性をつける。武器を持たないと使えない。",
5473 "Makes current weapon some elemental branded. You must wield weapons.");
5476 int base = plev / 2;
5478 if (info) return info_duration(base, base);
5482 if (!choose_ele_attack()) return NULL;
5488 if (name) return _("テレパシー", "Telepathy");
5489 if (desc) return _("一定時間、テレパシー能力を得る。", "Gives telepathy for a while.");
5495 if (info) return info_duration(base, sides);
5499 set_tim_esp(randint1(sides) + base, FALSE);
5505 if (name) return _("肌石化", "Stone Skin");
5506 if (desc) return _("一定時間、ACを上昇させる。", "Gives bonus to AC for a while.");
5512 if (info) return info_duration(base, sides);
5516 set_shield(randint1(sides) + base, FALSE);
5522 if (name) return _("全耐性", "Resistance");
5523 if (desc) return _("一定時間、酸、電撃、炎、冷気、毒に対する耐性を得る。装備による耐性に累積する。",
5524 "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.");
5529 if (info) return info_duration(base, base);
5533 set_oppose_acid(randint1(base) + base, FALSE);
5534 set_oppose_elec(randint1(base) + base, FALSE);
5535 set_oppose_fire(randint1(base) + base, FALSE);
5536 set_oppose_cold(randint1(base) + base, FALSE);
5537 set_oppose_pois(randint1(base) + base, FALSE);
5543 if (name) return _("スピード", "Haste Self");
5544 if (desc) return _("一定時間、加速する。", "Hastes you for a while.");
5548 int sides = 20 + plev;
5550 if (info) return info_duration(base, sides);
5554 set_fast(randint1(sides) + base, FALSE);
5560 if (name) return _("壁抜け", "Walk through Wall");
5561 if (desc) return _("一定時間、半物質化し壁を通り抜けられるようになる。", "Gives ability to pass walls for a while.");
5564 int base = plev / 2;
5566 if (info) return info_duration(base, base);
5570 set_kabenuke(randint1(base) + base, FALSE);
5576 if (name) return _("盾磨き", "Polish Shield");
5577 if (desc) return _("盾に反射の属性をつける。", "Makes a shield a shield of reflection.");
5588 if (name) return _("ゴーレム製造", "Create Golem");
5589 if (desc) return _("1体のゴーレムを製造する。", "Creates a golem.");
5594 if (summon_specific(-1, p_ptr->y, p_ptr->x, plev, SUMMON_GOLEM, PM_FORCE_PET))
5596 msg_print(_("ゴーレムを作った。", "You make a golem."));
5600 msg_print(_("うまくゴーレムを作れなかった。", "No Golems arrive."));
5607 if (name) return _("魔法の鎧", "Magical armor");
5608 if (desc) return _("一定時間、魔法防御力とACが上がり、混乱と盲目の耐性、反射能力、麻痺知らず、浮遊を得る。",
5609 "Gives resistance to magic, bonus to AC, resistance to confusion, blindness, reflection, free action and levitation for a while.");
5614 if (info) return info_duration(base, base);
5618 set_magicdef(randint1(base) + base, FALSE);
5624 if (name) return _("装備無力化", "Remove Enchantment");
5625 if (desc) return _("武器・防具にかけられたあらゆる魔力を完全に解除する。", "Removes all magics completely from any weapon or armor.");
5630 if (!mundane_spell(TRUE)) return NULL;
5636 if (name) return _("呪い粉砕", "Remove All Curse");
5637 if (desc) return _("アイテムにかかった強力な呪いを解除する。", "Removes normal and heavy curse from equipped items.");
5642 if (remove_all_curse())
5644 msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));
5651 if (name) return _("完全なる知識", "Knowledge True");
5652 if (desc) return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item.");
5657 if (!identify_fully(FALSE)) return NULL;
5663 if (name) return _("武器強化", "Enchant Weapon");
5664 if (desc) return _("武器の命中率修正とダメージ修正を強化する。", "Attempts to increase +to-hit, +to-dam of a weapon.");
5669 if (!enchant_spell(randint0(4) + 1, randint0(4) + 1, 0)) return NULL;
5675 if (name) return _("防具強化", "Enchant Armor");
5676 if (desc) return _("鎧の防御修正を強化する。", "Attempts to increase +AC of an armor.");
5681 if (!enchant_spell(0, 0, randint0(3) + 2)) return NULL;
5687 if (name) return _("武器属性付与", "Brand Weapon");
5688 if (desc) return _("武器にランダムに属性をつける。", "Makes current weapon a random ego weapon.");
5693 brand_weapon(randint0(18));
5699 if (name) return _("人間トランプ", "Living Trump");
5700 if (desc) return _("ランダムにテレポートする突然変異か、自分の意思でテレポートする突然変異が身につく。",
5701 "Gives mutation which makes you teleport randomly or makes you able to teleport at will.");
5709 /* Teleport control */
5712 /* Random teleportation (uncontrolled) */
5715 /* Gain the mutation */
5716 if (gain_random_mutation(mutation))
5718 msg_print(_("あなたは生きているカードに変わった。", "You have turned into a Living Trump."));
5725 if (name) return _("属性への免疫", "Immunity");
5726 if (desc) return _("一定時間、冷気、炎、電撃、酸のいずれかに対する免疫を得る。",
5727 "Gives an immunity to fire, cold, electricity or acid for a while.");
5732 if (info) return info_duration(base, base);
5736 if (!choose_ele_immune(base + randint1(base))) return NULL;
5746 * @brief 悪魔領域魔法の各処理を行う
5748 * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
5749 * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
5751 static cptr do_daemon_spell(SPELL_IDX spell, BIT_FLAGS mode)
5753 bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
5754 bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
5755 bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
5756 bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
5757 static const char s_dam[] = _("損傷:", "dam ");
5760 int plev = p_ptr->lev;
5765 if (name) return _("マジック・ミサイル", "Magic Missile");
5766 if (desc) return _("弱い魔法の矢を放つ。", "Fires a weak bolt of magic.");
5769 int dice = 3 + (plev - 1) / 5;
5772 if (info) return info_damage(dice, sides, 0);
5776 if (!get_aim_dir(&dir)) return NULL;
5778 fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir, damroll(dice, sides));
5784 if (name) return _("無生命感知", "Detect Unlife");
5785 if (desc) return _("近くの生命のないモンスターを感知する。", "Detects all nonliving monsters in your vicinity.");
5788 int rad = DETECT_RAD_DEFAULT;
5790 if (info) return info_radius(rad);
5794 detect_monsters_nonliving(rad);
5800 if (name) return _("邪なる祝福", "Evil Bless");
5801 if (desc) return _("一定時間、命中率とACにボーナスを得る。", "Gives bonus to hit and AC for a few turns.");
5806 if (info) return info_duration(base, base);
5810 set_blessed(randint1(base) + base, FALSE);
5816 if (name) return _("耐火炎", "Resist Fire");
5817 if (desc) return _("一定時間、炎への耐性を得る。装備による耐性に累積する。",
5818 "Gives resistance to fire, cold and electricity for a while. These resistances can be added to which from equipment for more powerful resistances.");
5823 if (info) return info_duration(base, base);
5827 set_oppose_fire(randint1(base) + base, FALSE);
5833 if (name) return _("恐慌", "Horrify");
5834 if (desc) return _("モンスター1体を恐怖させ、朦朧させる。抵抗されると無効。", "Attempts to scare and stun a monster.");
5839 if (info) return info_power(power);
5843 if (!get_aim_dir(&dir)) return NULL;
5845 fear_monster(dir, power);
5846 stun_monster(dir, power);
5852 if (name) return _("地獄の矢", "Nether Bolt");
5853 if (desc) return _("地獄のボルトもしくはビームを放つ。", "Fires a bolt or beam of nether.");
5856 int dice = 6 + (plev - 5) / 4;
5859 if (info) return info_damage(dice, sides, 0);
5863 if (!get_aim_dir(&dir)) return NULL;
5865 fire_bolt_or_beam(beam_chance(), GF_NETHER, dir, damroll(dice, sides));
5871 if (name) return _("古代の死霊召喚", "Summon Manes");
5872 if (desc) return _("古代の死霊を召喚する。", "Summons a manes.");
5877 if (!summon_specific(-1, p_ptr->y, p_ptr->x, (plev * 3) / 2, SUMMON_MANES, (PM_ALLOW_GROUP | PM_FORCE_PET)))
5879 msg_print(_("古代の死霊は現れなかった。", "No Manes arrive."));
5886 if (name) return _("地獄の焔", "Hellish Flame");
5887 if (desc) return _("邪悪な力を持つボールを放つ。善良なモンスターには大きなダメージを与える。",
5888 "Fires a ball of evil power. Hurts good monsters greatly.");
5893 int rad = (plev < 30) ? 2 : 3;
5896 if (p_ptr->pclass == CLASS_MAGE ||
5897 p_ptr->pclass == CLASS_HIGH_MAGE ||
5898 p_ptr->pclass == CLASS_SORCERER)
5899 base = plev + plev / 2;
5901 base = plev + plev / 4;
5904 if (info) return info_damage(dice, sides, base);
5908 if (!get_aim_dir(&dir)) return NULL;
5910 fire_ball(GF_HELL_FIRE, dir, damroll(dice, sides) + base, rad);
5916 if (name) return _("デーモン支配", "Dominate Demon");
5917 if (desc) return _("悪魔1体を魅了する。抵抗されると無効", "Attempts to charm a demon.");
5922 if (info) return info_power(power);
5926 if (!get_aim_dir(&dir)) return NULL;
5928 control_one_demon(dir, power);
5934 if (name) return _("ビジョン", "Vision");
5935 if (desc) return _("周辺の地形を感知する。", "Maps nearby area.");
5938 int rad = DETECT_RAD_MAP;
5940 if (info) return info_radius(rad);
5950 if (name) return _("耐地獄", "Resist Nether");
5951 if (desc) return _("一定時間、地獄への耐性を得る。", "Gives resistance to nether for a while.");
5956 if (info) return info_duration(base, base);
5960 set_tim_res_nether(randint1(base) + base, FALSE);
5966 if (name) return _("プラズマ・ボルト", "Plasma bolt");
5967 if (desc) return _("プラズマのボルトもしくはビームを放つ。", "Fires a bolt or beam of plasma.");
5970 int dice = 11 + (plev - 5) / 4;
5973 if (info) return info_damage(dice, sides, 0);
5977 if (!get_aim_dir(&dir)) return NULL;
5979 fire_bolt_or_beam(beam_chance(), GF_PLASMA, dir, damroll(dice, sides));
5985 if (name) return _("ファイア・ボール", "Fire Ball");
5986 if (desc) return _("炎の球を放つ。", "Fires a ball of fire.");
5989 HIT_POINT dam = plev + 55;
5992 if (info) return info_damage(0, 0, dam);
5996 if (!get_aim_dir(&dir)) return NULL;
5998 fire_ball(GF_FIRE, dir, dam, rad);
6004 if (name) return _("炎の刃", "Fire Branding");
6005 if (desc) return _("武器に炎の属性をつける。", "Makes current weapon fire branded.");
6016 if (name) return _("地獄球", "Nether Ball");
6017 if (desc) return _("大きな地獄の球を放つ。", "Fires a huge ball of nether.");
6020 HIT_POINT dam = plev * 3 / 2 + 100;
6021 int rad = plev / 20 + 2;
6023 if (info) return info_damage(0, 0, dam);
6027 if (!get_aim_dir(&dir)) return NULL;
6029 fire_ball(GF_NETHER, dir, dam, rad);
6035 if (name) return _("デーモン召喚", "Summon Demon");
6036 if (desc) return _("悪魔1体を召喚する。", "Summons a demon.");
6041 bool pet = !one_in_(3);
6044 if (pet) flg |= PM_FORCE_PET;
6045 else flg |= PM_NO_PET;
6046 if (!(pet && (plev < 50))) flg |= PM_ALLOW_GROUP;
6048 if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, plev*2/3+randint1(plev/2), SUMMON_DEMON, flg))
6050 msg_print(_("硫黄の悪臭が充満した。", "The area fills with a stench of sulphur and brimstone."));
6054 msg_print(_("「ご用でございますか、ご主人様」", "'What is thy bidding... Master?'"));
6058 msg_print(_("「卑しき者よ、我は汝の下僕にあらず! お前の魂を頂くぞ!」",
6059 "'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'"));
6064 msg_print(_("悪魔は現れなかった。", "No demons arrive."));
6072 if (name) return _("悪魔の目", "Devilish Eye");
6073 if (desc) return _("一定時間、テレパシー能力を得る。", "Gives telepathy for a while.");
6079 if (info) return info_duration(base, sides);
6083 set_tim_esp(randint1(sides) + base, FALSE);
6089 if (name) return _("悪魔のクローク", "Devil Cloak");
6090 if (desc) return _("恐怖を取り除き、一定時間、炎と冷気の耐性、炎のオーラを得る。耐性は装備による耐性に累積する。",
6091 "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.");
6094 TIME_EFFECT base = 20;
6096 if (info) return info_duration(base, base);
6100 TIME_EFFECT dur = randint1(base) + base;
6102 set_oppose_fire(dur, FALSE);
6103 set_oppose_cold(dur, FALSE);
6104 set_tim_sh_fire(dur, FALSE);
6112 if (name) return _("溶岩流", "The Flow of Lava");
6113 if (desc) return _("自分を中心とした炎の球を作り出し、床を溶岩に変える。",
6114 "Generates a ball of fire centered on you which transforms floors to magma.");
6117 HIT_POINT dam = (55 + plev) * 2;
6120 if (info) return info_damage(0, 0, dam/2);
6124 fire_ball(GF_FIRE, 0, dam, rad);
6125 fire_ball_hide(GF_LAVA_FLOW, 0, 2 + randint1(2), rad);
6131 if (name) return _("プラズマ球", "Plasma Ball");
6132 if (desc) return _("プラズマの球を放つ。", "Fires a ball of plasma.");
6135 HIT_POINT dam = plev * 3 / 2 + 80;
6136 int rad = 2 + plev / 40;
6138 if (info) return info_damage(0, 0, dam);
6142 if (!get_aim_dir(&dir)) return NULL;
6144 fire_ball(GF_PLASMA, dir, dam, rad);
6150 if (name) return _("悪魔変化", "Polymorph Demon");
6151 if (desc) return _("一定時間、悪魔に変化する。変化している間は本来の種族の能力を失い、代わりに悪魔としての能力を得る。",
6152 "Mimic a demon for a while. Loses abilities of original race and gets abilities as a demon.");
6155 int base = 10 + plev / 2;
6157 if (info) return info_duration(base, base);
6161 set_mimic(base + randint1(base), MIMIC_DEMON, FALSE);
6167 if (name) return _("地獄の波動", "Nather Wave");
6168 if (desc) return _("視界内の全てのモンスターにダメージを与える。善良なモンスターに特に大きなダメージを与える。",
6169 "Damages all monsters in sight. Hurts good monsters greatly.");
6172 int sides1 = plev * 2;
6173 int sides2 = plev * 2;
6175 if (info) return format("%sd%d+d%d", s_dam, sides1, sides2);
6179 dispel_monsters(randint1(sides1));
6180 dispel_good(randint1(sides2));
6186 if (name) return _("サキュバスの接吻", "Kiss of Succubus");
6187 if (desc) return _("因果混乱の球を放つ。", "Fires a ball of nexus.");
6190 HIT_POINT dam = 100 + plev * 2;
6193 if (info) return info_damage(0, 0, dam);
6197 if (!get_aim_dir(&dir)) return NULL;
6198 fire_ball(GF_NEXUS, dir, dam, rad);
6204 if (name) return _("破滅の手", "Doom Hand");
6205 if (desc) return _("破滅の手を放つ。食らったモンスターはそのときのHPの半分前後のダメージを受ける。", "Attempts to make a monster's HP almost half.");
6210 if (!get_aim_dir(&dir))
6213 msg_print(_("<破滅の手>を放った!", "You invoke the Hand of Doom!"));
6215 fire_ball_hide(GF_HAND_DOOM, dir, plev * 2, 0);
6221 if (name) return _("士気高揚", "Raise the Morale");
6222 if (desc) return _("一定時間、ヒーロー気分になる。", "Removes fear, and gives bonus to hit and 10 more HP for a while.");
6227 if (info) return info_duration(base, base);
6231 set_hero(randint1(base) + base, FALSE);
6239 if (name) return _("不滅の肉体", "Immortal Body");
6240 if (desc) return _("一定時間、時間逆転への耐性を得る。", "Gives resistance to time for a while.");
6245 if (info) return info_duration(base, base);
6249 set_tim_res_time(randint1(base)+base, FALSE);
6255 if (name) return _("狂気の円環", "Insanity Circle");
6256 if (desc) return _("自分を中心としたカオスの球、混乱の球を発生させ、近くのモンスターを魅了する。",
6257 "Generate balls of chaos, confusion and charm centered on you.");
6260 HIT_POINT dam = 50 + plev;
6261 int power = 20 + plev;
6262 int rad = 3 + plev / 20;
6264 if (info) return format("%s%d+%d", s_dam, dam/2, dam/2);
6268 fire_ball(GF_CHAOS, 0, dam, rad);
6269 fire_ball(GF_CONFUSION, 0, dam, rad);
6270 fire_ball(GF_CHARM, 0, power, rad);
6276 if (name) return _("ペット爆破", "Explode Pets");
6277 if (desc) return _("全てのペットを強制的に爆破させる。", "Makes all pets explode.");
6288 if (name) return _("グレーターデーモン召喚", "Summon Greater Demon");
6289 if (desc) return _("上級デーモンを召喚する。召喚するには人間('p','h','t'で表されるモンスター)の死体を捧げなければならない。",
6290 "Summons greater demon. It need to sacrifice a corpse of human ('p','h' or 't').");
6295 if (!cast_summon_greater_demon()) return NULL;
6301 if (name) return _("地獄嵐", "Nether Storm");
6302 if (desc) return _("超巨大な地獄の球を放つ。", "Generate a huge ball of nether.");
6305 HIT_POINT dam = plev * 15;
6308 if (info) return info_damage(0, 0, dam);
6312 if (!get_aim_dir(&dir)) return NULL;
6314 fire_ball(GF_NETHER, dir, dam, rad);
6320 if (name) return _("血の呪い", "Bloody Curse");
6321 if (desc) return _("自分がダメージを受けることによって対象に呪いをかけ、ダメージを与え様々な効果を引き起こす。",
6322 "Puts blood curse which damages and causes various effects on a monster. You also take damage.");
6325 HIT_POINT dam = 600;
6328 if (info) return info_damage(0, 0, dam);
6332 if (!get_aim_dir(&dir)) return NULL;
6334 fire_ball_hide(GF_BLOOD_CURSE, dir, dam, rad);
6335 take_hit(DAMAGE_USELIFE, 20 + randint1(30), _("血の呪い", "Blood curse"), -1);
6341 if (name) return _("魔王変化", "Polymorph Demonlord");
6342 if (desc) return _("悪魔の王に変化する。変化している間は本来の種族の能力を失い、代わりに悪魔の王としての能力を得、壁を破壊しながら歩く。",
6343 "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.");
6348 if (info) return info_duration(base, base);
6352 set_mimic(base + randint1(base), MIMIC_DEMON_LORD, FALSE);
6362 * @brief 破邪領域魔法の各処理を行う
6364 * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
6365 * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
6367 static cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
6369 bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
6370 bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
6371 bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
6372 bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
6375 int plev = p_ptr->lev;
6380 if (name) return _("懲罰", "Punishment");
6381 if (desc) return _("電撃のボルトもしくはビームを放つ。", "Fires a bolt or beam of lightning.");
6384 int dice = 3 + (plev - 1) / 5;
6387 if (info) return info_damage(dice, sides, 0);
6391 if (!get_aim_dir(&dir)) return NULL;
6393 fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir, damroll(dice, sides));
6399 if (name) return _("邪悪存在感知", "Detect Evil");
6400 if (desc) return _("近くの邪悪なモンスターを感知する。", "Detects all evil monsters in your vicinity.");
6403 int rad = DETECT_RAD_DEFAULT;
6405 if (info) return info_radius(rad);
6409 detect_monsters_evil(rad);
6415 if (name) return _("恐怖除去", "Remove Fear");
6416 if (desc) return _("恐怖を取り除く。", "Removes fear.");
6427 if (name) return _("威圧", "Scare Monster");
6428 if (desc) return _("モンスター1体を恐怖させる。抵抗されると無効。", "Attempts to scare a monster.");
6433 if (info) return info_power(power);
6437 if (!get_aim_dir(&dir)) return NULL;
6439 fear_monster(dir, power);
6445 if (name) return _("聖域", "Sanctuary");
6446 if (desc) return _("隣接した全てのモンスターを眠らせる。抵抗されると無効。", "Attempts to sleep monsters in the adjacent squares.");
6451 if (info) return info_power(power);
6455 sleep_monsters_touch();
6461 if (name) return _("入口", "Portal");
6462 if (desc) return _("中距離のテレポートをする。", "Teleport medium distance.");
6465 POSITION range = 25 + plev / 2;
6467 if (info) return info_range(range);
6471 teleport_player(range, 0L);
6477 if (name) return _("スターダスト", "Star Dust");
6478 if (desc) return _("ターゲット付近に閃光のボルトを連射する。", "Fires many bolts of light near the target.");
6481 int dice = 3 + (plev - 1) / 9;
6484 if (info) return info_multi_damage_dice(dice, sides);
6488 if (!get_aim_dir(&dir)) return NULL;
6489 fire_blast(GF_LITE, dir, dice, sides, 10, 3);
6495 if (name) return _("身体浄化", "Purify");
6496 if (desc) return _("傷、毒、朦朧から全快する。", "Heals all cut, stun and poison status.");
6509 if (name) return _("邪悪飛ばし", "Scatter Evil");
6510 if (desc) return _("邪悪なモンスター1体をテレポートさせる。抵抗されると無効。", "Attempts to teleport an evil monster away.");
6513 int power = MAX_SIGHT * 5;
6515 if (info) return info_power(power);
6519 if (!get_aim_dir(&dir)) return NULL;
6520 fire_ball(GF_AWAY_EVIL, dir, power, 0);
6526 if (name) return _("聖なる光球", "Holy Orb");
6527 if (desc) return _("聖なる力をもつ宝珠を放つ。邪悪なモンスターに対して大きなダメージを与えるが、善良なモンスターには効果がない。",
6528 "Fires a ball with holy power. Hurts evil monsters greatly, but don't effect good monsters.");
6533 int rad = (plev < 30) ? 2 : 3;
6536 if (p_ptr->pclass == CLASS_PRIEST ||
6537 p_ptr->pclass == CLASS_HIGH_MAGE ||
6538 p_ptr->pclass == CLASS_SORCERER)
6539 base = plev + plev / 2;
6541 base = plev + plev / 4;
6544 if (info) return info_damage(dice, sides, base);
6548 if (!get_aim_dir(&dir)) return NULL;
6550 fire_ball(GF_HOLY_FIRE, dir, damroll(dice, sides) + base, rad);
6556 if (name) return _("悪魔払い", "Exorcism");
6557 if (desc) return _("視界内の全てのアンデッド及び悪魔にダメージを与え、邪悪なモンスターを恐怖させる。",
6558 "Damages all undead and demons in sight, and scares all evil monsters in sight.");
6564 if (info) return info_damage(1, sides, 0);
6568 dispel_undead(randint1(sides));
6569 dispel_demons(randint1(sides));
6576 if (name) return _("解呪", "Remove Curse");
6577 if (desc) return _("アイテムにかかった弱い呪いを解除する。", "Removes normal curses from equipped items.");
6584 msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));
6591 if (name) return _("透明視認", "Sense Unseen");
6592 if (desc) return _("一定時間、透明なものが見えるようになる。", "Gives see invisible for a while.");
6597 if (info) return info_duration(base, base);
6601 set_tim_invis(randint1(base) + base, FALSE);
6607 if (name) return _("対邪悪結界", "Protection from Evil");
6608 if (desc) return _("邪悪なモンスターの攻撃を防ぐバリアを張る。", "Gives aura which protect you from evil monster's physical attack.");
6612 int sides = 3 * plev;
6614 if (info) return info_duration(base, sides);
6618 set_protevil(randint1(sides) + base, FALSE);
6624 if (name) return _("裁きの雷", "Judgment Thunder");
6625 if (desc) return _("強力な電撃のボルトを放つ。", "Fires a powerful bolt of lightning.");
6628 HIT_POINT dam = plev * 5;
6630 if (info) return info_damage(0, 0, dam);
6634 if (!get_aim_dir(&dir)) return NULL;
6635 fire_bolt(GF_ELEC, dir, dam);
6641 if (name) return _("聖なる御言葉", "Holy Word");
6642 if (desc) return _("視界内の邪悪な存在に大きなダメージを与え、体力を回復し、毒、恐怖、朦朧状態、負傷から全快する。",
6643 "Damages all evil monsters in sight, heals HP somewhat, and completely heals poison, fear, stun and cut status.");
6646 int dam_sides = plev * 6;
6649 if (info) return format(_("損:1d%d/回%d", "dam:d%d/h%d"), dam_sides, heal);
6652 dispel_evil(randint1(dam_sides));
6663 if (name) return _("開かれた道", "Unbarring Ways");
6664 if (desc) return _("一直線上の全ての罠と扉を破壊する。", "Fires a beam which destroy traps and doors.");
6669 if (!get_aim_dir(&dir)) return NULL;
6677 if (name) return _("封魔", "Arrest");
6678 if (desc) return _("邪悪なモンスターの動きを止める。", "Attempts to paralyze an evil monster.");
6681 int power = plev * 2;
6683 if (info) return info_power(power);
6687 if (!get_aim_dir(&dir)) return NULL;
6694 if (name) return _("聖なるオーラ", "Holy Aura");
6695 if (desc) return _("一定時間、邪悪なモンスターを傷つける聖なるオーラを得る。",
6696 "Gives aura of holy power which injures evil monsters which attacked you for a while.");
6701 if (info) return info_duration(base, base);
6705 set_tim_sh_holy(randint1(base) + base, FALSE);
6711 if (name) return _("アンデッド&悪魔退散", "Dispel Undead & Demons");
6712 if (desc) return _("視界内の全てのアンデッド及び悪魔にダメージを与える。", "Damages all undead and demons in sight.");
6715 int sides = plev * 4;
6717 if (info) return info_damage(1, sides, 0);
6721 dispel_undead(randint1(sides));
6722 dispel_demons(randint1(sides));
6728 if (name) return _("邪悪退散", "Dispel Evil");
6729 if (desc) return _("視界内の全ての邪悪なモンスターにダメージを与える。", "Damages all evil monsters in sight.");
6732 int sides = plev * 4;
6734 if (info) return info_damage(1, sides, 0);
6738 dispel_evil(randint1(sides));
6744 if (name) return _("聖なる刃", "Holy Blade");
6745 if (desc) return _("通常の武器に滅邪の属性をつける。", "Makes current weapon especially deadly against evil monsters.");
6756 if (name) return _("スターバースト", "Star Burst");
6757 if (desc) return _("巨大な閃光の球を放つ。", "Fires a huge ball of powerful light.");
6760 HIT_POINT dam = 100 + plev * 2;
6763 if (info) return info_damage(0, 0, dam);
6767 if (!get_aim_dir(&dir)) return NULL;
6769 fire_ball(GF_LITE, dir, dam, rad);
6775 if (name) return _("天使召喚", "Summon Angel");
6776 if (desc) return _("天使を1体召喚する。", "Summons an angel.");
6781 bool pet = !one_in_(3);
6784 if (pet) flg |= PM_FORCE_PET;
6785 else flg |= PM_NO_PET;
6786 if (!(pet && (plev < 50))) flg |= PM_ALLOW_GROUP;
6788 if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, (plev * 3) / 2, SUMMON_ANGEL, flg))
6792 msg_print(_("「ご用でございますか、ご主人様」", "'What is thy bidding... Master?'"));
6796 msg_print(_("「我は汝の下僕にあらず! 悪行者よ、悔い改めよ!」", "Mortal! Repent of thy impiousness."));
6804 if (name) return _("士気高揚", "Heroism");
6805 if (desc) return _("一定時間、ヒーロー気分になる。", "Removes fear, and gives bonus to hit and 10 more HP for a while.");
6810 if (info) return info_duration(base, base);
6814 set_hero(randint1(base) + base, FALSE);
6822 if (name) return _("呪い退散", "Dispel Curse");
6823 if (desc) return _("アイテムにかかった強力な呪いを解除する。", "Removes normal and heavy curse from equipped items.");
6828 if (remove_all_curse())
6830 msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));
6837 if (name) return _("邪悪追放", "Banish Evil");
6838 if (desc) return _("視界内の全ての邪悪なモンスターをテレポートさせる。抵抗されると無効。",
6839 "Teleports all evil monsters in sight away unless resisted.");
6844 if (info) return info_power(power);
6848 if (banish_evil(power))
6850 msg_print(_("神聖な力が邪悪を打ち払った!", "The holy power banishes evil!"));
6857 if (name) return _("ハルマゲドン", "Armageddon");
6858 if (desc) return _("周辺のアイテム、モンスター、地形を破壊する。", "Destroy everything in nearby area.");
6866 destroy_area(p_ptr->y, p_ptr->x, base + randint1(sides), FALSE);
6872 if (name) return _("目には目を", "An Eye for an Eye");
6873 if (desc) return _("一定時間、自分がダメージを受けたときに攻撃を行ったモンスターに対して同等のダメージを与える。",
6874 "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.");
6879 if (info) return info_duration(base, base);
6883 set_tim_eyeeye(randint1(base) + base, FALSE);
6889 if (name) return _("神の怒り", "Wrath of the God");
6890 if (desc) return _("ターゲットの周囲に分解の球を多数落とす。", "Drops many balls of disintegration near the target.");
6893 HIT_POINT dam = plev * 3 + 25;
6896 if (info) return info_multi_damage(dam);
6900 if (!cast_wrath_of_the_god(dam, rad)) return NULL;
6906 if (name) return _("神威", "Divine Intervention");
6907 if (desc) return _("隣接するモンスターに聖なるダメージを与え、視界内のモンスターにダメージ、減速、朦朧、混乱、恐怖、眠りを与える。さらに体力を回復する。",
6908 "Damages all adjacent monsters with holy power. Damages and attempt to slow, stun, confuse, scare and freeze all monsters in sight. And heals HP.");
6911 int b_dam = plev * 11;
6912 int d_dam = plev * 4;
6914 int power = plev * 4;
6916 if (info) return format(_("回%d/損%d+%d", "h%d/dm%d+%d"), heal, d_dam, b_dam/2);
6919 project(0, 1, p_ptr->y, p_ptr->x, b_dam, GF_HOLY_FIRE, PROJECT_KILL, -1);
6920 dispel_monsters(d_dam);
6921 slow_monsters(plev);
6922 stun_monsters(power);
6923 confuse_monsters(power);
6924 turn_monsters(power);
6925 stasis_monsters(power);
6932 if (name) return _("聖戦", "Crusade");
6933 if (desc) return _("視界内の善良なモンスターをペットにしようとし、ならなかった場合及び善良でないモンスターを恐怖させる。さらに多数の加速された騎士を召喚し、ヒーロー、祝福、加速、対邪悪結界を得る。",
6934 "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.");
6940 int sp_sides = 20 + plev;
6945 for (i = 0; i < 12; i++)
6948 POSITION my = 0, mx = 0;
6952 scatter(&my, &mx, p_ptr->y, p_ptr->x, 4, 0);
6954 /* Require empty grids */
6955 if (cave_empty_bold2(my, mx)) break;
6957 if (attempt < 0) continue;
6958 summon_specific(-1, my, mx, plev, SUMMON_KNIGHTS, (PM_ALLOW_GROUP | PM_FORCE_PET | PM_HASTE));
6960 set_hero(randint1(base) + base, FALSE);
6961 set_blessed(randint1(base) + base, FALSE);
6962 set_fast(randint1(sp_sides) + sp_base, FALSE);
6963 set_protevil(randint1(base) + base, FALSE);
6977 * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST / SPELL_FAIL / SPELL_CONT / SPELL_STOP)
6978 * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST / SPELL_FAIL / SPELL_CONT / SPELL_STOP 時はNULL文字列を返す。
6980 static cptr do_music_spell(SPELL_IDX spell, BIT_FLAGS mode)
6982 bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
6983 bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
6984 bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
6985 bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
6986 bool fail = (mode == SPELL_FAIL) ? TRUE : FALSE;
6987 bool cont = (mode == SPELL_CONT) ? TRUE : FALSE;
6988 bool stop = (mode == SPELL_STOP) ? TRUE : FALSE;
6989 static const char s_dam[] = _("損傷:", "dam ");
6992 int plev = p_ptr->lev;
6997 if (name) return _("遅鈍の歌", "Song of Holding");
6998 if (desc) return _("視界内の全てのモンスターを減速させる。抵抗されると無効。", "Attempts to slow all monsters in sight.");
7000 /* Stop singing before start another */
7001 if (cast || fail) stop_singing();
7005 msg_print(_("ゆっくりとしたメロディを口ずさみ始めた...", "You start humming a slow, steady melody..."));
7006 start_singing(spell, MUSIC_SLOW);
7012 if (info) return info_power(power);
7016 slow_monsters(plev);
7022 if (name) return _("祝福の歌", "Song of Blessing");
7023 if (desc) return _("命中率とACのボーナスを得る。", "Gives bonus to hit and AC for a few turns.");
7025 /* Stop singing before start another */
7026 if (cast || fail) stop_singing();
7030 msg_print(_("厳かなメロディを奏で始めた...", "The holy power of the Music of the Ainur enters you..."));
7031 start_singing(spell, MUSIC_BLESS);
7036 if (!p_ptr->blessed)
7038 msg_print(_("高潔な気分が消え失せた。", "The prayer has expired."));
7045 if (name) return _("崩壊の音色", "Wrecking Note");
7046 if (desc) return _("轟音のボルトを放つ。", "Fires a bolt of sound.");
7048 /* Stop singing before start another */
7049 if (cast || fail) stop_singing();
7052 int dice = 4 + (plev - 1) / 5;
7055 if (info) return info_damage(dice, sides, 0);
7059 if (!get_aim_dir(&dir)) return NULL;
7061 fire_bolt(GF_SOUND, dir, damroll(dice, sides));
7067 if (name) return _("朦朧の旋律", "Stun Pattern");
7068 if (desc) return _("視界内の全てのモンスターを朦朧させる。抵抗されると無効。", "Attempts to stun all monsters in sight.");
7070 /* Stop singing before start another */
7071 if (cast || fail) stop_singing();
7075 msg_print(_("眩惑させるメロディを奏で始めた...", "You weave a pattern of sounds to bewilder and daze..."));
7076 start_singing(spell, MUSIC_STUN);
7080 int dice = plev / 10;
7083 if (info) return info_power_dice(dice, sides);
7087 stun_monsters(damroll(dice, sides));
7094 if (name) return _("生命の流れ", "Flow of Life");
7095 if (desc) return _("体力を少し回復させる。", "Heals HP a little.");
7097 /* Stop singing before start another */
7098 if (cast || fail) stop_singing();
7102 msg_print(_("歌を通して体に活気が戻ってきた...", "Life flows through you as you sing a song of healing..."));
7103 start_singing(spell, MUSIC_L_LIFE);
7110 if (info) return info_heal(dice, sides, 0);
7114 hp_player(damroll(dice, sides));
7121 if (name) return _("太陽の歌", "Song of the Sun");
7122 if (desc) return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently.");
7124 /* Stop singing before start another */
7125 if (cast || fail) stop_singing();
7129 int sides = plev / 2;
7130 int rad = plev / 10 + 1;
7132 if (info) return info_damage(dice, sides, 0);
7136 msg_print(_("光り輝く歌が辺りを照らした。", "Your uplifting song brings brightness to dark places..."));
7137 lite_area(damroll(dice, sides), rad);
7143 if (name) return _("恐怖の歌", "Song of Fear");
7144 if (desc) return _("視界内の全てのモンスターを恐怖させる。抵抗されると無効。", "Attempts to scare all monsters in sight.");
7146 /* Stop singing before start another */
7147 if (cast || fail) stop_singing();
7151 msg_print(_("おどろおどろしいメロディを奏で始めた...", "You start weaving a fearful pattern..."));
7152 start_singing(spell, MUSIC_FEAR);
7158 if (info) return info_power(power);
7162 project_hack(GF_TURN_ALL, power);
7169 if (name) return _("戦いの歌", "Heroic Ballad");
7170 if (desc) return _("ヒーロー気分になる。", "Removes fear, and gives bonus to hit and 10 more HP for a while.");
7172 /* Stop singing before start another */
7173 if (cast || fail) stop_singing();
7177 msg_print(_("激しい戦いの歌を歌った...", "You start singing a song of intense fighting..."));
7179 (void)hp_player(10);
7180 (void)set_afraid(0);
7182 /* Recalculate hitpoints */
7183 p_ptr->update |= (PU_HP);
7185 start_singing(spell, MUSIC_HERO);
7192 msg_print(_("ヒーローの気分が消え失せた。", "The heroism wears off."));
7193 /* Recalculate hitpoints */
7194 p_ptr->update |= (PU_HP);
7201 if (name) return _("霊的知覚", "Clairaudience");
7202 if (desc) return _("近くの罠/扉/階段を感知する。レベル15で全てのモンスター、20で財宝とアイテムを感知できるようになる。レベル25で周辺の地形を感知し、40でその階全体を永久に照らし、ダンジョン内のすべてのアイテムを感知する。この効果は歌い続けることで順に起こる。",
7203 "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.");
7205 /* Stop singing before start another */
7206 if (cast || fail) stop_singing();
7210 msg_print(_("静かな音楽が感覚を研ぎ澄まさせた...", "Your quiet music sharpens your sense of hearing..."));
7211 /* Hack -- Initialize the turn count */
7212 SINGING_COUNT(p_ptr) = 0;
7213 start_singing(spell, MUSIC_DETECT);
7217 int rad = DETECT_RAD_DEFAULT;
7219 if (info) return info_radius(rad);
7223 int count = SINGING_COUNT(p_ptr);
7225 if (count >= 19) wiz_lite(FALSE);
7229 if (plev > 39 && count < 19)
7230 SINGING_COUNT(p_ptr) = count + 1;
7234 /* There are too many hidden treasure. So... */
7235 /* detect_treasure(rad); */
7236 detect_objects_gold(rad);
7237 detect_objects_normal(rad);
7239 if (plev > 24 && count < 11)
7240 SINGING_COUNT(p_ptr) = count + 1;
7244 detect_monsters_invis(rad);
7245 detect_monsters_normal(rad);
7247 if (plev > 19 && count < 6)
7248 SINGING_COUNT(p_ptr) = count + 1;
7250 detect_traps(rad, TRUE);
7254 if (plev > 14 && count < 3)
7255 SINGING_COUNT(p_ptr) = count + 1;
7262 if (name) return _("魂の歌", "Soul Shriek");
7263 if (desc) return _("視界内の全てのモンスターに対して精神攻撃を行う。", "Damages all monsters in sight with PSI damages.");
7265 /* Stop singing before start another */
7266 if (cast || fail) stop_singing();
7270 msg_print(_("精神を捻じ曲げる歌を歌った...", "You start singing a song of soul in pain..."));
7271 start_singing(spell, MUSIC_PSI);
7276 int sides = plev * 3 / 2;
7278 if (info) return info_damage(dice, sides, 0);
7282 project_hack(GF_PSI, damroll(dice, sides));
7289 if (name) return _("知識の歌", "Song of Lore");
7290 if (desc) return _("自分のいるマスと隣りのマスに落ちているアイテムを鑑定する。", "Identifies all items which are in the adjacent squares.");
7292 /* Stop singing before start another */
7293 if (cast || fail) stop_singing();
7297 msg_print(_("この世界の知識が流れ込んできた...", "You recall the rich lore of the world..."));
7298 start_singing(spell, MUSIC_ID);
7304 if (info) return info_radius(rad);
7308 * MP不足で鑑定が発動される前に歌が中断してしまうのを防止。
7312 project(0, rad, p_ptr->y, p_ptr->x, 0, GF_IDENTIFY, PROJECT_ITEM, -1);
7319 if (name) return _("隠遁の歌", "Hiding Tune");
7320 if (desc) return _("隠密行動能力を上昇させる。", "Gives improved stealth.");
7322 /* Stop singing before start another */
7323 if (cast || fail) stop_singing();
7327 msg_print(_("あなたの姿が景色にとけこんでいった...", "Your song carries you beyond the sight of mortal eyes..."));
7328 start_singing(spell, MUSIC_STEALTH);
7333 if (!p_ptr->tim_stealth)
7335 msg_print(_("姿がはっきりと見えるようになった。", "You are no longer hided."));
7342 if (name) return _("幻影の旋律", "Illusion Pattern");
7343 if (desc) return _("視界内の全てのモンスターを混乱させる。抵抗されると無効。", "Attempts to confuse all monsters in sight.");
7345 /* Stop singing before start another */
7346 if (cast || fail) stop_singing();
7350 msg_print(_("辺り一面に幻影が現れた...", "You weave a pattern of sounds to beguile and confuse..."));
7351 start_singing(spell, MUSIC_CONF);
7355 int power = plev * 2;
7357 if (info) return info_power(power);
7361 confuse_monsters(power);
7368 if (name) return _("破滅の叫び", "Doomcall");
7369 if (desc) return _("視界内の全てのモンスターに対して轟音攻撃を行う。", "Damages all monsters in sight with booming sound.");
7371 /* Stop singing before start another */
7372 if (cast || fail) stop_singing();
7376 msg_print(_("轟音が響いた...", "The fury of the Downfall of Numenor lashes out..."));
7377 start_singing(spell, MUSIC_SOUND);
7381 int dice = 10 + plev / 5;
7384 if (info) return info_damage(dice, sides, 0);
7388 project_hack(GF_SOUND, damroll(dice, sides));
7395 if (name) return _("フィリエルの歌", "Firiel's Song");
7396 if (desc) return _("周囲の死体や骨を生き返す。", "Resurrects nearby corpse and skeletons. And makes these your pets.");
7399 /* Stop singing before start another */
7400 if (cast || fail) stop_singing();
7404 msg_print(_("生命と復活のテーマを奏で始めた...", "The themes of life and revival are woven into your song..."));
7405 animate_dead(0, p_ptr->y, p_ptr->x);
7411 if (name) return _("旅の仲間", "Fellowship Chant");
7412 if (desc) return _("視界内の全てのモンスターを魅了する。抵抗されると無効。", "Attempts to charm all monsters in sight.");
7414 /* Stop singing before start another */
7415 if (cast || fail) stop_singing();
7419 msg_print(_("安らかなメロディを奏で始めた...", "You weave a slow, soothing melody of imploration..."));
7420 start_singing(spell, MUSIC_CHARM);
7424 int dice = 10 + plev / 15;
7427 if (info) return info_power_dice(dice, sides);
7431 charm_monsters(damroll(dice, sides));
7438 if (name) return _("分解音波", "Sound of disintegration");
7439 if (desc) return _("壁を掘り進む。自分の足元のアイテムは蒸発する。", "Makes you be able to burrow into walls. Objects under your feet evaporate.");
7441 /* Stop singing before start another */
7442 if (cast || fail) stop_singing();
7446 msg_print(_("粉砕するメロディを奏で始めた...", "You weave a violent pattern of sounds to break wall."));
7447 start_singing(spell, MUSIC_WALL);
7453 * MP不足で効果が発動される前に歌が中断してしまうのを防止。
7457 project(0, 0, p_ptr->y, p_ptr->x,
7458 0, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM | PROJECT_HIDE, -1);
7464 if (name) return _("元素耐性", "Finrod's Resistance");
7465 if (desc) return _("酸、電撃、炎、冷気、毒に対する耐性を得る。装備による耐性に累積する。",
7466 "Gives resistance to fire, cold, electricity, acid and poison. These resistances can be added to which from equipment for more powerful resistances.");
7468 /* Stop singing before start another */
7469 if (cast || fail) stop_singing();
7473 msg_print(_("元素の力に対する忍耐の歌を歌った。", "You sing a song of perseverance against powers..."));
7474 start_singing(spell, MUSIC_RESIST);
7479 if (!p_ptr->oppose_acid)
7481 msg_print(_("酸への耐性が薄れた気がする。", "You feel less resistant to acid."));
7484 if (!p_ptr->oppose_elec)
7486 msg_print(_("電撃への耐性が薄れた気がする。", "You feel less resistant to elec."));
7489 if (!p_ptr->oppose_fire)
7491 msg_print(_("火への耐性が薄れた気がする。", "You feel less resistant to fire."));
7494 if (!p_ptr->oppose_cold)
7496 msg_print(_("冷気への耐性が薄れた気がする。", "You feel less resistant to cold."));
7499 if (!p_ptr->oppose_pois)
7501 msg_print(_("毒への耐性が薄れた気がする。", "You feel less resistant to pois."));
7508 if (name) return _("ホビットのメロディ", "Hobbit Melodies");
7509 if (desc) return _("加速する。", "Hastes you.");
7511 /* Stop singing before start another */
7512 if (cast || fail) stop_singing();
7516 msg_print(_("軽快な歌を口ずさみ始めた...", "You start singing joyful pop song..."));
7517 start_singing(spell, MUSIC_SPEED);
7524 msg_print(_("動きの素早さがなくなったようだ。", "You feel yourself slow down."));
7531 if (name) return _("歪んだ世界", "World Contortion");
7532 if (desc) return _("近くのモンスターをテレポートさせる。抵抗されると無効。", "Teleports all nearby monsters away unless resisted.");
7535 int rad = plev / 15 + 1;
7536 int power = plev * 3 + 1;
7538 if (info) return info_radius(rad);
7540 /* Stop singing before start another */
7541 if (cast || fail) stop_singing();
7545 msg_print(_("歌が空間を歪めた...", "Reality whirls wildly as you sing a dizzying melody..."));
7546 project(0, rad, p_ptr->y, p_ptr->x, power, GF_AWAY_ALL, PROJECT_KILL, -1);
7552 if (name) return _("退散の歌", "Dispelling chant");
7553 if (desc) return _("視界内の全てのモンスターにダメージを与える。邪悪なモンスターに特に大きなダメージを与える。",
7554 "Damages all monsters in sight. Hurts evil monsters greatly.");
7556 /* Stop singing before start another */
7557 if (cast || fail) stop_singing();
7561 msg_print(_("耐えられない不協和音が敵を責め立てた...", "You cry out in an ear-wracking voice..."));
7562 start_singing(spell, MUSIC_DISPEL);
7566 int m_sides = plev * 3;
7567 int e_sides = plev * 3;
7569 if (info) return format("%s1d%d+1d%d", s_dam, m_sides, e_sides);
7573 dispel_monsters(randint1(m_sides));
7574 dispel_evil(randint1(e_sides));
7580 if (name) return _("サルマンの甘言", "The Voice of Saruman");
7581 if (desc) return _("視界内の全てのモンスターを減速させ、眠らせようとする。抵抗されると無効。", "Attempts to slow and sleep all monsters in sight.");
7583 /* Stop singing before start another */
7584 if (cast || fail) stop_singing();
7588 msg_print(_("優しく、魅力的な歌を口ずさみ始めた...", "You start humming a gentle and attractive song..."));
7589 start_singing(spell, MUSIC_SARUMAN);
7595 if (info) return info_power(power);
7599 slow_monsters(plev);
7600 sleep_monsters(plev);
7607 if (name) return _("嵐の音色", "Song of the Tempest");
7608 if (desc) return _("轟音のビームを放つ。", "Fires a beam of sound.");
7611 int dice = 15 + (plev - 1) / 2;
7614 if (info) return info_damage(dice, sides, 0);
7616 /* Stop singing before start another */
7617 if (cast || fail) stop_singing();
7621 if (!get_aim_dir(&dir)) return NULL;
7623 fire_beam(GF_SOUND, dir, damroll(dice, sides));
7629 if (name) return _("もう一つの世界", "Ambarkanta");
7630 if (desc) return _("現在の階を再構成する。", "Recreates current dungeon level.");
7636 if (info) return info_delay(base, sides);
7638 /* Stop singing before start another */
7639 if (cast || fail) stop_singing();
7643 msg_print(_("周囲が変化し始めた...", "You sing of the primeval shaping of Middle-earth..."));
7650 if (name) return _("破壊の旋律", "Wrecking Pattern");
7651 if (desc) return _("周囲のダンジョンを揺らし、壁と床をランダムに入れ変える。",
7652 "Shakes dungeon structure, and results in random swapping of floors and walls.");
7654 /* Stop singing before start another */
7655 if (cast || fail) stop_singing();
7659 msg_print(_("破壊的な歌が響きわたった...", "You weave a pattern of sounds to contort and shatter..."));
7660 start_singing(spell, MUSIC_QUAKE);
7666 if (info) return info_radius(rad);
7670 earthquake(p_ptr->y, p_ptr->x, 10);
7678 if (name) return _("停滞の歌", "Stationary Shriek");
7679 if (desc) return _("視界内の全てのモンスターを麻痺させようとする。抵抗されると無効。", "Attempts to freeze all monsters in sight.");
7681 /* Stop singing before start another */
7682 if (cast || fail) stop_singing();
7686 msg_print(_("ゆっくりとしたメロディを奏で始めた...", "You weave a very slow pattern which is almost likely to stop..."));
7687 start_singing(spell, MUSIC_STASIS);
7691 int power = plev * 4;
7693 if (info) return info_power(power);
7697 stasis_monsters(power);
7704 if (name) return _("守りの歌", "Endurance");
7705 if (desc) return _("自分のいる床の上に、モンスターが通り抜けたり召喚されたりすることができなくなるルーンを描く。",
7706 "Sets a glyph on the floor beneath you. Monsters cannot attack you if you are on a glyph, but can try to break glyph.");
7709 /* Stop singing before start another */
7710 if (cast || fail) stop_singing();
7714 msg_print(_("歌が神聖な場を作り出した...", "The holy power of the Music is creating sacred field..."));
7721 if (name) return _("英雄の詩", "The Hero's Poem");
7722 if (desc) return _("加速し、ヒーロー気分になり、視界内の全てのモンスターにダメージを与える。",
7723 "Hastes you. Gives heroism. Damages all monsters in sight.");
7725 /* Stop singing before start another */
7726 if (cast || fail) stop_singing();
7730 msg_print(_("英雄の歌を口ずさんだ...", "You chant a powerful, heroic call to arms..."));
7731 (void)hp_player(10);
7732 (void)set_afraid(0);
7734 /* Recalculate hitpoints */
7735 p_ptr->update |= (PU_HP);
7737 start_singing(spell, MUSIC_SHERO);
7744 msg_print(_("ヒーローの気分が消え失せた。", "The heroism wears off."));
7745 /* Recalculate hitpoints */
7746 p_ptr->update |= (PU_HP);
7751 msg_print(_("動きの素早さがなくなったようだ。", "You feel yourself slow down."));
7757 int sides = plev * 3;
7759 if (info) return info_damage(dice, sides, 0);
7763 dispel_monsters(damroll(dice, sides));
7769 if (name) return _("ヤヴァンナの助け", "Relief of Yavanna");
7770 if (desc) return _("強力な回復の歌で、負傷と朦朧状態も全快する。", "Powerful healing song. Also heals cut and stun completely.");
7772 /* Stop singing before start another */
7773 if (cast || fail) stop_singing();
7777 msg_print(_("歌を通して体に活気が戻ってきた...", "Life flows through you as you sing the song..."));
7778 start_singing(spell, MUSIC_H_LIFE);
7785 if (info) return info_heal(dice, sides, 0);
7789 hp_player(damroll(dice, sides));
7798 if (name) return _("再生の歌", "Goddess' rebirth");
7799 if (desc) return _("すべてのステータスと経験値を回復する。", "Restores all stats and experience.");
7802 /* Stop singing before start another */
7803 if (cast || fail) stop_singing();
7807 msg_print(_("暗黒の中に光と美をふりまいた。体が元の活力を取り戻した。",
7808 "You strewed light and beauty in the dark as you sing. You feel refreshed."));
7809 (void)do_res_stat(A_STR);
7810 (void)do_res_stat(A_INT);
7811 (void)do_res_stat(A_WIS);
7812 (void)do_res_stat(A_DEX);
7813 (void)do_res_stat(A_CON);
7814 (void)do_res_stat(A_CHR);
7815 (void)restore_level();
7821 if (name) return _("サウロンの魔術", "Wizardry of Sauron");
7822 if (desc) return _("非常に強力でごく小さい轟音の球を放つ。", "Fires an extremely powerful tiny ball of sound.");
7825 int dice = 50 + plev;
7829 if (info) return info_damage(dice, sides, 0);
7831 /* Stop singing before start another */
7832 if (cast || fail) stop_singing();
7836 if (!get_aim_dir(&dir)) return NULL;
7838 fire_ball(GF_SOUND, dir, damroll(dice, sides), rad);
7844 if (name) return _("フィンゴルフィンの挑戦", "Fingolfin's Challenge");
7845 if (desc) return _("ダメージを受けなくなるバリアを張る。",
7846 "Generates barrier which completely protect you from almost all damages. Takes a few your turns when the barrier breaks.");
7848 /* Stop singing before start another */
7849 if (cast || fail) stop_singing();
7853 msg_print(_("フィンゴルフィンの冥王への挑戦を歌った...",
7854 "You recall the valor of Fingolfin's challenge to the Dark Lord..."));
7857 p_ptr->redraw |= (PR_MAP);
7859 /* Update monsters */
7860 p_ptr->update |= (PU_MONSTERS);
7863 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
7865 start_singing(spell, MUSIC_INVULN);
7872 msg_print(_("無敵ではなくなった。", "The invulnerability wears off."));
7874 p_ptr->redraw |= (PR_MAP);
7876 /* Update monsters */
7877 p_ptr->update |= (PU_MONSTERS);
7880 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
7893 * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_CAST)
7894 * @return SPELL_NAME / SPELL_DESC 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
7896 static cptr do_hissatsu_spell(SPELL_IDX spell, BIT_FLAGS mode)
7898 bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
7899 bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
7900 bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
7903 int plev = p_ptr->lev;
7908 if (name) return _("飛飯綱", "Tobi-Izuna");
7909 if (desc) return _("2マス離れたところにいるモンスターを攻撃する。", "Attacks a two squares distant monster.");
7914 if (!get_aim_dir(&dir)) return NULL;
7916 project_hook(GF_ATTACK, dir, HISSATSU_2, PROJECT_STOP | PROJECT_KILL);
7921 if (name) return _("五月雨斬り", "3-Way Attack");
7922 if (desc) return _("3方向に対して攻撃する。", "Attacks in 3 directions in one time.");
7929 if (!get_rep_dir2(&dir)) return NULL;
7930 if (dir == 5) return NULL;
7932 for (cdir = 0;cdir < 8; cdir++)
7934 if (cdd[cdir] == dir) break;
7937 if (cdir == 8) return NULL;
7939 y = p_ptr->y + ddy_cdd[cdir];
7940 x = p_ptr->x + ddx_cdd[cdir];
7941 if (cave[y][x].m_idx)
7944 msg_print(_("攻撃は空を切った。", "You attack the empty air."));
7946 y = p_ptr->y + ddy_cdd[(cdir + 7) % 8];
7947 x = p_ptr->x + ddx_cdd[(cdir + 7) % 8];
7948 if (cave[y][x].m_idx)
7951 msg_print(_("攻撃は空を切った。", "You attack the empty air."));
7953 y = p_ptr->y + ddy_cdd[(cdir + 1) % 8];
7954 x = p_ptr->x + ddx_cdd[(cdir + 1) % 8];
7955 if (cave[y][x].m_idx)
7958 msg_print(_("攻撃は空を切った。", "You attack the empty air."));
7963 if (name) return _("ブーメラン", "Boomerang");
7964 if (desc) return _("武器を手元に戻ってくるように投げる。戻ってこないこともある。",
7965 "Throws current weapon. And it'll return to your hand unless failed.");
7969 if (!do_cmd_throw_aux(1, TRUE, -1)) return NULL;
7974 if (name) return _("焔霊", "Burning Strike");
7975 if (desc) return _("火炎耐性のないモンスターに大ダメージを与える。", "Attacks a monster with more damage unless it has resistance to fire.");
7981 if (!get_rep_dir2(&dir)) return NULL;
7982 if (dir == 5) return NULL;
7984 y = p_ptr->y + ddy[dir];
7985 x = p_ptr->x + ddx[dir];
7987 if (cave[y][x].m_idx)
7988 py_attack(y, x, HISSATSU_FIRE);
7991 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
7998 if (name) return _("殺気感知", "Detect Ferocity");
7999 if (desc) return _("近くの思考することができるモンスターを感知する。", "Detects all monsters except mindless in your vicinity.");
8003 detect_monsters_mind(DETECT_RAD_DEFAULT);
8008 if (name) return _("みね打ち", "Strike to Stun");
8009 if (desc) return _("相手にダメージを与えないが、朦朧とさせる。", "Attempts to stun a monster in the adjacent.");
8015 if (!get_rep_dir2(&dir)) return NULL;
8016 if (dir == 5) return NULL;
8018 y = p_ptr->y + ddy[dir];
8019 x = p_ptr->x + ddx[dir];
8021 if (cave[y][x].m_idx)
8022 py_attack(y, x, HISSATSU_MINEUCHI);
8025 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
8032 if (name) return _("カウンター", "Counter");
8033 if (desc) return _("相手に攻撃されたときに反撃する。反撃するたびにMPを消費。",
8034 "Prepares to counterattack. When attack by a monster, strikes back using SP each time.");
8040 msg_print(_("乗馬中には無理だ。", "You cannot do it when riding."));
8043 msg_print(_("相手の攻撃に対して身構えた。", "You prepare to counter blow."));
8044 p_ptr->counter = TRUE;
8049 if (name) return _("払い抜け", "Harainuke");
8050 if (desc) return _("攻撃した後、反対側に抜ける。",
8051 "Attacks monster with your weapons normally, then move through counter side of the monster.");
8059 msg_print(_("乗馬中には無理だ。", "You cannot do it when riding."));
8063 if (!get_rep_dir2(&dir)) return NULL;
8065 if (dir == 5) return NULL;
8066 y = p_ptr->y + ddy[dir];
8067 x = p_ptr->x + ddx[dir];
8069 if (!cave[y][x].m_idx)
8071 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
8077 if (!player_can_enter(cave[y][x].feat, 0) || is_trap(cave[y][x].feat))
8083 if (player_can_enter(cave[y][x].feat, 0) && !is_trap(cave[y][x].feat) && !cave[y][x].m_idx)
8087 /* Move the player */
8088 (void)move_player_effect(y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP);
8094 if (name) return _("サーペンツタン", "Serpent's Tongue");
8095 if (desc) return _("毒耐性のないモンスターに大ダメージを与える。", "Attacks a monster with more damage unless it has resistance to poison.");
8101 if (!get_rep_dir2(&dir)) return NULL;
8102 if (dir == 5) return NULL;
8104 y = p_ptr->y + ddy[dir];
8105 x = p_ptr->x + ddx[dir];
8107 if (cave[y][x].m_idx)
8108 py_attack(y, x, HISSATSU_POISON);
8111 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
8118 if (name) return _("斬魔剣弐の太刀", "Zammaken");
8119 if (desc) return _("生命のない邪悪なモンスターに大ダメージを与えるが、他のモンスターには全く効果がない。",
8120 "Attacks an evil unliving monster with great damage. No effect to other monsters.");
8126 if (!get_rep_dir2(&dir)) return NULL;
8127 if (dir == 5) return NULL;
8129 y = p_ptr->y + ddy[dir];
8130 x = p_ptr->x + ddx[dir];
8132 if (cave[y][x].m_idx)
8133 py_attack(y, x, HISSATSU_ZANMA);
8136 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
8143 if (name) return _("裂風剣", "Wind Blast");
8144 if (desc) return _("攻撃した相手を後方へ吹き飛ばす。", "Attacks an adjacent monster, and blow it away.");
8150 if (!get_rep_dir2(&dir)) return NULL;
8151 if (dir == 5) return NULL;
8153 y = p_ptr->y + ddy[dir];
8154 x = p_ptr->x + ddx[dir];
8156 if (cave[y][x].m_idx)
8160 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
8163 if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
8167 if (cave[y][x].m_idx)
8170 POSITION ty = y, tx = x;
8171 POSITION oy = y, ox = x;
8172 MONSTER_IDX m_idx = cave[y][x].m_idx;
8173 monster_type *m_ptr = &m_list[m_idx];
8176 monster_desc(m_name, m_ptr, 0);
8178 for (i = 0; i < 5; i++)
8182 if (cave_empty_bold(y, x))
8189 if ((ty != oy) || (tx != ox))
8191 msg_format(_("%sを吹き飛ばした!", "You blow %s away!"), m_name);
8192 cave[oy][ox].m_idx = 0;
8193 cave[ty][tx].m_idx = m_idx;
8197 update_mon(m_idx, TRUE);
8201 if (r_info[m_ptr->r_idx].flags7 & (RF7_LITE_MASK | RF7_DARK_MASK))
8202 p_ptr->update |= (PU_MON_LITE);
8209 if (name) return _("刀匠の目利き", "Judge");
8210 if (desc) return _("武器・防具を1つ識別する。レベル45以上で武器・防具の能力を完全に知ることができる。",
8211 "Identifies a weapon or armor. Or *identifies* these at level 45.");
8217 if (!identify_fully(TRUE)) return NULL;
8221 if (!ident_spell(TRUE)) return NULL;
8227 if (name) return _("破岩斬", "Rock Smash");
8228 if (desc) return _("岩を壊し、岩石系のモンスターに大ダメージを与える。", "Breaks rock. Or greatly damage a monster made by rocks.");
8234 if (!get_rep_dir2(&dir)) return NULL;
8235 if (dir == 5) return NULL;
8237 y = p_ptr->y + ddy[dir];
8238 x = p_ptr->x + ddx[dir];
8240 if (cave[y][x].m_idx)
8241 py_attack(y, x, HISSATSU_HAGAN);
8243 if (!cave_have_flag_bold(y, x, FF_HURT_ROCK)) break;
8245 /* Destroy the feature */
8246 cave_alter_feat(y, x, FF_HURT_ROCK);
8248 /* Update some things */
8249 p_ptr->update |= (PU_FLOW);
8254 if (name) return _("乱れ雪月花", "Midare-Setsugekka");
8255 if (desc) return _("攻撃回数が増え、冷気耐性のないモンスターに大ダメージを与える。",
8256 "Attacks a monster with increased number of attacks and more damage unless it has resistance to cold.");
8262 if (!get_rep_dir2(&dir)) return NULL;
8263 if (dir == 5) return NULL;
8265 y = p_ptr->y + ddy[dir];
8266 x = p_ptr->x + ddx[dir];
8268 if (cave[y][x].m_idx)
8269 py_attack(y, x, HISSATSU_COLD);
8272 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
8279 if (name) return _("急所突き", "Spot Aiming");
8280 if (desc) return _("モンスターを一撃で倒す攻撃を繰り出す。失敗すると1点しかダメージを与えられない。",
8281 "Attempts to kill a monster instantly. If failed cause only 1HP of damage.");
8287 if (!get_rep_dir2(&dir)) return NULL;
8288 if (dir == 5) return NULL;
8290 y = p_ptr->y + ddy[dir];
8291 x = p_ptr->x + ddx[dir];
8293 if (cave[y][x].m_idx)
8294 py_attack(y, x, HISSATSU_KYUSHO);
8297 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
8304 if (name) return _("魔神斬り", "Majingiri");
8305 if (desc) return _("会心の一撃で攻撃する。攻撃がかわされやすい。",
8306 "Attempts to attack with critical hit. But this attack is easy to evade for a monster.");
8312 if (!get_rep_dir2(&dir)) return NULL;
8313 if (dir == 5) return NULL;
8315 y = p_ptr->y + ddy[dir];
8316 x = p_ptr->x + ddx[dir];
8318 if (cave[y][x].m_idx)
8319 py_attack(y, x, HISSATSU_MAJIN);
8322 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
8329 if (name) return _("捨て身", "Desperate Attack");
8330 if (desc) return _("強力な攻撃を繰り出す。次のターンまでの間、食らうダメージが増える。",
8331 "Attacks with all of your power. But all damages you take will be doubled for one turn.");
8337 if (!get_rep_dir2(&dir)) return NULL;
8338 if (dir == 5) return NULL;
8340 y = p_ptr->y + ddy[dir];
8341 x = p_ptr->x + ddx[dir];
8343 if (cave[y][x].m_idx)
8344 py_attack(y, x, HISSATSU_SUTEMI);
8347 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
8350 p_ptr->sutemi = TRUE;
8355 if (name) return _("雷撃鷲爪斬", "Lightning Eagle");
8356 if (desc) return _("電撃耐性のないモンスターに非常に大きいダメージを与える。",
8357 "Attacks a monster with more damage unless it has resistance to electricity.");
8363 if (!get_rep_dir2(&dir)) return NULL;
8364 if (dir == 5) return NULL;
8366 y = p_ptr->y + ddy[dir];
8367 x = p_ptr->x + ddx[dir];
8369 if (cave[y][x].m_idx)
8370 py_attack(y, x, HISSATSU_ELEC);
8373 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
8380 if (name) return _("入身", "Rush Attack");
8381 if (desc) return _("素早く相手に近寄り攻撃する。", "Steps close to a monster and attacks at a time.");
8385 if (!rush_attack(NULL)) return NULL;
8390 if (name) return _("赤流渦", "Bloody Maelstrom");
8391 if (desc) return _("自分自身も傷を作りつつ、その傷が深いほど大きい威力で全方向の敵を攻撃できる。生きていないモンスターには効果がない。",
8392 "Attacks all adjacent monsters with power corresponding to your cut status. Then increases your cut status. No effect to unliving monsters.");
8399 monster_type *m_ptr;
8401 if (p_ptr->cut < 300)
8402 set_cut(p_ptr->cut + 300);
8404 set_cut(p_ptr->cut * 2);
8406 for (dir = 0; dir < 8; dir++)
8408 y = p_ptr->y + ddy_ddd[dir];
8409 x = p_ptr->x + ddx_ddd[dir];
8410 c_ptr = &cave[y][x];
8412 /* Get the monster */
8413 m_ptr = &m_list[c_ptr->m_idx];
8415 /* Hack -- attack monsters */
8416 if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))
8418 if (!monster_living(&r_info[m_ptr->r_idx]))
8422 monster_desc(m_name, m_ptr, 0);
8423 msg_format(_("%sには効果がない!", "%s is unharmed!"), m_name);
8425 else py_attack(y, x, HISSATSU_SEKIRYUKA);
8432 if (name) return _("激震撃", "Earthquake Blow");
8433 if (desc) return _("地震を起こす。", "Shakes dungeon structure, and results in random swapping of floors and walls.");
8439 if (!get_rep_dir2(&dir)) return NULL;
8440 if (dir == 5) return NULL;
8442 y = p_ptr->y + ddy[dir];
8443 x = p_ptr->x + ddx[dir];
8445 if (cave[y][x].m_idx)
8446 py_attack(y, x, HISSATSU_QUAKE);
8448 earthquake(p_ptr->y, p_ptr->x, 10);
8453 if (name) return _("地走り", "Crack");
8454 if (desc) return _("衝撃波のビームを放つ。", "Fires a beam of shock wave.");
8458 int total_damage = 0, basedam, i;
8459 u32b flgs[TR_FLAG_SIZE];
8461 if (!get_aim_dir(&dir)) return NULL;
8462 msg_print(_("武器を大きく振り下ろした。", "You swing your weapon downward."));
8463 for (i = 0; i < 2; i++)
8467 if (!buki_motteruka(INVEN_RARM+i)) break;
8468 o_ptr = &inventory[INVEN_RARM+i];
8469 basedam = (o_ptr->dd * (o_ptr->ds + 1)) * 50;
8470 damage = o_ptr->to_d * 100;
8471 object_flags(o_ptr, flgs);
8472 if ((o_ptr->name1 == ART_VORPAL_BLADE) || (o_ptr->name1 == ART_CHAINSWORD))
8478 else if (have_flag(flgs, TR_VORPAL))
8480 /* vorpal flag only */
8485 damage *= p_ptr->num_blow[i];
8486 total_damage += damage / 200;
8487 if (i) total_damage = total_damage*7/10;
8489 fire_beam(GF_FORCE, dir, total_damage);
8494 if (name) return _("気迫の雄叫び", "War Cry");
8495 if (desc) return _("視界内の全モンスターに対して轟音の攻撃を行う。さらに、近くにいるモンスターを怒らせる。",
8496 "Damages all monsters in sight with sound. Aggravate nearby monsters.");
8500 msg_print(_("雄叫びをあげた!", "You roar out!"));
8501 project_hack(GF_SOUND, randint1(plev * 3));
8502 aggravate_monsters(0);
8507 if (name) return _("無双三段", "Musou-Sandan");
8508 if (desc) return _("強力な3段攻撃を繰り出す。", "Attacks with powerful 3 strikes.");
8514 if (!get_rep_dir2(&dir)) return NULL;
8515 if (dir == 5) return NULL;
8517 for (i = 0; i < 3; i++)
8523 monster_type *m_ptr;
8525 y = p_ptr->y + ddy[dir];
8526 x = p_ptr->x + ddx[dir];
8527 c_ptr = &cave[y][x];
8530 py_attack(y, x, HISSATSU_3DAN);
8533 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
8537 if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
8542 /* Monster is dead? */
8543 if (!c_ptr->m_idx) break;
8547 m_idx = c_ptr->m_idx;
8548 m_ptr = &m_list[m_idx];
8550 /* Monster cannot move back? */
8551 if (!monster_can_enter(ny, nx, &r_info[m_ptr->r_idx], 0))
8554 if (i < 2) msg_print(NULL);
8559 cave[ny][nx].m_idx = m_idx;
8563 update_mon(m_idx, TRUE);
8565 /* Redraw the old spot */
8568 /* Redraw the new spot */
8571 /* Player can move forward? */
8572 if (player_can_enter(c_ptr->feat, 0))
8574 /* Move the player */
8575 if (!move_player_effect(y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP)) break;
8583 if (i < 2) msg_print(NULL);
8589 if (name) return _("吸血鬼の牙", "Vampire's Fang");
8590 if (desc) return _("攻撃した相手の体力を吸いとり、自分の体力を回復させる。生命を持たないモンスターには通じない。",
8591 "Attacks with vampiric strikes which absorbs HP from a monster and gives them to you. No effect to unliving monsters.");
8597 if (!get_rep_dir2(&dir)) return NULL;
8598 if (dir == 5) return NULL;
8600 y = p_ptr->y + ddy[dir];
8601 x = p_ptr->x + ddx[dir];
8603 if (cave[y][x].m_idx)
8604 py_attack(y, x, HISSATSU_DRAIN);
8607 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
8614 if (name) return _("幻惑", "Moon Dazzling");
8615 if (desc) return _("視界内の起きている全モンスターに朦朧、混乱、眠りを与えようとする。", "Attempts to stun, confuse and sleep all waking monsters.");
8619 msg_print(_("武器を不規則に揺らした...", "You irregularly wave your weapon..."));
8620 project_hack(GF_ENGETSU, plev * 4);
8621 project_hack(GF_ENGETSU, plev * 4);
8622 project_hack(GF_ENGETSU, plev * 4);
8627 if (name) return _("百人斬り", "Hundred Slaughter");
8628 if (desc) return _("連続して入身でモンスターを攻撃する。攻撃するたびにMPを消費。MPがなくなるか、モンスターを倒せなかったら百人斬りは終了する。",
8629 "Performs a series of rush attacks. The series continues while killing each monster in a time and SP remains.");
8633 const int mana_cost_per_monster = 8;
8639 if (!rush_attack(&mdeath)) break;
8642 /* Reserve needed mana point */
8643 p_ptr->csp -= technic_info[REALM_HISSATSU - MIN_TECHNIC][26].smana;
8647 p_ptr->csp -= mana_cost_per_monster;
8652 p_ptr->redraw |= PR_MANA;
8655 while (p_ptr->csp > mana_cost_per_monster);
8657 if (is_new) return NULL;
8659 /* Restore reserved mana */
8660 p_ptr->csp += technic_info[REALM_HISSATSU - MIN_TECHNIC][26].smana;
8665 if (name) return _("天翔龍閃", "Dragonic Flash");
8666 if (desc) return _("視界内の場所を指定して、その場所と自分の間にいる全モンスターを攻撃し、その場所に移動する。",
8667 "Runs toward given location while attacking all monsters on the path.");
8673 if (!tgt_pt(&x, &y)) return NULL;
8675 if (!cave_player_teleportable_bold(y, x, 0L) ||
8676 (distance(y, x, p_ptr->y, p_ptr->x) > MAX_SIGHT / 2) ||
8677 !projectable(p_ptr->y, p_ptr->x, y, x))
8679 msg_print(_("失敗!", "You cannot move to that place!"));
8682 if (p_ptr->anti_tele)
8684 msg_print(_("不思議な力がテレポートを防いだ!", "A mysterious force prevents you from teleporting!"));
8687 project(0, 0, y, x, HISSATSU_ISSEN, GF_ATTACK, PROJECT_BEAM | PROJECT_KILL, -1);
8688 teleport_player_to(y, x, 0L);
8693 if (name) return _("二重の剣撃", "Twin Slash");
8694 if (desc) return _("1ターンで2度攻撃を行う。", "double attacks at a time.");
8700 if (!get_rep_dir(&dir, FALSE)) return NULL;
8702 y = p_ptr->y + ddy[dir];
8703 x = p_ptr->x + ddx[dir];
8705 if (cave[y][x].m_idx)
8708 if (cave[y][x].m_idx)
8716 msg_print(_("その方向にはモンスターはいません。", "You don't see any monster in this direction"));
8723 if (name) return _("虎伏絶刀勢", "Kofuku-Zettousei");
8724 if (desc) return _("強力な攻撃を行い、近くの場所にも効果が及ぶ。", "Performs a powerful attack which even effect nearby monsters.");
8728 int total_damage = 0, basedam, i;
8730 u32b flgs[TR_FLAG_SIZE];
8733 if (!get_rep_dir2(&dir)) return NULL;
8734 if (dir == 5) return NULL;
8736 y = p_ptr->y + ddy[dir];
8737 x = p_ptr->x + ddx[dir];
8739 if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
8741 msg_print(_("なぜか攻撃することができない。", "Something prevent you from attacking."));
8744 msg_print(_("武器を大きく振り下ろした。", "You swing your weapon downward."));
8745 for (i = 0; i < 2; i++)
8748 if (!buki_motteruka(INVEN_RARM+i)) break;
8749 o_ptr = &inventory[INVEN_RARM+i];
8750 basedam = (o_ptr->dd * (o_ptr->ds + 1)) * 50;
8751 damage = o_ptr->to_d * 100;
8752 object_flags(o_ptr, flgs);
8753 if ((o_ptr->name1 == ART_VORPAL_BLADE) || (o_ptr->name1 == ART_CHAINSWORD))
8759 else if (have_flag(flgs, TR_VORPAL))
8761 /* vorpal flag only */
8766 damage += p_ptr->to_d[i] * 100;
8767 damage *= p_ptr->num_blow[i];
8768 total_damage += (damage / 100);
8770 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);
8775 if (name) return _("慶雲鬼忍剣", "Keiun-Kininken");
8776 if (desc) return _("自分もダメージをくらうが、相手に非常に大きなダメージを与える。アンデッドには特に効果がある。",
8777 "Attacks a monster with extremely powerful damage. But you also takes some damages. Hurts a undead monster greatly.");
8783 if (!get_rep_dir2(&dir)) return NULL;
8784 if (dir == 5) return NULL;
8786 y = p_ptr->y + ddy[dir];
8787 x = p_ptr->x + ddx[dir];
8789 if (cave[y][x].m_idx)
8790 py_attack(y, x, HISSATSU_UNDEAD);
8793 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
8796 take_hit(DAMAGE_NOESCAPE, 100 + randint1(100), _("慶雲鬼忍剣を使った衝撃", "exhaustion on using Keiun-Kininken"), -1);
8801 if (name) return _("切腹", "Harakiri");
8802 if (desc) return _("「武士道とは、死ぬことと見つけたり。」", "'Busido is found in death'");
8807 if (!get_check(_("本当に自殺しますか?", "Do you really want to commit suicide? "))) return NULL;
8808 /* Special Verification for suicide */
8809 prt(_("確認のため '@' を押して下さい。", "Please verify SUICIDE by typing the '@' sign: "), 0, 0);
8814 if (i != '@') return NULL;
8815 if (p_ptr->total_winner)
8817 take_hit(DAMAGE_FORCE, 9999, "Seppuku", -1);
8818 p_ptr->total_winner = TRUE;
8822 msg_print(_("武士道とは、死ぬことと見つけたり。", "Meaning of Bushi-do is found in the death."));
8823 take_hit(DAMAGE_FORCE, 9999, "Seppuku", -1);
8833 * @brief 呪術領域の武器呪縛の対象にできる武器かどうかを返す。 / An "item_tester_hook" for offer
8834 * @param o_ptr オブジェクト構造体の参照ポインタ
8835 * @return 呪縛可能な武器ならばTRUEを返す
8837 static bool item_tester_hook_weapon_except_bow(object_type *o_ptr)
8839 switch (o_ptr->tval)
8854 * @brief 呪術領域の各処理に使える呪われた装備かどうかを返す。 / An "item_tester_hook" for offer
8855 * @param o_ptr オブジェクト構造体の参照ポインタ
8856 * @return 使える装備ならばTRUEを返す
8858 static bool item_tester_hook_cursed(object_type *o_ptr)
8860 return (bool)(object_is_cursed(o_ptr));
8864 * @brief 呪術領域魔法の各処理を行う
8866 * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST / SPELL_CONT / SPELL_STOP)
8867 * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST / SPELL_CONT / SPELL_STOP 時はNULL文字列を返す。
8869 static cptr do_hex_spell(SPELL_IDX spell, BIT_FLAGS mode)
8871 bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
8872 bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
8873 bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
8874 bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
8875 bool cont = (mode == SPELL_CONT) ? TRUE : FALSE;
8876 bool stop = (mode == SPELL_STOP) ? TRUE : FALSE;
8880 PLAYER_LEVEL plev = p_ptr->lev;
8885 /*** 1st book (0-7) ***/
8887 if (name) return _("邪なる祝福", "Evily blessing");
8888 if (desc) return _("祝福により攻撃精度と防御力が上がる。", "Attempts to increase +to_hit of a weapon and AC");
8891 if (!p_ptr->blessed)
8893 msg_print(_("高潔な気分になった!", "You feel righteous!"));
8898 if (!p_ptr->blessed)
8900 msg_print(_("高潔な気分が消え失せた。", "The prayer has expired."));
8906 if (name) return _("軽傷の治癒", "Cure light wounds");
8907 if (desc) return _("HPや傷を少し回復させる。", "Heals cut and HP a little.");
8908 if (info) return info_heal(1, 10, 0);
8911 msg_print(_("気分が良くなってくる。", "You feel better and better."));
8915 hp_player(damroll(1, 10));
8916 set_cut(p_ptr->cut - 10);
8921 if (name) return _("悪魔のオーラ", "Demonic aura");
8922 if (desc) return _("炎のオーラを身にまとい、回復速度が速くなる。", "Gives fire aura and regeneration.");
8925 msg_print(_("体が炎のオーラで覆われた。", "You have enveloped by fiery aura!"));
8929 msg_print(_("炎のオーラが消え去った。", "Fiery aura disappeared."));
8934 if (name) return _("悪臭霧", "Stinking mist");
8935 if (desc) return _("視界内のモンスターに微弱量の毒のダメージを与える。", "Deals few damages of poison to all monsters in your sight.");
8936 power = plev / 2 + 5;
8937 if (info) return info_damage(1, power, 0);
8940 project_hack(GF_POIS, randint1(power));
8945 if (name) return _("腕力強化", "Extra might");
8946 if (desc) return _("術者の腕力を上昇させる。", "Attempts to increase your strength.");
8949 msg_print(_("何だか力が湧いて来る。", "You feel you get stronger."));
8954 if (name) return _("武器呪縛", "Curse weapon");
8955 if (desc) return _("装備している武器を呪う。", "Curses your weapon.");
8960 char o_name[MAX_NLEN];
8962 u32b f[TR_FLAG_SIZE];
8964 item_tester_hook = item_tester_hook_weapon_except_bow;
8965 q = _("どれを呪いますか?", "Which weapon do you curse?");
8966 s = _("武器を装備していない。", "You wield no weapons.");
8968 if (!get_item(&item, q, s, (USE_EQUIP))) return FALSE;
8970 o_ptr = &inventory[item];
8971 object_desc(o_name, o_ptr, OD_NAME_ONLY);
8972 object_flags(o_ptr, f);
8974 if (!get_check(format(_("本当に %s を呪いますか?", "Do you curse %s, really?"), o_name))) return FALSE;
8977 (object_is_artifact(o_ptr) || have_flag(f, TR_BLESSED)))
8979 msg_format(_("%s は呪いを跳ね返した。", "%s resists the effect."), o_name);
8982 if (o_ptr->to_d > 0)
8984 o_ptr->to_d -= randint1(3) % 2;
8985 if (o_ptr->to_d < 0) o_ptr->to_d = 0;
8987 if (o_ptr->to_h > 0)
8989 o_ptr->to_h -= randint1(3) % 2;
8990 if (o_ptr->to_h < 0) o_ptr->to_h = 0;
8992 if (o_ptr->to_a > 0)
8994 o_ptr->to_a -= randint1(3) % 2;
8995 if (o_ptr->to_a < 0) o_ptr->to_a = 0;
8997 msg_format(_("%s は劣化してしまった。", "Your %s was disenchanted!"), o_name);
9003 msg_format(_("恐怖の暗黒オーラがあなたの%sを包み込んだ!", "A terrible black aura blasts your %s!"), o_name);
9004 o_ptr->curse_flags |= (TRC_CURSED);
9006 if (object_is_artifact(o_ptr) || object_is_ego(o_ptr))
9009 if (one_in_(3)) o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
9012 o_ptr->curse_flags |= (TRC_TY_CURSE);
9013 if (one_in_(666)) o_ptr->curse_flags |= (TRC_PERMA_CURSE);
9015 add_flag(o_ptr->art_flags, TR_AGGRAVATE);
9016 add_flag(o_ptr->art_flags, TR_VORPAL);
9017 add_flag(o_ptr->art_flags, TR_VAMPIRIC);
9018 msg_print(_("血だ!血だ!血だ!", "Blood, Blood, Blood!"));
9023 o_ptr->curse_flags |= get_curse(curse_rank, o_ptr);
9026 p_ptr->update |= (PU_BONUS);
9032 if (name) return _("邪悪感知", "Evil detection");
9033 if (desc) return _("周囲の邪悪なモンスターを感知する。", "Detects evil monsters.");
9034 if (info) return info_range(MAX_SIGHT);
9037 msg_print(_("邪悪な生物の存在を感じ取ろうとした。", "You attend to the presence of evil creatures."));
9042 if (name) return _("我慢", "Patience");
9043 if (desc) return _("数ターン攻撃を耐えた後、受けたダメージを地獄の業火として周囲に放出する。",
9044 "Bursts hell fire strongly after patients any damage while few turns.");
9045 power = MIN(200, (HEX_REVENGE_POWER(p_ptr) * 2));
9046 if (info) return info_damage(0, 0, power);
9049 int a = 3 - (p_ptr->pspeed - 100) / 10;
9050 MAGIC_NUM2 r = 3 + randint1(3) + MAX(0, MIN(3, a));
9052 if (HEX_REVENGE_TURN(p_ptr) > 0)
9054 msg_print(_("すでに我慢をしている。", "You are already patienting."));
9058 HEX_REVENGE_TYPE(p_ptr) = 1;
9059 HEX_REVENGE_TURN(p_ptr) = r;
9060 HEX_REVENGE_POWER(p_ptr) = 0;
9061 msg_print(_("じっと耐えることにした。", "You decide to patient all damages."));
9066 int rad = 2 + (power / 50);
9068 HEX_REVENGE_TURN(p_ptr)--;
9070 if ((HEX_REVENGE_TURN(p_ptr) <= 0) || (power >= 200))
9072 msg_print(_("我慢が解かれた!", "Time for end of patioence!"));
9075 project(0, rad, p_ptr->y, p_ptr->x, power, GF_HELL_FIRE,
9076 (PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL), -1);
9080 msg_format(_("%d点のダメージを返した。", "You return %d damages."), power);
9084 HEX_REVENGE_TYPE(p_ptr) = 0;
9085 HEX_REVENGE_TURN(p_ptr) = 0;
9086 HEX_REVENGE_POWER(p_ptr) = 0;
9091 /*** 2nd book (8-15) ***/
9093 if (name) return _("氷の鎧", "Ice armor");
9094 if (desc) return _("氷のオーラを身にまとい、防御力が上昇する。", "Gives fire aura and bonus to AC.");
9097 msg_print(_("体が氷の鎧で覆われた。", "You have enveloped by ice armor!"));
9101 msg_print(_("氷の鎧が消え去った。", "Ice armor disappeared."));
9106 if (name) return _("重傷の治癒", "Cure serious wounds");
9107 if (desc) return _("体力や傷を多少回復させる。", "Heals cut and HP more.");
9108 if (info) return info_heal(2, 10, 0);
9111 msg_print(_("気分が良くなってくる。", "You feel better and better."));
9115 hp_player(damroll(2, 10));
9116 set_cut((p_ptr->cut / 2) - 10);
9121 if (name) return _("薬品吸入", "Inhail potion");
9122 if (desc) return _("呪文詠唱を中止することなく、薬の効果を得ることができる。", "Quaffs a potion without canceling of casting a spell.");
9125 CASTING_HEX_FLAGS(p_ptr) |= (1L << HEX_INHAIL);
9126 do_cmd_quaff_potion();
9127 CASTING_HEX_FLAGS(p_ptr) &= ~(1L << HEX_INHAIL);
9133 if (name) return _("衰弱の霧", "Hypodynamic mist");
9134 if (desc) return _("視界内のモンスターに微弱量の衰弱属性のダメージを与える。",
9135 "Deals few damages of hypodynamia to all monsters in your sight.");
9136 power = (plev / 2) + 5;
9137 if (info) return info_damage(1, power, 0);
9140 project_hack(GF_HYPODYNAMIA, randint1(power));
9145 if (name) return _("魔剣化", "Swords to runeswords");
9146 if (desc) return _("武器の攻撃力を上げる。切れ味を得、呪いに応じて与えるダメージが上昇し、善良なモンスターに対するダメージが2倍になる。",
9147 "Gives vorpal ability to your weapon. Increases damages by your weapon acccording to curse of your weapon.");
9151 msg_print("あなたの武器が黒く輝いた。");
9153 if (!empty_hands(FALSE))
9154 msg_print("Your weapons glow bright black.");
9156 msg_print("Your weapon glows bright black.");
9162 msg_print("武器の輝きが消え去った。");
9164 msg_format("Brightness of weapon%s disappeared.", (empty_hands(FALSE)) ? "" : "s");
9170 if (name) return _("混乱の手", "Touch of confusion");
9171 if (desc) return _("攻撃した際モンスターを混乱させる。", "Confuses a monster when you attack.");
9174 msg_print(_("あなたの手が赤く輝き始めた。", "Your hands glow bright red."));
9178 msg_print(_("手の輝きがなくなった。", "Brightness on your hands disappeard."));
9183 if (name) return _("肉体強化", "Building up");
9184 if (desc) return _("術者の腕力、器用さ、耐久力を上昇させる。攻撃回数の上限を 1 増加させる。",
9185 "Attempts to increases your strength, dexterity and constitusion.");
9188 msg_print(_("身体が強くなった気がした。", "You feel your body is developed more now."));
9193 if (name) return _("反テレポート結界", "Anti teleport barrier");
9194 if (desc) return _("視界内のモンスターのテレポートを阻害するバリアを張る。", "Obstructs all teleportations by monsters in your sight.");
9195 power = plev * 3 / 2;
9196 if (info) return info_power(power);
9199 msg_print(_("テレポートを防ぐ呪いをかけた。", "You feel anyone can not teleport except you."));
9203 /*** 3rd book (16-23) ***/
9205 if (name) return _("衝撃のクローク", "Cloak of shock");
9206 if (desc) return _("電気のオーラを身にまとい、動きが速くなる。", "Gives lightning aura and a bonus to speed.");
9209 msg_print(_("体が稲妻のオーラで覆われた。", "You have enveloped by electrical aura!"));
9213 msg_print(_("稲妻のオーラが消え去った。", "Electrical aura disappeared."));
9218 if (name) return _("致命傷の治癒", "Cure critical wounds");
9219 if (desc) return _("体力や傷を回復させる。", "Heals cut and HP greatry.");
9220 if (info) return info_heal(4, 10, 0);
9223 msg_print(_("気分が良くなってくる。", "You feel better and better."));
9227 hp_player(damroll(4, 10));
9235 if (name) return _("呪力封入", "Recharging");
9236 if (desc) return _("魔法の道具に魔力を再充填する。", "Recharges a magic device.");
9238 if (info) return info_power(power);
9241 if (!recharge(power)) return NULL;
9247 if (name) return _("死者復活", "Animate Dead");
9248 if (desc) return _("死体を蘇らせてペットにする。", "Raises corpses and skeletons from dead.");
9251 msg_print(_("死者への呼びかけを始めた。", "You start to call deads.!"));
9255 animate_dead(0, p_ptr->y, p_ptr->x);
9260 if (name) return _("防具呪縛", "Curse armor");
9261 if (desc) return _("装備している防具に呪いをかける。", "Curse a piece of armour that you wielding.");
9266 char o_name[MAX_NLEN];
9268 u32b f[TR_FLAG_SIZE];
9270 item_tester_hook = object_is_armour;
9271 q = _("どれを呪いますか?", "Which piece of armour do you curse?");
9272 s = _("防具を装備していない。", "You wield no piece of armours.");
9274 if (!get_item(&item, q, s, (USE_EQUIP))) return FALSE;
9276 o_ptr = &inventory[item];
9277 object_desc(o_name, o_ptr, OD_NAME_ONLY);
9278 object_flags(o_ptr, f);
9280 if (!get_check(format(_("本当に %s を呪いますか?", "Do you curse %s, really?"), o_name))) return FALSE;
9283 (object_is_artifact(o_ptr) || have_flag(f, TR_BLESSED)))
9285 msg_format(_("%s は呪いを跳ね返した。", "%s resists the effect."), o_name);
9288 if (o_ptr->to_d > 0)
9290 o_ptr->to_d -= randint1(3) % 2;
9291 if (o_ptr->to_d < 0) o_ptr->to_d = 0;
9293 if (o_ptr->to_h > 0)
9295 o_ptr->to_h -= randint1(3) % 2;
9296 if (o_ptr->to_h < 0) o_ptr->to_h = 0;
9298 if (o_ptr->to_a > 0)
9300 o_ptr->to_a -= randint1(3) % 2;
9301 if (o_ptr->to_a < 0) o_ptr->to_a = 0;
9303 msg_format(_("%s は劣化してしまった。", "Your %s was disenchanted!"), o_name);
9309 msg_format(_("恐怖の暗黒オーラがあなたの%sを包み込んだ!", "A terrible black aura blasts your %s!"), o_name);
9310 o_ptr->curse_flags |= (TRC_CURSED);
9312 if (object_is_artifact(o_ptr) || object_is_ego(o_ptr))
9315 if (one_in_(3)) o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
9318 o_ptr->curse_flags |= (TRC_TY_CURSE);
9319 if (one_in_(666)) o_ptr->curse_flags |= (TRC_PERMA_CURSE);
9321 add_flag(o_ptr->art_flags, TR_AGGRAVATE);
9322 add_flag(o_ptr->art_flags, TR_RES_POIS);
9323 add_flag(o_ptr->art_flags, TR_RES_DARK);
9324 add_flag(o_ptr->art_flags, TR_RES_NETHER);
9325 msg_print(_("血だ!血だ!血だ!", "Blood, Blood, Blood!"));
9330 o_ptr->curse_flags |= get_curse(curse_rank, o_ptr);
9333 p_ptr->update |= (PU_BONUS);
9339 if (name) return _("影のクローク", "Cloak of shadow");
9340 if (desc) return _("影のオーラを身にまとい、敵に影のダメージを与える。", "Gives aura of shadow.");
9343 object_type *o_ptr = &inventory[INVEN_OUTER];
9347 msg_print(_("クロークを身につけていない!", "You don't ware any cloak."));
9350 else if (!object_is_cursed(o_ptr))
9352 msg_print(_("クロークは呪われていない!", "Your cloak is not cursed."));
9357 msg_print(_("影のオーラを身にまとった。", "You have enveloped by shadow aura!"));
9362 object_type *o_ptr = &inventory[INVEN_OUTER];
9364 if ((!o_ptr->k_idx) || (!object_is_cursed(o_ptr)))
9366 do_spell(REALM_HEX, spell, SPELL_STOP);
9367 CASTING_HEX_FLAGS(p_ptr) &= ~(1L << spell);
9368 CASTING_HEX_NUM(p_ptr)--;
9369 if (!SINGING_SONG_ID(p_ptr)) set_action(ACTION_NONE);
9374 msg_print(_("影のオーラが消え去った。", "Shadow aura disappeared."));
9379 if (name) return _("苦痛を魔力に", "Pains to mana");
9380 if (desc) return _("視界内のモンスターに精神ダメージ与え、魔力を吸い取る。", "Deals psychic damages to all monsters in sight, and drains some mana.");
9381 power = plev * 3 / 2;
9382 if (info) return info_damage(1, power, 0);
9385 project_hack(GF_PSI_DRAIN, randint1(power));
9390 if (name) return _("目には目を", "Eye for an eye");
9391 if (desc) return _("打撃や魔法で受けたダメージを、攻撃元のモンスターにも与える。", "Returns same damage which you got to the monster which damaged you.");
9394 msg_print(_("復讐したい欲望にかられた。", "You wish strongly you want to revenge anything."));
9398 /*** 4th book (24-31) ***/
9400 if (name) return _("反増殖結界", "Anti multiply barrier");
9401 if (desc) return _("その階の増殖するモンスターの増殖を阻止する。", "Obstructs all multiplying by monsters in entire floor.");
9404 msg_print(_("増殖を阻止する呪いをかけた。", "You feel anyone can not already multiply."));
9409 if (name) return _("全復活", "Restoration");
9410 if (desc) return _("経験値を徐々に復活し、減少した能力値を回復させる。", "Restores experience and status.");
9413 msg_print(_("体が元の活力を取り戻し始めた。", "You feel your lost status starting to return."));
9418 int d = (p_ptr->max_exp - p_ptr->exp);
9419 int r = (p_ptr->exp / 20);
9425 p_ptr->exp = p_ptr->max_exp;
9429 /* Check the experience */
9434 for (i = A_STR; i < 6; i ++)
9436 if (p_ptr->stat_cur[i] < p_ptr->stat_max[i])
9438 if (p_ptr->stat_cur[i] < 18)
9439 p_ptr->stat_cur[i]++;
9441 p_ptr->stat_cur[i] += 10;
9443 if (p_ptr->stat_cur[i] > p_ptr->stat_max[i])
9444 p_ptr->stat_cur[i] = p_ptr->stat_max[i];
9446 /* Recalculate bonuses */
9447 p_ptr->update |= (PU_BONUS);
9455 msg_format(_("%sの呪文の詠唱をやめた。", "Finish casting '%^s'."), do_spell(REALM_HEX, HEX_RESTORE, SPELL_NAME));
9456 CASTING_HEX_FLAGS(p_ptr) &= ~(1L << HEX_RESTORE);
9457 if (cont) CASTING_HEX_NUM(p_ptr)--;
9458 if (CASTING_HEX_NUM(p_ptr)) p_ptr->action = ACTION_NONE;
9461 p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
9462 p_ptr->redraw |= (PR_EXTRA);
9470 if (name) return _("呪力吸収", "Drain curse power");
9471 if (desc) return _("呪われた武器の呪いを吸収して魔力を回復する。", "Drains curse on your weapon and heals SP a little.");
9476 u32b f[TR_FLAG_SIZE];
9479 item_tester_hook = item_tester_hook_cursed;
9480 q = _("どの装備品から吸収しますか?", "Which cursed equipment do you drain mana from?");
9481 s = _("呪われたアイテムを装備していない。", "You have no cursed equipment.");
9483 if (!get_item(&item, q, s, (USE_EQUIP))) return FALSE;
9485 o_ptr = &inventory[item];
9486 object_flags(o_ptr, f);
9488 p_ptr->csp += (p_ptr->lev / 5) + randint1(p_ptr->lev / 5);
9489 if (have_flag(f, TR_TY_CURSE) || (o_ptr->curse_flags & TRC_TY_CURSE)) p_ptr->csp += randint1(5);
9490 if (p_ptr->csp > p_ptr->msp) p_ptr->csp = p_ptr->msp;
9492 if (o_ptr->curse_flags & TRC_PERMA_CURSE)
9496 else if (o_ptr->curse_flags & TRC_HEAVY_CURSE)
9500 msg_print(_("呪いを全て吸い取った。", "Heavy curse vanished away."));
9501 o_ptr->curse_flags = 0L;
9504 else if ((o_ptr->curse_flags & (TRC_CURSED)) && one_in_(3))
9506 msg_print(_("呪いを全て吸い取った。", "Curse vanished away."));
9507 o_ptr->curse_flags = 0L;
9515 if (name) return _("吸血の刃", "Swords to vampires");
9516 if (desc) return _("吸血属性で攻撃する。", "Gives vampiric ability to your weapon.");
9520 msg_print("あなたの武器が血を欲している。");
9522 if (!empty_hands(FALSE))
9523 msg_print("Your weapons want more blood now.");
9525 msg_print("Your weapon wants more blood now.");
9531 msg_print("武器の渇望が消え去った。");
9533 msg_format("Thirsty of weapon%s disappeared.", (empty_hands(FALSE)) ? "" : "s");
9539 if (name) return _("朦朧の言葉", "Word of stun");
9540 if (desc) return _("視界内のモンスターを朦朧とさせる。", "Stuns all monsters in your sight.");
9542 if (info) return info_power(power);
9545 stun_monsters(power);
9550 if (name) return _("影移動", "Moving into shadow");
9551 if (desc) return _("モンスターの隣のマスに瞬間移動する。", "Teleports you close to a monster.");
9558 for (i = 0; i < 3; i++)
9560 if (!tgt_pt(&x, &y)) return FALSE;
9564 for (dir = 0; dir < 8; dir++)
9566 int dy = y + ddy_ddd[dir];
9567 int dx = x + ddx_ddd[dir];
9568 if (dir == 5) continue;
9569 if(cave[dy][dx].m_idx) flag = TRUE;
9572 if (!cave_empty_bold(y, x) || (cave[y][x].info & CAVE_ICKY) ||
9573 (distance(y, x, p_ptr->y, p_ptr->x) > plev + 2))
9575 msg_print(_("そこには移動できない。", "Can not teleport to there."));
9581 if (flag && randint0(plev * plev / 2))
9583 teleport_player_to(y, x, 0L);
9587 msg_print(_("おっと!", "Oops!"));
9588 teleport_player(30, 0L);
9596 if (name) return _("反魔法結界", "Anti magic barrier");
9597 if (desc) return _("視界内のモンスターの魔法を阻害するバリアを張る。", "Obstructs all magic spell of monsters in your sight.");
9598 power = plev * 3 / 2;
9599 if (info) return info_power(power);
9602 msg_print(_("魔法を防ぐ呪いをかけた。", "You feel anyone can not cast spells except you."));
9607 if (name) return _("復讐の宣告", "Revenge sentence");
9608 if (desc) return _("数ターン後にそれまで受けたダメージに応じた威力の地獄の劫火の弾を放つ。",
9609 "Fires a ball of hell fire to try revenging after few turns.");
9610 power = HEX_REVENGE_POWER(p_ptr);
9611 if (info) return info_damage(0, 0, power);
9615 int a = 3 - (p_ptr->pspeed - 100) / 10;
9616 r = 1 + randint1(2) + MAX(0, MIN(3, a));
9618 if (HEX_REVENGE_TURN(p_ptr) > 0)
9620 msg_print(_("すでに復讐は宣告済みだ。", "You already pronounced your revenge."));
9624 HEX_REVENGE_TYPE(p_ptr) = 2;
9625 HEX_REVENGE_TURN(p_ptr) = r;
9626 msg_format(_("あなたは復讐を宣告した。あと %d ターン。", "You pronounce your revenge. %d turns left."), r);
9631 HEX_REVENGE_TURN(p_ptr)--;
9633 if (HEX_REVENGE_TURN(p_ptr) <= 0)
9643 msg_print(_("復讐の時だ!", "Time to revenge!"));
9645 while (!get_aim_dir(&dir));
9647 fire_ball(GF_HELL_FIRE, dir, power, 1);
9651 msg_format(_("%d点のダメージを返した。", "You return %d damages."), power);
9656 msg_print(_("復讐する気が失せた。", "You are not a mood to revenge."));
9658 HEX_REVENGE_POWER(p_ptr) = 0;
9665 if ((cast) && (add))
9668 CASTING_HEX_FLAGS(p_ptr) |= 1L << (spell);
9669 CASTING_HEX_NUM(p_ptr)++;
9671 if (p_ptr->action != ACTION_SPELL) set_action(ACTION_SPELL);
9677 p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
9678 p_ptr->redraw |= (PR_EXTRA | PR_HP | PR_MANA);
9686 * @brief 魔法処理のメインルーチン
9687 * @param realm 魔法領域のID
9688 * @param spell 各領域の魔法ID
9690 * @return 各領域魔法に各種テキストを求めた場合は文字列参照ポインタ、そうでない場合はNULLポインタを返す。
9692 cptr do_spell(REALM_IDX realm, SPELL_IDX spell, BIT_FLAGS mode)
9696 case REALM_LIFE: return do_life_spell(spell, mode);
9697 case REALM_SORCERY: return do_sorcery_spell(spell, mode);
9698 case REALM_NATURE: return do_nature_spell(spell, mode);
9699 case REALM_CHAOS: return do_chaos_spell(spell, mode);
9700 case REALM_DEATH: return do_death_spell(spell, mode);
9701 case REALM_TRUMP: return do_trump_spell(spell, mode);
9702 case REALM_ARCANE: return do_arcane_spell(spell, mode);
9703 case REALM_CRAFT: return do_craft_spell(spell, mode);
9704 case REALM_DAEMON: return do_daemon_spell(spell, mode);
9705 case REALM_CRUSADE: return do_crusade_spell(spell, mode);
9706 case REALM_MUSIC: return do_music_spell(spell, mode);
9707 case REALM_HISSATSU: return do_hissatsu_spell(spell, mode);
9708 case REALM_HEX: return do_hex_spell(spell, mode);