File diff r25751:3154638283de → r25752:2d6c2238f03d
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);