OSDN Git Service

[Refactor] #40399 Separated apply-magic-armor.c/h from object2.c
authorHourier <hourier@users.sourceforge.jp>
Tue, 2 Jun 2020 13:39:37 +0000 (22:39 +0900)
committerHourier <hourier@users.sourceforge.jp>
Tue, 2 Jun 2020 13:39:37 +0000 (22:39 +0900)
Hengband/Hengband/Hengband.vcxproj
Hengband/Hengband/Hengband.vcxproj.filters
src/Makefile.am
src/object-enchant/apply-magic-armor.c [new file with mode: 0644]
src/object-enchant/apply-magic-armor.h [new file with mode: 0644]
src/object/object2.c

index 279ec13..484aee5 100644 (file)
     <ClCompile Include="..\..\src\mind\racial-samurai.c" />\r
     <ClCompile Include="..\..\src\mind\samurai-slaying.c" />\r
     <ClCompile Include="..\..\src\mind\surprise-attack.c" />\r
+    <ClCompile Include="..\..\src\object-enchant\apply-magic-armor.c" />\r
     <ClCompile Include="..\..\src\object-enchant\apply-magic-weapon.c" />\r
     <ClCompile Include="..\..\src\object\bow.c" />\r
     <ClCompile Include="..\..\src\object\object-appraiser.c" />\r
     <ClInclude Include="..\..\src\mind\racial-samurai.h" />\r
     <ClInclude Include="..\..\src\mind\samurai-slaying.h" />\r
     <ClInclude Include="..\..\src\mind\surprise-attack.h" />\r
+    <ClInclude Include="..\..\src\object-enchant\apply-magic-armor.h" />\r
     <ClInclude Include="..\..\src\object-enchant\apply-magic-weapon.h" />\r
     <ClInclude Include="..\..\src\object\bow.h" />\r
     <ClInclude Include="..\..\src\object\object-appraiser.h" />\r
index ffed288..3b5d5a8 100644 (file)
     <ClCompile Include="..\..\src\object-enchant\apply-magic-weapon.c">
       <Filter>object-enchant</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\object-enchant\apply-magic-armor.c">
+      <Filter>object-enchant</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\src\cmd\cmd-basic.h">
     <ClInclude Include="..\..\src\object-enchant\apply-magic-weapon.h">
       <Filter>object-enchant</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\src\object-enchant\apply-magic-armor.h">
+      <Filter>object-enchant</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <None Include="..\..\src\wall.bmp" />
index 07efa92..5eb7227 100644 (file)
@@ -313,6 +313,7 @@ hengband_SOURCES = \
        object/object-util.h \
        object/item-use-flags.h \
        \
+       object-enchant/apply-magic-armor.c object-enchant/apply-magic-armor.h \
        object-enchant/apply-magic-weapon.c object-enchant/apply-magic-weapon.h \
        object-enchant/artifact.c object-enchant/artifact.h \
        object-enchant/object-boost.c object-enchant/object-boost.h \
diff --git a/src/object-enchant/apply-magic-armor.c b/src/object-enchant/apply-magic-armor.c
new file mode 100644 (file)
index 0000000..d694902
--- /dev/null
@@ -0,0 +1,446 @@
+/*!
+ * todo ちょっと長い。要分割
+ * @brief 防具系のアイテムを強化して(恐らく床に)生成する処理
+ * @date 2020/06/02
+ * @author Hourier
+ */
+
+#include "object-enchant/apply-magic-armor.h"
+#include "object-enchant/artifact.h"
+#include "object-enchant/object-boost.h"
+#include "object-enchant/object-ego.h"
+#include "object/object-kind-hook.h"
+#include "object/object-kind.h"
+#include "object-enchant/tr-types.h"
+#include "object-enchant/trc-types.h"
+#include "sv-definition/sv-armor-types.h"
+#include "sv-definition/sv-protector-types.h"
+
+/*!
+ * @brief 防具系オブジェクトに生成ランクごとの強化を与えるサブルーチン
+ * Apply magic to an item known to be "armor"
+ * @param owner_ptr プレーヤーへの参照ポインタ
+ * @param o_ptr 強化を与えたいオブジェクトの構造体参照ポインタ
+ * @param level 生成基準階
+ * @param power 生成ランク
+ * @return なし
+ * @details
+ * Hack -- note special processing for crown/helm\n
+ * Hack -- note special processing for robe of permanence\n
+ */
+void apply_magic_armor(player_type *owner_ptr, object_type *o_ptr, DEPTH level, int power)
+{
+    ARMOUR_CLASS toac1 = (ARMOUR_CLASS)randint1(5) + m_bonus(5, level);
+    ARMOUR_CLASS toac2 = (ARMOUR_CLASS)m_bonus(10, level);
+    if (power > 0) {
+        o_ptr->to_a += toac1;
+        if (power > 1) {
+            o_ptr->to_a += toac2;
+        }
+    } else if (power < 0) {
+        o_ptr->to_a -= toac1;
+        if (power < -1) {
+            o_ptr->to_a -= toac2;
+        }
+
+        if (o_ptr->to_a < 0)
+            o_ptr->curse_flags |= TRC_CURSED;
+    }
+
+    switch (o_ptr->tval) {
+    case TV_DRAG_ARMOR: {
+        /* power > 2 is debug only */
+        if (one_in_(50) || (power > 2))
+            become_random_artifact(owner_ptr, o_ptr, FALSE);
+        break;
+    }
+    case TV_HARD_ARMOR:
+    case TV_SOFT_ARMOR: {
+        if (power > 1) {
+            if ((o_ptr->tval == TV_SOFT_ARMOR) && (o_ptr->sval == SV_ROBE) && (randint0(100) < 15)) {
+                if (one_in_(5)) {
+                    o_ptr->name2 = EGO_YOIYAMI;
+                    o_ptr->k_idx = lookup_kind(TV_SOFT_ARMOR, SV_YOIYAMI_ROBE);
+                    o_ptr->sval = SV_YOIYAMI_ROBE;
+                    o_ptr->ac = 0;
+                    o_ptr->to_a = 0;
+                } else {
+                    o_ptr->name2 = EGO_PERMANENCE;
+                }
+
+                break;
+            }
+
+            /* power > 2 is debug only */
+            if (one_in_(20) || (power > 2)) {
+                become_random_artifact(owner_ptr, o_ptr, FALSE);
+                break;
+            }
+
+            while (TRUE) {
+                bool okay_flag = TRUE;
+                o_ptr->name2 = get_random_ego(INVEN_BODY, TRUE);
+                switch (o_ptr->name2) {
+                case EGO_DWARVEN:
+                    if (o_ptr->tval != TV_HARD_ARMOR) {
+                        okay_flag = FALSE;
+                    }
+
+                    break;
+                case EGO_DRUID:
+                    if (o_ptr->tval != TV_SOFT_ARMOR) {
+                        okay_flag = FALSE;
+                    }
+
+                    break;
+                default:
+                    break;
+                }
+
+                if (okay_flag)
+                    break;
+            }
+
+            switch (o_ptr->name2) {
+            case EGO_RESISTANCE:
+                if (one_in_(4))
+                    add_flag(o_ptr->art_flags, TR_RES_POIS);
+                break;
+            case EGO_DWARVEN:
+                o_ptr->weight = (2 * k_info[o_ptr->k_idx].weight / 3);
+                o_ptr->ac = k_info[o_ptr->k_idx].ac + 5;
+                break;
+
+            case EGO_A_DEMON:
+                if (one_in_(3))
+                    o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
+                one_in_(3) ? add_flag(o_ptr->art_flags, TR_DRAIN_EXP)
+                           : one_in_(2) ? add_flag(o_ptr->art_flags, TR_DRAIN_HP) : add_flag(o_ptr->art_flags, TR_DRAIN_MANA);
+
+                if (one_in_(3))
+                    add_flag(o_ptr->art_flags, TR_AGGRAVATE);
+                if (one_in_(3))
+                    add_flag(o_ptr->art_flags, TR_ADD_L_CURSE);
+                if (one_in_(5))
+                    add_flag(o_ptr->art_flags, TR_ADD_H_CURSE);
+                if (one_in_(5))
+                    add_flag(o_ptr->art_flags, TR_DRAIN_HP);
+                if (one_in_(5))
+                    add_flag(o_ptr->art_flags, TR_DRAIN_MANA);
+                if (one_in_(5))
+                    add_flag(o_ptr->art_flags, TR_DRAIN_EXP);
+                if (one_in_(5))
+                    add_flag(o_ptr->art_flags, TR_TY_CURSE);
+                if (one_in_(5))
+                    add_flag(o_ptr->art_flags, TR_CALL_DEMON);
+                break;
+            case EGO_A_MORGUL:
+                if (one_in_(3))
+                    o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
+                if (one_in_(9))
+                    add_flag(o_ptr->art_flags, TR_TY_CURSE);
+                if (one_in_(4))
+                    add_flag(o_ptr->art_flags, TR_ADD_H_CURSE);
+                if (one_in_(6))
+                    add_flag(o_ptr->art_flags, TR_AGGRAVATE);
+                if (one_in_(9))
+                    add_flag(o_ptr->art_flags, TR_NO_MAGIC);
+                if (one_in_(9))
+                    add_flag(o_ptr->art_flags, TR_NO_TELE);
+                break;
+            default:
+                break;
+            }
+        }
+
+        break;
+    }
+    case TV_SHIELD: {
+        if (o_ptr->sval == SV_DRAGON_SHIELD) {
+            dragon_resist(o_ptr);
+            if (!one_in_(3))
+                break;
+        }
+
+        if (power > 1) {
+            /* power > 2 is debug only */
+            if (one_in_(20) || (power > 2)) {
+                become_random_artifact(owner_ptr, o_ptr, FALSE);
+                break;
+            }
+
+            while (TRUE) {
+                o_ptr->name2 = get_random_ego(INVEN_LARM, TRUE);
+                if (o_ptr->sval != SV_SMALL_METAL_SHIELD && o_ptr->sval != SV_LARGE_METAL_SHIELD && o_ptr->name2 == EGO_S_DWARVEN) {
+                    continue;
+                }
+
+                break;
+            }
+
+            switch (o_ptr->name2) {
+            case EGO_ENDURANCE:
+                if (!one_in_(3))
+                    one_high_resistance(o_ptr);
+                if (one_in_(4))
+                    add_flag(o_ptr->art_flags, TR_RES_POIS);
+                break;
+            case EGO_REFLECTION:
+                if (o_ptr->sval == SV_MIRROR_SHIELD)
+                    o_ptr->name2 = 0;
+                break;
+
+            case EGO_S_DWARVEN:
+                o_ptr->weight = (2 * k_info[o_ptr->k_idx].weight / 3);
+                o_ptr->ac = k_info[o_ptr->k_idx].ac + 3;
+                break;
+            }
+        }
+
+        break;
+    }
+    case TV_GLOVES: {
+        if (o_ptr->sval == SV_SET_OF_DRAGON_GLOVES) {
+            dragon_resist(o_ptr);
+            if (!one_in_(3))
+                break;
+        }
+
+        if (power > 1) {
+            /* power > 2 is debug only */
+            if (one_in_(20) || (power > 2)) {
+                become_random_artifact(owner_ptr, o_ptr, FALSE);
+                break;
+            }
+            o_ptr->name2 = get_random_ego(INVEN_HANDS, TRUE);
+        } else if (power < -1) {
+            o_ptr->name2 = get_random_ego(INVEN_HANDS, FALSE);
+        }
+
+        break;
+    }
+
+    case TV_BOOTS: {
+        if (o_ptr->sval == SV_PAIR_OF_DRAGON_GREAVE) {
+            dragon_resist(o_ptr);
+            if (!one_in_(3))
+                break;
+        }
+
+        if (power > 1) {
+            /* power > 2 is debug only */
+            if (one_in_(20) || (power > 2)) {
+                become_random_artifact(owner_ptr, o_ptr, FALSE);
+                break;
+            }
+
+            o_ptr->name2 = get_random_ego(INVEN_FEET, TRUE);
+            switch (o_ptr->name2) {
+            case EGO_SLOW_DESCENT:
+                if (one_in_(2)) {
+                    one_high_resistance(o_ptr);
+                }
+
+                break;
+            }
+        } else if (power < -1) {
+            o_ptr->name2 = get_random_ego(INVEN_FEET, FALSE);
+        }
+
+        break;
+    }
+    case TV_CROWN: {
+        if (power > 1) {
+            /* power > 2 is debug only */
+            if (one_in_(20) || (power > 2)) {
+                become_random_artifact(owner_ptr, o_ptr, FALSE);
+                break;
+            }
+
+            while (TRUE) {
+                bool ok_flag = TRUE;
+                o_ptr->name2 = get_random_ego(INVEN_HEAD, TRUE);
+
+                switch (o_ptr->name2) {
+                case EGO_TELEPATHY:
+                    if (add_esp_strong(o_ptr))
+                        add_esp_weak(o_ptr, TRUE);
+                    else
+                        add_esp_weak(o_ptr, FALSE);
+                    break;
+                case EGO_MAGI:
+                case EGO_MIGHT:
+                case EGO_REGENERATION:
+                case EGO_LORDLINESS:
+                case EGO_BASILISK:
+                    break;
+                case EGO_SEEING:
+                    if (one_in_(3)) {
+                        if (one_in_(2))
+                            add_esp_strong(o_ptr);
+                        else
+                            add_esp_weak(o_ptr, FALSE);
+                    }
+                    break;
+                default:
+                    /* not existing crown (wisdom,lite, etc...) */
+                    ok_flag = FALSE;
+                }
+
+                if (ok_flag)
+                    break;
+            }
+
+            break;
+        } else if (power < -1) {
+            while (TRUE) {
+                bool ok_flag = TRUE;
+                o_ptr->name2 = get_random_ego(INVEN_HEAD, FALSE);
+
+                switch (o_ptr->name2) {
+                case EGO_ANCIENT_CURSE:
+                    if (one_in_(3))
+                        add_flag(o_ptr->art_flags, TR_NO_MAGIC);
+                    if (one_in_(3))
+                        add_flag(o_ptr->art_flags, TR_NO_TELE);
+                    if (one_in_(3))
+                        add_flag(o_ptr->art_flags, TR_TY_CURSE);
+                    if (one_in_(3))
+                        add_flag(o_ptr->art_flags, TR_DRAIN_EXP);
+                    if (one_in_(3))
+                        add_flag(o_ptr->art_flags, TR_DRAIN_HP);
+                    if (one_in_(3))
+                        add_flag(o_ptr->art_flags, TR_DRAIN_MANA);
+                    break;
+                }
+
+                if (ok_flag)
+                    break;
+            }
+        }
+
+        break;
+    }
+    case TV_HELM: {
+        if (o_ptr->sval == SV_DRAGON_HELM) {
+            dragon_resist(o_ptr);
+            if (!one_in_(3))
+                break;
+        }
+
+        if (power > 1) {
+            /* power > 2 is debug only */
+            if (one_in_(20) || (power > 2)) {
+                become_random_artifact(owner_ptr, o_ptr, FALSE);
+                break;
+            }
+
+            while (TRUE) {
+                bool ok_flag = TRUE;
+                o_ptr->name2 = get_random_ego(INVEN_HEAD, TRUE);
+                switch (o_ptr->name2) {
+                case EGO_BRILLIANCE:
+                case EGO_DARK:
+                case EGO_INFRAVISION:
+                case EGO_H_PROTECTION:
+                    break;
+                case EGO_SEEING:
+                    if (one_in_(7)) {
+                        if (one_in_(2))
+                            add_esp_strong(o_ptr);
+                        else
+                            add_esp_weak(o_ptr, FALSE);
+                    }
+
+                    break;
+                case EGO_LITE:
+                    if (one_in_(3))
+                        add_flag(o_ptr->art_flags, TR_LITE_1);
+                    if (one_in_(3))
+                        add_flag(o_ptr->art_flags, TR_LITE_2);
+                    break;
+                case EGO_H_DEMON:
+                    if (one_in_(3))
+                        o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
+                    one_in_(3) ? add_flag(o_ptr->art_flags, TR_DRAIN_EXP)
+                               : one_in_(2) ? add_flag(o_ptr->art_flags, TR_DRAIN_HP) : add_flag(o_ptr->art_flags, TR_DRAIN_MANA);
+
+                    if (one_in_(3))
+                        add_flag(o_ptr->art_flags, TR_AGGRAVATE);
+                    if (one_in_(3))
+                        add_flag(o_ptr->art_flags, TR_ADD_L_CURSE);
+                    if (one_in_(5))
+                        add_flag(o_ptr->art_flags, TR_ADD_H_CURSE);
+                    if (one_in_(5))
+                        add_flag(o_ptr->art_flags, TR_DRAIN_HP);
+                    if (one_in_(5))
+                        add_flag(o_ptr->art_flags, TR_DRAIN_MANA);
+                    if (one_in_(5))
+                        add_flag(o_ptr->art_flags, TR_DRAIN_EXP);
+                    if (one_in_(5))
+                        add_flag(o_ptr->art_flags, TR_TY_CURSE);
+                    if (one_in_(5))
+                        add_flag(o_ptr->art_flags, TR_CALL_DEMON);
+                    break;
+                default:
+                    /* not existing helm (Magi, Might, etc...)*/
+                    ok_flag = FALSE;
+                }
+                if (ok_flag)
+                    break;
+            }
+
+            break;
+        } else if (power < -1) {
+            while (TRUE) {
+                bool ok_flag = TRUE;
+                o_ptr->name2 = get_random_ego(INVEN_HEAD, FALSE);
+
+                switch (o_ptr->name2) {
+                case EGO_ANCIENT_CURSE:
+                    ok_flag = FALSE;
+                }
+
+                if (ok_flag)
+                    break;
+            }
+        }
+
+        break;
+    }
+    case TV_CLOAK: {
+        if (power > 1) {
+            /* power > 2 is debug only */
+            if (one_in_(20) || (power > 2)) {
+                become_random_artifact(owner_ptr, o_ptr, FALSE);
+                break;
+            }
+            o_ptr->name2 = get_random_ego(INVEN_OUTER, TRUE);
+
+            switch (o_ptr->name2) {
+            case EGO_BAT:
+                o_ptr->to_d -= 6;
+                o_ptr->to_h -= 6;
+                break;
+            case EGO_NAZGUL:
+                o_ptr->to_d -= 3;
+                o_ptr->to_h -= 3;
+                if (one_in_(3))
+                    add_flag(o_ptr->art_flags, TR_COWARDICE);
+                if (one_in_(3))
+                    add_flag(o_ptr->art_flags, TR_CALL_UNDEAD);
+                if (one_in_(3))
+                    add_flag(o_ptr->art_flags, TR_SLOW_REGEN);
+                if (one_in_(3))
+                    add_flag(o_ptr->art_flags, TR_DRAIN_EXP);
+                break;
+            }
+
+        } else if (power < -1) {
+            o_ptr->name2 = get_random_ego(INVEN_OUTER, FALSE);
+        }
+
+        break;
+    }
+    }
+}
diff --git a/src/object-enchant/apply-magic-armor.h b/src/object-enchant/apply-magic-armor.h
new file mode 100644 (file)
index 0000000..ee7b59b
--- /dev/null
@@ -0,0 +1,5 @@
+#pragma once
+
+#include "system/angband.h"
+
+void apply_magic_armor(player_type *owner_ptr, object_type *o_ptr, DEPTH level, int power);
index 9adc135..edd589d 100644 (file)
@@ -20,6 +20,7 @@
 #include "main/sound-definitions-table.h"
 #include "monster/monster-race-hook.h"
 #include "monster/monster.h"
+#include "object-enchant/apply-magic-armor.h"
 #include "object-enchant/apply-magic-weapon.h"
 #include "object-enchant/artifact.h"
 #include "object-enchant/item-apply-magic.h"
@@ -680,462 +681,6 @@ void object_absorb(object_type *o_ptr, object_type *j_ptr)
 
 
 /*!
- * @brief 防具系オブジェクトに生成ランクごとの強化を与えるサブルーチン
- * Apply magic to an item known to be "armor"
- * @param owner_ptr プレーヤーへの参照ポインタ
- * @param o_ptr 強化を与えたいオブジェクトの構造体参照ポインタ
- * @param level 生成基準階
- * @param power 生成ランク
- * @return なし
- * @details
- * Hack -- note special processing for crown/helm\n
- * Hack -- note special processing for robe of permanence\n
- */
-static void apply_magic_armor(player_type *owner_ptr, object_type *o_ptr, DEPTH level, int power)
-{
-       ARMOUR_CLASS toac1 = (ARMOUR_CLASS)randint1(5) + m_bonus(5, level);
-       ARMOUR_CLASS toac2 = (ARMOUR_CLASS)m_bonus(10, level);
-       if (power > 0)
-       {
-               o_ptr->to_a += toac1;
-               if (power > 1)
-               {
-                       o_ptr->to_a += toac2;
-               }
-       }
-       else if (power < 0)
-       {
-               o_ptr->to_a -= toac1;
-               if (power < -1)
-               {
-                       o_ptr->to_a -= toac2;
-               }
-
-               if (o_ptr->to_a < 0) o_ptr->curse_flags |= TRC_CURSED;
-       }
-
-       switch (o_ptr->tval)
-       {
-       case TV_DRAG_ARMOR:
-       {
-               /* power > 2 is debug only */
-               if (one_in_(50) || (power > 2))
-                       become_random_artifact(owner_ptr, o_ptr, FALSE);
-               break;
-       }
-       case TV_HARD_ARMOR:
-       case TV_SOFT_ARMOR:
-       {
-               if (power > 1)
-               {
-                       if ((o_ptr->tval == TV_SOFT_ARMOR) &&
-                               (o_ptr->sval == SV_ROBE) &&
-                               (randint0(100) < 15))
-                       {
-                               if (one_in_(5))
-                               {
-                                       o_ptr->name2 = EGO_YOIYAMI;
-                                       o_ptr->k_idx = lookup_kind(TV_SOFT_ARMOR, SV_YOIYAMI_ROBE);
-                                       o_ptr->sval = SV_YOIYAMI_ROBE;
-                                       o_ptr->ac = 0;
-                                       o_ptr->to_a = 0;
-                               }
-                               else
-                               {
-                                       o_ptr->name2 = EGO_PERMANENCE;
-                               }
-
-                               break;
-                       }
-
-                       /* power > 2 is debug only */
-                       if (one_in_(20) || (power > 2))
-                       {
-                               become_random_artifact(owner_ptr, o_ptr, FALSE);
-                               break;
-                       }
-
-                       while (TRUE)
-                       {
-                               bool okay_flag = TRUE;
-                               o_ptr->name2 = get_random_ego(INVEN_BODY, TRUE);
-                               switch (o_ptr->name2)
-                               {
-                               case EGO_DWARVEN:
-                                       if (o_ptr->tval != TV_HARD_ARMOR)
-                                       {
-                                               okay_flag = FALSE;
-                                       }
-
-                                       break;
-                               case EGO_DRUID:
-                                       if (o_ptr->tval != TV_SOFT_ARMOR)
-                                       {
-                                               okay_flag = FALSE;
-                                       }
-
-                                       break;
-                               default:
-                                       break;
-                               }
-
-                               if (okay_flag) break;
-                       }
-
-                       switch (o_ptr->name2)
-                       {
-                       case EGO_RESISTANCE:
-                               if (one_in_(4))
-                                       add_flag(o_ptr->art_flags, TR_RES_POIS);
-                               break;
-                       case EGO_DWARVEN:
-                               o_ptr->weight = (2 * k_info[o_ptr->k_idx].weight / 3);
-                               o_ptr->ac = k_info[o_ptr->k_idx].ac + 5;
-                               break;
-
-                       case EGO_A_DEMON:
-                               if (one_in_(3)) o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
-                               one_in_(3) ?
-                                       add_flag(o_ptr->art_flags, TR_DRAIN_EXP) :
-                                       one_in_(2) ?
-                                       add_flag(o_ptr->art_flags, TR_DRAIN_HP) :
-                                       add_flag(o_ptr->art_flags, TR_DRAIN_MANA);
-
-                               if (one_in_(3)) add_flag(o_ptr->art_flags, TR_AGGRAVATE);
-                               if (one_in_(3)) add_flag(o_ptr->art_flags, TR_ADD_L_CURSE);
-                               if (one_in_(5)) add_flag(o_ptr->art_flags, TR_ADD_H_CURSE);
-                               if (one_in_(5)) add_flag(o_ptr->art_flags, TR_DRAIN_HP);
-                               if (one_in_(5)) add_flag(o_ptr->art_flags, TR_DRAIN_MANA);
-                               if (one_in_(5)) add_flag(o_ptr->art_flags, TR_DRAIN_EXP);
-                               if (one_in_(5)) add_flag(o_ptr->art_flags, TR_TY_CURSE);
-                               if (one_in_(5)) add_flag(o_ptr->art_flags, TR_CALL_DEMON);
-                               break;
-                       case EGO_A_MORGUL:
-                               if (one_in_(3)) o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
-                               if (one_in_(9)) add_flag(o_ptr->art_flags, TR_TY_CURSE);
-                               if (one_in_(4)) add_flag(o_ptr->art_flags, TR_ADD_H_CURSE);
-                               if (one_in_(6)) add_flag(o_ptr->art_flags, TR_AGGRAVATE);
-                               if (one_in_(9)) add_flag(o_ptr->art_flags, TR_NO_MAGIC);
-                               if (one_in_(9)) add_flag(o_ptr->art_flags, TR_NO_TELE);
-                               break;
-                       default:
-                               break;
-                       }
-               }
-
-               break;
-       }
-       case TV_SHIELD:
-       {
-               if (o_ptr->sval == SV_DRAGON_SHIELD)
-               {
-                       dragon_resist(o_ptr);
-                       if (!one_in_(3)) break;
-               }
-
-               if (power > 1)
-               {
-                       /* power > 2 is debug only */
-                       if (one_in_(20) || (power > 2))
-                       {
-                               become_random_artifact(owner_ptr, o_ptr, FALSE);
-                               break;
-                       }
-
-                       while (TRUE)
-                       {
-                               o_ptr->name2 = get_random_ego(INVEN_LARM, TRUE);
-                               if (o_ptr->sval != SV_SMALL_METAL_SHIELD && o_ptr->sval != SV_LARGE_METAL_SHIELD
-                                       && o_ptr->name2 == EGO_S_DWARVEN)
-                               {
-                                       continue;
-                               }
-
-                               break;
-                       }
-
-                       switch (o_ptr->name2)
-                       {
-                       case EGO_ENDURANCE:
-                               if (!one_in_(3)) one_high_resistance(o_ptr);
-                               if (one_in_(4)) add_flag(o_ptr->art_flags, TR_RES_POIS);
-                               break;
-                       case EGO_REFLECTION:
-                               if (o_ptr->sval == SV_MIRROR_SHIELD)
-                                       o_ptr->name2 = 0;
-                               break;
-
-                       case EGO_S_DWARVEN:
-                               o_ptr->weight = (2 * k_info[o_ptr->k_idx].weight / 3);
-                               o_ptr->ac = k_info[o_ptr->k_idx].ac + 3;
-                               break;
-                       }
-               }
-
-               break;
-       }
-       case TV_GLOVES:
-       {
-               if (o_ptr->sval == SV_SET_OF_DRAGON_GLOVES)
-               {
-                       dragon_resist(o_ptr);
-                       if (!one_in_(3)) break;
-               }
-
-               if (power > 1)
-               {
-                       /* power > 2 is debug only */
-                       if (one_in_(20) || (power > 2))
-                       {
-                               become_random_artifact(owner_ptr, o_ptr, FALSE);
-                               break;
-                       }
-                       o_ptr->name2 = get_random_ego(INVEN_HANDS, TRUE);
-               }
-               else if (power < -1)
-               {
-                       o_ptr->name2 = get_random_ego(INVEN_HANDS, FALSE);
-               }
-
-               break;
-       }
-
-       case TV_BOOTS:
-       {
-               if (o_ptr->sval == SV_PAIR_OF_DRAGON_GREAVE)
-               {
-                       dragon_resist(o_ptr);
-                       if (!one_in_(3)) break;
-               }
-
-               if (power > 1)
-               {
-                       /* power > 2 is debug only */
-                       if (one_in_(20) || (power > 2))
-                       {
-                               become_random_artifact(owner_ptr, o_ptr, FALSE);
-                               break;
-                       }
-
-                       o_ptr->name2 = get_random_ego(INVEN_FEET, TRUE);
-                       switch (o_ptr->name2)
-                       {
-                       case EGO_SLOW_DESCENT:
-                               if (one_in_(2))
-                               {
-                                       one_high_resistance(o_ptr);
-                               }
-
-                               break;
-                       }
-               }
-               else if (power < -1)
-               {
-                       o_ptr->name2 = get_random_ego(INVEN_FEET, FALSE);
-               }
-
-               break;
-       }
-       case TV_CROWN:
-       {
-               if (power > 1)
-               {
-                       /* power > 2 is debug only */
-                       if (one_in_(20) || (power > 2))
-                       {
-                               become_random_artifact(owner_ptr, o_ptr, FALSE);
-                               break;
-                       }
-
-                       while (TRUE)
-                       {
-                               bool ok_flag = TRUE;
-                               o_ptr->name2 = get_random_ego(INVEN_HEAD, TRUE);
-
-                               switch (o_ptr->name2)
-                               {
-                               case EGO_TELEPATHY:
-                                       if (add_esp_strong(o_ptr)) add_esp_weak(o_ptr, TRUE);
-                                       else add_esp_weak(o_ptr, FALSE);
-                                       break;
-                               case EGO_MAGI:
-                               case EGO_MIGHT:
-                               case EGO_REGENERATION:
-                               case EGO_LORDLINESS:
-                               case EGO_BASILISK:
-                                       break;
-                               case EGO_SEEING:
-                                       if (one_in_(3))
-                                       {
-                                               if (one_in_(2)) add_esp_strong(o_ptr);
-                                               else add_esp_weak(o_ptr, FALSE);
-                                       }
-                                       break;
-                               default:
-                                       /* not existing crown (wisdom,lite, etc...) */
-                                       ok_flag = FALSE;
-                               }
-
-                               if (ok_flag)
-                                       break;
-                       }
-
-                       break;
-               }
-               else if (power < -1)
-               {
-                       while (TRUE)
-                       {
-                               bool ok_flag = TRUE;
-                               o_ptr->name2 = get_random_ego(INVEN_HEAD, FALSE);
-
-                               switch (o_ptr->name2)
-                               {
-                               case EGO_ANCIENT_CURSE:
-                                       if (one_in_(3)) add_flag(o_ptr->art_flags, TR_NO_MAGIC);
-                                       if (one_in_(3)) add_flag(o_ptr->art_flags, TR_NO_TELE);
-                                       if (one_in_(3)) add_flag(o_ptr->art_flags, TR_TY_CURSE);
-                                       if (one_in_(3)) add_flag(o_ptr->art_flags, TR_DRAIN_EXP);
-                                       if (one_in_(3)) add_flag(o_ptr->art_flags, TR_DRAIN_HP);
-                                       if (one_in_(3)) add_flag(o_ptr->art_flags, TR_DRAIN_MANA);
-                                       break;
-                               }
-
-                               if (ok_flag)
-                                       break;
-                       }
-               }
-
-               break;
-       }
-       case TV_HELM:
-       {
-               if (o_ptr->sval == SV_DRAGON_HELM)
-               {
-                       dragon_resist(o_ptr);
-                       if (!one_in_(3)) break;
-               }
-
-               if (power > 1)
-               {
-                       /* power > 2 is debug only */
-                       if (one_in_(20) || (power > 2))
-                       {
-                               become_random_artifact(owner_ptr, o_ptr, FALSE);
-                               break;
-                       }
-
-                       while (TRUE)
-                       {
-                               bool ok_flag = TRUE;
-                               o_ptr->name2 = get_random_ego(INVEN_HEAD, TRUE);
-                               switch (o_ptr->name2)
-                               {
-                               case EGO_BRILLIANCE:
-                               case EGO_DARK:
-                               case EGO_INFRAVISION:
-                               case EGO_H_PROTECTION:
-                                       break;
-                               case EGO_SEEING:
-                                       if (one_in_(7))
-                                       {
-                                               if (one_in_(2)) add_esp_strong(o_ptr);
-                                               else add_esp_weak(o_ptr, FALSE);
-                                       }
-
-                                       break;
-                               case EGO_LITE:
-                                       if (one_in_(3)) add_flag(o_ptr->art_flags, TR_LITE_1);
-                                       if (one_in_(3)) add_flag(o_ptr->art_flags, TR_LITE_2);
-                                       break;
-                               case EGO_H_DEMON:
-                                       if (one_in_(3)) o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
-                                       one_in_(3) ?
-                                               add_flag(o_ptr->art_flags, TR_DRAIN_EXP) :
-                                               one_in_(2) ?
-                                               add_flag(o_ptr->art_flags, TR_DRAIN_HP) :
-                                               add_flag(o_ptr->art_flags, TR_DRAIN_MANA);
-
-                                       if (one_in_(3)) add_flag(o_ptr->art_flags, TR_AGGRAVATE);
-                                       if (one_in_(3)) add_flag(o_ptr->art_flags, TR_ADD_L_CURSE);
-                                       if (one_in_(5)) add_flag(o_ptr->art_flags, TR_ADD_H_CURSE);
-                                       if (one_in_(5)) add_flag(o_ptr->art_flags, TR_DRAIN_HP);
-                                       if (one_in_(5)) add_flag(o_ptr->art_flags, TR_DRAIN_MANA);
-                                       if (one_in_(5)) add_flag(o_ptr->art_flags, TR_DRAIN_EXP);
-                                       if (one_in_(5)) add_flag(o_ptr->art_flags, TR_TY_CURSE);
-                                       if (one_in_(5)) add_flag(o_ptr->art_flags, TR_CALL_DEMON);
-                                       break;
-                               default:
-                                       /* not existing helm (Magi, Might, etc...)*/
-                                       ok_flag = FALSE;
-                               }
-                               if (ok_flag)
-                                       break;
-                       }
-
-                       break;
-               }
-               else if (power < -1)
-               {
-                       while (TRUE)
-                       {
-                               bool ok_flag = TRUE;
-                               o_ptr->name2 = get_random_ego(INVEN_HEAD, FALSE);
-
-                               switch (o_ptr->name2)
-                               {
-                               case EGO_ANCIENT_CURSE:
-                                       ok_flag = FALSE;
-                               }
-
-                               if (ok_flag)
-                                       break;
-                       }
-               }
-
-               break;
-       }
-       case TV_CLOAK:
-       {
-               if (power > 1)
-               {
-                       /* power > 2 is debug only */
-                       if (one_in_(20) || (power > 2))
-                       {
-                               become_random_artifact(owner_ptr, o_ptr, FALSE);
-                               break;
-                       }
-                       o_ptr->name2 = get_random_ego(INVEN_OUTER, TRUE);
-
-                       switch (o_ptr->name2)
-                       {
-                       case EGO_BAT:
-                               o_ptr->to_d -= 6;
-                               o_ptr->to_h -= 6;
-                               break;
-                       case EGO_NAZGUL:
-                               o_ptr->to_d -= 3;
-                               o_ptr->to_h -= 3;
-                               if (one_in_(3)) add_flag(o_ptr->art_flags, TR_COWARDICE);
-                               if (one_in_(3)) add_flag(o_ptr->art_flags, TR_CALL_UNDEAD);
-                               if (one_in_(3)) add_flag(o_ptr->art_flags, TR_SLOW_REGEN);
-                               if (one_in_(3)) add_flag(o_ptr->art_flags, TR_DRAIN_EXP);
-                               break;
-                       }
-
-               }
-               else if (power < -1)
-               {
-                       o_ptr->name2 = get_random_ego(INVEN_OUTER, FALSE);
-               }
-
-               break;
-       }
-       }
-}
-
-
-/*!
  * @brief 装飾品系オブジェクトに生成ランクごとの強化を与えるサブルーチン
  * Apply magic to an item known to be a "ring" or "amulet"
  * @param owner_ptr プレーヤーへの参照ポインタ