OSDN Git Service

[Refactor] #40561 Separated random-art-activation.c/h from artifact.c
authorHourier <hourier@users.sourceforge.jp>
Tue, 14 Jul 2020 09:26:35 +0000 (18:26 +0900)
committerHourier <hourier@users.sourceforge.jp>
Tue, 14 Jul 2020 09:26:35 +0000 (18:26 +0900)
Hengband/Hengband/Hengband.vcxproj
Hengband/Hengband/Hengband.vcxproj.filters
src/Makefile.am
src/artifact/random-art-activation.c [new file with mode: 0644]
src/artifact/random-art-activation.h [new file with mode: 0644]
src/object-enchant/artifact.c

index 1c74494..957b773 100644 (file)
     <ClCompile Include="..\..\src\action\travel-execution.c" />\r
     <ClCompile Include="..\..\src\action\tunnel-execution.c" />\r
     <ClCompile Include="..\..\src\action\weapon-shield.c" />\r
+    <ClCompile Include="..\..\src\artifact\random-art-activation.c" />\r
     <ClCompile Include="..\..\src\artifact\random-art-misc.c" />\r
     <ClCompile Include="..\..\src\artifact\random-art-resistance.c" />\r
     <ClCompile Include="..\..\src\artifact\random-art-slay.c" />\r
     <ClInclude Include="..\..\src\art-definition\art-sword-types.h" />\r
     <ClInclude Include="..\..\src\art-definition\art-weapon-types.h" />\r
     <ClInclude Include="..\..\src\art-definition\random-art-effects.h" />\r
+    <ClInclude Include="..\..\src\artifact\random-art-activation.h" />\r
     <ClInclude Include="..\..\src\artifact\random-art-misc.h" />\r
     <ClInclude Include="..\..\src\artifact\random-art-resistance.h" />\r
     <ClInclude Include="..\..\src\artifact\random-art-slay.h" />\r
index f876b7e..7bbba89 100644 (file)
     <ClCompile Include="..\..\src\artifact\random-art-slay.c">
       <Filter>artifact</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\artifact\random-art-activation.c">
+      <Filter>artifact</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\src\combat\shoot.h">
     <ClInclude Include="..\..\src\artifact\random-art-slay.h">
       <Filter>artifact</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\src\artifact\random-art-activation.h">
+      <Filter>artifact</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <None Include="..\..\src\wall.bmp" />
index e5bd910..602f809 100644 (file)
@@ -14,6 +14,7 @@ hengband_SOURCES = \
        action/tunnel-execution.c action/tunnel-execution.h \
        action/weapon-shield.c action/weapon-shield.h \
        \
+       artifact/random-art-activation.c artifact/random-art-activation.h \
        artifact/random-art-bias-types.h \
        artifact/random-art-misc.c artifact/random-art-misc.h \
        artifact/random-art-pval-investor.c artifact/random-art-pval-investor.h \
diff --git a/src/artifact/random-art-activation.c b/src/artifact/random-art-activation.c
new file mode 100644 (file)
index 0000000..2d4fcd3
--- /dev/null
@@ -0,0 +1,182 @@
+#include "artifact/random-art-activation.h"
+#include "artifact/random-art-bias-types.h"
+#include "art-definition/random-art-effects.h"
+#include "object-enchant/object-boost.h"
+#include "object-enchant/tr-types.h"
+#include "system/object-type-definition.h"
+#include "util/bit-flags-calculator.h"
+
+/*!
+ * @brief ランダムアーティファクト生成中、対象のオブジェクトにバイアスに依存した発動を与える。/ Add one activaton of randam artifact depend on bias.
+ * @details バイアスが無い場合、一部のバイアスの確率によっては one_ability() に処理が移行する。
+ * @param o_ptr 対象のオブジェクト構造体ポインタ
+ * @return なし
+ */
+void give_activation_power(object_type *o_ptr)
+{
+    int type = 0, chance = 0;
+
+    switch (o_ptr->artifact_bias) {
+    case BIAS_ELEC:
+        if (!one_in_(3)) {
+            type = ACT_BO_ELEC_1;
+        } else if (!one_in_(5)) {
+            type = ACT_BA_ELEC_2;
+        } else {
+            type = ACT_BA_ELEC_3;
+        }
+
+        chance = 101;
+        break;
+
+    case BIAS_POIS:
+        type = ACT_BA_POIS_1;
+        chance = 101;
+        break;
+
+    case BIAS_FIRE:
+        if (!one_in_(3)) {
+            type = ACT_BO_FIRE_1;
+        } else if (!one_in_(5)) {
+            type = ACT_BA_FIRE_1;
+        } else {
+            type = ACT_BA_FIRE_2;
+        }
+
+        chance = 101;
+        break;
+
+    case BIAS_COLD:
+        chance = 101;
+        if (!one_in_(3))
+            type = ACT_BO_COLD_1;
+        else if (!one_in_(3))
+            type = ACT_BA_COLD_1;
+        else if (!one_in_(3))
+            type = ACT_BA_COLD_2;
+        else
+            type = ACT_BA_COLD_3;
+        break;
+
+    case BIAS_CHAOS:
+        chance = 50;
+        if (one_in_(6))
+            type = ACT_SUMMON_DEMON;
+        else
+            type = ACT_CALL_CHAOS;
+        break;
+
+    case BIAS_PRIESTLY:
+        chance = 101;
+
+        if (one_in_(13))
+            type = ACT_CHARM_UNDEAD;
+        else if (one_in_(12))
+            type = ACT_BANISH_EVIL;
+        else if (one_in_(11))
+            type = ACT_DISP_EVIL;
+        else if (one_in_(10))
+            type = ACT_PROT_EVIL;
+        else if (one_in_(9))
+            type = ACT_CURE_1000;
+        else if (one_in_(8))
+            type = ACT_CURE_700;
+        else if (one_in_(7))
+            type = ACT_REST_ALL;
+        else if (one_in_(6))
+            type = ACT_REST_EXP;
+        else
+            type = ACT_CURE_MW;
+        break;
+
+    case BIAS_NECROMANTIC:
+        chance = 101;
+        if (one_in_(66))
+            type = ACT_WRAITH;
+        else if (one_in_(13))
+            type = ACT_DISP_GOOD;
+        else if (one_in_(9))
+            type = ACT_MASS_GENO;
+        else if (one_in_(8))
+            type = ACT_GENOCIDE;
+        else if (one_in_(13))
+            type = ACT_SUMMON_UNDEAD;
+        else if (one_in_(9))
+            type = ACT_DRAIN_2;
+        else if (one_in_(6))
+            type = ACT_CHARM_UNDEAD;
+        else
+            type = ACT_DRAIN_1;
+        break;
+
+    case BIAS_LAW:
+        chance = 101;
+        if (one_in_(8))
+            type = ACT_BANISH_EVIL;
+        else if (one_in_(4))
+            type = ACT_DISP_EVIL;
+        else
+            type = ACT_PROT_EVIL;
+        break;
+
+    case BIAS_ROGUE:
+        chance = 101;
+        if (one_in_(50))
+            type = ACT_SPEED;
+        else if (one_in_(4))
+            type = ACT_SLEEP;
+        else if (one_in_(3))
+            type = ACT_DETECT_ALL;
+        else if (one_in_(8))
+            type = ACT_ID_FULL;
+        else
+            type = ACT_ID_PLAIN;
+        break;
+
+    case BIAS_MAGE:
+        chance = 66;
+        if (one_in_(20))
+            type = ACT_SUMMON_ELEMENTAL;
+        else if (one_in_(10))
+            type = ACT_SUMMON_PHANTOM;
+        else if (one_in_(5))
+            type = ACT_RUNE_EXPLO;
+        else
+            type = ACT_ESP;
+        break;
+
+    case BIAS_WARRIOR:
+        chance = 80;
+        if (one_in_(100))
+            type = ACT_INVULN;
+        else
+            type = ACT_BERSERK;
+        break;
+
+    case BIAS_RANGER:
+        chance = 101;
+        if (one_in_(20))
+            type = ACT_CHARM_ANIMALS;
+        else if (one_in_(7))
+            type = ACT_SUMMON_ANIMAL;
+        else if (one_in_(6))
+            type = ACT_CHARM_ANIMAL;
+        else if (one_in_(4))
+            type = ACT_RESIST_ALL;
+        else if (one_in_(3))
+            type = ACT_SATIATE;
+        else
+            type = ACT_CURE_POISON;
+        break;
+    }
+
+    if (!type || (randint1(100) >= chance)) {
+        one_activation(o_ptr);
+        return;
+    }
+
+    /* A type was chosen... */
+    o_ptr->xtra2 = (byte)type;
+    add_flag(o_ptr->art_flags, TR_ACTIVATE);
+    o_ptr->timeout = 0;
+}
diff --git a/src/artifact/random-art-activation.h b/src/artifact/random-art-activation.h
new file mode 100644 (file)
index 0000000..6fd2926
--- /dev/null
@@ -0,0 +1,5 @@
+#pragma once
+
+#include "system/angband.h"
+
+void give_activation_power(object_type *o_ptr);
index 6861551..260d137 100644 (file)
@@ -10,6 +10,7 @@
  */
 
 #include "object-enchant/artifact.h"
+#include "artifact/random-art-activation.h"
 #include "artifact/random-art-bias-types.h"
 #include "artifact/random-art-misc.h"
 #include "artifact/random-art-pval-investor.h"
@@ -128,181 +129,6 @@ static void curse_artifact(player_type *player_ptr, object_type *o_ptr)
 }
 
 /*!
- * @brief ランダムアーティファクト生成中、対象のオブジェクトにバイアスに依存した発動を与える。/ Add one activaton of randam artifact depend on bias.
- * @details バイアスが無い場合、一部のバイアスの確率によっては one_ability() に処理が移行する。
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return なし
- */
-static void give_activation_power(object_type *o_ptr)
-{
-    int type = 0, chance = 0;
-
-    switch (o_ptr->artifact_bias) {
-    case BIAS_ELEC:
-        if (!one_in_(3)) {
-            type = ACT_BO_ELEC_1;
-        } else if (!one_in_(5)) {
-            type = ACT_BA_ELEC_2;
-        } else {
-            type = ACT_BA_ELEC_3;
-        }
-
-        chance = 101;
-        break;
-
-    case BIAS_POIS:
-        type = ACT_BA_POIS_1;
-        chance = 101;
-        break;
-
-    case BIAS_FIRE:
-        if (!one_in_(3)) {
-            type = ACT_BO_FIRE_1;
-        } else if (!one_in_(5)) {
-            type = ACT_BA_FIRE_1;
-        } else {
-            type = ACT_BA_FIRE_2;
-        }
-
-        chance = 101;
-        break;
-
-    case BIAS_COLD:
-        chance = 101;
-        if (!one_in_(3))
-            type = ACT_BO_COLD_1;
-        else if (!one_in_(3))
-            type = ACT_BA_COLD_1;
-        else if (!one_in_(3))
-            type = ACT_BA_COLD_2;
-        else
-            type = ACT_BA_COLD_3;
-        break;
-
-    case BIAS_CHAOS:
-        chance = 50;
-        if (one_in_(6))
-            type = ACT_SUMMON_DEMON;
-        else
-            type = ACT_CALL_CHAOS;
-        break;
-
-    case BIAS_PRIESTLY:
-        chance = 101;
-
-        if (one_in_(13))
-            type = ACT_CHARM_UNDEAD;
-        else if (one_in_(12))
-            type = ACT_BANISH_EVIL;
-        else if (one_in_(11))
-            type = ACT_DISP_EVIL;
-        else if (one_in_(10))
-            type = ACT_PROT_EVIL;
-        else if (one_in_(9))
-            type = ACT_CURE_1000;
-        else if (one_in_(8))
-            type = ACT_CURE_700;
-        else if (one_in_(7))
-            type = ACT_REST_ALL;
-        else if (one_in_(6))
-            type = ACT_REST_EXP;
-        else
-            type = ACT_CURE_MW;
-        break;
-
-    case BIAS_NECROMANTIC:
-        chance = 101;
-        if (one_in_(66))
-            type = ACT_WRAITH;
-        else if (one_in_(13))
-            type = ACT_DISP_GOOD;
-        else if (one_in_(9))
-            type = ACT_MASS_GENO;
-        else if (one_in_(8))
-            type = ACT_GENOCIDE;
-        else if (one_in_(13))
-            type = ACT_SUMMON_UNDEAD;
-        else if (one_in_(9))
-            type = ACT_DRAIN_2;
-        else if (one_in_(6))
-            type = ACT_CHARM_UNDEAD;
-        else
-            type = ACT_DRAIN_1;
-        break;
-
-    case BIAS_LAW:
-        chance = 101;
-        if (one_in_(8))
-            type = ACT_BANISH_EVIL;
-        else if (one_in_(4))
-            type = ACT_DISP_EVIL;
-        else
-            type = ACT_PROT_EVIL;
-        break;
-
-    case BIAS_ROGUE:
-        chance = 101;
-        if (one_in_(50))
-            type = ACT_SPEED;
-        else if (one_in_(4))
-            type = ACT_SLEEP;
-        else if (one_in_(3))
-            type = ACT_DETECT_ALL;
-        else if (one_in_(8))
-            type = ACT_ID_FULL;
-        else
-            type = ACT_ID_PLAIN;
-        break;
-
-    case BIAS_MAGE:
-        chance = 66;
-        if (one_in_(20))
-            type = ACT_SUMMON_ELEMENTAL;
-        else if (one_in_(10))
-            type = ACT_SUMMON_PHANTOM;
-        else if (one_in_(5))
-            type = ACT_RUNE_EXPLO;
-        else
-            type = ACT_ESP;
-        break;
-
-    case BIAS_WARRIOR:
-        chance = 80;
-        if (one_in_(100))
-            type = ACT_INVULN;
-        else
-            type = ACT_BERSERK;
-        break;
-
-    case BIAS_RANGER:
-        chance = 101;
-        if (one_in_(20))
-            type = ACT_CHARM_ANIMALS;
-        else if (one_in_(7))
-            type = ACT_SUMMON_ANIMAL;
-        else if (one_in_(6))
-            type = ACT_CHARM_ANIMAL;
-        else if (one_in_(4))
-            type = ACT_RESIST_ALL;
-        else if (one_in_(3))
-            type = ACT_SATIATE;
-        else
-            type = ACT_CURE_POISON;
-        break;
-    }
-
-    if (!type || (randint1(100) >= chance)) {
-        one_activation(o_ptr);
-        return;
-    }
-
-    /* A type was chosen... */
-    o_ptr->xtra2 = (byte)type;
-    add_flag(o_ptr->art_flags, TR_ACTIVATE);
-    o_ptr->timeout = 0;
-}
-
-/*!
  * @brief ランダムアーティファクト生成中、対象のオブジェクトに名前を与える。/ Set name of randomartifact.
  * @details 確率によって、シンダリン銘、漢字銘、固定名のいずれか一つが与えられる。
  * @param o_ptr 処理中のアイテム参照ポインタ