#include "spells-summon.h"\r
#include "realm-arcane.h"\r
#include "realm-chaos.h"\r
+#include "realm-craft.h"\r
+#include "realm-death.h"\r
+#include "realm-life.h"\r
+#include "realm-nature.h"\r
+#include "realm-sorcery.h"\r
+#include "realm-trump.h"\r
\r
/*!\r
* @brief\r
\r
\r
/*!\r
- * @brief 生命領域魔法の各処理を行う\r
- * @param spell 魔法ID\r
- * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r
- * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。\r
- */\r
-static cptr do_life_spell(SPELL_IDX spell, BIT_FLAGS mode)\r
-{\r
- bool name = (mode == SPELL_NAME) ? TRUE : FALSE;\r
- bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;\r
- bool info = (mode == SPELL_INFO) ? TRUE : FALSE;\r
- bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;\r
-\r
- int dir;\r
- int plev = p_ptr->lev;\r
-\r
- switch (spell)\r
- {\r
- case 0:\r
- if (name) return _("軽傷の治癒", "Cure Light Wounds");\r
- if (desc) return _("怪我と体力を少し回復させる。", "Heals cut and HP a little.");\r
- {\r
- int dice = 2;\r
- int sides = 10;\r
-\r
- if (info) return info_heal(dice, sides, 0);\r
-\r
- if (cast)\r
- {\r
- hp_player(damroll(dice, sides));\r
- set_cut(p_ptr->cut - 10);\r
- }\r
- }\r
- break;\r
-\r
- case 1:\r
- if (name) return _("祝福", "Bless");\r
- if (desc) return _("一定時間、命中率とACにボーナスを得る。", "Gives bonus to hit and AC for a few turns.");\r
- {\r
- int base = 12;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_blessed(randint1(base) + base, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 2:\r
- if (name) return _("軽傷", "Cause Light Wounds");\r
- if (desc) return _("1体のモンスターに小ダメージを与える。抵抗されると無効。", "Wounds a monster a little unless resisted.");\r
- {\r
- int dice = 3 + (plev - 1) / 5;\r
- int sides = 4;\r
-\r
- if (info) return info_damage(dice, sides, 0);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
- fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0);\r
- }\r
- }\r
- break;\r
-\r
- case 3:\r
- if (name) return _("光の召喚", "Call Light");\r
- if (desc) return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently.");\r
- {\r
- int dice = 2;\r
- int sides = plev / 2;\r
- int rad = plev / 10 + 1;\r
-\r
- if (info) return info_damage(dice, sides, 0);\r
-\r
- if (cast)\r
- {\r
- lite_area(damroll(dice, sides), rad);\r
- }\r
- }\r
- break;\r
-\r
- case 4:\r
- if (name) return _("罠 & 隠し扉感知", "Detect Doors & Traps");\r
- if (desc) return _("近くの全ての罠と扉と階段を感知する。", "Detects traps, doors, and stairs in your vicinity.");\r
- {\r
- int rad = DETECT_RAD_DEFAULT;\r
-\r
- if (info) return info_radius(rad);\r
-\r
- if (cast)\r
- {\r
- detect_traps(rad, TRUE);\r
- detect_doors(rad);\r
- detect_stairs(rad);\r
- }\r
- }\r
- break;\r
-\r
- case 5:\r
- if (name) return _("重傷の治癒", "Cure Medium Wounds");\r
- if (desc) return _("怪我と体力を中程度回復させる。", "Heals cut and HP more.");\r
- {\r
- int dice = 4;\r
- int sides = 10;\r
-\r
- if (info) return info_heal(dice, sides, 0);\r
-\r
- if (cast)\r
- {\r
- hp_player(damroll(dice, sides));\r
- set_cut((p_ptr->cut / 2) - 20);\r
- }\r
- }\r
- break;\r
-\r
- case 6:\r
- if (name) return _("解毒", "Cure Poison");\r
- if (desc) return _("体内の毒を取り除く。", "Cure poison status.");\r
- {\r
- if (cast)\r
- {\r
- set_poisoned(0);\r
- }\r
- }\r
- break;\r
-\r
- case 7:\r
- if (name) return _("空腹充足", "Satisfy Hunger");\r
- if (desc) return _("満腹にする。", "Satisfies hunger.");\r
- {\r
- if (cast)\r
- {\r
- set_food(PY_FOOD_MAX - 1);\r
- }\r
- }\r
- break;\r
-\r
- case 8:\r
- if (name) return _("解呪", "Remove Curse");\r
- if (desc) return _("アイテムにかかった弱い呪いを解除する。", "Removes normal curses from equipped items.");\r
- {\r
- if (cast)\r
- {\r
- if (remove_curse())\r
- {\r
- msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 9:\r
- if (name) return _("重傷", "Cause Medium Wounds");\r
- if (desc) return _("1体のモンスターに中ダメージを与える。抵抗されると無効。", "Wounds a monster unless resisted.");\r
- {\r
- int sides = 8 + (plev - 5) / 4;\r
- int dice = 8;\r
-\r
- if (info) return info_damage(dice, sides, 0);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
- fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0);\r
- }\r
- }\r
- break;\r
-\r
- case 10:\r
- if (name) return _("致命傷の治癒", "Cure Critical Wounds");\r
- if (desc) return _("体力を大幅に回復させ、負傷と朦朧状態も全快する。", "Heals cut, stun and HP greatly.");\r
- {\r
- int dice = 8;\r
- int sides = 10;\r
-\r
- if (info) return info_heal(dice, sides, 0);\r
-\r
- if (cast)\r
- {\r
- hp_player(damroll(dice, sides));\r
- set_stun(0);\r
- set_cut(0);\r
- }\r
- }\r
- break;\r
-\r
- case 11:\r
- if (name) return _("耐熱耐寒", "Resist Heat and Cold");\r
- if (desc) return _("一定時間、火炎と冷気に対する耐性を得る。装備による耐性に累積する。", \r
- "Gives resistance to fire and cold. These resistances can be added to which from equipment for more powerful resistances.");\r
- \r
- {\r
- int base = 20;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_oppose_cold(randint1(base) + base, FALSE);\r
- set_oppose_fire(randint1(base) + base, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 12:\r
- if (name) return _("周辺感知", "Sense Surroundings");\r
- if (desc) return _("周辺の地形を感知する。", "Maps nearby area.");\r
- \r
- {\r
- int rad = DETECT_RAD_MAP;\r
-\r
- if (info) return info_radius(rad);\r
-\r
- if (cast)\r
- {\r
- map_area(rad);\r
- }\r
- }\r
- break;\r
-\r
- case 13:\r
- if (name) return _("パニック・アンデッド", "Turn Undead");\r
- if (desc) return _("視界内のアンデッドを恐怖させる。抵抗されると無効。", "Attempts to scare undead monsters in sight.");\r
- \r
- {\r
- if (cast)\r
- {\r
- turn_undead();\r
- }\r
- }\r
- break;\r
-\r
- case 14:\r
- if (name) return _("体力回復", "Healing");\r
- if (desc) return _("極めて強力な回復呪文で、負傷と朦朧状態も全快する。", "Much powerful healing magic, and heals cut and stun completely.");\r
- \r
- {\r
- int heal = 300;\r
-\r
- if (info) return info_heal(0, 0, heal);\r
-\r
- if (cast)\r
- {\r
- hp_player(heal);\r
- set_stun(0);\r
- set_cut(0);\r
- }\r
- }\r
- break;\r
-\r
- case 15:\r
- if (name) return _("結界の紋章", "Glyph of Warding");\r
- if (desc) return _("自分のいる床の上に、モンスターが通り抜けたり召喚されたりすることができなくなるルーンを描く。",\r
- "Sets a glyph on the floor beneath you. Monsters cannot attack you if you are on a glyph, but can try to break glyph.");\r
- \r
- {\r
- if (cast)\r
- {\r
- warding_glyph();\r
- }\r
- }\r
- break;\r
-\r
- case 16:\r
- if (name) return _("*解呪*", "Dispel Curse");\r
- if (desc) return _("アイテムにかかった強力な呪いを解除する。", "Removes normal and heavy curse from equipped items.");\r
- \r
- {\r
- if (cast)\r
- {\r
- if (remove_all_curse())\r
- {\r
- msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 17:\r
- if (name) return _("鑑識", "Perception");\r
- if (desc) return _("アイテムを識別する。", "Identifies an item.");\r
- \r
- {\r
- if (cast)\r
- {\r
- if (!ident_spell(FALSE)) return NULL;\r
- }\r
- }\r
- break;\r
-\r
- case 18:\r
- if (name) return _("アンデッド退散", "Dispel Undead");\r
- if (desc) return _("視界内の全てのアンデッドにダメージを与える。", "Damages all undead monsters in sight.");\r
- \r
- {\r
- int dice = 1;\r
- int sides = plev * 5;\r
-\r
- if (info) return info_damage(dice, sides, 0);\r
-\r
- if (cast)\r
- {\r
- dispel_undead(damroll(dice, sides));\r
- }\r
- }\r
- break;\r
-\r
- case 19:\r
- if (name) return _("凪の刻", "Day of the Dove");\r
- if (desc) return _("視界内の全てのモンスターを魅了する。抵抗されると無効。", "Attempts to charm all monsters in sight.");\r
- \r
- {\r
- int power = plev * 2;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- charm_monsters(power);\r
- }\r
- }\r
- break;\r
-\r
- case 20:\r
- if (name) return _("致命傷", "Cause Critical Wounds");\r
- if (desc) return _("1体のモンスターに大ダメージを与える。抵抗されると無効。", "Wounds a monster critically unless resisted.");\r
- \r
- {\r
- int dice = 5 + (plev - 5) / 3;\r
- int sides = 15;\r
-\r
- if (info) return info_damage(dice, sides, 0);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
- fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0);\r
- }\r
- }\r
- break;\r
-\r
- case 21:\r
- if (name) return _("帰還の詔", "Word of Recall");\r
- if (desc) return _("地上にいるときはダンジョンの最深階へ、ダンジョンにいるときは地上へと移動する。", "Recalls player from dungeon to town, or from town to the deepest level of dungeon.");\r
- \r
- {\r
- int base = 15;\r
- int sides = 20;\r
-\r
- if (info) return info_delay(base, sides);\r
-\r
- if (cast)\r
- {\r
- if (!word_of_recall()) return NULL;\r
- }\r
- }\r
- break;\r
-\r
- case 22:\r
- if (name) return _("真実の祭壇", "Alter Reality");\r
- if (desc) return _("現在の階を再構成する。", "Recreates current dungeon level.");\r
- \r
- {\r
- int base = 15;\r
- int sides = 20;\r
-\r
- if (info) return info_delay(base, sides);\r
-\r
- if (cast)\r
- {\r
- alter_reality();\r
- }\r
- }\r
- break;\r
-\r
- case 23:\r
- if (name) return _("真・結界", "Warding True");\r
- if (desc) return _("自分のいる床と周囲8マスの床の上に、モンスターが通り抜けたり召喚されたりすることができなくなるルーンを描く。", "Creates glyphs in all adjacent squares and under you.");\r
- \r
- {\r
- int rad = 1;\r
-\r
- if (info) return info_radius(rad);\r
-\r
- if (cast)\r
- {\r
- warding_glyph();\r
- glyph_creation();\r
- }\r
- }\r
- break;\r
-\r
- case 24:\r
- if (name) return _("不毛化", "Sterilization");\r
- if (desc) return _("この階の増殖するモンスターが増殖できなくなる。", "Prevents any breeders on current level from breeding.");\r
- \r
- {\r
- if (cast)\r
- {\r
- num_repro += MAX_REPRO;\r
- }\r
- }\r
- break;\r
-\r
- case 25:\r
- if (name) return _("全感知", "Detection");\r
- if (desc) return _("近くの全てのモンスター、罠、扉、階段、財宝、そしてアイテムを感知する。", "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.");\r
-\r
- {\r
- int rad = DETECT_RAD_DEFAULT;\r
-\r
- if (info) return info_radius(rad);\r
-\r
- if (cast)\r
- {\r
- detect_all(rad);\r
- }\r
- }\r
- break;\r
-\r
- case 26:\r
- if (name) return _("アンデッド消滅", "Annihilate Undead");\r
- if (desc) return _("自分の周囲にいるアンデッドを現在の階から消し去る。抵抗されると無効。",\r
- "Eliminates all nearby undead monsters, exhausting you. Powerful or unique monsters may be able to resist.");\r
- \r
- {\r
- int power = plev + 50;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- mass_genocide_undead(power, TRUE);\r
- }\r
- }\r
- break;\r
-\r
- case 27:\r
- if (name) return _("千里眼", "Clairvoyance");\r
- if (desc) return _("その階全体を永久に照らし、ダンジョン内すべてのアイテムを感知する。", "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.");\r
- \r
- {\r
- if (cast)\r
- {\r
- wiz_lite(FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 28:\r
- if (name) return _("全復活", "Restoration");\r
- if (desc) return _("すべてのステータスと経験値を回復する。", "Restores all stats and experience.");\r
- \r
- {\r
- if (cast)\r
- {\r
- do_res_stat(A_STR);\r
- do_res_stat(A_INT);\r
- do_res_stat(A_WIS);\r
- do_res_stat(A_DEX);\r
- do_res_stat(A_CON);\r
- do_res_stat(A_CHR);\r
- restore_level();\r
- }\r
- }\r
- break;\r
-\r
- case 29:\r
- if (name) return _("*体力回復*", "Healing True");\r
- if (desc) return _("最強の治癒の魔法で、負傷と朦朧状態も全快する。", "The greatest healing magic. Heals all HP, cut and stun.");\r
- \r
- {\r
- int heal = 2000;\r
-\r
- if (info) return info_heal(0, 0, heal);\r
-\r
- if (cast)\r
- {\r
- hp_player(heal);\r
- set_stun(0);\r
- set_cut(0);\r
- }\r
- }\r
- break;\r
-\r
- case 30:\r
- if (name) return _("聖なるビジョン", "Holy Vision");\r
- if (desc) return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item.");\r
- \r
- {\r
- if (cast)\r
- {\r
- if (!identify_fully(FALSE)) return NULL;\r
- }\r
- }\r
- break;\r
-\r
- case 31:\r
- if (name) return _("究極の耐性", "Ultimate Resistance");\r
- if (desc) return _("一定時間、あらゆる耐性を付け、ACと魔法防御能力を上昇させる。", "Gives ultimate resistance, bonus to AC and speed.");\r
- \r
- {\r
- TIME_EFFECT base = (TIME_EFFECT)plev / 2;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- TIME_EFFECT v = randint1(base) + base;\r
- set_fast(v, FALSE);\r
- set_oppose_acid(v, FALSE);\r
- set_oppose_elec(v, FALSE);\r
- set_oppose_fire(v, FALSE);\r
- set_oppose_cold(v, FALSE);\r
- set_oppose_pois(v, FALSE);\r
- set_ultimate_res(v, FALSE);\r
- }\r
- }\r
- break;\r
- }\r
-\r
- return "";\r
-}\r
-\r
-/*!\r
- * @brief 仙術領域魔法の各処理を行う\r
- * @param spell 魔法ID\r
- * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r
- * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。\r
- */\r
-static cptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)\r
-{\r
- bool name = (mode == SPELL_NAME) ? TRUE : FALSE;\r
- bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;\r
- bool info = (mode == SPELL_INFO) ? TRUE : FALSE;\r
- bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;\r
-\r
- int dir;\r
- int plev = p_ptr->lev;\r
-\r
- switch (spell)\r
- {\r
- case 0:\r
- if (name) return _("モンスター感知", "Detect Monsters");\r
- if (desc) return _("近くの全ての見えるモンスターを感知する。", "Detects all monsters in your vicinity unless invisible.");\r
- \r
- {\r
- int rad = DETECT_RAD_DEFAULT;\r
-\r
- if (info) return info_radius(rad);\r
-\r
- if (cast)\r
- {\r
- detect_monsters_normal(rad);\r
- }\r
- }\r
- break;\r
-\r
- case 1:\r
- if (name) return _("ショート・テレポート", "Phase Door");\r
- if (desc) return _("近距離のテレポートをする。", "Teleport short distance.");\r
- \r
- {\r
- POSITION range = 10;\r
-\r
- if (info) return info_range(range);\r
-\r
- if (cast)\r
- {\r
- teleport_player(range, 0L);\r
- }\r
- }\r
- break;\r
-\r
- case 2:\r
- if (name) return _("罠と扉感知", "Detect Doors and Traps");\r
- if (desc) return _("近くの全ての扉と罠を感知する。", "Detects traps, doors, and stairs in your vicinity.");\r
- \r
- {\r
- int rad = DETECT_RAD_DEFAULT;\r
-\r
- if (info) return info_radius(rad);\r
-\r
- if (cast)\r
- {\r
- detect_traps(rad, TRUE);\r
- detect_doors(rad);\r
- detect_stairs(rad);\r
- }\r
- }\r
- break;\r
-\r
- case 3:\r
- if (name) return _("ライト・エリア", "Light Area");\r
- if (desc) return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently.");\r
- \r
- {\r
- int dice = 2;\r
- int sides = plev / 2;\r
- int rad = plev / 10 + 1;\r
-\r
- if (info) return info_damage(dice, sides, 0);\r
-\r
- if (cast)\r
- {\r
- lite_area(damroll(dice, sides), rad);\r
- }\r
- }\r
- break;\r
-\r
- case 4:\r
- if (name) return _("パニック・モンスター", "Confuse Monster");\r
- if (desc) return _("モンスター1体を混乱させる。抵抗されると無効。", "Attempts to confuse a monster.");\r
- \r
- {\r
- int power = (plev * 3) / 2;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- confuse_monster(dir, power);\r
- }\r
- }\r
- break;\r
-\r
- case 5:\r
- if (name) return _("テレポート", "Teleport");\r
- if (desc) return _("遠距離のテレポートをする。", "Teleport long distance.");\r
- \r
- {\r
- POSITION range = plev * 5;\r
-\r
- if (info) return info_range(range);\r
-\r
- if (cast)\r
- {\r
- teleport_player(range, 0L);\r
- }\r
- }\r
- break;\r
-\r
- case 6:\r
- if (name) return _("スリープ・モンスター", "Sleep Monster");\r
- if (desc) return _("モンスター1体を眠らせる。抵抗されると無効。", "Attempts to sleep a monster.");\r
- \r
- {\r
- int power = plev;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- sleep_monster(dir, plev);\r
- }\r
- }\r
- break;\r
-\r
- case 7:\r
- if (name) return _("魔力充填", "Recharging");\r
- if (desc) return _("杖/魔法棒の充填回数を増やすか、充填中のロッドの充填時間を減らす。", "Recharges staffs, wands or rods.");\r
- \r
- {\r
- int power = plev * 4;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- if (!recharge(power)) return NULL;\r
- }\r
- }\r
- break;\r
-\r
- case 8:\r
- if (name) return _("魔法の地図", "Magic Mapping");\r
- if (desc) return _("周辺の地形を感知する。", "Maps nearby area.");\r
- \r
- {\r
- int rad = DETECT_RAD_MAP;\r
-\r
- if (info) return info_radius(rad);\r
-\r
- if (cast)\r
- {\r
- map_area(rad);\r
- }\r
- }\r
- break;\r
-\r
- case 9:\r
- if (name) return _("鑑定", "Identify");\r
- if (desc) return _("アイテムを識別する。", "Identifies an item.");\r
- \r
- {\r
- if (cast)\r
- {\r
- if (!ident_spell(FALSE)) return NULL;\r
- }\r
- }\r
- break;\r
-\r
- case 10:\r
- if (name) return _("スロウ・モンスター", "Slow Monster");\r
- if (desc) return _("モンスター1体を減速さる。抵抗されると無効。", "Attempts to slow a monster.");\r
- \r
- {\r
- int power = plev;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- slow_monster(dir, plev);\r
- }\r
- }\r
- break;\r
-\r
- case 11:\r
- if (name) return _("周辺スリープ", "Mass Sleep");\r
- if (desc) return _("視界内の全てのモンスターを眠らせる。抵抗されると無効。", "Attempts to sleep all monsters in sight.");\r
- \r
- {\r
- int power = plev;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- sleep_monsters(plev);\r
- }\r
- }\r
- break;\r
-\r
- case 12:\r
- if (name) return _("テレポート・モンスター", "Teleport Away");\r
- if (desc) return _("モンスターをテレポートさせるビームを放つ。抵抗されると無効。", "Teleports all monsters on the line away unless resisted.");\r
- \r
- {\r
- int power = plev;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- fire_beam(GF_AWAY_ALL, dir, power);\r
- }\r
- }\r
- break;\r
-\r
- case 13:\r
- if (name) return _("スピード", "Haste Self");\r
- if (desc) return _("一定時間、加速する。", "Hastes you for a while.");\r
- \r
- {\r
- int base = plev;\r
- int sides = 20 + plev;\r
-\r
- if (info) return info_duration(base, sides);\r
-\r
- if (cast)\r
- {\r
- set_fast(randint1(sides) + base, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 14:\r
- if (name) return _("真・感知", "Detection True");\r
- if (desc) return _("近くの全てのモンスター、罠、扉、階段、財宝、そしてアイテムを感知する。",\r
- "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.");\r
- \r
- {\r
- int rad = DETECT_RAD_DEFAULT;\r
-\r
- if (info) return info_radius(rad);\r
-\r
- if (cast)\r
- {\r
- detect_all(rad);\r
- }\r
- }\r
- break;\r
-\r
- case 15:\r
- if (name) return _("真・鑑定", "Identify True");\r
- if (desc) return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item.");\r
- \r
- {\r
- if (cast)\r
- {\r
- if (!identify_fully(FALSE)) return NULL;\r
- }\r
- }\r
- break;\r
-\r
- case 16:\r
- if (name) return _("物体と財宝感知", "Detect items and Treasure");\r
- if (desc) return _("近くの全てのアイテムと財宝を感知する。", "Detects all treasures and items in your vicinity.");\r
- \r
- {\r
- int rad = DETECT_RAD_DEFAULT;\r
-\r
- if (info) return info_radius(rad);\r
-\r
- if (cast)\r
- {\r
- detect_objects_normal(rad);\r
- detect_treasure(rad);\r
- detect_objects_gold(rad);\r
- }\r
- }\r
- break;\r
-\r
- case 17:\r
- if (name) return _("チャーム・モンスター", "Charm Monster");\r
- if (desc) return _("モンスター1体を魅了する。抵抗されると無効。", "Attempts to charm a monster.");\r
- \r
- {\r
- int power = plev;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- charm_monster(dir, power);\r
- }\r
- }\r
- break;\r
-\r
- case 18:\r
- if (name) return _("精神感知", "Sense Minds");\r
- if (desc) return _("一定時間、テレパシー能力を得る。", "Gives telepathy for a while.");\r
- \r
- {\r
- int base = 25;\r
- int sides = 30;\r
-\r
- if (info) return info_duration(base, sides);\r
-\r
- if (cast)\r
- {\r
- set_tim_esp(randint1(sides) + base, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 19:\r
- if (name) return _("街移動", "Teleport to town");\r
- if (desc) return _("街へ移動する。地上にいるときしか使えない。", "Teleport to a town which you choose in a moment. Can only be used outdoors.");\r
- \r
- {\r
- if (cast)\r
- {\r
- if (!tele_town()) return NULL;\r
- }\r
- }\r
- break;\r
-\r
- case 20:\r
- if (name) return _("自己分析", "Self Knowledge");\r
- if (desc) return _("現在の自分の状態を完全に知る。",\r
- "Gives you useful info regarding your current resistances, the powers of your weapon and maximum limits of your stats.");\r
- \r
- {\r
- if (cast)\r
- {\r
- self_knowledge();\r
- }\r
- }\r
- break;\r
-\r
- case 21:\r
- if (name) return _("テレポート・レベル", "Teleport Level");\r
- if (desc) return _("瞬時に上か下の階にテレポートする。", "Teleport to up or down stairs in a moment.");\r
- \r
- {\r
- if (cast)\r
- {\r
- if (!get_check(_("本当に他の階にテレポートしますか?", "Are you sure? (Teleport Level)"))) return NULL;\r
- teleport_level(0);\r
- }\r
- }\r
- break;\r
-\r
- case 22:\r
- if (name) return _("帰還の呪文", "Word of Recall");\r
- if (desc) return _("地上にいるときはダンジョンの最深階へ、ダンジョンにいるときは地上へと移動する。", \r
- "Recalls player from dungeon to town, or from town to the deepest level of dungeon.");\r
- \r
- {\r
- int base = 15;\r
- int sides = 20;\r
-\r
- if (info) return info_delay(base, sides);\r
-\r
- if (cast)\r
- {\r
- if (!word_of_recall()) return NULL;\r
- }\r
- }\r
- break;\r
-\r
- case 23:\r
- if (name) return _("次元の扉", "Dimension Door");\r
- if (desc) return _("短距離内の指定した場所にテレポートする。", "Teleport to given location.");\r
- \r
- {\r
- POSITION range = plev / 2 + 10;\r
-\r
- if (info) return info_range(range);\r
-\r
- if (cast)\r
- {\r
- msg_print(_("次元の扉が開いた。目的地を選んで下さい。", "You open a dimensional gate. Choose a destination."));\r
- if (!dimension_door()) return NULL;\r
- }\r
- }\r
- break;\r
-\r
- case 24:\r
- if (name) return _("調査", "Probing");\r
- if (desc) return _("モンスターの属性、残り体力、最大体力、スピード、正体を知る。",\r
- "Proves all monsters' alignment, HP, speed and their true character.");\r
- \r
- {\r
- if (cast)\r
- {\r
- probing();\r
- }\r
- }\r
- break;\r
-\r
- case 25:\r
- if (name) return _("爆発のルーン", "Explosive Rune");\r
- if (desc) return _("自分のいる床の上に、モンスターが通ると爆発してダメージを与えるルーンを描く。", \r
- "Sets a glyph under you. The glyph will explode when a monster moves on it.");\r
- \r
- {\r
- int dice = 7;\r
- int sides = 7;\r
- int base = plev;\r
-\r
- if (info) return info_damage(dice, sides, base);\r
-\r
- if (cast)\r
- {\r
- explosive_rune();\r
- }\r
- }\r
- break;\r
-\r
- case 26:\r
- if (name) return _("念動力", "Telekinesis");\r
- if (desc) return _("アイテムを自分の足元へ移動させる。", "Pulls a distant item close to you.");\r
- \r
- {\r
- int weight = plev * 15;\r
-\r
- if (info) return info_weight(weight);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- fetch(dir, weight, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 27:\r
- if (name) return _("千里眼", "Clairvoyance");\r
- if (desc) return _("その階全体を永久に照らし、ダンジョン内すべてのアイテムを感知する。さらに、一定時間テレパシー能力を得る。",\r
- "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.");\r
- \r
- {\r
- int base = 25;\r
- int sides = 30;\r
-\r
- if (info) return info_duration(base, sides);\r
-\r
- if (cast)\r
- {\r
- chg_virtue(V_KNOWLEDGE, 1);\r
- chg_virtue(V_ENLIGHTEN, 1);\r
-\r
- wiz_lite(FALSE);\r
-\r
- if (!p_ptr->telepathy)\r
- {\r
- set_tim_esp(randint1(sides) + base, FALSE);\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 28:\r
- if (name) return _("魅了の視線", "Charm monsters");\r
- if (desc) return _("視界内の全てのモンスターを魅了する。抵抗されると無効。", "Attempts to charm all monsters in sight.");\r
- \r
- {\r
- int power = plev * 2;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- charm_monsters(power);\r
- }\r
- }\r
- break;\r
-\r
- case 29:\r
- if (name) return _("錬金術", "Alchemy");\r
- if (desc) return _("アイテム1つをお金に変える。", "Turns an item into 1/3 of its value in gold.");\r
- \r
- {\r
- if (cast)\r
- {\r
- if (!alchemy()) return NULL;\r
- }\r
- }\r
- break;\r
-\r
- case 30:\r
- if (name) return _("怪物追放", "Banishment");\r
- if (desc) return _("視界内の全てのモンスターをテレポートさせる。抵抗されると無効。", "Teleports all monsters in sight away unless resisted.");\r
- \r
- {\r
- int power = plev * 4;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- banish_monsters(power);\r
- }\r
- }\r
- break;\r
-\r
- case 31:\r
- if (name) return _("無傷の球", "Globe of Invulnerability");\r
- if (desc) return _("一定時間、ダメージを受けなくなるバリアを張る。切れた瞬間に少しターンを消費するので注意。",\r
- "Generates barrier which completely protect you from almost all damages. Takes a few your turns when the barrier breaks or duration time is exceeded.");\r
- \r
- {\r
- int base = 4;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_invuln(randint1(base) + base, FALSE);\r
- }\r
- }\r
- break;\r
- }\r
-\r
- return "";\r
-}\r
-\r
-\r
-/*!\r
- * @brief 自然領域魔法の各処理を行う\r
- * @param spell 魔法ID\r
- * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r
- * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。\r
- */\r
-static cptr do_nature_spell(SPELL_IDX spell, BIT_FLAGS mode)\r
-{\r
- bool name = (mode == SPELL_NAME) ? TRUE : FALSE;\r
- bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;\r
- bool info = (mode == SPELL_INFO) ? TRUE : FALSE;\r
- bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;\r
-\r
- static const char s_dam[] = _("損傷:", "dam ");\r
- static const char s_rng[] = _("射程", "rng ");\r
-\r
- int dir;\r
- int plev = p_ptr->lev;\r
-\r
- switch (spell)\r
- {\r
- case 0:\r
- if (name) return _("モンスター感知", "Detect Creatures");\r
- if (desc) return _("近くの全ての見えるモンスターを感知する。", "Detects all monsters in your vicinity unless invisible.");\r
- \r
- {\r
- int rad = DETECT_RAD_DEFAULT;\r
-\r
- if (info) return info_radius(rad);\r
-\r
- if (cast)\r
- {\r
- detect_monsters_normal(rad);\r
- }\r
- }\r
- break;\r
-\r
- case 1:\r
- if (name) return _("稲妻", "Lightning");\r
- if (desc) return _("電撃の短いビームを放つ。", "Fires a short beam of lightning.");\r
- \r
- {\r
- int dice = 3 + (plev - 1) / 5;\r
- int sides = 4;\r
- POSITION range = plev / 6 + 2;\r
-\r
- if (info) return format("%s%dd%d %s%d", s_dam, dice, sides, s_rng, range);\r
-\r
- if (cast)\r
- {\r
- project_length = range;\r
-\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- fire_beam(GF_ELEC, dir, damroll(dice, sides));\r
- }\r
- }\r
- break;\r
-\r
- case 2:\r
- if (name) return _("罠と扉感知", "Detect Doors and Traps");\r
- if (desc) return _("近くの全ての罠と扉を感知する。", "Detects traps, doors, and stairs in your vicinity.");\r
- \r
- {\r
- int rad = DETECT_RAD_DEFAULT;\r
-\r
- if (info) return info_radius(rad);\r
-\r
- if (cast)\r
- {\r
- detect_traps(rad, TRUE);\r
- detect_doors(rad);\r
- detect_stairs(rad);\r
- }\r
- }\r
- break;\r
-\r
- case 3:\r
- if (name) return _("食糧生成", "Produce Food");\r
- if (desc) return _("食料を一つ作り出す。", "Produces a Ration of Food.");\r
- \r
- {\r
- if (cast)\r
- {\r
- object_type forge, *q_ptr = &forge;\r
- msg_print(_("食料を生成した。", "A food ration is produced."));\r
-\r
- /* Create the food ration */\r
- object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_RATION));\r
-\r
- /* Drop the object from heaven */\r
- drop_near(q_ptr, -1, p_ptr->y, p_ptr->x);\r
- }\r
- }\r
- break;\r
-\r
- case 4:\r
- if (name) return _("日の光", "Daylight");\r
- if (desc) return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently.");\r
- \r
- {\r
- int dice = 2;\r
- int sides = plev / 2;\r
- int rad = (plev / 10) + 1;\r
-\r
- if (info) return info_damage(dice, sides, 0);\r
-\r
- if (cast)\r
- {\r
- lite_area(damroll(dice, sides), rad);\r
-\r
- if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)\r
- {\r
- msg_print(_("日の光があなたの肉体を焦がした!", "The daylight scorches your flesh!"));\r
- take_hit(DAMAGE_NOESCAPE, damroll(2, 2), _("日の光", "daylight"), -1);\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 5:\r
- if (name) return _("動物習し", "Animal Taming");\r
- if (desc) return _("動物1体を魅了する。抵抗されると無効。", "Attempts to charm an animal.");\r
- \r
- {\r
- int power = plev;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- charm_animal(dir, power);\r
- }\r
- }\r
- break;\r
-\r
- case 6:\r
- if (name) return _("環境への耐性", "Resist Environment");\r
- if (desc) return _("一定時間、冷気、炎、電撃に対する耐性を得る。装備による耐性に累積する。",\r
- "Gives resistance to fire, cold and electricity for a while. These resistances can be added to which from equipment for more powerful resistances.");\r
- \r
- {\r
- int base = 20;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_oppose_cold(randint1(base) + base, FALSE);\r
- set_oppose_fire(randint1(base) + base, FALSE);\r
- set_oppose_elec(randint1(base) + base, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 7:\r
- if (name) return _("傷と毒治療", "Cure Wounds & Poison");\r
- if (desc) return _("怪我を全快させ、毒を体から完全に取り除き、体力を少し回復させる。", "Heals all cut and poison status. Heals HP a little.");\r
- \r
- {\r
- int dice = 2;\r
- int sides = 8;\r
-\r
- if (info) return info_heal(dice, sides, 0);\r
-\r
- if (cast)\r
- {\r
- hp_player(damroll(dice, sides));\r
- set_cut(0);\r
- set_poisoned(0);\r
- }\r
- }\r
- break;\r
-\r
- case 8:\r
- if (name) return _("岩石溶解", "Stone to Mud");\r
- if (desc) return _("壁を溶かして床にする。", "Turns one rock square to mud.");\r
- \r
- {\r
- int dice = 1;\r
- int sides = 30;\r
- int base = 20;\r
-\r
- if (info) return info_damage(dice, sides, base);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- wall_to_mud(dir, 20 + randint1(30));\r
- }\r
- }\r
- break;\r
-\r
- case 9:\r
- if (name) return _("アイス・ボルト", "Frost Bolt");\r
- if (desc) return _("冷気のボルトもしくはビームを放つ。", "Fires a bolt or beam of cold.");\r
- \r
- {\r
- int dice = 3 + (plev - 5) / 4;\r
- int sides = 8;\r
-\r
- if (info) return info_damage(dice, sides, 0);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
- fire_bolt_or_beam(beam_chance() - 10, GF_COLD, dir, damroll(dice, sides));\r
- }\r
- }\r
- break;\r
-\r
- case 10:\r
- if (name) return _("自然の覚醒", "Nature Awareness");\r
- if (desc) return _("周辺の地形を感知し、近くの罠、扉、階段、全てのモンスターを感知する。",\r
- "Maps nearby area. Detects all monsters, traps, doors and stairs.");\r
- \r
- {\r
- int rad1 = DETECT_RAD_MAP;\r
- int rad2 = DETECT_RAD_DEFAULT;\r
-\r
- if (info) return info_radius(MAX(rad1, rad2));\r
-\r
- if (cast)\r
- {\r
- map_area(rad1);\r
- detect_traps(rad2, TRUE);\r
- detect_doors(rad2);\r
- detect_stairs(rad2);\r
- detect_monsters_normal(rad2);\r
- }\r
- }\r
- break;\r
-\r
- case 11:\r
- if (name) return _("ファイア・ボルト", "Fire Bolt");\r
- if (desc) return _("火炎のボルトもしくはビームを放つ。", "Fires a bolt or beam of fire.");\r
- \r
- {\r
- int dice = 5 + (plev - 5) / 4;\r
- int sides = 8;\r
-\r
- if (info) return info_damage(dice, sides, 0);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
- fire_bolt_or_beam(beam_chance() - 10, GF_FIRE, dir, damroll(dice, sides));\r
- }\r
- }\r
- break;\r
-\r
- case 12:\r
- if (name) return _("太陽光線", "Ray of Sunlight");\r
- if (desc) return _("光線を放つ。光りを嫌うモンスターに効果がある。", "Fires a beam of light which damages to light-sensitive monsters.");\r
- \r
- {\r
- int dice = 6;\r
- int sides = 8;\r
-\r
- if (info) return info_damage(dice, sides, 0);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
- msg_print(_("太陽光線が現れた。", "A line of sunlight appears."));\r
- lite_line(dir, damroll(6, 8));\r
- }\r
- }\r
- break;\r
-\r
- case 13:\r
- if (name) return _("足かせ", "Entangle");\r
- if (desc) return _("視界内の全てのモンスターを減速させる。抵抗されると無効。", "Attempts to slow all monsters in sight.");\r
- \r
- {\r
- int power = plev;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- slow_monsters(plev);\r
- }\r
- }\r
- break;\r
-\r
- case 14:\r
- if (name) return _("動物召喚", "Summon Animal");\r
- if (desc) return _("動物を1体召喚する。", "Summons an animal.");\r
- \r
- {\r
- if (cast)\r
- {\r
- if (!(summon_specific(-1, p_ptr->y, p_ptr->x, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET))))\r
- {\r
- msg_print(_("動物は現れなかった。", "No animals arrive."));\r
- }\r
- break;\r
- }\r
- }\r
- break;\r
-\r
- case 15:\r
- if (name) return _("薬草治療", "Herbal Healing");\r
- if (desc) return _("体力を大幅に回復させ、負傷、朦朧状態、毒から全快する。", "Heals HP greatly. And heals cut, stun and poison completely.");\r
- \r
- {\r
- int heal = 500;\r
-\r
- if (info) return info_heal(0, 0, heal);\r
-\r
- if (cast)\r
- {\r
- hp_player(heal);\r
- set_stun(0);\r
- set_cut(0);\r
- set_poisoned(0);\r
- }\r
- }\r
- break;\r
-\r
- case 16:\r
- if (name) return _("階段生成", "Stair Building");\r
- if (desc) return _("自分のいる位置に階段を作る。", "Creates a stair which goes down or up.");\r
- \r
- {\r
- if (cast)\r
- {\r
- stair_creation();\r
- }\r
- }\r
- break;\r
-\r
- case 17:\r
- if (name) return _("肌石化", "Stone Skin");\r
- if (desc) return _("一定時間、ACを上昇させる。", "Gives bonus to AC for a while.");\r
- \r
- {\r
- int base = 20;\r
- int sides = 30;\r
-\r
- if (info) return info_duration(base, sides);\r
-\r
- if (cast)\r
- {\r
- set_shield(randint1(sides) + base, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 18:\r
- if (name) return _("真・耐性", "Resistance True");\r
- if (desc) return _("一定時間、酸、電撃、炎、冷気、毒に対する耐性を得る。装備による耐性に累積する。", \r
- "Gives resistance to fire, cold, electricity, acid and poison for a while. These resistances can be added to which from equipment for more powerful resistances.");\r
- \r
- {\r
- int base = 20;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_oppose_acid(randint1(base) + base, FALSE);\r
- set_oppose_elec(randint1(base) + base, FALSE);\r
- set_oppose_fire(randint1(base) + base, FALSE);\r
- set_oppose_cold(randint1(base) + base, FALSE);\r
- set_oppose_pois(randint1(base) + base, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 19:\r
- if (name) return _("森林創造", "Forest Creation");\r
- if (desc) return _("周囲に木を作り出す。", "Creates trees in all adjacent squares.");\r
- \r
- {\r
- if (cast)\r
- {\r
- tree_creation();\r
- }\r
- }\r
- break;\r
-\r
- case 20:\r
- if (name) return _("動物友和", "Animal Friendship");\r
- if (desc) return _("視界内の全ての動物を魅了する。抵抗されると無効。", "Attempts to charm all animals in sight.");\r
- \r
- {\r
- int power = plev * 2;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- charm_animals(power);\r
- }\r
- }\r
- break;\r
-\r
- case 21:\r
- if (name) return _("試金石", "Stone Tell");\r
- if (desc) return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item.");\r
- \r
- {\r
- if (cast)\r
- {\r
- if (!identify_fully(FALSE)) return NULL;\r
- }\r
- }\r
- break;\r
-\r
- case 22:\r
- if (name) return _("石の壁", "Wall of Stone");\r
- if (desc) return _("自分の周囲に花崗岩の壁を作る。", "Creates granite walls in all adjacent squares.");\r
- \r
- {\r
- if (cast)\r
- {\r
- wall_stone();\r
- }\r
- }\r
- break;\r
-\r
- case 23:\r
- if (name) return _("腐食防止", "Protect from Corrosion");\r
- if (desc) return _("アイテムを酸で傷つかないよう加工する。", "Makes an equipment acid-proof.");\r
- \r
- {\r
- if (cast)\r
- {\r
- if (!rustproof()) return NULL;\r
- }\r
- }\r
- break;\r
-\r
- case 24:\r
- if (name) return _("地震", "Earthquake");\r
- if (desc) return _("周囲のダンジョンを揺らし、壁と床をランダムに入れ変える。", \r
- "Shakes dungeon structure, and results in random swapping of floors and walls.");\r
- \r
- {\r
- int rad = 10;\r
-\r
- if (info) return info_radius(rad);\r
-\r
- if (cast)\r
- {\r
- earthquake(p_ptr->y, p_ptr->x, rad);\r
- }\r
- }\r
- break;\r
-\r
- case 25:\r
- if (name) return _("カマイタチ", "Cyclone");\r
- if (desc) return _("全方向に向かって攻撃する。", "Attacks all adjacent monsters.");\r
- \r
- {\r
- if (cast)\r
- {\r
- int y = 0, x = 0;\r
- cave_type *c_ptr;\r
- monster_type *m_ptr;\r
-\r
- for (dir = 0; dir < 8; dir++)\r
- {\r
- y = p_ptr->y + ddy_ddd[dir];\r
- x = p_ptr->x + ddx_ddd[dir];\r
- c_ptr = &cave[y][x];\r
-\r
- /* Get the monster */\r
- m_ptr = &m_list[c_ptr->m_idx];\r
-\r
- /* Hack -- attack monsters */\r
- if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))\r
- py_attack(y, x, 0);\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 26:\r
- if (name) return _("ブリザード", "Blizzard");\r
- if (desc) return _("巨大な冷気の球を放つ。", "Fires a huge ball of cold.");\r
- \r
- {\r
- HIT_POINT dam = 70 + plev * 3 / 2;\r
- int rad = plev / 12 + 1;\r
-\r
- if (info) return info_damage(0, 0, dam);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- fire_ball(GF_COLD, dir, dam, rad);\r
- }\r
- }\r
- break;\r
-\r
- case 27:\r
- if (name) return _("稲妻嵐", "Lightning Storm");\r
- if (desc) return _("巨大な電撃の球を放つ。", "Fires a huge electric ball.");\r
- \r
- {\r
- HIT_POINT dam = 90 + plev * 3 / 2;\r
- int rad = plev / 12 + 1;\r
-\r
- if (info) return info_damage(0, 0, dam);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
- fire_ball(GF_ELEC, dir, dam, rad);\r
- break;\r
- }\r
- }\r
- break;\r
-\r
- case 28:\r
- if (name) return _("渦潮", "Whirlpool");\r
- if (desc) return _("巨大な水の球を放つ。", "Fires a huge ball of water.");\r
- \r
- {\r
- HIT_POINT dam = 100 + plev * 3 / 2;\r
- int rad = plev / 12 + 1;\r
-\r
- if (info) return info_damage(0, 0, dam);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
- fire_ball(GF_WATER, dir, dam, rad);\r
- }\r
- }\r
- break;\r
-\r
- case 29:\r
- if (name) return _("陽光召喚", "Call Sunlight");\r
- if (desc) return _("自分を中心とした光の球を発生させる。さらに、その階全体を永久に照らし、ダンジョン内すべてのアイテムを感知する。",\r
- "Generates ball of light centered on you. Maps and lights whole dungeon level. Knows all objects location.");\r
- \r
- {\r
- HIT_POINT dam = 150;\r
- int rad = 8;\r
-\r
- if (info) return info_damage(0, 0, dam/2);\r
-\r
- if (cast)\r
- {\r
- fire_ball(GF_LITE, 0, dam, rad);\r
- chg_virtue(V_KNOWLEDGE, 1);\r
- chg_virtue(V_ENLIGHTEN, 1);\r
- wiz_lite(FALSE);\r
-\r
- if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)\r
- {\r
- msg_print(_("日光があなたの肉体を焦がした!", "The sunlight scorches your flesh!"));\r
- take_hit(DAMAGE_NOESCAPE, 50, _("日光", "sunlight"), -1);\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 30:\r
- if (name) return _("精霊の刃", "Elemental Branding");\r
- if (desc) return _("武器に炎か冷気の属性をつける。", "Makes current weapon fire or frost branded.");\r
- \r
- {\r
- if (cast)\r
- {\r
- brand_weapon(randint0(2));\r
- }\r
- }\r
- break;\r
-\r
- case 31:\r
- if (name) return _("自然の脅威", "Nature's Wrath");\r
- if (desc) return _("近くの全てのモンスターにダメージを与え、地震を起こし、自分を中心とした分解の球を発生させる。", \r
- "Damages all monsters in sight. Makes quake. Generates disintegration ball centered on you.");\r
- \r
- {\r
- int d_dam = 4 * plev;\r
- int b_dam = (100 + plev) * 2;\r
- int b_rad = 1 + plev / 12;\r
- int q_rad = 20 + plev / 2;\r
-\r
- if (info) return format("%s%d+%d", s_dam, d_dam, b_dam/2);\r
-\r
- if (cast)\r
- {\r
- dispel_monsters(d_dam);\r
- earthquake(p_ptr->y, p_ptr->x, q_rad);\r
- project(0, b_rad, p_ptr->y, p_ptr->x, b_dam, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM, -1);\r
- }\r
- }\r
- break;\r
- }\r
-\r
- return "";\r
-}\r
-\r
-\r
-\r
-/*!\r
- * @brief 暗黒領域魔法の各処理を行う\r
- * @param spell 魔法ID\r
- * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r
- * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。\r
- */\r
-static cptr do_death_spell(SPELL_IDX spell, BIT_FLAGS mode)\r
-{\r
- bool name = (mode == SPELL_NAME) ? TRUE : FALSE;\r
- bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;\r
- bool info = (mode == SPELL_INFO) ? TRUE : FALSE;\r
- bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;\r
-\r
- static const char s_dam[] = _("損傷:", "dam ");\r
- static const char s_random[] = _("ランダム", "random");\r
-\r
- int dir;\r
- int plev = p_ptr->lev;\r
-\r
- switch (spell)\r
- {\r
- case 0:\r
- if (name) return _("無生命感知", "Detect Unlife");\r
- if (desc) return _("近くの生命のないモンスターを感知する。", "Detects all nonliving monsters in your vicinity.");\r
- \r
- {\r
- int rad = DETECT_RAD_DEFAULT;\r
-\r
- if (info) return info_radius(rad);\r
-\r
- if (cast)\r
- {\r
- detect_monsters_nonliving(rad);\r
- }\r
- }\r
- break;\r
-\r
- case 1:\r
- if (name) return _("呪殺弾", "Malediction");\r
- if (desc) return _("ごく小さな邪悪な力を持つボールを放つ。善良なモンスターには大きなダメージを与える。", \r
- "Fires a tiny ball of evil power which hurts good monsters greatly.");\r
- \r
- {\r
- int dice = 3 + (plev - 1) / 5;\r
- int sides = 4;\r
- int rad = 0;\r
-\r
- if (info) return info_damage(dice, sides, 0);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- /*\r
- * A radius-0 ball may (1) be aimed at\r
- * objects etc., and will affect them;\r
- * (2) may be aimed at ANY visible\r
- * monster, unlike a 'bolt' which must\r
- * travel to the monster.\r
- */\r
-\r
- fire_ball(GF_HELL_FIRE, dir, damroll(dice, sides), rad);\r
-\r
- if (one_in_(5))\r
- {\r
- /* Special effect first */\r
- int effect = randint1(1000);\r
-\r
- if (effect == 666)\r
- fire_ball_hide(GF_DEATH_RAY, dir, plev * 200, 0);\r
- else if (effect < 500)\r
- fire_ball_hide(GF_TURN_ALL, dir, plev, 0);\r
- else if (effect < 800)\r
- fire_ball_hide(GF_OLD_CONF, dir, plev, 0);\r
- else\r
- fire_ball_hide(GF_STUN, dir, plev, 0);\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 2:\r
- if (name) return _("邪悪感知", "Detect Evil");\r
- if (desc) return _("近くの邪悪なモンスターを感知する。", "Detects all evil monsters in your vicinity.");\r
- \r
- {\r
- int rad = DETECT_RAD_DEFAULT;\r
-\r
- if (info) return info_radius(rad);\r
-\r
- if (cast)\r
- {\r
- detect_monsters_evil(rad);\r
- }\r
- }\r
- break;\r
-\r
- case 3:\r
- if (name) return _("悪臭雲", "Stinking Cloud");\r
- if (desc) return _("毒の球を放つ。", "Fires a ball of poison.");\r
- \r
- {\r
- HIT_POINT dam = 10 + plev / 2;\r
- int rad = 2;\r
-\r
- if (info) return info_damage(0, 0, dam);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- fire_ball(GF_POIS, dir, dam, rad);\r
- }\r
- }\r
- break;\r
-\r
- case 4:\r
- if (name) return _("黒い眠り", "Black Sleep");\r
- if (desc) return _("1体のモンスターを眠らせる。抵抗されると無効。", "Attempts to sleep a monster.");\r
- \r
- {\r
- int power = plev;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- sleep_monster(dir, plev);\r
- }\r
- }\r
- break;\r
-\r
- case 5:\r
- if (name) return _("耐毒", "Resist Poison");\r
- if (desc) return _("一定時間、毒への耐性を得る。装備による耐性に累積する。", \r
- "Gives resistance to poison. This resistance can be added to which from equipment for more powerful resistance.");\r
- \r
- {\r
- int base = 20;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_oppose_pois(randint1(base) + base, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 6:\r
- if (name) return _("恐慌", "Horrify");\r
- if (desc) return _("モンスター1体を恐怖させ、朦朧させる。抵抗されると無効。", "Attempts to scare and stun a monster.");\r
- \r
- {\r
- int power = plev;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- fear_monster(dir, power);\r
- stun_monster(dir, power);\r
- }\r
- }\r
- break;\r
-\r
- case 7:\r
- if (name) return _("アンデッド従属", "Enslave Undead");\r
- if (desc) return _("アンデッド1体を魅了する。抵抗されると無効。", "Attempts to charm an undead monster.");\r
- \r
- {\r
- int power = plev;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- control_one_undead(dir, power);\r
- }\r
- }\r
- break;\r
-\r
- case 8:\r
- if (name) return _("エントロピーの球", "Orb of Entropy");\r
- if (desc) return _("生命のある者のHPと最大HP双方にダメージを与える効果のある球を放つ。", "Fires a ball which damages to both HP and MaxHP of living monsters.");\r
-\r
- {\r
- int dice = 3;\r
- int sides = 6;\r
- int rad = (plev < 30) ? 2 : 3;\r
- int base;\r
-\r
- if (p_ptr->pclass == CLASS_MAGE ||\r
- p_ptr->pclass == CLASS_HIGH_MAGE ||\r
- p_ptr->pclass == CLASS_SORCERER)\r
- base = plev + plev / 2;\r
- else\r
- base = plev + plev / 4;\r
-\r
-\r
- if (info) return info_damage(dice, sides, base);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- fire_ball(GF_HYPODYNAMIA, dir, damroll(dice, sides) + base, rad);\r
- }\r
- }\r
- break;\r
-\r
- case 9:\r
- if (name) return _("地獄の矢", "Nether Bolt");\r
- if (desc) return _("地獄のボルトもしくはビームを放つ。", "Fires a bolt or beam of nether.");\r
- \r
- {\r
- int dice = 8 + (plev - 5) / 4;\r
- int sides = 8;\r
-\r
- if (info) return info_damage(dice, sides, 0);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- fire_bolt_or_beam(beam_chance(), GF_NETHER, dir, damroll(dice, sides));\r
- }\r
- }\r
- break;\r
-\r
- case 10:\r
- if (name) return _("殺戮雲", "Cloud kill");\r
- if (desc) return _("自分を中心とした毒の球を発生させる。", "Generate a ball of poison centered on you.");\r
- \r
- {\r
- HIT_POINT dam = (30 + plev) * 2;\r
- int rad = plev / 10 + 2;\r
-\r
- if (info) return info_damage(0, 0, dam/2);\r
-\r
- if (cast)\r
- {\r
- project(0, rad, p_ptr->y, p_ptr->x, dam, GF_POIS, PROJECT_KILL | PROJECT_ITEM, -1);\r
- }\r
- }\r
- break;\r
-\r
- case 11:\r
- if (name) return _("モンスター消滅", "Genocide One");\r
- if (desc) return _("モンスター1体を消し去る。経験値やアイテムは手に入らない。抵抗されると無効。", "Attempts to vanish a monster.");\r
- \r
- {\r
- int power = plev + 50;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- fire_ball_hide(GF_GENOCIDE, dir, power, 0);\r
- }\r
- }\r
- break;\r
-\r
- case 12:\r
- if (name) return _("毒の刃", "Poison Branding");\r
- if (desc) return _("武器に毒の属性をつける。", "Makes current weapon poison branded.");\r
- \r
- {\r
- if (cast)\r
- {\r
- brand_weapon(3);\r
- }\r
- }\r
- break;\r
-\r
- case 13:\r
- if (name) return _("吸血の矢", "Vampiric Bolt");\r
- if (desc) return _("ボルトによりモンスター1体から生命力を吸いとる。吸いとった生命力によって満腹度が上がる。", \r
- "Absorbs some HP from a monster and gives them to you by bolt. You will also gain nutritional sustenance from this.");\r
- \r
- {\r
- int dice = 1;\r
- int sides = plev * 2;\r
- int base = plev * 2;\r
-\r
- if (info) return info_damage(dice, sides, base);\r
-\r
- if (cast)\r
- {\r
- HIT_POINT dam = base + damroll(dice, sides);\r
-\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- if (hypodynamic_bolt(dir, dam))\r
- {\r
- chg_virtue(V_SACRIFICE, -1);\r
- chg_virtue(V_VITALITY, -1);\r
-\r
- hp_player(dam);\r
-\r
- /*\r
- * Gain nutritional sustenance:\r
- * 150/hp drained\r
- *\r
- * A Food ration gives 5000\r
- * food points (by contrast)\r
- * Don't ever get more than\r
- * "Full" this way But if we\r
- * ARE Gorged, it won't cure\r
- * us\r
- */\r
- dam = p_ptr->food + MIN(5000, 100 * dam);\r
-\r
- /* Not gorged already */\r
- if (p_ptr->food < PY_FOOD_MAX)\r
- set_food(dam >= PY_FOOD_MAX ? PY_FOOD_MAX - 1 : dam);\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 14:\r
- if (name) return _("反魂の術", "Animate dead");\r
- if (desc) return _("周囲の死体や骨を生き返す。", "Resurrects nearby corpse and skeletons. And makes these your pets.");\r
- \r
- {\r
- if (cast)\r
- {\r
- animate_dead(0, p_ptr->y, p_ptr->x);\r
- }\r
- }\r
- break;\r
-\r
- case 15:\r
- if (name) return _("抹殺", "Genocide");\r
- if (desc) return _("指定した文字のモンスターを現在の階から消し去る。抵抗されると無効。", \r
- "Eliminates an entire class of monster, exhausting you. Powerful or unique monsters may resist.");\r
- \r
- {\r
- int power = plev+50;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- symbol_genocide(power, TRUE);\r
- }\r
- }\r
- break;\r
-\r
- case 16:\r
- if (name) return _("狂戦士化", "Berserk");\r
- if (desc) return _("狂戦士化し、恐怖を除去する。", "Gives bonus to hit and HP, immunity to fear for a while. But decreases AC.");\r
- \r
- {\r
- int base = 25;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_shero(randint1(base) + base, FALSE);\r
- hp_player(30);\r
- set_afraid(0);\r
- }\r
- }\r
- break;\r
-\r
- case 17:\r
- if (name) return _("悪霊召喚", "Invoke Spirits");\r
- if (desc) return _("ランダムで様々な効果が起こる。", "Causes random effects.");\r
- \r
- {\r
- if (info) return s_random;\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- cast_invoke_spirits(dir);\r
- }\r
- }\r
- break;\r
-\r
- case 18:\r
- if (name) return _("暗黒の矢", "Dark Bolt");\r
- if (desc) return _("暗黒のボルトもしくはビームを放つ。", "Fires a bolt or beam of darkness.");\r
- \r
- {\r
- int dice = 4 + (plev - 5) / 4;\r
- int sides = 8;\r
-\r
- if (info) return info_damage(dice, sides, 0);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- fire_bolt_or_beam(beam_chance(), GF_DARK, dir, damroll(dice, sides));\r
- }\r
- }\r
- break;\r
-\r
- case 19:\r
- if (name) return _("狂乱戦士", "Battle Frenzy");\r
- if (desc) return _("狂戦士化し、恐怖を除去し、加速する。", \r
- "Gives another bonus to hit and HP, immunity to fear for a while. Hastes you. But decreases AC.");\r
- \r
- {\r
- int b_base = 25;\r
- int sp_base = plev / 2;\r
- int sp_sides = 20 + plev / 2;\r
-\r
- if (info) return info_duration(b_base, b_base);\r
-\r
- if (cast)\r
- {\r
- set_shero(randint1(25) + 25, FALSE);\r
- hp_player(30);\r
- set_afraid(0);\r
- set_fast(randint1(sp_sides) + sp_base, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 20:\r
- if (name) return _("吸血の刃", "Vampiric Branding");\r
- if (desc) return _("武器に吸血の属性をつける。", "Makes current weapon Vampiric.");\r
- \r
- {\r
- if (cast)\r
- {\r
- brand_weapon(4);\r
- }\r
- }\r
- break;\r
-\r
- case 21:\r
- if (name) return _("吸血の連矢", "Vampiric Bolts");\r
- if (desc) return _("3連射のボルトによりモンスター1体から生命力を吸いとる。吸いとった生命力によって体力が回復する。", \r
- "Fires 3 bolts. Each of the bolts absorbs some HP from a monster and gives them to you.");\r
- {\r
- HIT_POINT dam = 100;\r
-\r
- if (info) return format("%s3*%d", s_dam, dam);\r
-\r
- if (cast)\r
- {\r
- int i;\r
-\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- chg_virtue(V_SACRIFICE, -1);\r
- chg_virtue(V_VITALITY, -1);\r
-\r
- for (i = 0; i < 3; i++)\r
- {\r
- if (hypodynamic_bolt(dir, dam))\r
- hp_player(dam);\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 22:\r
- if (name) return _("死の言魂", "Nether Wave");\r
- if (desc) return _("視界内の生命のあるモンスターにダメージを与える。", "Damages all living monsters in sight.");\r
- \r
- {\r
- int sides = plev * 3;\r
-\r
- if (info) return info_damage(1, sides, 0);\r
-\r
- if (cast)\r
- {\r
- dispel_living(randint1(sides));\r
- }\r
- }\r
- break;\r
-\r
- case 23:\r
- if (name) return _("暗黒の嵐", "Darkness Storm");\r
- if (desc) return _("巨大な暗黒の球を放つ。", "Fires a huge ball of darkness.");\r
- \r
- {\r
- HIT_POINT dam = 100 + plev * 2;\r
- int rad = 4;\r
-\r
- if (info) return info_damage(0, 0, dam);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- fire_ball(GF_DARK, dir, dam, rad);\r
- }\r
- }\r
- break;\r
-\r
- case 24:\r
- if (name) return _("死の光線", "Death Ray");\r
- if (desc) return _("死の光線を放つ。", "Fires a beam of death.");\r
- \r
- {\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- death_ray(dir, plev);\r
- }\r
- }\r
- break;\r
-\r
- case 25:\r
- if (name) return _("死者召喚", "Raise the Dead");\r
- if (desc) return _("1体のアンデッドを召喚する。", "Summons an undead monster.");\r
- \r
- {\r
- if (cast)\r
- {\r
- int type;\r
- bool pet = one_in_(3);\r
- u32b flg = 0L;\r
-\r
- type = (plev > 47 ? SUMMON_HI_UNDEAD : SUMMON_UNDEAD);\r
-\r
- if (!pet || (pet && (plev > 24) && one_in_(3)))\r
- flg |= PM_ALLOW_GROUP;\r
-\r
- if (pet) flg |= PM_FORCE_PET;\r
- else flg |= (PM_ALLOW_UNIQUE | PM_NO_PET);\r
-\r
- if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, (plev * 3) / 2, type, flg))\r
- {\r
- msg_print(_("冷たい風があなたの周りに吹き始めた。それは腐敗臭を運んでいる...",\r
- "Cold winds begin to blow around you, carrying with them the stench of decay..."));\r
-\r
-\r
- if (pet)\r
- {\r
- msg_print(_("古えの死せる者共があなたに仕えるため土から甦った!",\r
- "Ancient, long-dead forms arise from the ground to serve you!"));\r
- }\r
- else\r
- {\r
- msg_print(_("死者が甦った。眠りを妨げるあなたを罰するために!",\r
- "'The dead arise... to punish you for disturbing them!'"));\r
- }\r
-\r
- chg_virtue(V_UNLIFE, 1);\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 26:\r
- if (name) return _("死者の秘伝", "Esoteria");\r
- if (desc) return _("アイテムを1つ識別する。レベルが高いとアイテムの能力を完全に知ることができる。",\r
- "Identifies an item. Or *identifies* an item at higher level.");\r
- \r
- {\r
- if (cast)\r
- {\r
- if (randint1(50) > plev)\r
- {\r
- if (!ident_spell(FALSE)) return NULL;\r
- }\r
- else\r
- {\r
- if (!identify_fully(FALSE)) return NULL;\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 27:\r
- if (name) return _("吸血鬼変化", "Polymorph Vampire");\r
- if (desc) return _("一定時間、吸血鬼に変化する。変化している間は本来の種族の能力を失い、代わりに吸血鬼としての能力を得る。", \r
- "Mimic a vampire for a while. Loses abilities of original race and gets abilities as a vampire.");\r
- \r
- {\r
- int base = 10 + plev / 2;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_mimic(base + randint1(base), MIMIC_VAMPIRE, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 28:\r
- if (name) return _("経験値復活", "Restore Life");\r
- if (desc) return _("失った経験値を回復する。", "Restore lost experience.");\r
- \r
- {\r
- if (cast)\r
- {\r
- restore_level();\r
- }\r
- }\r
- break;\r
-\r
- case 29:\r
- if (name) return _("周辺抹殺", "Mass Genocide");\r
- if (desc) return _("自分の周囲にいるモンスターを現在の階から消し去る。抵抗されると無効。", \r
- "Eliminates all nearby monsters, exhausting you. Powerful or unique monsters may be able to resist.");\r
- \r
- {\r
- int power = plev + 50;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- mass_genocide(power, TRUE);\r
- }\r
- }\r
- break;\r
-\r
- case 30:\r
- if (name) return _("地獄の劫火", "Hellfire");\r
- if (desc) return _("邪悪な力を持つ宝珠を放つ。善良なモンスターには大きなダメージを与える。", \r
- "Fires a powerful ball of evil power. Hurts good monsters greatly.");\r
- \r
- {\r
- HIT_POINT dam = 666;\r
- int rad = 3;\r
-\r
- if (info) return info_damage(0, 0, dam);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- fire_ball(GF_HELL_FIRE, dir, dam, rad);\r
- take_hit(DAMAGE_USELIFE, 20 + randint1(30), _("地獄の劫火の呪文を唱えた疲労", "the strain of casting Hellfire"), -1);\r
- }\r
- }\r
- break;\r
-\r
- case 31:\r
- if (name) return _("幽体化", "Wraithform");\r
- if (desc) return _("一定時間、壁を通り抜けることができ受けるダメージが軽減される幽体の状態に変身する。", \r
- "Becomes wraith form which gives ability to pass walls and makes all damages half.");\r
- \r
- {\r
- int base = plev / 2;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_wraith_form(randint1(base) + base, FALSE);\r
- }\r
- }\r
- break;\r
- }\r
-\r
- return "";\r
-}\r
-\r
-\r
-/*!\r
- * @brief トランプ領域魔法の各処理を行う\r
- * @param spell 魔法ID\r
- * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r
- * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。\r
- */\r
-static cptr do_trump_spell(SPELL_IDX spell, BIT_FLAGS mode)\r
-{\r
- bool name = (mode == SPELL_NAME) ? TRUE : FALSE;\r
- bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;\r
- bool info = (mode == SPELL_INFO) ? TRUE : FALSE;\r
- bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;\r
- bool fail = (mode == SPELL_FAIL) ? TRUE : FALSE;\r
- static const char s_random[] = _("ランダム", "random");\r
-\r
- int dir;\r
- int plev = p_ptr->lev;\r
-\r
- switch (spell)\r
- {\r
- case 0:\r
- if (name) return _("ショート・テレポート", "Phase Door");\r
- if (desc) return _("近距離のテレポートをする。", "Teleport short distance.");\r
- \r
- {\r
- POSITION range = 10;\r
-\r
- if (info) return info_range(range);\r
-\r
- if (cast)\r
- {\r
- teleport_player(range, 0L);\r
- }\r
- }\r
- break;\r
-\r
- case 1:\r
- if (name) return _("蜘蛛のカード", "Trump Spiders");\r
- if (desc) return _("蜘蛛を召喚する。", "Summons spiders.");\r
- \r
- {\r
- if (cast || fail)\r
- {\r
- msg_print(_("あなたは蜘蛛のカードに集中する...", "You concentrate on the trump of an spider..."));\r
- if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_SPIDER, PM_ALLOW_GROUP))\r
- {\r
- if (fail)\r
- {\r
- msg_print(_("召喚された蜘蛛は怒っている!", "The summoned spiders get angry!"));\r
- }\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 2:\r
- if (name) return _("シャッフル", "Shuffle");\r
- if (desc) return _("カードの占いをする。", "Causes random effects.");\r
- \r
- {\r
- if (info) return s_random;\r
-\r
- if (cast)\r
- {\r
- cast_shuffle();\r
- }\r
- }\r
- break;\r
-\r
- case 3:\r
- if (name) return _("フロア・リセット", "Reset Recall");\r
- if (desc) return _("最深階を変更する。", "Resets the 'deepest' level for recall spell.");\r
- \r
- {\r
- if (cast)\r
- {\r
- if (!reset_recall()) return NULL;\r
- }\r
- }\r
- break;\r
-\r
- case 4:\r
- if (name) return _("テレポート", "Teleport");\r
- if (desc) return _("遠距離のテレポートをする。", "Teleport long distance.");\r
- \r
- {\r
- POSITION range = plev * 4;\r
-\r
- if (info) return info_range(range);\r
-\r
- if (cast)\r
- {\r
- teleport_player(range, 0L);\r
- }\r
- }\r
- break;\r
-\r
- case 5:\r
- if (name) return _("感知のカード", "Trump Spying");\r
- if (desc) return _("一定時間、テレパシー能力を得る。", "Gives telepathy for a while.");\r
- \r
- {\r
- int base = 25;\r
- int sides = 30;\r
-\r
- if (info) return info_duration(base, sides);\r
-\r
- if (cast)\r
- {\r
- set_tim_esp(randint1(sides) + base, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 6:\r
- if (name) return _("テレポート・モンスター", "Teleport Away");\r
- if (desc) return _("モンスターをテレポートさせるビームを放つ。抵抗されると無効。", "Teleports all monsters on the line away unless resisted.");\r
- \r
- {\r
- int power = plev;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- fire_beam(GF_AWAY_ALL, dir, power);\r
- }\r
- }\r
- break;\r
-\r
- case 7:\r
- if (name) return _("動物のカード", "Trump Animals");\r
- if (desc) return _("1体の動物を召喚する。", "Summons an animal.");\r
- \r
- {\r
- if (cast || fail)\r
- {\r
- int type = (!fail ? SUMMON_ANIMAL_RANGER : SUMMON_ANIMAL);\r
- msg_print(_("あなたは動物のカードに集中する...", "You concentrate on the trump of an animal..."));\r
- if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, type, 0L))\r
- {\r
- if (fail)\r
- {\r
- msg_print(_("召喚された動物は怒っている!", "The summoned animal gets angry!"));\r
- }\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 8:\r
- if (name) return _("移動のカード", "Trump Reach");\r
- if (desc) return _("アイテムを自分の足元へ移動させる。", "Pulls a distant item close to you.");\r
- \r
- {\r
- int weight = plev * 15;\r
-\r
- if (info) return info_weight(weight);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- fetch(dir, weight, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 9:\r
- if (name) return _("カミカゼのカード", "Trump Kamikaze");\r
- if (desc) return _("複数の爆発するモンスターを召喚する。", "Summons monsters which explode by itself.");\r
- \r
- {\r
- if (cast || fail)\r
- {\r
- int x, y;\r
- int type;\r
-\r
- if (cast)\r
- {\r
- if (!target_set(TARGET_KILL)) return NULL;\r
- x = target_col;\r
- y = target_row;\r
- }\r
- else\r
- {\r
- /* Summons near player when failed */\r
- x = p_ptr->x;\r
- y = p_ptr->y;\r
- }\r
-\r
- if (p_ptr->pclass == CLASS_BEASTMASTER)\r
- type = SUMMON_KAMIKAZE_LIVING;\r
- else\r
- type = SUMMON_KAMIKAZE;\r
-\r
- msg_print(_("あなたはカミカゼのカードに集中する...", "You concentrate on several trumps at once..."));\r
- if (trump_summoning(2 + randint0(plev / 7), !fail, y, x, 0, type, 0L))\r
- {\r
- if (fail)\r
- {\r
- msg_print(_("召喚されたモンスターは怒っている!", "The summoned creatures get angry!"));\r
- }\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 10:\r
- if (name) return _("幻霊召喚", "Phantasmal Servant");\r
- if (desc) return _("1体の幽霊を召喚する。", "Summons a ghost.");\r
- \r
- {\r
- /* Phantasmal Servant is not summoned as enemy when failed */\r
- if (cast)\r
- {\r
- int summon_lev = plev * 2 / 3 + randint1(plev / 2);\r
-\r
- if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, (summon_lev * 3 / 2), SUMMON_PHANTOM, 0L))\r
- {\r
- msg_print(_("御用でございますか、御主人様?", "'Your wish, master?'"));\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 11:\r
- if (name) return _("スピード・モンスター", "Haste Monster");\r
- if (desc) return _("モンスター1体を加速させる。", "Hastes a monster.");\r
- \r
- {\r
- if (cast)\r
- {\r
- bool result;\r
-\r
- /* Temporary enable target_pet option */\r
- bool old_target_pet = target_pet;\r
- target_pet = TRUE;\r
-\r
- result = get_aim_dir(&dir);\r
-\r
- /* Restore target_pet option */\r
- target_pet = old_target_pet;\r
-\r
- if (!result) return NULL;\r
-\r
- speed_monster(dir, plev);\r
- }\r
- }\r
- break;\r
-\r
- case 12:\r
- if (name) return _("テレポート・レベル", "Teleport Level");\r
- if (desc) return _("瞬時に上か下の階にテレポートする。", "Teleport to up or down stairs in a moment.");\r
- \r
- {\r
- if (cast)\r
- {\r
- if (!get_check(_("本当に他の階にテレポートしますか?", "Are you sure? (Teleport Level)"))) return NULL;\r
- teleport_level(0);\r
- }\r
- }\r
- break;\r
-\r
- case 13:\r
- if (name) return _("次元の扉", "Dimension Door");\r
- if (desc) return _("短距離内の指定した場所にテレポートする。", "Teleport to given location.");\r
- \r
- {\r
- POSITION range = plev / 2 + 10;\r
-\r
- if (info) return info_range(range);\r
-\r
- if (cast)\r
- {\r
- msg_print(_("次元の扉が開いた。目的地を選んで下さい。", "You open a dimensional gate. Choose a destination."));\r
- if (!dimension_door()) return NULL;\r
- }\r
- }\r
- break;\r
-\r
- case 14:\r
- if (name) return _("帰還の呪文", "Word of Recall");\r
- if (desc) return _("地上にいるときはダンジョンの最深階へ、ダンジョンにいるときは地上へと移動する。",\r
- "Recalls player from dungeon to town, or from town to the deepest level of dungeon.");\r
- \r
- {\r
- int base = 15;\r
- int sides = 20;\r
-\r
- if (info) return info_delay(base, sides);\r
-\r
- if (cast)\r
- {\r
- if (!word_of_recall()) return NULL;\r
- }\r
- }\r
- break;\r
-\r
- case 15:\r
- if (name) return _("怪物追放", "Banish");\r
- if (desc) return _("視界内の全てのモンスターをテレポートさせる。抵抗されると無効。", "Teleports all monsters in sight away unless resisted.");\r
- \r
- {\r
- int power = plev * 4;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- banish_monsters(power);\r
- }\r
- }\r
- break;\r
-\r
- case 16:\r
- if (name) return _("位置交換のカード", "Swap Position");\r
- if (desc) return _("1体のモンスターと位置を交換する。", "Swap positions of you and a monster.");\r
- \r
- {\r
- if (cast)\r
- {\r
- bool result;\r
-\r
- /* HACK -- No range limit */\r
- project_length = -1;\r
-\r
- result = get_aim_dir(&dir);\r
-\r
- /* Restore range to default */\r
- project_length = 0;\r
-\r
- if (!result) return NULL;\r
-\r
- teleport_swap(dir);\r
- }\r
- }\r
- break;\r
-\r
- case 17:\r
- if (name) return _("アンデッドのカード", "Trump Undead");\r
- if (desc) return _("1体のアンデッドを召喚する。", "Summons an undead monster.");\r
- \r
- {\r
- if (cast || fail)\r
- {\r
- msg_print(_("あなたはアンデッドのカードに集中する...", "You concentrate on the trump of an undead creature..."));\r
- if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_UNDEAD, 0L))\r
- {\r
- if (fail)\r
- {\r
- msg_print(_("召喚されたアンデッドは怒っている!", "The summoned undead creature gets angry!"));\r
- }\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 18:\r
- if (name) return _("爬虫類のカード", "Trump Reptiles");\r
- if (desc) return _("1体のヒドラを召喚する。", "Summons a hydra.");\r
- \r
- {\r
- if (cast || fail)\r
- {\r
- msg_print(_("あなたは爬虫類のカードに集中する...", "You concentrate on the trump of a reptile..."));\r
- if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_HYDRA, 0L))\r
- {\r
- if (fail)\r
- {\r
- msg_print(_("召喚された爬虫類は怒っている!", "The summoned reptile gets angry!"));\r
- }\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 19:\r
- if (name) return _("モンスターのカード", "Trump Monsters");\r
- if (desc) return _("複数のモンスターを召喚する。", "Summons some monsters.");\r
- \r
- {\r
- if (cast || fail)\r
- {\r
- int type;\r
- msg_print(_("あなたはモンスターのカードに集中する...", "You concentrate on several trumps at once..."));\r
- if (p_ptr->pclass == CLASS_BEASTMASTER)\r
- type = SUMMON_LIVING;\r
- else\r
- type = 0;\r
-\r
- if (trump_summoning((1 + (plev - 15)/ 10), !fail, p_ptr->y, p_ptr->x, 0, type, 0L))\r
- {\r
- if (fail)\r
- {\r
- msg_print(_("召喚されたモンスターは怒っている!", "The summoned creatures get angry!"));\r
- }\r
- }\r
-\r
- }\r
- }\r
- break;\r
-\r
- case 20:\r
- if (name) return _("ハウンドのカード", "Trump Hounds");\r
- if (desc) return _("1グループのハウンドを召喚する。", "Summons a group of hounds.");\r
- \r
- {\r
- if (cast || fail)\r
- {\r
- msg_print(_("あなたはハウンドのカードに集中する...", "You concentrate on the trump of a hound..."));\r
- if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_HOUND, PM_ALLOW_GROUP))\r
- {\r
- if (fail)\r
- {\r
- msg_print(_("召喚されたハウンドは怒っている!", "The summoned hounds get angry!"));\r
- }\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 21:\r
- if (name) return _("トランプの刃", "Trump Branding");\r
- if (desc) return _("武器にトランプの属性をつける。", "Makes current weapon a Trump weapon.");\r
- \r
- {\r
- if (cast)\r
- {\r
- brand_weapon(5);\r
- }\r
- }\r
- break;\r
-\r
- case 22:\r
- if (name) return _("人間トランプ", "Living Trump");\r
- if (desc) return _("ランダムにテレポートする突然変異か、自分の意思でテレポートする突然変異が身につく。", \r
- "Gives mutation which makes you teleport randomly or makes you able to teleport at will.");\r
- \r
- {\r
- if (cast)\r
- {\r
- int mutation;\r
-\r
- if (one_in_(7))\r
- /* Teleport control */\r
- mutation = 12;\r
- else\r
- /* Random teleportation (uncontrolled) */\r
- mutation = 77;\r
-\r
- /* Gain the mutation */\r
- if (gain_random_mutation(mutation))\r
- {\r
- msg_print(_("あなたは生きているカードに変わった。", "You have turned into a Living Trump."));\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 23:\r
- if (name) return _("サイバーデーモンのカード", "Trump Cyberdemon");\r
- if (desc) return _("1体のサイバーデーモンを召喚する。", "Summons a cyber demon.");\r
- \r
- {\r
- if (cast || fail)\r
- {\r
- msg_print(_("あなたはサイバーデーモンのカードに集中する...", "You concentrate on the trump of a Cyberdemon..."));\r
- if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_CYBER, 0L))\r
- {\r
- if (fail)\r
- {\r
- msg_print(_("召喚されたサイバーデーモンは怒っている!", "The summoned Cyberdemon gets angry!"));\r
- }\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 24:\r
- if (name) return _("予見のカード", "Trump Divination");\r
- if (desc) return _("近くの全てのモンスター、罠、扉、階段、財宝、そしてアイテムを感知する。",\r
- "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.");\r
- \r
- {\r
- int rad = DETECT_RAD_DEFAULT;\r
-\r
- if (info) return info_radius(rad);\r
-\r
- if (cast)\r
- {\r
- detect_all(rad);\r
- }\r
- }\r
- break;\r
-\r
- case 25:\r
- if (name) return _("知識のカード", "Trump Lore");\r
- if (desc) return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item.");\r
- \r
- {\r
- if (cast)\r
- {\r
- if (!identify_fully(FALSE)) return NULL;\r
- }\r
- }\r
- break;\r
-\r
- case 26:\r
- if (name) return _("回復モンスター", "Heal Monster");\r
- if (desc) return _("モンスター1体の体力を回復させる。", "Heal a monster.");\r
- \r
- {\r
- int heal = plev * 10 + 200;\r
-\r
- if (info) return info_heal(0, 0, heal);\r
-\r
- if (cast)\r
- {\r
- bool result;\r
-\r
- /* Temporary enable target_pet option */\r
- bool old_target_pet = target_pet;\r
- target_pet = TRUE;\r
-\r
- result = get_aim_dir(&dir);\r
-\r
- /* Restore target_pet option */\r
- target_pet = old_target_pet;\r
-\r
- if (!result) return NULL;\r
-\r
- heal_monster(dir, heal);\r
- }\r
- }\r
- break;\r
-\r
- case 27:\r
- if (name) return _("ドラゴンのカード", "Trump Dragon");\r
- if (desc) return _("1体のドラゴンを召喚する。", "Summons a dragon.");\r
- \r
- {\r
- if (cast || fail)\r
- {\r
- msg_print(_("あなたはドラゴンのカードに集中する...", "You concentrate on the trump of a dragon..."));\r
- if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_DRAGON, 0L))\r
- {\r
- if (fail)\r
- {\r
- msg_print(_("召喚されたドラゴンは怒っている!", "The summoned dragon gets angry!"));\r
- }\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 28:\r
- if (name) return _("隕石のカード", "Trump Meteor");\r
- if (desc) return _("自分の周辺に隕石を落とす。", "Makes meteor balls fall down to nearby random locations.");\r
- \r
- {\r
- HIT_POINT dam = plev * 2;\r
- int rad = 2;\r
-\r
- if (info) return info_multi_damage(dam);\r
-\r
- if (cast)\r
- {\r
- cast_meteor(dam, rad);\r
- }\r
- }\r
- break;\r
-\r
- case 29:\r
- if (name) return _("デーモンのカード", "Trump Demon");\r
- if (desc) return _("1体の悪魔を召喚する。", "Summons a demon.");\r
- \r
- {\r
- if (cast || fail)\r
- {\r
- msg_print(_("あなたはデーモンのカードに集中する...", "You concentrate on the trump of a demon..."));\r
- if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_DEMON, 0L))\r
- {\r
- if (fail)\r
- {\r
- msg_print(_("召喚されたデーモンは怒っている!", "The summoned demon gets angry!"));\r
- }\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 30:\r
- if (name) return _("地獄のカード", "Trump Greater Undead");\r
- if (desc) return _("1体の上級アンデッドを召喚する。", "Summons a greater undead.");\r
- \r
- {\r
- if (cast || fail)\r
- {\r
- msg_print(_("あなたは強力なアンデッドのカードに集中する...", "You concentrate on the trump of a greater undead being..."));\r
- /* May allow unique depend on level and dice roll */\r
- if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_HI_UNDEAD, PM_ALLOW_UNIQUE))\r
- {\r
- if (fail)\r
- {\r
- msg_print(_("召喚された上級アンデッドは怒っている!", "The summoned greater undead creature gets angry!"));\r
- }\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 31:\r
- if (name) return _("古代ドラゴンのカード", "Trump Ancient Dragon");\r
- if (desc) return _("1体の古代ドラゴンを召喚する。", "Summons an ancient dragon.");\r
- \r
- {\r
- if (cast)\r
- {\r
- int type;\r
-\r
- if (p_ptr->pclass == CLASS_BEASTMASTER)\r
- type = SUMMON_HI_DRAGON_LIVING;\r
- else\r
- type = SUMMON_HI_DRAGON;\r
-\r
- msg_print(_("あなたは古代ドラゴンのカードに集中する...", "You concentrate on the trump of an ancient dragon..."));\r
- /* May allow unique depend on level and dice roll */\r
- if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, type, PM_ALLOW_UNIQUE))\r
- {\r
- if (fail)\r
- {\r
- msg_print(_("召喚された古代ドラゴンは怒っている!", "The summoned ancient dragon gets angry!"));\r
- }\r
- }\r
- }\r
- }\r
- break;\r
- }\r
-\r
- return "";\r
-}\r
-\r
-\r
-/*!\r
- * @brief 匠領域魔法の各処理を行う\r
- * @param spell 魔法ID\r
- * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r
- * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。\r
- */\r
-static cptr do_craft_spell(SPELL_IDX spell, BIT_FLAGS mode)\r
-{\r
- bool name = (mode == SPELL_NAME) ? TRUE : FALSE;\r
- bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;\r
- bool info = (mode == SPELL_INFO) ? TRUE : FALSE;\r
- bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;\r
-\r
- int plev = p_ptr->lev;\r
-\r
- switch (spell)\r
- {\r
- case 0:\r
- if (name) return _("赤外線視力", "Infravision");\r
- if (desc) return _("一定時間、赤外線視力が増強される。", "Gives infravision for a while.");\r
- \r
- {\r
- int base = 100;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_tim_infra(base + randint1(base), FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 1:\r
- if (name) return _("回復力強化", "Regeneration");\r
- if (desc) return _("一定時間、回復力が増強される。", "Gives regeneration ability for a while.");\r
- \r
- {\r
- int base = 80;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_tim_regen(base + randint1(base), FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 2:\r
- if (name) return _("空腹充足", "Satisfy Hunger");\r
- if (desc) return _("満腹になる。", "Satisfies hunger.");\r
- \r
- {\r
- if (cast)\r
- {\r
- set_food(PY_FOOD_MAX - 1);\r
- }\r
- }\r
- break;\r
-\r
- case 3:\r
- if (name) return _("耐冷気", "Resist Cold");\r
- if (desc) return _("一定時間、冷気への耐性を得る。装備による耐性に累積する。", \r
- "Gives resistance to cold. This resistance can be added to which from equipment for more powerful resistance.");\r
- \r
- {\r
- int base = 20;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_oppose_cold(randint1(base) + base, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 4:\r
- if (name) return _("耐火炎", "Resist Fire");\r
- if (desc) return _("一定時間、炎への耐性を得る。装備による耐性に累積する。", \r
- "Gives resistance to fire. This resistance can be added to which from equipment for more powerful resistance.");\r
- \r
- {\r
- int base = 20;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_oppose_fire(randint1(base) + base, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 5:\r
- if (name) return _("士気高揚", "Heroism");\r
- if (desc) return _("一定時間、ヒーロー気分になる。", "Removes fear, and gives bonus to hit and 10 more HP for a while.");\r
- \r
- {\r
- int base = 25;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_hero(randint1(base) + base, FALSE);\r
- hp_player(10);\r
- set_afraid(0);\r
- }\r
- }\r
- break;\r
-\r
- case 6:\r
- if (name) return _("耐電撃", "Resist Lightning");\r
- if (desc) return _("一定時間、電撃への耐性を得る。装備による耐性に累積する。",\r
- "Gives resistance to electricity. This resistance can be added to which from equipment for more powerful resistance.");\r
- \r
- {\r
- int base = 20;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_oppose_elec(randint1(base) + base, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 7:\r
- if (name) return _("耐酸", "Resist Acid");\r
- if (desc) return _("一定時間、酸への耐性を得る。装備による耐性に累積する。",\r
- "Gives resistance to acid. This resistance can be added to which from equipment for more powerful resistance.");\r
- \r
- {\r
- int base = 20;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_oppose_acid(randint1(base) + base, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 8:\r
- if (name) return _("透明視認", "See Invisibility");\r
- if (desc) return _("一定時間、透明なものが見えるようになる。", "Gives see invisible for a while.");\r
- \r
- {\r
- int base = 24;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_tim_invis(randint1(base) + base, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 9:\r
- if (name) return _("解呪", "Remove Curse");\r
- if (desc) return _("アイテムにかかった弱い呪いを解除する。", "Removes normal curses from equipped items.");\r
- \r
- {\r
- if (cast)\r
- {\r
- if (remove_curse())\r
- {\r
- msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 10:\r
- if (name) return _("耐毒", "Resist Poison");\r
- if (desc) return _("一定時間、毒への耐性を得る。装備による耐性に累積する。",\r
- "Gives resistance to poison. This resistance can be added to which from equipment for more powerful resistance.");\r
- \r
- {\r
- int base = 20;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_oppose_pois(randint1(base) + base, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 11:\r
- if (name) return _("狂戦士化", "Berserk");\r
- if (desc) return _("狂戦士化し、恐怖を除去する。", "Gives bonus to hit and HP, immunity to fear for a while. But decreases AC.");\r
- \r
- {\r
- int base = 25;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_shero(randint1(base) + base, FALSE);\r
- hp_player(30);\r
- set_afraid(0);\r
- }\r
- }\r
- break;\r
-\r
- case 12:\r
- if (name) return _("自己分析", "Self Knowledge");\r
- if (desc) return _("現在の自分の状態を完全に知る。",\r
- "Gives you useful info regarding your current resistances, the powers of your weapon and maximum limits of your stats.");\r
- \r
- {\r
- if (cast)\r
- {\r
- self_knowledge();\r
- }\r
- }\r
- break;\r
-\r
- case 13:\r
- if (name) return _("対邪悪結界", "Protection from Evil");\r
- if (desc) return _("邪悪なモンスターの攻撃を防ぐバリアを張る。", "Gives aura which protect you from evil monster's physical attack.");\r
- \r
- {\r
- int base = 3 * plev;\r
- int sides = 25;\r
-\r
- if (info) return info_duration(base, sides);\r
-\r
- if (cast)\r
- {\r
- set_protevil(randint1(sides) + base, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 14:\r
- if (name) return _("癒し", "Cure");\r
- if (desc) return _("毒、朦朧状態、負傷を全快させ、幻覚を直す。", "Heals poison, stun, cut and hallucination completely.");\r
- \r
- {\r
- if (cast)\r
- {\r
- set_poisoned(0);\r
- set_stun(0);\r
- set_cut(0);\r
- set_image(0);\r
- }\r
- }\r
- break;\r
-\r
- case 15:\r
- if (name) return _("魔法剣", "Mana Branding");\r
- if (desc) return _("一定時間、武器に冷気、炎、電撃、酸、毒のいずれかの属性をつける。武器を持たないと使えない。",\r
- "Makes current weapon some elemental branded. You must wield weapons.");\r
- \r
- {\r
- int base = plev / 2;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- if (!choose_ele_attack()) return NULL;\r
- }\r
- }\r
- break;\r
-\r
- case 16:\r
- if (name) return _("テレパシー", "Telepathy");\r
- if (desc) return _("一定時間、テレパシー能力を得る。", "Gives telepathy for a while.");\r
- \r
- {\r
- int base = 25;\r
- int sides = 30;\r
-\r
- if (info) return info_duration(base, sides);\r
-\r
- if (cast)\r
- {\r
- set_tim_esp(randint1(sides) + base, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 17:\r
- if (name) return _("肌石化", "Stone Skin");\r
- if (desc) return _("一定時間、ACを上昇させる。", "Gives bonus to AC for a while.");\r
- \r
- {\r
- int base = 30;\r
- int sides = 20;\r
-\r
- if (info) return info_duration(base, sides);\r
-\r
- if (cast)\r
- {\r
- set_shield(randint1(sides) + base, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 18:\r
- if (name) return _("全耐性", "Resistance");\r
- if (desc) return _("一定時間、酸、電撃、炎、冷気、毒に対する耐性を得る。装備による耐性に累積する。", \r
- "Gives resistance to fire, cold, electricity, acid and poison for a while. These resistances can be added to which from equipment for more powerful resistances.");\r
- \r
- {\r
- int base = 20;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_oppose_acid(randint1(base) + base, FALSE);\r
- set_oppose_elec(randint1(base) + base, FALSE);\r
- set_oppose_fire(randint1(base) + base, FALSE);\r
- set_oppose_cold(randint1(base) + base, FALSE);\r
- set_oppose_pois(randint1(base) + base, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 19:\r
- if (name) return _("スピード", "Haste Self");\r
- if (desc) return _("一定時間、加速する。", "Hastes you for a while.");\r
- \r
- {\r
- int base = plev;\r
- int sides = 20 + plev;\r
-\r
- if (info) return info_duration(base, sides);\r
-\r
- if (cast)\r
- {\r
- set_fast(randint1(sides) + base, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 20:\r
- if (name) return _("壁抜け", "Walk through Wall");\r
- if (desc) return _("一定時間、半物質化し壁を通り抜けられるようになる。", "Gives ability to pass walls for a while.");\r
- \r
- {\r
- int base = plev / 2;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_kabenuke(randint1(base) + base, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 21:\r
- if (name) return _("盾磨き", "Polish Shield");\r
- if (desc) return _("盾に反射の属性をつける。", "Makes a shield a shield of reflection.");\r
- \r
- {\r
- if (cast)\r
- {\r
- pulish_shield();\r
- }\r
- }\r
- break;\r
-\r
- case 22:\r
- if (name) return _("ゴーレム製造", "Create Golem");\r
- if (desc) return _("1体のゴーレムを製造する。", "Creates a golem.");\r
- \r
- {\r
- if (cast)\r
- {\r
- if (summon_specific(-1, p_ptr->y, p_ptr->x, plev, SUMMON_GOLEM, PM_FORCE_PET))\r
- {\r
- msg_print(_("ゴーレムを作った。", "You make a golem."));\r
- }\r
- else\r
- {\r
- msg_print(_("うまくゴーレムを作れなかった。", "No Golems arrive."));\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 23:\r
- if (name) return _("魔法の鎧", "Magical armor");\r
- if (desc) return _("一定時間、魔法防御力とACが上がり、混乱と盲目の耐性、反射能力、麻痺知らず、浮遊を得る。",\r
- "Gives resistance to magic, bonus to AC, resistance to confusion, blindness, reflection, free action and levitation for a while.");\r
- \r
- {\r
- int base = 20;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_magicdef(randint1(base) + base, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 24:\r
- if (name) return _("装備無力化", "Remove Enchantment");\r
- if (desc) return _("武器・防具にかけられたあらゆる魔力を完全に解除する。", "Removes all magics completely from any weapon or armor.");\r
- \r
- {\r
- if (cast)\r
- {\r
- if (!mundane_spell(TRUE)) return NULL;\r
- }\r
- }\r
- break;\r
-\r
- case 25:\r
- if (name) return _("呪い粉砕", "Remove All Curse");\r
- if (desc) return _("アイテムにかかった強力な呪いを解除する。", "Removes normal and heavy curse from equipped items.");\r
- \r
- {\r
- if (cast)\r
- {\r
- if (remove_all_curse())\r
- {\r
- msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 26:\r
- if (name) return _("完全なる知識", "Knowledge True");\r
- if (desc) return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item.");\r
- \r
- {\r
- if (cast)\r
- {\r
- if (!identify_fully(FALSE)) return NULL;\r
- }\r
- }\r
- break;\r
-\r
- case 27:\r
- if (name) return _("武器強化", "Enchant Weapon");\r
- if (desc) return _("武器の命中率修正とダメージ修正を強化する。", "Attempts to increase +to-hit, +to-dam of a weapon.");\r
- \r
- {\r
- if (cast)\r
- {\r
- if (!enchant_spell(randint0(4) + 1, randint0(4) + 1, 0)) return NULL;\r
- }\r
- }\r
- break;\r
-\r
- case 28:\r
- if (name) return _("防具強化", "Enchant Armor");\r
- if (desc) return _("鎧の防御修正を強化する。", "Attempts to increase +AC of an armor.");\r
- \r
- {\r
- if (cast)\r
- {\r
- if (!enchant_spell(0, 0, randint0(3) + 2)) return NULL;\r
- }\r
- }\r
- break;\r
-\r
- case 29:\r
- if (name) return _("武器属性付与", "Brand Weapon");\r
- if (desc) return _("武器にランダムに属性をつける。", "Makes current weapon a random ego weapon.");\r
- \r
- {\r
- if (cast)\r
- {\r
- brand_weapon(randint0(18));\r
- }\r
- }\r
- break;\r
-\r
- case 30:\r
- if (name) return _("人間トランプ", "Living Trump");\r
- if (desc) return _("ランダムにテレポートする突然変異か、自分の意思でテレポートする突然変異が身につく。",\r
- "Gives mutation which makes you teleport randomly or makes you able to teleport at will.");\r
- \r
- {\r
- if (cast)\r
- {\r
- int mutation;\r
-\r
- if (one_in_(7))\r
- /* Teleport control */\r
- mutation = 12;\r
- else\r
- /* Random teleportation (uncontrolled) */\r
- mutation = 77;\r
-\r
- /* Gain the mutation */\r
- if (gain_random_mutation(mutation))\r
- {\r
- msg_print(_("あなたは生きているカードに変わった。", "You have turned into a Living Trump."));\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 31:\r
- if (name) return _("属性への免疫", "Immunity");\r
- if (desc) return _("一定時間、冷気、炎、電撃、酸のいずれかに対する免疫を得る。",\r
- "Gives an immunity to fire, cold, electricity or acid for a while.");\r
- \r
- {\r
- int base = 13;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- if (!choose_ele_immune(base + randint1(base))) return NULL;\r
- }\r
- }\r
- break;\r
- }\r
-\r
- return "";\r
-}\r
-\r
-/*!\r
* @brief 悪魔領域魔法の各処理を行う\r
* @param spell 魔法ID\r
* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r