OSDN Git Service

[Version] #41230 #41230 3.0.0Alpha2 セーブデータの互換を取るために以下の改変
authordeskull <deskull@users.sourceforge.jp>
Sun, 24 Jan 2021 11:38:23 +0000 (20:38 +0900)
committerdeskull <deskull@users.sourceforge.jp>
Sun, 24 Jan 2021 11:43:47 +0000 (20:43 +0900)
 * object_type->xtra2の保存サイズを16bitに
 * object_type->name1の保存サイズを16bitに

src/load/item-loader.c
src/load/load-v1-5-0.c
src/save/item-writer.c
src/system/angband-version.h
src/system/object-type-definition.h

index 8a84fc4..a46f9fd 100644 (file)
@@ -63,8 +63,14 @@ void rd_item(player_type *player_ptr, object_type *o_ptr)
     o_ptr->weight = tmp16s;
 
     if (flags & SAVE_ITEM_NAME1) {
-        rd_byte(&tmp8u);
-        o_ptr->name1 = tmp8u;
+
+        if (h_older_than(3, 0, 0, 2)) {
+            rd_byte(&tmp8u);
+            o_ptr->name1 = tmp8u;
+        } else {
+            rd_s16b(&tmp16s);
+            o_ptr->name1 = tmp16s;
+        }
     } else
         o_ptr->name1 = 0;
 
@@ -165,8 +171,16 @@ void rd_item(player_type *player_ptr, object_type *o_ptr)
     else
         o_ptr->xtra1 = 0;
 
-    if (flags & SAVE_ITEM_XTRA2)
-        rd_byte(&o_ptr->xtra2);
+    if (flags & SAVE_ITEM_XTRA2){
+
+        if (h_older_than(3, 0, 0, 2)) {
+            rd_byte(&tmp8u);
+            o_ptr->xtra2 = tmp8u;
+        } else {
+            rd_s16b(&tmp16s);
+            o_ptr->xtra2 = tmp16s;
+        }
+    } 
     else
         o_ptr->xtra2 = 0;
 
index 0af69b0..a727218 100644 (file)
@@ -153,7 +153,8 @@ void rd_item_old(player_type *player_ptr, object_type *o_ptr)
 
     rd_s16b(&o_ptr->held_m_idx);
     rd_byte(&o_ptr->xtra1);
-    rd_byte(&o_ptr->xtra2);
+    rd_byte(&tmp8u);
+    o_ptr->xtra2 = tmp8u;
 
     if (z_older_than(11, 0, 10)) {
         if (o_ptr->xtra1 == EGO_XTRA_SUSTAIN) {
index 78a0a03..541f778 100644 (file)
@@ -101,7 +101,7 @@ static void write_item_info(object_type *o_ptr, const BIT_FLAGS flags)
 {
     wr_s16b((s16b)o_ptr->weight);
     if (flags & SAVE_ITEM_NAME1)
-        wr_byte((byte)o_ptr->name1);
+        wr_s16b(o_ptr->name1);
 
     if (flags & SAVE_ITEM_NAME2)
         wr_byte((byte)o_ptr->name2);
@@ -158,7 +158,7 @@ static void write_item_info(object_type *o_ptr, const BIT_FLAGS flags)
         wr_byte(o_ptr->xtra1);
 
     if (flags & SAVE_ITEM_XTRA2)
-        wr_byte(o_ptr->xtra2);
+        wr_s16b(o_ptr->xtra2);
 
     if (flags & SAVE_ITEM_XTRA3)
         wr_byte(o_ptr->xtra3);
index fdb5339..77c68e6 100644 (file)
@@ -17,7 +17,7 @@
 #define FAKE_VER_MAJOR 13 /*!< ゲームのバージョン番号定義(メジャー番号 + 10) */
 #define FAKE_VER_MINOR 0 /*!< ゲームのバージョン番号定義(マイナー番号) */
 #define FAKE_VER_PATCH 0 /*!< ゲームのバージョン番号定義(パッチ番号) */
-#define FAKE_VER_EXTRA 1 /*!< ゲームのバージョン番号定義(エクストラ番号) */
+#define FAKE_VER_EXTRA 2 /*!< ゲームのバージョン番号定義(エクストラ番号) */
 
 /*!
   * @brief バージョンが開発版が安定版かを返す
index e45ebc8..866a7a6 100644 (file)
@@ -20,7 +20,7 @@ typedef struct object_type {
     EGO_IDX name2; /* Ego-Item type, if any */
 
     XTRA8 xtra1; /* Extra info type (now unused) */
-    XTRA8 xtra2; /*!< エゴ/アーティファクトの発動ID / Extra info activation index */
+    XTRA16 xtra2; /*!< エゴ/アーティファクトの発動ID / Extra info activation index */
     XTRA8 xtra3; /*!< 複数の使用用途 捕らえたモンスターの速度,付加した特殊なエッセンスID / Extra info for weaponsmith */
     XTRA16 xtra4; /*!< 複数の使用用途 光源の残り寿命、あるいは捕らえたモンスターの現HP / Extra info fuel or captured monster's current HP */
     XTRA16 xtra5; /*!< 複数の使用用途 捕らえたモンスターの最大HP / Extra info captured monster's max HP */