diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index a2f6916b75..194fb105bb 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2390,7 +2390,7 @@ bool AfterLoadGame() FOR_ALL_DEPOTS(d) d->build_date = _date; } - if (IsSavegameVersionBefore(200)) { + if (SlXvIsFeatureMissing(XSLFI_INFRA_SHARING)) { Company *c; FOR_ALL_COMPANIES(c) { /* yearly_expenses has 3*15 entries now, saveload code gave us 3*13. diff --git a/src/saveload/company_sl.cpp b/src/saveload/company_sl.cpp index adaf98d76a..f90203e228 100644 --- a/src/saveload/company_sl.cpp +++ b/src/saveload/company_sl.cpp @@ -283,8 +283,8 @@ static const SaveLoad _company_desc[] = { /* yearly expenses was changed to 64-bit in savegame version 2. */ SLE_CONDARR(CompanyProperties, yearly_expenses, SLE_FILE_I32 | SLE_VAR_I64, 3 * 13, 0, 1), - SLE_CONDARR(CompanyProperties, yearly_expenses, SLE_INT64, 3 * 13, 2, 199), - SLE_CONDARR(CompanyProperties, yearly_expenses, SLE_INT64, 3 * 15, 200, SL_MAX_VERSION), + SLE_CONDARR_X(CompanyProperties, yearly_expenses, SLE_INT64, 3 * 13, 2, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING, 0, 0)), + SLE_CONDARR_X(CompanyProperties, yearly_expenses, SLE_INT64, 3 * 15, 2, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING)), SLE_CONDVAR(CompanyProperties, is_ai, SLE_BOOL, 2, SL_MAX_VERSION), SLE_CONDNULL(1, 107, 111), ///< is_noai diff --git a/src/saveload/extended_ver_sl.cpp b/src/saveload/extended_ver_sl.cpp index be40cad17b..e534b7c697 100644 --- a/src/saveload/extended_ver_sl.cpp +++ b/src/saveload/extended_ver_sl.cpp @@ -45,6 +45,7 @@ std::vector _sl_xv_discardable_chunk_ids; ///< list of chunks static const uint32 _sl_xv_slxi_chunk_version = 0; ///< current version os SLXI chunk const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = { + { XSLFI_INFRA_SHARING, XSCF_NULL, 1, 1, "infra_sharing", NULL, NULL, NULL }, { XSLFI_NULL, XSCF_NULL, 0, 0, NULL, NULL, NULL, NULL },// This is the end marker }; diff --git a/src/saveload/extended_ver_sl.h b/src/saveload/extended_ver_sl.h index 39a03478c2..d5c3f03ff1 100644 --- a/src/saveload/extended_ver_sl.h +++ b/src/saveload/extended_ver_sl.h @@ -21,6 +21,7 @@ */ enum SlXvFeatureIndex { XSLFI_NULL = 0, ///< Unused value, to indicate that no extended feature test is in use + XSLFI_INFRA_SHARING, ///< Infrastructure sharing patch XSLFI_SIZE, ///< Total count of features, including null feature }; diff --git a/src/table/settings.ini b/src/table/settings.ini index e9542aec25..edee3708a4 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -1464,88 +1464,98 @@ from = 77 def = true cat = SC_EXPERT + [SDT_BOOL] base = GameSettings var = economy.infrastructure_sharing[0] -from = 200 def = false str = STR_CONFIG_SETTING_SHARING_RAIL proc = CheckSharingRail +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) +patxname = ""infra_sharing.economy.infrastructure_sharing.rail"" [SDT_BOOL] base = GameSettings var = economy.infrastructure_sharing[1] -from = 200 def = false str = STR_CONFIG_SETTING_SHARING_ROAD proc = CheckSharingRoad +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) +patxname = ""infra_sharing.economy.infrastructure_sharing.road"" [SDT_BOOL] base = GameSettings var = economy.infrastructure_sharing[2] -from = 200 def = false str = STR_CONFIG_SETTING_SHARING_WATER proc = CheckSharingWater +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) +patxname = ""infra_sharing.economy.infrastructure_sharing.water"" [SDT_BOOL] base = GameSettings var = economy.infrastructure_sharing[3] -from = 200 def = false str = STR_CONFIG_SETTING_SHARING_AIR proc = CheckSharingAir +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) +patxname = ""infra_sharing.economy.infrastructure_sharing.air"" [SDT_VAR] base = GameSettings var = economy.sharing_fee[0] type = SLE_UINT -from = 200 def = 100 min = 0 max = 1000000 interval = 10 str = STR_CONFIG_SETTING_SHARING_FEE_RAIL +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) +patxname = ""infra_sharing.economy.sharing_fee.rail"" [SDT_VAR] base = GameSettings var = economy.sharing_fee[1] type = SLE_UINT -from = 200 def = 100 min = 0 max = 1000000 interval = 10 str = STR_CONFIG_SETTING_SHARING_FEE_ROAD +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) +patxname = ""infra_sharing.economy.sharing_fee.road"" [SDT_VAR] base = GameSettings var = economy.sharing_fee[2] type = SLE_UINT -from = 200 def = 100 min = 0 max = 1000000 interval = 10 -str = STR_CONFIG_SETTING_SHARING_FEE_ROAD +str = STR_CONFIG_SETTING_SHARING_FEE_WATER +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) +patxname = ""infra_sharing.economy.sharing_fee.water"" [SDT_VAR] base = GameSettings var = economy.sharing_fee[3] type = SLE_UINT -from = 200 def = 100 min = 0 max = 1000000 interval = 10 str = STR_CONFIG_SETTING_SHARING_FEE_AIR +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) +patxname = ""infra_sharing.economy.sharing_fee.air"" [SDT_BOOL] base = GameSettings var = economy.sharing_payment_in_debt -from = 200 def = false str = STR_CONFIG_SETTING_SHARING_PAYMENT_IN_DEBT +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) +patxname = ""infra_sharing.economy.sharing_payment_in_debt"" ; previously ai-new setting. [SDT_NULL]