OSDN Git Service

[Refactor] flavor_type::show_weapon メンバを削除する
authorHabu <habu1010+github@gmail.com>
Wed, 30 Nov 2022 02:42:45 +0000 (11:42 +0900)
committerHabu <habu1010+github@gmail.com>
Thu, 1 Dec 2022 09:59:39 +0000 (18:59 +0900)
アイテムの殺戮修正を表示するかどうかを決定するミニグローバルなフラグとして使われており
コードを追いづらいため削除し、代わりに should_show_slaying_bonus 関数により判定を
行うようにする。

src/flavor/flavor-describer.cpp
src/flavor/flavor-util.cpp
src/flavor/flavor-util.h
src/flavor/tval-description-switcher.cpp

index 946516d..ac677f3 100644 (file)
@@ -118,21 +118,39 @@ static void describe_chest(flavor_type *flavor_ptr)
 
 static void decide_tval_show(flavor_type *flavor_ptr)
 {
-    if (flavor_ptr->tr_flags.has(TR_SHOW_MODS)) {
-        flavor_ptr->show_weapon = true;
+    if (flavor_ptr->o_ptr->ac) {
+        flavor_ptr->show_armour = true;
     }
+}
 
-    if (flavor_ptr->o_ptr->is_smith() && (Smith::object_effect(flavor_ptr->o_ptr) == SmithEffectType::SLAY_GLOVE)) {
-        flavor_ptr->show_weapon = true;
+static bool should_show_slaying_bonus(const ItemEntity &item)
+{
+    if (object_flags(&item).has(TR_SHOW_MODS)) {
+        return true;
     }
 
-    if (flavor_ptr->o_ptr->to_h && flavor_ptr->o_ptr->to_d) {
-        flavor_ptr->show_weapon = true;
+    if (item.is_smith() && (Smith::object_effect(&item) == SmithEffectType::SLAY_GLOVE)) {
+        return true;
     }
 
-    if (flavor_ptr->o_ptr->ac) {
-        flavor_ptr->show_armour = true;
+    if ((item.to_h != 0) && (item.to_d != 0)) {
+        return true;
     }
+
+    if (item.is_weapon_ammo()) {
+        return true;
+    }
+
+    if (item.tval == ItemKindType::RING) {
+        const auto &baseitem = baseitems_info[item.bi_id];
+        const auto base_has_no_bonus = (baseitem.to_h == 0) && (baseitem.to_d == 0);
+        const auto item_has_bonus = (item.to_h != 0) || (item.to_d != 0);
+        if (base_has_no_bonus && item_has_bonus) {
+            return true;
+        }
+    }
+
+    return false;
 }
 
 static void describe_weapon_dice(PlayerType *player_ptr, flavor_type *flavor_ptr)
@@ -214,7 +232,7 @@ static void describe_named_item_tval(flavor_type *flavor_ptr)
         return;
     }
 
-    if (flavor_ptr->show_weapon) {
+    if (should_show_slaying_bonus(*flavor_ptr->o_ptr)) {
         flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
         flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
         flavor_ptr->t = object_desc_int(flavor_ptr->t, flavor_ptr->o_ptr->to_h);
index 28e604a..ef9b664 100644 (file)
@@ -24,7 +24,6 @@ flavor_type *initialize_flavor_type(flavor_type *flavor_ptr, char *buf, ItemEnti
     flavor_ptr->aware = false;
     flavor_ptr->known = false;
     flavor_ptr->flavor = true;
-    flavor_ptr->show_weapon = false;
     flavor_ptr->show_armour = false;
     flavor_ptr->p1 = '(';
     flavor_ptr->p2 = ')';
index bd129cf..a17d957 100644 (file)
@@ -19,7 +19,6 @@ struct flavor_type {
     bool aware;
     bool known; // 鑑定 or *鑑定* 済.
     bool flavor;
-    bool show_weapon;
     bool show_armour;
     concptr s;
     concptr s0;
index 60d998d..bae6fff 100644 (file)
@@ -111,10 +111,6 @@ static void describe_ring(flavor_type *flavor_ptr)
     } else {
         flavor_ptr->basenm = _("#指輪", "& # Ring~");
     }
-
-    if (!flavor_ptr->k_ptr->to_h && !flavor_ptr->k_ptr->to_d && (flavor_ptr->o_ptr->to_h || flavor_ptr->o_ptr->to_d)) {
-        flavor_ptr->show_weapon = true;
-    }
 }
 
 static void describe_staff(flavor_type *flavor_ptr)
@@ -368,7 +364,6 @@ void switch_tval_description(flavor_type *flavor_ptr)
     case ItemKindType::POLEARM:
     case ItemKindType::SWORD:
     case ItemKindType::DIGGING:
-        flavor_ptr->show_weapon = true;
         break;
     case ItemKindType::BOOTS:
     case ItemKindType::GLOVES: