OSDN Git Service

[Refactor] #1796 ItemLoaderBase、ItemLoaderFactoryクラスを作ってアイテム読み込み処理用のクラスを分離しやすくした
[hengbandforosx/hengbandosx.git] / src / load / old / item-loader-savefile10.cpp
index fa7e9b0..11b7d77 100644 (file)
@@ -12,7 +12,6 @@
 #include "object/object-kind.h"
 #include "sv-definition/sv-lite-types.h"
 #include "system/angband.h"
-#include "system/artifact-type-definition.h"
 #include "system/object-type-definition.h"
 #include "system/player-type-definition.h"
 #include "util/bit-flags-calculator.h"
 #include "util/quarks.h"
 
 /*!
- * @brief アイテムオブジェクトを読み込む(現版) / Read an object (New method)
+ * @brief アイテムオブジェクトを読み込む(v3.0.0 Savefile ver10まで)
  * @param o_ptr アイテムオブジェクト保存先ポインタ
  */
-void rd_item(object_type *o_ptr)
+void ItemLoader10::rd_item(object_type *o_ptr)
 {
     if (h_older_than(1, 5, 0, 0)) {
         rd_item_old(o_ptr);
@@ -32,89 +31,35 @@ void rd_item(object_type *o_ptr)
 
     auto flags = rd_u32b();
     o_ptr->k_idx = rd_s16b();
-
     o_ptr->iy = rd_byte();
     o_ptr->ix = rd_byte();
-
-    object_kind *k_ptr;
-    k_ptr = &k_info[o_ptr->k_idx];
+    auto *k_ptr = &k_info[o_ptr->k_idx];
     o_ptr->tval = k_ptr->tval;
     o_ptr->sval = k_ptr->sval;
-
-    if (any_bits(flags, SaveDataItemFlagType::PVAL))
-        o_ptr->pval = rd_s16b();
-    else
-        o_ptr->pval = 0;
-
-    if (any_bits(flags, SaveDataItemFlagType::DISCOUNT))
-        o_ptr->discount = rd_byte();
-    else
-        o_ptr->discount = 0;
-    if (any_bits(flags, SaveDataItemFlagType::NUMBER)) {
-        o_ptr->number = rd_byte();
-    } else
-        o_ptr->number = 1;
-
+    o_ptr->pval = any_bits(flags, SaveDataItemFlagType::PVAL) ? rd_s16b() : 0;
+    o_ptr->discount = any_bits(flags, SaveDataItemFlagType::DISCOUNT) ? rd_byte() : 0;
+    o_ptr->number = any_bits(flags, SaveDataItemFlagType::NUMBER) ? rd_byte() : 1;
     o_ptr->weight = rd_s16b();
-
     if (any_bits(flags, SaveDataItemFlagType::NAME1)) {
         if (h_older_than(3, 0, 0, 2)) {
             o_ptr->name1 = rd_byte();
         } else {
             o_ptr->name1 = rd_s16b();
         }
-    } else
+    } else {
         o_ptr->name1 = 0;
+    }
 
-    if (any_bits(flags, SaveDataItemFlagType::NAME2)) {
-        o_ptr->name2 = rd_byte();
-    } else
-        o_ptr->name2 = 0;
-
-    if (any_bits(flags, SaveDataItemFlagType::TIMEOUT))
-        o_ptr->timeout = rd_s16b();
-    else
-        o_ptr->timeout = 0;
-
-    if (any_bits(flags, SaveDataItemFlagType::TO_H))
-        o_ptr->to_h = rd_s16b();
-    else
-        o_ptr->to_h = 0;
-
-    if (any_bits(flags, SaveDataItemFlagType::TO_D)) {
-        o_ptr->to_d = rd_s16b();
-    } else
-        o_ptr->to_d = 0;
-
-    if (any_bits(flags, SaveDataItemFlagType::TO_A))
-        o_ptr->to_a = rd_s16b();
-    else
-        o_ptr->to_a = 0;
-
-    if (any_bits(flags, SaveDataItemFlagType::AC))
-        o_ptr->ac = rd_s16b();
-    else
-        o_ptr->ac = 0;
-
-    if (any_bits(flags, SaveDataItemFlagType::DD)) {
-        o_ptr->dd = rd_byte();
-    } else
-        o_ptr->dd = 0;
-
-    if (any_bits(flags, SaveDataItemFlagType::DS)) {
-        o_ptr->ds = rd_byte();
-    } else
-        o_ptr->ds = 0;
-
-    if (any_bits(flags, SaveDataItemFlagType::IDENT))
-        o_ptr->ident = rd_byte();
-    else
-        o_ptr->ident = 0;
-
-    if (any_bits(flags, SaveDataItemFlagType::MARKED))
-        o_ptr->marked = rd_byte();
-    else
-        o_ptr->marked = 0;
+    o_ptr->name2 = any_bits(flags, SaveDataItemFlagType::NAME2) ? rd_byte() : 0;
+    o_ptr->timeout = any_bits(flags, SaveDataItemFlagType::TIMEOUT) ? rd_s16b() : 0;
+    o_ptr->to_h = any_bits(flags, SaveDataItemFlagType::TO_H) ? rd_s16b() : 0;
+    o_ptr->to_d = any_bits(flags, SaveDataItemFlagType::TO_D) ? rd_s16b() : 0;
+    o_ptr->to_a = any_bits(flags, SaveDataItemFlagType::TO_A) ? rd_s16b() : 0;
+    o_ptr->ac = any_bits(flags, SaveDataItemFlagType::AC) ? rd_s16b() : 0;
+    o_ptr->dd = any_bits(flags, SaveDataItemFlagType::DD) ? rd_byte() : 0;
+    o_ptr->ds = any_bits(flags, SaveDataItemFlagType::DS) ? rd_byte() : 0;
+    o_ptr->ident = any_bits(flags, SaveDataItemFlagType::IDENT) ? rd_byte() : 0;
+    o_ptr->marked = any_bits(flags, SaveDataItemFlagType::MARKED) ? rd_byte() : 0;
 
     /* Object flags */
     if (loading_savefile_version_is_older_than(7)) {
@@ -152,18 +97,8 @@ void rd_item(object_type *o_ptr)
         o_ptr->curse_flags.clear();
     }
 
-    /* Monster holding object */
-    if (any_bits(flags, SaveDataItemFlagType::HELD_M_IDX))
-        o_ptr->held_m_idx = rd_s16b();
-    else
-        o_ptr->held_m_idx = 0;
-
-    /* Special powers */
-    if (any_bits(flags, SaveDataItemFlagType::XTRA1))
-        o_ptr->xtra1 = rd_byte();
-    else
-        o_ptr->xtra1 = 0;
-
+    o_ptr->held_m_idx = any_bits(flags, SaveDataItemFlagType::HELD_M_IDX) ? rd_s16b() : 0;
+    o_ptr->xtra1 = any_bits(flags, SaveDataItemFlagType::XTRA1) ? rd_byte() : 0;
     if (any_bits(flags, SaveDataItemFlagType::ACTIVATION_ID)) {
         if (h_older_than(3, 0, 0, 2)) {
             o_ptr->activation_id = i2enum<RandomArtActType>(rd_byte());
@@ -174,31 +109,11 @@ void rd_item(object_type *o_ptr)
         o_ptr->activation_id = i2enum<RandomArtActType>(0);
     }
 
-    if (any_bits(flags, SaveDataItemFlagType::XTRA3))
-        o_ptr->xtra3 = rd_byte();
-    else
-        o_ptr->xtra3 = 0;
-
-    if (any_bits(flags, SaveDataItemFlagType::XTRA4))
-        o_ptr->xtra4 = rd_s16b();
-    else
-        o_ptr->xtra4 = 0;
-
-    if (any_bits(flags, SaveDataItemFlagType::XTRA5))
-        o_ptr->xtra5 = rd_s16b();
-    else
-        o_ptr->xtra5 = 0;
-
-    if (any_bits(flags, SaveDataItemFlagType::FEELING))
-        o_ptr->feeling = rd_byte();
-    else
-        o_ptr->feeling = 0;
-
-    if (any_bits(flags, SaveDataItemFlagType::STACK_IDX))
-        o_ptr->stack_idx = rd_s16b();
-    else
-        o_ptr->stack_idx = 0;
-
+    o_ptr->xtra3 = any_bits(flags, SaveDataItemFlagType::XTRA3) ? rd_byte() : 0;
+    o_ptr->xtra4 = any_bits(flags, SaveDataItemFlagType::XTRA4) ? rd_s16b() : 0;
+    o_ptr->xtra5 = any_bits(flags, SaveDataItemFlagType::XTRA5) ? rd_s16b() : 0;
+    o_ptr->feeling = any_bits(flags, SaveDataItemFlagType::FEELING) ? rd_byte() : 0;
+    o_ptr->stack_idx = any_bits(flags, SaveDataItemFlagType::STACK_IDX) ? rd_s16b() : 0;
     if (any_bits(flags, SaveDataItemFlagType::SMITH) && !loading_savefile_version_is_older_than(7)) {
         if (auto tmp16s = rd_s16b(); tmp16s > 0) {
             o_ptr->smith_effect = static_cast<SmithEffect>(tmp16s);
@@ -213,8 +128,9 @@ void rd_item(object_type *o_ptr)
         char buf[128];
         rd_string(buf, sizeof(buf));
         o_ptr->inscription = quark_add(buf);
-    } else
+    } else {
         o_ptr->inscription = 0;
+    }
 
     if (any_bits(flags, SaveDataItemFlagType::ART_NAME)) {
         char buf[128];
@@ -224,8 +140,9 @@ void rd_item(object_type *o_ptr)
         o_ptr->art_name = 0;
     }
 
-    if (!h_older_than(2, 1, 2, 4))
+    if (!h_older_than(2, 1, 2, 4)) {
         return;
+    }
 
     if ((o_ptr->name2 == EGO_DARK) || (o_ptr->name2 == EGO_ANCIENT_CURSE) || (o_ptr->name1 == ART_NIGHT)) {
         o_ptr->art_flags.set(TR_LITE_M1);
@@ -276,53 +193,3 @@ void rd_item(object_type *o_ptr)
         }
     }
 }
-
-/*!
- * @brief アイテムオブジェクトの鑑定情報をロードする
- */
-void load_item(void)
-{
-    auto loading_max_k_idx = rd_u16b();
-
-    object_kind *k_ptr;
-    object_kind dummy;
-    for (auto i = 0U; i < loading_max_k_idx; i++) {
-        if (i < k_info.size())
-            k_ptr = &k_info[i];
-        else
-            k_ptr = &dummy;
-
-        auto tmp8u = rd_byte();
-        k_ptr->aware = any_bits(tmp8u, 0x01);
-        k_ptr->tried = any_bits(tmp8u, 0x02);
-    }
-
-    load_note(_("アイテムの記録をロードしました", "Loaded Object Memory"));
-}
-
-/*!
- * @brief 固定アーティファクトの出現情報をロードする
- */
-void load_artifact(void)
-{
-    auto loading_max_a_idx = rd_u16b();
-
-    artifact_type *a_ptr;
-    artifact_type dummy;
-    for (auto i = 0U; i < loading_max_a_idx; i++) {
-        if (i < a_info.size())
-            a_ptr = &a_info[i];
-        else
-            a_ptr = &dummy;
-
-        a_ptr->cur_num = rd_byte();
-        if (h_older_than(1, 5, 0, 0)) {
-            a_ptr->floor_id = 0;
-            strip_bytes(3);
-        } else {
-            a_ptr->floor_id = rd_s16b();
-        }
-    }
-
-    load_note(_("伝説のアイテムをロードしました", "Loaded Artifacts"));
-}