OSDN Git Service

[Refactor] #37353 アイテム呪い処理を object-curse.c/h へ分離。
authorDeskull <deskull@users.sourceforge.jp>
Mon, 19 Nov 2018 14:14:18 +0000 (23:14 +0900)
committerDeskull <deskull@users.sourceforge.jp>
Mon, 19 Nov 2018 14:14:18 +0000 (23:14 +0900)
Separate curse item  functions to object-curse.c/h.

13 files changed:
Hengband_vcs2015/Hengband/Hengband.vcxproj
Hengband_vcs2015/Hengband/Hengband.vcxproj.filters
src/Makefile.am
src/artifact.c
src/dungeon.c
src/externs.h
src/mspells1.c
src/object-curse.c [new file with mode: 0644]
src/object-curse.h [new file with mode: 0644]
src/object2.c
src/realm-hex.c
src/spells1.c
src/xtra2.c

index a93fffe..16a57c6 100644 (file)
     <ClCompile Include="..\..\src\monster-hook.c" />\r
     <ClCompile Include="..\..\src\monster-process.c" />\r
     <ClCompile Include="..\..\src\monster-status.c" />\r
+    <ClCompile Include="..\..\src\object-curse.c" />\r
     <ClCompile Include="..\..\src\object-hook.c" />\r
     <ClCompile Include="..\..\src\realm-craft.c" />\r
     <ClCompile Include="..\..\src\realm-crusade.c" />\r
     <ClInclude Include="..\..\src\mindtips.h" />\r
     <ClInclude Include="..\..\src\monster-hook.h" />\r
     <ClInclude Include="..\..\src\monster-status.h" />\r
+    <ClInclude Include="..\..\src\object-curse.h" />\r
     <ClInclude Include="..\..\src\object-hook.h" />\r
     <ClInclude Include="..\..\src\readdib.h" />\r
     <ClInclude Include="..\..\src\realm-arcane.h" />\r
index 11caa9c..1f08b18 100644 (file)
     <ClCompile Include="..\..\src\floor-events.c">\r
       <Filter>Source</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\src\object-curse.c">\r
+      <Filter>Source</Filter>\r
+    </ClCompile>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="..\..\src\angband.h">\r
     <ClInclude Include="..\..\src\floor-events.h">\r
       <Filter>Header</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\src\object-curse.h">\r
+      <Filter>Header</Filter>\r
+    </ClInclude>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ResourceCompile Include="..\..\src\angband.rc" />\r
index 6675a15..ac697ac 100644 (file)
@@ -21,6 +21,7 @@ hengband_SOURCES = \
        monster-hook.c monster-hook.h monster-process.c \
        monster-process.h monster-status.c monster-status.h monster1.c \
        monster2.c mspells1.c mspells2.c mspells3.c mspells4.c mutation.c \
+       object-curse.c object-curse.h \
        object-hook.c object-hook.h object1.c object2.c obj_kind.c racial.c \
        realm-arcane.c \
        realm-arcane.h realm-chaos.c realm-chaos.h realm-craft.c realm-craft.h \
index 05ecd68..8720d83 100644 (file)
@@ -12,6 +12,7 @@
 
 #include "angband.h"
 #include "cmd-activate.h"
+#include "object-curse.h"
 
 static int suppression_evil_dam(object_type *o_ptr);
 static int weakening_artifact(object_type *o_ptr);
index 2551927..5e06ad1 100644 (file)
@@ -22,6 +22,7 @@
 #include "cmd-zapwand.h"
 #include "cmd-pet.h"
 #include "floor-events.h"
+#include "object-curse.h"
 
 static bool load = TRUE; /*!<ロード処理中の分岐フラグ*/
 static int wild_regen = 20; /*!<広域マップ移動時の自然回復処理カウンタ(広域マップ1マス毎に20回処理を基本とする)*/
index b1ae2d5..6ed547d 100644 (file)
@@ -717,8 +717,6 @@ extern bool set_monster_monfear(MONSTER_IDX m_idx, int v);
 extern bool set_monster_invulner(MONSTER_IDX m_idx, int v, bool energy_need);
 extern void process_monsters_mtimed(int mtimed_idx);
 extern void dispel_monster_status(MONSTER_IDX m_idx);
-extern BIT_FLAGS get_curse(int power, object_type *o_ptr);
-extern void curse_equipment(PERCENTAGE chance, PERCENTAGE heavy_chance);
 extern void mon_take_hit_mon(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note, IDX who);
 extern bool process_the_world(int num, MONSTER_IDX who, bool vs_player);
 extern void monster_gain_exp(MONSTER_IDX m_idx, IDX s_idx);
index ae1fb48..a57f033 100644 (file)
@@ -39,6 +39,7 @@
  */
 
 #include "angband.h"
+#include "object-curse.h"
 
 
 /*!
@@ -619,106 +620,7 @@ void breath(POSITION y, POSITION x, MONSTER_IDX m_idx, EFFECT_ID typ, int dam_hp
        (void)project(m_idx, rad, y, x, dam_hp, typ, flg, (learnable ? monspell : -1));
 }
 
-/*!
- * @brief アイテムに付加される可能性のある呪いを指定する。
- * @param power 呪いの段階
- * @param o_ptr 呪いをかけられる装備オブジェクトの構造体参照ポインタ
- * @return 与える呪いのID
- */
-BIT_FLAGS get_curse(int power, object_type *o_ptr)
-{
-       BIT_FLAGS new_curse;
-
-       while(1)
-       {
-               new_curse = (1 << (randint0(MAX_CURSE)+4));
-               if (power == 2)
-               {
-                       if (!(new_curse & TRC_HEAVY_MASK)) continue;
-               }
-               else if (power == 1)
-               {
-                       if (new_curse & TRC_SPECIAL_MASK) continue;
-               }
-               else if (power == 0)
-               {
-                       if (new_curse & TRC_HEAVY_MASK) continue;
-               }
-               if (new_curse == TRC_LOW_MELEE && !object_is_weapon(o_ptr)) continue;
-               if (new_curse == TRC_LOW_AC && !object_is_armour(o_ptr)) continue;
-               break;
-       }
-       return new_curse;
-}
-
-/*!
- * @brief 装備への呪い付加判定と付加処理
- * @param chance 呪いの基本確率
- * @param heavy_chance さらに重い呪いとなる確率
- * @return なし
- */
-void curse_equipment(PERCENTAGE chance, PERCENTAGE heavy_chance)
-{
-       bool        changed = FALSE;
-       int         curse_power = 0;
-       u32b        new_curse;
-       u32b oflgs[TR_FLAG_SIZE];
-       object_type *o_ptr = &inventory[INVEN_RARM + randint0(12)];
-       char o_name[MAX_NLEN];
-
-       if (randint1(100) > chance) return;
 
-       if (!o_ptr->k_idx) return;
-
-       object_flags(o_ptr, oflgs);
-
-       object_desc(o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
-
-       /* Extra, biased saving throw for blessed items */
-       if (have_flag(oflgs, TR_BLESSED))
-       {
-#ifdef JP
-               msg_format("祝福された%sは呪いを跳ね返した!", o_name,
-#else
-               msg_format("Your blessed %s resist%s cursing!", o_name,
-#endif
-
-                       ((o_ptr->number > 1) ? "" : "s"));
-               /* Hmmm -- can we wear multiple items? If not, this is unnecessary */
-               return;
-       }
-
-       if ((randint1(100) <= heavy_chance) &&
-           (object_is_artifact(o_ptr) || object_is_ego(o_ptr)))
-       {
-               if (!(o_ptr->curse_flags & TRC_HEAVY_CURSE))
-                       changed = TRUE;
-               o_ptr->curse_flags |= TRC_HEAVY_CURSE;
-               o_ptr->curse_flags |= TRC_CURSED;
-               curse_power++;
-       }
-       else
-       {
-               if (!object_is_cursed(o_ptr))
-                       changed = TRUE;
-               o_ptr->curse_flags |= TRC_CURSED;
-       }
-       if (heavy_chance >= 50) curse_power++;
-
-       new_curse = get_curse(curse_power, o_ptr);
-       if (!(o_ptr->curse_flags & new_curse))
-       {
-               changed = TRUE;
-               o_ptr->curse_flags |= new_curse;
-       }
-
-       if (changed)
-       {
-               msg_format(_("悪意に満ちた黒いオーラが%sをとりまいた...", "There is a malignant black aura surrounding %s..."), o_name);
-               o_ptr->feeling = FEEL_NONE;
-       }
-       p_ptr->update |= (PU_BONUS);
-}
 
 
 /*!
diff --git a/src/object-curse.c b/src/object-curse.c
new file mode 100644 (file)
index 0000000..270165f
--- /dev/null
@@ -0,0 +1,103 @@
+#include "angband.h"\r
+\r
+/*!\r
+ * @brief アイテムに付加される可能性のある呪いを指定する。\r
+ * @param power 呪いの段階\r
+ * @param o_ptr 呪いをかけられる装備オブジェクトの構造体参照ポインタ\r
+ * @return 与える呪いのID\r
+ */\r
+BIT_FLAGS get_curse(int power, object_type *o_ptr)\r
+{\r
+       BIT_FLAGS new_curse;\r
+\r
+       while(1)\r
+       {\r
+               new_curse = (1 << (randint0(MAX_CURSE)+4));\r
+               if (power == 2)\r
+               {\r
+                       if (!(new_curse & TRC_HEAVY_MASK)) continue;\r
+               }\r
+               else if (power == 1)\r
+               {\r
+                       if (new_curse & TRC_SPECIAL_MASK) continue;\r
+               }\r
+               else if (power == 0)\r
+               {\r
+                       if (new_curse & TRC_HEAVY_MASK) continue;\r
+               }\r
+               if (new_curse == TRC_LOW_MELEE && !object_is_weapon(o_ptr)) continue;\r
+               if (new_curse == TRC_LOW_AC && !object_is_armour(o_ptr)) continue;\r
+               break;\r
+       }\r
+       return new_curse;\r
+}\r
+\r
+/*!\r
+ * @brief 装備への呪い付加判定と付加処理\r
+ * @param chance 呪いの基本確率\r
+ * @param heavy_chance さらに重い呪いとなる確率\r
+ * @return なし\r
+ */\r
+void curse_equipment(PERCENTAGE chance, PERCENTAGE heavy_chance)\r
+{\r
+       bool changed = FALSE;\r
+       int curse_power = 0;\r
+       BIT_FLAGS new_curse;\r
+       BIT_FLAGS oflgs[TR_FLAG_SIZE];\r
+       object_type *o_ptr = &inventory[INVEN_RARM + randint0(12)];\r
+       char o_name[MAX_NLEN];\r
+\r
+       if (randint1(100) > chance) return;\r
+\r
+       if (!o_ptr->k_idx) return;\r
+\r
+       object_flags(o_ptr, oflgs);\r
+\r
+       object_desc(o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));\r
+\r
+       /* Extra, biased saving throw for blessed items */\r
+       if (have_flag(oflgs, TR_BLESSED))\r
+       {\r
+#ifdef JP\r
+               msg_format("祝福された%sは呪いを跳ね返した!", o_name,\r
+#else\r
+               msg_format("Your blessed %s resist%s cursing!", o_name,\r
+#endif\r
+\r
+                       ((o_ptr->number > 1) ? "" : "s"));\r
+               /* Hmmm -- can we wear multiple items? If not, this is unnecessary */\r
+               return;\r
+       }\r
+\r
+       if ((randint1(100) <= heavy_chance) &&\r
+           (object_is_artifact(o_ptr) || object_is_ego(o_ptr)))\r
+       {\r
+               if (!(o_ptr->curse_flags & TRC_HEAVY_CURSE))\r
+                       changed = TRUE;\r
+               o_ptr->curse_flags |= TRC_HEAVY_CURSE;\r
+               o_ptr->curse_flags |= TRC_CURSED;\r
+               curse_power++;\r
+       }\r
+       else\r
+       {\r
+               if (!object_is_cursed(o_ptr))\r
+                       changed = TRUE;\r
+               o_ptr->curse_flags |= TRC_CURSED;\r
+       }\r
+       if (heavy_chance >= 50) curse_power++;\r
+\r
+       new_curse = get_curse(curse_power, o_ptr);\r
+       if (!(o_ptr->curse_flags & new_curse))\r
+       {\r
+               changed = TRUE;\r
+               o_ptr->curse_flags |= new_curse;\r
+       }\r
+\r
+       if (changed)\r
+       {\r
+               msg_format(_("悪意に満ちた黒いオーラが%sをとりまいた...", "There is a malignant black aura surrounding %s..."), o_name);\r
+               o_ptr->feeling = FEEL_NONE;\r
+       }\r
+       p_ptr->update |= (PU_BONUS);\r
+}\r
+\r
diff --git a/src/object-curse.h b/src/object-curse.h
new file mode 100644 (file)
index 0000000..60ade11
--- /dev/null
@@ -0,0 +1,2 @@
+extern BIT_FLAGS get_curse(int power, object_type *o_ptr);\r
+extern void curse_equipment(PERCENTAGE chance, PERCENTAGE heavy_chance);\r
index 8daf248..321e1d2 100644 (file)
@@ -13,6 +13,7 @@
 
 #include "angband.h"
 #include "object-hook.h"
+#include "object-curse.h"
 
 static void one_sustain(object_type *o_ptr);
 
index 0e91960..f30c90d 100644 (file)
@@ -19,6 +19,7 @@
 #include "cmd-spell.h"
 #include "cmd-quaff.h"
 #include "object-hook.h"
+#include "object-curse.h"
 
 #define MAX_KEEP 4 /*!<呪術の最大詠唱数 */
 
index 471f740..a454767 100644 (file)
@@ -14,6 +14,7 @@
 #include "angband.h"
 #include "cmd-pet.h"
 #include "trap.h"
+#include "object-curse.h"
 
 
 static int rakubadam_m; /*!< 振り落とされた際のダメージ量 */
index 5b8b4fe..b30ca5e 100644 (file)
@@ -13,6 +13,7 @@
 
 #include "angband.h"
 #include "cmd-pet.h"
+#include "object-curse.h"
 
 #define REWARD_CHANCE 10