OSDN Git Service

[Refactor] #40275 Separated building-craft-fix.c/h from building.c
authorHourier <hourier@users.sourceforge.jp>
Wed, 20 May 2020 12:43:24 +0000 (21:43 +0900)
committerHourier <hourier@users.sourceforge.jp>
Wed, 20 May 2020 12:43:24 +0000 (21:43 +0900)
Hengband/Hengband/Hengband.vcxproj
Hengband/Hengband/Hengband.vcxproj.filters
src/Makefile.am
src/market/building-craft-fix.c [new file with mode: 0644]
src/market/building-craft-fix.h [new file with mode: 0644]
src/market/building.c

index a5fde23..83adbe2 100644 (file)
     <ClCompile Include="..\..\src\market\bounty-prize-table.c" />\r
     <ClCompile Include="..\..\src\market\bounty.c" />\r
     <ClCompile Include="..\..\src\market\building-craft-armor.c" />\r
+    <ClCompile Include="..\..\src\market\building-craft-fix.c" />\r
     <ClCompile Include="..\..\src\market\building-craft-weapon.c" />\r
     <ClCompile Include="..\..\src\market\building-quest.c" />\r
     <ClCompile Include="..\..\src\market\building-recharger.c" />\r
     <ClInclude Include="..\..\src\market\bounty-prize-table.h" />\r
     <ClInclude Include="..\..\src\market\bounty.h" />\r
     <ClInclude Include="..\..\src\market\building-craft-armor.h" />\r
+    <ClInclude Include="..\..\src\market\building-craft-fix.h" />\r
     <ClInclude Include="..\..\src\market\building-craft-weapon.h" />\r
     <ClInclude Include="..\..\src\market\building-quest.h" />\r
     <ClInclude Include="..\..\src\market\building-recharger.h" />\r
index ab4938d..3a69804 100644 (file)
     <ClCompile Include="..\..\src\market\building-craft-armor.c">
       <Filter>market</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\market\building-craft-fix.c">
+      <Filter>market</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\src\cmd\cmd-activate.h">
     <ClInclude Include="..\..\src\market\building-craft-armor.h">
       <Filter>market</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\src\market\building-craft-fix.h">
+      <Filter>market</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <None Include="..\..\src\wall.bmp" />
index 7ed730b..d9f2a9b 100644 (file)
@@ -77,6 +77,7 @@ hengband_SOURCES = \
        market/building-service.c market/building-service.h \
        market/building-craft-weapon.c market/building-craft-weapon.h \
        market/building-craft-armor.c market/building-craft-armor.h \
+       market/building-craft-fix.c market/building-craft-fix.h \
        \
        view/display-characteristic.c view/display-characteristic.h \
        view/display-fruit.c view/display-fruit.h \
diff --git a/src/market/building-craft-fix.c b/src/market/building-craft-fix.c
new file mode 100644 (file)
index 0000000..f499e15
--- /dev/null
@@ -0,0 +1,272 @@
+#include "system/angband.h"
+#include "market/building-craft-fix.h"
+#include "object/object-hook.h"
+#include "object/object-flavor.h"
+#include "object/object-kind.h"
+#include "object/artifact.h"
+#include "market/building-util.h"
+#include "inventory/player-inventory.h"
+#include "object/object-boost.h"
+#include "player/player-effects.h"
+#include "core/stuff-handler.h"
+
+/*!
+ * @brief 修復材料のオブジェクトから修復対象に特性を移植する。
+ * @param to_ptr 修復対象オブジェクトの構造体の参照ポインタ。
+ * @param from_ptr 修復材料オブジェクトの構造体の参照ポインタ。
+ * @return 修復対象になるならTRUEを返す。
+ */
+static void give_one_ability_of_object(object_type *to_ptr, object_type *from_ptr)
+{
+    BIT_FLAGS to_flgs[TR_FLAG_SIZE];
+    BIT_FLAGS from_flgs[TR_FLAG_SIZE];
+    object_flags(to_ptr, to_flgs);
+    object_flags(from_ptr, from_flgs);
+
+    int n = 0;
+    int cand[TR_FLAG_MAX];
+    for (int i = 0; i < TR_FLAG_MAX; i++) {
+        switch (i) {
+        case TR_IGNORE_ACID:
+        case TR_IGNORE_ELEC:
+        case TR_IGNORE_FIRE:
+        case TR_IGNORE_COLD:
+        case TR_ACTIVATE:
+        case TR_RIDING:
+        case TR_THROW:
+        case TR_SHOW_MODS:
+        case TR_HIDE_TYPE:
+        case TR_ES_ATTACK:
+        case TR_ES_AC:
+        case TR_FULL_NAME:
+        case TR_FIXED_FLAVOR:
+            break;
+        default:
+            if (have_flag(from_flgs, i) && !have_flag(to_flgs, i)) {
+                if (!(is_pval_flag(i) && (from_ptr->pval < 1)))
+                    cand[n++] = i;
+            }
+        }
+    }
+
+    if (n <= 0)
+        return;
+
+    int tr_idx = cand[randint0(n)];
+    add_flag(to_ptr->art_flags, tr_idx);
+    if (is_pval_flag(tr_idx))
+        to_ptr->pval = MAX(to_ptr->pval, 1);
+    int bmax = MIN(3, MAX(1, 40 / (to_ptr->dd * to_ptr->ds)));
+    if (tr_idx == TR_BLOWS)
+        to_ptr->pval = MIN(to_ptr->pval, bmax);
+    if (tr_idx == TR_SPEED)
+        to_ptr->pval = MIN(to_ptr->pval, 4);
+}
+
+/*!
+ * @brief アイテム修復処理のメインルーチン / Repair broken weapon
+ * @param player_ptr プレーヤーへの参照ポインタ
+ * @param bcost 基本修復費用
+ * @return 実際にかかった費用
+ */
+static PRICE repair_broken_weapon_aux(player_type *player_ptr, PRICE bcost)
+{
+    clear_bldg(0, 22);
+    int row = 7;
+    prt(_("修復には材料となるもう1つの武器が必要です。", "Hand one material weapon to repair a broken weapon."), row, 2);
+    prt(_("材料に使用した武器はなくなります!", "The material weapon will disappear after repairing!!"), row + 1, 2);
+
+    concptr q = _("どの折れた武器を修復しますか?", "Repair which broken weapon? ");
+    concptr s = _("修復できる折れた武器がありません。", "You have no broken weapon to repair.");
+    item_tester_hook = item_tester_hook_broken_weapon;
+
+    OBJECT_IDX item;
+    object_type *o_ptr;
+    o_ptr = choose_object(player_ptr, &item, q, s, (USE_INVEN | USE_EQUIP), 0);
+    if (!o_ptr)
+        return 0;
+
+    if (!object_is_ego(o_ptr) && !object_is_artifact(o_ptr)) {
+        msg_format(_("それは直してもしょうがないぜ。", "It is worthless to repair."));
+        return 0;
+    }
+
+    if (o_ptr->number > 1) {
+        msg_format(_("一度に複数を修復することはできません!", "They are too many to repair at once!"));
+        return 0;
+    }
+
+    char basenm[MAX_NLEN];
+    object_desc(player_ptr, basenm, o_ptr, OD_NAME_ONLY);
+    prt(format(_("修復する武器 : %s", "Repairing: %s"), basenm), row + 3, 2);
+
+    q = _("材料となる武器は?", "Which weapon for material? ");
+    s = _("材料となる武器がありません。", "You have no material to repair.");
+
+    item_tester_hook = item_tester_hook_orthodox_melee_weapons;
+    OBJECT_IDX mater;
+    object_type *mo_ptr;
+    mo_ptr = choose_object(player_ptr, &mater, q, s, (USE_INVEN | USE_EQUIP), 0);
+    if (!mo_ptr)
+        return 0;
+    if (mater == item) {
+        msg_print(_("クラインの壷じゃない!", "This is not a klein bottle!"));
+        return 0;
+    }
+
+    object_desc(player_ptr, basenm, mo_ptr, OD_NAME_ONLY);
+    prt(format(_("材料とする武器: %s", "Material : %s"), basenm), row + 4, 2);
+    PRICE cost = bcost + object_value_real(o_ptr) * 2;
+    if (!get_check(format(_("$%dかかりますがよろしいですか? ", "Costs %d gold, okay? "), cost)))
+        return 0;
+
+    if (player_ptr->au < cost) {
+        object_desc(player_ptr, basenm, o_ptr, OD_NAME_ONLY);
+        msg_format(_("%sを修復するだけのゴールドがありません!", "You do not have the gold to repair %s!"), basenm);
+        msg_print(NULL);
+        return 0;
+    }
+
+    player_ptr->total_weight -= o_ptr->weight;
+    KIND_OBJECT_IDX k_idx;
+    if (o_ptr->sval == SV_BROKEN_DAGGER) {
+        int n = 1;
+        k_idx = 0;
+        for (KIND_OBJECT_IDX j = 1; j < max_k_idx; j++) {
+            object_kind *k_aux_ptr = &k_info[j];
+
+            if (k_aux_ptr->tval != TV_SWORD)
+                continue;
+            if ((k_aux_ptr->sval == SV_BROKEN_DAGGER) || (k_aux_ptr->sval == SV_BROKEN_SWORD) || (k_aux_ptr->sval == SV_POISON_NEEDLE))
+                continue;
+            if (k_aux_ptr->weight > 99)
+                continue;
+
+            if (one_in_(n)) {
+                k_idx = j;
+                n++;
+            }
+        }
+    } else {
+        OBJECT_TYPE_VALUE tval = (one_in_(5) ? mo_ptr->tval : TV_SWORD);
+        while (TRUE) {
+            object_kind *ck_ptr;
+            k_idx = lookup_kind(tval, SV_ANY);
+            ck_ptr = &k_info[k_idx];
+
+            if (tval == TV_SWORD) {
+                if ((ck_ptr->sval == SV_BROKEN_DAGGER) || (ck_ptr->sval == SV_BROKEN_SWORD) || (ck_ptr->sval == SV_DIAMOND_EDGE) || (ck_ptr->sval == SV_POISON_NEEDLE))
+                    continue;
+            }
+            if (tval == TV_POLEARM) {
+                if ((ck_ptr->sval == SV_DEATH_SCYTHE) || (ck_ptr->sval == SV_TSURIZAO))
+                    continue;
+            }
+            if (tval == TV_HAFTED) {
+                if ((ck_ptr->sval == SV_GROND) || (ck_ptr->sval == SV_WIZSTAFF) || (ck_ptr->sval == SV_NAMAKE_HAMMER))
+                    continue;
+            }
+
+            break;
+        }
+    }
+
+    int dd_bonus = o_ptr->dd - k_info[o_ptr->k_idx].dd;
+    int ds_bonus = o_ptr->ds - k_info[o_ptr->k_idx].ds;
+    dd_bonus += mo_ptr->dd - k_info[mo_ptr->k_idx].dd;
+    ds_bonus += mo_ptr->ds - k_info[mo_ptr->k_idx].ds;
+
+    object_kind *k_ptr;
+    k_ptr = &k_info[k_idx];
+    o_ptr->k_idx = k_idx;
+    o_ptr->weight = k_ptr->weight;
+    o_ptr->tval = k_ptr->tval;
+    o_ptr->sval = k_ptr->sval;
+    o_ptr->dd = k_ptr->dd;
+    o_ptr->ds = k_ptr->ds;
+
+    for (int i = 0; i < TR_FLAG_SIZE; i++)
+        o_ptr->art_flags[i] |= k_ptr->flags[i];
+    if (k_ptr->pval)
+        o_ptr->pval = MAX(o_ptr->pval, randint1(k_ptr->pval));
+    if (have_flag(k_ptr->flags, TR_ACTIVATE))
+        o_ptr->xtra2 = (byte)k_ptr->act_idx;
+
+    if (dd_bonus > 0) {
+        o_ptr->dd++;
+        for (int i = 1; i < dd_bonus; i++) {
+            if (one_in_(o_ptr->dd + i))
+                o_ptr->dd++;
+        }
+    }
+
+    if (ds_bonus > 0) {
+        o_ptr->ds++;
+        for (int i = 1; i < ds_bonus; i++) {
+            if (one_in_(o_ptr->ds + i))
+                o_ptr->ds++;
+        }
+    }
+
+    if (have_flag(k_ptr->flags, TR_BLOWS)) {
+        int bmax = MIN(3, MAX(1, 40 / (o_ptr->dd * o_ptr->ds)));
+        o_ptr->pval = MIN(o_ptr->pval, bmax);
+    }
+
+    give_one_ability_of_object(o_ptr, mo_ptr);
+    o_ptr->to_d += MAX(0, (mo_ptr->to_d / 3));
+    o_ptr->to_h += MAX(0, (mo_ptr->to_h / 3));
+    o_ptr->to_a += MAX(0, (mo_ptr->to_a));
+
+    if ((o_ptr->name1 == ART_NARSIL) || (object_is_random_artifact(o_ptr) && one_in_(1)) || (object_is_ego(o_ptr) && one_in_(7))) {
+        if (object_is_ego(o_ptr)) {
+            add_flag(o_ptr->art_flags, TR_IGNORE_FIRE);
+            add_flag(o_ptr->art_flags, TR_IGNORE_ACID);
+        }
+
+        give_one_ability_of_object(o_ptr, mo_ptr);
+        if (!activation_index(o_ptr))
+            one_activation(o_ptr);
+
+        if (o_ptr->name1 == ART_NARSIL) {
+            one_high_resistance(o_ptr);
+            one_ability(o_ptr);
+        }
+
+        msg_print(_("これはかなりの業物だったようだ。", "This blade seems to be exceptional."));
+    }
+
+    object_desc(player_ptr, basenm, o_ptr, OD_NAME_ONLY);
+#ifdef JP
+    msg_format("$%dで%sに修復しました。", cost, basenm);
+#else
+    msg_format("Repaired into %s for %d gold.", basenm, cost);
+#endif
+    msg_print(NULL);
+    o_ptr->ident &= ~(IDENT_BROKEN);
+    o_ptr->discount = 99;
+
+    player_ptr->total_weight += o_ptr->weight;
+    calc_android_exp(player_ptr);
+    inven_item_increase(player_ptr, mater, -1);
+    inven_item_optimize(player_ptr, mater);
+
+    player_ptr->update |= PU_BONUS;
+    handle_stuff(player_ptr);
+    return (cost);
+}
+
+/*!
+ * @brief アイテム修復処理の過渡ルーチン / Repair broken weapon
+ * @param player_ptr プレーヤーへの参照ポインタ
+ * @param bcost 基本鑑定費用
+ * @return 実際にかかった費用
+ */
+int repair_broken_weapon(player_type *player_ptr, PRICE bcost)
+{
+    PRICE cost;
+    screen_save();
+    cost = repair_broken_weapon_aux(player_ptr, bcost);
+    screen_load();
+    return cost;
+}
diff --git a/src/market/building-craft-fix.h b/src/market/building-craft-fix.h
new file mode 100644 (file)
index 0000000..fbe48cd
--- /dev/null
@@ -0,0 +1,3 @@
+#pragma once
+
+int repair_broken_weapon(player_type *player_ptr, PRICE bcost);
index 851785c..469a2b4 100644 (file)
@@ -24,8 +24,6 @@
 #include "floor/floor.h"
 #include "floor/floor-events.h"
 #include "floor/floor-save.h"
-#include "object/object-kind.h"
-#include "object/object-boost.h"
 #include "object/object-flavor.h"
 #include "object/object-hook.h"
 #include "monster/monster.h"
@@ -36,7 +34,6 @@
 #include "player/avatar.h"
 #include "market/building.h"
 #include "mutation/mutation.h"
-#include "object/artifact.h"
 #include "cmd-spell.h"
 #include "spell/spells3.h"
 #include "spell/spells-object.h"
@@ -60,6 +57,7 @@
 #include "market/building-service.h"
 #include "market/building-craft-weapon.h"
 #include "market/building-craft-armor.h"
+#include "market/building-craft-fix.h"
 
 building_type building[MAX_BLDG];
 
@@ -86,284 +84,6 @@ static void town_history(player_type *player_ptr)
 
 
 /*!
- * @brief 修復材料のオブジェクトから修復対象に特性を移植する。
- * @param to_ptr 修復対象オブジェクトの構造体の参照ポインタ。
- * @param from_ptr 修復材料オブジェクトの構造体の参照ポインタ。
- * @return 修復対象になるならTRUEを返す。
- */
-static void give_one_ability_of_object(object_type *to_ptr, object_type *from_ptr)
-{
-       BIT_FLAGS to_flgs[TR_FLAG_SIZE];
-       BIT_FLAGS from_flgs[TR_FLAG_SIZE];
-       object_flags(to_ptr, to_flgs);
-       object_flags(from_ptr, from_flgs);
-
-       int n = 0;
-       int cand[TR_FLAG_MAX];
-       for (int i = 0; i < TR_FLAG_MAX; i++)
-       {
-               switch (i)
-               {
-               case TR_IGNORE_ACID:
-               case TR_IGNORE_ELEC:
-               case TR_IGNORE_FIRE:
-               case TR_IGNORE_COLD:
-               case TR_ACTIVATE:
-               case TR_RIDING:
-               case TR_THROW:
-               case TR_SHOW_MODS:
-               case TR_HIDE_TYPE:
-               case TR_ES_ATTACK:
-               case TR_ES_AC:
-               case TR_FULL_NAME:
-               case TR_FIXED_FLAVOR:
-                       break;
-               default:
-                       if (have_flag(from_flgs, i) && !have_flag(to_flgs, i))
-                       {
-                               if (!(is_pval_flag(i) && (from_ptr->pval < 1))) cand[n++] = i;
-                       }
-               }
-       }
-
-       if (n <= 0) return;
-
-       int tr_idx = cand[randint0(n)];
-       add_flag(to_ptr->art_flags, tr_idx);
-       if (is_pval_flag(tr_idx)) to_ptr->pval = MAX(to_ptr->pval, 1);
-       int bmax = MIN(3, MAX(1, 40 / (to_ptr->dd * to_ptr->ds)));
-       if (tr_idx == TR_BLOWS) to_ptr->pval = MIN(to_ptr->pval, bmax);
-       if (tr_idx == TR_SPEED) to_ptr->pval = MIN(to_ptr->pval, 4);
-}
-
-
-/*!
- * @brief アイテム修復処理のメインルーチン / Repair broken weapon
- * @param player_ptr プレーヤーへの参照ポインタ
- * @param bcost 基本修復費用
- * @return 実際にかかった費用
- */
-static PRICE repair_broken_weapon_aux(player_type *player_ptr, PRICE bcost)
-{
-       clear_bldg(0, 22);
-       int row = 7;
-       prt(_("修復には材料となるもう1つの武器が必要です。", "Hand one material weapon to repair a broken weapon."), row, 2);
-       prt(_("材料に使用した武器はなくなります!", "The material weapon will disappear after repairing!!"), row + 1, 2);
-
-       concptr q = _("どの折れた武器を修復しますか?", "Repair which broken weapon? ");
-       concptr s = _("修復できる折れた武器がありません。", "You have no broken weapon to repair.");
-       item_tester_hook = item_tester_hook_broken_weapon;
-
-       OBJECT_IDX item;
-       object_type *o_ptr;
-       o_ptr = choose_object(player_ptr, &item, q, s, (USE_INVEN | USE_EQUIP), 0);
-       if (!o_ptr) return 0;
-
-       if (!object_is_ego(o_ptr) && !object_is_artifact(o_ptr))
-       {
-               msg_format(_("それは直してもしょうがないぜ。", "It is worthless to repair."));
-               return 0;
-       }
-
-       if (o_ptr->number > 1)
-       {
-               msg_format(_("一度に複数を修復することはできません!", "They are too many to repair at once!"));
-               return 0;
-       }
-
-       char basenm[MAX_NLEN];
-       object_desc(player_ptr, basenm, o_ptr, OD_NAME_ONLY);
-       prt(format(_("修復する武器 : %s", "Repairing: %s"), basenm), row + 3, 2);
-
-       q = _("材料となる武器は?", "Which weapon for material? ");
-       s = _("材料となる武器がありません。", "You have no material to repair.");
-
-       item_tester_hook = item_tester_hook_orthodox_melee_weapons;
-       OBJECT_IDX mater;
-       object_type *mo_ptr;
-       mo_ptr = choose_object(player_ptr, &mater, q, s, (USE_INVEN | USE_EQUIP), 0);
-       if (!mo_ptr) return 0;
-       if (mater == item)
-       {
-               msg_print(_("クラインの壷じゃない!", "This is not a klein bottle!"));
-               return 0;
-       }
-
-       object_desc(player_ptr, basenm, mo_ptr, OD_NAME_ONLY);
-       prt(format(_("材料とする武器: %s", "Material : %s"), basenm), row + 4, 2);
-       PRICE cost = bcost + object_value_real(o_ptr) * 2;
-       if (!get_check(format(_("$%dかかりますがよろしいですか? ", "Costs %d gold, okay? "), cost))) return 0;
-
-       if (player_ptr->au < cost)
-       {
-               object_desc(player_ptr, basenm, o_ptr, OD_NAME_ONLY);
-               msg_format(_("%sを修復するだけのゴールドがありません!", "You do not have the gold to repair %s!"), basenm);
-               msg_print(NULL);
-               return 0;
-       }
-
-       player_ptr->total_weight -= o_ptr->weight;
-       KIND_OBJECT_IDX k_idx;
-       if (o_ptr->sval == SV_BROKEN_DAGGER)
-       {
-               int n = 1;
-               k_idx = 0;
-               for (KIND_OBJECT_IDX j = 1; j < max_k_idx; j++)
-               {
-                       object_kind *k_aux_ptr = &k_info[j];
-
-                       if (k_aux_ptr->tval != TV_SWORD) continue;
-                       if ((k_aux_ptr->sval == SV_BROKEN_DAGGER) ||
-                               (k_aux_ptr->sval == SV_BROKEN_SWORD) ||
-                               (k_aux_ptr->sval == SV_POISON_NEEDLE)) continue;
-                       if (k_aux_ptr->weight > 99) continue;
-
-                       if (one_in_(n))
-                       {
-                               k_idx = j;
-                               n++;
-                       }
-               }
-       }
-       else
-       {
-               OBJECT_TYPE_VALUE tval = (one_in_(5) ? mo_ptr->tval : TV_SWORD);
-               while (TRUE)
-               {
-                       object_kind *ck_ptr;
-                       k_idx = lookup_kind(tval, SV_ANY);
-                       ck_ptr = &k_info[k_idx];
-
-                       if (tval == TV_SWORD)
-                       {
-                               if ((ck_ptr->sval == SV_BROKEN_DAGGER) ||
-                                       (ck_ptr->sval == SV_BROKEN_SWORD) ||
-                                       (ck_ptr->sval == SV_DIAMOND_EDGE) ||
-                                       (ck_ptr->sval == SV_POISON_NEEDLE)) continue;
-                       }
-                       if (tval == TV_POLEARM)
-                       {
-                               if ((ck_ptr->sval == SV_DEATH_SCYTHE) ||
-                                       (ck_ptr->sval == SV_TSURIZAO)) continue;
-                       }
-                       if (tval == TV_HAFTED)
-                       {
-                               if ((ck_ptr->sval == SV_GROND) ||
-                                       (ck_ptr->sval == SV_WIZSTAFF) ||
-                                       (ck_ptr->sval == SV_NAMAKE_HAMMER)) continue;
-                       }
-
-                       break;
-               }
-       }
-
-       int dd_bonus = o_ptr->dd - k_info[o_ptr->k_idx].dd;
-       int ds_bonus = o_ptr->ds - k_info[o_ptr->k_idx].ds;
-       dd_bonus += mo_ptr->dd - k_info[mo_ptr->k_idx].dd;
-       ds_bonus += mo_ptr->ds - k_info[mo_ptr->k_idx].ds;
-
-       object_kind *k_ptr;
-       k_ptr = &k_info[k_idx];
-       o_ptr->k_idx = k_idx;
-       o_ptr->weight = k_ptr->weight;
-       o_ptr->tval = k_ptr->tval;
-       o_ptr->sval = k_ptr->sval;
-       o_ptr->dd = k_ptr->dd;
-       o_ptr->ds = k_ptr->ds;
-
-       for (int i = 0; i < TR_FLAG_SIZE; i++) o_ptr->art_flags[i] |= k_ptr->flags[i];
-       if (k_ptr->pval) o_ptr->pval = MAX(o_ptr->pval, randint1(k_ptr->pval));
-       if (have_flag(k_ptr->flags, TR_ACTIVATE)) o_ptr->xtra2 = (byte)k_ptr->act_idx;
-
-       if (dd_bonus > 0)
-       {
-               o_ptr->dd++;
-               for (int i = 1; i < dd_bonus; i++)
-               {
-                       if (one_in_(o_ptr->dd + i)) o_ptr->dd++;
-               }
-       }
-
-       if (ds_bonus > 0)
-       {
-               o_ptr->ds++;
-               for (int i = 1; i < ds_bonus; i++)
-               {
-                       if (one_in_(o_ptr->ds + i)) o_ptr->ds++;
-               }
-       }
-
-       if (have_flag(k_ptr->flags, TR_BLOWS))
-       {
-               int bmax = MIN(3, MAX(1, 40 / (o_ptr->dd * o_ptr->ds)));
-               o_ptr->pval = MIN(o_ptr->pval, bmax);
-       }
-
-       give_one_ability_of_object(o_ptr, mo_ptr);
-       o_ptr->to_d += MAX(0, (mo_ptr->to_d / 3));
-       o_ptr->to_h += MAX(0, (mo_ptr->to_h / 3));
-       o_ptr->to_a += MAX(0, (mo_ptr->to_a));
-
-       if ((o_ptr->name1 == ART_NARSIL) ||
-               (object_is_random_artifact(o_ptr) && one_in_(1)) ||
-               (object_is_ego(o_ptr) && one_in_(7)))
-       {
-               if (object_is_ego(o_ptr))
-               {
-                       add_flag(o_ptr->art_flags, TR_IGNORE_FIRE);
-                       add_flag(o_ptr->art_flags, TR_IGNORE_ACID);
-               }
-
-               give_one_ability_of_object(o_ptr, mo_ptr);
-               if (!activation_index(o_ptr)) one_activation(o_ptr);
-
-               if (o_ptr->name1 == ART_NARSIL)
-               {
-                       one_high_resistance(o_ptr);
-                       one_ability(o_ptr);
-               }
-
-               msg_print(_("これはかなりの業物だったようだ。", "This blade seems to be exceptional."));
-       }
-
-       object_desc(player_ptr, basenm, o_ptr, OD_NAME_ONLY);
-#ifdef JP
-       msg_format("$%dで%sに修復しました。", cost, basenm);
-#else
-       msg_format("Repaired into %s for %d gold.", basenm, cost);
-#endif
-       msg_print(NULL);
-       o_ptr->ident &= ~(IDENT_BROKEN);
-       o_ptr->discount = 99;
-
-       player_ptr->total_weight += o_ptr->weight;
-       calc_android_exp(player_ptr);
-       inven_item_increase(player_ptr, mater, -1);
-       inven_item_optimize(player_ptr, mater);
-
-       player_ptr->update |= PU_BONUS;
-       handle_stuff(player_ptr);
-       return (cost);
-}
-
-
-/*!
- * @brief アイテム修復処理の過渡ルーチン / Repair broken weapon
- * @param player_ptr プレーヤーへの参照ポインタ
- * @param bcost 基本鑑定費用
- * @return 実際にかかった費用
- */
-static int repair_broken_weapon(player_type *player_ptr, PRICE bcost)
-{
-       PRICE cost;
-       screen_save();
-       cost = repair_broken_weapon_aux(player_ptr, bcost);
-       screen_load();
-       return cost;
-}
-
-
-/*!
  * @brief アイテムの強化を行う。 / Enchant item
  * @param player_ptr プレーヤーへの参照ポインタ
  * @param cost 1回毎の費用