OSDN Git Service

[Refactor] #37353 生命領域処理を cmd-spell.c から realm-life.c/h へ分離。
authorDeskull <deskull@users.sourceforge.jp>
Wed, 12 Sep 2018 14:54:07 +0000 (23:54 +0900)
committerDeskull <deskull@users.sourceforge.jp>
Wed, 12 Sep 2018 14:54:07 +0000 (23:54 +0900)
Separate life realm process from cmd-spell.c to realm-life.c/h.

Hengband_vcs2015/Hengband/Hengband.vcxproj
Hengband_vcs2015/Hengband/Hengband.vcxproj.filters
src/cmd-spell.c
src/realm-life.c [new file with mode: 0644]
src/realm-life.h [new file with mode: 0644]

index 854447d..f5ec8e3 100644 (file)
     <ClCompile Include="..\..\src\realm-arcane.c" />\r
     <ClCompile Include="..\..\src\realm-chaos.c" />\r
     <ClCompile Include="..\..\src\realm-hex.c" />\r
+    <ClCompile Include="..\..\src\realm-life.c" />\r
     <ClCompile Include="..\..\src\report.c" />\r
     <ClCompile Include="..\..\src\rooms-normal.c" />\r
     <ClCompile Include="..\..\src\rooms-pitnest.c" />\r
     <ClInclude Include="..\..\src\readdib.h" />\r
     <ClInclude Include="..\..\src\realm-arcane.h" />\r
     <ClInclude Include="..\..\src\realm-chaos.h" />\r
+    <ClInclude Include="..\..\src\realm-life.h" />\r
     <ClInclude Include="..\..\src\rooms-normal.h" />\r
     <ClInclude Include="..\..\src\rooms-pitnest.h" />\r
     <ClInclude Include="..\..\src\rooms-vault.h" />\r
index 04bc8b7..4b16375 100644 (file)
     <ClCompile Include="..\..\src\realm-chaos.c">\r
       <Filter>Source</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\src\realm-life.c">\r
+      <Filter>Source</Filter>\r
+    </ClCompile>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="..\..\src\angband.h">\r
     <ClInclude Include="..\..\src\realm-chaos.h">\r
       <Filter>Header</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\src\realm-life.h">\r
+      <Filter>Header</Filter>\r
+    </ClInclude>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ResourceCompile Include="..\..\src\angband.rc" />\r
index 938609b..fa4f256 100644 (file)
@@ -12,6 +12,7 @@
 #include "spells-summon.h"\r
 #include "realm-arcane.h"\r
 #include "realm-chaos.h"\r
+#include "realm-life.h"\r
 \r
 /*!\r
  * @brief\r
@@ -231,532 +232,6 @@ void stop_singing(void)
 }\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
diff --git a/src/realm-life.c b/src/realm-life.c
new file mode 100644 (file)
index 0000000..ca6358f
--- /dev/null
@@ -0,0 +1,529 @@
+#include "angband.h"\r
+#include "cmd-spell.h"\r
+\r
+/*!\r
+* @brief \90\96½\97Ì\88æ\96\82\96@\82Ì\8ae\8f\88\97\9d\82ð\8ds\82¤\r
+* @param spell \96\82\96@ID\r
+* @param mode \8f\88\97\9d\93à\97e (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r
+* @return SPELL_NAME / SPELL_DESC / SPELL_INFO \8e\9e\82É\82Í\95\8e\9a\97ñ\83|\83C\83\93\83^\82ð\95Ô\82·\81BSPELL_CAST\8e\9e\82ÍNULL\95\8e\9a\97ñ\82ð\95Ô\82·\81B\r
+*/\r
+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 _("\8cy\8f\9d\82Ì\8e¡\96ü", "Cure Light Wounds");\r
+               if (desc) return _("\89ö\89ä\82Æ\91Ì\97Í\82ð\8f­\82µ\89ñ\95\9c\82³\82¹\82é\81B", "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 _("\8fj\95\9f", "Bless");\r
+               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\96½\92\86\97¦\82ÆAC\82É\83{\81[\83i\83X\82ð\93¾\82é\81B", "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 _("\8cy\8f\9d", "Cause Light Wounds");\r
+               if (desc) return _("1\91Ì\82Ì\83\82\83\93\83X\83^\81[\82É\8f¬\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "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 _("\8cõ\82Ì\8f¢\8a«", "Call Light");\r
+               if (desc) return _("\8cõ\8c¹\82ª\8fÆ\82ç\82µ\82Ä\82¢\82é\94Í\88Í\82©\95\94\89®\91S\91Ì\82ð\89i\8bv\82É\96¾\82é\82­\82·\82é\81B", "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 _("ã© & \89B\82µ\94à\8a´\92m", "Detect Doors & Traps");\r
+               if (desc) return _("\8bß\82­\82Ì\91S\82Ä\82Ìã©\82Æ\94à\82Æ\8aK\92i\82ð\8a´\92m\82·\82é\81B", "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 _("\8fd\8f\9d\82Ì\8e¡\96ü", "Cure Medium Wounds");\r
+               if (desc) return _("\89ö\89ä\82Æ\91Ì\97Í\82ð\92\86\92ö\93x\89ñ\95\9c\82³\82¹\82é\81B", "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 _("\89ð\93Å", "Cure Poison");\r
+               if (desc) return _("\91Ì\93à\82Ì\93Å\82ð\8eæ\82è\8f\9c\82­\81B", "Cure poison status.");\r
+               {\r
+                       if (cast)\r
+                       {\r
+                               set_poisoned(0);\r
+                       }\r
+               }\r
+               break;\r
+\r
+       case 7:\r
+               if (name) return _("\8bó\95 \8f[\91«", "Satisfy Hunger");\r
+               if (desc) return _("\96\9e\95 \82É\82·\82é\81B", "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 _("\89ð\8eô", "Remove Curse");\r
+               if (desc) return _("\83A\83C\83e\83\80\82É\82©\82©\82Á\82½\8eã\82¢\8eô\82¢\82ð\89ð\8f\9c\82·\82é\81B", "Removes normal curses from equipped items.");\r
+               {\r
+                       if (cast)\r
+                       {\r
+                               if (remove_curse())\r
+                               {\r
+                                       msg_print(_("\92N\82©\82É\8c©\8eç\82ç\82ê\82Ä\82¢\82é\82æ\82¤\82È\8bC\82ª\82·\82é\81B", "You feel as if someone is watching over you."));\r
+                               }\r
+                       }\r
+               }\r
+               break;\r
+\r
+       case 9:\r
+               if (name) return _("\8fd\8f\9d", "Cause Medium Wounds");\r
+               if (desc) return _("1\91Ì\82Ì\83\82\83\93\83X\83^\81[\82É\92\86\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "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 _("\92v\96½\8f\9d\82Ì\8e¡\96ü", "Cure Critical Wounds");\r
+               if (desc) return _("\91Ì\97Í\82ð\91å\95\9d\82É\89ñ\95\9c\82³\82¹\81A\95\89\8f\9d\82Æ\9eN\9eO\8fó\91Ô\82à\91S\89õ\82·\82é\81B", "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 _("\91Ï\94M\91Ï\8a¦", "Resist Heat and Cold");\r
+               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\89Î\89\8a\82Æ\97â\8bC\82É\91Î\82·\82é\91Ï\90«\82ð\93¾\82é\81B\91\95\94õ\82É\82æ\82é\91Ï\90«\82É\97Ý\90Ï\82·\82é\81B",\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 _("\8eü\95Ó\8a´\92m", "Sense Surroundings");\r
+               if (desc) return _("\8eü\95Ó\82Ì\92n\8c`\82ð\8a´\92m\82·\82é\81B", "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 _("\83p\83j\83b\83N\81E\83A\83\93\83f\83b\83h", "Turn Undead");\r
+               if (desc) return _("\8e\8b\8aE\93à\82Ì\83A\83\93\83f\83b\83h\82ð\8b°\95|\82³\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "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 _("\91Ì\97Í\89ñ\95\9c", "Healing");\r
+               if (desc) return _("\8bÉ\82ß\82Ä\8b­\97Í\82È\89ñ\95\9c\8eô\95\82Å\81A\95\89\8f\9d\82Æ\9eN\9eO\8fó\91Ô\82à\91S\89õ\82·\82é\81B", "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 _("\8c\8b\8aE\82Ì\96ä\8fÍ", "Glyph of Warding");\r
+               if (desc) return _("\8e©\95ª\82Ì\82¢\82é\8f°\82Ì\8fã\82É\81A\83\82\83\93\83X\83^\81[\82ª\92Ê\82è\94²\82¯\82½\82è\8f¢\8a«\82³\82ê\82½\82è\82·\82é\82±\82Æ\82ª\82Å\82«\82È\82­\82È\82é\83\8b\81[\83\93\82ð\95`\82­\81B",\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 _("*\89ð\8eô*", "Dispel Curse");\r
+               if (desc) return _("\83A\83C\83e\83\80\82É\82©\82©\82Á\82½\8b­\97Í\82È\8eô\82¢\82ð\89ð\8f\9c\82·\82é\81B", "Removes normal and heavy curse from equipped items.");\r
+\r
+               {\r
+                       if (cast)\r
+                       {\r
+                               if (remove_all_curse())\r
+                               {\r
+                                       msg_print(_("\92N\82©\82É\8c©\8eç\82ç\82ê\82Ä\82¢\82é\82æ\82¤\82È\8bC\82ª\82·\82é\81B", "You feel as if someone is watching over you."));\r
+                               }\r
+                       }\r
+               }\r
+               break;\r
+\r
+       case 17:\r
+               if (name) return _("\8aÓ\8e¯", "Perception");\r
+               if (desc) return _("\83A\83C\83e\83\80\82ð\8e¯\95Ê\82·\82é\81B", "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 _("\83A\83\93\83f\83b\83h\91Þ\8eU", "Dispel Undead");\r
+               if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83A\83\93\83f\83b\83h\82É\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B", "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 _("\93â\82Ì\8d\8f", "Day of the Dove");\r
+               if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\82ð\96£\97¹\82·\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "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 _("\92v\96½\8f\9d", "Cause Critical Wounds");\r
+               if (desc) return _("1\91Ì\82Ì\83\82\83\93\83X\83^\81[\82É\91å\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "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 _("\8bA\8aÒ\82Ì\8fÙ", "Word of Recall");\r
+               if (desc) return _("\92n\8fã\82É\82¢\82é\82Æ\82«\82Í\83_\83\93\83W\83\87\83\93\82Ì\8dÅ\90[\8aK\82Ö\81A\83_\83\93\83W\83\87\83\93\82É\82¢\82é\82Æ\82«\82Í\92n\8fã\82Ö\82Æ\88Ú\93®\82·\82é\81B", "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 _("\90^\8eÀ\82Ì\8dÕ\92d", "Alter Reality");\r
+               if (desc) return _("\8c»\8dÝ\82Ì\8aK\82ð\8dÄ\8d\\90¬\82·\82é\81B", "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 _("\90^\81E\8c\8b\8aE", "Warding True");\r
+               if (desc) return _("\8e©\95ª\82Ì\82¢\82é\8f°\82Æ\8eü\88Í8\83}\83X\82Ì\8f°\82Ì\8fã\82É\81A\83\82\83\93\83X\83^\81[\82ª\92Ê\82è\94²\82¯\82½\82è\8f¢\8a«\82³\82ê\82½\82è\82·\82é\82±\82Æ\82ª\82Å\82«\82È\82­\82È\82é\83\8b\81[\83\93\82ð\95`\82­\81B", "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 _("\95s\96Ñ\89»", "Sterilization");\r
+               if (desc) return _("\82±\82Ì\8aK\82Ì\91\9d\90B\82·\82é\83\82\83\93\83X\83^\81[\82ª\91\9d\90B\82Å\82«\82È\82­\82È\82é\81B", "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 _("\91S\8a´\92m", "Detection");\r
+               if (desc) return _("\8bß\82­\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\81Aã©\81A\94à\81A\8aK\92i\81A\8dà\95ó\81A\82»\82µ\82Ä\83A\83C\83e\83\80\82ð\8a´\92m\82·\82é\81B", "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 _("\83A\83\93\83f\83b\83h\8fÁ\96Å", "Annihilate Undead");\r
+               if (desc) return _("\8e©\95ª\82Ì\8eü\88Í\82É\82¢\82é\83A\83\93\83f\83b\83h\82ð\8c»\8dÝ\82Ì\8aK\82©\82ç\8fÁ\82µ\8b\8e\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B",\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 _("\90ç\97¢\8aá", "Clairvoyance");\r
+               if (desc) return _("\82»\82Ì\8aK\91S\91Ì\82ð\89i\8bv\82É\8fÆ\82ç\82µ\81A\83_\83\93\83W\83\87\83\93\93à\82·\82×\82Ä\82Ì\83A\83C\83e\83\80\82ð\8a´\92m\82·\82é\81B", "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 _("\91S\95\9c\8a\88", "Restoration");\r
+               if (desc) return _("\82·\82×\82Ä\82Ì\83X\83e\81[\83^\83X\82Æ\8co\8c±\92l\82ð\89ñ\95\9c\82·\82é\81B", "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 _("*\91Ì\97Í\89ñ\95\9c*", "Healing True");\r
+               if (desc) return _("\8dÅ\8b­\82Ì\8e¡\96ü\82Ì\96\82\96@\82Å\81A\95\89\8f\9d\82Æ\9eN\9eO\8fó\91Ô\82à\91S\89õ\82·\82é\81B", "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 _("\90¹\82È\82é\83r\83W\83\87\83\93", "Holy Vision");\r
+               if (desc) return _("\83A\83C\83e\83\80\82Ì\8e\9d\82Â\94\\97Í\82ð\8a®\91S\82É\92m\82é\81B", "*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 _("\8b\86\8bÉ\82Ì\91Ï\90«", "Ultimate Resistance");\r
+               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\82 \82ç\82ä\82é\91Ï\90«\82ð\95t\82¯\81AAC\82Æ\96\82\96@\96h\8cä\94\\97Í\82ð\8fã\8f¸\82³\82¹\82é\81B", "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
diff --git a/src/realm-life.h b/src/realm-life.h
new file mode 100644 (file)
index 0000000..48af86f
--- /dev/null
@@ -0,0 +1 @@
+extern cptr do_life_spell(SPELL_IDX spell, BIT_FLAGS mode);\r