OSDN Git Service

[Refactor] #39970 Separated simple-appraiser.c/h from core.c
authorHourier <hourier@users.sourceforge.jp>
Sat, 9 May 2020 06:51:14 +0000 (15:51 +0900)
committerHourier <hourier@users.sourceforge.jp>
Sat, 9 May 2020 06:51:14 +0000 (15:51 +0900)
Hengband/Hengband/Hengband.vcxproj
Hengband/Hengband/Hengband.vcxproj.filters
src/Makefile.am
src/core.c
src/inventory/simple-appraiser.c [new file with mode: 0644]
src/inventory/simple-appraiser.h [new file with mode: 0644]

index 0496daf..1eb6590 100644 (file)
     <ClCompile Include="..\..\src\effect\effect-player.c" />\r
     <ClCompile Include="..\..\src\effect\spells-effect-util.c" />\r
     <ClCompile Include="..\..\src\floor\pattern-walk.c" />\r
+    <ClCompile Include="..\..\src\inventory\simple-appraiser.c" />\r
     <ClCompile Include="..\..\src\io\dump-remover.c" />\r
     <ClCompile Include="..\..\src\io\mutations-dump.c" />\r
     <ClCompile Include="..\..\src\knowledge\knowledge-autopick.c" />\r
     <ClInclude Include="..\..\src\effect\effect-player.h" />\r
     <ClInclude Include="..\..\src\effect\spells-effect-util.h" />\r
     <ClInclude Include="..\..\src\floor\pattern-walk.h" />\r
+    <ClInclude Include="..\..\src\inventory\simple-appraiser.h" />\r
     <ClInclude Include="..\..\src\io\dump-remover.h" />\r
     <ClInclude Include="..\..\src\io\mutations-dump.h" />\r
     <ClInclude Include="..\..\src\knowledge\knowledge-autopick.h" />\r
index 165f661..0a80926 100644 (file)
     <ClCompile Include="..\..\src\core\turn-compensator.c">
       <Filter>core</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\inventory\simple-appraiser.c">
+      <Filter>inventory</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\src\gamevalue.h" />
     <ClInclude Include="..\..\src\core\turn-compensator.h">
       <Filter>core</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\src\inventory\simple-appraiser.h">
+      <Filter>inventory</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <None Include="..\..\src\wall.bmp" />
     <Filter Include="birth">
       <UniqueIdentifier>{c2383613-69b3-4973-bb9b-6fce783afa1d}</UniqueIdentifier>
     </Filter>
+    <Filter Include="inventory">
+      <UniqueIdentifier>{060db85f-39b1-48fd-8b5f-7409eb6209b2}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="..\..\src\angband.rc" />
index 1f19e19..6000d5b 100644 (file)
@@ -135,6 +135,8 @@ hengband_SOURCES = \
        object/object-kind-hook.c object/object-kind-hook.h \
        object-flavor.c object-flavor.h object-ego.c object-ego.h \
        \
+       inventory/simple-appraiser.c inventory/simple-appraiser.h \
+       \
        patron.h patron.c \
        \
        creature.h creature.c \
@@ -264,8 +266,9 @@ CFLAGS += $(XFT_CFLAGS)
 LIBS += $(XFT_LIBS)
 COMPILE = $(srcdir)/gcc-wrap $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
        $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) \
-       -Iautopick -Ibirth -Icmd -Icombat -Icore -Ieffect -Ifloor -Iio -Iknowledge \
-       -Imarket -Imonster -Iobject -Iplayer -Irealm -Iroom -Ispell -Iview
+       -Iautopick -Ibirth -Icmd -Icombat -Icore -Ieffect -Ifloor -Iinventory -Iio \
+       -Iknowledge -Imarket -Imonster -Iobject -Iplayer -Irealm -Iroom -Ispell \
+       -Iview
 
 install-exec-hook:
 if SET_GID
index 7e73c3a..2e53473 100644 (file)
@@ -76,7 +76,6 @@
 #include "market/store-util.h"
 #include "quest.h"
 #include "artifact.h"
-#include "avatar.h"
 #include "view/display-player.h"
 #include "player/process-name.h"
 #include "player-move.h"
 #include "io/read-pref-file.h"
 #include "files.h"
 #include "scores.h"
-#include "autopick/autopick.h"
 #include "autopick/autopick-pref-processor.h"
 #include "autopick/autopick-reader-writer.h"
 #include "save.h"
 #include "core/game-closer.h"
 #include "floor/pattern-walk.h"
 #include "core/turn-compensator.h"
+#include "inventory/simple-appraiser.h"
 
  /*!
   * コピーライト情報 /
@@ -158,385 +157,6 @@ static int wild_regen = 20; /*!<広域マップ移動時の自然回復処理カ
 int init_flags;
 
 /*!
- * @brief 擬似鑑定を実際に行い判定を反映する
- * @param slot 擬似鑑定を行うプレイヤーの所持リストID
- * @param creature_ptr プレーヤーへの参照ポインタ
- * @param heavy 重度の擬似鑑定を行うならばTRUE
- * @return なし
- */
-static void sense_inventory_aux(player_type *creature_ptr, INVENTORY_IDX slot, bool heavy)
-{
-       byte feel;
-       object_type *o_ptr = &creature_ptr->inventory_list[slot];
-       GAME_TEXT o_name[MAX_NLEN];
-       if (o_ptr->ident & (IDENT_SENSE))return;
-       if (object_is_known(o_ptr)) return;
-
-       feel = (heavy ? value_check_aux1(o_ptr) : value_check_aux2(o_ptr));
-       if (!feel) return;
-
-       if ((creature_ptr->muta3 & MUT3_BAD_LUCK) && !randint0(13))
-       {
-               switch (feel)
-               {
-               case FEEL_TERRIBLE:
-               {
-                       feel = FEEL_SPECIAL;
-                       break;
-               }
-               case FEEL_WORTHLESS:
-               {
-                       feel = FEEL_EXCELLENT;
-                       break;
-               }
-               case FEEL_CURSED:
-               {
-                       if (heavy)
-                               feel = randint0(3) ? FEEL_GOOD : FEEL_AVERAGE;
-                       else
-                               feel = FEEL_UNCURSED;
-                       break;
-               }
-               case FEEL_AVERAGE:
-               {
-                       feel = randint0(2) ? FEEL_CURSED : FEEL_GOOD;
-                       break;
-               }
-               case FEEL_GOOD:
-               {
-                       if (heavy)
-                               feel = randint0(3) ? FEEL_CURSED : FEEL_AVERAGE;
-                       else
-                               feel = FEEL_CURSED;
-                       break;
-               }
-               case FEEL_EXCELLENT:
-               {
-                       feel = FEEL_WORTHLESS;
-                       break;
-               }
-               case FEEL_SPECIAL:
-               {
-                       feel = FEEL_TERRIBLE;
-                       break;
-               }
-               }
-       }
-
-       if (disturb_minor) disturb(creature_ptr, FALSE, FALSE);
-
-       object_desc(creature_ptr, o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
-       if (slot >= INVEN_RARM)
-       {
-#ifdef JP
-               msg_format("%s%s(%c)は%sという感じがする...",
-                       describe_use(creature_ptr, slot), o_name, index_to_label(slot), game_inscriptions[feel]);
-#else
-               msg_format("You feel the %s (%c) you are %s %s %s...",
-                       o_name, index_to_label(slot), describe_use(creature_ptr, slot),
-                       ((o_ptr->number == 1) ? "is" : "are"),
-                       game_inscriptions[feel]);
-#endif
-
-       }
-       else
-       {
-#ifdef JP
-               msg_format("ザックの中の%s(%c)は%sという感じがする...",
-                       o_name, index_to_label(slot), game_inscriptions[feel]);
-#else
-               msg_format("You feel the %s (%c) in your pack %s %s...",
-                       o_name, index_to_label(slot),
-                       ((o_ptr->number == 1) ? "is" : "are"),
-                       game_inscriptions[feel]);
-#endif
-
-       }
-
-       o_ptr->ident |= (IDENT_SENSE);
-       o_ptr->feeling = feel;
-
-       autopick_alter_item(creature_ptr, slot, destroy_feeling);
-       creature_ptr->update |= (PU_COMBINE | PU_REORDER);
-       creature_ptr->window |= (PW_INVEN | PW_EQUIP);
-}
-
-
-/*!
- * @brief 1プレイヤーターン毎に武器、防具の擬似鑑定が行われるかを判定する。
- * @return なし
- * @details
- * Sense the inventory\n
- *\n
- *   Class 0 = Warrior --> fast and heavy\n
- *   Class 1 = Mage    --> slow and light\n
- *   Class 2 = Priest  --> fast but light\n
- *   Class 3 = Rogue   --> okay and heavy\n
- *   Class 4 = Ranger  --> slow but heavy  (changed!)\n
- *   Class 5 = Paladin --> slow but heavy\n
- */
-static void sense_inventory1(player_type *creature_ptr)
-{
-       PLAYER_LEVEL plev = creature_ptr->lev;
-       bool heavy = FALSE;
-       object_type *o_ptr;
-       if (creature_ptr->confused) return;
-
-       switch (creature_ptr->pclass)
-       {
-       case CLASS_WARRIOR:
-       case CLASS_ARCHER:
-       case CLASS_SAMURAI:
-       case CLASS_CAVALRY:
-       {
-               if (0 != randint0(9000L / (plev * plev + 40))) return;
-
-               heavy = TRUE;
-               break;
-       }
-       case CLASS_SMITH:
-       {
-               if (0 != randint0(6000L / (plev * plev + 50))) return;
-
-               heavy = TRUE;
-               break;
-       }
-       case CLASS_MAGE:
-       case CLASS_HIGH_MAGE:
-       case CLASS_SORCERER:
-       case CLASS_MAGIC_EATER:
-       {
-               if (0 != randint0(240000L / (plev + 5))) return;
-
-               break;
-       }
-       case CLASS_PRIEST:
-       case CLASS_BARD:
-       {
-               if (0 != randint0(10000L / (plev * plev + 40))) return;
-
-               break;
-       }
-       case CLASS_ROGUE:
-       case CLASS_NINJA:
-       {
-               if (0 != randint0(20000L / (plev * plev + 40))) return;
-
-               heavy = TRUE;
-               break;
-       }
-       case CLASS_RANGER:
-       {
-               if (0 != randint0(95000L / (plev * plev + 40))) return;
-
-               heavy = TRUE;
-               break;
-       }
-       case CLASS_PALADIN:
-       case CLASS_SNIPER:
-       {
-               if (0 != randint0(77777L / (plev * plev + 40))) return;
-
-               heavy = TRUE;
-               break;
-       }
-       case CLASS_WARRIOR_MAGE:
-       case CLASS_RED_MAGE:
-       {
-               if (0 != randint0(75000L / (plev * plev + 40))) return;
-
-               break;
-       }
-       case CLASS_MINDCRAFTER:
-       case CLASS_IMITATOR:
-       case CLASS_BLUE_MAGE:
-       case CLASS_MIRROR_MASTER:
-       {
-               if (0 != randint0(55000L / (plev * plev + 40))) return;
-
-               break;
-       }
-       case CLASS_CHAOS_WARRIOR:
-       {
-               if (0 != randint0(80000L / (plev * plev + 40))) return;
-
-               heavy = TRUE;
-               break;
-       }
-       case CLASS_MONK:
-       case CLASS_FORCETRAINER:
-       {
-               if (0 != randint0(20000L / (plev * plev + 40))) return;
-
-               break;
-       }
-       case CLASS_TOURIST:
-       {
-               if (0 != randint0(20000L / ((plev + 50)*(plev + 50)))) return;
-
-               heavy = TRUE;
-               break;
-       }
-       case CLASS_BEASTMASTER:
-       {
-               if (0 != randint0(65000L / (plev * plev + 40))) return;
-
-               break;
-       }
-       case CLASS_BERSERKER:
-       {
-               heavy = TRUE;
-               break;
-       }
-       }
-
-       if (compare_virtue(creature_ptr, V_KNOWLEDGE, 100, VIRTUE_LARGE)) heavy = TRUE;
-
-       for (INVENTORY_IDX i = 0; i < INVEN_TOTAL; i++)
-       {
-               bool okay = FALSE;
-
-               o_ptr = &creature_ptr->inventory_list[i];
-
-               if (!o_ptr->k_idx) continue;
-
-               switch (o_ptr->tval)
-               {
-               case TV_SHOT:
-               case TV_ARROW:
-               case TV_BOLT:
-               case TV_BOW:
-               case TV_DIGGING:
-               case TV_HAFTED:
-               case TV_POLEARM:
-               case TV_SWORD:
-               case TV_BOOTS:
-               case TV_GLOVES:
-               case TV_HELM:
-               case TV_CROWN:
-               case TV_SHIELD:
-               case TV_CLOAK:
-               case TV_SOFT_ARMOR:
-               case TV_HARD_ARMOR:
-               case TV_DRAG_ARMOR:
-               case TV_CARD:
-               {
-                       okay = TRUE;
-                       break;
-               }
-               }
-
-               if (!okay) continue;
-               if ((i < INVEN_RARM) && (0 != randint0(5))) continue;
-
-               if ((creature_ptr->muta3 & MUT3_GOOD_LUCK) && !randint0(13))
-               {
-                       heavy = TRUE;
-               }
-
-               sense_inventory_aux(creature_ptr, i, heavy);
-       }
-}
-
-
-/*!
- * @brief 1プレイヤーターン毎に武器、防具以外の擬似鑑定が行われるかを判定する。
- * @return なし
- */
-static void sense_inventory2(player_type *creature_ptr)
-{
-       PLAYER_LEVEL plev = creature_ptr->lev;
-       object_type *o_ptr;
-
-       if (creature_ptr->confused) return;
-
-       switch (creature_ptr->pclass)
-       {
-       case CLASS_WARRIOR:
-       case CLASS_ARCHER:
-       case CLASS_SAMURAI:
-       case CLASS_CAVALRY:
-       case CLASS_BERSERKER:
-       case CLASS_SNIPER:
-       {
-               return;
-       }
-       case CLASS_SMITH:
-       case CLASS_PALADIN:
-       case CLASS_CHAOS_WARRIOR:
-       case CLASS_IMITATOR:
-       case CLASS_BEASTMASTER:
-       case CLASS_NINJA:
-       {
-               if (0 != randint0(240000L / (plev + 5))) return;
-
-               break;
-       }
-       case CLASS_RANGER:
-       case CLASS_WARRIOR_MAGE:
-       case CLASS_RED_MAGE:
-       case CLASS_MONK:
-       {
-               if (0 != randint0(95000L / (plev * plev + 40))) return;
-
-               break;
-       }
-       case CLASS_PRIEST:
-       case CLASS_BARD:
-       case CLASS_ROGUE:
-       case CLASS_FORCETRAINER:
-       case CLASS_MINDCRAFTER:
-       {
-               if (0 != randint0(20000L / (plev * plev + 40))) return;
-
-               break;
-       }
-       case CLASS_MAGE:
-       case CLASS_HIGH_MAGE:
-       case CLASS_SORCERER:
-       case CLASS_MAGIC_EATER:
-       case CLASS_MIRROR_MASTER:
-       case CLASS_BLUE_MAGE:
-       {
-               if (0 != randint0(9000L / (plev * plev + 40))) return;
-
-               break;
-       }
-       case CLASS_TOURIST:
-       {
-               if (0 != randint0(20000L / ((plev + 50)*(plev + 50)))) return;
-
-               break;
-       }
-       }
-
-       for (INVENTORY_IDX i = 0; i < INVEN_TOTAL; i++)
-       {
-               bool okay = FALSE;
-               o_ptr = &creature_ptr->inventory_list[i];
-               if (!o_ptr->k_idx) continue;
-
-               switch (o_ptr->tval)
-               {
-               case TV_RING:
-               case TV_AMULET:
-               case TV_LITE:
-               case TV_FIGURINE:
-               {
-                       okay = TRUE;
-                       break;
-               }
-               }
-
-               if (!okay) continue;
-               if ((i < INVEN_RARM) && (0 != randint0(5))) continue;
-
-               sense_inventory_aux(creature_ptr, i, TRUE);
-       }
-}
-
-
-/*!
  * @brief プレイヤーのHP自然回復処理 / Regenerate hit points -RAK-
  * @param percent 回復比率
  * @return なし
diff --git a/src/inventory/simple-appraiser.c b/src/inventory/simple-appraiser.c
new file mode 100644 (file)
index 0000000..c18b502
--- /dev/null
@@ -0,0 +1,374 @@
+#include "angband.h"
+#include "inventory/simple-appraiser.h"
+#include "object-flavor.h"
+#include "avatar.h"
+#include "object-hook.h"
+#include "object/object-kind.h"
+#include "player-move.h"
+#include "player-inventory.h"
+#include "autopick/autopick.h"
+
+/*!
+ * @brief \8b[\8e\97\8aÓ\92è\82ð\8eÀ\8dÛ\82É\8ds\82¢\94»\92è\82ð\94½\89f\82·\82é
+ * @param slot \8b[\8e\97\8aÓ\92è\82ð\8ds\82¤\83v\83\8c\83C\83\84\81[\82Ì\8f\8a\8e\9d\83\8a\83X\83gID
+ * @param creature_ptr \83v\83\8c\81[\83\84\81[\82Ö\82Ì\8eQ\8fÆ\83|\83C\83\93\83^
+ * @param heavy \8fd\93x\82Ì\8b[\8e\97\8aÓ\92è\82ð\8ds\82¤\82È\82ç\82ÎTRUE
+ * @return \82È\82µ
+ */
+static void sense_inventory_aux(player_type* creature_ptr, INVENTORY_IDX slot, bool heavy)
+{
+    byte feel;
+    object_type* o_ptr = &creature_ptr->inventory_list[slot];
+    GAME_TEXT o_name[MAX_NLEN];
+    if (o_ptr->ident & (IDENT_SENSE))
+        return;
+    if (object_is_known(o_ptr))
+        return;
+
+    feel = (heavy ? value_check_aux1(o_ptr) : value_check_aux2(o_ptr));
+    if (!feel)
+        return;
+
+    if ((creature_ptr->muta3 & MUT3_BAD_LUCK) && !randint0(13)) {
+        switch (feel) {
+        case FEEL_TERRIBLE: {
+            feel = FEEL_SPECIAL;
+            break;
+        }
+        case FEEL_WORTHLESS: {
+            feel = FEEL_EXCELLENT;
+            break;
+        }
+        case FEEL_CURSED: {
+            if (heavy)
+                feel = randint0(3) ? FEEL_GOOD : FEEL_AVERAGE;
+            else
+                feel = FEEL_UNCURSED;
+            break;
+        }
+        case FEEL_AVERAGE: {
+            feel = randint0(2) ? FEEL_CURSED : FEEL_GOOD;
+            break;
+        }
+        case FEEL_GOOD: {
+            if (heavy)
+                feel = randint0(3) ? FEEL_CURSED : FEEL_AVERAGE;
+            else
+                feel = FEEL_CURSED;
+            break;
+        }
+        case FEEL_EXCELLENT: {
+            feel = FEEL_WORTHLESS;
+            break;
+        }
+        case FEEL_SPECIAL: {
+            feel = FEEL_TERRIBLE;
+            break;
+        }
+        }
+    }
+
+    if (disturb_minor)
+        disturb(creature_ptr, FALSE, FALSE);
+
+    object_desc(creature_ptr, o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
+    if (slot >= INVEN_RARM) {
+#ifdef JP
+        msg_format("%s%s(%c)\82Í%s\82Æ\82¢\82¤\8a´\82\82ª\82·\82é...",
+            describe_use(creature_ptr, slot), o_name, index_to_label(slot), game_inscriptions[feel]);
+#else
+        msg_format("You feel the %s (%c) you are %s %s %s...",
+            o_name, index_to_label(slot), describe_use(creature_ptr, slot),
+            ((o_ptr->number == 1) ? "is" : "are"),
+            game_inscriptions[feel]);
+#endif
+
+    } else {
+#ifdef JP
+        msg_format("\83U\83b\83N\82Ì\92\86\82Ì%s(%c)\82Í%s\82Æ\82¢\82¤\8a´\82\82ª\82·\82é...",
+            o_name, index_to_label(slot), game_inscriptions[feel]);
+#else
+        msg_format("You feel the %s (%c) in your pack %s %s...",
+            o_name, index_to_label(slot),
+            ((o_ptr->number == 1) ? "is" : "are"),
+            game_inscriptions[feel]);
+#endif
+    }
+
+    o_ptr->ident |= (IDENT_SENSE);
+    o_ptr->feeling = feel;
+
+    autopick_alter_item(creature_ptr, slot, destroy_feeling);
+    creature_ptr->update |= (PU_COMBINE | PU_REORDER);
+    creature_ptr->window |= (PW_INVEN | PW_EQUIP);
+}
+
+/*!
+ * @brief 1\83v\83\8c\83C\83\84\81[\83^\81[\83\93\96\88\82É\95\90\8aí\81A\96h\8bï\82Ì\8b[\8e\97\8aÓ\92è\82ª\8ds\82í\82ê\82é\82©\82ð\94»\92è\82·\82é\81B
+ * @return \82È\82µ
+ * @details
+ * Sense the inventory\n
+ *\n
+ *   Class 0 = Warrior --> fast and heavy\n
+ *   Class 1 = Mage    --> slow and light\n
+ *   Class 2 = Priest  --> fast but light\n
+ *   Class 3 = Rogue   --> okay and heavy\n
+ *   Class 4 = Ranger  --> slow but heavy  (changed!)\n
+ *   Class 5 = Paladin --> slow but heavy\n
+ */
+void sense_inventory1(player_type* creature_ptr)
+{
+    PLAYER_LEVEL plev = creature_ptr->lev;
+    bool heavy = FALSE;
+    object_type* o_ptr;
+    if (creature_ptr->confused)
+        return;
+
+    switch (creature_ptr->pclass) {
+    case CLASS_WARRIOR:
+    case CLASS_ARCHER:
+    case CLASS_SAMURAI:
+    case CLASS_CAVALRY: {
+        if (0 != randint0(9000L / (plev * plev + 40)))
+            return;
+
+        heavy = TRUE;
+        break;
+    }
+    case CLASS_SMITH: {
+        if (0 != randint0(6000L / (plev * plev + 50)))
+            return;
+
+        heavy = TRUE;
+        break;
+    }
+    case CLASS_MAGE:
+    case CLASS_HIGH_MAGE:
+    case CLASS_SORCERER:
+    case CLASS_MAGIC_EATER: {
+        if (0 != randint0(240000L / (plev + 5)))
+            return;
+
+        break;
+    }
+    case CLASS_PRIEST:
+    case CLASS_BARD: {
+        if (0 != randint0(10000L / (plev * plev + 40)))
+            return;
+
+        break;
+    }
+    case CLASS_ROGUE:
+    case CLASS_NINJA: {
+        if (0 != randint0(20000L / (plev * plev + 40)))
+            return;
+
+        heavy = TRUE;
+        break;
+    }
+    case CLASS_RANGER: {
+        if (0 != randint0(95000L / (plev * plev + 40)))
+            return;
+
+        heavy = TRUE;
+        break;
+    }
+    case CLASS_PALADIN:
+    case CLASS_SNIPER: {
+        if (0 != randint0(77777L / (plev * plev + 40)))
+            return;
+
+        heavy = TRUE;
+        break;
+    }
+    case CLASS_WARRIOR_MAGE:
+    case CLASS_RED_MAGE: {
+        if (0 != randint0(75000L / (plev * plev + 40)))
+            return;
+
+        break;
+    }
+    case CLASS_MINDCRAFTER:
+    case CLASS_IMITATOR:
+    case CLASS_BLUE_MAGE:
+    case CLASS_MIRROR_MASTER: {
+        if (0 != randint0(55000L / (plev * plev + 40)))
+            return;
+
+        break;
+    }
+    case CLASS_CHAOS_WARRIOR: {
+        if (0 != randint0(80000L / (plev * plev + 40)))
+            return;
+
+        heavy = TRUE;
+        break;
+    }
+    case CLASS_MONK:
+    case CLASS_FORCETRAINER: {
+        if (0 != randint0(20000L / (plev * plev + 40)))
+            return;
+
+        break;
+    }
+    case CLASS_TOURIST: {
+        if (0 != randint0(20000L / ((plev + 50) * (plev + 50))))
+            return;
+
+        heavy = TRUE;
+        break;
+    }
+    case CLASS_BEASTMASTER: {
+        if (0 != randint0(65000L / (plev * plev + 40)))
+            return;
+
+        break;
+    }
+    case CLASS_BERSERKER: {
+        heavy = TRUE;
+        break;
+    }
+    }
+
+    if (compare_virtue(creature_ptr, V_KNOWLEDGE, 100, VIRTUE_LARGE))
+        heavy = TRUE;
+
+    for (INVENTORY_IDX i = 0; i < INVEN_TOTAL; i++) {
+        bool okay = FALSE;
+
+        o_ptr = &creature_ptr->inventory_list[i];
+
+        if (!o_ptr->k_idx)
+            continue;
+
+        switch (o_ptr->tval) {
+        case TV_SHOT:
+        case TV_ARROW:
+        case TV_BOLT:
+        case TV_BOW:
+        case TV_DIGGING:
+        case TV_HAFTED:
+        case TV_POLEARM:
+        case TV_SWORD:
+        case TV_BOOTS:
+        case TV_GLOVES:
+        case TV_HELM:
+        case TV_CROWN:
+        case TV_SHIELD:
+        case TV_CLOAK:
+        case TV_SOFT_ARMOR:
+        case TV_HARD_ARMOR:
+        case TV_DRAG_ARMOR:
+        case TV_CARD: {
+            okay = TRUE;
+            break;
+        }
+        }
+
+        if (!okay)
+            continue;
+        if ((i < INVEN_RARM) && (0 != randint0(5)))
+            continue;
+
+        if ((creature_ptr->muta3 & MUT3_GOOD_LUCK) && !randint0(13)) {
+            heavy = TRUE;
+        }
+
+        sense_inventory_aux(creature_ptr, i, heavy);
+    }
+}
+
+/*!
+ * @brief 1\83v\83\8c\83C\83\84\81[\83^\81[\83\93\96\88\82É\95\90\8aí\81A\96h\8bï\88È\8aO\82Ì\8b[\8e\97\8aÓ\92è\82ª\8ds\82í\82ê\82é\82©\82ð\94»\92è\82·\82é\81B
+ * @return \82È\82µ
+ */
+void sense_inventory2(player_type* creature_ptr)
+{
+    PLAYER_LEVEL plev = creature_ptr->lev;
+    object_type* o_ptr;
+
+    if (creature_ptr->confused)
+        return;
+
+    switch (creature_ptr->pclass) {
+    case CLASS_WARRIOR:
+    case CLASS_ARCHER:
+    case CLASS_SAMURAI:
+    case CLASS_CAVALRY:
+    case CLASS_BERSERKER:
+    case CLASS_SNIPER: {
+        return;
+    }
+    case CLASS_SMITH:
+    case CLASS_PALADIN:
+    case CLASS_CHAOS_WARRIOR:
+    case CLASS_IMITATOR:
+    case CLASS_BEASTMASTER:
+    case CLASS_NINJA: {
+        if (0 != randint0(240000L / (plev + 5)))
+            return;
+
+        break;
+    }
+    case CLASS_RANGER:
+    case CLASS_WARRIOR_MAGE:
+    case CLASS_RED_MAGE:
+    case CLASS_MONK: {
+        if (0 != randint0(95000L / (plev * plev + 40)))
+            return;
+
+        break;
+    }
+    case CLASS_PRIEST:
+    case CLASS_BARD:
+    case CLASS_ROGUE:
+    case CLASS_FORCETRAINER:
+    case CLASS_MINDCRAFTER: {
+        if (0 != randint0(20000L / (plev * plev + 40)))
+            return;
+
+        break;
+    }
+    case CLASS_MAGE:
+    case CLASS_HIGH_MAGE:
+    case CLASS_SORCERER:
+    case CLASS_MAGIC_EATER:
+    case CLASS_MIRROR_MASTER:
+    case CLASS_BLUE_MAGE: {
+        if (0 != randint0(9000L / (plev * plev + 40)))
+            return;
+
+        break;
+    }
+    case CLASS_TOURIST: {
+        if (0 != randint0(20000L / ((plev + 50) * (plev + 50))))
+            return;
+
+        break;
+    }
+    }
+
+    for (INVENTORY_IDX i = 0; i < INVEN_TOTAL; i++) {
+        bool okay = FALSE;
+        o_ptr = &creature_ptr->inventory_list[i];
+        if (!o_ptr->k_idx)
+            continue;
+
+        switch (o_ptr->tval) {
+        case TV_RING:
+        case TV_AMULET:
+        case TV_LITE:
+        case TV_FIGURINE: {
+            okay = TRUE;
+            break;
+        }
+        }
+
+        if (!okay)
+            continue;
+        if ((i < INVEN_RARM) && (0 != randint0(5)))
+            continue;
+
+        sense_inventory_aux(creature_ptr, i, TRUE);
+    }
+}
diff --git a/src/inventory/simple-appraiser.h b/src/inventory/simple-appraiser.h
new file mode 100644 (file)
index 0000000..3d515b0
--- /dev/null
@@ -0,0 +1,4 @@
+#pragma once
+
+void sense_inventory1(player_type* creature_ptr);
+void sense_inventory2(player_type* creature_ptr);