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 (any_bits(flags, SaveDataItemFlagType::FIXED_ARTIFACT_IDX)) {
if (h_older_than(3, 0, 0, 2)) {
- o_ptr->name1 = rd_byte();
+ o_ptr->fixed_artifact_idx = rd_byte();
} else {
- o_ptr->name1 = rd_s16b();
+ o_ptr->fixed_artifact_idx = rd_s16b();
}
} else {
- o_ptr->name1 = 0;
+ o_ptr->fixed_artifact_idx = 0;
}
- o_ptr->name2 = any_bits(flags, SaveDataItemFlagType::NAME2) ? rd_byte() : 0;
+ o_ptr->ego_idx = i2enum<EgoType>(any_bits(flags, SaveDataItemFlagType::EGO_IDX) ? 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;
// xtra3フィールドが複数目的に共用されていた頃の名残.
if (loading_savefile_version_is_older_than(12)) {
- int8_t tmp8s = any_bits(flags, SavedataItemOlderThan12FlagType::XTRA3) ? rd_byte() : 0;
+ uint8_t tmp8s = any_bits(flags, SavedataItemOlderThan12FlagType::XTRA3) ? rd_byte() : 0;
if (o_ptr->tval == ItemKindType::CHEST) {
- o_ptr->chest_level = static_cast<uint8_t>(tmp8s);
+ o_ptr->chest_level = tmp8s;
} else if (o_ptr->tval == ItemKindType::CAPTURE) {
o_ptr->captured_monster_speed = tmp8s;
}
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<ushort>(xtra4);
+ o_ptr->fuel = static_cast<short>(xtra4);
} else if (o_ptr->tval == ItemKindType::CAPTURE) {
o_ptr->captured_monster_current_hp = xtra4;
} else {
o_ptr->smith_damage = static_cast<byte>(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;
}
+ if (o_ptr->is_fuel() && (o_ptr->tval == ItemKindType::LITE)) {
+ const auto fuel_max = o_ptr->sval == SV_LITE_TORCH ? FUEL_TORCH : FUEL_LAMP;
+ if (o_ptr->fuel < 0 || o_ptr->fuel > fuel_max) {
+ o_ptr->fuel = 0;
+ }
+ }
+
o_ptr->captured_monster_max_hp = 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;
return;
}
- if ((o_ptr->name2 == EGO_DARK) || (o_ptr->name2 == EGO_ANCIENT_CURSE) || (o_ptr->name1 == ART_NIGHT)) {
+ if ((o_ptr->ego_idx == EgoType::DARK) || (o_ptr->ego_idx == EgoType::ANCIENT_CURSE) || (o_ptr->fixed_artifact_idx == ART_NIGHT)) {
o_ptr->art_flags.set(TR_LITE_M1);
o_ptr->art_flags.reset(TR_LITE_1);
o_ptr->art_flags.reset(TR_LITE_2);
return;
}
- if (o_ptr->name2 == EGO_LITE_DARKNESS) {
+ if (o_ptr->ego_idx == EgoType::LITE_DARKNESS) {
if (o_ptr->tval != ItemKindType::LITE) {
o_ptr->art_flags.set(TR_LITE_M1);
return;