OSDN Git Service

[Refactor] #40653 Moved pulish_shield() from spells-object.c to spells-craft.c
authorHourier <hourier@users.sourceforge.jp>
Fri, 21 Aug 2020 05:21:28 +0000 (14:21 +0900)
committerHourier <hourier@users.sourceforge.jp>
Fri, 21 Aug 2020 05:21:28 +0000 (14:21 +0900)
src/realm/realm-craft.c
src/spell-realm/spells-craft.c
src/spell-realm/spells-craft.h
src/spell/spells-object.c
src/spell/spells-object.h

index 6f003a6..f753303 100644 (file)
 #include "view/display-messages.h"
 
 /*!
-* @brief 匠領域魔法の各処理を行う
-* @param spell 魔法ID
-* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
-* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
-*/
+ * @brief 匠領域魔法の各処理を行う
+ * @param spell 魔法ID
+ * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
+ * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
+ */
 concptr do_craft_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mode)
 {
-       bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
-       bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
-       bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
-       bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
-
-       PLAYER_LEVEL plev = caster_ptr->lev;
-
-       switch (spell)
-       {
-       case 0:
-               if (name) return _("赤外線視力", "Infravision");
-               if (desc) return _("一定時間、赤外線視力が増強される。", "Gives infravision for a while.");
-
-               {
-                       int base = 100;
-
-                       if (info) return info_duration(base, base);
-
-                       if (cast)
-                       {
-                               set_tim_infra(caster_ptr, base + randint1(base), FALSE);
-                       }
-               }
-               break;
-
-       case 1:
-               if (name) return _("回復力強化", "Regeneration");
-               if (desc) return _("一定時間、回復力が増強される。", "Gives regeneration ability for a while.");
-
-               {
-                       int base = 80;
-
-                       if (info) return info_duration(base, base);
-
-                       if (cast)
-                       {
-                               set_tim_regen(caster_ptr, base + randint1(base), FALSE);
-                       }
-               }
-               break;
-
-       case 2:
-               if (name) return _("空腹充足", "Satisfy Hunger");
-               if (desc) return _("満腹になる。", "Satisfies hunger.");
-
-               {
-                       if (cast)
-                       {
-                               set_food(caster_ptr, PY_FOOD_MAX - 1);
-                       }
-               }
-               break;
-
-       case 3:
-               if (name) return _("耐冷気", "Resist Cold");
-               if (desc) return _("一定時間、冷気への耐性を得る。装備による耐性に累積する。",
-                       "Gives resistance to cold. This resistance can be added to that from equipment for more powerful resistance.");
-
-               {
-                       int base = 20;
-
-                       if (info) return info_duration(base, base);
-
-                       if (cast)
-                       {
-                               set_oppose_cold(caster_ptr, randint1(base) + base, FALSE);
-                       }
-               }
-               break;
-
-       case 4:
-               if (name) return _("耐火炎", "Resist Fire");
-               if (desc) return _("一定時間、炎への耐性を得る。装備による耐性に累積する。",
-                       "Gives resistance to fire. This resistance can be added to that from equipment for more powerful resistance.");
-
-               {
-                       int base = 20;
-
-                       if (info) return info_duration(base, base);
-
-                       if (cast)
-                       {
-                               set_oppose_fire(caster_ptr, randint1(base) + base, FALSE);
-                       }
-               }
-               break;
-
-       case 5:
-               if (name) return _("士気高揚", "Heroism");
-               if (desc) return _("一定時間、ヒーロー気分になる。", "Removes fear. Gives a bonus to hit for a while. Heals you for 10 HP.");
-
-               {
-                       int base = 25;
-
-                       if (info) return info_duration(base, base);
-
-                       if (cast)
-                       {
-                               (void)heroism(caster_ptr, base);
-                       }
-               }
-               break;
-
-       case 6:
-               if (name) return _("耐電撃", "Resist Lightning");
-               if (desc) return _("一定時間、電撃への耐性を得る。装備による耐性に累積する。",
-                       "Gives resistance to electricity. This resistance can be added to that from equipment for more powerful resistance.");
-
-               {
-                       int base = 20;
-
-                       if (info) return info_duration(base, base);
-
-                       if (cast)
-                       {
-                               set_oppose_elec(caster_ptr, randint1(base) + base, FALSE);
-                       }
-               }
-               break;
-
-       case 7:
-               if (name) return _("耐酸", "Resist Acid");
-               if (desc) return _("一定時間、酸への耐性を得る。装備による耐性に累積する。",
-                       "Gives resistance to acid. This resistance can be added to that from equipment for more powerful resistance.");
-
-               {
-                       int base = 20;
-
-                       if (info) return info_duration(base, base);
-
-                       if (cast)
-                       {
-                               set_oppose_acid(caster_ptr, randint1(base) + base, FALSE);
-                       }
-               }
-               break;
-
-       case 8:
-               if (name) return _("透明視認", "See Invisibility");
-               if (desc) return _("一定時間、透明なものが見えるようになる。", "Gives see invisible for a while.");
-
-               {
-                       int base = 24;
-
-                       if (info) return info_duration(base, base);
-
-                       if (cast)
-                       {
-                               set_tim_invis(caster_ptr, randint1(base) + base, FALSE);
-                       }
-               }
-               break;
-
-       case 9:
-               if (name) return _("解呪", "Remove Curse");
-               if (desc) return _("アイテムにかかった弱い呪いを解除する。", "Removes normal curses from equipped items.");
-
-               {
-                       if (cast) (void)remove_curse(caster_ptr);
-               }
-               break;
-
-       case 10:
-               if (name) return _("耐毒", "Resist Poison");
-               if (desc) return _("一定時間、毒への耐性を得る。装備による耐性に累積する。",
-                       "Gives resistance to poison. This resistance can be added to that from equipment for more powerful resistance.");
-
-               {
-                       int base = 20;
-
-                       if (info) return info_duration(base, base);
-
-                       if (cast)
-                       {
-                               set_oppose_pois(caster_ptr, randint1(base) + base, FALSE);
-                       }
-               }
-               break;
-
-       case 11:
-               if (name) return _("狂戦士化", "Berserk");
-               if (desc) return _("狂戦士化し、恐怖を除去する。", "Gives a bonus to hit and HP, immunity to fear for a while. But decreases AC.");
-
-               {
-                       int base = 25;
-
-                       if (info) return info_duration(base, base);
-
-                       if (cast)
-                       {
-                               (void)berserk(caster_ptr, base + randint1(base));
-                       }
-               }
-               break;
-
-       case 12:
-               if (name) return _("自己分析", "Self Knowledge");
-               if (desc) return _("現在の自分の状態を完全に知る。",
-                       "Gives you useful info regarding your current resistances, the powers of your weapon and maximum limits of your stats.");
-
-               {
-                       if (cast)
-                       {
-                               self_knowledge(caster_ptr);
-                       }
-               }
-               break;
-
-       case 13:
-               if (name) return _("対邪悪結界", "Protection from Evil");
-               if (desc) return _("邪悪なモンスターの攻撃を防ぐバリアを張る。", "Gives aura which protect you from evil monster's physical attack.");
-
-               {
-                       int base = 3 * plev;
-                       DICE_SID sides = 25;
-
-                       if (info) return info_duration(base, sides);
-
-                       if (cast)
-                       {
-                               set_protevil(caster_ptr, randint1(sides) + base, FALSE);
-                       }
-               }
-               break;
-
-       case 14:
-               if (name) return _("癒し", "Cure");
-               if (desc) return _("毒、朦朧状態、負傷を全快させ、幻覚を直す。", "Completely heals poisons, cuts, hallucination and being stunned.");
-
-               {
-                       if (cast)
-                       {
-                               (void)true_healing(caster_ptr, 0);
-                       }
-               }
-               break;
-
-       case 15:
-               if (name) return _("魔法剣", "Mana Branding");
-               if (desc) return _("一定時間、武器に冷気、炎、電撃、酸、毒のいずれかの属性をつける。武器を持たないと使えない。",
-                       "Causes current weapon to temporarily do additional damage from cold, fire, lightning, acid or poison. You must be wielding one or more weapons.");
-
-               {
-                       int base = plev / 2;
-
-                       if (info) return info_duration(base, base);
-
-                       if (cast)
-                       {
-                               if (!choose_ele_attack(caster_ptr)) return NULL;
-                       }
-               }
-               break;
-
-       case 16:
-               if (name) return _("テレパシー", "Telepathy");
-               if (desc) return _("一定時間、テレパシー能力を得る。", "Gives telepathy for a while.");
-
-               {
-                       int base = 25;
-                       DICE_SID sides = 30;
-
-                       if (info) return info_duration(base, sides);
-
-                       if (cast)
-                       {
-                               set_tim_esp(caster_ptr, randint1(sides) + base, FALSE);
-                       }
-               }
-               break;
-
-       case 17:
-               if (name) return _("肌石化", "Stone Skin");
-               if (desc) return _("一定時間、ACを上昇させる。", "Gives a bonus to AC for a while.");
-
-               {
-                       int base = 30;
-                       DICE_SID sides = 20;
-
-                       if (info) return info_duration(base, sides);
-
-                       if (cast)
-                       {
-                               set_shield(caster_ptr, randint1(sides) + base, FALSE);
-                       }
-               }
-               break;
-
-       case 18:
-               if (name) return _("全耐性", "Resistance");
-               if (desc) return _("一定時間、酸、電撃、炎、冷気、毒に対する耐性を得る。装備による耐性に累積する。",
-                       "Gives resistance to fire, cold, electricity, acid and poison for a while. These resistances can be added to those from equipment for more powerful resistances.");
-
-               {
-                       int base = 20;
-
-                       if (info) return info_duration(base, base);
-
-                       if (cast)
-                       {
-                               set_oppose_acid(caster_ptr, randint1(base) + base, FALSE);
-                               set_oppose_elec(caster_ptr, randint1(base) + base, FALSE);
-                               set_oppose_fire(caster_ptr, randint1(base) + base, FALSE);
-                               set_oppose_cold(caster_ptr, randint1(base) + base, FALSE);
-                               set_oppose_pois(caster_ptr, randint1(base) + base, FALSE);
-                       }
-               }
-               break;
-
-       case 19:
-               if (name) return _("スピード", "Haste Self");
-               if (desc) return _("一定時間、加速する。", "Hastes you for a while.");
-
-               {
-                       int base = plev;
-                       DICE_SID sides = 20 + plev;
-
-                       if (info) return info_duration(base, sides);
-
-                       if (cast)
-                       {
-                               set_fast(caster_ptr, randint1(sides) + base, FALSE);
-                       }
-               }
-               break;
-
-       case 20:
-               if (name) return _("壁抜け", "Walk through Wall");
-               if (desc) return _("一定時間、半物質化し壁を通り抜けられるようになる。", "Gives ability to pass walls for a while.");
-
-               {
-                       int base = plev / 2;
-
-                       if (info) return info_duration(base, base);
-
-                       if (cast)
-                       {
-                               set_pass_wall(caster_ptr, randint1(base) + base, FALSE);
-                       }
-               }
-               break;
-
-       case 21:
-               if (name) return _("盾磨き", "Polish Shield");
-               if (desc) return _("盾に反射の属性をつける。", "Makes a shield a shield of reflection.");
-
-               {
-                       if (cast)
-                       {
-                               pulish_shield(caster_ptr);
-                       }
-               }
-               break;
-
-       case 22:
-               if (name) return _("ゴーレム製造", "Create Golem");
-               if (desc) return _("1体のゴーレムを製造する。", "Creates a golem.");
-
-               {
-                       if (cast)
-                       {
-                               if (summon_specific(caster_ptr, -1, caster_ptr->y, caster_ptr->x, plev, SUMMON_GOLEM, PM_FORCE_PET))
-                               {
-                                       msg_print(_("ゴーレムを作った。", "You make a golem."));
-                               }
-                               else
-                               {
-                                       msg_print(_("うまくゴーレムを作れなかった。", "No Golems arrive."));
-                               }
-                       }
-               }
-               break;
-
-       case 23:
-               if (name) return _("魔法の鎧", "Magical armor");
-               if (desc) return _("一定時間、魔法防御力とACが上がり、混乱と盲目の耐性、反射能力、麻痺知らず、浮遊を得る。",
-                       "Gives resistance to magic, bonus to AC, resistance to confusion, blindness, reflection, free action and levitation for a while.");
-
-               {
-                       int base = 20;
-
-                       if (info) return info_duration(base, base);
-
-                       if (cast)
-                       {
-                               set_magicdef(caster_ptr, randint1(base) + base, FALSE);
-                       }
-               }
-               break;
-
-       case 24:
-               if (name) return _("装備無力化", "Remove Enchantment");
-               if (desc) return _("武器・防具にかけられたあらゆる魔力を完全に解除する。", "Removes all magics completely from any weapon or armor.");
-
-               {
-                       if (cast)
-                       {
-                               if (!mundane_spell(caster_ptr, TRUE)) return NULL;
-                       }
-               }
-               break;
-
-       case 25:
-               if (name) return _("呪い粉砕", "Remove All Curse");
-               if (desc) return _("アイテムにかかった強力な呪いを解除する。", "Removes normal and heavy curse from equipped items.");
-
-               {
-                       if (cast) (void)remove_all_curse(caster_ptr);
-               }
-               break;
-
-       case 26:
-               if (name) return _("完全なる知識", "Knowledge True");
-               if (desc) return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item.");
-
-               {
-                       if (cast)
-                       {
-                               if (!identify_fully(caster_ptr, FALSE, 0)) return NULL;
-                       }
-               }
-               break;
-
-       case 27:
-               if (name) return _("武器強化", "Enchant Weapon");
-               if (desc) return _("武器の命中率修正とダメージ修正を強化する。", "Attempts to increase +to-hit, +to-dam of a weapon.");
-
-               {
-                       if (cast)
-                       {
-                               if (!enchant_spell(caster_ptr, randint0(4) + 1, randint0(4) + 1, 0)) return NULL;
-                       }
-               }
-               break;
-
-       case 28:
-               if (name) return _("防具強化", "Enchant Armor");
-               if (desc) return _("鎧の防御修正を強化する。", "Attempts to increase +AC of an armor.");
-
-               {
-                       if (cast)
-                       {
-                               if (!enchant_spell(caster_ptr, 0, 0, randint0(3) + 2)) return NULL;
-                       }
-               }
-               break;
-
-       case 29:
-               if (name) return _("武器属性付与", "Brand Weapon");
-               if (desc) return _("武器にランダムに属性をつける。", "Makes current weapon a random ego weapon.");
-
-               {
-                       if (cast)
-                       {
-                               brand_weapon(caster_ptr, randint0(18));
-                       }
-               }
-               break;
-
-       case 30:
-               if (name) return _("人間トランプ", "Living Trump");
-               if (desc) return _("ランダムにテレポートする突然変異か、自分の意思でテレポートする突然変異が身につく。",
-                       "Gives mutation which makes you teleport randomly or makes you able to teleport at will.");
-               if (cast) become_living_trump(caster_ptr);
-               break;
-
-       case 31:
-               if (name) return _("属性への免疫", "Immunity");
-               if (desc) return _("一定時間、冷気、炎、電撃、酸のいずれかに対する免疫を得る。",
-                       "Gives an immunity to fire, cold, electricity or acid for a while.");
-
-               {
-                       int base = 13;
-
-                       if (info) return info_duration(base, base);
-
-                       if (cast)
-                       {
-                               if (!choose_ele_immune(caster_ptr, base + randint1(base))) return NULL;
-                       }
-               }
-               break;
-       }
-
-       return "";
+    bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
+    bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
+    bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
+    bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
+
+    PLAYER_LEVEL plev = caster_ptr->lev;
+
+    switch (spell) {
+    case 0:
+        if (name)
+            return _("赤外線視力", "Infravision");
+        if (desc)
+            return _("一定時間、赤外線視力が増強される。", "Gives infravision for a while.");
+
+        {
+            int base = 100;
+
+            if (info)
+                return info_duration(base, base);
+
+            if (cast) {
+                set_tim_infra(caster_ptr, base + randint1(base), FALSE);
+            }
+        }
+        break;
+
+    case 1:
+        if (name)
+            return _("回復力強化", "Regeneration");
+        if (desc)
+            return _("一定時間、回復力が増強される。", "Gives regeneration ability for a while.");
+
+        {
+            int base = 80;
+
+            if (info)
+                return info_duration(base, base);
+
+            if (cast) {
+                set_tim_regen(caster_ptr, base + randint1(base), FALSE);
+            }
+        }
+        break;
+
+    case 2:
+        if (name)
+            return _("空腹充足", "Satisfy Hunger");
+        if (desc)
+            return _("満腹になる。", "Satisfies hunger.");
+
+        {
+            if (cast) {
+                set_food(caster_ptr, PY_FOOD_MAX - 1);
+            }
+        }
+        break;
+
+    case 3:
+        if (name)
+            return _("耐冷気", "Resist Cold");
+        if (desc)
+            return _("一定時間、冷気への耐性を得る。装備による耐性に累積する。",
+                "Gives resistance to cold. This resistance can be added to that from equipment for more powerful resistance.");
+
+        {
+            int base = 20;
+
+            if (info)
+                return info_duration(base, base);
+
+            if (cast) {
+                set_oppose_cold(caster_ptr, randint1(base) + base, FALSE);
+            }
+        }
+        break;
+
+    case 4:
+        if (name)
+            return _("耐火炎", "Resist Fire");
+        if (desc)
+            return _("一定時間、炎への耐性を得る。装備による耐性に累積する。",
+                "Gives resistance to fire. This resistance can be added to that from equipment for more powerful resistance.");
+
+        {
+            int base = 20;
+
+            if (info)
+                return info_duration(base, base);
+
+            if (cast) {
+                set_oppose_fire(caster_ptr, randint1(base) + base, FALSE);
+            }
+        }
+        break;
+
+    case 5:
+        if (name)
+            return _("士気高揚", "Heroism");
+        if (desc)
+            return _("一定時間、ヒーロー気分になる。", "Removes fear. Gives a bonus to hit for a while. Heals you for 10 HP.");
+
+        {
+            int base = 25;
+
+            if (info)
+                return info_duration(base, base);
+
+            if (cast) {
+                (void)heroism(caster_ptr, base);
+            }
+        }
+        break;
+
+    case 6:
+        if (name)
+            return _("耐電撃", "Resist Lightning");
+        if (desc)
+            return _("一定時間、電撃への耐性を得る。装備による耐性に累積する。",
+                "Gives resistance to electricity. This resistance can be added to that from equipment for more powerful resistance.");
+
+        {
+            int base = 20;
+
+            if (info)
+                return info_duration(base, base);
+
+            if (cast) {
+                set_oppose_elec(caster_ptr, randint1(base) + base, FALSE);
+            }
+        }
+        break;
+
+    case 7:
+        if (name)
+            return _("耐酸", "Resist Acid");
+        if (desc)
+            return _("一定時間、酸への耐性を得る。装備による耐性に累積する。",
+                "Gives resistance to acid. This resistance can be added to that from equipment for more powerful resistance.");
+
+        {
+            int base = 20;
+
+            if (info)
+                return info_duration(base, base);
+
+            if (cast) {
+                set_oppose_acid(caster_ptr, randint1(base) + base, FALSE);
+            }
+        }
+        break;
+
+    case 8:
+        if (name)
+            return _("透明視認", "See Invisibility");
+        if (desc)
+            return _("一定時間、透明なものが見えるようになる。", "Gives see invisible for a while.");
+
+        {
+            int base = 24;
+
+            if (info)
+                return info_duration(base, base);
+
+            if (cast) {
+                set_tim_invis(caster_ptr, randint1(base) + base, FALSE);
+            }
+        }
+        break;
+
+    case 9:
+        if (name)
+            return _("解呪", "Remove Curse");
+        if (desc)
+            return _("アイテムにかかった弱い呪いを解除する。", "Removes normal curses from equipped items.");
+
+        {
+            if (cast)
+                (void)remove_curse(caster_ptr);
+        }
+        break;
+
+    case 10:
+        if (name)
+            return _("耐毒", "Resist Poison");
+        if (desc)
+            return _("一定時間、毒への耐性を得る。装備による耐性に累積する。",
+                "Gives resistance to poison. This resistance can be added to that from equipment for more powerful resistance.");
+
+        {
+            int base = 20;
+
+            if (info)
+                return info_duration(base, base);
+
+            if (cast) {
+                set_oppose_pois(caster_ptr, randint1(base) + base, FALSE);
+            }
+        }
+        break;
+
+    case 11:
+        if (name)
+            return _("狂戦士化", "Berserk");
+        if (desc)
+            return _("狂戦士化し、恐怖を除去する。", "Gives a bonus to hit and HP, immunity to fear for a while. But decreases AC.");
+
+        {
+            int base = 25;
+
+            if (info)
+                return info_duration(base, base);
+
+            if (cast) {
+                (void)berserk(caster_ptr, base + randint1(base));
+            }
+        }
+        break;
+
+    case 12:
+        if (name)
+            return _("自己分析", "Self Knowledge");
+        if (desc)
+            return _("現在の自分の状態を完全に知る。",
+                "Gives you useful info regarding your current resistances, the powers of your weapon and maximum limits of your stats.");
+
+        {
+            if (cast) {
+                self_knowledge(caster_ptr);
+            }
+        }
+        break;
+
+    case 13:
+        if (name)
+            return _("対邪悪結界", "Protection from Evil");
+        if (desc)
+            return _("邪悪なモンスターの攻撃を防ぐバリアを張る。", "Gives aura which protect you from evil monster's physical attack.");
+
+        {
+            int base = 3 * plev;
+            DICE_SID sides = 25;
+
+            if (info)
+                return info_duration(base, sides);
+
+            if (cast) {
+                set_protevil(caster_ptr, randint1(sides) + base, FALSE);
+            }
+        }
+        break;
+
+    case 14:
+        if (name)
+            return _("癒し", "Cure");
+        if (desc)
+            return _("毒、朦朧状態、負傷を全快させ、幻覚を直す。", "Completely heals poisons, cuts, hallucination and being stunned.");
+
+        {
+            if (cast) {
+                (void)true_healing(caster_ptr, 0);
+            }
+        }
+        break;
+
+    case 15:
+        if (name)
+            return _("魔法剣", "Mana Branding");
+        if (desc)
+            return _("一定時間、武器に冷気、炎、電撃、酸、毒のいずれかの属性をつける。武器を持たないと使えない。",
+                "Causes current weapon to temporarily do additional damage from cold, fire, lightning, acid or poison. You must be wielding one or more "
+                "weapons.");
+
+        {
+            int base = plev / 2;
+
+            if (info)
+                return info_duration(base, base);
+
+            if (cast) {
+                if (!choose_ele_attack(caster_ptr))
+                    return NULL;
+            }
+        }
+        break;
+
+    case 16:
+        if (name)
+            return _("テレパシー", "Telepathy");
+        if (desc)
+            return _("一定時間、テレパシー能力を得る。", "Gives telepathy for a while.");
+
+        {
+            int base = 25;
+            DICE_SID sides = 30;
+
+            if (info)
+                return info_duration(base, sides);
+
+            if (cast) {
+                set_tim_esp(caster_ptr, randint1(sides) + base, FALSE);
+            }
+        }
+        break;
+
+    case 17:
+        if (name)
+            return _("肌石化", "Stone Skin");
+        if (desc)
+            return _("一定時間、ACを上昇させる。", "Gives a bonus to AC for a while.");
+
+        {
+            int base = 30;
+            DICE_SID sides = 20;
+
+            if (info)
+                return info_duration(base, sides);
+
+            if (cast) {
+                set_shield(caster_ptr, randint1(sides) + base, FALSE);
+            }
+        }
+        break;
+
+    case 18:
+        if (name)
+            return _("全耐性", "Resistance");
+        if (desc)
+            return _("一定時間、酸、電撃、炎、冷気、毒に対する耐性を得る。装備による耐性に累積する。",
+                "Gives resistance to fire, cold, electricity, acid and poison for a while. These resistances can be added to those from equipment for more "
+                "powerful resistances.");
+
+        {
+            int base = 20;
+
+            if (info)
+                return info_duration(base, base);
+
+            if (cast) {
+                set_oppose_acid(caster_ptr, randint1(base) + base, FALSE);
+                set_oppose_elec(caster_ptr, randint1(base) + base, FALSE);
+                set_oppose_fire(caster_ptr, randint1(base) + base, FALSE);
+                set_oppose_cold(caster_ptr, randint1(base) + base, FALSE);
+                set_oppose_pois(caster_ptr, randint1(base) + base, FALSE);
+            }
+        }
+        break;
+
+    case 19:
+        if (name)
+            return _("スピード", "Haste Self");
+        if (desc)
+            return _("一定時間、加速する。", "Hastes you for a while.");
+
+        {
+            int base = plev;
+            DICE_SID sides = 20 + plev;
+
+            if (info)
+                return info_duration(base, sides);
+
+            if (cast) {
+                set_fast(caster_ptr, randint1(sides) + base, FALSE);
+            }
+        }
+        break;
+
+    case 20:
+        if (name)
+            return _("壁抜け", "Walk through Wall");
+        if (desc)
+            return _("一定時間、半物質化し壁を通り抜けられるようになる。", "Gives ability to pass walls for a while.");
+
+        {
+            int base = plev / 2;
+
+            if (info)
+                return info_duration(base, base);
+
+            if (cast) {
+                set_pass_wall(caster_ptr, randint1(base) + base, FALSE);
+            }
+        }
+        break;
+
+    case 21:
+        if (name)
+            return _("盾磨き", "Polish Shield");
+        if (desc)
+            return _("盾に反射の属性をつける。", "Makes a shield a shield of reflection.");
+
+        {
+            if (cast) {
+                pulish_shield(caster_ptr);
+            }
+        }
+        break;
+
+    case 22:
+        if (name)
+            return _("ゴーレム製造", "Create Golem");
+        if (desc)
+            return _("1体のゴーレムを製造する。", "Creates a golem.");
+
+        {
+            if (cast) {
+                if (summon_specific(caster_ptr, -1, caster_ptr->y, caster_ptr->x, plev, SUMMON_GOLEM, PM_FORCE_PET)) {
+                    msg_print(_("ゴーレムを作った。", "You make a golem."));
+                } else {
+                    msg_print(_("うまくゴーレムを作れなかった。", "No Golems arrive."));
+                }
+            }
+        }
+        break;
+
+    case 23:
+        if (name)
+            return _("魔法の鎧", "Magical armor");
+        if (desc)
+            return _("一定時間、魔法防御力とACが上がり、混乱と盲目の耐性、反射能力、麻痺知らず、浮遊を得る。",
+                "Gives resistance to magic, bonus to AC, resistance to confusion, blindness, reflection, free action and levitation for a while.");
+
+        {
+            int base = 20;
+
+            if (info)
+                return info_duration(base, base);
+
+            if (cast) {
+                set_magicdef(caster_ptr, randint1(base) + base, FALSE);
+            }
+        }
+        break;
+
+    case 24:
+        if (name)
+            return _("装備無力化", "Remove Enchantment");
+        if (desc)
+            return _("武器・防具にかけられたあらゆる魔力を完全に解除する。", "Removes all magics completely from any weapon or armor.");
+
+        {
+            if (cast) {
+                if (!mundane_spell(caster_ptr, TRUE))
+                    return NULL;
+            }
+        }
+        break;
+
+    case 25:
+        if (name)
+            return _("呪い粉砕", "Remove All Curse");
+        if (desc)
+            return _("アイテムにかかった強力な呪いを解除する。", "Removes normal and heavy curse from equipped items.");
+
+        {
+            if (cast)
+                (void)remove_all_curse(caster_ptr);
+        }
+        break;
+
+    case 26:
+        if (name)
+            return _("完全なる知識", "Knowledge True");
+        if (desc)
+            return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item.");
+
+        {
+            if (cast) {
+                if (!identify_fully(caster_ptr, FALSE, 0))
+                    return NULL;
+            }
+        }
+        break;
+
+    case 27:
+        if (name)
+            return _("武器強化", "Enchant Weapon");
+        if (desc)
+            return _("武器の命中率修正とダメージ修正を強化する。", "Attempts to increase +to-hit, +to-dam of a weapon.");
+
+        {
+            if (cast) {
+                if (!enchant_spell(caster_ptr, randint0(4) + 1, randint0(4) + 1, 0))
+                    return NULL;
+            }
+        }
+        break;
+
+    case 28:
+        if (name)
+            return _("防具強化", "Enchant Armor");
+        if (desc)
+            return _("鎧の防御修正を強化する。", "Attempts to increase +AC of an armor.");
+
+        {
+            if (cast) {
+                if (!enchant_spell(caster_ptr, 0, 0, randint0(3) + 2))
+                    return NULL;
+            }
+        }
+        break;
+
+    case 29:
+        if (name)
+            return _("武器属性付与", "Brand Weapon");
+        if (desc)
+            return _("武器にランダムに属性をつける。", "Makes current weapon a random ego weapon.");
+
+        {
+            if (cast) {
+                brand_weapon(caster_ptr, randint0(18));
+            }
+        }
+        break;
+
+    case 30:
+        if (name)
+            return _("人間トランプ", "Living Trump");
+        if (desc)
+            return _("ランダムにテレポートする突然変異か、自分の意思でテレポートする突然変異が身につく。",
+                "Gives mutation which makes you teleport randomly or makes you able to teleport at will.");
+        if (cast)
+            become_living_trump(caster_ptr);
+        break;
+
+    case 31:
+        if (name)
+            return _("属性への免疫", "Immunity");
+        if (desc)
+            return _("一定時間、冷気、炎、電撃、酸のいずれかに対する免疫を得る。", "Gives an immunity to fire, cold, electricity or acid for a while.");
+
+        {
+            int base = 13;
+
+            if (info)
+                return info_duration(base, base);
+
+            if (cast) {
+                if (!choose_ele_immune(caster_ptr, base + randint1(base)))
+                    return NULL;
+            }
+        }
+        break;
+    }
+
+    return "";
 }
index a57f496..0036063 100644 (file)
@@ -3,11 +3,24 @@
 #include "core/player-redraw-types.h"
 #include "core/player-update-types.h"
 #include "core/stuff-handler.h"
+#include "flavor/flavor-describer.h"
+#include "flavor/object-flavor-types.h"
+#include "floor/floor-object.h"
 #include "game-option/disturbance-options.h"
 #include "inventory/inventory-slot-types.h"
 #include "io/input-key-acceptor.h"
+#include "object-enchant/object-ego.h"
+#include "object-hook/hook-checker.h"
+#include "object-hook/hook-enchant.h"
+#include "object/item-use-flags.h"
+#include "object/object-flags.h"
 #include "player/attack-defense-types.h"
+#include "player-info/avatar.h"
 #include "player/special-defense-types.h"
+#include "racial/racial-android.h"
+#include "spell/spells-object.h"
+#include "sv-definition/sv-protector-types.h"
+#include "system/object-type-definition.h"
 #include "term/screen-processor.h"
 #include "term/term-color-types.h"
 #include "view/display-messages.h"
@@ -240,3 +253,48 @@ bool choose_ele_immune(player_type *creature_ptr, TIME_EFFECT immune_turn)
     screen_load();
     return TRUE;
 }
+
+/*!
+ * @brief 盾磨き処理 /
+ * pulish shield
+ * @return ターン消費を要する処理を行ったならばTRUEを返す
+ */
+bool pulish_shield(player_type *caster_ptr)
+{
+    concptr q = _("どの盾を磨きますか?", "Pulish which weapon? ");
+    concptr s = _("磨く盾がありません。", "You have weapon to pulish.");
+
+    OBJECT_IDX item;
+    object_type *o_ptr = choose_object(caster_ptr, &item, q, s, USE_EQUIP | USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT, TV_SHIELD);
+    if (o_ptr == NULL)
+        return FALSE;
+
+    GAME_TEXT o_name[MAX_NLEN];
+    describe_flavor(caster_ptr, o_name, o_ptr, OD_OMIT_PREFIX | OD_NAME_ONLY);
+    BIT_FLAGS flgs[TR_FLAG_SIZE];
+    object_flags(caster_ptr, o_ptr, flgs);
+
+    bool is_pulish_successful = o_ptr->k_idx && !object_is_artifact(o_ptr) && !object_is_ego(o_ptr);
+    is_pulish_successful &= !object_is_cursed(o_ptr);
+    is_pulish_successful &= (o_ptr->sval != SV_MIRROR_SHIELD);
+    if (is_pulish_successful) {
+#ifdef JP
+        msg_format("%sは輝いた!", o_name);
+#else
+        msg_format("%s %s shine%s!", ((item >= 0) ? "Your" : "The"), o_name, ((o_ptr->number > 1) ? "" : "s"));
+#endif
+        o_ptr->name2 = EGO_REFLECTION;
+        enchant(caster_ptr, o_ptr, randint0(3) + 4, ENCH_TOAC);
+        o_ptr->discount = 99;
+        chg_virtue(caster_ptr, V_ENCHANT, 2);
+        return TRUE;
+    }
+
+    if (flush_failure)
+        flush();
+
+    msg_print(_("失敗した。", "Failed."));
+    chg_virtue(caster_ptr, V_ENCHANT, -2);
+    calc_android_exp(caster_ptr);
+    return FALSE;
+}
index e3a1071..8cedb74 100644 (file)
@@ -6,3 +6,4 @@ bool set_ele_attack(player_type *creature_ptr, u32b attack_type, TIME_EFFECT v);
 bool set_ele_immune(player_type *creature_ptr, u32b immune_type, TIME_EFFECT v);
 bool choose_ele_attack(player_type *creature_ptr);
 bool choose_ele_immune(player_type *creature_ptr, TIME_EFFECT turn);
+bool pulish_shield(player_type *caster_ptr);
index 03df0ed..c31dc34 100644 (file)
@@ -423,54 +423,6 @@ bool perilous_secrets(player_type *user_ptr)
 }
 
 /*!
- * @brief 盾磨き処理 /
- * pulish shield
- * @return ターン消費を要する処理を行ったならばTRUEを返す
- */
-bool pulish_shield(player_type *caster_ptr)
-{
-    concptr q = _("どの盾を磨きますか?", "Pulish which weapon? ");
-    concptr s = _("磨く盾がありません。", "You have weapon to pulish.");
-
-    OBJECT_IDX item;
-    object_type *o_ptr;
-    o_ptr = choose_object(caster_ptr, &item, q, s, (USE_EQUIP | USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT), TV_SHIELD);
-    if (!o_ptr)
-        return FALSE;
-
-    GAME_TEXT o_name[MAX_NLEN];
-    describe_flavor(caster_ptr, o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
-    BIT_FLAGS flgs[TR_FLAG_SIZE];
-    object_flags(caster_ptr, o_ptr, flgs);
-
-    bool is_pulish_successful = o_ptr->k_idx && !object_is_artifact(o_ptr) && !object_is_ego(o_ptr);
-    is_pulish_successful &= !object_is_cursed(o_ptr);
-    is_pulish_successful &= (o_ptr->sval != SV_MIRROR_SHIELD);
-    if (is_pulish_successful) {
-#ifdef JP
-        msg_format("%sは輝いた!", o_name);
-#else
-        msg_format("%s %s shine%s!", ((item >= 0) ? "Your" : "The"), o_name, ((o_ptr->number > 1) ? "" : "s"));
-#endif
-        o_ptr->name2 = EGO_REFLECTION;
-        enchant(caster_ptr, o_ptr, randint0(3) + 4, ENCH_TOAC);
-
-        o_ptr->discount = 99;
-        chg_virtue(caster_ptr, V_ENCHANT, 2);
-
-        return TRUE;
-    }
-
-    if (flush_failure)
-        flush();
-
-    msg_print(_("失敗した。", "Failed."));
-    chg_virtue(caster_ptr, V_ENCHANT, -2);
-    calc_android_exp(caster_ptr);
-    return FALSE;
-}
-
-/*!
  * @brief 呪いの打ち破り処理 /
  * Break the curse of an item
  * @param o_ptr 呪い装備情報の参照ポインタ
index b8c1476..b320905 100644 (file)
@@ -8,7 +8,6 @@ bool curse_armor(player_type *owner_ptr);
 bool curse_weapon_object(player_type *creature_ptr, bool force, object_type *o_ptr);
 void brand_bolts(player_type *caster_ptr);
 bool perilous_secrets(player_type *user_ptr);
-bool pulish_shield(player_type *caster_ptr);
 bool create_ration(player_type *crature_ptr);
 
 /*