Skip to content

Commit 27b7395

Browse files
committed
Fix deserialize/serialize of power level
These were not being serialized as units strings, but as integers, and changing it to optional resulted in a loading error. Save them as units strings always and handle loading ints.
1 parent f451689 commit 27b7395

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

src/savegame_json.cpp

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1094,8 +1094,18 @@ void Character::load( const JsonObject &data )
10941094
recalc_sight_limits();
10951095
calc_encumbrance();
10961096

1097-
optional( data, false, "power_level", power_level, 0_kJ );
1098-
optional( data, false, "max_power_level_modifier", max_power_level_modifier, units::energy::min() );
1097+
// migration code, added in early 0.J
1098+
if( data.has_int( "power_level" ) ) {
1099+
power_level = units::from_kilojoule( data.get_int64( "power_level" ) );
1100+
} else {
1101+
data.read( "power_level", power_level );
1102+
}
1103+
// migration code, added in early 0.J
1104+
if( data.has_int( "max_power_level_modifier" ) ) {
1105+
max_power_level_modifier = units::from_kilojoule( data.get_int64( "max_power_level_modifier" ) );
1106+
} else {
1107+
data.read( "max_power_level_modifier", max_power_level_modifier );
1108+
}
10991109

11001110
// Bionic power should not be negative!
11011111
if( power_level < 0_mJ ) {
@@ -1460,14 +1470,8 @@ void Character::store( JsonOut &json ) const
14601470
json.member( "proficiencies", _proficiencies );
14611471

14621472
// npc; unimplemented
1463-
if( power_level < 1_J ) {
1464-
json.member( "power_level", std::to_string( units::to_millijoule( power_level ) ) + " mJ" );
1465-
} else if( power_level < 1_kJ ) {
1466-
json.member( "power_level", std::to_string( units::to_joule( power_level ) ) + " J" );
1467-
} else {
1468-
json.member( "power_level", units::to_kilojoule( power_level ) );
1469-
}
1470-
json.member( "max_power_level_modifier", units::to_kilojoule( max_power_level_modifier ) );
1473+
json.member( "power_level", power_level );
1474+
json.member( "max_power_level_modifier", max_power_level_modifier );
14711475

14721476
if( !overmap_time.empty() ) {
14731477
json.member( "overmap_time" );

0 commit comments

Comments
 (0)