OSDN Git Service

[Refactor] enum classの型名変更 MUTA -> PlayerMutationType
[hengbandforosx/hengbandosx.git] / src / perception / simple-perception.cpp
index 7f92248..88b0c4e 100644 (file)
@@ -6,6 +6,7 @@
 
 #include "perception/simple-perception.h"
 #include "autopick/autopick.h"
+#include "avatar/avatar.h"
 #include "core/disturbance.h"
 #include "core/player-update-types.h"
 #include "core/window-redrawer.h"
 #include "inventory/inventory-slot-types.h"
 #include "mutation/mutation-flag-types.h"
 #include "object-enchant/special-object-flags.h"
-#include "object-hook/hook-checker.h"
-#include "object-hook/hook-enchant.h"
 #include "object/object-info.h"
 #include "perception/object-perception.h"
-#include "player-info/avatar.h"
-#include "view/display-messages.h"
 #include "player/player-status-flags.h"
+#include "system/object-type-definition.h"
+#include "system/player-type-definition.h"
+#include "view/display-messages.h"
 
 /*!
  * @brief 擬似鑑定を実際に行い判定を反映する
  * @param slot 擬似鑑定を行うプレイヤーの所持リストID
- * @param creature_ptr プレーヤーへの参照ポインタ
+ * @param player_ptr プレイヤーへの参照ポインタ
  * @param heavy 重度の擬似鑑定を行うならばTRUE
- * @return なし
  */
-static void sense_inventory_aux(player_type *creature_ptr, INVENTORY_IDX slot, bool heavy)
+static void sense_inventory_aux(player_type *player_ptr, INVENTORY_IDX slot, bool heavy)
 {
-    object_type *o_ptr = &creature_ptr->inventory_list[slot];
+    object_type *o_ptr = &player_ptr->inventory_list[slot];
     GAME_TEXT o_name[MAX_NLEN];
     if (o_ptr->ident & (IDENT_SENSE))
         return;
-    if (object_is_known(o_ptr))
+    if (o_ptr->is_known())
         return;
 
     item_feel_type feel = (heavy ? pseudo_value_check_heavy(o_ptr) : pseudo_value_check_light(o_ptr));
     if (!feel)
         return;
 
-    if ((creature_ptr->muta3 & MUT3_BAD_LUCK) && !randint0(13)) {
+    if ((player_ptr->muta.has(PlayerMutationType::BAD_LUCK)) && !randint0(13)) {
         switch (feel) {
         case FEEL_TERRIBLE: {
             feel = FEEL_SPECIAL;
@@ -89,14 +88,14 @@ static void sense_inventory_aux(player_type *creature_ptr, INVENTORY_IDX slot, b
     }
 
     if (disturb_minor)
-        disturb(creature_ptr, FALSE, FALSE);
+        disturb(player_ptr, false, false);
 
-    describe_flavor(creature_ptr, o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
+    describe_flavor(player_ptr, o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
     if (slot >= INVEN_MAIN_HAND) {
 #ifdef JP
-        msg_format("%s%s(%c)は%sという感じがする...", describe_use(creature_ptr, slot), o_name, index_to_label(slot), game_inscriptions[feel]);
+        msg_format("%s%s(%c)は%sという感じがする...", describe_use(player_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),
+        msg_format("You feel the %s (%c) you are %s %s %s...", o_name, index_to_label(slot), describe_use(player_ptr, slot),
             ((o_ptr->number == 1) ? "is" : "are"), game_inscriptions[feel]);
 #endif
 
@@ -111,14 +110,13 @@ static void sense_inventory_aux(player_type *creature_ptr, INVENTORY_IDX slot, b
     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_flags |= (PW_INVEN | PW_EQUIP);
+    autopick_alter_item(player_ptr, slot, destroy_feeling);
+    player_ptr->update |= (PU_COMBINE | PU_REORDER);
+    player_ptr->window_flags |= (PW_INVEN | PW_EQUIP);
 }
 
 /*!
  * @brief 1プレイヤーターン毎に武器、防具の擬似鑑定が行われるかを判定する。
- * @return なし
  * @details
  * Sense the inventory\n
  *\n
@@ -129,155 +127,155 @@ static void sense_inventory_aux(player_type *creature_ptr, INVENTORY_IDX slot, b
  *   Class 4 = Ranger  --> slow but heavy  (changed!)\n
  *   Class 5 = Paladin --> slow but heavy\n
  */
-void sense_inventory1(player_type *creature_ptr)
+void sense_inventory1(player_type *player_ptr)
 {
-    PLAYER_LEVEL plev = creature_ptr->lev;
-    bool heavy = FALSE;
+    PLAYER_LEVEL plev = player_ptr->lev;
+    bool heavy = false;
     object_type *o_ptr;
-    if (creature_ptr->confused)
+    if (player_ptr->confused)
         return;
 
-    switch (creature_ptr->pclass) {
-    case CLASS_WARRIOR:
-    case CLASS_ARCHER:
-    case CLASS_SAMURAI:
-    case CLASS_CAVALRY: {
+    switch (player_ptr->pclass) {
+    case PlayerClassType::WARRIOR:
+    case PlayerClassType::ARCHER:
+    case PlayerClassType::SAMURAI:
+    case PlayerClassType::CAVALRY: {
         if (0 != randint0(9000L / (plev * plev + 40)))
             return;
 
-        heavy = TRUE;
+        heavy = true;
         break;
     }
-    case CLASS_SMITH: {
+    case PlayerClassType::SMITH: {
         if (0 != randint0(6000L / (plev * plev + 50)))
             return;
 
-        heavy = TRUE;
+        heavy = true;
         break;
     }
-    case CLASS_MAGE:
-    case CLASS_HIGH_MAGE:
-    case CLASS_SORCERER:
-    case CLASS_MAGIC_EATER:
-    case CLASS_ELEMENTALIST: {
+    case PlayerClassType::MAGE:
+    case PlayerClassType::HIGH_MAGE:
+    case PlayerClassType::SORCERER:
+    case PlayerClassType::MAGIC_EATER:
+    case PlayerClassType::ELEMENTALIST: {
         if (0 != randint0(240000L / (plev + 5)))
             return;
 
         break;
     }
-    case CLASS_PRIEST:
-    case CLASS_BARD: {
+    case PlayerClassType::PRIEST:
+    case PlayerClassType::BARD: {
         if (0 != randint0(10000L / (plev * plev + 40)))
             return;
 
         break;
     }
-    case CLASS_ROGUE:
-    case CLASS_NINJA: {
+    case PlayerClassType::ROGUE:
+    case PlayerClassType::NINJA: {
         if (0 != randint0(20000L / (plev * plev + 40)))
             return;
 
-        heavy = TRUE;
+        heavy = true;
         break;
     }
-    case CLASS_RANGER: {
+    case PlayerClassType::RANGER: {
         if (0 != randint0(95000L / (plev * plev + 40)))
             return;
 
-        heavy = TRUE;
+        heavy = true;
         break;
     }
-    case CLASS_PALADIN:
-    case CLASS_SNIPER: {
+    case PlayerClassType::PALADIN:
+    case PlayerClassType::SNIPER: {
         if (0 != randint0(77777L / (plev * plev + 40)))
             return;
 
-        heavy = TRUE;
+        heavy = true;
         break;
     }
-    case CLASS_WARRIOR_MAGE:
-    case CLASS_RED_MAGE: {
+    case PlayerClassType::WARRIOR_MAGE:
+    case PlayerClassType::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: {
+    case PlayerClassType::MINDCRAFTER:
+    case PlayerClassType::IMITATOR:
+    case PlayerClassType::BLUE_MAGE:
+    case PlayerClassType::MIRROR_MASTER: {
         if (0 != randint0(55000L / (plev * plev + 40)))
             return;
 
         break;
     }
-    case CLASS_CHAOS_WARRIOR: {
+    case PlayerClassType::CHAOS_WARRIOR: {
         if (0 != randint0(80000L / (plev * plev + 40)))
             return;
 
-        heavy = TRUE;
+        heavy = true;
         break;
     }
-    case CLASS_MONK:
-    case CLASS_FORCETRAINER: {
+    case PlayerClassType::MONK:
+    case PlayerClassType::FORCETRAINER: {
         if (0 != randint0(20000L / (plev * plev + 40)))
             return;
 
         break;
     }
-    case CLASS_TOURIST: {
+    case PlayerClassType::TOURIST: {
         if (0 != randint0(20000L / ((plev + 50) * (plev + 50))))
             return;
 
-        heavy = TRUE;
+        heavy = true;
         break;
     }
-    case CLASS_BEASTMASTER: {
+    case PlayerClassType::BEASTMASTER: {
         if (0 != randint0(65000L / (plev * plev + 40)))
             return;
 
         break;
     }
-    case CLASS_BERSERKER: {
-        heavy = TRUE;
+    case PlayerClassType::BERSERKER: {
+        heavy = true;
         break;
     }
 
-    case MAX_CLASS:
+    case PlayerClassType::MAX:
         break;
     }
 
-    if (compare_virtue(creature_ptr, V_KNOWLEDGE, 100, VIRTUE_LARGE))
-        heavy = TRUE;
+    if (compare_virtue(player_ptr, V_KNOWLEDGE, 100, VIRTUE_LARGE))
+        heavy = true;
 
     for (INVENTORY_IDX i = 0; i < INVEN_TOTAL; i++) {
-        bool okay = FALSE;
+        bool okay = false;
 
-        o_ptr = &creature_ptr->inventory_list[i];
+        o_ptr = &player_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;
+        case ItemKindType::SHOT:
+        case ItemKindType::ARROW:
+        case ItemKindType::BOLT:
+        case ItemKindType::BOW:
+        case ItemKindType::DIGGING:
+        case ItemKindType::HAFTED:
+        case ItemKindType::POLEARM:
+        case ItemKindType::SWORD:
+        case ItemKindType::BOOTS:
+        case ItemKindType::GLOVES:
+        case ItemKindType::HELM:
+        case ItemKindType::CROWN:
+        case ItemKindType::SHIELD:
+        case ItemKindType::CLOAK:
+        case ItemKindType::SOFT_ARMOR:
+        case ItemKindType::HARD_ARMOR:
+        case ItemKindType::DRAG_ARMOR:
+        case ItemKindType::CARD: {
+            okay = true;
             break;
         }
 
@@ -290,100 +288,99 @@ void sense_inventory1(player_type *creature_ptr)
         if ((i < INVEN_MAIN_HAND) && (0 != randint0(5)))
             continue;
 
-        if (has_good_luck(creature_ptr) && !randint0(13)) {
-            heavy = TRUE;
+        if (has_good_luck(player_ptr) && !randint0(13)) {
+            heavy = true;
         }
 
-        sense_inventory_aux(creature_ptr, i, heavy);
+        sense_inventory_aux(player_ptr, i, heavy);
     }
 }
 
 /*!
  * @brief 1プレイヤーターン毎に武器、防具以外の擬似鑑定が行われるかを判定する。
- * @return なし
  */
-void sense_inventory2(player_type *creature_ptr)
+void sense_inventory2(player_type *player_ptr)
 {
-    PLAYER_LEVEL plev = creature_ptr->lev;
+    PLAYER_LEVEL plev = player_ptr->lev;
     object_type *o_ptr;
 
-    if (creature_ptr->confused)
+    if (player_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: {
+    switch (player_ptr->pclass) {
+    case PlayerClassType::WARRIOR:
+    case PlayerClassType::ARCHER:
+    case PlayerClassType::SAMURAI:
+    case PlayerClassType::CAVALRY:
+    case PlayerClassType::BERSERKER:
+    case PlayerClassType::SNIPER: {
         return;
     }
-    case CLASS_SMITH:
-    case CLASS_PALADIN:
-    case CLASS_CHAOS_WARRIOR:
-    case CLASS_IMITATOR:
-    case CLASS_BEASTMASTER:
-    case CLASS_NINJA: {
+    case PlayerClassType::SMITH:
+    case PlayerClassType::PALADIN:
+    case PlayerClassType::CHAOS_WARRIOR:
+    case PlayerClassType::IMITATOR:
+    case PlayerClassType::BEASTMASTER:
+    case PlayerClassType::NINJA: {
         if (0 != randint0(240000L / (plev + 5)))
             return;
 
         break;
     }
-    case CLASS_RANGER:
-    case CLASS_WARRIOR_MAGE:
-    case CLASS_RED_MAGE:
-    case CLASS_MONK: {
+    case PlayerClassType::RANGER:
+    case PlayerClassType::WARRIOR_MAGE:
+    case PlayerClassType::RED_MAGE:
+    case PlayerClassType::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: {
+    case PlayerClassType::PRIEST:
+    case PlayerClassType::BARD:
+    case PlayerClassType::ROGUE:
+    case PlayerClassType::FORCETRAINER:
+    case PlayerClassType::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:
-    case CLASS_ELEMENTALIST: {
+    case PlayerClassType::MAGE:
+    case PlayerClassType::HIGH_MAGE:
+    case PlayerClassType::SORCERER:
+    case PlayerClassType::MAGIC_EATER:
+    case PlayerClassType::MIRROR_MASTER:
+    case PlayerClassType::BLUE_MAGE:
+    case PlayerClassType::ELEMENTALIST: {
         if (0 != randint0(9000L / (plev * plev + 40)))
             return;
 
         break;
     }
-    case CLASS_TOURIST: {
+    case PlayerClassType::TOURIST: {
         if (0 != randint0(20000L / ((plev + 50) * (plev + 50))))
             return;
 
         break;
     }
 
-    case MAX_CLASS:
+    case PlayerClassType::MAX:
         break;
     }
 
     for (INVENTORY_IDX i = 0; i < INVEN_TOTAL; i++) {
-        bool okay = FALSE;
-        o_ptr = &creature_ptr->inventory_list[i];
+        bool okay = false;
+        o_ptr = &player_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;
+        case ItemKindType::RING:
+        case ItemKindType::AMULET:
+        case ItemKindType::LITE:
+        case ItemKindType::FIGURINE: {
+            okay = true;
             break;
         }
 
@@ -396,36 +393,36 @@ void sense_inventory2(player_type *creature_ptr)
         if ((i < INVEN_MAIN_HAND) && (0 != randint0(5)))
             continue;
 
-        sense_inventory_aux(creature_ptr, i, TRUE);
+        sense_inventory_aux(player_ptr, i, true);
     }
 }
 
 /*!
- * @brief 重度擬似鑑定の判断処理 / Return a "feeling" (or NULL) about an item.  Method 1 (Heavy).
+ * @brief 重度擬似鑑定の判断処理 / Return a "feeling" (or nullptr) about an item.  Method 1 (Heavy).
  * @param o_ptr 擬似鑑定を行うオブジェクトの参照ポインタ。
  * @return 擬似鑑定結果のIDを返す。
  */
 item_feel_type pseudo_value_check_heavy(object_type *o_ptr)
 {
-    if (object_is_artifact(o_ptr)) {
-        if (object_is_cursed(o_ptr) || object_is_broken(o_ptr))
+    if (o_ptr->is_artifact()) {
+        if (o_ptr->is_cursed() || o_ptr->is_broken())
             return FEEL_TERRIBLE;
 
         return FEEL_SPECIAL;
     }
 
-    if (object_is_ego(o_ptr)) {
-        if (object_is_cursed(o_ptr) || object_is_broken(o_ptr))
+    if (o_ptr->is_ego()) {
+        if (o_ptr->is_cursed() || o_ptr->is_broken())
             return FEEL_WORTHLESS;
 
         return FEEL_EXCELLENT;
     }
 
-    if (object_is_cursed(o_ptr))
+    if (o_ptr->is_cursed())
         return FEEL_CURSED;
-    if (object_is_broken(o_ptr))
+    if (o_ptr->is_broken())
         return FEEL_BROKEN;
-    if ((o_ptr->tval == TV_RING) || (o_ptr->tval == TV_AMULET))
+    if ((o_ptr->tval == ItemKindType::RING) || (o_ptr->tval == ItemKindType::AMULET))
         return FEEL_AVERAGE;
     if (o_ptr->to_a > 0)
         return FEEL_GOOD;
@@ -436,19 +433,19 @@ item_feel_type pseudo_value_check_heavy(object_type *o_ptr)
 }
 
 /*!
- * @brief 軽度擬似鑑定の判断処理 / Return a "feeling" (or NULL) about an item.  Method 2 (Light).
+ * @brief 軽度擬似鑑定の判断処理 / Return a "feeling" (or nullptr) about an item.  Method 2 (Light).
  * @param o_ptr 擬似鑑定を行うオブジェクトの参照ポインタ。
  * @return 擬似鑑定結果のIDを返す。
  */
 item_feel_type pseudo_value_check_light(object_type *o_ptr)
 {
-    if (object_is_cursed(o_ptr))
+    if (o_ptr->is_cursed())
         return FEEL_CURSED;
-    if (object_is_broken(o_ptr))
+    if (o_ptr->is_broken())
         return FEEL_BROKEN;
-    if (object_is_artifact(o_ptr))
+    if (o_ptr->is_artifact())
         return FEEL_UNCURSED;
-    if (object_is_ego(o_ptr))
+    if (o_ptr->is_ego())
         return FEEL_UNCURSED;
     if (o_ptr->to_a > 0)
         return FEEL_UNCURSED;