OSDN Git Service

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

index 6b50e0e..10b8d92 100644 (file)
     <ClCompile Include="..\..\src\mind\stances-table.c" />\r
     <ClCompile Include="..\..\src\mspell\mspell-dispel.c" />\r
     <ClCompile Include="..\..\src\mutation\mutation-techniques.c" />\r
+    <ClCompile Include="..\..\src\artifact\random-art-pval-investor.c" />\r
     <ClCompile Include="..\..\src\object-hook\hook-bow.c" />\r
     <ClCompile Include="..\..\src\object-hook\hook-checker.c" />\r
     <ClCompile Include="..\..\src\object-hook\hook-enchant.c" />\r
     <ClInclude Include="..\..\src\mspell\mspells3.h" />\r
     <ClInclude Include="..\..\src\mutation\mutation-flag-types.h" />\r
     <ClInclude Include="..\..\src\mutation\mutation-techniques.h" />\r
+    <ClInclude Include="..\..\src\artifact\random-art-pval-investor.h" />\r
     <ClInclude Include="..\..\src\object-hook\hook-armor.h" />\r
     <ClInclude Include="..\..\src\object-hook\hook-bow.h" />\r
     <ClInclude Include="..\..\src\object-hook\hook-checker.h" />\r
index 4600ad6..f8c9b0d 100644 (file)
     <ClCompile Include="..\..\src\cmd-action\cmd-travel.c">
       <Filter>cmd-action</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\artifact\random-art-pval-investor.c">
+      <Filter>artifact</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\src\combat\shoot.h">
     <ClInclude Include="..\..\src\cmd-action\cmd-travel.h">
       <Filter>cmd-action</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\src\artifact\random-art-pval-investor.h">
+      <Filter>artifact</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <None Include="..\..\src\wall.bmp" />
     <Filter Include="window">
       <UniqueIdentifier>{9e0105e8-8250-4ac4-8a1c-cefd30485ecc}</UniqueIdentifier>
     </Filter>
+    <Filter Include="artifact">
+      <UniqueIdentifier>{7554e8b1-1c3c-447b-8f1e-c18c09039419}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="..\..\src\angband.rc" />
index 67feef4..027d945 100644 (file)
@@ -14,6 +14,8 @@ hengband_SOURCES = \
        action/tunnel-execution.c action/tunnel-execution.h \
        action/weapon-shield.c action/weapon-shield.h \
        \
+       artifact/random-art-pval-investor.c artifact/random-art-pval-investor.h \
+       \
        art-definition/art-accessory-types.h \
        art-definition/art-armor-types.h \
        art-definition/art-bow-types.h \
@@ -733,14 +735,14 @@ CFLAGS += $(XFT_CFLAGS)
 LIBS += $(XFT_LIBS)
 COMPILE = $(srcdir)/gcc-wrap $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
        $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) \
-       -Iart-definition -Iautopick -Ibirth -Icmd-io -Icmd-item -Icmd-visual \
-       -Icombat -Icore -Idungeon -Ieffect -Iflavor -Ifloor -Igame-option -Igrid \
-       -Iinfo-reader -Iinventory -Iio -Iio-dump -Iknowledge -Imarket -Imelee \
-       -Imind -Imonster -Imonster-attack -Imonster-floor -Imonster-race -Ilore \
-       -Imspell -Imutation -Iobject -Iobject-enchant -Iobject-hook -Iobject-use \
-       -Ipet -Iplayer -Iplayer-attack -Irealm -Iroom -Isavedata -Ispecific-object \
-       -Ispell -Ispell-kind -Ispell-realm -Istatus -Isv-definition -Isystem -Iterm \
-       -Iutil -Iview -Iwindow -Iwizard -Iworld
+       -Iartifact -Iart-definition -Iautopick -Ibirth -Icmd-io -Icmd-item \
+       -Icmd-visual -Icombat -Icore -Idungeon -Ieffect -Iflavor -Ifloor \
+       -Igame-option -Igrid -Iinfo-reader -Iinventory -Iio -Iio-dump -Iknowledge \
+       -Imarket -Imelee -Imind -Imonster -Imonster-attack -Imonster-floor \
+       -Imonster-race -Ilore -Imspell -Imutation -Iobject -Iobject-enchant \
+       -Iobject-hook -Iobject-use -Ipet -Iplayer -Iplayer-attack -Irealm -Iroom \
+       -Isavedata -Ispecific-object -Ispell -Ispell-kind -Ispell-realm -Istatus \
+       -Isv-definition -Isystem -Iterm -Iutil -Iview -Iwindow -Iwizard -Iworld
 
 install-exec-hook:
 if SET_GID
diff --git a/src/artifact/random-art-pval-investor.c b/src/artifact/random-art-pval-investor.c
new file mode 100644 (file)
index 0000000..c5ad20b
--- /dev/null
@@ -0,0 +1,253 @@
+/*!
+ * @brief ランダムアーティファクトにpvalを追加する処理
+ * @date 2020/07/14
+ * @author Hourier
+ */
+
+#include "artifact/random-art-pval-investor.h"
+#include "object-hook/hook-weapon.h"
+#include "object-enchant/random-art-bias-types.h"
+#include "object-enchant/tr-types.h"
+#include "sv-definition/sv-armor-types.h"
+#include "system/object-type-definition.h"
+#include "util/bit-flags-calculator.h"
+
+/*!
+ * @brief ランダムアーティファクト生成中、対象のオブジェクトにpval能力を付加する。/ Add one pval on generation of randam artifact.
+ * @details 優先的に付加されるpvalがランダムアーティファクトバイアスに依存して存在する。
+ * 原則的候補は腕力、知力、賢さ、器用さ、耐久、魅力、探索、隠密、赤外線視力、加速。武器のみ採掘、追加攻撃も候補に入る。
+ * @attention オブジェクトのtval、svalに依存したハードコーディング処理がある。
+ * @param o_ptr 対象のオブジェクト構造体ポインタ
+ * @return なし
+ */
+void random_plus(object_type *o_ptr)
+{
+    int this_type = object_is_weapon_ammo(o_ptr) ? 23 : 19;
+    switch (o_ptr->artifact_bias) {
+    case BIAS_WARRIOR:
+        if (!(have_flag(o_ptr->art_flags, TR_STR))) {
+            add_flag(o_ptr->art_flags, TR_STR);
+            if (one_in_(2))
+                return;
+        }
+
+        if (!(have_flag(o_ptr->art_flags, TR_CON))) {
+            add_flag(o_ptr->art_flags, TR_CON);
+            if (one_in_(2))
+                return;
+        }
+
+        if (!(have_flag(o_ptr->art_flags, TR_DEX))) {
+            add_flag(o_ptr->art_flags, TR_DEX);
+            if (one_in_(2))
+                return;
+        }
+
+        break;
+
+    case BIAS_MAGE:
+        if (!(have_flag(o_ptr->art_flags, TR_INT))) {
+            add_flag(o_ptr->art_flags, TR_INT);
+            if (one_in_(2))
+                return;
+        }
+        if ((o_ptr->tval == TV_GLOVES) && !(have_flag(o_ptr->art_flags, TR_MAGIC_MASTERY))) {
+            add_flag(o_ptr->art_flags, TR_MAGIC_MASTERY);
+            if (one_in_(2))
+                return;
+        }
+
+        break;
+
+    case BIAS_PRIESTLY:
+        if (!(have_flag(o_ptr->art_flags, TR_WIS))) {
+            add_flag(o_ptr->art_flags, TR_WIS);
+            if (one_in_(2))
+                return;
+        }
+
+        break;
+
+    case BIAS_RANGER:
+        if (!(have_flag(o_ptr->art_flags, TR_DEX))) {
+            add_flag(o_ptr->art_flags, TR_DEX);
+            if (one_in_(2))
+                return;
+        }
+
+        if (!(have_flag(o_ptr->art_flags, TR_CON))) {
+            add_flag(o_ptr->art_flags, TR_CON);
+            if (one_in_(2))
+                return;
+        }
+
+        if (!(have_flag(o_ptr->art_flags, TR_STR))) {
+            add_flag(o_ptr->art_flags, TR_STR);
+            if (one_in_(2))
+                return;
+        }
+
+        break;
+
+    case BIAS_ROGUE:
+        if (!(have_flag(o_ptr->art_flags, TR_STEALTH))) {
+            add_flag(o_ptr->art_flags, TR_STEALTH);
+            if (one_in_(2))
+                return;
+        }
+        if (!(have_flag(o_ptr->art_flags, TR_SEARCH))) {
+            add_flag(o_ptr->art_flags, TR_SEARCH);
+            if (one_in_(2))
+                return;
+        }
+
+        break;
+
+    case BIAS_STR:
+        if (!(have_flag(o_ptr->art_flags, TR_STR))) {
+            add_flag(o_ptr->art_flags, TR_STR);
+            if (one_in_(2))
+                return;
+        }
+
+        break;
+
+    case BIAS_WIS:
+        if (!(have_flag(o_ptr->art_flags, TR_WIS))) {
+            add_flag(o_ptr->art_flags, TR_WIS);
+            if (one_in_(2))
+                return;
+        }
+
+        break;
+
+    case BIAS_INT:
+        if (!(have_flag(o_ptr->art_flags, TR_INT))) {
+            add_flag(o_ptr->art_flags, TR_INT);
+            if (one_in_(2))
+                return;
+        }
+
+        break;
+
+    case BIAS_DEX:
+        if (!(have_flag(o_ptr->art_flags, TR_DEX))) {
+            add_flag(o_ptr->art_flags, TR_DEX);
+            if (one_in_(2))
+                return;
+        }
+
+        break;
+
+    case BIAS_CON:
+        if (!(have_flag(o_ptr->art_flags, TR_CON))) {
+            add_flag(o_ptr->art_flags, TR_CON);
+            if (one_in_(2))
+                return;
+        }
+
+        break;
+
+    case BIAS_CHR:
+        if (!(have_flag(o_ptr->art_flags, TR_CHR))) {
+            add_flag(o_ptr->art_flags, TR_CHR);
+            if (one_in_(2))
+                return;
+        }
+
+        break;
+    }
+
+    if ((o_ptr->artifact_bias == BIAS_MAGE || o_ptr->artifact_bias == BIAS_PRIESTLY) && (o_ptr->tval == TV_SOFT_ARMOR) && (o_ptr->sval == SV_ROBE)) {
+        if (!(have_flag(o_ptr->art_flags, TR_DEC_MANA)) && one_in_(3)) {
+            add_flag(o_ptr->art_flags, TR_DEC_MANA);
+            if (one_in_(2))
+                return;
+        }
+    }
+
+    switch (randint1(this_type)) {
+    case 1:
+    case 2:
+        add_flag(o_ptr->art_flags, TR_STR);
+        if (!o_ptr->artifact_bias && !one_in_(13))
+            o_ptr->artifact_bias = BIAS_STR;
+        else if (!o_ptr->artifact_bias && one_in_(7))
+            o_ptr->artifact_bias = BIAS_WARRIOR;
+        break;
+    case 3:
+    case 4:
+        add_flag(o_ptr->art_flags, TR_INT);
+        if (!o_ptr->artifact_bias && !one_in_(13))
+            o_ptr->artifact_bias = BIAS_INT;
+        else if (!o_ptr->artifact_bias && one_in_(7))
+            o_ptr->artifact_bias = BIAS_MAGE;
+        break;
+    case 5:
+    case 6:
+        add_flag(o_ptr->art_flags, TR_WIS);
+        if (!o_ptr->artifact_bias && !one_in_(13))
+            o_ptr->artifact_bias = BIAS_WIS;
+        else if (!o_ptr->artifact_bias && one_in_(7))
+            o_ptr->artifact_bias = BIAS_PRIESTLY;
+        break;
+    case 7:
+    case 8:
+        add_flag(o_ptr->art_flags, TR_DEX);
+        if (!o_ptr->artifact_bias && !one_in_(13))
+            o_ptr->artifact_bias = BIAS_DEX;
+        else if (!o_ptr->artifact_bias && one_in_(7))
+            o_ptr->artifact_bias = BIAS_ROGUE;
+        break;
+    case 9:
+    case 10:
+        add_flag(o_ptr->art_flags, TR_CON);
+        if (!o_ptr->artifact_bias && !one_in_(13))
+            o_ptr->artifact_bias = BIAS_CON;
+        else if (!o_ptr->artifact_bias && one_in_(9))
+            o_ptr->artifact_bias = BIAS_RANGER;
+        break;
+    case 11:
+    case 12:
+        add_flag(o_ptr->art_flags, TR_CHR);
+        if (!o_ptr->artifact_bias && !one_in_(13))
+            o_ptr->artifact_bias = BIAS_CHR;
+        break;
+    case 13:
+    case 14:
+        add_flag(o_ptr->art_flags, TR_STEALTH);
+        if (!o_ptr->artifact_bias && one_in_(3))
+            o_ptr->artifact_bias = BIAS_ROGUE;
+        break;
+    case 15:
+    case 16:
+        add_flag(o_ptr->art_flags, TR_SEARCH);
+        if (!o_ptr->artifact_bias && one_in_(9))
+            o_ptr->artifact_bias = BIAS_RANGER;
+        break;
+    case 17:
+    case 18:
+        add_flag(o_ptr->art_flags, TR_INFRA);
+        break;
+    case 19:
+        add_flag(o_ptr->art_flags, TR_SPEED);
+        if (!o_ptr->artifact_bias && one_in_(11))
+            o_ptr->artifact_bias = BIAS_ROGUE;
+        break;
+    case 20:
+    case 21:
+        add_flag(o_ptr->art_flags, TR_TUNNEL);
+        break;
+    case 22:
+    case 23:
+        if (o_ptr->tval == TV_BOW)
+            random_plus(o_ptr);
+        else {
+            add_flag(o_ptr->art_flags, TR_BLOWS);
+            if (!o_ptr->artifact_bias && one_in_(11))
+                o_ptr->artifact_bias = BIAS_WARRIOR;
+        }
+
+        break;
+    }
+}
diff --git a/src/artifact/random-art-pval-investor.h b/src/artifact/random-art-pval-investor.h
new file mode 100644 (file)
index 0000000..98db360
--- /dev/null
@@ -0,0 +1,6 @@
+#pragma once
+
+#include "system/angband.h"
+
+typedef struct object_type object_type;
+void random_plus(object_type *o_ptr);
index c3c0980..9ee41e9 100644 (file)
@@ -10,6 +10,7 @@
  */
 
 #include "object-enchant/artifact.h"
+#include "artifact/random-art-pval-investor.h"
 #include "art-definition/art-armor-types.h"
 #include "art-definition/art-protector-types.h"
 #include "art-definition/art-sword-types.h"
@@ -149,247 +150,6 @@ static void curse_artifact(player_type *player_ptr, object_type *o_ptr)
 }
 
 /*!
- * @brief ランダムアーティファクト生成中、対象のオブジェクトにpval能力を付加する。/ Add one pval on generation of randam artifact.
- * @details 優先的に付加されるpvalがランダムアーティファクトバイアスに依存して存在する。
- * 原則的候補は腕力、知力、賢さ、器用さ、耐久、魅力、探索、隠密、赤外線視力、加速。武器のみ採掘、追加攻撃も候補に入る。
- * @attention オブジェクトのtval、svalに依存したハードコーディング処理がある。
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return なし
- */
-static void random_plus(object_type *o_ptr)
-{
-    int this_type = (object_is_weapon_ammo(o_ptr) ? 23 : 19);
-
-    switch (o_ptr->artifact_bias) {
-    case BIAS_WARRIOR:
-        if (!(have_flag(o_ptr->art_flags, TR_STR))) {
-            add_flag(o_ptr->art_flags, TR_STR);
-            if (one_in_(2))
-                return;
-        }
-
-        if (!(have_flag(o_ptr->art_flags, TR_CON))) {
-            add_flag(o_ptr->art_flags, TR_CON);
-            if (one_in_(2))
-                return;
-        }
-
-        if (!(have_flag(o_ptr->art_flags, TR_DEX))) {
-            add_flag(o_ptr->art_flags, TR_DEX);
-            if (one_in_(2))
-                return;
-        }
-
-        break;
-
-    case BIAS_MAGE:
-        if (!(have_flag(o_ptr->art_flags, TR_INT))) {
-            add_flag(o_ptr->art_flags, TR_INT);
-            if (one_in_(2))
-                return;
-        }
-        if ((o_ptr->tval == TV_GLOVES) && !(have_flag(o_ptr->art_flags, TR_MAGIC_MASTERY))) {
-            add_flag(o_ptr->art_flags, TR_MAGIC_MASTERY);
-            if (one_in_(2))
-                return;
-        }
-
-        break;
-
-    case BIAS_PRIESTLY:
-        if (!(have_flag(o_ptr->art_flags, TR_WIS))) {
-            add_flag(o_ptr->art_flags, TR_WIS);
-            if (one_in_(2))
-                return;
-        }
-
-        break;
-
-    case BIAS_RANGER:
-        if (!(have_flag(o_ptr->art_flags, TR_DEX))) {
-            add_flag(o_ptr->art_flags, TR_DEX);
-            if (one_in_(2))
-                return;
-        }
-
-        if (!(have_flag(o_ptr->art_flags, TR_CON))) {
-            add_flag(o_ptr->art_flags, TR_CON);
-            if (one_in_(2))
-                return;
-        }
-
-        if (!(have_flag(o_ptr->art_flags, TR_STR))) {
-            add_flag(o_ptr->art_flags, TR_STR);
-            if (one_in_(2))
-                return;
-        }
-
-        break;
-
-    case BIAS_ROGUE:
-        if (!(have_flag(o_ptr->art_flags, TR_STEALTH))) {
-            add_flag(o_ptr->art_flags, TR_STEALTH);
-            if (one_in_(2))
-                return;
-        }
-        if (!(have_flag(o_ptr->art_flags, TR_SEARCH))) {
-            add_flag(o_ptr->art_flags, TR_SEARCH);
-            if (one_in_(2))
-                return;
-        }
-
-        break;
-
-    case BIAS_STR:
-        if (!(have_flag(o_ptr->art_flags, TR_STR))) {
-            add_flag(o_ptr->art_flags, TR_STR);
-            if (one_in_(2))
-                return;
-        }
-
-        break;
-
-    case BIAS_WIS:
-        if (!(have_flag(o_ptr->art_flags, TR_WIS))) {
-            add_flag(o_ptr->art_flags, TR_WIS);
-            if (one_in_(2))
-                return;
-        }
-
-        break;
-
-    case BIAS_INT:
-        if (!(have_flag(o_ptr->art_flags, TR_INT))) {
-            add_flag(o_ptr->art_flags, TR_INT);
-            if (one_in_(2))
-                return;
-        }
-
-        break;
-
-    case BIAS_DEX:
-        if (!(have_flag(o_ptr->art_flags, TR_DEX))) {
-            add_flag(o_ptr->art_flags, TR_DEX);
-            if (one_in_(2))
-                return;
-        }
-
-        break;
-
-    case BIAS_CON:
-        if (!(have_flag(o_ptr->art_flags, TR_CON))) {
-            add_flag(o_ptr->art_flags, TR_CON);
-            if (one_in_(2))
-                return;
-        }
-
-        break;
-
-    case BIAS_CHR:
-        if (!(have_flag(o_ptr->art_flags, TR_CHR))) {
-            add_flag(o_ptr->art_flags, TR_CHR);
-            if (one_in_(2))
-                return;
-        }
-
-        break;
-    }
-
-    if ((o_ptr->artifact_bias == BIAS_MAGE || o_ptr->artifact_bias == BIAS_PRIESTLY) && (o_ptr->tval == TV_SOFT_ARMOR) && (o_ptr->sval == SV_ROBE)) {
-        if (!(have_flag(o_ptr->art_flags, TR_DEC_MANA)) && one_in_(3)) {
-            add_flag(o_ptr->art_flags, TR_DEC_MANA);
-            if (one_in_(2))
-                return;
-        }
-    }
-
-    switch (randint1(this_type)) {
-    case 1:
-    case 2:
-        add_flag(o_ptr->art_flags, TR_STR);
-        if (!o_ptr->artifact_bias && !one_in_(13))
-            o_ptr->artifact_bias = BIAS_STR;
-        else if (!o_ptr->artifact_bias && one_in_(7))
-            o_ptr->artifact_bias = BIAS_WARRIOR;
-        break;
-    case 3:
-    case 4:
-        add_flag(o_ptr->art_flags, TR_INT);
-        if (!o_ptr->artifact_bias && !one_in_(13))
-            o_ptr->artifact_bias = BIAS_INT;
-        else if (!o_ptr->artifact_bias && one_in_(7))
-            o_ptr->artifact_bias = BIAS_MAGE;
-        break;
-    case 5:
-    case 6:
-        add_flag(o_ptr->art_flags, TR_WIS);
-        if (!o_ptr->artifact_bias && !one_in_(13))
-            o_ptr->artifact_bias = BIAS_WIS;
-        else if (!o_ptr->artifact_bias && one_in_(7))
-            o_ptr->artifact_bias = BIAS_PRIESTLY;
-        break;
-    case 7:
-    case 8:
-        add_flag(o_ptr->art_flags, TR_DEX);
-        if (!o_ptr->artifact_bias && !one_in_(13))
-            o_ptr->artifact_bias = BIAS_DEX;
-        else if (!o_ptr->artifact_bias && one_in_(7))
-            o_ptr->artifact_bias = BIAS_ROGUE;
-        break;
-    case 9:
-    case 10:
-        add_flag(o_ptr->art_flags, TR_CON);
-        if (!o_ptr->artifact_bias && !one_in_(13))
-            o_ptr->artifact_bias = BIAS_CON;
-        else if (!o_ptr->artifact_bias && one_in_(9))
-            o_ptr->artifact_bias = BIAS_RANGER;
-        break;
-    case 11:
-    case 12:
-        add_flag(o_ptr->art_flags, TR_CHR);
-        if (!o_ptr->artifact_bias && !one_in_(13))
-            o_ptr->artifact_bias = BIAS_CHR;
-        break;
-    case 13:
-    case 14:
-        add_flag(o_ptr->art_flags, TR_STEALTH);
-        if (!o_ptr->artifact_bias && one_in_(3))
-            o_ptr->artifact_bias = BIAS_ROGUE;
-        break;
-    case 15:
-    case 16:
-        add_flag(o_ptr->art_flags, TR_SEARCH);
-        if (!o_ptr->artifact_bias && one_in_(9))
-            o_ptr->artifact_bias = BIAS_RANGER;
-        break;
-    case 17:
-    case 18:
-        add_flag(o_ptr->art_flags, TR_INFRA);
-        break;
-    case 19:
-        add_flag(o_ptr->art_flags, TR_SPEED);
-        if (!o_ptr->artifact_bias && one_in_(11))
-            o_ptr->artifact_bias = BIAS_ROGUE;
-        break;
-    case 20:
-    case 21:
-        add_flag(o_ptr->art_flags, TR_TUNNEL);
-        break;
-    case 22:
-    case 23:
-        if (o_ptr->tval == TV_BOW)
-            random_plus(o_ptr);
-        else {
-            add_flag(o_ptr->art_flags, TR_BLOWS);
-            if (!o_ptr->artifact_bias && one_in_(11))
-                o_ptr->artifact_bias = BIAS_WARRIOR;
-        }
-
-        break;
-    }
-}
-
-/*!
  * @brief ランダムアーティファクト生成中、対象のオブジェクトに耐性を付加する。/ Add one resistance on generation of randam artifact.
  * @details 優先的に付加される耐性がランダムアーティファクトバイアスに依存して存在する。
  * 原則的候補は火炎、冷気、電撃、酸(以上免疫の可能性もあり)、