Changeset - r25752:2d6c2238f03d
[Not reviewed]
master
0 31 26
Patric Stout - 3 years ago 2021-05-30 13:59:40
truebrain@openttd.org
Add: store headers for most savegame chunks

When a header is added, the chunk changes from CH_ARRAY type to
CH_TABLE type.
57 files changed with 1411 insertions and 290 deletions:
0 comments (0 inline, 0 general)
src/saveload/CMakeLists.txt
Show inline comments
 
add_subdirectory(compat)
 

	
 
add_files(
 
    afterload.cpp
 
    ai_sl.cpp
src/saveload/ai_sl.cpp
Show inline comments
 
@@ -8,9 +8,12 @@
 
/** @file ai_sl.cpp Handles the saveload part of the AIs */
 

	
 
#include "../stdafx.h"
 
#include "../debug.h"
 

	
 
#include "saveload.h"
 
#include "compat/ai_sl_compat.h"
 

	
 
#include "../company_base.h"
 
#include "../debug.h"
 
#include "saveload.h"
 
#include "../string_func.h"
 

	
 
#include "../ai/ai.hpp"
 
@@ -25,7 +28,7 @@ static int         _ai_saveload_version;
 
static std::string _ai_saveload_settings;
 
static bool        _ai_saveload_is_random;
 

	
 
static const SaveLoad _ai_company[] = {
 
static const SaveLoad _ai_company_desc[] = {
 
	   SLEG_SSTR("name",      _ai_saveload_name,         SLE_STR),
 
	   SLEG_SSTR("settings",  _ai_saveload_settings,     SLE_STR),
 
	SLEG_CONDVAR("version",   _ai_saveload_version,   SLE_UINT32, SLV_108, SL_MAX_VERSION),
 
@@ -49,13 +52,15 @@ static void SaveReal_AIPL(int *index_ptr
 
	_ai_saveload_is_random = config->IsRandom();
 
	_ai_saveload_settings = config->SettingsToString();
 

	
 
	SlObject(nullptr, _ai_company);
 
	SlObject(nullptr, _ai_company_desc);
 
	/* If the AI was active, store its data too */
 
	if (Company::IsValidAiID(index)) AI::Save(index);
 
}
 

	
 
static void Load_AIPL()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_ai_company_desc, _ai_company_sl_compat);
 

	
 
	/* Free all current data */
 
	for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) {
 
		AIConfig::GetConfig(c, AIConfig::SSS_FORCE_GAME)->Change(nullptr);
 
@@ -67,7 +72,7 @@ static void Load_AIPL()
 

	
 
		_ai_saveload_is_random = false;
 
		_ai_saveload_version = -1;
 
		SlObject(nullptr, _ai_company);
 
		SlObject(nullptr, slt);
 

	
 
		if (_networking && !_network_server) {
 
			if (Company::IsValidAiID(index)) AIInstance::LoadEmpty();
 
@@ -114,6 +119,8 @@ static void Load_AIPL()
 

	
 
static void Save_AIPL()
 
{
 
	SlTableHeader(_ai_company_desc);
 

	
 
	for (int i = COMPANY_FIRST; i < MAX_COMPANIES; i++) {
 
		SlSetArrayIndex(i);
 
		SlAutolength((AutolengthProc *)SaveReal_AIPL, &i);
 
@@ -121,7 +128,7 @@ static void Save_AIPL()
 
}
 

	
 
static const ChunkHandler ai_chunk_handlers[] = {
 
	{ 'AIPL', Save_AIPL, Load_AIPL, nullptr, nullptr, CH_ARRAY },
 
	{ 'AIPL', Save_AIPL, Load_AIPL, nullptr, nullptr, CH_TABLE },
 
};
 

	
 
extern const ChunkHandlerTable _ai_chunk_handlers(ai_chunk_handlers);
src/saveload/airport_sl.cpp
Show inline comments
 
@@ -35,8 +35,8 @@ static void Load_ATID()
 
}
 

	
 
static const ChunkHandler airport_chunk_handlers[] = {
 
	{ 'ATID', Save_ATID, Load_ATID, nullptr, nullptr, CH_ARRAY },
 
	{ 'APID', Save_APID, Load_APID, nullptr, nullptr, CH_ARRAY },
 
	{ 'ATID', Save_ATID, Load_ATID, nullptr, nullptr, CH_TABLE },
 
	{ 'APID', Save_APID, Load_APID, nullptr, nullptr, CH_TABLE },
 
};
 

	
 
extern const ChunkHandlerTable _airport_chunk_handlers(airport_chunk_handlers);
src/saveload/animated_tile_sl.cpp
Show inline comments
 
@@ -8,12 +8,14 @@
 
/** @file animated_tile_sl.cpp Code handling saving and loading of animated tiles */
 

	
 
#include "../stdafx.h"
 

	
 
#include "saveload.h"
 
#include "compat/animated_tile_sl_compat.h"
 

	
 
#include "../tile_type.h"
 
#include "../core/alloc_func.hpp"
 
#include "../core/smallvec_type.hpp"
 

	
 
#include "saveload.h"
 

	
 
#include "../safeguards.h"
 

	
 
extern std::vector<TileIndex> _animated_tiles;
 
@@ -27,6 +29,8 @@ static const SaveLoad _animated_tile_des
 
 */
 
static void Save_ANIT()
 
{
 
	SlTableHeader(_animated_tile_desc);
 

	
 
	SlSetArrayIndex(0);
 
	SlGlobList(_animated_tile_desc);
 
}
 
@@ -57,17 +61,15 @@ static void Load_ANIT()
 
		return;
 
	}
 

	
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_animated_tile_desc, _animated_tile_sl_compat);
 

	
 
	if (SlIterateArray() == -1) return;
 
	SlGlobList(_animated_tile_desc);
 
	SlGlobList(slt);
 
	if (SlIterateArray() != -1) SlErrorCorrupt("Too many ANIT entries");
 
}
 

	
 
/**
 
 * "Definition" imported by the saveload code to be able to load and save
 
 * the animated tile table.
 
 */
 
static const ChunkHandler animated_tile_chunk_handlers[] = {
 
	{ 'ANIT', Save_ANIT, Load_ANIT, nullptr, nullptr, CH_ARRAY },
 
	{ 'ANIT', Save_ANIT, Load_ANIT, nullptr, nullptr, CH_TABLE },
 
};
 

	
 
extern const ChunkHandlerTable _animated_tile_chunk_handlers(animated_tile_chunk_handlers);
src/saveload/autoreplace_sl.cpp
Show inline comments
 
@@ -8,9 +8,11 @@
 
/** @file autoreplace_sl.cpp Code handling saving and loading of autoreplace rules */
 

	
 
#include "../stdafx.h"
 
#include "../autoreplace_base.h"
 

	
 
#include "saveload.h"
 
#include "compat/autoreplace_sl_compat.h"
 

	
 
#include "../autoreplace_base.h"
 

	
 
#include "../safeguards.h"
 

	
 
@@ -25,6 +27,8 @@ static const SaveLoad _engine_renew_desc
 

	
 
static void Save_ERNW()
 
{
 
	SlTableHeader(_engine_renew_desc);
 

	
 
	for (EngineRenew *er : EngineRenew::Iterate()) {
 
		SlSetArrayIndex(er->index);
 
		SlObject(er, _engine_renew_desc);
 
@@ -33,11 +37,13 @@ static void Save_ERNW()
 

	
 
static void Load_ERNW()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_engine_renew_desc, _engine_renew_sl_compat);
 

	
 
	int index;
 

	
 
	while ((index = SlIterateArray()) != -1) {
 
		EngineRenew *er = new (index) EngineRenew();
 
		SlObject(er, _engine_renew_desc);
 
		SlObject(er, slt);
 

	
 
		/* Advanced vehicle lists, ungrouped vehicles got added */
 
		if (IsSavegameVersionBefore(SLV_60)) {
 
@@ -56,7 +62,7 @@ static void Ptrs_ERNW()
 
}
 

	
 
static const ChunkHandler autoreplace_chunk_handlers[] = {
 
	{ 'ERNW', Save_ERNW, Load_ERNW, Ptrs_ERNW, nullptr, CH_ARRAY },
 
	{ 'ERNW', Save_ERNW, Load_ERNW, Ptrs_ERNW, nullptr, CH_TABLE },
 
};
 

	
 
extern const ChunkHandlerTable _autoreplace_chunk_handlers(autoreplace_chunk_handlers);
src/saveload/cargomonitor_sl.cpp
Show inline comments
 
@@ -8,9 +8,11 @@
 
/** @file cargomonitor_sl.cpp Code handling saving and loading of Cargo monitoring. */
 

	
 
#include "../stdafx.h"
 
#include "../cargomonitor.h"
 

	
 
#include "saveload.h"
 
#include "compat/cargomonitor_sl_compat.h"
 

	
 
#include "../cargomonitor.h"
 

	
 
#include "../safeguards.h"
 

	
 
@@ -44,6 +46,8 @@ static CargoMonitorID FixupCargoMonitor(
 
/** Save the #_cargo_deliveries monitoring map. */
 
static void SaveDelivery()
 
{
 
	SlTableHeader(_cargomonitor_pair_desc);
 

	
 
	TempStorage storage;
 

	
 
	int i = 0;
 
@@ -63,13 +67,15 @@ static void SaveDelivery()
 
/** Load the #_cargo_deliveries monitoring map. */
 
static void LoadDelivery()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_cargomonitor_pair_desc, _cargomonitor_pair_sl_compat);
 

	
 
	TempStorage storage;
 
	bool fix = IsSavegameVersionBefore(SLV_FIX_CARGO_MONITOR);
 

	
 
	ClearCargoDeliveryMonitoring();
 
	for (;;) {
 
		if (SlIterateArray() < 0) break;
 
		SlObject(&storage, _cargomonitor_pair_desc);
 
		SlObject(&storage, slt);
 

	
 
		if (fix) storage.number = FixupCargoMonitor(storage.number);
 

	
 
@@ -82,6 +88,8 @@ static void LoadDelivery()
 
/** Save the #_cargo_pickups monitoring map. */
 
static void SavePickup()
 
{
 
	SlTableHeader(_cargomonitor_pair_desc);
 

	
 
	TempStorage storage;
 

	
 
	int i = 0;
 
@@ -101,13 +109,15 @@ static void SavePickup()
 
/** Load the #_cargo_pickups monitoring map. */
 
static void LoadPickup()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_cargomonitor_pair_desc, _cargomonitor_pair_sl_compat);
 

	
 
	TempStorage storage;
 
	bool fix = IsSavegameVersionBefore(SLV_FIX_CARGO_MONITOR);
 

	
 
	ClearCargoPickupMonitoring();
 
	for (;;) {
 
		if (SlIterateArray() < 0) break;
 
		SlObject(&storage, _cargomonitor_pair_desc);
 
		SlObject(&storage, slt);
 

	
 
		if (fix) storage.number = FixupCargoMonitor(storage.number);
 

	
 
@@ -117,9 +127,9 @@ static void LoadPickup()
 
}
 

	
 
/** Chunk definition of the cargomonitoring maps. */
 
static const ChunkHandler cargomonitor_chunk_handlers[] = {
 
	{ 'CMDL', SaveDelivery, LoadDelivery, nullptr, nullptr, CH_ARRAY },
 
	{ 'CMPU', SavePickup,   LoadPickup,   nullptr, nullptr, CH_ARRAY },
 
extern const ChunkHandler cargomonitor_chunk_handlers[] = {
 
	{ 'CMDL', SaveDelivery, LoadDelivery, nullptr, nullptr, CH_TABLE },
 
	{ 'CMPU', SavePickup,   LoadPickup,   nullptr, nullptr, CH_TABLE },
 
};
 

	
 
extern const ChunkHandlerTable _cargomonitor_chunk_handlers(cargomonitor_chunk_handlers);
src/saveload/cargopacket_sl.cpp
Show inline comments
 
@@ -8,11 +8,13 @@
 
/** @file cargopacket_sl.cpp Code handling saving and loading of cargo packets */
 

	
 
#include "../stdafx.h"
 

	
 
#include "saveload.h"
 
#include "compat/cargopacket_sl_compat.h"
 

	
 
#include "../vehicle_base.h"
 
#include "../station_base.h"
 

	
 
#include "saveload.h"
 

	
 
#include "../safeguards.h"
 

	
 
/**
 
@@ -94,9 +96,6 @@ SaveLoadTable GetCargoPacketDesc()
 
		     SLE_VAR(CargoPacket, feeder_share,    SLE_INT64),
 
		 SLE_CONDVAR(CargoPacket, source_type,     SLE_UINT8,  SLV_125, SL_MAX_VERSION),
 
		 SLE_CONDVAR(CargoPacket, source_id,       SLE_UINT16, SLV_125, SL_MAX_VERSION),
 

	
 
		/* Used to be paid_for, but that got changed. */
 
		SLE_CONDNULL(1, SL_MIN_VERSION, SLV_121),
 
	};
 
	return _cargopacket_desc;
 
}
 
@@ -106,6 +105,8 @@ SaveLoadTable GetCargoPacketDesc()
 
 */
 
static void Save_CAPA()
 
{
 
	SlTableHeader(GetCargoPacketDesc());
 

	
 
	for (CargoPacket *cp : CargoPacket::Iterate()) {
 
		SlSetArrayIndex(cp->index);
 
		SlObject(cp, GetCargoPacketDesc());
 
@@ -117,17 +118,18 @@ static void Save_CAPA()
 
 */
 
static void Load_CAPA()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(GetCargoPacketDesc(), _cargopacket_sl_compat);
 

	
 
	int index;
 

	
 
	while ((index = SlIterateArray()) != -1) {
 
		CargoPacket *cp = new (index) CargoPacket();
 
		SlObject(cp, GetCargoPacketDesc());
 
		SlObject(cp, slt);
 
	}
 
}
 

	
 
/** Chunk handlers related to cargo packets. */
 
static const ChunkHandler cargopacket_chunk_handlers[] = {
 
	{ 'CAPA', Save_CAPA, Load_CAPA, nullptr, nullptr, CH_ARRAY },
 
	{ 'CAPA', Save_CAPA, Load_CAPA, nullptr, nullptr, CH_TABLE },
 
};
 

	
 
extern const ChunkHandlerTable _cargopacket_chunk_handlers(cargopacket_chunk_handlers);
src/saveload/cheat_sl.cpp
Show inline comments
 
@@ -8,9 +8,11 @@
 
/** @file cheat_sl.cpp Code handling saving and loading of cheats */
 

	
 
#include "../stdafx.h"
 
#include "../cheat_type.h"
 

	
 
#include "saveload.h"
 
#include "compat/cheat_sl_compat.h"
 

	
 
#include "../cheat_type.h"
 

	
 
#include "../safeguards.h"
 

	
 
@@ -23,18 +25,12 @@ static const SaveLoad _cheats_desc[] = {
 
	SLE_VAR(Cheats, money.value, SLE_BOOL),
 
	SLE_VAR(Cheats, crossing_tunnels.been_used, SLE_BOOL),
 
	SLE_VAR(Cheats, crossing_tunnels.value, SLE_BOOL),
 
	SLE_NULL(1),
 
	SLE_NULL(1), // Needs to be two NULL fields. See Load_CHTS().
 
	SLE_VAR(Cheats, no_jetcrash.been_used, SLE_BOOL),
 
	SLE_VAR(Cheats, no_jetcrash.value, SLE_BOOL),
 
	SLE_NULL(1),
 
	SLE_NULL(1), // Needs to be two NULL fields. See Load_CHTS().
 
	SLE_VAR(Cheats, change_date.been_used, SLE_BOOL),
 
	SLE_VAR(Cheats, change_date.value, SLE_BOOL),
 
	SLE_VAR(Cheats, setup_prod.been_used, SLE_BOOL),
 
	SLE_VAR(Cheats, setup_prod.value, SLE_BOOL),
 
	SLE_NULL(1),
 
	SLE_NULL(1), // Needs to be two NULL fields. See Load_CHTS().
 
	SLE_VAR(Cheats, edit_max_hl.been_used, SLE_BOOL),
 
	SLE_VAR(Cheats, edit_max_hl.value, SLE_BOOL),
 
};
 
@@ -44,9 +40,9 @@ static const SaveLoad _cheats_desc[] = {
 
 */
 
static void Save_CHTS()
 
{
 
	SlSetArrayIndex(0);
 
	SlTableHeader(_cheats_desc);
 

	
 
	SlSetLength(std::size(_cheats_desc));
 
	SlSetArrayIndex(0);
 
	SlObject(&_cheats, _cheats_desc);
 
}
 

	
 
@@ -55,18 +51,23 @@ static void Save_CHTS()
 
 */
 
static void Load_CHTS()
 
{
 
	size_t count = SlGetFieldLength();
 
	std::vector<SaveLoad> slt;
 
	std::vector<SaveLoad> slt = SlCompatTableHeader(_cheats_desc, _cheats_sl_compat);
 

	
 
	if (IsSavegameVersionBefore(SLV_TABLE_CHUNKS)) {
 
		size_t count = SlGetFieldLength();
 
		std::vector<SaveLoad> oslt;
 

	
 
	/* Cheats were added over the years without a savegame bump. They are
 
	 * stored as 2 SLE_BOOLs per entry. "count" indicates how many SLE_BOOLs
 
	 * are stored for this savegame. So read only "count" SLE_BOOLs (and in
 
	 * result "count / 2" cheats). */
 
	for (auto &sld : _cheats_desc) {
 
		count--;
 
		slt.push_back(sld);
 
		/* Cheats were added over the years without a savegame bump. They are
 
		 * stored as 2 SLE_BOOLs per entry. "count" indicates how many SLE_BOOLs
 
		 * are stored for this savegame. So read only "count" SLE_BOOLs (and in
 
		 * result "count / 2" cheats). */
 
		for (auto &sld : slt) {
 
			count--;
 
			oslt.push_back(sld);
 

	
 
		if (count == 0) break;
 
			if (count == 0) break;
 
		}
 
		slt = oslt;
 
	}
 

	
 
	if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() == -1) return;
 
@@ -75,7 +76,7 @@ static void Load_CHTS()
 
}
 

	
 
static const ChunkHandler cheat_chunk_handlers[] = {
 
	{ 'CHTS', Save_CHTS, Load_CHTS, nullptr, nullptr, CH_ARRAY },
 
	{ 'CHTS', Save_CHTS, Load_CHTS, nullptr, nullptr, CH_TABLE },
 
};
 

	
 
extern const ChunkHandlerTable _cheat_chunk_handlers(cheat_chunk_handlers);
src/saveload/compat/CMakeLists.txt
Show inline comments
 
new file 100644
 
add_files(
 
    ai_sl_compat.h
 
    autoreplace_sl_compat.h
 
    cargomonitor_sl_compat.h
 
    cargopacket_sl_compat.h
 
    cheat_sl_compat.h
 
    depot_sl_compat.h
 
    economy_sl_compat.h
 
    engine_sl_compat.h
 
    game_sl_compat.h
 
    goal_sl_compat.h
 
    group_sl_compat.h
 
    industry_sl_compat.h
 
    labelmaps_sl_compat.h
 
    map_sl_compat.h
 
    misc_sl_compat.h
 
    newgrf_sl_compat.h
 
    object_sl_compat.h
 
    order_sl_compat.h
 
    settings_sl_compat.h
 
    signs_sl_compat.h
 
    station_sl_compat.h
 
    storage_sl_compat.h
 
    story_sl_compat.h
 
    subsidy_sl_compat.h
 
)
src/saveload/compat/ai_sl_compat.h
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file ai_sl_compat.h Loading for ai chunks before table headers were added. */
 

	
 
#ifndef SAVELOAD_COMPAT_AI_H
 
#define SAVELOAD_COMPAT_AI_H
 

	
 
#include "../saveload.h"
 

	
 
/** Original field order for _ai_company_desc. */
 
const SaveLoadCompat _ai_company_sl_compat[] = {
 
	SLC_VAR("name"),
 
	SLC_VAR("settings"),
 
	SLC_VAR("version"),
 
	SLC_VAR("is_random"),
 
};
 

	
 
#endif /* SAVELOAD_COMPAT_AI_H */
src/saveload/compat/animated_tile_sl_compat.h
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file animated_tile_sl_compat.h Loading for animated_tile chunks before table headers were added. */
 

	
 
#ifndef SAVELOAD_COMPAT_ANIMATED_TILE_H
 
#define SAVELOAD_COMPAT_ANIMATED_TILE_H
 

	
 
#include "../saveload.h"
 

	
 
/** Original field order for _animated_tile_desc. */
 
const SaveLoadCompat _animated_tile_sl_compat[] = {
 
	SLC_VAR("tiles"),
 
};
 

	
 
#endif /* SAVELOAD_COMPAT_ANIMATED_TILE_H */
src/saveload/compat/autoreplace_sl_compat.h
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file autoreplace_sl_compat.h Loading for autoreplace chunks before table headers were added. */
 

	
 
#ifndef SAVELOAD_COMPAT_AUTOREPLACE_H
 
#define SAVELOAD_COMPAT_AUTOREPLACE_H
 

	
 
#include "../saveload.h"
 

	
 
/** Original field order for _engine_renew_desc. */
 
const SaveLoadCompat _engine_renew_sl_compat[] = {
 
	SLC_VAR("from"),
 
	SLC_VAR("to"),
 
	SLC_VAR("next"),
 
	SLC_VAR("group_id"),
 
	SLC_VAR("replace_when_old"),
 
};
 

	
 
#endif /* SAVELOAD_COMPAT_AUTOREPLACE_H */
src/saveload/compat/cargomonitor_sl_compat.h
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file cargomonitor_sl_compat.h Loading for cargomonitor chunks before table headers were added. */
 

	
 
#ifndef SAVELOAD_COMPAT_CARGOMONITOR_H
 
#define SAVELOAD_COMPAT_CARGOMONITOR_H
 

	
 
#include "../saveload.h"
 

	
 
/** Original field order for _cargomonitor_pair_desc. */
 
const SaveLoadCompat _cargomonitor_pair_sl_compat[] = {
 
	SLC_VAR("number"),
 
	SLC_VAR("amount"),
 
};
 

	
 
#endif /* SAVELOAD_COMPAT_CARGOMONITOR_H */
src/saveload/compat/cargopacket_sl_compat.h
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file cargopacket_sl_compat.h Loading for cargopacket chunks before table headers were added. */
 

	
 
#ifndef SAVELOAD_COMPAT_CARGOPACKET_H
 
#define SAVELOAD_COMPAT_CARGOPACKET_H
 

	
 
#include "../saveload.h"
 

	
 
/** Original field order for _cargopacket_desc. */
 
const SaveLoadCompat _cargopacket_sl_compat[] = {
 
	SLC_VAR("source"),
 
	SLC_VAR("source_xy"),
 
	SLC_VAR("loaded_at_xy"),
 
	SLC_VAR("count"),
 
	SLC_VAR("days_in_transit"),
 
	SLC_VAR("feeder_share"),
 
	SLC_VAR("source_type"),
 
	SLC_VAR("source_id"),
 
	SLC_NULL(1, SL_MIN_VERSION, SLV_121),
 
};
 

	
 
#endif /* SAVELOAD_COMPAT_CARGOPACKET_H */
src/saveload/compat/cheat_sl_compat.h
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file cheat_sl_compat.h Loading for cheat chunks before table headers were added. */
 

	
 
#ifndef SAVELOAD_COMPAT_CHEAT_H
 
#define SAVELOAD_COMPAT_CHEAT_H
 

	
 
#include "../saveload.h"
 

	
 
/** Original field order for _cheats_desc. */
 
const SaveLoadCompat _cheats_sl_compat[] = {
 
	SLC_VAR("magic_bulldozer.been_used"),
 
	SLC_VAR("magic_bulldozer.value"),
 
	SLC_VAR("switch_company.been_used"),
 
	SLC_VAR("switch_company.value"),
 
	SLC_VAR("money.been_used"),
 
	SLC_VAR("money.value"),
 
	SLC_VAR("crossing_tunnels.been_used"),
 
	SLC_VAR("crossing_tunnels.value"),
 
	SLC_NULL(1, SL_MIN_VERSION, SLV_TABLE_CHUNKS),
 
	SLC_NULL(1, SL_MIN_VERSION, SLV_TABLE_CHUNKS), // Need to be two NULL fields. See Load_CHTS().
 
	SLC_VAR("no_jetcrash.been_used"),
 
	SLC_VAR("no_jetcrash.value"),
 
	SLC_NULL(1, SL_MIN_VERSION, SLV_TABLE_CHUNKS),
 
	SLC_NULL(1, SL_MIN_VERSION, SLV_TABLE_CHUNKS), // Need to be two NULL fields. See Load_CHTS().
 
	SLC_VAR("change_date.been_used"),
 
	SLC_VAR("change_date.value"),
 
	SLC_VAR("setup_prod.been_used"),
 
	SLC_VAR("setup_prod.value"),
 
	SLC_NULL(1, SL_MIN_VERSION, SLV_TABLE_CHUNKS),
 
	SLC_NULL(1, SL_MIN_VERSION, SLV_TABLE_CHUNKS), // Need to be two NULL fields. See Load_CHTS().
 
	SLC_VAR("edit_max_hl.been_used"),
 
	SLC_VAR("edit_max_hl.value"),
 
};
 

	
 
#endif /* SAVELOAD_COMPAT_CHEAT_H */
src/saveload/compat/depot_sl_compat.h
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file depot_sl_compat.h Loading for depot chunks before table headers were added. */
 

	
 
#ifndef SAVELOAD_COMPAT_DEPOT_H
 
#define SAVELOAD_COMPAT_DEPOT_H
 

	
 
#include "../saveload.h"
 

	
 
/** Original field order for _depot_desc. */
 
const SaveLoadCompat _depot_sl_compat[] = {
 
	SLC_VAR("xy"),
 
	SLC_VAR("town_index"),
 
	SLC_VAR("town"),
 
	SLC_VAR("town_cn"),
 
	SLC_VAR("name"),
 
	SLC_VAR("build_date"),
 
};
 

	
 
#endif /* SAVELOAD_COMPAT_DEPOT_H */
src/saveload/compat/economy_sl_compat.h
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file economy_sl_compat.h Loading for economy chunks before table headers were added. */
 

	
 
#ifndef SAVELOAD_COMPAT_ECONOMY_H
 
#define SAVELOAD_COMPAT_ECONOMY_H
 

	
 
#include "../saveload.h"
 

	
 
/** Original field order for _economy_desc. */
 
const SaveLoadCompat _economy_sl_compat[] = {
 
	SLC_NULL(4, SL_MIN_VERSION, SLV_65),
 
	SLC_NULL(8, SLV_65, SLV_144),
 
	SLC_VAR("old_max_loan_unround"),
 
	SLC_VAR("old_max_loan_unround_fract"),
 
	SLC_VAR("inflation_prices"),
 
	SLC_VAR("inflation_payment"),
 
	SLC_VAR("fluct"),
 
	SLC_VAR("interest_rate"),
 
	SLC_VAR("infl_amount"),
 
	SLC_VAR("infl_amount_pr"),
 
	SLC_VAR("industry_daily_change_counter"),
 
};
 

	
 
/** Original field order for _cargopayment_desc. */
 
const SaveLoadCompat _cargopayment_sl_compat[] = {
 
	SLC_VAR("front"),
 
	SLC_VAR("route_profit"),
 
	SLC_VAR("visual_profit"),
 
	SLC_VAR("visual_transfer"),
 
};
 

	
 
#endif /* SAVELOAD_COMPAT_ECONOMY_H */
src/saveload/compat/engine_sl_compat.h
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file engine_sl_compat.h Loading for engine chunks before table headers were added. */
 

	
 
#ifndef SAVELOAD_COMPAT_ENGINE_H
 
#define SAVELOAD_COMPAT_ENGINE_H
 

	
 
#include "../saveload.h"
 

	
 
/** Original field order for _engine_desc. */
 
const SaveLoadCompat _engine_sl_compat[] = {
 
	SLC_VAR("intro_date"),
 
	SLC_VAR("age"),
 
	SLC_VAR("reliability"),
 
	SLC_VAR("reliability_spd_dec"),
 
	SLC_VAR("reliability_start"),
 
	SLC_VAR("reliability_max"),
 
	SLC_VAR("reliability_final"),
 
	SLC_VAR("duration_phase_1"),
 
	SLC_VAR("duration_phase_2"),
 
	SLC_VAR("duration_phase_3"),
 
	SLC_NULL(1, SL_MIN_VERSION, SLV_121),
 
	SLC_VAR("flags"),
 
	SLC_NULL(1, SL_MIN_VERSION, SLV_179),
 
	SLC_VAR("preview_asked"),
 
	SLC_VAR("preview_company"),
 
	SLC_VAR("preview_wait"),
 
	SLC_NULL(1, SL_MIN_VERSION,  SLV_45),
 
	SLC_VAR("company_avail"),
 
	SLC_VAR("company_hidden"),
 
	SLC_VAR("name"),
 
	SLC_NULL(16, SLV_2, SLV_144),
 
};
 

	
 
/** Original field order for _engine_id_mapping_desc. */
 
const SaveLoadCompat _engine_id_mapping_sl_compat[] = {
 
	SLC_VAR("grfid"),
 
	SLC_VAR("internal_id"),
 
	SLC_VAR("type"),
 
	SLC_VAR("substitute_id"),
 
};
 

	
 
#endif /* SAVELOAD_COMPAT_ENGINE_H */
src/saveload/compat/game_sl_compat.h
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file game_sl_compat.h Loading for game chunks before table headers were added. */
 

	
 
#ifndef SAVELOAD_COMPAT_GAME_H
 
#define SAVELOAD_COMPAT_GAME_H
 

	
 
#include "../saveload.h"
 

	
 
/** Original field order for _game_script_desc. */
 
const SaveLoadCompat _game_script_sl_compat[] = {
 
	SLC_VAR("name"),
 
	SLC_VAR("settings"),
 
	SLC_VAR("version"),
 
	SLC_VAR("is_random"),
 
};
 

	
 
#endif /* SAVELOAD_COMPAT_GAME_H */
src/saveload/compat/goal_sl_compat.h
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file goal_sl_compat.h Loading of goal chunks before table headers were added. */
 

	
 
#ifndef SAVELOAD_COMPAT_GOAL_H
 
#define SAVELOAD_COMPAT_GOAL_H
 

	
 
#include "../saveload.h"
 

	
 
/** Original field order for _goals_desc. */
 
const SaveLoadCompat _goals_sl_compat[] = {
 
	SLC_VAR("company"),
 
	SLC_VAR("type"),
 
	SLC_VAR("dst"),
 
	SLC_VAR("text"),
 
	SLC_VAR("progress"),
 
	SLC_VAR("completed"),
 
};
 

	
 
#endif /* SAVELOAD_COMPAT_GOAL_H */
src/saveload/compat/group_sl_compat.h
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file group_sl_compat.h Loading of group chunks before table headers were added. */
 

	
 
#ifndef SAVELOAD_COMPAT_GROUP_H
 
#define SAVELOAD_COMPAT_GROUP_H
 

	
 
#include "../saveload.h"
 

	
 
/** Original field order for _group_desc. */
 
const SaveLoadCompat _group_sl_compat[] = {
 
	SLC_VAR("name"),
 
	SLC_NULL(2, SL_MIN_VERSION, SLV_164),
 
	SLC_VAR("owner"),
 
	SLC_VAR("vehicle_type"),
 
	SLC_VAR("flags"),
 
	SLC_VAR("livery.in_use"),
 
	SLC_VAR("livery.colour1"),
 
	SLC_VAR("livery.colour2"),
 
	SLC_VAR("parent"),
 
};
 

	
 
#endif /* SAVELOAD_COMPAT_GROUP_H */
src/saveload/compat/industry_sl_compat.h
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file industry_sl_compat.h Loading of industry chunks before table headers were added. */
 

	
 
#ifndef SAVELOAD_COMPAT_INDUSTRY_H
 
#define SAVELOAD_COMPAT_INDUSTRY_H
 

	
 
#include "../saveload.h"
 

	
 
/** Original field order for _industry_desc. */
 
const SaveLoadCompat _industry_sl_compat[] = {
 
	SLC_VAR("location.tile"),
 
	SLC_VAR("location.w"),
 
	SLC_VAR("location.h"),
 
	SLC_VAR("town"),
 
	SLC_VAR("neutral_station"),
 
	SLC_NULL(2, SL_MIN_VERSION, SLV_61),
 
	SLC_VAR("produced_cargo"),
 
	SLC_VAR("incoming_cargo_waiting"),
 
	SLC_VAR("produced_cargo_waiting"),
 
	SLC_VAR("production_rate"),
 
	SLC_NULL(3, SL_MIN_VERSION, SLV_61),
 
	SLC_VAR("accepts_cargo"),
 
	SLC_VAR("prod_level"),
 
	SLC_VAR("this_month_production"),
 
	SLC_VAR("this_month_transported"),
 
	SLC_VAR("last_month_pct_transported"),
 
	SLC_VAR("last_month_production"),
 
	SLC_VAR("last_month_transported"),
 
	SLC_VAR("counter"),
 
	SLC_VAR("type"),
 
	SLC_VAR("owner"),
 
	SLC_VAR("random_colour"),
 
	SLC_VAR("last_prod_year"),
 
	SLC_VAR("was_cargo_delivered"),
 
	SLC_VAR("ctlflags"),
 
	SLC_VAR("founder"),
 
	SLC_VAR("construction_date"),
 
	SLC_VAR("construction_type"),
 
	SLC_VAR("last_cargo_accepted_at[0]"),
 
	SLC_VAR("last_cargo_accepted_at"),
 
	SLC_VAR("selected_layout"),
 
	SLC_VAR("exclusive_supplier"),
 
	SLC_VAR("exclusive_consumer"),
 
	SLC_VAR("storage"),
 
	SLC_VAR("psa"),
 
	SLC_NULL(1, SLV_82, SLV_197),
 
	SLC_VAR("random"),
 
	SLC_VAR("text"),
 
	SLC_NULL(32, SLV_2, SLV_144),
 
};
 

	
 
/** Original field order for _industry_builder_desc. */
 
const SaveLoadCompat _industry_builder_sl_compat[] = {
 
	SLC_VAR("wanted_inds"),
 
};
 

	
 
/** Original field order for _industrytype_builder_desc. */
 
const SaveLoadCompat _industrytype_builder_sl_compat[] = {
 
	SLC_VAR("probability"),
 
	SLC_VAR("min_number"),
 
	SLC_VAR("target_count"),
 
	SLC_VAR("max_wait"),
 
	SLC_VAR("wait_count"),
 
};
 

	
 
#endif /* SAVELOAD_COMPAT_INDUSTRY_H */
src/saveload/compat/labelmaps_sl_compat.h
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file labelmaps_sl_compat.h Loading of labelmaps chunks before table headers were added. */
 

	
 
#ifndef SAVELOAD_COMPAT_LABELMAPS_H
 
#define SAVELOAD_COMPAT_LABELMAPS_H
 

	
 
#include "../saveload.h"
 

	
 
/** Original field order for _label_object_desc. */
 
const SaveLoadCompat _label_object_sl_compat[] = {
 
	SLC_VAR("label"),
 
};
 

	
 
#endif /* SAVELOAD_COMPAT_LABELMAPS_H */
src/saveload/compat/map_sl_compat.h
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file map_sl_compat.h Loading for map chunks before table headers were added. */
 

	
 
#ifndef SAVELOAD_COMPAT_MAP_H
 
#define SAVELOAD_COMPAT_MAP_H
 

	
 
#include "../saveload.h"
 

	
 
/** Original field order for _map_desc. */
 
const SaveLoadCompat _map_sl_compat[] = {
 
	SLC_VAR("dim_x"),
 
	SLC_VAR("dim_y"),
 
};
 

	
 
#endif /* SAVELOAD_COMPAT_MAP_H */
src/saveload/compat/misc_sl_compat.h
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file misc_sl_compat.h Loading for misc chunks before table headers were added. */
 

	
 
#ifndef SAVELOAD_COMPAT_MISC_H
 
#define SAVELOAD_COMPAT_MISC_H
 

	
 
#include "../saveload.h"
 

	
 
/** Original field order for _date_desc. */
 
const SaveLoadCompat _date_sl_compat[] = {
 
	SLC_VAR("date"),
 
	SLC_VAR("date_fract"),
 
	SLC_VAR("tick_counter"),
 
	SLC_NULL(2, SL_MIN_VERSION, SLV_157),
 
	SLC_VAR("age_cargo_skip_counter"),
 
	SLC_NULL(1, SL_MIN_VERSION, SLV_46),
 
	SLC_VAR("cur_tileloop_tile"),
 
	SLC_VAR("next_disaster_start"),
 
	SLC_NULL(2, SL_MIN_VERSION, SLV_120),
 
	SLC_VAR("random_state[0]"),
 
	SLC_VAR("random_state[1]"),
 
	SLC_NULL(1, SL_MIN_VERSION,  SLV_10),
 
	SLC_NULL(4, SLV_10, SLV_120),
 
	SLC_VAR("company_tick_counter"),
 
	SLC_VAR("next_competitor_start"),
 
	SLC_VAR("trees_tick_counter"),
 
	SLC_VAR("pause_mode"),
 
	SLC_NULL(4, SLV_11, SLV_120),
 
};
 

	
 
/** Original field order for _date_check_desc. */
 
const SaveLoadCompat _date_check_sl_compat[] = {
 
	SLC_VAR("date"),
 
	SLC_NULL(2, SL_MIN_VERSION, SL_MAX_VERSION), // date_fract
 
	SLC_NULL(2, SL_MIN_VERSION, SL_MAX_VERSION), // tick_counter
 
	SLC_NULL(2, SL_MIN_VERSION, SLV_157),
 
	SLC_NULL(1, SL_MIN_VERSION, SLV_162),        // age_cargo_skip_counter
 
	SLC_NULL(1, SL_MIN_VERSION, SLV_46),
 
	SLC_NULL(2, SL_MIN_VERSION, SLV_6),          // cur_tileloop_tile
 
	SLC_NULL(4, SLV_6, SL_MAX_VERSION),          // cur_tileloop_tile
 
	SLC_NULL(2, SL_MIN_VERSION, SL_MAX_VERSION), // disaster_delay
 
	SLC_NULL(2, SL_MIN_VERSION, SLV_120),
 
	SLC_NULL(4, SL_MIN_VERSION, SL_MAX_VERSION), // random.state[0]
 
	SLC_NULL(4, SL_MIN_VERSION, SL_MAX_VERSION), // random.state[1]
 
	SLC_NULL(1,  SL_MIN_VERSION,  SLV_10),
 
	SLC_NULL(4, SLV_10, SLV_120),
 
	SLC_NULL(1, SL_MIN_VERSION, SL_MAX_VERSION), // cur_company_tick_index
 
	SLC_NULL(2, SL_MIN_VERSION, SLV_109),        // next_competitor_start
 
	SLC_NULL(4, SLV_109, SL_MAX_VERSION),        // next_competitor_start
 
	SLC_NULL(1, SL_MIN_VERSION, SL_MAX_VERSION), // trees_tick_ctr
 
	SLC_NULL(1, SLV_4, SL_MAX_VERSION),          // pause_mode
 
	SLC_NULL(4, SLV_11, SLV_120),
 
};
 

	
 
/** Original field order for _view_desc. */
 
const SaveLoadCompat _view_sl_compat[] = {
 
	SLC_VAR("x"),
 
	SLC_VAR("y"),
 
	SLC_VAR("zoom"),
 
};
 

	
 
#endif /* SAVELOAD_COMPAT_MISC_H */
src/saveload/compat/newgrf_sl_compat.h
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file newgrf_sl_compat.h Loading of newgrf chunks before table headers were added. */
 

	
 
#ifndef SAVELOAD_COMPAT_NEWGRF_H
 
#define SAVELOAD_COMPAT_NEWGRF_H
 

	
 
#include "../saveload.h"
 

	
 
/** Original field order for _newgrf_mapping_desc. */
 
const SaveLoadCompat _newgrf_mapping_sl_compat[] = {
 
	SLC_VAR("grfid"),
 
	SLC_VAR("entity_id"),
 
	SLC_VAR("substitute_id"),
 
};
 

	
 
/** Original field order for _newgrf_desc. */
 
const SaveLoadCompat _grfconfig_sl_compat[] = {
 
	SLC_VAR("filename"),
 
	SLC_VAR("ident.grfid"),
 
	SLC_VAR("ident.md5sum"),
 
	SLC_VAR("version"),
 
	SLC_VAR("param"),
 
	SLC_VAR("num_params"),
 
	SLC_VAR("palette"),
 
};
 

	
 
#endif /* SAVELOAD_COMPAT_NEWGRF_H */
src/saveload/compat/object_sl_compat.h
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file object_sl_compat.h Loading of object chunks before table headers were added. */
 

	
 
#ifndef SAVELOAD_COMPAT_OBJECT_H
 
#define SAVELOAD_COMPAT_OBJECT_H
 

	
 
#include "../saveload.h"
 

	
 
/** Original field order for _object_desc. */
 
const SaveLoadCompat _object_sl_compat[] = {
 
	SLC_VAR("location.tile"),
 
	SLC_VAR("location.w"),
 
	SLC_VAR("location.h"),
 
	SLC_VAR("town"),
 
	SLC_VAR("build_date"),
 
	SLC_VAR("colour"),
 
	SLC_VAR("view"),
 
	SLC_VAR("type"),
 
};
 

	
 
#endif /* SAVELOAD_COMPAT_OBJECT_H */
src/saveload/compat/order_sl_compat.h
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file order_sl_compat.h Loading of order chunks before table headers were added. */
 

	
 
#ifndef SAVELOAD_COMPAT_ORDER_H
 
#define SAVELOAD_COMPAT_ORDER_H
 

	
 
#include "../saveload.h"
 

	
 
/** Original field order for _order_desc. */
 
const SaveLoadCompat _order_sl_compat[] = {
 
	SLC_VAR("type"),
 
	SLC_VAR("flags"),
 
	SLC_VAR("dest"),
 
	SLC_VAR("next"),
 
	SLC_VAR("refit_cargo"),
 
	SLC_NULL(1, SLV_36, SLV_182),
 
	SLC_VAR("wait_time"),
 
	SLC_VAR("travel_time"),
 
	SLC_VAR("max_speed"),
 
	SLC_NULL(10, SLV_5, SLV_36),
 
};
 

	
 
/** Original field order for _orderlist_desc. */
 
const SaveLoadCompat _orderlist_sl_compat[] = {
 
	SLC_VAR("first"),
 
};
 

	
 
/** Original field order for _order_backup_desc. */
 
const SaveLoadCompat _order_backup_sl_compat[] = {
 
	SLC_VAR("user"),
 
	SLC_VAR("tile"),
 
	SLC_VAR("group"),
 
	SLC_VAR("service_interval"),
 
	SLC_VAR("name"),
 
	SLC_NULL(2, SL_MIN_VERSION, SLV_192),
 
	SLC_VAR("clone"),
 
	SLC_VAR("cur_real_order_index"),
 
	SLC_VAR("cur_implicit_order_index"),
 
	SLC_VAR("current_order_time"),
 
	SLC_VAR("lateness_counter"),
 
	SLC_VAR("timetable_start"),
 
	SLC_VAR("vehicle_flags"),
 
	SLC_VAR("orders"),
 
};
 

	
 
#endif /* SAVELOAD_COMPAT_ORDER_H */
src/saveload/compat/settings_sl_compat.h
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file settings_sl_compat.h Loading of settings chunks before table headers were added. */
 

	
 
#ifndef SAVELOAD_COMPAT_SETTINGS_H
 
#define SAVELOAD_COMPAT_SETTINGS_H
 

	
 
#include "../saveload.h"
 

	
 
/** Original field order for _gameopt. */
 
const SaveLoadCompat _gameopt_sl_compat[] = {
 
	SLC_VAR("diff_custom"),
 
	SLC_VAR("diff_level"),
 
	SLC_VAR("locale.currency"),
 
	SLC_VAR("units"),
 
	SLC_VAR("game_creation.town_name"),
 
	SLC_VAR("game_creation.landscape"),
 
	SLC_VAR("game_creation.snow_line_height"),
 
	SLC_NULL(1, SLV_22, SLV_165),
 
	SLC_NULL(1, SL_MIN_VERSION, SLV_23),
 
	SLC_VAR("vehicle.road_side"),
 
};
 

	
 
/** Original field order for _settings. */
 
const SaveLoadCompat _settings_sl_compat[] = {
 
	SLC_VAR("difficulty.max_no_competitors"),
 
	SLC_NULL(1, SLV_97, SLV_110),
 
	SLC_VAR("difficulty.number_towns"),
 
	SLC_VAR("difficulty.industry_density"),
 
	SLC_VAR("difficulty.max_loan"),
 
	SLC_VAR("difficulty.initial_interest"),
 
	SLC_VAR("difficulty.vehicle_costs"),
 
	SLC_VAR("difficulty.competitor_speed"),
 
	SLC_NULL(1, SLV_97, SLV_110),
 
	SLC_VAR("difficulty.vehicle_breakdowns"),
 
	SLC_VAR("difficulty.subsidy_multiplier"),
 
	SLC_VAR("difficulty.subsidy_duration"),
 
	SLC_VAR("difficulty.construction_cost"),
 
	SLC_VAR("difficulty.terrain_type"),
 
	SLC_VAR("difficulty.quantity_sea_lakes"),
 
	SLC_VAR("difficulty.economy"),
 
	SLC_VAR("difficulty.line_reverse_mode"),
 
	SLC_VAR("difficulty.disasters"),
 
	SLC_VAR("difficulty.town_council_tolerance"),
 
	SLC_VAR("diff_level"),
 
	SLC_VAR("game_creation.town_name"),
 
	SLC_VAR("game_creation.landscape"),
 
	SLC_NULL(1, SLV_97, SLV_164),
 
	SLC_VAR("vehicle.road_side"),
 
	SLC_VAR("construction.map_height_limit"),
 
	SLC_VAR("game_creation.heightmap_height"),
 
	SLC_VAR("construction.build_on_slopes"),
 
	SLC_VAR("construction.command_pause_level"),
 
	SLC_VAR("construction.terraform_per_64k_frames"),
 
	SLC_VAR("construction.terraform_frame_burst"),
 
	SLC_VAR("construction.clear_per_64k_frames"),
 
	SLC_VAR("construction.clear_frame_burst"),
 
	SLC_VAR("construction.tree_per_64k_frames"),
 
	SLC_VAR("construction.tree_frame_burst"),
 
	SLC_VAR("construction.autoslope"),
 
	SLC_VAR("construction.extra_dynamite"),
 
	SLC_VAR("construction.max_bridge_length"),
 
	SLC_VAR("construction.max_bridge_height"),
 
	SLC_VAR("construction.max_tunnel_length"),
 
	SLC_NULL(1, SL_MIN_VERSION, SLV_159),
 
	SLC_VAR("construction.train_signal_side"),
 
	SLC_VAR("station.never_expire_airports"),
 
	SLC_VAR("economy.town_layout"),
 
	SLC_VAR("economy.allow_town_roads"),
 
	SLC_VAR("economy.found_town"),
 
	SLC_VAR("economy.allow_town_level_crossings"),
 
	SLC_VAR("economy.town_cargogen_mode"),
 
	SLC_VAR("linkgraph.recalc_interval"),
 
	SLC_VAR("linkgraph.recalc_time"),
 
	SLC_VAR("linkgraph.distribution_pax"),
 
	SLC_VAR("linkgraph.distribution_mail"),
 
	SLC_VAR("linkgraph.distribution_armoured"),
 
	SLC_VAR("linkgraph.distribution_default"),
 
	SLC_VAR("linkgraph.accuracy"),
 
	SLC_VAR("linkgraph.demand_distance"),
 
	SLC_VAR("linkgraph.demand_size"),
 
	SLC_VAR("linkgraph.short_path_saturation"),
 
	SLC_VAR("vehicle.train_acceleration_model"),
 
	SLC_VAR("vehicle.roadveh_acceleration_model"),
 
	SLC_VAR("vehicle.train_slope_steepness"),
 
	SLC_VAR("vehicle.roadveh_slope_steepness"),
 
	SLC_VAR("pf.forbid_90_deg"),
 
	SLC_VAR("vehicle.max_train_length"),
 
	SLC_NULL(1, SL_MIN_VERSION, SLV_159),
 
	SLC_VAR("vehicle.smoke_amount"),
 
	SLC_NULL(1, SL_MIN_VERSION, SLV_159),
 
	SLC_VAR("pf.roadveh_queue"),
 
	SLC_VAR("pf.new_pathfinding_all"),
 
	SLC_VAR("pf.yapf.ship_use_yapf"),
 
	SLC_VAR("pf.yapf.road_use_yapf"),
 
	SLC_VAR("pf.yapf.rail_use_yapf"),
 
	SLC_VAR("pf.pathfinder_for_trains"),
 
	SLC_VAR("pf.pathfinder_for_roadvehs"),
 
	SLC_VAR("pf.pathfinder_for_ships"),
 
	SLC_VAR("vehicle.never_expire_vehicles"),
 
	SLC_VAR("vehicle.max_trains"),
 
	SLC_VAR("vehicle.max_roadveh"),
 
	SLC_VAR("vehicle.max_aircraft"),
 
	SLC_VAR("vehicle.max_ships"),
 
	SLC_VAR("_old_vds.servint_ispercent"),
 
	SLC_VAR("_old_vds.servint_trains"),
 
	SLC_VAR("_old_vds.servint_roadveh"),
 
	SLC_VAR("_old_vds.servint_ships"),
 
	SLC_VAR("_old_vds.servint_aircraft"),
 
	SLC_VAR("order.no_servicing_if_no_breakdowns"),
 
	SLC_VAR("vehicle.wagon_speed_limits"),
 
	SLC_VAR("vehicle.disable_elrails"),
 
	SLC_VAR("vehicle.freight_trains"),
 
	SLC_NULL(1, SLV_67, SLV_159),
 
	SLC_VAR("vehicle.plane_speed"),
 
	SLC_VAR("vehicle.dynamic_engines"),
 
	SLC_VAR("vehicle.plane_crashes"),
 
	SLC_NULL(1, SL_MIN_VERSION, SLV_159),
 
	SLC_VAR("gui.sg_full_load_any"),
 
	SLC_VAR("order.improved_load"),
 
	SLC_VAR("order.selectgoods"),
 
	SLC_VAR("gui.sg_new_nonstop"),
 
	SLC_NULL(1, SL_MIN_VERSION, SLV_159),
 
	SLC_VAR("station.station_spread"),
 
	SLC_VAR("order.serviceathelipad"),
 
	SLC_VAR("station.modified_catchment"),
 
	SLC_VAR("station.serve_neutral_industries"),
 
	SLC_VAR("order.gradual_loading"),
 
	SLC_VAR("construction.road_stop_on_town_road"),
 
	SLC_VAR("construction.road_stop_on_competitor_road"),
 
	SLC_VAR("station.adjacent_stations"),
 
	SLC_VAR("economy.station_noise_level"),
 
	SLC_VAR("station.distant_join_stations"),
 
	SLC_VAR("economy.inflation"),
 
	SLC_VAR("construction.raw_industry_construction"),
 
	SLC_VAR("construction.industry_platform"),
 
	SLC_VAR("economy.multiple_industry_per_town"),
 
	SLC_NULL(1, SL_MIN_VERSION, SLV_141),
 
	SLC_VAR("economy.bribe"),
 
	SLC_VAR("economy.exclusive_rights"),
 
	SLC_VAR("economy.fund_buildings"),
 
	SLC_VAR("economy.fund_roads"),
 
	SLC_VAR("economy.give_money"),
 
	SLC_VAR("game_creation.snow_line_height"),
 
	SLC_VAR("game_creation.snow_coverage"),
 
	SLC_VAR("game_creation.desert_coverage"),
 
	SLC_NULL(4, SL_MIN_VERSION, SLV_144),
 
	SLC_VAR("game_creation.starting_year"),
 
	SLC_NULL(4, SL_MIN_VERSION, SLV_105),
 
	SLC_VAR("game_creation.ending_year"),
 
	SLC_VAR("economy.type"),
 
	SLC_VAR("economy.allow_shares"),
 
	SLC_VAR("economy.min_years_for_shares"),
 
	SLC_VAR("economy.feeder_payment_share"),
 
	SLC_VAR("economy.town_growth_rate"),
 
	SLC_VAR("economy.larger_towns"),
 
	SLC_VAR("economy.initial_city_size"),
 
	SLC_VAR("economy.mod_road_rebuild"),
 
	SLC_NULL(1, SL_MIN_VERSION, SLV_107),
 
	SLC_VAR("script.settings_profile"),
 
	SLC_VAR("ai.ai_in_multiplayer"),
 
	SLC_VAR("ai.ai_disable_veh_train"),
 
	SLC_VAR("ai.ai_disable_veh_roadveh"),
 
	SLC_VAR("ai.ai_disable_veh_aircraft"),
 
	SLC_VAR("ai.ai_disable_veh_ship"),
 
	SLC_VAR("script.script_max_opcode_till_suspend"),
 
	SLC_VAR("script.script_max_memory_megabytes"),
 
	SLC_VAR("vehicle.extend_vehicle_life"),
 
	SLC_VAR("economy.dist_local_authority"),
 
	SLC_VAR("pf.reverse_at_signals"),
 
	SLC_VAR("pf.wait_oneway_signal"),
 
	SLC_VAR("pf.wait_twoway_signal"),
 
	SLC_VAR("economy.town_noise_population[0]"),
 
	SLC_VAR("economy.town_noise_population[1]"),
 
	SLC_VAR("economy.town_noise_population[2]"),
 
	SLC_VAR("economy.infrastructure_maintenance"),
 
	SLC_VAR("pf.wait_for_pbs_path"),
 
	SLC_VAR("pf.reserve_paths"),
 
	SLC_VAR("pf.path_backoff_interval"),
 
	SLC_NULL(3, SL_MIN_VERSION, SLV_REMOVE_OPF),
 
	SLC_VAR("pf.npf.npf_max_search_nodes"),
 
	SLC_VAR("pf.npf.npf_rail_firstred_penalty"),
 
	SLC_VAR("pf.npf.npf_rail_firstred_exit_penalty"),
 
	SLC_VAR("pf.npf.npf_rail_lastred_penalty"),
 
	SLC_VAR("pf.npf.npf_rail_station_penalty"),
 
	SLC_VAR("pf.npf.npf_rail_slope_penalty"),
 
	SLC_VAR("pf.npf.npf_rail_curve_penalty"),
 
	SLC_VAR("pf.npf.npf_rail_depot_reverse_penalty"),
 
	SLC_VAR("pf.npf.npf_rail_pbs_cross_penalty"),
 
	SLC_VAR("pf.npf.npf_rail_pbs_signal_back_penalty"),
 
	SLC_VAR("pf.npf.npf_buoy_penalty"),
 
	SLC_VAR("pf.npf.npf_water_curve_penalty"),
 
	SLC_VAR("pf.npf.npf_road_curve_penalty"),
 
	SLC_VAR("pf.npf.npf_crossing_penalty"),
 
	SLC_VAR("pf.npf.npf_road_drive_through_penalty"),
 
	SLC_VAR("pf.npf.npf_road_dt_occupied_penalty"),
 
	SLC_VAR("pf.npf.npf_road_bay_occupied_penalty"),
 
	SLC_VAR("pf.npf.maximum_go_to_depot_penalty"),
 
	SLC_VAR("pf.yapf.disable_node_optimization"),
 
	SLC_VAR("pf.yapf.max_search_nodes"),
 
	SLC_VAR("pf.yapf.rail_firstred_twoway_eol"),
 
	SLC_VAR("pf.yapf.rail_firstred_penalty"),
 
	SLC_VAR("pf.yapf.rail_firstred_exit_penalty"),
 
	SLC_VAR("pf.yapf.rail_lastred_penalty"),
 
	SLC_VAR("pf.yapf.rail_lastred_exit_penalty"),
 
	SLC_VAR("pf.yapf.rail_station_penalty"),
 
	SLC_VAR("pf.yapf.rail_slope_penalty"),
 
	SLC_VAR("pf.yapf.rail_curve45_penalty"),
 
	SLC_VAR("pf.yapf.rail_curve90_penalty"),
 
	SLC_VAR("pf.yapf.rail_depot_reverse_penalty"),
 
	SLC_VAR("pf.yapf.rail_crossing_penalty"),
 
	SLC_VAR("pf.yapf.rail_look_ahead_max_signals"),
 
	SLC_VAR("pf.yapf.rail_look_ahead_signal_p0"),
 
	SLC_VAR("pf.yapf.rail_look_ahead_signal_p1"),
 
	SLC_VAR("pf.yapf.rail_look_ahead_signal_p2"),
 
	SLC_VAR("pf.yapf.rail_pbs_cross_penalty"),
 
	SLC_VAR("pf.yapf.rail_pbs_station_penalty"),
 
	SLC_VAR("pf.yapf.rail_pbs_signal_back_penalty"),
 
	SLC_VAR("pf.yapf.rail_doubleslip_penalty"),
 
	SLC_VAR("pf.yapf.rail_longer_platform_penalty"),
 
	SLC_VAR("pf.yapf.rail_longer_platform_per_tile_penalty"),
 
	SLC_VAR("pf.yapf.rail_shorter_platform_penalty"),
 
	SLC_VAR("pf.yapf.rail_shorter_platform_per_tile_penalty"),
 
	SLC_VAR("pf.yapf.road_slope_penalty"),
 
	SLC_VAR("pf.yapf.road_curve_penalty"),
 
	SLC_VAR("pf.yapf.road_crossing_penalty"),
 
	SLC_VAR("pf.yapf.road_stop_penalty"),
 
	SLC_VAR("pf.yapf.road_stop_occupied_penalty"),
 
	SLC_VAR("pf.yapf.road_stop_bay_occupied_penalty"),
 
	SLC_VAR("pf.yapf.maximum_go_to_depot_penalty"),
 
	SLC_VAR("pf.yapf.ship_curve45_penalty"),
 
	SLC_VAR("pf.yapf.ship_curve90_penalty"),
 
	SLC_VAR("game_creation.land_generator"),
 
	SLC_VAR("game_creation.oil_refinery_limit"),
 
	SLC_VAR("game_creation.tgen_smoothness"),
 
	SLC_VAR("game_creation.variety"),
 
	SLC_VAR("game_creation.generation_seed"),
 
	SLC_VAR("game_creation.tree_placer"),
 
	SLC_VAR("construction.freeform_edges"),
 
	SLC_VAR("game_creation.water_borders"),
 
	SLC_VAR("game_creation.custom_town_number"),
 
	SLC_VAR("construction.extra_tree_placement"),
 
	SLC_VAR("game_creation.custom_terrain_type"),
 
	SLC_VAR("game_creation.custom_sea_level"),
 
	SLC_VAR("game_creation.min_river_length"),
 
	SLC_VAR("game_creation.river_route_random"),
 
	SLC_VAR("game_creation.amount_of_rivers"),
 
	SLC_VAR("locale.currency"),
 
	SLC_VAR("units"),
 
	SLC_VAR("locale.units_velocity"),
 
	SLC_VAR("locale.units_power"),
 
	SLC_VAR("locale.units_weight"),
 
	SLC_VAR("locale.units_volume"),
 
	SLC_VAR("locale.units_force"),
 
	SLC_VAR("locale.units_height"),
 
	SLC_VAR("locale.digit_group_separator"),
 
	SLC_VAR("locale.digit_group_separator_currency"),
 
	SLC_VAR("locale.digit_decimal_separator"),
 
};
 

	
 
#endif /* SAVELOAD_COMPAT_SETTINGS_H */
src/saveload/compat/signs_sl_compat.h
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file signs_sl_compat.h Loading of signs chunks before table headers were added. */
 

	
 
#ifndef SAVELOAD_COMPAT_SIGNS_H
 
#define SAVELOAD_COMPAT_SIGNS_H
 

	
 
#include "../saveload.h"
 

	
 
/** Original field order for _sign_desc. */
 
const SaveLoadCompat _sign_sl_compat[] = {
 
	SLC_VAR("name"),
 
	SLC_VAR("x"),
 
	SLC_VAR("y"),
 
	SLC_VAR("owner"),
 
	SLC_VAR("z"),
 
};
 

	
 
#endif /* SAVELOAD_COMPAT_SIGNS_H */
src/saveload/compat/station_sl_compat.h
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file station_sl_compat.h Loading of station chunks before table headers were added. */
 

	
 
#ifndef SAVELOAD_COMPAT_STATION_H
 
#define SAVELOAD_COMPAT_STATION_H
 

	
 
#include "../saveload.h"
 

	
 
/** Original field order for _roadstop_desc. */
 
const SaveLoadCompat _roadstop_sl_compat[] = {
 
	SLC_VAR("xy"),
 
	SLC_NULL(1, SL_MIN_VERSION, SLV_45),
 
	SLC_VAR("status"),
 
	SLC_NULL(4, SL_MIN_VERSION, SLV_9),
 
	SLC_NULL(2, SL_MIN_VERSION, SLV_45),
 
	SLC_NULL(1, SL_MIN_VERSION, SLV_26),
 
	SLC_VAR("next"),
 
	SLC_NULL(2, SL_MIN_VERSION, SLV_45),
 
	SLC_NULL(4, SL_MIN_VERSION, SLV_25),
 
	SLC_NULL(1, SLV_25, SLV_26),
 
};
 

	
 
#endif /* SAVELOAD_COMPAT_STATION_H */
src/saveload/compat/storage_sl_compat.h
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file storage_sl_compat.h Loading of storage chunks before table headers were added. */
 

	
 
#ifndef SAVELOAD_COMPAT_STORAGE_H
 
#define SAVELOAD_COMPAT_STORAGE_H
 

	
 
#include "../saveload.h"
 

	
 
/** Original field order for _storage_desc. */
 
const SaveLoadCompat _storage_sl_compat[] = {
 
	SLC_VAR("grfid"),
 
	SLC_VAR("storage"),
 
};
 

	
 
#endif /* SAVELOAD_COMPAT_STORAGE_H */
src/saveload/compat/story_sl_compat.h
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file story_sl_compat.h Loading for story chunks before table headers were added. */
 

	
 
#ifndef SAVELOAD_COMPAT_STORE_H
 
#define SAVELOAD_COMPAT_STORE_H
 

	
 
#include "../saveload.h"
 

	
 
/** Original field order for _story_page_elements_desc. */
 
const SaveLoadCompat _story_page_elements_sl_compat[] = {
 
	SLC_VAR("sort_value"),
 
	SLC_VAR("page"),
 
	SLC_VAR("type"),
 
	SLC_VAR("referenced_id"),
 
	SLC_VAR("text"),
 
};
 

	
 
/** Original field order for _story_pages_desc. */
 
const SaveLoadCompat _story_pages_sl_compat[] = {
 
	SLC_VAR("sort_value"),
 
	SLC_VAR("date"),
 
	SLC_VAR("company"),
 
	SLC_VAR("title"),
 
};
 

	
 
#endif /* SAVELOAD_COMPAT_STORE_H */
src/saveload/compat/subsidy_sl_compat.h
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file subsidy_sl_compat.h Loading of subsidy chunks before table headers were added. */
 

	
 
#ifndef SAVELOAD_COMPAT_SUBSIDY_H
 
#define SAVELOAD_COMPAT_SUBSIDY_H
 

	
 
#include "../saveload.h"
 

	
 
/** Original field order for _subsidies_desc. */
 
const SaveLoadCompat _subsidies_sl_compat[] = {
 
	SLC_VAR("cargo_type"),
 
	SLC_VAR("remaining"),
 
	SLC_VAR("awarded"),
 
	SLC_VAR("src_type"),
 
	SLC_VAR("dst_type"),
 
	SLC_VAR("src"),
 
	SLC_VAR("dst"),
 
};
 

	
 
#endif /* SAVELOAD_COMPAT_SUBSIDY_H */
src/saveload/depot_sl.cpp
Show inline comments
 
@@ -8,11 +8,13 @@
 
/** @file depot_sl.cpp Code handling saving and loading of depots */
 

	
 
#include "../stdafx.h"
 

	
 
#include "saveload.h"
 
#include "compat/depot_sl_compat.h"
 

	
 
#include "../depot_base.h"
 
#include "../town.h"
 

	
 
#include "saveload.h"
 

	
 
#include "../safeguards.h"
 

	
 
static TownID _town_index;
 
@@ -29,6 +31,8 @@ static const SaveLoad _depot_desc[] = {
 

	
 
static void Save_DEPT()
 
{
 
	SlTableHeader(_depot_desc);
 

	
 
	for (Depot *depot : Depot::Iterate()) {
 
		SlSetArrayIndex(depot->index);
 
		SlObject(depot, _depot_desc);
 
@@ -37,11 +41,13 @@ static void Save_DEPT()
 

	
 
static void Load_DEPT()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_depot_desc, _depot_sl_compat);
 

	
 
	int index;
 

	
 
	while ((index = SlIterateArray()) != -1) {
 
		Depot *depot = new (index) Depot();
 
		SlObject(depot, _depot_desc);
 
		SlObject(depot, slt);
 

	
 
		/* Set the town 'pointer' so we can restore it later. */
 
		if (IsSavegameVersionBefore(SLV_141)) depot->town = (Town *)(size_t)_town_index;
 
@@ -57,7 +63,7 @@ static void Ptrs_DEPT()
 
}
 

	
 
static const ChunkHandler depot_chunk_handlers[] = {
 
	{ 'DEPT', Save_DEPT, Load_DEPT, Ptrs_DEPT, nullptr, CH_ARRAY },
 
	{ 'DEPT', Save_DEPT, Load_DEPT, Ptrs_DEPT, nullptr, CH_TABLE },
 
};
 

	
 
extern const ChunkHandlerTable _depot_chunk_handlers(depot_chunk_handlers);
src/saveload/economy_sl.cpp
Show inline comments
 
@@ -8,11 +8,13 @@
 
/** @file economy_sl.cpp Code handling saving and loading of economy data */
 

	
 
#include "../stdafx.h"
 

	
 
#include "saveload.h"
 
#include "compat/economy_sl_compat.h"
 

	
 
#include "../economy_func.h"
 
#include "../economy_base.h"
 

	
 
#include "saveload.h"
 

	
 
#include "../safeguards.h"
 

	
 
/** Prices in pre 126 savegames */
 
@@ -34,8 +36,6 @@ static void Load_CAPR()
 
}
 

	
 
static const SaveLoad _economy_desc[] = {
 
	SLE_CONDNULL(4,                                                                  SL_MIN_VERSION, SLV_65),             // max_loan
 
	SLE_CONDNULL(8,                                                                 SLV_65, SLV_144), // max_loan
 
	SLE_CONDVAR(Economy, old_max_loan_unround,          SLE_FILE_I32 | SLE_VAR_I64,  SL_MIN_VERSION, SLV_65),
 
	SLE_CONDVAR(Economy, old_max_loan_unround,          SLE_INT64,                  SLV_65, SLV_126),
 
	SLE_CONDVAR(Economy, old_max_loan_unround_fract,    SLE_UINT16,                 SLV_70, SLV_126),
 
@@ -51,6 +51,8 @@ static const SaveLoad _economy_desc[] = 
 
/** Economy variables */
 
static void Save_ECMY()
 
{
 
	SlTableHeader(_economy_desc);
 

	
 
	SlSetArrayIndex(0);
 
	SlObject(&_economy, _economy_desc);
 
}
 
@@ -58,8 +60,10 @@ static void Save_ECMY()
 
/** Economy variables */
 
static void Load_ECMY()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_economy_desc, _economy_sl_compat);
 

	
 
	if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() == -1) return;
 
	SlObject(&_economy, _economy_desc);
 
	SlObject(&_economy, slt);
 
	if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() != -1) SlErrorCorrupt("Too many ECMY entries");
 

	
 
	StartupIndustryDailyChanges(IsSavegameVersionBefore(SLV_102));  // old savegames will need to be initialized
 
@@ -74,6 +78,8 @@ static const SaveLoad _cargopayment_desc
 

	
 
static void Save_CAPY()
 
{
 
	SlTableHeader(_cargopayment_desc);
 

	
 
	for (CargoPayment *cp : CargoPayment::Iterate()) {
 
		SlSetArrayIndex(cp->index);
 
		SlObject(cp, _cargopayment_desc);
 
@@ -82,11 +88,13 @@ static void Save_CAPY()
 

	
 
static void Load_CAPY()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_cargopayment_desc, _cargopayment_sl_compat);
 

	
 
	int index;
 

	
 
	while ((index = SlIterateArray()) != -1) {
 
		CargoPayment *cp = new (index) CargoPayment();
 
		SlObject(cp, _cargopayment_desc);
 
		SlObject(cp, slt);
 
	}
 
}
 

	
 
@@ -99,10 +107,10 @@ static void Ptrs_CAPY()
 

	
 

	
 
static const ChunkHandler economy_chunk_handlers[] = {
 
	{ 'CAPY', Save_CAPY, Load_CAPY, Ptrs_CAPY, nullptr, CH_ARRAY },
 
	{ 'CAPY', Save_CAPY, Load_CAPY, Ptrs_CAPY, nullptr, CH_TABLE },
 
	{ 'PRIC', nullptr,   Load_PRIC, nullptr,   nullptr, CH_READONLY  },
 
	{ 'CAPR', nullptr,   Load_CAPR, nullptr,   nullptr, CH_READONLY  },
 
	{ 'ECMY', Save_ECMY, Load_ECMY, nullptr,   nullptr, CH_ARRAY },
 
	{ 'ECMY', Save_ECMY, Load_ECMY, nullptr,   nullptr, CH_TABLE },
 
};
 

	
 
extern const ChunkHandlerTable _economy_chunk_handlers(economy_chunk_handlers);
src/saveload/engine_sl.cpp
Show inline comments
 
@@ -8,6 +8,10 @@
 
/** @file engine_sl.cpp Code handling saving and loading of engines */
 

	
 
#include "../stdafx.h"
 

	
 
#include "saveload.h"
 
#include "compat/engine_sl_compat.h"
 

	
 
#include "saveload_internal.h"
 
#include "../engine_base.h"
 
#include "../string_func.h"
 
@@ -28,20 +32,14 @@ static const SaveLoad _engine_desc[] = {
 
	     SLE_VAR(Engine, duration_phase_1,    SLE_UINT16),
 
	     SLE_VAR(Engine, duration_phase_2,    SLE_UINT16),
 
	     SLE_VAR(Engine, duration_phase_3,    SLE_UINT16),
 

	
 
	SLE_CONDNULL(1,                                                        SL_MIN_VERSION, SLV_121),
 
	     SLE_VAR(Engine, flags,               SLE_UINT8),
 
	SLE_CONDNULL(1,                                                        SL_MIN_VERSION, SLV_179), // old preview_company_rank
 
	 SLE_CONDVAR(Engine, preview_asked,       SLE_UINT16,                SLV_179, SL_MAX_VERSION),
 
	 SLE_CONDVAR(Engine, preview_company,     SLE_UINT8,                 SLV_179, SL_MAX_VERSION),
 
	     SLE_VAR(Engine, preview_wait,        SLE_UINT8),
 
	SLE_CONDNULL(1,                                                        SL_MIN_VERSION,  SLV_45),
 
	 SLE_CONDVAR(Engine, company_avail,       SLE_FILE_U8  | SLE_VAR_U16,  SL_MIN_VERSION, SLV_104),
 
	 SLE_CONDVAR(Engine, company_avail,       SLE_UINT16,                SLV_104, SL_MAX_VERSION),
 
	 SLE_CONDVAR(Engine, company_hidden,      SLE_UINT16,                SLV_193, SL_MAX_VERSION),
 
	SLE_CONDSSTR(Engine, name,                SLE_STR,                    SLV_84, SL_MAX_VERSION),
 

	
 
	SLE_CONDNULL(16,                                                       SLV_2, SLV_144), // old reserved space
 
};
 

	
 
static std::vector<Engine*> _temp_engine;
 
@@ -84,6 +82,8 @@ Engine *GetTempDataEngine(EngineID index
 

	
 
static void Save_ENGN()
 
{
 
	SlTableHeader(_engine_desc);
 

	
 
	for (Engine *e : Engine::Iterate()) {
 
		SlSetArrayIndex(e->index);
 
		SlObject(e, _engine_desc);
 
@@ -92,13 +92,15 @@ static void Save_ENGN()
 

	
 
static void Load_ENGN()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_engine_desc, _engine_sl_compat);
 

	
 
	/* As engine data is loaded before engines are initialized we need to load
 
	 * this information into a temporary array. This is then copied into the
 
	 * engine pool after processing NewGRFs by CopyTempEngineData(). */
 
	int index;
 
	while ((index = SlIterateArray()) != -1) {
 
		Engine *e = GetTempDataEngine(index);
 
		SlObject(e, _engine_desc);
 
		SlObject(e, slt);
 

	
 
		if (IsSavegameVersionBefore(SLV_179)) {
 
			/* preview_company_rank was replaced with preview_company and preview_asked.
 
@@ -175,6 +177,8 @@ static const SaveLoad _engine_id_mapping
 

	
 
static void Save_EIDS()
 
{
 
	SlTableHeader(_engine_id_mapping_desc);
 

	
 
	uint index = 0;
 
	for (EngineIDMapping &eid : _engine_mngr) {
 
		SlSetArrayIndex(index);
 
@@ -185,17 +189,19 @@ static void Save_EIDS()
 

	
 
static void Load_EIDS()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_engine_id_mapping_desc, _engine_id_mapping_sl_compat);
 

	
 
	_engine_mngr.clear();
 

	
 
	while (SlIterateArray() != -1) {
 
		EngineIDMapping *eid = &_engine_mngr.emplace_back();
 
		SlObject(eid, _engine_id_mapping_desc);
 
		SlObject(eid, slt);
 
	}
 
}
 

	
 
static const ChunkHandler engine_chunk_handlers[] = {
 
	{ 'EIDS', Save_EIDS, Load_EIDS, nullptr, nullptr, CH_ARRAY },
 
	{ 'ENGN', Save_ENGN, Load_ENGN, nullptr, nullptr, CH_ARRAY },
 
	{ 'EIDS', Save_EIDS, Load_EIDS, nullptr, nullptr, CH_TABLE },
 
	{ 'ENGN', Save_ENGN, Load_ENGN, nullptr, nullptr, CH_TABLE },
 
	{ 'ENGS', nullptr,   Load_ENGS, nullptr, nullptr, CH_READONLY  },
 
};
 

	
src/saveload/game_sl.cpp
Show inline comments
 
@@ -9,9 +9,11 @@
 

	
 
#include "../stdafx.h"
 
#include "../debug.h"
 

	
 
#include "saveload.h"
 
#include "compat/game_sl_compat.h"
 

	
 
#include "../string_func.h"
 

	
 
#include "../game/game.hpp"
 
#include "../game/game_config.hpp"
 
#include "../network/network.h"
 
@@ -25,7 +27,7 @@ static int         _game_saveload_versio
 
static std::string _game_saveload_settings;
 
static bool        _game_saveload_is_random;
 

	
 
static const SaveLoad _game_script[] = {
 
static const SaveLoad _game_script_desc[] = {
 
	   SLEG_SSTR("name",      _game_saveload_name,         SLE_STR),
 
	   SLEG_SSTR("settings",  _game_saveload_settings,     SLE_STR),
 
	    SLEG_VAR("version",   _game_saveload_version,   SLE_UINT32),
 
@@ -48,19 +50,21 @@ static void SaveReal_GSDT(int *index_ptr
 
	_game_saveload_is_random = config->IsRandom();
 
	_game_saveload_settings = config->SettingsToString();
 

	
 
	SlObject(nullptr, _game_script);
 
	SlObject(nullptr, _game_script_desc);
 
	Game::Save();
 
}
 

	
 
static void Load_GSDT()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_game_script_desc, _game_script_sl_compat);
 

	
 
	/* Free all current data */
 
	GameConfig::GetConfig(GameConfig::SSS_FORCE_GAME)->Change(nullptr);
 

	
 
	if (SlIterateArray() == -1) return;
 

	
 
	_game_saveload_version = -1;
 
	SlObject(nullptr, _game_script);
 
	SlObject(nullptr, slt);
 

	
 
	if (_networking && !_network_server) {
 
		GameInstance::LoadEmpty();
 
@@ -104,6 +108,7 @@ static void Load_GSDT()
 

	
 
static void Save_GSDT()
 
{
 
	SlTableHeader(_game_script_desc);
 
	SlSetArrayIndex(0);
 
	SlAutolength((AutolengthProc *)SaveReal_GSDT, nullptr);
 
}
 
@@ -180,7 +185,7 @@ static void Save_GSTR()
 

	
 
static const ChunkHandler game_chunk_handlers[] = {
 
	{ 'GSTR', Save_GSTR, Load_GSTR, nullptr, nullptr, CH_ARRAY },
 
	{ 'GSDT', Save_GSDT, Load_GSDT, nullptr, nullptr, CH_ARRAY },
 
	{ 'GSDT', Save_GSDT, Load_GSDT, nullptr, nullptr, CH_TABLE },
 
};
 

	
 
extern const ChunkHandlerTable _game_chunk_handlers(game_chunk_handlers);
src/saveload/goal_sl.cpp
Show inline comments
 
@@ -8,9 +8,11 @@
 
/** @file goal_sl.cpp Code handling saving and loading of goals */
 

	
 
#include "../stdafx.h"
 
#include "../goal_base.h"
 

	
 
#include "saveload.h"
 
#include "compat/goal_sl_compat.h"
 

	
 
#include "../goal_base.h"
 

	
 
#include "../safeguards.h"
 

	
 
@@ -25,6 +27,8 @@ static const SaveLoad _goals_desc[] = {
 

	
 
static void Save_GOAL()
 
{
 
	SlTableHeader(_goals_desc);
 

	
 
	for (Goal *s : Goal::Iterate()) {
 
		SlSetArrayIndex(s->index);
 
		SlObject(s, _goals_desc);
 
@@ -33,6 +37,8 @@ static void Save_GOAL()
 

	
 
static void Load_GOAL()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_goals_desc, _goals_sl_compat);
 

	
 
	int index;
 
	while ((index = SlIterateArray()) != -1) {
 
		Goal *s = new (index) Goal();
 
@@ -41,7 +47,7 @@ static void Load_GOAL()
 
}
 

	
 
static const ChunkHandler goal_chunk_handlers[] = {
 
	{ 'GOAL', Save_GOAL, Load_GOAL, nullptr, nullptr, CH_ARRAY },
 
	{ 'GOAL', Save_GOAL, Load_GOAL, nullptr, nullptr, CH_TABLE },
 
};
 

	
 
extern const ChunkHandlerTable _goal_chunk_handlers(goal_chunk_handlers);
src/saveload/group_sl.cpp
Show inline comments
 
@@ -12,13 +12,13 @@
 
#include "../company_base.h"
 

	
 
#include "saveload.h"
 
#include "compat/group_sl_compat.h"
 

	
 
#include "../safeguards.h"
 

	
 
static const SaveLoad _group_desc[] = {
 
	 SLE_CONDVAR(Group, name,               SLE_NAME,                       SL_MIN_VERSION,  SLV_84),
 
	SLE_CONDSSTR(Group, name,               SLE_STR | SLF_ALLOW_CONTROL,    SLV_84, SL_MAX_VERSION),
 
	SLE_CONDNULL(2,                                                         SL_MIN_VERSION,  SLV_164), // num_vehicle
 
	     SLE_VAR(Group, owner,              SLE_UINT8),
 
	     SLE_VAR(Group, vehicle_type,       SLE_UINT8),
 
	     SLE_VAR(Group, flags,              SLE_UINT8),
 
@@ -30,6 +30,8 @@ static const SaveLoad _group_desc[] = {
 

	
 
static void Save_GRPS()
 
{
 
	SlTableHeader(_group_desc);
 

	
 
	for (Group *g : Group::Iterate()) {
 
		SlSetArrayIndex(g->index);
 
		SlObject(g, _group_desc);
 
@@ -39,24 +41,26 @@ static void Save_GRPS()
 

	
 
static void Load_GRPS()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_group_desc, _group_sl_compat);
 

	
 
	int index;
 

	
 
	while ((index = SlIterateArray()) != -1) {
 
		Group *g = new (index) Group();
 
		SlObject(g, _group_desc);
 
		SlObject(g, slt);
 

	
 
		if (IsSavegameVersionBefore(SLV_189)) g->parent = INVALID_GROUP;
 

	
 
		if (IsSavegameVersionBefore(SLV_GROUP_LIVERIES)) {
 
	                const Company *c = Company::Get(g->owner);
 
	                g->livery.colour1 = c->livery[LS_DEFAULT].colour1;
 
	                g->livery.colour2 = c->livery[LS_DEFAULT].colour2;
 
			const Company *c = Company::Get(g->owner);
 
			g->livery.colour1 = c->livery[LS_DEFAULT].colour1;
 
			g->livery.colour2 = c->livery[LS_DEFAULT].colour2;
 
		}
 
	}
 
}
 

	
 
static const ChunkHandler group_chunk_handlers[] = {
 
	{ 'GRPS', Save_GRPS, Load_GRPS, nullptr, nullptr, CH_ARRAY },
 
	{ 'GRPS', Save_GRPS, Load_GRPS, nullptr, nullptr, CH_TABLE },
 
};
 

	
 
extern const ChunkHandlerTable _group_chunk_handlers(group_chunk_handlers);
src/saveload/industry_sl.cpp
Show inline comments
 
@@ -8,9 +8,11 @@
 
/** @file industry_sl.cpp Code handling saving and loading of industries */
 

	
 
#include "../stdafx.h"
 
#include "../industry.h"
 

	
 
#include "saveload.h"
 
#include "compat/industry_sl_compat.h"
 

	
 
#include "../industry.h"
 
#include "newgrf_sl.h"
 

	
 
#include "../safeguards.h"
 
@@ -24,7 +26,6 @@ static const SaveLoad _industry_desc[] =
 
	    SLE_VAR(Industry, location.h,                 SLE_FILE_U8 | SLE_VAR_U16),
 
	    SLE_REF(Industry, town,                       REF_TOWN),
 
	SLE_CONDREF(Industry, neutral_station,            REF_STATION,                SLV_SERVE_NEUTRAL_INDUSTRIES, SL_MAX_VERSION),
 
	SLE_CONDNULL( 2, SL_MIN_VERSION, SLV_61),       ///< used to be industry's produced_cargo
 
	SLE_CONDARR(Industry, produced_cargo,             SLE_UINT8,   2,              SLV_78, SLV_EXTEND_INDUSTRY_CARGO_SLOTS),
 
	SLE_CONDARR(Industry, produced_cargo,             SLE_UINT8,  16,             SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION),
 
	SLE_CONDARR(Industry, incoming_cargo_waiting,     SLE_UINT16,  3,              SLV_70, SLV_EXTEND_INDUSTRY_CARGO_SLOTS),
 
@@ -33,7 +34,6 @@ static const SaveLoad _industry_desc[] =
 
	SLE_CONDARR(Industry, produced_cargo_waiting,     SLE_UINT16, 16,             SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION),
 
	SLE_CONDARR(Industry, production_rate,            SLE_UINT8,   2,               SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS),
 
	SLE_CONDARR(Industry, production_rate,            SLE_UINT8,  16,             SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION),
 
	SLE_CONDNULL( 3, SL_MIN_VERSION, SLV_61),       ///< used to be industry's accepts_cargo
 
	SLE_CONDARR(Industry, accepts_cargo,              SLE_UINT8,   3,              SLV_78, SLV_EXTEND_INDUSTRY_CARGO_SLOTS),
 
	SLE_CONDARR(Industry, accepts_cargo,              SLE_UINT8,  16,             SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION),
 
	    SLE_VAR(Industry, prod_level,                 SLE_UINT8),
 
@@ -70,15 +70,14 @@ static const SaveLoad _industry_desc[] =
 
	SLEG_CONDARR("storage", _old_ind_persistent_storage.storage, SLE_UINT32, 16, SLV_76, SLV_161),
 
	SLE_CONDREF(Industry, psa,                        REF_STORAGE,              SLV_161, SL_MAX_VERSION),
 

	
 
	SLE_CONDNULL(1, SLV_82, SLV_197), // random_triggers
 
	SLE_CONDVAR(Industry, random,                     SLE_UINT16,                SLV_82, SL_MAX_VERSION),
 
	SLE_CONDSSTR(Industry, text,     SLE_STR | SLF_ALLOW_CONTROL,     SLV_INDUSTRY_TEXT, SL_MAX_VERSION),
 

	
 
	SLE_CONDNULL(32, SLV_2, SLV_144), // old reserved space
 
};
 

	
 
static void Save_INDY()
 
{
 
	SlTableHeader(_industry_desc);
 

	
 
	/* Write the industries */
 
	for (Industry *ind : Industry::Iterate()) {
 
		SlSetArrayIndex(ind->index);
 
@@ -98,13 +97,15 @@ static void Save_TIDS()
 

	
 
static void Load_INDY()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_industry_desc, _industry_sl_compat);
 

	
 
	int index;
 

	
 
	Industry::ResetIndustryCounts();
 

	
 
	while ((index = SlIterateArray()) != -1) {
 
		Industry *i = new (index) Industry();
 
		SlObject(i, _industry_desc);
 
		SlObject(i, slt);
 

	
 
		/* Before savegame version 161, persistent storages were not stored in a pool. */
 
		if (IsSavegameVersionBefore(SLV_161) && !IsSavegameVersionBefore(SLV_76)) {
 
@@ -142,6 +143,8 @@ static const SaveLoad _industry_builder_
 
/** Save industry builder. */
 
static void Save_IBLD()
 
{
 
	SlTableHeader(_industry_builder_desc);
 

	
 
	SlSetArrayIndex(0);
 
	SlGlobList(_industry_builder_desc);
 
}
 
@@ -149,8 +152,10 @@ static void Save_IBLD()
 
/** Load industry builder. */
 
static void Load_IBLD()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_industry_builder_desc, _industry_builder_sl_compat);
 

	
 
	if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() == -1) return;
 
	SlGlobList(_industry_builder_desc);
 
	SlGlobList(slt);
 
	if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() != -1) SlErrorCorrupt("Too many IBLD entries");
 
}
 

	
 
@@ -166,6 +171,8 @@ static const SaveLoad _industrytype_buil
 
/** Save industry-type build data. */
 
static void Save_ITBL()
 
{
 
	SlTableHeader(_industrytype_builder_desc);
 

	
 
	for (int i = 0; i < NUM_INDUSTRYTYPES; i++) {
 
		SlSetArrayIndex(i);
 
		SlObject(_industry_builder.builddata + i, _industrytype_builder_desc);
 
@@ -175,22 +182,24 @@ static void Save_ITBL()
 
/** Load industry-type build data. */
 
static void Load_ITBL()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_industrytype_builder_desc, _industrytype_builder_sl_compat);
 

	
 
	for (IndustryType it = 0; it < NUM_INDUSTRYTYPES; it++) {
 
		_industry_builder.builddata[it].Reset();
 
	}
 
	int index;
 
	while ((index = SlIterateArray()) != -1) {
 
		if ((uint)index >= NUM_INDUSTRYTYPES) SlErrorCorrupt("Too many industry builder datas");
 
		SlObject(_industry_builder.builddata + index, _industrytype_builder_desc);
 
		SlObject(_industry_builder.builddata + index, slt);
 
	}
 
}
 

	
 
static const ChunkHandler industry_chunk_handlers[] = {
 
	{ 'INDY', Save_INDY, Load_INDY, Ptrs_INDY, nullptr, CH_ARRAY },
 
	{ 'IIDS', Save_IIDS, Load_IIDS, nullptr,   nullptr, CH_ARRAY },
 
	{ 'TIDS', Save_TIDS, Load_TIDS, nullptr,   nullptr, CH_ARRAY },
 
	{ 'IBLD', Save_IBLD, Load_IBLD, nullptr,   nullptr, CH_ARRAY },
 
	{ 'ITBL', Save_ITBL, Load_ITBL, nullptr,   nullptr, CH_ARRAY },
 
	{ 'INDY', Save_INDY, Load_INDY, Ptrs_INDY, nullptr, CH_TABLE },
 
	{ 'IIDS', Save_IIDS, Load_IIDS, nullptr,   nullptr, CH_TABLE },
 
	{ 'TIDS', Save_TIDS, Load_TIDS, nullptr,   nullptr, CH_TABLE },
 
	{ 'IBLD', Save_IBLD, Load_IBLD, nullptr,   nullptr, CH_TABLE },
 
	{ 'ITBL', Save_ITBL, Load_ITBL, nullptr,   nullptr, CH_TABLE },
 
};
 

	
 
extern const ChunkHandlerTable _industry_chunk_handlers(industry_chunk_handlers);
src/saveload/labelmaps_sl.cpp
Show inline comments
 
@@ -8,12 +8,14 @@
 
/** @file labelmaps_sl.cpp Code handling saving and loading of rail type label mappings */
 

	
 
#include "../stdafx.h"
 

	
 
#include "saveload.h"
 
#include "compat/labelmaps_sl_compat.h"
 

	
 
#include "saveload_internal.h"
 
#include "../station_map.h"
 
#include "../tunnelbridge_map.h"
 

	
 
#include "saveload.h"
 
#include "saveload_internal.h"
 

	
 
#include "../safeguards.h"
 

	
 
static std::vector<RailTypeLabel> _railtype_list;
 
@@ -99,6 +101,8 @@ static const SaveLoad _label_object_desc
 

	
 
static void Save_RAIL()
 
{
 
	SlTableHeader(_label_object_desc);
 

	
 
	LabelObject lo;
 

	
 
	for (RailType r = RAILTYPE_BEGIN; r != RAILTYPE_END; r++) {
 
@@ -111,18 +115,20 @@ static void Save_RAIL()
 

	
 
static void Load_RAIL()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_label_object_desc, _label_object_sl_compat);
 

	
 
	ResetLabelMaps();
 

	
 
	LabelObject lo;
 

	
 
	while (SlIterateArray() != -1) {
 
		SlObject(&lo, _label_object_desc);
 
		SlObject(&lo, slt);
 
		_railtype_list.push_back((RailTypeLabel)lo.label);
 
	}
 
}
 

	
 
static const ChunkHandler labelmaps_chunk_handlers[] = {
 
	{ 'RAIL', Save_RAIL, Load_RAIL, nullptr, nullptr, CH_ARRAY },
 
	{ 'RAIL', Save_RAIL, Load_RAIL, nullptr, nullptr, CH_TABLE },
 
};
 

	
 
extern const ChunkHandlerTable _labelmaps_chunk_handlers(labelmaps_chunk_handlers);
src/saveload/map_sl.cpp
Show inline comments
 
@@ -8,13 +8,15 @@
 
/** @file map_sl.cpp Code handling saving and loading of map */
 

	
 
#include "../stdafx.h"
 

	
 
#include "saveload.h"
 
#include "compat/map_sl_compat.h"
 

	
 
#include "../map_func.h"
 
#include "../core/bitmath_func.hpp"
 
#include "../fios.h"
 
#include <array>
 

	
 
#include "saveload.h"
 

	
 
#include "../safeguards.h"
 

	
 
static uint32 _map_dim_x;
 
@@ -27,6 +29,8 @@ static const SaveLoad _map_desc[] = {
 

	
 
static void Save_MAPS()
 
{
 
	SlTableHeader(_map_desc);
 

	
 
	_map_dim_x = MapSizeX();
 
	_map_dim_y = MapSizeY();
 

	
 
@@ -36,8 +40,10 @@ static void Save_MAPS()
 

	
 
static void Load_MAPS()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_map_desc, _map_sl_compat);
 

	
 
	if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() == -1) return;
 
	SlGlobList(_map_desc);
 
	SlGlobList(slt);
 
	if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() != -1) SlErrorCorrupt("Too many MAPS entries");
 

	
 
	AllocateMap(_map_dim_x, _map_dim_y);
 
@@ -45,8 +51,10 @@ static void Load_MAPS()
 

	
 
static void Check_MAPS()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_map_desc, _map_sl_compat);
 

	
 
	if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() == -1) return;
 
	SlGlobList(_map_desc);
 
	SlGlobList(slt);
 
	if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() != -1) SlErrorCorrupt("Too many MAPS entries");
 

	
 
	_load_check_data.map_size_x = _map_dim_x;
 
@@ -303,7 +311,7 @@ static void Save_MAP8()
 

	
 

	
 
static const ChunkHandler map_chunk_handlers[] = {
 
	{ 'MAPS', Save_MAPS, Load_MAPS, nullptr, Check_MAPS, CH_ARRAY },
 
	{ 'MAPS', Save_MAPS, Load_MAPS, nullptr, Check_MAPS, CH_TABLE },
 
	{ 'MAPT', Save_MAPT, Load_MAPT, nullptr, nullptr,    CH_RIFF },
 
	{ 'MAPH', Save_MAPH, Load_MAPH, nullptr, nullptr,    CH_RIFF },
 
	{ 'MAPO', Save_MAP1, Load_MAP1, nullptr, nullptr,    CH_RIFF },
src/saveload/misc_sl.cpp
Show inline comments
 
@@ -8,6 +8,10 @@
 
/** @file misc_sl.cpp Saving and loading of things that didn't fit anywhere else */
 

	
 
#include "../stdafx.h"
 

	
 
#include "saveload.h"
 
#include "compat/misc_sl_compat.h"
 

	
 
#include "../date_func.h"
 
#include "../zoom_func.h"
 
#include "../window_gui.h"
 
@@ -17,8 +21,6 @@
 
#include "../core/random_func.hpp"
 
#include "../fios.h"
 

	
 
#include "saveload.h"
 

	
 
#include "../safeguards.h"
 

	
 
extern TileIndex _cur_tileloop_tile;
 
@@ -72,73 +74,52 @@ static const SaveLoad _date_desc[] = {
 
	SLEG_CONDVAR("date",                   _date,                   SLE_FILE_U16 | SLE_VAR_I32,  SL_MIN_VERSION,  SLV_31),
 
	SLEG_CONDVAR("date",                   _date,                   SLE_INT32,                  SLV_31, SL_MAX_VERSION),
 
	    SLEG_VAR("date_fract",             _date_fract,             SLE_UINT16),
 
	    SLEG_VAR("tick_counter",           _tick_counter,           SLE_UINT16),
 
	SLE_CONDNULL(2, SL_MIN_VERSION, SLV_157), // _vehicle_id_ctr_day
 
	    SLEG_VAR("tick_counter",         _tick_counter,           SLE_UINT16),
 
	SLEG_CONDVAR("age_cargo_skip_counter", _age_cargo_skip_counter, SLE_UINT8,                   SL_MIN_VERSION, SLV_162),
 
	SLE_CONDNULL(1, SL_MIN_VERSION, SLV_46),
 
	SLEG_CONDVAR("cur_tileloop_tile",      _cur_tileloop_tile,      SLE_FILE_U16 | SLE_VAR_U32,  SL_MIN_VERSION, SLV_6),
 
	SLEG_CONDVAR("cur_tileloop_tile",      _cur_tileloop_tile,      SLE_UINT32,                  SLV_6, SL_MAX_VERSION),
 
	    SLEG_VAR("next_disaster_start",    _disaster_delay,         SLE_UINT16),
 
	SLE_CONDNULL(2, SL_MIN_VERSION, SLV_120),
 
	    SLEG_VAR("next_disaster_start",         _disaster_delay,         SLE_UINT16),
 
	    SLEG_VAR("random_state[0]",        _random.state[0],        SLE_UINT32),
 
	    SLEG_VAR("random_state[1]",        _random.state[1],        SLE_UINT32),
 
	SLE_CONDNULL(1,  SL_MIN_VERSION,  SLV_10),
 
	SLE_CONDNULL(4, SLV_10, SLV_120),
 
	    SLEG_VAR("company_tick_counter",   _cur_company_tick_index, SLE_FILE_U8  | SLE_VAR_U32),
 
	    SLEG_VAR("company_tick_counter", _cur_company_tick_index, SLE_FILE_U8  | SLE_VAR_U32),
 
	SLEG_CONDVAR("next_competitor_start",  _next_competitor_start,  SLE_FILE_U16 | SLE_VAR_U32,  SL_MIN_VERSION, SLV_109),
 
	SLEG_CONDVAR("next_competitor_start",  _next_competitor_start,  SLE_UINT32,                SLV_109, SL_MAX_VERSION),
 
	    SLEG_VAR("trees_tick_counter",     _trees_tick_ctr,         SLE_UINT8),
 
	SLEG_CONDVAR("pause_mode",             _pause_mode,             SLE_UINT8,                   SLV_4, SL_MAX_VERSION),
 
	SLE_CONDNULL(4, SLV_11, SLV_120),
 
};
 

	
 
static const SaveLoad _date_check_desc[] = {
 
	SLEG_CONDVAR("date", _load_check_data.current_date,  SLE_FILE_U16 | SLE_VAR_I32,  SL_MIN_VERSION,  SLV_31),
 
	SLEG_CONDVAR("date", _load_check_data.current_date,  SLE_INT32,                  SLV_31, SL_MAX_VERSION),
 
	    SLE_NULL(2),                       // _date_fract
 
	    SLE_NULL(2),                       // _tick_counter
 
	SLE_CONDNULL(2, SL_MIN_VERSION, SLV_157),               // _vehicle_id_ctr_day
 
	SLE_CONDNULL(1, SL_MIN_VERSION, SLV_162),               // _age_cargo_skip_counter
 
	SLE_CONDNULL(1, SL_MIN_VERSION, SLV_46),
 
	SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6),                 // _cur_tileloop_tile
 
	SLE_CONDNULL(4, SLV_6, SL_MAX_VERSION),    // _cur_tileloop_tile
 
	    SLE_NULL(2),                       // _disaster_delay
 
	SLE_CONDNULL(2, SL_MIN_VERSION, SLV_120),
 
	    SLE_NULL(4),                       // _random.state[0]
 
	    SLE_NULL(4),                       // _random.state[1]
 
	SLE_CONDNULL(1,  SL_MIN_VERSION,  SLV_10),
 
	SLE_CONDNULL(4, SLV_10, SLV_120),
 
	    SLE_NULL(1),                       // _cur_company_tick_index
 
	SLE_CONDNULL(2, SL_MIN_VERSION, SLV_109),               // _next_competitor_start
 
	SLE_CONDNULL(4, SLV_109, SL_MAX_VERSION),  // _next_competitor_start
 
	    SLE_NULL(1),                       // _trees_tick_ctr
 
	SLE_CONDNULL(1, SLV_4, SL_MAX_VERSION),    // _pause_mode
 
	SLE_CONDNULL(4, SLV_11, SLV_120),
 
};
 

	
 
/* Save load date related variables as well as persistent tick counters
 
 * XXX: currently some unrelated stuff is just put here */
 
static void Save_DATE()
 
{
 
	SlTableHeader(_date_desc);
 

	
 
	SlSetArrayIndex(0);
 
	SlGlobList(_date_desc);
 
}
 

	
 
static void Load_DATE_common(const SaveLoadTable &slt)
 
static void Load_DATE_common(const SaveLoadTable &slt, const SaveLoadCompatTable &slct)
 
{
 
	const std::vector<SaveLoad> oslt = SlCompatTableHeader(slt, slct);
 

	
 
	if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() == -1) return;
 
	SlGlobList(slt);
 
	SlGlobList(oslt);
 
	if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() != -1) SlErrorCorrupt("Too many DATE entries");
 
}
 

	
 
static void Load_DATE()
 
{
 
	Load_DATE_common(_date_desc);
 
	Load_DATE_common(_date_desc, _date_sl_compat);
 
}
 

	
 
static void Check_DATE()
 
{
 
	Load_DATE_common(_date_check_desc);
 
	Load_DATE_common(_date_check_desc, _date_check_sl_compat);
 

	
 
	if (IsSavegameVersionBefore(SLV_31)) {
 
		_load_check_data.current_date += DAYS_TILL_ORIGINAL_BASE_YEAR;
 
@@ -156,20 +137,24 @@ static const SaveLoad _view_desc[] = {
 

	
 
static void Save_VIEW()
 
{
 
	SlTableHeader(_view_desc);
 

	
 
	SlSetArrayIndex(0);
 
	SlGlobList(_view_desc);
 
}
 

	
 
static void Load_VIEW()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_view_desc, _view_sl_compat);
 

	
 
	if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() == -1) return;
 
	SlGlobList(_view_desc);
 
	SlGlobList(slt);
 
	if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() != -1) SlErrorCorrupt("Too many DATE entries");
 
}
 

	
 
static const ChunkHandler misc_chunk_handlers[] = {
 
	{ 'DATE', Save_DATE, Load_DATE, nullptr, Check_DATE, CH_ARRAY },
 
	{ 'VIEW', Save_VIEW, Load_VIEW, nullptr, nullptr,    CH_ARRAY },
 
	{ 'DATE', Save_DATE, Load_DATE, nullptr, Check_DATE, CH_TABLE },
 
	{ 'VIEW', Save_VIEW, Load_VIEW, nullptr, nullptr,    CH_TABLE },
 
};
 

	
 
extern const ChunkHandlerTable _misc_chunk_handlers(misc_chunk_handlers);
src/saveload/newgrf_sl.cpp
Show inline comments
 
@@ -8,10 +8,12 @@
 
/** @file newgrf_sl.cpp Code handling saving and loading of newgrf config */
 

	
 
#include "../stdafx.h"
 
#include "../fios.h"
 

	
 
#include "saveload.h"
 
#include "compat/newgrf_sl_compat.h"
 

	
 
#include "newgrf_sl.h"
 
#include "../fios.h"
 

	
 
#include "../safeguards.h"
 

	
 
@@ -28,6 +30,8 @@ static const SaveLoad _newgrf_mapping_de
 
 */
 
void Save_NewGRFMapping(const OverrideManagerBase &mapping)
 
{
 
	SlTableHeader(_newgrf_mapping_desc);
 

	
 
	for (uint i = 0; i < mapping.GetMaxMapping(); i++) {
 
		if (mapping.mapping_ID[i].grfid == 0 &&
 
		    mapping.mapping_ID[i].entity_id == 0) continue;
 
@@ -42,6 +46,8 @@ void Save_NewGRFMapping(const OverrideMa
 
 */
 
void Load_NewGRFMapping(OverrideManagerBase &mapping)
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_newgrf_mapping_desc, _newgrf_mapping_sl_compat);
 

	
 
	/* Clear the current mapping stored.
 
	 * This will create the manager if ever it is not yet done */
 
	mapping.ResetMapping();
 
@@ -51,7 +57,7 @@ void Load_NewGRFMapping(OverrideManagerB
 
	int index;
 
	while ((index = SlIterateArray()) != -1) {
 
		if ((uint)index >= max_id) SlErrorCorrupt("Too many NewGRF entity mappings");
 
		SlObject(&mapping.mapping_ID[index], _newgrf_mapping_desc);
 
		SlObject(&mapping.mapping_ID[index], slt);
 
	}
 
}
 

	
 
@@ -69,6 +75,8 @@ static const SaveLoad _grfconfig_desc[] 
 

	
 
static void Save_NGRF()
 
{
 
	SlTableHeader(_grfconfig_desc);
 

	
 
	int index = 0;
 

	
 
	for (GRFConfig *c = _grfconfig; c != nullptr; c = c->next) {
 
@@ -81,10 +89,12 @@ static void Save_NGRF()
 

	
 
static void Load_NGRF_common(GRFConfig *&grfconfig)
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_grfconfig_desc, _grfconfig_sl_compat);
 

	
 
	ClearGRFConfigList(&grfconfig);
 
	while (SlIterateArray() != -1) {
 
		GRFConfig *c = new GRFConfig();
 
		SlObject(c, _grfconfig_desc);
 
		SlObject(c, slt);
 
		if (IsSavegameVersionBefore(SLV_101)) c->SetSuitablePalette();
 
		AppendToGRFConfigList(&grfconfig, c);
 
	}
 
@@ -112,7 +122,7 @@ static void Check_NGRF()
 
}
 

	
 
static const ChunkHandler newgrf_chunk_handlers[] = {
 
	{ 'NGRF', Save_NGRF, Load_NGRF, nullptr, Check_NGRF, CH_ARRAY }
 
	{ 'NGRF', Save_NGRF, Load_NGRF, nullptr, Check_NGRF, CH_TABLE }
 
};
 

	
 
extern const ChunkHandlerTable _newgrf_chunk_handlers(newgrf_chunk_handlers);
src/saveload/object_sl.cpp
Show inline comments
 
@@ -8,10 +8,12 @@
 
/** @file object_sl.cpp Code handling saving and loading of objects */
 

	
 
#include "../stdafx.h"
 

	
 
#include "saveload.h"
 
#include "compat/object_sl_compat.h"
 

	
 
#include "../object_base.h"
 
#include "../object_map.h"
 

	
 
#include "saveload.h"
 
#include "newgrf_sl.h"
 

	
 
#include "../safeguards.h"
 
@@ -29,6 +31,8 @@ static const SaveLoad _object_desc[] = {
 

	
 
static void Save_OBJS()
 
{
 
	SlTableHeader(_object_desc);
 

	
 
	/* Write the objects */
 
	for (Object *o : Object::Iterate()) {
 
		SlSetArrayIndex(o->index);
 
@@ -38,10 +42,12 @@ static void Save_OBJS()
 

	
 
static void Load_OBJS()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_object_desc, _object_sl_compat);
 

	
 
	int index;
 
	while ((index = SlIterateArray()) != -1) {
 
		Object *o = new (index) Object();
 
		SlObject(o, _object_desc);
 
		SlObject(o, slt);
 
	}
 
}
 

	
 
@@ -67,8 +73,8 @@ static void Load_OBID()
 
}
 

	
 
static const ChunkHandler object_chunk_handlers[] = {
 
	{ 'OBID', Save_OBID, Load_OBID, nullptr,   nullptr, CH_ARRAY },
 
	{ 'OBJS', Save_OBJS, Load_OBJS, Ptrs_OBJS, nullptr, CH_ARRAY },
 
	{ 'OBID', Save_OBID, Load_OBID, nullptr,   nullptr, CH_TABLE },
 
	{ 'OBJS', Save_OBJS, Load_OBJS, Ptrs_OBJS, nullptr, CH_TABLE },
 
};
 

	
 
extern const ChunkHandlerTable _object_chunk_handlers(object_chunk_handlers);
src/saveload/order_sl.cpp
Show inline comments
 
@@ -8,12 +8,15 @@
 
/** @file order_sl.cpp Code handling saving and loading of orders */
 

	
 
#include "../stdafx.h"
 

	
 
#include "saveload.h"
 
#include "compat/order_sl_compat.h"
 

	
 
#include "saveload_internal.h"
 
#include "../order_backup.h"
 
#include "../settings_type.h"
 
#include "../network/network.h"
 

	
 
#include "saveload_internal.h"
 

	
 
#include "../safeguards.h"
 

	
 
/**
 
@@ -107,14 +110,9 @@ SaveLoadTable GetOrderDescription()
 
		     SLE_VAR(Order, dest,           SLE_UINT16),
 
		     SLE_REF(Order, next,           REF_ORDER),
 
		 SLE_CONDVAR(Order, refit_cargo,    SLE_UINT8,   SLV_36, SL_MAX_VERSION),
 
		SLE_CONDNULL(1,                                  SLV_36, SLV_182), // refit_subtype
 
		 SLE_CONDVAR(Order, wait_time,      SLE_UINT16,  SLV_67, SL_MAX_VERSION),
 
		 SLE_CONDVAR(Order, travel_time,    SLE_UINT16,  SLV_67, SL_MAX_VERSION),
 
		 SLE_CONDVAR(Order, max_speed,      SLE_UINT16, SLV_172, SL_MAX_VERSION),
 

	
 
		/* Leftover from the minor savegame version stuff
 
		 * We will never use those free bytes, but we have to keep this line to allow loading of old savegames */
 
		SLE_CONDNULL(10,                                  SLV_5,  SLV_36),
 
	};
 

	
 
	return _order_desc;
 
@@ -122,9 +120,12 @@ SaveLoadTable GetOrderDescription()
 

	
 
static void Save_ORDR()
 
{
 
	const SaveLoadTable slt = GetOrderDescription();
 
	SlTableHeader(slt);
 

	
 
	for (Order *order : Order::Iterate()) {
 
		SlSetArrayIndex(order->index);
 
		SlObject(order, GetOrderDescription());
 
		SlObject(order, slt);
 
	}
 
}
 

	
 
@@ -176,11 +177,13 @@ static void Load_ORDR()
 
			if (prev != nullptr) prev->next = o;
 
		}
 
	} else {
 
		const std::vector<SaveLoad> slt = SlCompatTableHeader(GetOrderDescription(), _order_sl_compat);
 

	
 
		int index;
 

	
 
		while ((index = SlIterateArray()) != -1) {
 
			Order *order = new (index) Order();
 
			SlObject(order, GetOrderDescription());
 
			SlObject(order, slt);
 
		}
 
	}
 
}
 
@@ -206,20 +209,25 @@ SaveLoadTable GetOrderListDescription()
 

	
 
static void Save_ORDL()
 
{
 
	const SaveLoadTable slt = GetOrderListDescription();
 
	SlTableHeader(slt);
 

	
 
	for (OrderList *list : OrderList::Iterate()) {
 
		SlSetArrayIndex(list->index);
 
		SlObject(list, GetOrderListDescription());
 
		SlObject(list, slt);
 
	}
 
}
 

	
 
static void Load_ORDL()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(GetOrderListDescription(), _orderlist_sl_compat);
 

	
 
	int index;
 

	
 
	while ((index = SlIterateArray()) != -1) {
 
		/* set num_orders to 0 so it's a valid OrderList */
 
		OrderList *list = new (index) OrderList(0);
 
		SlObject(list, GetOrderListDescription());
 
		SlObject(list, slt);
 
	}
 

	
 
}
 
@@ -240,7 +248,6 @@ SaveLoadTable GetOrderBackupDescription(
 
		 SLE_CONDVAR(OrderBackup, service_interval,         SLE_FILE_U32 | SLE_VAR_U16,  SL_MIN_VERSION, SLV_192),
 
		 SLE_CONDVAR(OrderBackup, service_interval,         SLE_UINT16,                SLV_192, SL_MAX_VERSION),
 
		    SLE_SSTR(OrderBackup, name,                     SLE_STR),
 
		SLE_CONDNULL(2,                                                                  SL_MIN_VERSION, SLV_192), // clone (2 bytes of pointer, i.e. garbage)
 
		 SLE_CONDREF(OrderBackup, clone,                    REF_VEHICLE,               SLV_192, SL_MAX_VERSION),
 
		     SLE_VAR(OrderBackup, cur_real_order_index,     SLE_UINT8),
 
		 SLE_CONDVAR(OrderBackup, cur_implicit_order_index, SLE_UINT8,                 SLV_176, SL_MAX_VERSION),
 
@@ -257,6 +264,9 @@ SaveLoadTable GetOrderBackupDescription(
 

	
 
static void Save_BKOR()
 
{
 
	const SaveLoadTable slt = GetOrderBackupDescription();
 
	SlTableHeader(slt);
 

	
 
	/* We only save this when we're a network server
 
	 * as we want this information on our clients. For
 
	 * normal games this information isn't needed. */
 
@@ -264,18 +274,20 @@ static void Save_BKOR()
 

	
 
	for (OrderBackup *ob : OrderBackup::Iterate()) {
 
		SlSetArrayIndex(ob->index);
 
		SlObject(ob, GetOrderBackupDescription());
 
		SlObject(ob, slt);
 
	}
 
}
 

	
 
void Load_BKOR()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(GetOrderBackupDescription(), _order_backup_sl_compat);
 

	
 
	int index;
 

	
 
	while ((index = SlIterateArray()) != -1) {
 
		/* set num_orders to 0 so it's a valid OrderList */
 
		OrderBackup *ob = new (index) OrderBackup();
 
		SlObject(ob, GetOrderBackupDescription());
 
		SlObject(ob, slt);
 
	}
 
}
 

	
 
@@ -287,9 +299,9 @@ static void Ptrs_BKOR()
 
}
 

	
 
static const ChunkHandler order_chunk_handlers[] = {
 
	{ 'BKOR', Save_BKOR, Load_BKOR, Ptrs_BKOR, nullptr, CH_ARRAY },
 
	{ 'ORDR', Save_ORDR, Load_ORDR, Ptrs_ORDR, nullptr, CH_ARRAY },
 
	{ 'ORDL', Save_ORDL, Load_ORDL, Ptrs_ORDL, nullptr, CH_ARRAY },
 
	{ 'BKOR', Save_BKOR, Load_BKOR, Ptrs_BKOR, nullptr, CH_TABLE },
 
	{ 'ORDR', Save_ORDR, Load_ORDR, Ptrs_ORDR, nullptr, CH_TABLE },
 
	{ 'ORDL', Save_ORDL, Load_ORDL, Ptrs_ORDL, nullptr, CH_TABLE },
 
};
 

	
 
extern const ChunkHandlerTable _order_chunk_handlers(order_chunk_handlers);
src/saveload/signs_sl.cpp
Show inline comments
 
@@ -8,11 +8,13 @@
 
/** @file signs_sl.cpp Code handling saving and loading of economy data */
 

	
 
#include "../stdafx.h"
 

	
 
#include "saveload.h"
 
#include "compat/signs_sl_compat.h"
 

	
 
#include "../signs_base.h"
 
#include "../fios.h"
 

	
 
#include "saveload.h"
 

	
 
#include "../safeguards.h"
 

	
 
/** Description of a sign within the savegame. */
 
@@ -31,6 +33,8 @@ static const SaveLoad _sign_desc[] = {
 
/** Save all signs */
 
static void Save_SIGN()
 
{
 
	SlTableHeader(_sign_desc);
 

	
 
	for (Sign *si : Sign::Iterate()) {
 
		SlSetArrayIndex(si->index);
 
		SlObject(si, _sign_desc);
 
@@ -40,10 +44,12 @@ static void Save_SIGN()
 
/** Load all signs */
 
static void Load_SIGN()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_sign_desc, _sign_sl_compat);
 

	
 
	int index;
 
	while ((index = SlIterateArray()) != -1) {
 
		Sign *si = new (index) Sign();
 
		SlObject(si, _sign_desc);
 
		SlObject(si, slt);
 
		/* Before version 6.1, signs didn't have owner.
 
		 * Before version 83, invalid signs were determined by si->str == 0.
 
		 * Before version 103, owner could be a bankrupted company.
 
@@ -61,9 +67,8 @@ static void Load_SIGN()
 
	}
 
}
 

	
 
/** Chunk handlers related to signs. */
 
static const ChunkHandler sign_chunk_handlers[] = {
 
	{ 'SIGN', Save_SIGN, Load_SIGN, nullptr, nullptr, CH_ARRAY },
 
	{ 'SIGN', Save_SIGN, Load_SIGN, nullptr, nullptr, CH_TABLE },
 
};
 

	
 
extern const ChunkHandlerTable _sign_chunk_handlers(sign_chunk_handlers);
src/saveload/station_sl.cpp
Show inline comments
 
@@ -8,13 +8,16 @@
 
/** @file station_sl.cpp Code handling saving and loading of stations. */
 

	
 
#include "../stdafx.h"
 

	
 
#include "saveload.h"
 
#include "compat/station_sl_compat.h"
 

	
 
#include "../station_base.h"
 
#include "../waypoint_base.h"
 
#include "../roadstop_base.h"
 
#include "../vehicle_base.h"
 
#include "../newgrf_station.h"
 

	
 
#include "saveload.h"
 
#include "table/strings.h"
 

	
 
#include "../safeguards.h"
 
@@ -142,18 +145,8 @@ void AfterLoadRoadStops()
 

	
 
static const SaveLoad _roadstop_desc[] = {
 
	SLE_VAR(RoadStop, xy,           SLE_UINT32),
 
	SLE_CONDNULL(1, SL_MIN_VERSION, SLV_45),
 
	SLE_VAR(RoadStop, status,       SLE_UINT8),
 
	/* Index was saved in some versions, but this is not needed */
 
	SLE_CONDNULL(4, SL_MIN_VERSION, SLV_9),
 
	SLE_CONDNULL(2, SL_MIN_VERSION, SLV_45),
 
	SLE_CONDNULL(1, SL_MIN_VERSION, SLV_26),
 

	
 
	SLE_REF(RoadStop, next,         REF_ROADSTOPS),
 
	SLE_CONDNULL(2, SL_MIN_VERSION, SLV_45),
 

	
 
	SLE_CONDNULL(4, SL_MIN_VERSION, SLV_25),
 
	SLE_CONDNULL(1, SLV_25, SLV_26),
 
};
 

	
 
static uint16 _waiting_acceptance;
 
@@ -678,6 +671,8 @@ static void Ptrs_STNN()
 

	
 
static void Save_ROADSTOP()
 
{
 
	SlTableHeader(_roadstop_desc);
 

	
 
	for (RoadStop *rs : RoadStop::Iterate()) {
 
		SlSetArrayIndex(rs->index);
 
		SlObject(rs, _roadstop_desc);
 
@@ -686,12 +681,14 @@ static void Save_ROADSTOP()
 

	
 
static void Load_ROADSTOP()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_roadstop_desc, _roadstop_sl_compat);
 

	
 
	int index;
 

	
 
	while ((index = SlIterateArray()) != -1) {
 
		RoadStop *rs = new (index) RoadStop(INVALID_TILE);
 

	
 
		SlObject(rs, _roadstop_desc);
 
		SlObject(rs, slt);
 
	}
 
}
 

	
 
@@ -705,7 +702,7 @@ static void Ptrs_ROADSTOP()
 
static const ChunkHandler station_chunk_handlers[] = {
 
	{ 'STNS', nullptr,       Load_STNS,     Ptrs_STNS,     nullptr, CH_READONLY },
 
	{ 'STNN', Save_STNN,     Load_STNN,     Ptrs_STNN,     nullptr, CH_ARRAY },
 
	{ 'ROAD', Save_ROADSTOP, Load_ROADSTOP, Ptrs_ROADSTOP, nullptr, CH_ARRAY },
 
	{ 'ROAD', Save_ROADSTOP, Load_ROADSTOP, Ptrs_ROADSTOP, nullptr, CH_TABLE },
 
};
 

	
 
extern const ChunkHandlerTable _station_chunk_handlers(station_chunk_handlers);
src/saveload/storage_sl.cpp
Show inline comments
 
@@ -8,8 +8,11 @@
 
/** @file storage_sl.cpp Code handling saving and loading of persistent storages. */
 

	
 
#include "../stdafx.h"
 

	
 
#include "saveload.h"
 
#include "compat/storage_sl_compat.h"
 

	
 
#include "../newgrf_storage.h"
 
#include "saveload.h"
 

	
 
#include "../safeguards.h"
 

	
 
@@ -23,18 +26,22 @@ static const SaveLoad _storage_desc[] = 
 
/** Load persistent storage data. */
 
static void Load_PSAC()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_storage_desc, _storage_sl_compat);
 

	
 
	int index;
 

	
 
	while ((index = SlIterateArray()) != -1) {
 
		assert(PersistentStorage::CanAllocateItem());
 
		PersistentStorage *ps = new (index) PersistentStorage(0, 0, 0);
 
		SlObject(ps, _storage_desc);
 
		SlObject(ps, slt);
 
	}
 
}
 

	
 
/** Save persistent storage data. */
 
static void Save_PSAC()
 
{
 
	SlTableHeader(_storage_desc);
 

	
 
	/* Write the industries */
 
	for (PersistentStorage *ps : PersistentStorage::Iterate()) {
 
		ps->ClearChanges();
 
@@ -43,9 +50,8 @@ static void Save_PSAC()
 
	}
 
}
 

	
 
/** Chunk handler for persistent storages. */
 
static const ChunkHandler persistent_storage_chunk_handlers[] = {
 
	{ 'PSAC', Save_PSAC, Load_PSAC, nullptr, nullptr, CH_ARRAY },
 
	{ 'PSAC', Save_PSAC, Load_PSAC, nullptr, nullptr, CH_TABLE },
 
};
 

	
 
extern const ChunkHandlerTable _persistent_storage_chunk_handlers(persistent_storage_chunk_handlers);
src/saveload/story_sl.cpp
Show inline comments
 
@@ -8,9 +8,11 @@
 
/** @file story_sl.cpp Code handling saving and loading of story pages */
 

	
 
#include "../stdafx.h"
 
#include "../story_base.h"
 

	
 
#include "saveload.h"
 
#include "compat/story_sl_compat.h"
 

	
 
#include "../story_base.h"
 

	
 
#include "../safeguards.h"
 

	
 
@@ -38,6 +40,8 @@ static const SaveLoad _story_page_elemen
 

	
 
static void Save_STORY_PAGE_ELEMENT()
 
{
 
	SlTableHeader(_story_page_elements_desc);
 

	
 
	for (StoryPageElement *s : StoryPageElement::Iterate()) {
 
		SlSetArrayIndex(s->index);
 
		SlObject(s, _story_page_elements_desc);
 
@@ -46,11 +50,13 @@ static void Save_STORY_PAGE_ELEMENT()
 

	
 
static void Load_STORY_PAGE_ELEMENT()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_story_page_elements_desc, _story_page_elements_sl_compat);
 

	
 
	int index;
 
	uint32 max_sort_value = 0;
 
	while ((index = SlIterateArray()) != -1) {
 
		StoryPageElement *s = new (index) StoryPageElement();
 
		SlObject(s, _story_page_elements_desc);
 
		SlObject(s, slt);
 
		if (s->sort_value > max_sort_value) {
 
			max_sort_value = s->sort_value;
 
		}
 
@@ -72,6 +78,8 @@ static const SaveLoad _story_pages_desc[
 

	
 
static void Save_STORY_PAGE()
 
{
 
	SlTableHeader(_story_pages_desc);
 

	
 
	for (StoryPage *s : StoryPage::Iterate()) {
 
		SlSetArrayIndex(s->index);
 
		SlObject(s, _story_pages_desc);
 
@@ -80,11 +88,13 @@ static void Save_STORY_PAGE()
 

	
 
static void Load_STORY_PAGE()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_story_pages_desc, _story_pages_sl_compat);
 

	
 
	int index;
 
	uint32 max_sort_value = 0;
 
	while ((index = SlIterateArray()) != -1) {
 
		StoryPage *s = new (index) StoryPage();
 
		SlObject(s, _story_pages_desc);
 
		SlObject(s, slt);
 
		if (s->sort_value > max_sort_value) {
 
			max_sort_value = s->sort_value;
 
		}
 
@@ -96,8 +106,8 @@ static void Load_STORY_PAGE()
 
}
 

	
 
static const ChunkHandler story_page_chunk_handlers[] = {
 
	{ 'STPE', Save_STORY_PAGE_ELEMENT, Load_STORY_PAGE_ELEMENT, nullptr, nullptr, CH_ARRAY },
 
	{ 'STPA', Save_STORY_PAGE,         Load_STORY_PAGE,         nullptr, nullptr, CH_ARRAY },
 
	{ 'STPE', Save_STORY_PAGE_ELEMENT, Load_STORY_PAGE_ELEMENT, nullptr, nullptr, CH_TABLE },
 
	{ 'STPA', Save_STORY_PAGE,         Load_STORY_PAGE,         nullptr, nullptr, CH_TABLE },
 
};
 

	
 
extern const ChunkHandlerTable _story_page_chunk_handlers(story_page_chunk_handlers);
src/saveload/strings_sl.cpp
Show inline comments
 
@@ -130,7 +130,6 @@ static void Load_NAME()
 
	}
 
}
 

	
 
/** Chunk handlers related to strings. */
 
static const ChunkHandler name_chunk_handlers[] = {
 
	{ 'NAME', nullptr, Load_NAME, nullptr, nullptr, CH_READONLY },
 
};
src/saveload/subsidy_sl.cpp
Show inline comments
 
@@ -8,9 +8,11 @@
 
/** @file subsidy_sl.cpp Code handling saving and loading of subsidies */
 

	
 
#include "../stdafx.h"
 
#include "../subsidy_base.h"
 

	
 
#include "saveload.h"
 
#include "compat/subsidy_sl_compat.h"
 

	
 
#include "../subsidy_base.h"
 

	
 
#include "../safeguards.h"
 

	
 
@@ -29,6 +31,8 @@ static const SaveLoad _subsidies_desc[] 
 

	
 
static void Save_SUBS()
 
{
 
	SlTableHeader(_subsidies_desc);
 

	
 
	for (Subsidy *s : Subsidy::Iterate()) {
 
		SlSetArrayIndex(s->index);
 
		SlObject(s, _subsidies_desc);
 
@@ -37,15 +41,17 @@ static void Save_SUBS()
 

	
 
static void Load_SUBS()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_subsidies_desc, _subsidies_sl_compat);
 

	
 
	int index;
 
	while ((index = SlIterateArray()) != -1) {
 
		Subsidy *s = new (index) Subsidy();
 
		SlObject(s, _subsidies_desc);
 
		SlObject(s, slt);
 
	}
 
}
 

	
 
static const ChunkHandler subsidy_chunk_handlers[] = {
 
	{ 'SUBS', Save_SUBS, Load_SUBS, nullptr, nullptr, CH_ARRAY },
 
	{ 'SUBS', Save_SUBS, Load_SUBS, nullptr, nullptr, CH_TABLE },
 
};
 

	
 
extern const ChunkHandlerTable _subsidy_chunk_handlers(subsidy_chunk_handlers);
src/saveload/town_sl.cpp
Show inline comments
 
@@ -325,9 +325,8 @@ static void Ptrs_TOWN()
 
	}
 
}
 

	
 
/** Chunk handler for towns. */
 
static const ChunkHandler town_chunk_handlers[] = {
 
	{ 'HIDS', Save_HIDS, Load_HIDS, nullptr,   nullptr, CH_ARRAY },
 
	{ 'HIDS', Save_HIDS, Load_HIDS, nullptr,   nullptr, CH_TABLE },
 
	{ 'CITY', Save_TOWN, Load_TOWN, Ptrs_TOWN, nullptr, CH_ARRAY },
 
};
 

	
src/settings.cpp
Show inline comments
 
@@ -67,6 +67,8 @@
 
#include "strings_func.h"
 
#include "vehicle_func.h"
 

	
 
#include "saveload/compat/settings_sl_compat.h"
 

	
 
#include "void_map.h"
 
#include "station_base.h"
 

	
 
@@ -2193,27 +2195,31 @@ static std::vector<SaveLoad> GetSettings
 
		if (sd->flags & SF_NOT_IN_SAVE) continue;
 

	
 
		if (is_loading && (sd->flags & SF_NO_NETWORK_SYNC) && _networking && !_network_server) {
 
			/* We don't want to read this setting, so we do need to skip over it. */
 
			saveloads.push_back({sd->name, sd->save.cmd, GetVarFileType(sd->save.conv) | SLE_VAR_NULL, sd->save.length, sd->save.version_from, sd->save.version_to, 0, nullptr, 0, nullptr});
 
			if (IsSavegameVersionBefore(SLV_TABLE_CHUNKS)) {
 
				/* We don't want to read this setting, so we do need to skip over it. */
 
				saveloads.push_back({sd->name, sd->save.cmd, GetVarFileType(sd->save.conv) | SLE_VAR_NULL, sd->save.length, sd->save.version_from, sd->save.version_to, 0, nullptr, 0, nullptr});
 
			}
 
			continue;
 
		}
 

	
 
		saveloads.push_back(sd->save);
 
		SaveLoad sv = sd->save;
 
		/* Replace the name with the actual name of the setting. */
 
		if (!sd->name.empty()) sv.name = sd->name;
 
		saveloads.push_back(sv);
 
	}
 

	
 
	return saveloads;
 
}
 

	
 

	
 
/**
 
 * Save and load handler for settings
 
 * @param settings SettingDesc struct containing all information
 
 * @param object can be either nullptr in which case we load global variables or
 
 * a pointer to a struct which is getting saved
 
 */
 
static void LoadSettings(const SettingTable &settings, void *object)
 
static void LoadSettings(const SettingTable &settings, void *object, const SaveLoadCompatTable &slct)
 
{
 
	const std::vector<SaveLoad> slt = GetSettingsDesc(settings, true);
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(GetSettingsDesc(settings, true), slct);
 

	
 
	if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() == -1) return;
 
	SlObject(object, slt);
 
@@ -2243,6 +2249,8 @@ static void SaveSettings(const SettingTa
 
{
 
	const std::vector<SaveLoad> slt = GetSettingsDesc(settings, false);
 

	
 
	SlTableHeader(slt);
 

	
 
	SlSetArrayIndex(0);
 
	SlObject(object, slt);
 
}
 
@@ -2253,7 +2261,7 @@ static void Load_OPTS()
 
	 * a networking environment. This ensures for example that the local
 
	 * autosave-frequency stays when joining a network-server */
 
	PrepareOldDiffCustom();
 
	LoadSettings(_gameopt_settings, &_settings_game);
 
	LoadSettings(_gameopt_settings, &_settings_game, _gameopt_sl_compat);
 
	HandleOldDiffCustom(true);
 
}
 

	
 
@@ -2262,12 +2270,12 @@ static void Load_PATS()
 
	/* Copy over default setting since some might not get loaded in
 
	 * a networking environment. This ensures for example that the local
 
	 * currency setting stays when joining a network-server */
 
	LoadSettings(_settings, &_settings_game);
 
	LoadSettings(_settings, &_settings_game, _settings_sl_compat);
 
}
 

	
 
static void Check_PATS()
 
{
 
	LoadSettings(_settings, &_load_check_data.settings);
 
	LoadSettings(_settings, &_load_check_data.settings, _settings_sl_compat);
 
}
 

	
 
static void Save_PATS()
 
@@ -2276,8 +2284,8 @@ static void Save_PATS()
 
}
 

	
 
static const ChunkHandler setting_chunk_handlers[] = {
 
	{ 'OPTS', nullptr,   Load_OPTS, nullptr, nullptr,    CH_READONLY },
 
	{ 'PATS', Save_PATS, Load_PATS, nullptr, Check_PATS, CH_ARRAY },
 
	{ 'OPTS', nullptr,   Load_OPTS, nullptr, nullptr,    CH_READONLY  },
 
	{ 'PATS', Save_PATS, Load_PATS, nullptr, Check_PATS, CH_TABLE },
 
};
 

	
 
extern const ChunkHandlerTable _setting_chunk_handlers(setting_chunk_handlers);
src/table/settings/gameopt_settings.ini
Show inline comments
 
@@ -158,15 +158,6 @@ min      = MIN_SNOWLINE_HEIGHT * TILE_HE
 
max      = UINT8_MAX
 
to       = SLV_22
 

	
 
[SDT_NULL]
 
length   = 1
 
from     = SLV_22
 
to       = SLV_165
 

	
 
[SDT_NULL]
 
length   = 1
 
to       = SLV_23
 

	
 
[SDTC_OMANY]
 
var      = gui.autosave
 
type     = SLE_UINT8
src/table/settings/settings.ini
Show inline comments
 
@@ -62,7 +62,6 @@ SDT_BOOL   =   SDT_BOOL(GameSettings, $v
 
SDT_OMANY  =  SDT_OMANY(GameSettings, $var, $type, $flags, $def,             $max, $full,     $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $load, $cat, $extra, $startup),
 
SDT_SSTR   =   SDT_SSTR(GameSettings, $var, $type, $flags, $def,                                                       $pre_cb, $post_cb, $from, $to,        $cat, $extra, $startup),
 
SDT_VAR    =    SDT_VAR(GameSettings, $var, $type, $flags, $def,       $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to,        $cat, $extra, $startup),
 
SDT_NULL   =   SDT_NULL(                                                                $length,                                                     $from, $to),
 

	
 
[validation]
 
SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
 
@@ -355,12 +354,6 @@ strhelp  = STR_CONFIG_SETTING_LANDSCAPE_
 
strval   = STR_CHEAT_SWITCH_CLIMATE_TEMPERATE_LANDSCAPE
 
cat      = SC_BASIC
 

	
 
; Snow line (or snow_line_height * TILE_HEIGHT)
 
[SDT_NULL]
 
length   = 1
 
from     = SLV_97
 
to       = SLV_164
 

	
 
[SDT_OMANY]
 
var      = vehicle.road_side
 
type     = SLE_UINT8
 
@@ -536,11 +529,6 @@ str      = STR_CONFIG_SETTING_MAX_TUNNEL
 
strhelp  = STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT
 
strval   = STR_CONFIG_SETTING_TILE_LENGTH
 

	
 
# construction.longbridges
 
[SDT_NULL]
 
length   = 1
 
to       = SLV_159
 

	
 
[SDT_VAR]
 
var      = construction.train_signal_side
 
type     = SLE_UINT8
 
@@ -843,11 +831,6 @@ strhelp  = STR_CONFIG_SETTING_TRAIN_LENG
 
strval   = STR_CONFIG_SETTING_TILE_LENGTH
 
cat      = SC_BASIC
 

	
 
; vehicle.mammoth_trains
 
[SDT_NULL]
 
length   = 1
 
to       = SLV_159
 

	
 
[SDT_VAR]
 
var      = vehicle.smoke_amount
 
type     = SLE_UINT8
 
@@ -860,11 +843,6 @@ str      = STR_CONFIG_SETTING_SMOKE_AMOU
 
strhelp  = STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT
 
strval   = STR_CONFIG_SETTING_NONE
 

	
 
; order.gotodepot
 
[SDT_NULL]
 
length   = 1
 
to       = SLV_159
 

	
 
; path finder
 

	
 
[SDT_BOOL]
 
@@ -1083,12 +1061,6 @@ strhelp  = STR_CONFIG_SETTING_FREIGHT_TR
 
strval   = STR_JUST_COMMA
 
post_cb  = UpdateConsists
 

	
 
; order.timetabling
 
[SDT_NULL]
 
length   = 1
 
from     = SLV_67
 
to       = SLV_159
 

	
 
[SDT_VAR]
 
var      = vehicle.plane_speed
 
type     = SLE_UINT8
 
@@ -1123,11 +1095,6 @@ strhelp  = STR_CONFIG_SETTING_PLANE_CRAS
 
strval   = STR_CONFIG_SETTING_PLANE_CRASHES_NONE
 
cat      = SC_BASIC
 

	
 
; station.join_stations
 
[SDT_NULL]
 
length   = 1
 
to       = SLV_159
 

	
 
[SDTC_BOOL]
 
var      = gui.sg_full_load_any
 
from     = SLV_22
 
@@ -1151,11 +1118,6 @@ from     = SLV_22
 
to       = SLV_93
 
def      = false
 

	
 
; station.nonuniform_stations
 
[SDT_NULL]
 
length   = 1
 
to       = SLV_159
 

	
 
[SDT_VAR]
 
var      = station.station_spread
 
type     = SLE_UINT8
 
@@ -1277,10 +1239,6 @@ def      = false
 
str      = STR_CONFIG_SETTING_MULTIPINDTOWN
 
strhelp  = STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT
 

	
 
[SDT_NULL]
 
length   = 1
 
to       = SLV_141
 

	
 
[SDT_BOOL]
 
var      = economy.bribe
 
def      = true
 
@@ -1365,10 +1323,6 @@ strhelp  = STR_CONFIG_SETTING_DESERT_COV
 
strval   = STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE
 
cat      = SC_BASIC
 

	
 
[SDT_NULL]
 
length   = 4
 
to       = SLV_144
 

	
 
[SDT_VAR]
 
var      = game_creation.starting_year
 
type     = SLE_INT32
 
@@ -1380,10 +1334,6 @@ str      = STR_CONFIG_SETTING_STARTING_Y
 
strval   = STR_JUST_INT
 
cat      = SC_BASIC
 

	
 
[SDT_NULL]
 
length   = 4
 
to       = SLV_105
 

	
 
[SDT_VAR]
 
var      = game_creation.ending_year
 
type     = SLE_INT32
 
@@ -1486,11 +1436,6 @@ from     = SLV_77
 
def      = true
 
cat      = SC_EXPERT
 

	
 
; previously ai-new setting.
 
[SDT_NULL]
 
length   = 1
 
to       = SLV_107
 

	
 
[SDT_OMANY]
 
var      = script.settings_profile
 
type     = SLE_UINT8
 
@@ -1665,13 +1610,6 @@ min      = 1
 
max      = 255
 
cat      = SC_EXPERT
 

	
 
##
 
; Used to be pf.opf.pf_maxlength & pf.opf.pf_maxdepth
 
[SDT_NULL]
 
length   = 3
 
to       = SLV_REMOVE_OPF
 

	
 
##
 
[SDT_VAR]
 
var      = pf.npf.npf_max_search_nodes
 
type     = SLE_UINT
0 comments (0 inline, 0 general)