OSDN Git Service

[Refactor] #37353 匠領域処理を cmd-spell.c から realm-craft.c/h へ分離。
authorDeskull <deskull@users.sourceforge.jp>
Thu, 13 Sep 2018 11:36:34 +0000 (20:36 +0900)
committerDeskull <deskull@users.sourceforge.jp>
Thu, 13 Sep 2018 11:36:34 +0000 (20:36 +0900)
Separate craft realm process from cmd-spell.c to realm-craft.c/h.

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

index 8509bff..f21c300 100644 (file)
     <ClCompile Include="..\..\src\cmd-pet.c" />\r
     <ClCompile Include="..\..\src\cmd-quaff.c" />\r
     <ClCompile Include="..\..\src\cmd-read.c" />\r
+    <ClCompile Include="..\..\src\realm-craft.c" />\r
     <ClCompile Include="..\..\src\realm-death.c" />\r
     <ClCompile Include="..\..\src\realm-nature.c" />\r
     <ClCompile Include="..\..\src\realm-sorcery.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-craft.h" />\r
     <ClInclude Include="..\..\src\realm-death.h" />\r
     <ClInclude Include="..\..\src\realm-life.h" />\r
     <ClInclude Include="..\..\src\realm-nature.h" />\r
index a9585e7..ddba364 100644 (file)
     <ClCompile Include="..\..\src\realm-trump.c">\r
       <Filter>Source</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\src\realm-craft.c">\r
+      <Filter>Source</Filter>\r
+    </ClCompile>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="..\..\src\angband.h">\r
     <ClInclude Include="..\..\src\realm-trump.h">\r
       <Filter>Header</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\src\realm-craft.h">\r
+      <Filter>Header</Filter>\r
+    </ClInclude>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ResourceCompile Include="..\..\src\angband.rc" />\r
index 100be8d..0fd8d75 100644 (file)
@@ -12,6 +12,7 @@
 #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
@@ -236,542 +237,6 @@ void stop_singing(void)
 }\r
 \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_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
diff --git a/src/realm-craft.c b/src/realm-craft.c
new file mode 100644 (file)
index 0000000..f2450a0
--- /dev/null
@@ -0,0 +1,538 @@
+#include "angband.h"\r
+#include "cmd-spell.h"\r
+#include "selfinfo.h"\r
+\r
+\r
+\r
+/*!\r
+* @brief \8f \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_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 _("\90Ô\8aO\90ü\8e\8b\97Í", "Infravision");\r
+               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\90Ô\8aO\90ü\8e\8b\97Í\82ª\91\9d\8b­\82³\82ê\82é\81B", "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 _("\89ñ\95\9c\97Í\8b­\89»", "Regeneration");\r
+               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\89ñ\95\9c\97Í\82ª\91\9d\8b­\82³\82ê\82é\81B", "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 _("\8bó\95 \8f[\91«", "Satisfy Hunger");\r
+               if (desc) return _("\96\9e\95 \82É\82È\82é\81B", "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 _("\91Ï\97â\8bC", "Resist Cold");\r
+               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\97â\8bC\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 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 _("\91Ï\89Î\89\8a", "Resist Fire");\r
+               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\89\8a\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. 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 _("\8em\8bC\8d\82\97g", "Heroism");\r
+               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\83q\81[\83\8d\81[\8bC\95ª\82É\82È\82é\81B", "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 _("\91Ï\93d\8c\82", "Resist Lightning");\r
+               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\93d\8c\82\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 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 _("\91Ï\8e_", "Resist Acid");\r
+               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\8e_\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 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 _("\93§\96¾\8e\8b\94F", "See Invisibility");\r
+               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\93§\96¾\82È\82à\82Ì\82ª\8c©\82¦\82é\82æ\82¤\82É\82È\82é\81B", "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 _("\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
+               {\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 10:\r
+               if (name) return _("\91Ï\93Å", "Resist Poison");\r
+               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\93Å\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 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 _("\8b\90í\8em\89»", "Berserk");\r
+               if (desc) return _("\8b\90í\8em\89»\82µ\81A\8b°\95|\82ð\8f\9c\8b\8e\82·\82é\81B", "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 _("\8e©\8cÈ\95ª\90Í", "Self Knowledge");\r
+               if (desc) return _("\8c»\8dÝ\82Ì\8e©\95ª\82Ì\8fó\91Ô\82ð\8a®\91S\82É\92m\82é\81B",\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 _("\91Î\8e×\88«\8c\8b\8aE", "Protection from Evil");\r
+               if (desc) return _("\8e×\88«\82È\83\82\83\93\83X\83^\81[\82Ì\8dU\8c\82\82ð\96h\82®\83o\83\8a\83A\82ð\92£\82é\81B", "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 _("\96ü\82µ", "Cure");\r
+               if (desc) return _("\93Å\81A\9eN\9eO\8fó\91Ô\81A\95\89\8f\9d\82ð\91S\89õ\82³\82¹\81A\8c\8ao\82ð\92¼\82·\81B", "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 _("\96\82\96@\8c\95", "Mana Branding");\r
+               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\95\90\8aí\82É\97â\8bC\81A\89\8a\81A\93d\8c\82\81A\8e_\81A\93Å\82Ì\82¢\82¸\82ê\82©\82Ì\91®\90«\82ð\82Â\82¯\82é\81B\95\90\8aí\82ð\8e\9d\82½\82È\82¢\82Æ\8eg\82¦\82È\82¢\81B",\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 _("\83e\83\8c\83p\83V\81[", "Telepathy");\r
+               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\83e\83\8c\83p\83V\81[\94\\97Í\82ð\93¾\82é\81B", "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 _("\94§\90Î\89»", "Stone Skin");\r
+               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81AAC\82ð\8fã\8f¸\82³\82¹\82é\81B", "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 _("\91S\91Ï\90«", "Resistance");\r
+               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\8e_\81A\93d\8c\82\81A\89\8a\81A\97â\8bC\81A\93Å\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, 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 _("\83X\83s\81[\83h", "Haste Self");\r
+               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\89Á\91¬\82·\82é\81B", "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 _("\95Ç\94²\82¯", "Walk through Wall");\r
+               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\94¼\95¨\8e¿\89»\82µ\95Ç\82ð\92Ê\82è\94²\82¯\82ç\82ê\82é\82æ\82¤\82É\82È\82é\81B", "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 _("\8f\82\96\81\82«", "Polish Shield");\r
+               if (desc) return _("\8f\82\82É\94½\8eË\82Ì\91®\90«\82ð\82Â\82¯\82é\81B", "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 _("\83S\81[\83\8c\83\80\90»\91¢", "Create Golem");\r
+               if (desc) return _("1\91Ì\82Ì\83S\81[\83\8c\83\80\82ð\90»\91¢\82·\82é\81B", "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(_("\83S\81[\83\8c\83\80\82ð\8dì\82Á\82½\81B", "You make a golem."));\r
+                               }\r
+                               else\r
+                               {\r
+                                       msg_print(_("\82¤\82Ü\82­\83S\81[\83\8c\83\80\82ð\8dì\82ê\82È\82©\82Á\82½\81B", "No Golems arrive."));\r
+                               }\r
+                       }\r
+               }\r
+               break;\r
+\r
+       case 23:\r
+               if (name) return _("\96\82\96@\82Ì\8aZ", "Magical armor");\r
+               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\96\82\96@\96h\8cä\97Í\82ÆAC\82ª\8fã\82ª\82è\81A\8d¬\97\90\82Æ\96Ó\96Ú\82Ì\91Ï\90«\81A\94½\8eË\94\\97Í\81A\96\83á\83\92m\82ç\82¸\81A\95\82\97V\82ð\93¾\82é\81B",\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 _("\91\95\94õ\96³\97Í\89»", "Remove Enchantment");\r
+               if (desc) return _("\95\90\8aí\81E\96h\8bï\82É\82©\82¯\82ç\82ê\82½\82 \82ç\82ä\82é\96\82\97Í\82ð\8a®\91S\82É\89ð\8f\9c\82·\82é\81B", "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 _("\8eô\82¢\95²\8dÓ", "Remove All 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 26:\r
+               if (name) return _("\8a®\91S\82È\82é\92m\8e¯", "Knowledge True");\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 27:\r
+               if (name) return _("\95\90\8aí\8b­\89»", "Enchant Weapon");\r
+               if (desc) return _("\95\90\8aí\82Ì\96½\92\86\97¦\8fC\90³\82Æ\83_\83\81\81[\83W\8fC\90³\82ð\8b­\89»\82·\82é\81B", "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 _("\96h\8bï\8b­\89»", "Enchant Armor");\r
+               if (desc) return _("\8aZ\82Ì\96h\8cä\8fC\90³\82ð\8b­\89»\82·\82é\81B", "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 _("\95\90\8aí\91®\90«\95t\97^", "Brand Weapon");\r
+               if (desc) return _("\95\90\8aí\82É\83\89\83\93\83_\83\80\82É\91®\90«\82ð\82Â\82¯\82é\81B", "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 _("\90l\8aÔ\83g\83\89\83\93\83v", "Living Trump");\r
+               if (desc) return _("\83\89\83\93\83_\83\80\82É\83e\83\8c\83|\81[\83g\82·\82é\93Ë\91R\95Ï\88Ù\82©\81A\8e©\95ª\82Ì\88Ó\8ev\82Å\83e\83\8c\83|\81[\83g\82·\82é\93Ë\91R\95Ï\88Ù\82ª\90g\82É\82Â\82­\81B",\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(_("\82 \82È\82½\82Í\90\82«\82Ä\82¢\82é\83J\81[\83h\82É\95Ï\82í\82Á\82½\81B", "You have turned into a Living Trump."));\r
+                               }\r
+                       }\r
+               }\r
+               break;\r
+\r
+       case 31:\r
+               if (name) return _("\91®\90«\82Ö\82Ì\96Æ\89u", "Immunity");\r
+               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\97â\8bC\81A\89\8a\81A\93d\8c\82\81A\8e_\82Ì\82¢\82¸\82ê\82©\82É\91Î\82·\82é\96Æ\89u\82ð\93¾\82é\81B",\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
diff --git a/src/realm-craft.h b/src/realm-craft.h
new file mode 100644 (file)
index 0000000..6ca14be
--- /dev/null
@@ -0,0 +1 @@
+cptr do_craft_spell(SPELL_IDX spell, BIT_FLAGS mode);\r