From 329f86f89164cff8a239fa042901a63e13cc036c Mon Sep 17 00:00:00 2001 From: Habu Date: Sun, 20 Mar 2022 11:09:07 +0900 Subject: [PATCH] =?utf8?q?[Fix]=20#2430=20=E5=85=89=E6=BA=90=E3=81=AE?= =?utf8?q?=E6=AE=8B=E3=82=BF=E3=83=BC=E3=83=B3=E6=95=B0=E3=81=8C=E8=B2=A0?= =?utf8?q?=E3=81=AE=E3=82=AA=E3=83=BC=E3=83=90=E3=83=BC=E3=83=95=E3=83=AD?= =?utf8?q?=E3=83=BC=E3=82=92=E8=B5=B7=E3=81=93=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit モンスターの攻撃により光源の残ターン数が一時的に負の値になる事があるが、変数が符号なし のため負のオーバーフローを起こす。 符号付きに修正する。 --- src/load/old/item-loader-savefile50.cpp | 4 ++-- src/save/item-writer.cpp | 2 +- src/system/object-type-definition.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/load/old/item-loader-savefile50.cpp b/src/load/old/item-loader-savefile50.cpp index 5b93faf3d..1c44dc34d 100644 --- a/src/load/old/item-loader-savefile50.cpp +++ b/src/load/old/item-loader-savefile50.cpp @@ -131,7 +131,7 @@ void ItemLoader50::rd_item(ObjectType *o_ptr) if (loading_savefile_version_is_older_than(13)) { int16_t xtra4 = any_bits(flags, SavedataItemOlderThan13FlagType::XTRA4) ? rd_s16b() : 0; if (o_ptr->is_fuel()) { - o_ptr->fuel = static_cast(xtra4); + o_ptr->fuel = static_cast(xtra4); } else if (o_ptr->tval == ItemKindType::CAPTURE) { o_ptr->captured_monster_current_hp = xtra4; } else { @@ -139,7 +139,7 @@ void ItemLoader50::rd_item(ObjectType *o_ptr) o_ptr->smith_damage = static_cast(xtra4 & 0x000f); } } else { - o_ptr->fuel = any_bits(flags, SaveDataItemFlagType::FUEL) ? rd_u16b() : 0; + o_ptr->fuel = any_bits(flags, SaveDataItemFlagType::FUEL) ? rd_s16b() : 0; o_ptr->captured_monster_current_hp = any_bits(flags, SaveDataItemFlagType::CAPTURED_MONSTER_CURRENT_HP) ? rd_s16b() : 0; } diff --git a/src/save/item-writer.cpp b/src/save/item-writer.cpp index 6e531df0a..521a8a492 100644 --- a/src/save/item-writer.cpp +++ b/src/save/item-writer.cpp @@ -197,7 +197,7 @@ static void write_item_info(ObjectType *o_ptr, const BIT_FLAGS flags) } if (any_bits(flags, SaveDataItemFlagType::FUEL)) { - wr_u16b(o_ptr->fuel); + wr_s16b(o_ptr->fuel); } if (any_bits(flags, SaveDataItemFlagType::CAPTURED_MONSTER_CURRENT_HP)) { diff --git a/src/system/object-type-definition.h b/src/system/object-type-definition.h index f38434ebd..a6549f6a6 100644 --- a/src/system/object-type-definition.h +++ b/src/system/object-type-definition.h @@ -41,7 +41,7 @@ public: uint8_t captured_monster_speed = 0; /*!< 捕らえたモンスターの速度 */ short captured_monster_current_hp = 0; /*!< 捕らえたモンスターの現HP */ short captured_monster_max_hp = 0; /*!< 捕らえたモンスターの最大HP */ - ushort fuel = 0; /*!< 光源の残り寿命 / Extra info fuel or captured monster's current HP */ + short fuel = 0; /*!< 光源の残り寿命 / Remaining fuel */ byte smith_hit = 0; /*!< 鍛冶をした結果上昇した命中値 */ byte smith_damage = 0; /*!< 鍛冶をした結果上昇したダメージ */ -- 2.11.0