diff options
Diffstat (limited to 'src/saveload/company_sl.cpp')
-rw-r--r-- | src/saveload/company_sl.cpp | 127 |
1 files changed, 55 insertions, 72 deletions
diff --git a/src/saveload/company_sl.cpp b/src/saveload/company_sl.cpp index 7abec8041..27fb2cf37 100644 --- a/src/saveload/company_sl.cpp +++ b/src/saveload/company_sl.cpp @@ -8,6 +8,10 @@ /** @file company_sl.cpp Code handling saving and loading of company data */ #include "../stdafx.h" + +#include "saveload.h" +#include "compat/company_sl_compat.h" + #include "../company_func.h" #include "../company_manager_face.h" #include "../fios.h" @@ -16,8 +20,6 @@ #include "../station_base.h" #include "../strings_func.h" -#include "saveload.h" - #include "table/strings.h" #include "../safeguards.h" @@ -243,79 +245,44 @@ struct CompanyOldAI { class SlCompanyOldAIBuildRec : public DefaultSaveLoadHandler<SlCompanyOldAIBuildRec, CompanyOldAI> { public: - inline static const SaveLoad description[] = { - SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6), - SLE_CONDNULL(4, SLV_6, SLV_107), - SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6), - SLE_CONDNULL(4, SLV_6, SLV_107), - SLE_CONDNULL(8, SL_MIN_VERSION, SLV_107), - }; + inline static const SaveLoad description[] = {{}}; // Needed to keep DefaultSaveLoadHandler happy. + inline const static SaveLoadCompatTable compat_description = _company_old_ai_buildrec_compat; + + SaveLoadTable GetDescription() const override { return {}; } - void GenericSaveLoad(CompanyOldAI *old_ai) const + void Load(CompanyOldAI *old_ai) const override { for (int i = 0; i != old_ai->num_build_rec; i++) { - SlObject(nullptr, this->GetDescription()); + SlObject(nullptr, this->GetLoadDescription()); } } - // No Save(); this is for backwards compatibility. - void Load(CompanyOldAI *old_ai) const override { this->GenericSaveLoad(old_ai); } - void LoadCheck(CompanyOldAI *old_ai) const override { this->GenericSaveLoad(old_ai); } - void FixPointers(CompanyOldAI *old_ai) const override { this->GenericSaveLoad(old_ai); } + void LoadCheck(CompanyOldAI *old_ai) const override { this->Load(old_ai); } }; class SlCompanyOldAI : public DefaultSaveLoadHandler<SlCompanyOldAI, CompanyProperties> { public: inline static const SaveLoad description[] = { - SLE_CONDNULL(2, SL_MIN_VERSION, SLV_107), - SLE_CONDNULL(2, SL_MIN_VERSION, SLV_13), - SLE_CONDNULL(4, SLV_13, SLV_107), - SLE_CONDNULL(8, SL_MIN_VERSION, SLV_107), - SLE_CONDVAR(CompanyOldAI, num_build_rec, SLE_UINT8, SL_MIN_VERSION, SLV_107), - SLE_CONDNULL(3, SL_MIN_VERSION, SLV_107), - - SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6), - SLE_CONDNULL(4, SLV_6, SLV_107), - SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6), - SLE_CONDNULL(4, SLV_6, SLV_107), - SLE_CONDNULL(2, SL_MIN_VERSION, SLV_107), - - SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6), - SLE_CONDNULL(4, SLV_6, SLV_107), - SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6), - SLE_CONDNULL(4, SLV_6, SLV_107), - SLE_CONDNULL(2, SL_MIN_VERSION, SLV_107), - - SLE_CONDNULL(2, SL_MIN_VERSION, SLV_69), - SLE_CONDNULL(4, SLV_69, SLV_107), - - SLE_CONDNULL(18, SL_MIN_VERSION, SLV_107), - SLE_CONDNULL(20, SL_MIN_VERSION, SLV_107), - SLE_CONDNULL(32, SL_MIN_VERSION, SLV_107), - - SLE_CONDNULL(64, SLV_2, SLV_107), - SLEG_STRUCTLIST("build_rec", SlCompanyOldAIBuildRec), + SLE_CONDVAR(CompanyOldAI, num_build_rec, SLE_UINT8, SL_MIN_VERSION, SLV_107), + SLEG_STRUCTLIST("buildrec", SlCompanyOldAIBuildRec), }; + inline const static SaveLoadCompatTable compat_description = _company_old_ai_compat; - void GenericSaveLoad(CompanyProperties *c) const + void Load(CompanyProperties *c) const override { if (!c->is_ai) return; CompanyOldAI old_ai; - SlObject(&old_ai, this->GetDescription()); + SlObject(&old_ai, this->GetLoadDescription()); } - // No Save(); this is for backwards compatibility. - void Load(CompanyProperties *c) const override { this->GenericSaveLoad(c); } - void LoadCheck(CompanyProperties *c) const override { this->GenericSaveLoad(c); } - void FixPointers(CompanyProperties *c) const override { this->GenericSaveLoad(c); } + void LoadCheck(CompanyProperties *c) const override { this->Load(c); } }; class SlCompanySettings : public DefaultSaveLoadHandler<SlCompanySettings, CompanyProperties> { public: inline static const SaveLoad description[] = { /* Engine renewal settings */ - SLE_CONDNULL(512, SLV_16, SLV_19), SLE_CONDREF(CompanyProperties, engine_renew_list, REF_ENGINE_RENEWS, SLV_19, SL_MAX_VERSION), SLE_CONDVAR(CompanyProperties, settings.engine_renew, SLE_BOOL, SLV_16, SL_MAX_VERSION), SLE_CONDVAR(CompanyProperties, settings.engine_renew_months, SLE_INT16, SLV_16, SL_MAX_VERSION), @@ -328,19 +295,25 @@ public: SLE_CONDVAR(CompanyProperties, settings.vehicle.servint_roadveh, SLE_UINT16, SLV_120, SL_MAX_VERSION), SLE_CONDVAR(CompanyProperties, settings.vehicle.servint_aircraft, SLE_UINT16, SLV_120, SL_MAX_VERSION), SLE_CONDVAR(CompanyProperties, settings.vehicle.servint_ships, SLE_UINT16, SLV_120, SL_MAX_VERSION), - - SLE_CONDNULL(63, SLV_2, SLV_144), // old reserved space }; + inline const static SaveLoadCompatTable compat_description = _company_settings_compat; - void GenericSaveLoad(CompanyProperties *c) const + void Save(CompanyProperties *c) const override { SlObject(c, this->GetDescription()); } - void Save(CompanyProperties *c) const override { this->GenericSaveLoad(c); } - void Load(CompanyProperties *c) const override { this->GenericSaveLoad(c); } - void LoadCheck(CompanyProperties *c) const override { this->GenericSaveLoad(c); } - void FixPointers(CompanyProperties *c) const override { this->GenericSaveLoad(c); } + void Load(CompanyProperties *c) const override + { + SlObject(c, this->GetLoadDescription()); + } + + void FixPointers(CompanyProperties *c) const override + { + SlObject(c, this->GetDescription()); + } + + void LoadCheck(CompanyProperties *c) const override { this->Load(c); } }; class SlCompanyEconomy : public DefaultSaveLoadHandler<SlCompanyEconomy, CompanyProperties> { @@ -358,16 +331,24 @@ public: SLE_CONDARR(CompanyEconomyEntry, delivered_cargo, SLE_UINT32, NUM_CARGO, SLV_EXTEND_CARGOTYPES, SL_MAX_VERSION), SLE_VAR(CompanyEconomyEntry, performance_history, SLE_INT32), }; + inline const static SaveLoadCompatTable compat_description = _company_economy_compat; + + void Save(CompanyProperties *c) const override + { + SlObject(&c->cur_economy, this->GetDescription()); + } + + void Load(CompanyProperties *c) const override + { + SlObject(&c->cur_economy, this->GetLoadDescription()); + } - void GenericSaveLoad(CompanyProperties *c) const + void FixPointers(CompanyProperties *c) const override { SlObject(&c->cur_economy, this->GetDescription()); } - void Save(CompanyProperties *c) const override { this->GenericSaveLoad(c); } - void Load(CompanyProperties *c) const override { this->GenericSaveLoad(c); } - void LoadCheck(CompanyProperties *c) const override { this->GenericSaveLoad(c); } - void FixPointers(CompanyProperties *c) const override { this->GenericSaveLoad(c); } + void LoadCheck(CompanyProperties *c) const override { this->Load(c); } }; class SlCompanyOldEconomy : public SlCompanyEconomy { @@ -388,7 +369,7 @@ public: if (c->num_valid_stat_ent > lengthof(c->old_economy)) SlErrorCorrupt("Too many old economy entries"); for (int i = 0; i < c->num_valid_stat_ent; i++) { - SlObject(&c->old_economy[i], this->GetDescription()); + SlObject(&c->old_economy[i], this->GetLoadDescription()); } } @@ -402,6 +383,7 @@ public: SLE_CONDVAR(Livery, colour1, SLE_UINT8, SLV_34, SL_MAX_VERSION), SLE_CONDVAR(Livery, colour2, SLE_UINT8, SLV_34, SL_MAX_VERSION), }; + inline const static SaveLoadCompatTable compat_description = _company_liveries_compat; /** * Get the number of liveries used by this savegame version. @@ -430,7 +412,7 @@ public: bool update_in_use = IsSavegameVersionBefore(SLV_GROUP_LIVERIES); for (size_t i = 0; i < num_liveries; i++) { - SlObject(&c->livery[i], this->GetDescription()); + SlObject(&c->livery[i], this->GetLoadDescription()); if (update_in_use && i != LS_DEFAULT) { if (c->livery[i].in_use == 0) { c->livery[i].colour1 = c->livery[LS_DEFAULT].colour1; @@ -479,11 +461,8 @@ static const SaveLoad _company_desc[] = { SLE_VAR(CompanyProperties, colour, SLE_UINT8), SLE_VAR(CompanyProperties, money_fraction, SLE_UINT8), - SLE_CONDNULL(1, SL_MIN_VERSION, SLV_58), ///< avail_railtypes SLE_VAR(CompanyProperties, block_preview, SLE_UINT8), - SLE_CONDNULL(2, SL_MIN_VERSION, SLV_94), ///< cargo_types - SLE_CONDNULL(4, SLV_94, SLV_170), ///< cargo_types SLE_CONDVAR(CompanyProperties, location_of_HQ, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6), SLE_CONDVAR(CompanyProperties, location_of_HQ, SLE_UINT32, SLV_6, SL_MAX_VERSION), SLE_CONDVAR(CompanyProperties, last_build_coordinate, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6), @@ -507,8 +486,6 @@ static const SaveLoad _company_desc[] = { SLE_CONDARR(CompanyProperties, yearly_expenses, SLE_INT64, 3 * 13, SLV_2, SL_MAX_VERSION), SLE_CONDVAR(CompanyProperties, is_ai, SLE_BOOL, SLV_2, SL_MAX_VERSION), - SLE_CONDNULL(1, SLV_107, SLV_112), ///< is_noai - SLE_CONDNULL(1, SLV_4, SLV_100), SLE_CONDVAR(CompanyProperties, terraform_limit, SLE_UINT32, SLV_156, SL_MAX_VERSION), SLE_CONDVAR(CompanyProperties, clear_limit, SLE_UINT32, SLV_156, SL_MAX_VERSION), @@ -522,6 +499,8 @@ static const SaveLoad _company_desc[] = { static void Save_PLYR() { + SlTableHeader(_company_desc); + for (Company *c : Company::Iterate()) { SlSetArrayIndex(c->index); SlObject(c, _company_desc); @@ -530,20 +509,24 @@ static void Save_PLYR() static void Load_PLYR() { + const std::vector<SaveLoad> slt = SlCompatTableHeader(_company_desc, _company_sl_compat); + int index; while ((index = SlIterateArray()) != -1) { Company *c = new (index) Company(); - SlObject(c, _company_desc); + SlObject(c, slt); _company_colours[index] = (Colours)c->colour; } } static void Check_PLYR() { + const std::vector<SaveLoad> slt = SlCompatTableHeader(_company_desc, _company_sl_compat); + int index; while ((index = SlIterateArray()) != -1) { CompanyProperties *cprops = new CompanyProperties(); - SlObject(cprops, _company_desc); + SlObject(cprops, slt); /* We do not load old custom names */ if (IsSavegameVersionBefore(SLV_84)) { @@ -576,7 +559,7 @@ static void Ptrs_PLYR() static const ChunkHandler company_chunk_handlers[] = { - { 'PLYR', Save_PLYR, Load_PLYR, Ptrs_PLYR, Check_PLYR, CH_ARRAY }, + { 'PLYR', Save_PLYR, Load_PLYR, Ptrs_PLYR, Check_PLYR, CH_TABLE }, }; extern const ChunkHandlerTable _company_chunk_handlers(company_chunk_handlers); |