Merge branch 'save_ext' into jgrpp
# Conflicts: # Makefile.src.in # findversion.sh # projects/determineversion.vbs # src/gamelog.cpp # src/gamelog_internal.h # src/lang/german.txt # src/lang/korean.txt # src/network/core/config.h # src/network/network.cpp # src/network/network_udp.cpp # src/rev.h # src/saveload/afterload.cpp # src/saveload/company_sl.cpp # src/saveload/depot_sl.cpp # src/saveload/gamelog_sl.cpp # src/saveload/misc_sl.cpp # src/saveload/order_sl.cpp # src/saveload/saveload.cpp # src/saveload/station_sl.cpp # src/saveload/town_sl.cpp # src/saveload/vehicle_sl.cpp # src/table/settings.ini # src/viewport.cpp
This commit is contained in:
		@@ -92,6 +92,7 @@ MODIFIED := $(shell echo "$(VERSIONS)" | cut -f 3 -d'	')
 | 
			
		||||
# Use autodetected revisions
 | 
			
		||||
VERSION  := $(shell echo "$(VERSIONS)" | cut -f 1 -d'	')
 | 
			
		||||
ISODATE  := $(shell echo "$(VERSIONS)" | cut -f 2 -d'	')
 | 
			
		||||
GITHASH  := $(shell echo "$(VERSIONS)" | cut -f 3 -d'	')
 | 
			
		||||
 | 
			
		||||
# Make sure we have something in VERSION and ISODATE
 | 
			
		||||
ifeq ($(VERSION),)
 | 
			
		||||
@@ -278,11 +279,11 @@ endif
 | 
			
		||||
 | 
			
		||||
# Revision files
 | 
			
		||||
 | 
			
		||||
$(SRC_DIR)/rev.cpp: $(CONFIG_CACHE_VERSION) $(CONFIG_CACHE_INVOCATION) $(SRC_DIR)/rev.cpp.in
 | 
			
		||||
	$(Q)cat $(SRC_DIR)/rev.cpp.in      | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@\!\!CONFIGURE_INVOCATION\!\!@$(CONFIGURE_INVOCATION)@g;" > $(SRC_DIR)/rev.cpp
 | 
			
		||||
$(SRC_DIR)/rev.cpp: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/rev.cpp.in
 | 
			
		||||
	$(Q)cat $(SRC_DIR)/rev.cpp.in      | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g;s@\!\!CONFIGURE_INVOCATION\!\!@$(CONFIGURE_INVOCATION)@g;" > $(SRC_DIR)/rev.cpp
 | 
			
		||||
 | 
			
		||||
$(SRC_DIR)/os/windows/ottdres.rc: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/os/windows/ottdres.rc.in
 | 
			
		||||
	$(Q)cat $(SRC_DIR)/os/windows/ottdres.rc.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!DATE!!@`date +%d.%m.%y`@g" > $(SRC_DIR)/os/windows/ottdres.rc
 | 
			
		||||
	$(Q)cat $(SRC_DIR)/os/windows/ottdres.rc.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g" > $(SRC_DIR)/os/windows/ottdres.rc
 | 
			
		||||
 | 
			
		||||
FORCE:
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -67,15 +67,23 @@ if [ -d "$ROOT_DIR/.git" ]; then
 | 
			
		||||
		MODIFIED="2"
 | 
			
		||||
	fi
 | 
			
		||||
	HASH=`LC_ALL=C git rev-parse --verify HEAD 2>/dev/null`
 | 
			
		||||
	SHORTHASH=`echo ${HASH} | cut -c1-8`
 | 
			
		||||
	SHORTHASH=`echo ${HASH} | cut -c1-10`
 | 
			
		||||
	ISODATE=`LC_ALL=C git show -s --pretty='format:%ci' HEAD | "$AWK" '{ gsub("-", "", $1); print $1 }'`
 | 
			
		||||
	BRANCH="`git symbolic-ref -q HEAD 2>/dev/null | sed 's@.*/@@'`"
 | 
			
		||||
	TAG="`git describe --tags 2>/dev/null`"
 | 
			
		||||
 | 
			
		||||
	if [ "$MODIFIED" -eq "0" ]; then
 | 
			
		||||
		hashprefix="-g"
 | 
			
		||||
	elif [ "$MODIFIED" -eq "2" ]; then
 | 
			
		||||
		hashprefix="-m"
 | 
			
		||||
	else
 | 
			
		||||
		hashprefix="-u"
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	if [ -n "$TAG" ]; then
 | 
			
		||||
		VERSION="${TAG}"
 | 
			
		||||
	else
 | 
			
		||||
		VERSION="${ISODATE}-${BRANCH}-g${SHORTHASH}"
 | 
			
		||||
		VERSION="${ISODATE}-${BRANCH}${hashprefix}${SHORTHASH}"
 | 
			
		||||
	fi
 | 
			
		||||
elif [ -f "$ROOT_DIR/.ottdrev-vc" ]; then
 | 
			
		||||
	VERSION_DATA="`cat "$ROOT_DIR/.ottdrev-vc" | sed -n -e '1 p;'`"
 | 
			
		||||
 
 | 
			
		||||
@@ -21,32 +21,35 @@ Sub FindReplaceInFile(filename, to_find, replacement)
 | 
			
		||||
	file.Close
 | 
			
		||||
End Sub
 | 
			
		||||
 | 
			
		||||
Sub UpdateFile(modified, isodate, version, cur_date, filename)
 | 
			
		||||
Sub UpdateFile(modified, isodate, version, cur_date, githash, filename)
 | 
			
		||||
	FSO.CopyFile filename & ".in", filename
 | 
			
		||||
	FindReplaceInFile filename, "!!MODIFIED!!", modified
 | 
			
		||||
	FindReplaceInFile filename, "!!ISODATE!!", isodate
 | 
			
		||||
	FindReplaceInFile filename, "!!VERSION!!", version
 | 
			
		||||
	FindReplaceInFile filename, "!!DATE!!", cur_date
 | 
			
		||||
	FindReplaceInFile filename, "!!GITHASH!!", githash
 | 
			
		||||
	FindReplaceInFile filename, "!!CONFIGURE_INVOCATION!!", ""
 | 
			
		||||
End Sub
 | 
			
		||||
 | 
			
		||||
Sub UpdateFiles(version)
 | 
			
		||||
	Dim modified, isodate, cur_date
 | 
			
		||||
	Dim modified, isodate, cur_date, githash
 | 
			
		||||
	cur_date = DatePart("D", Date) & "." & DatePart("M", Date) & "." & DatePart("YYYY", Date)
 | 
			
		||||
 | 
			
		||||
	If InStr(version, Chr(9)) Then
 | 
			
		||||
		isodate  = Mid(version, InStr(version, Chr(9)) + 1)
 | 
			
		||||
		modified = Mid(isodate, InStr(isodate, Chr(9)) + 1)
 | 
			
		||||
		githash  = Mid(modified, InStr(modified, Chr(9)) + 1)
 | 
			
		||||
		isodate  = Mid(isodate, 1, InStr(isodate, Chr(9)) - 1)
 | 
			
		||||
		modified = Mid(modified, 1, InStr(modified, Chr(9)) - 1)
 | 
			
		||||
		version  = Mid(version, 1, InStr(version, Chr(9)) - 1)
 | 
			
		||||
	Else
 | 
			
		||||
		isodate = 0
 | 
			
		||||
		modified = 1
 | 
			
		||||
		githash = ""
 | 
			
		||||
	End If
 | 
			
		||||
 | 
			
		||||
	UpdateFile modified, isodate, version, cur_date, "../src/rev.cpp"
 | 
			
		||||
	UpdateFile modified, isodate, version, cur_date, "../src/os/windows/ottdres.rc"
 | 
			
		||||
	UpdateFile modified, isodate, version, cur_date, githash, "../src/rev.cpp"
 | 
			
		||||
	UpdateFile modified, isodate, version, cur_date, githash, "../src/os/windows/ottdres.rc"
 | 
			
		||||
End Sub
 | 
			
		||||
 | 
			
		||||
Function DetermineVersion()
 | 
			
		||||
@@ -54,7 +57,7 @@ Function DetermineVersion()
 | 
			
		||||
	Set WshShell = CreateObject("WScript.Shell")
 | 
			
		||||
	On Error Resume Next
 | 
			
		||||
 | 
			
		||||
	modified = 1
 | 
			
		||||
	modified = 0
 | 
			
		||||
	hash = ""
 | 
			
		||||
	shorthash = ""
 | 
			
		||||
	branch = ""
 | 
			
		||||
@@ -72,7 +75,7 @@ Function DetermineVersion()
 | 
			
		||||
 | 
			
		||||
		If oExec.ExitCode = 0 Then
 | 
			
		||||
			hash = oExec.StdOut.ReadLine()
 | 
			
		||||
			shorthash = Mid(hash, 1, 8)
 | 
			
		||||
			shorthash = Mid(hash, 1, 10)
 | 
			
		||||
			' Make sure index is in sync with disk
 | 
			
		||||
			Set oExec = WshShell.Exec("git update-index --refresh")
 | 
			
		||||
			If Err.Number = 0 Then
 | 
			
		||||
@@ -133,18 +136,21 @@ Function DetermineVersion()
 | 
			
		||||
		rev_file.Close()
 | 
			
		||||
	ElseIf hash = "" Then
 | 
			
		||||
		DetermineVersion = "norev000"
 | 
			
		||||
		modified = 1
 | 
			
		||||
	Else
 | 
			
		||||
		Dim version
 | 
			
		||||
		If tag <> "" Then
 | 
			
		||||
			version = tag
 | 
			
		||||
		ElseIf branch = "master" Then
 | 
			
		||||
			version = isodate & "-g" & shorthash
 | 
			
		||||
		Dim version, hashprefix
 | 
			
		||||
		If modified = 0 Then
 | 
			
		||||
			hashprefix = "-g"
 | 
			
		||||
		ElseIf modified = 2 Then
 | 
			
		||||
			hashprefix = "-m"
 | 
			
		||||
		Else
 | 
			
		||||
			version = isodate & "-" & branch & "-g" & shorthash
 | 
			
		||||
			hashprefix = "-u"
 | 
			
		||||
		End If
 | 
			
		||||
 | 
			
		||||
		If modified = 2 Then
 | 
			
		||||
			version = version & "M"
 | 
			
		||||
		If tag <> "" Then
 | 
			
		||||
			version = tag
 | 
			
		||||
		Else
 | 
			
		||||
			version = isodate & "-" & branch & hashprefix & shorthash
 | 
			
		||||
		End If
 | 
			
		||||
 | 
			
		||||
		DetermineVersion = version & Chr(9) & isodate & Chr(9) & modified & Chr(9) & hash
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ public:
 | 
			
		||||
		START_NEXT_EASY   = DAYS_IN_YEAR * 2,
 | 
			
		||||
		START_NEXT_MEDIUM = DAYS_IN_YEAR,
 | 
			
		||||
		START_NEXT_HARD   = DAYS_IN_YEAR / 2,
 | 
			
		||||
		START_NEXT_MIN    = 1,
 | 
			
		||||
		START_NEXT_MIN    = 0,
 | 
			
		||||
		START_NEXT_MAX    = 3600,
 | 
			
		||||
		START_NEXT_DEVIATION = 60,
 | 
			
		||||
	};
 | 
			
		||||
 
 | 
			
		||||
@@ -118,3 +118,14 @@ void AIConfig::SetSetting(const char *name, int value)
 | 
			
		||||
 | 
			
		||||
	ScriptConfig::SetSetting(name, value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AIConfig::AddRandomDeviation()
 | 
			
		||||
{
 | 
			
		||||
	int start_date = this->GetSetting("start_date");
 | 
			
		||||
 | 
			
		||||
	ScriptConfig::AddRandomDeviation();
 | 
			
		||||
 | 
			
		||||
	/* start_date = 0 is a special case, where random deviation does not occur.
 | 
			
		||||
	 * If start_date was not already 0, then a minimum value of 1 must apply. */
 | 
			
		||||
	this->SetSetting("start_date", start_date != 0 ? max(1, this->GetSetting("start_date")) : 0);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -34,6 +34,7 @@ public:
 | 
			
		||||
 | 
			
		||||
	/* virtual */ int GetSetting(const char *name) const;
 | 
			
		||||
	/* virtual */ void SetSetting(const char *name, int value);
 | 
			
		||||
	/* virtual */ void AddRandomDeviation();
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * When ever the AI Scanner is reloaded, all infos become invalid. This
 | 
			
		||||
 
 | 
			
		||||
@@ -603,10 +603,10 @@ void StartupCompanies()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Start a new competitor company if possible. */
 | 
			
		||||
static void MaybeStartNewCompany()
 | 
			
		||||
static bool MaybeStartNewCompany()
 | 
			
		||||
{
 | 
			
		||||
#ifdef ENABLE_NETWORK
 | 
			
		||||
	if (_networking && Company::GetNumItems() >= _settings_client.network.max_companies) return;
 | 
			
		||||
	if (_networking && Company::GetNumItems() >= _settings_client.network.max_companies) return false;
 | 
			
		||||
#endif /* ENABLE_NETWORK */
 | 
			
		||||
 | 
			
		||||
	Company *c;
 | 
			
		||||
@@ -620,8 +620,10 @@ static void MaybeStartNewCompany()
 | 
			
		||||
	if (n < (uint)_settings_game.difficulty.max_no_competitors) {
 | 
			
		||||
		/* Send a command to all clients to start up a new AI.
 | 
			
		||||
		 * Works fine for Multiplayer and Singleplayer */
 | 
			
		||||
		DoCommandP(0, 1 | INVALID_COMPANY << 16, 0, CMD_COMPANY_CTRL);
 | 
			
		||||
		return DoCommandP(0, 1 | INVALID_COMPANY << 16, 0, CMD_COMPANY_CTRL);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Initialize the pool of companies. */
 | 
			
		||||
@@ -722,11 +724,15 @@ void OnTick_Companies()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (_next_competitor_start == 0) {
 | 
			
		||||
		_next_competitor_start = AI::GetStartNextTime() * DAY_TICKS;
 | 
			
		||||
		/* AI::GetStartNextTime() can return 0. */
 | 
			
		||||
		_next_competitor_start = max(1, AI::GetStartNextTime() * DAY_TICKS);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (AI::CanStartNew() && _game_mode != GM_MENU && --_next_competitor_start == 0) {
 | 
			
		||||
		MaybeStartNewCompany();
 | 
			
		||||
	if (_game_mode != GM_MENU && AI::CanStartNew() && --_next_competitor_start == 0) {
 | 
			
		||||
		/* Allow multiple AIs to possibly start in the same tick. */
 | 
			
		||||
		do {
 | 
			
		||||
			if (!MaybeStartNewCompany()) break;
 | 
			
		||||
		} while (AI::GetStartNextTime() == 0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_cur_company_tick_index = (_cur_company_tick_index + 1) % MAX_COMPANIES;
 | 
			
		||||
 
 | 
			
		||||
@@ -704,9 +704,6 @@ public:
 | 
			
		||||
		this->CreateNestedTree();
 | 
			
		||||
		this->vscroll = this->GetScrollbar(WID_SCL_MATRIX_SCROLLBAR);
 | 
			
		||||
 | 
			
		||||
		this->square = GetSpriteSize(SPR_SQUARE);
 | 
			
		||||
		this->line_height = max(this->square.height, (uint)FONT_HEIGHT_NORMAL) + 4;
 | 
			
		||||
 | 
			
		||||
		if (group == INVALID_GROUP) {
 | 
			
		||||
			this->livery_class = LC_OTHER;
 | 
			
		||||
			this->sel = 1;
 | 
			
		||||
@@ -774,6 +771,9 @@ public:
 | 
			
		||||
 | 
			
		||||
			case WID_SCL_MATRIX: {
 | 
			
		||||
				/* 11 items in the default rail class */
 | 
			
		||||
				this->square = GetSpriteSize(SPR_SQUARE);
 | 
			
		||||
				this->line_height = max(this->square.height, (uint)FONT_HEIGHT_NORMAL) + 4;
 | 
			
		||||
 | 
			
		||||
				size->height = 11 * this->line_height;
 | 
			
		||||
				resize->width = 1;
 | 
			
		||||
				resize->height = this->line_height;
 | 
			
		||||
@@ -788,6 +788,7 @@ public:
 | 
			
		||||
				FALLTHROUGH;
 | 
			
		||||
 | 
			
		||||
			case WID_SCL_PRI_COL_DROPDOWN: {
 | 
			
		||||
				this->square = GetSpriteSize(SPR_SQUARE);
 | 
			
		||||
				int padding = this->square.width + NWidgetScrollbar::GetVerticalDimension().width + 10;
 | 
			
		||||
				for (const StringID *id = _colour_dropdown; id != endof(_colour_dropdown); id++) {
 | 
			
		||||
					size->width = max(size->width, GetStringBoundingBox(*id).width + padding);
 | 
			
		||||
 
 | 
			
		||||
@@ -23,13 +23,13 @@
 | 
			
		||||
 | 
			
		||||
#include "safeguards.h"
 | 
			
		||||
 | 
			
		||||
extern const uint16 SAVEGAME_VERSION;  ///< current savegame version
 | 
			
		||||
extern const SaveLoadVersion SAVEGAME_VERSION;  ///< current savegame version
 | 
			
		||||
 | 
			
		||||
extern SavegameType _savegame_type; ///< type of savegame we are loading
 | 
			
		||||
 | 
			
		||||
extern uint32 _ttdp_version;     ///< version of TTDP savegame (if applicable)
 | 
			
		||||
extern uint16 _sl_version;       ///< the major savegame version identifier
 | 
			
		||||
extern byte   _sl_minor_version; ///< the minor savegame version, DO NOT USE!
 | 
			
		||||
extern uint32 _ttdp_version;        ///< version of TTDP savegame (if applicable)
 | 
			
		||||
extern SaveLoadVersion _sl_version; ///< the major savegame version identifier
 | 
			
		||||
extern byte   _sl_minor_version;    ///< the minor savegame version, DO NOT USE!
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static GamelogActionType _gamelog_action_type = GLAT_NONE; ///< action to record if anything changes
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,6 @@
 | 
			
		||||
#ifndef GAMELOG_INTERNAL_H
 | 
			
		||||
#define GAMELOG_INTERNAL_H
 | 
			
		||||
 | 
			
		||||
#include "network/core/config.h"
 | 
			
		||||
#include "gamelog.h"
 | 
			
		||||
 | 
			
		||||
/** Type of logged change */
 | 
			
		||||
@@ -33,6 +32,8 @@ enum GamelogChangeType {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static const uint GAMELOG_REVISION_LENGTH = 15;
 | 
			
		||||
 | 
			
		||||
/** Contains information about one logged change */
 | 
			
		||||
struct LoggedChange {
 | 
			
		||||
	GamelogChangeType ct; ///< Type of change logged in this struct
 | 
			
		||||
 
 | 
			
		||||
@@ -718,6 +718,8 @@ CommandCost CmdSetGroupLivery(TileIndex tile, DoCommandFlag flags, uint32 p1, ui
 | 
			
		||||
 | 
			
		||||
	if (g == NULL || g->owner != _current_company) return CMD_ERROR;
 | 
			
		||||
 | 
			
		||||
	if (colour >= COLOUR_END && colour != INVALID_COLOUR) return CMD_ERROR;
 | 
			
		||||
 | 
			
		||||
	if (flags & DC_EXEC) {
 | 
			
		||||
		if (primary) {
 | 
			
		||||
			SB(g->livery.in_use, 0, 1, colour != INVALID_COLOUR);
 | 
			
		||||
 
 | 
			
		||||
@@ -286,6 +286,7 @@ STR_COLOUR_BROWN                                                :Smeđa
 | 
			
		||||
STR_COLOUR_GREY                                                 :Siva
 | 
			
		||||
STR_COLOUR_WHITE                                                :Bijela
 | 
			
		||||
STR_COLOUR_RANDOM                                               :Nasumično
 | 
			
		||||
STR_COLOUR_DEFAULT                                              :Osnovna postavka
 | 
			
		||||
 | 
			
		||||
# Units used in OpenTTD
 | 
			
		||||
STR_UNITS_VELOCITY_IMPERIAL                                     :{COMMA}{NBSP}mph
 | 
			
		||||
@@ -2872,6 +2873,8 @@ STR_SAVELOAD_DETAIL_NOT_AVAILABLE                               :{BLACK}Nema dos
 | 
			
		||||
STR_SAVELOAD_DETAIL_COMPANY_INDEX                               :{SILVER}{COMMA}: {WHITE}{STRING}
 | 
			
		||||
STR_SAVELOAD_DETAIL_GRFSTATUS                                   :{SILVER}NewGRF: {WHITE}{STRING}
 | 
			
		||||
STR_SAVELOAD_FILTER_TITLE                                       :{BLACK}Filtriraj niz:
 | 
			
		||||
STR_SAVELOAD_OVERWRITE_TITLE                                    :{WHITE}Presnimi datoteku
 | 
			
		||||
STR_SAVELOAD_OVERWRITE_WARNING                                  :{YELLOW}Jeste li sigurano da želite presnimiti postojeću datoteku?
 | 
			
		||||
 | 
			
		||||
STR_SAVELOAD_OSKTITLE                                           :{BLACK}Upiši ime za spremanje igre
 | 
			
		||||
 | 
			
		||||
@@ -3516,6 +3519,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP                           :{BLACK}Grupe -
 | 
			
		||||
STR_GROUP_CREATE_TOOLTIP                                        :{BLACK}Klikni za kreiranje grupe
 | 
			
		||||
STR_GROUP_DELETE_TOOLTIP                                        :{BLACK}Obriši odabranu grupu
 | 
			
		||||
STR_GROUP_RENAME_TOOLTIP                                        :{BLACK}Preimenuj odabranu grupu
 | 
			
		||||
STR_GROUP_LIVERY_TOOLTIP                                        :{BLACK}Promijeni livreju odabrane grupe
 | 
			
		||||
STR_GROUP_REPLACE_PROTECTION_TOOLTIP                            :{BLACK}Klikni kako bi zaštitio ovu grupu od globalne automatske zamjene
 | 
			
		||||
 | 
			
		||||
STR_QUERY_GROUP_DELETE_CAPTION                                  :{WHITE}Izbriši grupu
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1861,7 +1861,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT                                :{WHITE}Muuda jo
 | 
			
		||||
STR_CHEAT_SETUP_PROD                                            :{LTBLUE}Tootmisväärtuste muutmine: {ORANGE}{STRING}
 | 
			
		||||
 | 
			
		||||
# Livery window
 | 
			
		||||
STR_LIVERY_CAPTION                                              :{WHITE}Uus värvivalik
 | 
			
		||||
STR_LIVERY_CAPTION                                              :{WHITE}{COMPANY} - Värvivalik
 | 
			
		||||
 | 
			
		||||
STR_LIVERY_GENERAL_TOOLTIP                                      :{BLACK}Näita üldiseid värvistikke
 | 
			
		||||
STR_LIVERY_TRAIN_TOOLTIP                                        :{BLACK}Näita rongide värvistikke
 | 
			
		||||
 
 | 
			
		||||
@@ -132,7 +132,7 @@ STR_QUANTITY_N_A                                                :-
 | 
			
		||||
STR_ABBREV_NOTHING                                              :
 | 
			
		||||
STR_ABBREV_PASSENGERS                                           :{TINY_FONT}MA
 | 
			
		||||
STR_ABBREV_COAL                                                 :{TINY_FONT}HL
 | 
			
		||||
STR_ABBREV_MAIL                                                 :{TINY_FONT}SP
 | 
			
		||||
STR_ABBREV_MAIL                                                 :{TINY_FONT}PO
 | 
			
		||||
STR_ABBREV_OIL                                                  :{TINY_FONT}ÖL
 | 
			
		||||
STR_ABBREV_LIVESTOCK                                            :{TINY_FONT}KA
 | 
			
		||||
STR_ABBREV_GOODS                                                :{TINY_FONT}TA
 | 
			
		||||
@@ -1816,7 +1816,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT                                :{WHITE}Muuta ny
 | 
			
		||||
STR_CHEAT_SETUP_PROD                                            :{LTBLUE}Salli tuotantomäärien muuttaminen: {ORANGE}{STRING}
 | 
			
		||||
 | 
			
		||||
# Livery window
 | 
			
		||||
STR_LIVERY_CAPTION                                              :{WHITE}Uusi väriteema
 | 
			
		||||
STR_LIVERY_CAPTION                                              :{WHITE}{COMPANY}: Väriteema
 | 
			
		||||
 | 
			
		||||
STR_LIVERY_GENERAL_TOOLTIP                                      :{BLACK}Näytä yleiset väriteemat
 | 
			
		||||
STR_LIVERY_TRAIN_TOOLTIP                                        :{BLACK}Näytä junan väriteemat
 | 
			
		||||
@@ -3832,7 +3832,7 @@ STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP                        :{BLACK}Miten ku
 | 
			
		||||
STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS                         :on yhtä kuin
 | 
			
		||||
STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS                     :ei ole yhtä kuin
 | 
			
		||||
STR_ORDER_CONDITIONAL_COMPARATOR_LESS_THAN                      :on pienempi kuin
 | 
			
		||||
STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS                    :on suurempi kuin
 | 
			
		||||
STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS                    :on pienempi tai yhtä kuin
 | 
			
		||||
STR_ORDER_CONDITIONAL_COMPARATOR_MORE_THAN                      :on enemmän kuin
 | 
			
		||||
STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS                    :on enemmän tai yhtä kuin
 | 
			
		||||
STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE                        :on tosi
 | 
			
		||||
 
 | 
			
		||||
@@ -190,6 +190,7 @@ STR_COLOUR_ORANGE                                               :Orange
 | 
			
		||||
STR_COLOUR_BROWN                                                :Braun
 | 
			
		||||
STR_COLOUR_GREY                                                 :Grau
 | 
			
		||||
STR_COLOUR_WHITE                                                :Weiß
 | 
			
		||||
STR_COLOUR_RANDOM                                               :Zufällig
 | 
			
		||||
STR_COLOUR_DEFAULT                                              :Standard
 | 
			
		||||
 | 
			
		||||
# Units used in OpenTTD
 | 
			
		||||
@@ -483,6 +484,7 @@ STR_ABOUT_MENU_SCREENSHOT                                       :Screenshot (Sta
 | 
			
		||||
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT                                :Screenshot in Nahaufnahme
 | 
			
		||||
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT                           :Screenshot mit normalem Zoom
 | 
			
		||||
STR_ABOUT_MENU_GIANT_SCREENSHOT                                 :Riesiger Screenshot (Standard: Strg+G)
 | 
			
		||||
STR_ABOUT_MENU_SHOW_FRAMERATE                                   :Bildwiederholrate anzeigen
 | 
			
		||||
STR_ABOUT_MENU_ABOUT_OPENTTD                                    :Über OpenTTD
 | 
			
		||||
STR_ABOUT_MENU_SPRITE_ALIGNER                                   :Sprite-Ausrichtung
 | 
			
		||||
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES                            :Hüllquader anzeigen/ausblenden
 | 
			
		||||
@@ -679,10 +681,12 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE                        :{BLACK}Zufälli
 | 
			
		||||
STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION                    :{BLACK}Zeige Musiktitelauswahl
 | 
			
		||||
 | 
			
		||||
# Playlist window
 | 
			
		||||
STR_PLAYLIST_MUSIC_SELECTION_SETNAME                            :{WHITE}Musikprogramm - '{STRING}'
 | 
			
		||||
STR_PLAYLIST_TRACK_NAME                                         :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}"
 | 
			
		||||
STR_PLAYLIST_TRACK_INDEX                                        :{TINY_FONT}{BLACK}Track Inhalt
 | 
			
		||||
STR_PLAYLIST_PROGRAM                                            :{TINY_FONT}{BLACK}Programm - '{STRING}'
 | 
			
		||||
STR_PLAYLIST_CLEAR                                              :{TINY_FONT}{BLACK}Bereinigen
 | 
			
		||||
STR_PLAYLIST_CHANGE_SET                                         :{BLACK}Set ändern
 | 
			
		||||
STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1              :{BLACK}Lösche laufendes Programm (nur für Benutzerdefiniert 1 und 2)
 | 
			
		||||
STR_PLAYLIST_TOOLTIP_CHANGE_SET                                 :{BLACK}Ein anderes Musik-Set auswählen)
 | 
			
		||||
STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK                         :{BLACK}Klicke auf einen Musiktitel, um ihn in das laufende Programm zu übernehmen (nur für Benutzerdefiniert 1 und 2)
 | 
			
		||||
@@ -822,6 +826,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE                                  :{BIG_FONT}{BLAC
 | 
			
		||||
STR_PRESIDENT_NAME_MANAGER                                      :{BLACK}{PRESIDENT_NAME}{}(Manager)
 | 
			
		||||
 | 
			
		||||
STR_NEWS_NEW_TOWN                                               :{BLACK}{BIG_FONT}{STRING} finanziert die Gründung der Stadt {TOWN}!
 | 
			
		||||
STR_NEWS_NEW_TOWN_UNSPONSORED                                   :{BLACK}{BIG_FONT}Eine neue Stadt mit dem Namen {TOWN} wurde errichtet!
 | 
			
		||||
 | 
			
		||||
STR_NEWS_INDUSTRY_CONSTRUCTION                                  :{BIG_FONT}{BLACK}Neue{G r "" s ""} {STRING} {G 0 wird wird wird werden} nahe {TOWN} gebaut!
 | 
			
		||||
STR_NEWS_INDUSTRY_PLANTED                                       :{BIG_FONT}{BLACK}Neue{G r "" s ""} {STRING} {G 0 wird wird wird werden} nahe {TOWN} angepflanzt!
 | 
			
		||||
@@ -889,9 +894,9 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION                           :{BIG_FONT}{BLAC
 | 
			
		||||
 | 
			
		||||
# Extra view window
 | 
			
		||||
STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Ansicht {COMMA}
 | 
			
		||||
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN                                :{BLACK}In Zusatzansicht kopieren
 | 
			
		||||
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN                                :{BLACK}Zusatzansicht ändern
 | 
			
		||||
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT                             :{BLACK}Aktuelle Position der Hauptansicht in diese Zusatzansicht kopieren
 | 
			
		||||
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW                                :{BLACK}Aus Zusatzansicht einfügen
 | 
			
		||||
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW                                :{BLACK}Hauptansicht ändern
 | 
			
		||||
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT                             :{BLACK}Hauptansicht zur Position dieser Zusatzansicht scrollen
 | 
			
		||||
 | 
			
		||||
# Game options window
 | 
			
		||||
@@ -921,7 +926,7 @@ STR_GAME_OPTIONS_CURRENCY_NLG                                   :Niederländisch
 | 
			
		||||
STR_GAME_OPTIONS_CURRENCY_NOK                                   :Norwegische Kronen (NOK)
 | 
			
		||||
STR_GAME_OPTIONS_CURRENCY_PLN                                   :Polnische Zloty (PLN)
 | 
			
		||||
STR_GAME_OPTIONS_CURRENCY_RON                                   :Rumänische Lei (RON)
 | 
			
		||||
STR_GAME_OPTIONS_CURRENCY_RUR                                   :Russische Rubel (RUR)
 | 
			
		||||
STR_GAME_OPTIONS_CURRENCY_RUR                                   :Alte Russische Rubel (RUR)
 | 
			
		||||
STR_GAME_OPTIONS_CURRENCY_SIT                                   :Slovenische Taler (SIT)
 | 
			
		||||
STR_GAME_OPTIONS_CURRENCY_SEK                                   :Schwedische Kronen (SEK)
 | 
			
		||||
STR_GAME_OPTIONS_CURRENCY_TRY                                   :Türkische Lire (TRY)
 | 
			
		||||
@@ -934,6 +939,8 @@ STR_GAME_OPTIONS_CURRENCY_ZAR                                   :Südafrikanisch
 | 
			
		||||
STR_GAME_OPTIONS_CURRENCY_CUSTOM                                :Eigene...
 | 
			
		||||
STR_GAME_OPTIONS_CURRENCY_GEL                                   :Georgischer Lari (GEL)
 | 
			
		||||
STR_GAME_OPTIONS_CURRENCY_IRR                                   :Iranischer Rial (IRR)
 | 
			
		||||
STR_GAME_OPTIONS_CURRENCY_RUB                                   :Russische Rubel (RUB)
 | 
			
		||||
STR_GAME_OPTIONS_CURRENCY_MXN                                   :Mexikanischer Peso (MXN)
 | 
			
		||||
############ end of currency region
 | 
			
		||||
 | 
			
		||||
STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME                            :{BLACK}Fahrzeuge
 | 
			
		||||
@@ -1233,7 +1240,7 @@ STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE                         :in der Mitte
 | 
			
		||||
STR_CONFIG_SETTING_STOP_LOCATION_FAR_END                        :am Ende
 | 
			
		||||
STR_CONFIG_SETTING_IMPROVED_BREAKDOWNS                          :aktiviere verbesserte Pannen: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_AUTOSCROLL                                   :Spielfeld scrollen, wenn die Maus am Bildrand anstößt: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT                          :Falls aktiv wird der Kartenausschnit scrollen, wenn die Maus nahe dem Fensterrand ist
 | 
			
		||||
STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT                          :Falls aktiv, wird der Kartenausschnitt scrollen, wenn die Maus nahe dem Fensterrand ist
 | 
			
		||||
STR_CONFIG_SETTING_AUTOSCROLL_DISABLED                          :Ausgeschaltet
 | 
			
		||||
STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN          :Hauptfenster, nur bei Vollbildschirm
 | 
			
		||||
STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT                     :Hauptfenster
 | 
			
		||||
@@ -1274,6 +1281,7 @@ STR_CONFIG_SETTING_CHUNNEL_HELPTEXT                             :Wenn aktiviert,
 | 
			
		||||
STR_CONFIG_SETTING_NO_TRAIN_CRASH_OTHER_COMPANY                 :Züge verschiedener Firmen stoßen nicht mehr zusammen: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_NO_TRAIN_CRASH_OTHER_COMPANY_HELPTEXT        :Diese Einstellung ist in erster Linie dafür da um zu verhindern, dass Spielern denen man nicht vertraut bewusst Zusammenstöße mit Zügen anderer Firmen in Multiplayer-Spielen mit Infrastructure Sharing provozieren.
 | 
			
		||||
 | 
			
		||||
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR                      :Firmenfarbe zu Spielbeginn: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT             :Wähle die Firmenfarbe zu Spielbeginn
 | 
			
		||||
 | 
			
		||||
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS                        :Flughäfen veralten nie: {STRING}
 | 
			
		||||
@@ -1371,6 +1379,12 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT                :Farbe von Landf
 | 
			
		||||
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN                   :Grün
 | 
			
		||||
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN              :Dunkelgrün
 | 
			
		||||
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET                  :Lila
 | 
			
		||||
STR_CONFIG_SETTING_SCROLLMODE                                   :Verhalten beim Verschieben der Zusatzansicht: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT                          :Verhalten beim Verschieben der Karte
 | 
			
		||||
STR_CONFIG_SETTING_SCROLLMODE_DEFAULT                           :Bewege Zusatzansicht mit rechter Maustaste, Mausposition fixiert
 | 
			
		||||
STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED                        :Bewege die Karte mit rechter Maustaste, Mausposition fixiert
 | 
			
		||||
STR_CONFIG_SETTING_SCROLLMODE_RMB                               :Bewege die Karte mit rechter Maustaste
 | 
			
		||||
STR_CONFIG_SETTING_SCROLLMODE_LMB                               :Bewege die Karte mit linker Maustaste
 | 
			
		||||
STR_CONFIG_SETTING_SMOOTH_SCROLLING                             :Weicher Bildlauf beim Springen zu einer Position: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT                    :Lege fest, auf welche Weise die Hauptansicht an eine bestimmte Position wechselt (z.B. wenn ein Punkt auf der Weltkarte angeklickt wird oder der Standort eines Bahnhofs angezeigt werden soll). Ist diese Option eingeschaltet, schwenkt die Ansicht über die Karte, bis sie am gewünschten Punkt angekommen ist. Ist sie ausgeschaltet, springt die Ansicht sofort an die gewünschte Position
 | 
			
		||||
STR_CONFIG_SETTING_MEASURE_TOOLTIP                              :Beim Bauen Tooltip mit Abmessungen anzeigen: {STRING}
 | 
			
		||||
@@ -1972,7 +1986,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT                                :{WHITE}Ändert
 | 
			
		||||
STR_CHEAT_SETUP_PROD                                            :{LTBLUE}Erlaube manuelles Ändern der Produktionsleistungen: {ORANGE}{STRING}
 | 
			
		||||
 | 
			
		||||
# Livery window
 | 
			
		||||
STR_LIVERY_CAPTION                                              :{WHITE}Neues Farbschema
 | 
			
		||||
STR_LIVERY_CAPTION                                              :{WHITE}{COMPANY} - Farbschema
 | 
			
		||||
 | 
			
		||||
STR_LIVERY_GENERAL_TOOLTIP                                      :{BLACK}Allgemeines Farbschema anzeigen
 | 
			
		||||
STR_LIVERY_TRAIN_TOOLTIP                                        :{BLACK}Zugfarbschema anzeigen
 | 
			
		||||
@@ -3143,20 +3157,51 @@ STR_ABOUT_COPYRIGHT_OPENTTD                                     :{BLACK}OpenTTD
 | 
			
		||||
 | 
			
		||||
# Framerate display window
 | 
			
		||||
STR_FRAMERATE_CAPTION                                           :{WHITE}Bildwiederholrate
 | 
			
		||||
STR_FRAMERATE_CAPTION_SMALL                                     :{STRING}{WHITE} ({DECIMAL}x)
 | 
			
		||||
STR_FRAMERATE_RATE_GAMELOOP                                     :{BLACK}Simulationsrate: {STRING}
 | 
			
		||||
STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP                             :{BLACK}Anzahl an simulierten Ticks pro Sekunde.
 | 
			
		||||
STR_FRAMERATE_RATE_BLITTER                                      :{BLACK}Bildwiederholrate: {STRING}
 | 
			
		||||
STR_FRAMERATE_RATE_BLITTER_TOOLTIP                              :{BLACK}Anzahl an Einzelbildern, die pro Sekunde gerendert werden.
 | 
			
		||||
STR_FRAMERATE_SPEED_FACTOR                                      :{BLACK}Aktueller Geschwindigkeitsfaktor des Spiels: {DECIMAL}x
 | 
			
		||||
STR_FRAMERATE_SPEED_FACTOR_TOOLTIP                              :{BLACK}Wie schnell das Spiel aktuell läuft, verglichen mit der erwarteten Geschwindigkeit bei normaler Simulationsrate.
 | 
			
		||||
STR_FRAMERATE_CURRENT                                           :{WHITE}Momentan
 | 
			
		||||
STR_FRAMERATE_AVERAGE                                           :{WHITE}Durchschnitt
 | 
			
		||||
STR_FRAMERATE_DATA_POINTS                                       :{BLACK}Daten basierend auf {COMMA} Messungen
 | 
			
		||||
STR_FRAMERATE_MS_GOOD                                           :{LTBLUE}{DECIMAL} ms
 | 
			
		||||
STR_FRAMERATE_MS_WARN                                           :{YELLOW}{DECIMAL} ms
 | 
			
		||||
STR_FRAMERATE_MS_BAD                                            :{RED}{DECIMAL} ms
 | 
			
		||||
STR_FRAMERATE_FPS_GOOD                                          :{LTBLUE}{DECIMAL} Bilder/s
 | 
			
		||||
STR_FRAMERATE_FPS_WARN                                          :{YELLOW}{DECIMAL} Bilder/s
 | 
			
		||||
STR_FRAMERATE_FPS_BAD                                           :{RED}{DECIMAL} Bilder/s
 | 
			
		||||
STR_FRAMERATE_GRAPH_MILLISECONDS                                :{TINY_FONT}{COMMA} ms
 | 
			
		||||
STR_FRAMERATE_GRAPH_SECONDS                                     :{TINY_FONT}{COMMA} s
 | 
			
		||||
############ Leave those lines in this order!!
 | 
			
		||||
STR_FRAMERATE_GL_SHIPS                                          :{BLACK}  Ticks (Schiffe):
 | 
			
		||||
STR_FRAMERATE_GL_AIRCRAFT                                       :{BLACK}  Ticks (Luftfahrzeuge)
 | 
			
		||||
STR_FRAMERATE_GAMELOOP                                          :{BLACK}Spielschleifen insgesamt:
 | 
			
		||||
STR_FRAMERATE_GL_ECONOMY                                        :{BLACK}Warenumschlag:
 | 
			
		||||
STR_FRAMERATE_GL_TRAINS                                         :{BLACK}Ticks (Züge):
 | 
			
		||||
STR_FRAMERATE_GL_ROADVEHS                                       :{BLACK}Ticks (Straßenfahrzeuge):
 | 
			
		||||
STR_FRAMERATE_GL_SHIPS                                          :{BLACK}Ticks (Schiffe):
 | 
			
		||||
STR_FRAMERATE_GL_AIRCRAFT                                       :{BLACK}Ticks (Luftfahrzeuge)
 | 
			
		||||
STR_FRAMERATE_GL_LANDSCAPE                                      :{BLACK}Welt-Ticks:
 | 
			
		||||
STR_FRAMERATE_GL_LINKGRAPH                                      :{BLACK}Intervall für Neuberechnung des Verteilungsgraphen:
 | 
			
		||||
STR_FRAMERATE_DRAWING                                           :{BLACK}Grafik-Rendering:
 | 
			
		||||
STR_FRAMERATE_DRAWING_VIEWPORTS                                 :{BLACK}Kartenansichten:
 | 
			
		||||
STR_FRAMERATE_VIDEO                                             :{BLACK}Videoausgabe:
 | 
			
		||||
STR_FRAMERATE_SOUND                                             :{BLACK}Sound-Abmischung:
 | 
			
		||||
############ End of leave-in-this-order
 | 
			
		||||
############ Leave those lines in this order!!
 | 
			
		||||
STR_FRAMETIME_CAPTION_GAMELOOP                                  :Spiel-Schleife
 | 
			
		||||
STR_FRAMETIME_CAPTION_GAMELOOP                                  :Spielschleife
 | 
			
		||||
STR_FRAMETIME_CAPTION_GL_ECONOMY                                :Warenumschlag
 | 
			
		||||
STR_FRAMETIME_CAPTION_GL_TRAINS                                 :Ticks (Züge)
 | 
			
		||||
STR_FRAMETIME_CAPTION_GL_ROADVEHS                               :Ticks (Straßenfahrzeuge)
 | 
			
		||||
STR_FRAMETIME_CAPTION_GL_SHIPS                                  :Ticks (Schiffe)
 | 
			
		||||
STR_FRAMETIME_CAPTION_GL_AIRCRAFT                               :Ticks (Luftfahrzeuge)
 | 
			
		||||
STR_FRAMETIME_CAPTION_GL_LANDSCAPE                              :Welt-Ticks
 | 
			
		||||
STR_FRAMETIME_CAPTION_GL_LINKGRAPH                              :Intervall für Neuberechnung des Verteilungsgraphen
 | 
			
		||||
STR_FRAMETIME_CAPTION_DRAWING                                   :Grafik-Rendering
 | 
			
		||||
STR_FRAMETIME_CAPTION_SOUND                                     :Sound mixing
 | 
			
		||||
STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS                         :Karten-Rendering
 | 
			
		||||
STR_FRAMETIME_CAPTION_VIDEO                                     :Videoausgabe
 | 
			
		||||
STR_FRAMETIME_CAPTION_SOUND                                     :Sound-Abmischung
 | 
			
		||||
############ End of leave-in-this-order
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -3182,6 +3227,9 @@ STR_SAVELOAD_DETAIL_CAPTION                                     :{BLACK}Spielsta
 | 
			
		||||
STR_SAVELOAD_DETAIL_NOT_AVAILABLE                               :{BLACK}Keine Informationen verfügbar
 | 
			
		||||
STR_SAVELOAD_DETAIL_COMPANY_INDEX                               :{SILVER}{COMMA}: {WHITE}{STRING}
 | 
			
		||||
STR_SAVELOAD_DETAIL_GRFSTATUS                                   :{SILVER}NewGRF: {WHITE}{STRING}
 | 
			
		||||
STR_SAVELOAD_FILTER_TITLE                                       :{BLACK}Suchtext:
 | 
			
		||||
STR_SAVELOAD_OVERWRITE_TITLE                                    :{WHITE}Datei überschreiben
 | 
			
		||||
STR_SAVELOAD_OVERWRITE_WARNING                                  :{YELLOW}Existierende Datei wirklich überschreiben?
 | 
			
		||||
 | 
			
		||||
STR_SAVELOAD_OSKTITLE                                           :{BLACK}Namen für den Spielstand eingeben
 | 
			
		||||
 | 
			
		||||
@@ -3300,8 +3348,12 @@ STR_NEWGRF_SETTINGS_VERSION                                     :{BLACK}Version:
 | 
			
		||||
STR_NEWGRF_SETTINGS_MIN_VERSION                                 :{BLACK}Min. kompatible Version: {SILVER}{NUM}
 | 
			
		||||
STR_NEWGRF_SETTINGS_MD5SUM                                      :{BLACK}MD5-Summe: {SILVER}{STRING}
 | 
			
		||||
STR_NEWGRF_SETTINGS_PALETTE                                     :{BLACK}Farbpalette: {SILVER}{STRING}
 | 
			
		||||
STR_NEWGRF_SETTINGS_PALETTE_DEFAULT                             :Standard (D)
 | 
			
		||||
STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP                       :Standard (D) / 32 bpp
 | 
			
		||||
STR_NEWGRF_SETTINGS_PALETTE_LEGACY                              :veraltet (W)
 | 
			
		||||
STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP                        :veraltet (W) / 32 bpp
 | 
			
		||||
STR_NEWGRF_SETTINGS_PARAMETER                                   :{BLACK}Parameter: {SILVER}{STRING}
 | 
			
		||||
STR_NEWGRF_SETTINGS_PARAMETER_NONE                              :Keine
 | 
			
		||||
 | 
			
		||||
STR_NEWGRF_SETTINGS_NO_INFO                                     :{BLACK}Keine Informationen verfügbar
 | 
			
		||||
STR_NEWGRF_SETTINGS_NOT_FOUND                                   :{RED}Zugehörige Datei nicht gefunden
 | 
			
		||||
@@ -3374,7 +3426,7 @@ STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE                          :der NewGRF-Date
 | 
			
		||||
STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED                        :Zu viele NewGRFs geladen
 | 
			
		||||
STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC                       :Das Laden von {1:STRING} als statisches NewGRF mit {STRING} könnte Synchronisationsfehler hervorrufen
 | 
			
		||||
STR_NEWGRF_ERROR_UNEXPECTED_SPRITE                              :Unerwartetes Sprite (Sprite {3:NUM})
 | 
			
		||||
STR_NEWGRF_ERROR_UNKNOWN_PROPERTY                               :Unbekannte Action 0 - Property {4:HEX} (Sprite {3:NUM})
 | 
			
		||||
STR_NEWGRF_ERROR_UNKNOWN_PROPERTY                               :Unbekannte Action 0 - Eigenschaft {4:HEX} (Sprite {3:NUM})
 | 
			
		||||
STR_NEWGRF_ERROR_INVALID_ID                                     :Zugriff auf eine ungültige ID (Sprite {3:NUM})
 | 
			
		||||
STR_NEWGRF_ERROR_CORRUPT_SPRITE                                 :{YELLOW}{STRING} enthält fehlerhafte Grafiken. Diese werden als Fragezeichen (?) dargestellt
 | 
			
		||||
STR_NEWGRF_ERROR_MULTIPLE_ACTION_8                              :Enthält mehrere Action 8 - Einträge (Sprite {3:NUM})
 | 
			
		||||
@@ -3382,6 +3434,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS                                    :Lesezugriff üb
 | 
			
		||||
STR_NEWGRF_ERROR_GRM_FAILED                                     :Die angeforderte GRF-Ressource ist nicht verfügbar (Sprite {3:NUM})
 | 
			
		||||
STR_NEWGRF_ERROR_FORCEFULLY_DISABLED                            :{1:STRING} wurde von {STRING} deaktiviert
 | 
			
		||||
STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT                          :Ungültiges oder unbekanntes Format für Spritelayout (Sprite {3:NUM})
 | 
			
		||||
STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG                         :Zu viele Elemente in Eigenschaftswert-Liste (Sprite {3:NUM}, Eigenschaft {4:HEX})
 | 
			
		||||
STR_NEWGRF_ERROR_INDPROD_CALLBACK                               :Ungültige Produktions-Rückruffunktion (Sprite {3:NUM}, "{1:STRING}")
 | 
			
		||||
 | 
			
		||||
# NewGRF related 'general' warnings
 | 
			
		||||
STR_NEWGRF_POPUP_CAUTION_CAPTION                                :{WHITE}Achtung!
 | 
			
		||||
@@ -3411,7 +3465,7 @@ STR_BROKEN_VEHICLE_LENGTH                                       :{WHITE}Zug '{VE
 | 
			
		||||
 | 
			
		||||
STR_NEWGRF_BUGGY                                                :{WHITE}NewGRF '{0:STRING}' liefert falsche Informationen
 | 
			
		||||
STR_NEWGRF_BUGGY_ARTICULATED_CARGO                              :{WHITE}Fracht / Ersetzungs - Informationen für '{1:ENGINE}' weichen von der Einkaufsliste nach dem Kauf ab. Das kann dazu führen, dass das Umrüsten beim autmatisches Ersetzen oder Erneuern nicht korrekt funktioniert
 | 
			
		||||
STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK                    :{WHITE}'{1:STRING}' verursachte eine Endlosschleife im 'Production callback'
 | 
			
		||||
STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK                    :{WHITE}'{1:STRING}' verursachte eine Endlosschleife in Produktions-Rückruffunktion
 | 
			
		||||
STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT                        :{WHITE}Callback {1:HEX} lieferte des unbekannte und ungülte Resultat {2:HEX}
 | 
			
		||||
 | 
			
		||||
STR_NEWGRF_TOO_MANY_STRINGS                                     :{WHITE}Nicht genügend String-IDs für alle NewGRFs vorhanden.
 | 
			
		||||
@@ -3420,7 +3474,7 @@ STR_NEWGRF_TOO_MANY_STRINGS_DETAIL                              :{WHITE}Einige N
 | 
			
		||||
# 'User removed essential NewGRFs'-placeholders for stuff without specs
 | 
			
		||||
STR_NEWGRF_INVALID_CARGO                                        :<ungültige Frachtart>
 | 
			
		||||
STR_NEWGRF_INVALID_CARGO_ABBREV                                 :??
 | 
			
		||||
STR_NEWGRF_INVALID_CARGO_QUANTITY                               :{COMMA} of <ungültige Frachtart>
 | 
			
		||||
STR_NEWGRF_INVALID_CARGO_QUANTITY                               :{COMMA} Einheiten <ungültige Frachtart>
 | 
			
		||||
STR_NEWGRF_INVALID_ENGINE                                       :<ungültiger Fahrzeugtyp>
 | 
			
		||||
STR_NEWGRF_INVALID_INDUSTRYTYPE                                 :<ungültige Industrie>
 | 
			
		||||
 | 
			
		||||
@@ -3457,6 +3511,7 @@ STR_TOWN_POPULATION                                             :{BLACK}Weltbev
 | 
			
		||||
STR_TOWN_VIEW_TOWN_CAPTION                                      :{WHITE}{TOWN}
 | 
			
		||||
STR_TOWN_VIEW_CITY_CAPTION                                      :{WHITE}{TOWN} (Großstadt)
 | 
			
		||||
STR_TOWN_VIEW_POPULATION_HOUSES                                 :{BLACK}Einwohner: {ORANGE}{COMMA}{BLACK}  Häuser: {ORANGE}{COMMA}
 | 
			
		||||
STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX                              :{BLACK}{CARGO_LIST} im letzten Monat: {ORANGE}{COMMA}{BLACK} Max.: {ORANGE}{COMMA}
 | 
			
		||||
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH                              :{BLACK}Für Stadtwachstum benötigte Fracht:
 | 
			
		||||
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL             :{ORANGE}{STRING}{RED} benötigt
 | 
			
		||||
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER              :{ORANGE}{STRING}{BLACK} im Winter benötigt
 | 
			
		||||
@@ -3863,6 +3918,7 @@ STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE                    :{YELLOW}Diese I
 | 
			
		||||
 | 
			
		||||
STR_INDUSTRY_VIEW_REQUIRES_N_CARGO                              :{BLACK}Benötigt: {YELLOW}{STRING}{STRING}
 | 
			
		||||
STR_INDUSTRY_VIEW_PRODUCES_N_CARGO                              :{BLACK}Produziert: {YELLOW}{STRING}{STRING}
 | 
			
		||||
STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION                          :, {STRING}{STRING}
 | 
			
		||||
 | 
			
		||||
STR_INDUSTRY_VIEW_TRANSPORTED_TOOLTIP                           :{BLACK}{STRING}{STRING}
 | 
			
		||||
STR_INDUSTRY_VIEW_TRANSPORTED_TOOLTIP_EXTENSION                 :{}{BLACK}{CARGO_LONG} ({COMMA}%)
 | 
			
		||||
@@ -3935,6 +3991,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP                           :{BLACK}Gruppen
 | 
			
		||||
STR_GROUP_CREATE_TOOLTIP                                        :{BLACK}Neue Gruppe erstellen
 | 
			
		||||
STR_GROUP_DELETE_TOOLTIP                                        :{BLACK}Ausgewählte Gruppe löschen
 | 
			
		||||
STR_GROUP_RENAME_TOOLTIP                                        :{BLACK}Ausgewählte Gruppe umbenennen
 | 
			
		||||
STR_GROUP_LIVERY_TOOLTIP                                        :{BLACK}Farbschema der ausgewählten Gruppe ändern
 | 
			
		||||
STR_GROUP_COLLAPSE                                              :{BLACK}Einklappen
 | 
			
		||||
STR_GROUP_EXPAND                                                :{BLACK}Ausklappen
 | 
			
		||||
STR_GROUP_EXPAND_ALL                                            :{BLACK}Alles ausklappen
 | 
			
		||||
@@ -3984,6 +4041,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY                             :{BLACK}Kapazit
 | 
			
		||||
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT                          :{BLACK}Angetriebene Waggons: {GOLD}+{POWER}{BLACK} Gewicht: {GOLD}+{WEIGHT_SHORT}
 | 
			
		||||
STR_PURCHASE_INFO_REFITTABLE_TO                                 :{BLACK}Umrüstbar auf: {GOLD}{STRING}
 | 
			
		||||
STR_PURCHASE_INFO_ALL_TYPES                                     :Alle Frachtarten
 | 
			
		||||
STR_PURCHASE_INFO_NONE                                          :Keine
 | 
			
		||||
STR_PURCHASE_INFO_ALL_BUT                                       :Alles außer {CARGO_LIST}
 | 
			
		||||
STR_PURCHASE_INFO_MAX_TE                                        :{BLACK}Max. Zugkraft: {GOLD}{FORCE}
 | 
			
		||||
STR_PURCHASE_INFO_AIRCRAFT_RANGE                                :{BLACK}Reichweite: {GOLD}{COMMA} Felder
 | 
			
		||||
@@ -4418,6 +4476,7 @@ STR_ORDER_CONDITIONAL_AGE                                       :Fahrzeugalter (
 | 
			
		||||
STR_ORDER_CONDITIONAL_REQUIRES_SERVICE                          :Wartung erforderlich
 | 
			
		||||
STR_ORDER_CONDITIONAL_UNCONDITIONALLY                           :Immer
 | 
			
		||||
STR_ORDER_CONDITIONAL_REMAINING_LIFETIME                        :Verbleibende Laufzeit (Jahre)
 | 
			
		||||
STR_ORDER_CONDITIONAL_MAX_RELIABILITY                           :Maximale Zuverlässigkeit
 | 
			
		||||
STR_ORDER_CONDITIONAL_CARGO_WAITING                             :Wartende Fracht
 | 
			
		||||
STR_ORDER_CONDITIONAL_ACCEPTANCE_DROPDOWN                       :Akzeptierte Fracht
 | 
			
		||||
STR_ORDER_CONDITIONAL_FREE_PLATFORMS                            :Freie Bahnsteige
 | 
			
		||||
@@ -4954,6 +5013,7 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD                            :{WHITE}... dies
 | 
			
		||||
STR_ERROR_DRIVE_THROUGH_DIRECTION                               :{WHITE}... Straße verläuft in die falsche Richtung
 | 
			
		||||
STR_ERROR_DRIVE_THROUGH_CORNER                                  :{WHITE}... Bus- und Lkw-Haltestellen können nicht um die Kurve gehen
 | 
			
		||||
STR_ERROR_DRIVE_THROUGH_JUNCTION                                :{WHITE}... Bus- und Lkw-Haltestellen können keine Abzweigung haben
 | 
			
		||||
STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD                          :{WHITE}...Einbahnstraße oder blockierter Weg
 | 
			
		||||
 | 
			
		||||
# Station destruction related errors
 | 
			
		||||
STR_ERROR_CAN_T_REMOVE_PART_OF_STATION                          :{WHITE}Dieser Teil der Station kann nicht entfernt werden...
 | 
			
		||||
 
 | 
			
		||||
@@ -190,6 +190,7 @@ STR_COLOUR_BROWN                                                :갈색
 | 
			
		||||
STR_COLOUR_GREY                                                 :회색
 | 
			
		||||
STR_COLOUR_WHITE                                                :흰색
 | 
			
		||||
STR_COLOUR_RANDOM                                               :무작위
 | 
			
		||||
STR_COLOUR_DEFAULT                                              :기본
 | 
			
		||||
 | 
			
		||||
# Units used in OpenTTD
 | 
			
		||||
STR_UNITS_VELOCITY_IMPERIAL                                     :{COMMA}{NBSP}mph
 | 
			
		||||
@@ -3297,6 +3298,8 @@ STR_SAVELOAD_DETAIL_NOT_AVAILABLE                               :{BLACK}사용 
 | 
			
		||||
STR_SAVELOAD_DETAIL_COMPANY_INDEX                               :{SILVER}{COMMA}: {WHITE}{STRING}
 | 
			
		||||
STR_SAVELOAD_DETAIL_GRFSTATUS                                   :{SILVER}NewGRF: {WHITE}{STRING}
 | 
			
		||||
STR_SAVELOAD_FILTER_TITLE                                       :{BLACK}검색할 문자열:
 | 
			
		||||
STR_SAVELOAD_OVERWRITE_TITLE                                    :{WHITE}파일 덮어쓰기
 | 
			
		||||
STR_SAVELOAD_OVERWRITE_WARNING                                  :{YELLOW}정말로 이미 존재하는 파일에 덮어씌우시겠습니까?
 | 
			
		||||
 | 
			
		||||
STR_SAVELOAD_OSKTITLE                                           :{BLACK}게임을 저장할 파일명을 입력하세요
 | 
			
		||||
 | 
			
		||||
@@ -4087,6 +4090,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP                           :{BLACK}그룹 -
 | 
			
		||||
STR_GROUP_CREATE_TOOLTIP                                        :{BLACK}그룹 만들기
 | 
			
		||||
STR_GROUP_DELETE_TOOLTIP                                        :{BLACK}선택한 그룹 삭제
 | 
			
		||||
STR_GROUP_RENAME_TOOLTIP                                        :{BLACK}선택한 그룹 이름 바꾸기
 | 
			
		||||
STR_GROUP_LIVERY_TOOLTIP                                        :{BLACK}선택한 그룹의 차량 색상을 변경합니다.
 | 
			
		||||
STR_GROUP_COLLAPSE                                              :{BLACK}접기
 | 
			
		||||
STR_GROUP_EXPAND                                                :{BLACK}펼치기
 | 
			
		||||
STR_GROUP_EXPAND_ALL                                            :{BLACK}모두 펼치기
 | 
			
		||||
 
 | 
			
		||||
@@ -140,7 +140,7 @@ STR_ABBREV_GOODS                                                :{TINY_FONT}BN
 | 
			
		||||
STR_ABBREV_GRAIN                                                :{TINY_FONT}CR
 | 
			
		||||
STR_ABBREV_WOOD                                                 :{TINY_FONT}MD
 | 
			
		||||
STR_ABBREV_IRON_ORE                                             :{TINY_FONT}FR
 | 
			
		||||
STR_ABBREV_STEEL                                                :{TINY_FONT}AÇ
 | 
			
		||||
STR_ABBREV_STEEL                                                :{TINY_FONT}AC
 | 
			
		||||
STR_ABBREV_VALUABLES                                            :{TINY_FONT}VL
 | 
			
		||||
STR_ABBREV_COPPER_ORE                                           :{TINY_FONT}CO
 | 
			
		||||
STR_ABBREV_MAIZE                                                :{TINY_FONT}ML
 | 
			
		||||
@@ -263,7 +263,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP_TOOLTIP                    :{BLACK}Ao activ
 | 
			
		||||
STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP                :{BLACK}Ao activar este botão, os aviões ocultos também serão exibidos
 | 
			
		||||
 | 
			
		||||
# Query window
 | 
			
		||||
STR_BUTTON_DEFAULT                                              :{BLACK}Por Omissão
 | 
			
		||||
STR_BUTTON_DEFAULT                                              :{BLACK}Padrão
 | 
			
		||||
STR_BUTTON_CANCEL                                               :{BLACK}Cancelar
 | 
			
		||||
STR_BUTTON_OK                                                   :{BLACK}Confirmar
 | 
			
		||||
 | 
			
		||||
@@ -479,7 +479,7 @@ STR_ABOUT_MENU_ZOOMIN_SCREENSHOT                                :Captura com res
 | 
			
		||||
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT                           :Captura com resolução normal
 | 
			
		||||
STR_ABOUT_MENU_GIANT_SCREENSHOT                                 :Captura de mapa
 | 
			
		||||
STR_ABOUT_MENU_SHOW_FRAMERATE                                   :Mostrar taxa de fotograma
 | 
			
		||||
STR_ABOUT_MENU_ABOUT_OPENTTD                                    :Sobre o OpenTTD...
 | 
			
		||||
STR_ABOUT_MENU_ABOUT_OPENTTD                                    :Sobre o 'OpenTTD'
 | 
			
		||||
STR_ABOUT_MENU_SPRITE_ALIGNER                                   :Alinhador de gráficos
 | 
			
		||||
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES                            :Alternar as caixas envolventes
 | 
			
		||||
STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS                              :Ligar/Desligar coloração de blocos sujos
 | 
			
		||||
@@ -606,7 +606,7 @@ STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_DIRECTOR                   :Director
 | 
			
		||||
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHIEF_EXECUTIVE            :Chefe Executivo
 | 
			
		||||
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN                   :Director Executivo
 | 
			
		||||
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT                  :Presidente
 | 
			
		||||
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON                     :Magnate
 | 
			
		||||
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON                     :Magnata
 | 
			
		||||
 | 
			
		||||
# Performance detail window
 | 
			
		||||
STR_PERFORMANCE_DETAIL                                          :{WHITE}Detalhes de rendimentos
 | 
			
		||||
@@ -1173,11 +1173,11 @@ STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT                       :Escolha quanto
 | 
			
		||||
STR_CONFIG_SETTING_MAX_HEIGHTLEVEL                              :Altura máxima do mapa: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT                     :Define altura máxima permitida para montanhas no mapa
 | 
			
		||||
STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN                            :{WHITE}Pode aumentar a altura máxima do mapa para este valor. Pelo menos uma montanha no mapa é mais alta
 | 
			
		||||
STR_CONFIG_SETTING_AUTOSLOPE                                    :Permitir formação de terra sob os edifícios, vias, etc. (auto-declive): {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT                           :Permitir formação de terras debaixo de edifícios e linhas sem os remover
 | 
			
		||||
STR_CONFIG_SETTING_AUTOSLOPE                                    :Permite alteração de terra sob edifícios, vias, etc. (auto-declive): {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT                           :Permite alteração de terra sob edifícios e vias sem os remover
 | 
			
		||||
STR_CONFIG_SETTING_CATCHMENT                                    :Dimensionamento mais realista de áreas de abrangência: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_CATCHMENT_HELPTEXT                           :Haver diferentes áreas de cobertura para diferentes tipos de estações e aeroportos
 | 
			
		||||
STR_CONFIG_SETTING_EXTRADYNAMITE                                :Permitir remover mais mais estradas, pontes e túneis detidos pela cidade: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_EXTRADYNAMITE                                :Permite remover mais estradas, pontes e túneis detidos pela cidade: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT                       :Facilitar a remoçar de edifícios e infraestruturas detidas pela cidade
 | 
			
		||||
STR_CONFIG_SETTING_TRAIN_LENGTH                                 :Tamanho máximo de comboios: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT                        :Assignar o tamanho máximo dos comboios
 | 
			
		||||
@@ -1196,7 +1196,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT        :Declive de um q
 | 
			
		||||
STR_CONFIG_SETTING_FORBID_90_DEG                                :Proibir comboios e barcos fazer curvas de 90º: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT                       :Curvas de 90 graus ocorrem quando uma pista horizontal é directamente seguida por outra vertical num quadrado adjacente, fazendo com que o combóio vire 90 graus quando atravessa a fronteira dos quadrados, ao invés dos habituais 45 graus para outras combinações de pistas. Também se aplica ao raio de curvatura dos navios
 | 
			
		||||
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS                        :Permitir juntar estações não adjacentes: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT               :Permitir adicionar novas partes a uma estação sem tocar nas partes já existentes. Requer pressionar CTRL+click para adicionar as novas partes
 | 
			
		||||
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT               :Permite adicionar novas partes a uma estação sem tocar nas partes já existentes. Requer pressionar CTRL+click para adicionar as novas partes
 | 
			
		||||
STR_CONFIG_SETTING_INFLATION                                    :Inflação: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_INFLATION_HELPTEXT                           :Ativar inflação na economia, para que os preços subam ligeiramente mais rápido do que os pagamentos
 | 
			
		||||
STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH                            :Tamanho máximo de ponte: {STRING}
 | 
			
		||||
@@ -1234,16 +1234,16 @@ STR_CONFIG_SETTING_AUTOSCROLL_DISABLED                          :Desligado
 | 
			
		||||
STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN          :Visualizador principal, só ecrã cheio
 | 
			
		||||
STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT                     :Visualizador principal
 | 
			
		||||
STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT                    :Todos os visualizadores
 | 
			
		||||
STR_CONFIG_SETTING_BRIBE                                        :Permitir o suborno da autoridade local: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_BRIBE_HELPTEXT                               :Permitir que as companhias subornem as autoridades locais. Se o suborno for descoberto por um inspector, a companhia não poderá construir nessa localidade durante seis meses
 | 
			
		||||
STR_CONFIG_SETTING_ALLOW_EXCLUSIVE                              :Permitir comprar exclusivo dos direitos de transportes: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_BRIBE                                        :Permite o suborno da autoridade local: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_BRIBE_HELPTEXT                               :Permite que as companhias tentem subornar a autoridade local. Se o suborno for descoberto por um inspector, a companhia não poderá construir nessa localidade durante seis meses
 | 
			
		||||
STR_CONFIG_SETTING_ALLOW_EXCLUSIVE                              :Permite comprar direitos de transporte em exclusividade: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT                     :Se uma empresa compra direitos exclusivos de transporte para uma cidade, as estações dos concorrentes (passageiros e carga) não receberão cargo durante um ano
 | 
			
		||||
STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS                         :Permitir investir em edificios: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT                :Permitir que empresas doem dinheiro às cidades para financiar creação de novas casas
 | 
			
		||||
STR_CONFIG_SETTING_ALLOW_FUND_ROAD                              :Permitir o financiamento de reconstrução de estradas locais:{STRING}
 | 
			
		||||
STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT                     :Permitir que as companhias financiem reparações de estradas para sabotar serviços rodoviários dos oponentes.
 | 
			
		||||
STR_CONFIG_SETTING_ALLOW_GIVE_MONEY                             :Permitir enviar dinheiro para outras empresas: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT                    :Permitir transferencias de dinheiro entre empresas em modo multi-jogador
 | 
			
		||||
STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS                         :Permite investir em edifícios: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT                :Permite que empresas doem dinheiro às cidades para financiar novas casas
 | 
			
		||||
STR_CONFIG_SETTING_ALLOW_FUND_ROAD                              :Permite financiar a reconstrução de estradas locais:{STRING}
 | 
			
		||||
STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT                     :Permite que as companhias financiem reparações de estrada para sabotar serviços rodoviários dos oponentes.
 | 
			
		||||
STR_CONFIG_SETTING_ALLOW_GIVE_MONEY                             :Permite enviar dinheiro para outras empresas: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT                    :Permite transferências de dinheiro entre empresas em modo multi-jogador
 | 
			
		||||
STR_CONFIG_SETTING_FREIGHT_TRAINS                               :Multiplicador de peso para simular comboios pesados: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT                      :Define o impacto de carregar mercadoria nos combóios. Um valor superior torna o carregamento de meradoria mais exigente para os combóios, especialmente em terreno inclinado
 | 
			
		||||
STR_CONFIG_SETTING_PLANE_SPEED                                  :Fator de velocidade de avião: {STRING}
 | 
			
		||||
@@ -1254,9 +1254,9 @@ STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT                       :Indicar a hipó
 | 
			
		||||
STR_CONFIG_SETTING_PLANE_CRASHES_NONE                           :Nenhum
 | 
			
		||||
STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED                        :Reduzido
 | 
			
		||||
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL                         :Normal
 | 
			
		||||
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD                            :Permitir estações de passagem em estradas das cidades: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD                            :Permite estações de passagem em estradas das cidades: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT                   :Permite construção de paragens drive-through em ruas que são prorpiedade das povoações
 | 
			
		||||
STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD                      :Permitir estações de passagem em estradas do adversário: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD                      :Permite estações de passagem em estradas do adversário: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT             :Permite construção de paragens drive-through em ruas que são prorpiedade de outras companhias
 | 
			
		||||
STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES            :{WHITE}Não é possível mudar quando já existem veículos.
 | 
			
		||||
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE                   :Manutenção de infraestruturas: {STRING}
 | 
			
		||||
@@ -1283,8 +1283,8 @@ STR_CONFIG_SETTING_AUTORENEW_VEHICLE                            :Auto-renovaçã
 | 
			
		||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT                   :Quando activo, um veículo a chegar ao fim de vida é automaticamente substituído quando as condições de renovação estão reunidas
 | 
			
		||||
STR_CONFIG_SETTING_AUTORENEW_MONTHS                             :Renovar automaticamente quando um veículo chega a {STRING} de idade
 | 
			
		||||
STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT                    :Idade relativa a partir da qual um veículo deva ser indicado para auto-renovação
 | 
			
		||||
STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE                :{COMMA} mês{P 0 "" es} antes
 | 
			
		||||
STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER                 :{COMMA} mês{P 0 "" es} após
 | 
			
		||||
STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE                :{COMMA} {P "mês" "meses"} antes
 | 
			
		||||
STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER                 :{COMMA} {P "mês" "meses"} após
 | 
			
		||||
STR_CONFIG_SETTING_AUTORENEW_MONEY                              :Dinheiro mínimo para fazer auto-renovação: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT                     :Quantidade mínima de dinheiro que tem que estar no banco para auto-renovação de veículos ser considerada
 | 
			
		||||
STR_CONFIG_SETTING_ERRMSG_DURATION                              :Duração da mensagem de erro: {STRING}
 | 
			
		||||
@@ -1465,13 +1465,13 @@ STR_CONFIG_SETTING_AI_BUILDS_SHIPS                              :Desactivar barc
 | 
			
		||||
STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT                     :Activar esta preferência impossibilita a construção de navios por um jogador controlado pelo computador
 | 
			
		||||
 | 
			
		||||
STR_CONFIG_SETTING_AI_PROFILE                                   :Perfil de preferências por omissão: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT                          :Escolher o perfil de preferências a usar para AIs aleatórias ou para valores iniciais ao adicionar uma nova AI ou Game Script
 | 
			
		||||
STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT                          :Escolher o perfil de preferências a usar para AIs aleatórias ou para valores iniciais ao adicionar uma nova AI ou Script de Jogo
 | 
			
		||||
STR_CONFIG_SETTING_AI_PROFILE_EASY                              :Fácil
 | 
			
		||||
STR_CONFIG_SETTING_AI_PROFILE_MEDIUM                            :Média
 | 
			
		||||
STR_CONFIG_SETTING_AI_PROFILE_HARD                              :Difícil
 | 
			
		||||
 | 
			
		||||
STR_CONFIG_SETTING_AI_IN_MULTIPLAYER                            :Permitir IAs em multi-jogador: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT                   :Permitir a jogadores controlados pelo computador a participação em jogos multijogador
 | 
			
		||||
STR_CONFIG_SETTING_AI_IN_MULTIPLAYER                            :Permite IAs em multi-jogador: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT                   :Permite a jogadores controlados pelo computador a participação em jogos multi-jogador
 | 
			
		||||
STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES                           :#opcodes antes de os scripts serem suspensos: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT                  :Número máximo de passos computacionais que um script pode executar num turno
 | 
			
		||||
 | 
			
		||||
@@ -1566,7 +1566,7 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID                         :grelha 2x2
 | 
			
		||||
STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID                         :grelha 3x3
 | 
			
		||||
STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM                           :Aleatório
 | 
			
		||||
STR_CONFIG_SETTING_ALLOW_TOWN_ROADS                             :As cidades têm permissão para construir estradas: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT                    :Permitir às cidades a construção de estradas para crescimento. Desactivar para não permitir às autoridades a construção de estradas
 | 
			
		||||
STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT                    :Permite às cidades a construção de estradas para crescimento. Desactivar para não permitir às autoridades a construção de estradas
 | 
			
		||||
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS                   :Cidades podem construir passagens de nível: {STRING}
 | 
			
		||||
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT          :Activar esta preferência permite às cidades construir cruzamentos nivelados
 | 
			
		||||
STR_CONFIG_SETTING_NOISE_LEVEL                                  :Permitir que a cidade controle o nível de ruído dos aeroportos: {STRING}
 | 
			
		||||
@@ -1701,7 +1701,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_TOWNS                            :{ORANGE}Cidades
 | 
			
		||||
STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES                       :{ORANGE}Industrias
 | 
			
		||||
STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST                        :{ORANGE}Distribuição de Carga
 | 
			
		||||
STR_CONFIG_SETTING_AI                                           :{ORANGE}Oponentes
 | 
			
		||||
STR_CONFIG_SETTING_AI_NPC                                       :{ORANGE}Jogadores computador
 | 
			
		||||
STR_CONFIG_SETTING_AI_NPC                                       :{ORANGE}Jogadores Computador
 | 
			
		||||
 | 
			
		||||
STR_CONFIG_SETTING_PATHFINDER_OPF                               :Original
 | 
			
		||||
STR_CONFIG_SETTING_PATHFINDER_NPF                               :NPF
 | 
			
		||||
@@ -1805,7 +1805,7 @@ STR_ABANDON_SCENARIO_QUERY                                      :{YELLOW}Tem a c
 | 
			
		||||
# Cheat window
 | 
			
		||||
STR_CHEATS                                                      :{WHITE}Truques
 | 
			
		||||
STR_CHEATS_TOOLTIP                                              :{BLACK}As caixas de verificação indicam se já usou este truque antes
 | 
			
		||||
STR_CHEATS_WARNING                                              :{BLACK} Atenção! Está prestes a trair seus concorrentes. Tenha em mente que a desonra vai ser lembrada para a eternidade
 | 
			
		||||
STR_CHEATS_WARNING                                              :{BLACK} Atenção! Está prestes a trair seus concorrentes. Tenha em mente que a desonra será lembrada para a eternidade
 | 
			
		||||
STR_CHEAT_MONEY                                                 :{LTBLUE}Aumentar dinheiro em {CURRENCY_LONG}
 | 
			
		||||
STR_CHEAT_CHANGE_COMPANY                                        :{LTBLUE}Jogando como empresa: {ORANGE}{COMMA}
 | 
			
		||||
STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Bulldozer mágico (destrói indústrias, objectos amovíveis etc.): {ORANGE}{STRING}
 | 
			
		||||
@@ -2392,10 +2392,10 @@ STR_SELECT_BRIDGE_SELECTION_TOOLTIP                             :{BLACK}Selecç
 | 
			
		||||
STR_SELECT_BRIDGE_INFO                                          :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
 | 
			
		||||
STR_SELECT_BRIDGE_SCENEDIT_INFO                                 :{GOLD}{STRING},{} {VELOCITY}
 | 
			
		||||
STR_BRIDGE_NAME_SUSPENSION_STEEL                                :Suspensa, Aço
 | 
			
		||||
STR_BRIDGE_NAME_GIRDER_STEEL                                    :Vigas, Aço
 | 
			
		||||
STR_BRIDGE_NAME_CANTILEVER_STEEL                                :Cantilever, Aço
 | 
			
		||||
STR_BRIDGE_NAME_GIRDER_STEEL                                    :Viga, Aço
 | 
			
		||||
STR_BRIDGE_NAME_CANTILEVER_STEEL                                :Consola, Aço
 | 
			
		||||
STR_BRIDGE_NAME_SUSPENSION_CONCRETE                             :Suspensa, Betão
 | 
			
		||||
STR_BRIDGE_NAME_WOODEN                                          :De madeira
 | 
			
		||||
STR_BRIDGE_NAME_WOODEN                                          :Madeira
 | 
			
		||||
STR_BRIDGE_NAME_CONCRETE                                        :Betão
 | 
			
		||||
STR_BRIDGE_NAME_TUBULAR_STEEL                                   :Tubular, Aço
 | 
			
		||||
STR_BRIDGE_TUBULAR_SILICON                                      :Tubular, Silício
 | 
			
		||||
@@ -2474,8 +2474,8 @@ STR_AIRPORT_INTERNATIONAL                                       :Internacional
 | 
			
		||||
STR_AIRPORT_COMMUTER                                            :Transbordo
 | 
			
		||||
STR_AIRPORT_INTERCONTINENTAL                                    :Intercontinental
 | 
			
		||||
STR_AIRPORT_HELIPORT                                            :Heliporto
 | 
			
		||||
STR_AIRPORT_HELIDEPOT                                           :Heli-depósito
 | 
			
		||||
STR_AIRPORT_HELISTATION                                         :Heli-estação
 | 
			
		||||
STR_AIRPORT_HELIDEPOT                                           :Heli Hangar
 | 
			
		||||
STR_AIRPORT_HELISTATION                                         :Heliponto
 | 
			
		||||
 | 
			
		||||
STR_AIRPORT_CLASS_SMALL                                         :Aeroportos pequenos
 | 
			
		||||
STR_AIRPORT_CLASS_LARGE                                         :Aeroportos grandes
 | 
			
		||||
@@ -2677,17 +2677,17 @@ STR_LAI_TUNNEL_DESCRIPTION_RAILROAD                             :Túnel ferrovi
 | 
			
		||||
STR_LAI_TUNNEL_DESCRIPTION_ROAD                                 :Túnel rodoviário
 | 
			
		||||
 | 
			
		||||
STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_STEEL                :Ponte ferroviária suspensa em aço
 | 
			
		||||
STR_LAI_BRIDGE_DESCRIPTION_RAIL_GIRDER_STEEL                    :Ponte ferroviária com vigas em aço
 | 
			
		||||
STR_LAI_BRIDGE_DESCRIPTION_RAIL_CANTILEVER_STEEL                :Ponte ferroviária cantilever em aço
 | 
			
		||||
STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_CONCRETE             :Ponte ferroviária suspensa de betão reforçado
 | 
			
		||||
STR_LAI_BRIDGE_DESCRIPTION_RAIL_GIRDER_STEEL                    :Ponte ferroviária em vigas de aço
 | 
			
		||||
STR_LAI_BRIDGE_DESCRIPTION_RAIL_CANTILEVER_STEEL                :Ponte ferroviária em consolas de aço
 | 
			
		||||
STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_CONCRETE             :Ponte ferroviária suspensa de betão armado
 | 
			
		||||
STR_LAI_BRIDGE_DESCRIPTION_RAIL_WOODEN                          :Ponte ferroviária de madeira
 | 
			
		||||
STR_LAI_BRIDGE_DESCRIPTION_RAIL_CONCRETE                        :Ponte ferroviária de betão
 | 
			
		||||
STR_LAI_BRIDGE_DESCRIPTION_RAIL_TUBULAR_STEEL                   :Ponte rodoviária tubular
 | 
			
		||||
 | 
			
		||||
STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_STEEL                :Ponte rodoviária suspensa em aço
 | 
			
		||||
STR_LAI_BRIDGE_DESCRIPTION_ROAD_GIRDER_STEEL                    :Ponte rodoviária com vigas em aço
 | 
			
		||||
STR_LAI_BRIDGE_DESCRIPTION_ROAD_CANTILEVER_STEEL                :Ponte rodoviária cantilever em aço
 | 
			
		||||
STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_CONCRETE             :Ponte rodoviária suspensa de betão reforçado
 | 
			
		||||
STR_LAI_BRIDGE_DESCRIPTION_ROAD_CANTILEVER_STEEL                :Ponte rodoviária em consolas de aço
 | 
			
		||||
STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_CONCRETE             :Ponte rodoviária suspensa de betão armado
 | 
			
		||||
STR_LAI_BRIDGE_DESCRIPTION_ROAD_WOODEN                          :Ponte rodoviária de madeira
 | 
			
		||||
STR_LAI_BRIDGE_DESCRIPTION_ROAD_CONCRETE                        :Ponte rodoviária de betão
 | 
			
		||||
STR_LAI_BRIDGE_DESCRIPTION_ROAD_TUBULAR_STEEL                   :Ponte rodoviária tubular
 | 
			
		||||
@@ -2700,7 +2700,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS                 :Sede de empresa
 | 
			
		||||
STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND                   :Terreno propriedade de uma empresa
 | 
			
		||||
 | 
			
		||||
# About OpenTTD window
 | 
			
		||||
STR_ABOUT_OPENTTD                                               :{WHITE}Sobre o OpenTTD...
 | 
			
		||||
STR_ABOUT_OPENTTD                                               :{WHITE}Sobre o OpenTTD
 | 
			
		||||
STR_ABOUT_ORIGINAL_COPYRIGHT                                    :{BLACK}Direitos de autor originais {COPYRIGHT} 1995 Chris Sawyer, Todos os direitos reservados
 | 
			
		||||
STR_ABOUT_VERSION                                               :{BLACK}OpenTTD versão {REV}
 | 
			
		||||
STR_ABOUT_COPYRIGHT_OPENTTD                                     :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 A equipa do OpenTTD
 | 
			
		||||
@@ -2778,6 +2778,8 @@ STR_SAVELOAD_DETAIL_NOT_AVAILABLE                               :{BLACK}Nenhuma
 | 
			
		||||
STR_SAVELOAD_DETAIL_COMPANY_INDEX                               :{SILVER}{COMMA}: {WHITE}{STRING}
 | 
			
		||||
STR_SAVELOAD_DETAIL_GRFSTATUS                                   :{SILVER}NewGRF: {WHITE}{STRING}
 | 
			
		||||
STR_SAVELOAD_FILTER_TITLE                                       :{BLACK}Filtro de sequência:
 | 
			
		||||
STR_SAVELOAD_OVERWRITE_TITLE                                    :{WHITE}Substituir Ficheiro
 | 
			
		||||
STR_SAVELOAD_OVERWRITE_WARNING                                  :{YELLOW}Tem a certeza que deseja substituir o ficheiro existente?
 | 
			
		||||
 | 
			
		||||
STR_SAVELOAD_OSKTITLE                                           :{BLACK}Introduza um nome para o jogo gravado
 | 
			
		||||
 | 
			
		||||
@@ -3295,10 +3297,10 @@ STR_COMPANY_VIEW_VEHICLES_NONE                                  :{WHITE}Nenhum
 | 
			
		||||
STR_COMPANY_VIEW_COMPANY_VALUE                                  :{GOLD}Valor da empresa: {WHITE}{CURRENCY_LONG}
 | 
			
		||||
STR_COMPANY_VIEW_SHARES_OWNED_BY                                :{WHITE}({COMMA}% propriedade de {COMPANY})
 | 
			
		||||
STR_COMPANY_VIEW_INFRASTRUCTURE                                 :{GOLD}Infraestrutura:
 | 
			
		||||
STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL                            :{WHITE}{COMMA} peça{P "" s} de caminho-de-ferro
 | 
			
		||||
STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD                            :{WHITE}{COMMA} peça{P "" s} de estrada
 | 
			
		||||
STR_COMPANY_VIEW_INFRASTRUCTURE_WATER                           :{WHITE}{COMMA} quadrado{P "" s} de água
 | 
			
		||||
STR_COMPANY_VIEW_INFRASTRUCTURE_STATION                         :{WHITE}{COMMA} quadrado{P "" s} de estação
 | 
			
		||||
STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL                            :{WHITE}{COMMA} {P "secção" "secções" } de caminho-de-ferro
 | 
			
		||||
STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD                            :{WHITE}{COMMA} {P "secção" "secções"} de estrada
 | 
			
		||||
STR_COMPANY_VIEW_INFRASTRUCTURE_WATER                           :{WHITE}{COMMA} bloco{P "" s} de água
 | 
			
		||||
STR_COMPANY_VIEW_INFRASTRUCTURE_STATION                         :{WHITE}{COMMA} bloco{P "" s} de estação
 | 
			
		||||
STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT                         :{WHITE}{COMMA} aeroporto{P "" s}
 | 
			
		||||
STR_COMPANY_VIEW_INFRASTRUCTURE_NONE                            :{WHITE}Nenhum
 | 
			
		||||
 | 
			
		||||
@@ -3334,15 +3336,15 @@ STR_BUY_COMPANY_MESSAGE                                         :{WHITE}Estamos
 | 
			
		||||
 | 
			
		||||
# Company infrastructure window
 | 
			
		||||
STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION                         :{WHITE}Infraestrutura de {COMPANY}
 | 
			
		||||
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT                       :{GOLD}Peças de caminho-de-ferro:
 | 
			
		||||
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT                       :{GOLD}Secções de caminho-de-ferro:
 | 
			
		||||
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS                         :{WHITE}Sinais
 | 
			
		||||
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT                       :{GOLD}Peças de estrada:
 | 
			
		||||
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT                       :{GOLD}Secções de estrada:
 | 
			
		||||
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD                            :{WHITE}Estrada
 | 
			
		||||
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY                         :{WHITE}Via para elétricos
 | 
			
		||||
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT                      :{GOLD}Quadrados de água:
 | 
			
		||||
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT                      :{GOLD}Blocos de água:
 | 
			
		||||
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS                          :{WHITE}Canais
 | 
			
		||||
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT                    :{GOLD}Estações:
 | 
			
		||||
STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS                        :{WHITE}Quadrados de estações
 | 
			
		||||
STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS                        :{WHITE}Blocos de estações
 | 
			
		||||
STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS                        :{WHITE}Aeroportos
 | 
			
		||||
STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL                           :{WHITE}{CURRENCY_LONG}/ano
 | 
			
		||||
 | 
			
		||||
@@ -3440,11 +3442,11 @@ STR_GROUP_OCCUPANCY_VALUE                                       :{NUM}%
 | 
			
		||||
 | 
			
		||||
# Build vehicle window
 | 
			
		||||
STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION                              :Novos Veículos Ferroviários
 | 
			
		||||
STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION                            :Novos comboios para carris electrificados
 | 
			
		||||
STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION                            :Novos Veículos Ferroviários Elétricos
 | 
			
		||||
STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION                          :Novos Veículos Monocarril
 | 
			
		||||
STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION                            :Novos Veículos Maglev
 | 
			
		||||
 | 
			
		||||
STR_BUY_VEHICLE_TRAIN_ALL_CAPTION                               :Novos Veículos Sobre Carris
 | 
			
		||||
STR_BUY_VEHICLE_TRAIN_ALL_CAPTION                               :Novos Veículos Ferroviários
 | 
			
		||||
STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION                            :Novos Veículos Rodoviários
 | 
			
		||||
STR_BUY_VEHICLE_SHIP_CAPTION                                    :Novos Barcos
 | 
			
		||||
STR_BUY_VEHICLE_AIRCRAFT_CAPTION                                :Nova Aeronave
 | 
			
		||||
@@ -3474,7 +3476,7 @@ STR_PURCHASE_INFO_AIRCRAFT_TYPE                                 :{BLACK}Tipo de
 | 
			
		||||
 | 
			
		||||
STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP                              :{BLACK}Lista de veículos ferroviários - clique num veículo para informações
 | 
			
		||||
STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP                       :{BLACK}Lista de veículos rodoviários - clique num veículo para informações
 | 
			
		||||
STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP                               :{BLACK}Lista de selecção de navios. Clique num navio para informações. Ctrl+Clique para alternar/ocultar o tipo de navio
 | 
			
		||||
STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP                               :{BLACK}Lista de selecção de barcos. Clique num navio para informações. Ctrl+Clique para alternar/ocultar o tipo de barco
 | 
			
		||||
STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP                           :{BLACK}Lista de aeronaves - clique na aeronave para informações
 | 
			
		||||
 | 
			
		||||
STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON                        :{BLACK}Comprar Veículo
 | 
			
		||||
@@ -4041,7 +4043,7 @@ STR_AI_DEBUG_NAME_TOOLTIP                                       :{BLACK}Nome do
 | 
			
		||||
STR_AI_DEBUG_SETTINGS                                           :{BLACK}Definições
 | 
			
		||||
STR_AI_DEBUG_SETTINGS_TOOLTIP                                   :{BLACK}Alterar as definições do script
 | 
			
		||||
STR_AI_DEBUG_RELOAD                                             :{BLACK}Recarregar IA
 | 
			
		||||
STR_AI_DEBUG_RELOAD_TOOLTIP                                     :{BLACK}Terminar a IA, recarrega o script e reinicia a IA
 | 
			
		||||
STR_AI_DEBUG_RELOAD_TOOLTIP                                     :{BLACK}Termina a IA, recarrega o script e reinicia a IA
 | 
			
		||||
STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP                           :{BLACK}Activar/desactivar paragem quando o registo da IA for igual à string de paragem
 | 
			
		||||
STR_AI_DEBUG_BREAK_ON_LABEL                                     :{BLACK}Parar em:
 | 
			
		||||
STR_AI_DEBUG_BREAK_STR_OSKTITLE                                 :{BLACK}Parar em
 | 
			
		||||
 
 | 
			
		||||
@@ -2963,6 +2963,8 @@ STR_SAVELOAD_DETAIL_NOT_AVAILABLE                               :{BLACK}Нет 
 | 
			
		||||
STR_SAVELOAD_DETAIL_COMPANY_INDEX                               :{SILVER}{COMMA}: {WHITE}{STRING}
 | 
			
		||||
STR_SAVELOAD_DETAIL_GRFSTATUS                                   :{SILVER}NewGRF: {WHITE}{STRING}
 | 
			
		||||
STR_SAVELOAD_FILTER_TITLE                                       :{BLACK}Фильтр:
 | 
			
		||||
STR_SAVELOAD_OVERWRITE_TITLE                                    :{WHITE}Перезапись файла
 | 
			
		||||
STR_SAVELOAD_OVERWRITE_WARNING                                  :{YELLOW}Перезаписать файл?
 | 
			
		||||
 | 
			
		||||
STR_SAVELOAD_OSKTITLE                                           :{BLACK}Введите название сохраняемой игры
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2778,6 +2778,8 @@ STR_SAVELOAD_DETAIL_NOT_AVAILABLE                               :{BLACK}No hay i
 | 
			
		||||
STR_SAVELOAD_DETAIL_COMPANY_INDEX                               :{SILVER}{COMMA}: {WHITE}{STRING}
 | 
			
		||||
STR_SAVELOAD_DETAIL_GRFSTATUS                                   :{SILVER}NewGRF: {WHITE}{STRING}
 | 
			
		||||
STR_SAVELOAD_FILTER_TITLE                                       :{BLACK}Filtrar palabras:
 | 
			
		||||
STR_SAVELOAD_OVERWRITE_TITLE                                    :{WHITE}Sobrescribir archivo
 | 
			
		||||
STR_SAVELOAD_OVERWRITE_WARNING                                  :{YELLOW}¿Estás seguro de sobrescribir el archivo?
 | 
			
		||||
 | 
			
		||||
STR_SAVELOAD_OSKTITLE                                           :{BLACK}Indicar un nombre para la partida a guardar
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -43,7 +43,7 @@ static const uint NETWORK_NAME_LENGTH             =   80;         ///< The maxim
 | 
			
		||||
static const uint NETWORK_COMPANY_NAME_LENGTH     =  128;         ///< The maximum length of the company name, in bytes including '\0'
 | 
			
		||||
static const uint NETWORK_HOSTNAME_LENGTH         =   80;         ///< The maximum length of the host name, in bytes including '\0'
 | 
			
		||||
static const uint NETWORK_SERVER_ID_LENGTH        =   33;         ///< The maximum length of the network id of the servers, in bytes including '\0'
 | 
			
		||||
static const uint NETWORK_REVISION_LENGTH         =   15;         ///< The maximum length of the revision, in bytes including '\0'
 | 
			
		||||
static const uint NETWORK_REVISION_LENGTH         =   33;         ///< The maximum length of the revision, in bytes including '\0'
 | 
			
		||||
static const uint NETWORK_LONG_REVISION_LENGTH    =   64;         ///< The maximum length of the revision, in bytes including '\0'
 | 
			
		||||
static const uint NETWORK_PASSWORD_LENGTH         =   33;         ///< The maximum length of the password, in bytes including '\0' (must be >= NETWORK_SERVER_ID_LENGTH)
 | 
			
		||||
static const uint NETWORK_CLIENTS_LENGTH          =  200;         ///< The maximum length for the list of clients that controls a company, in bytes including '\0'
 | 
			
		||||
 
 | 
			
		||||
@@ -261,7 +261,7 @@ static void ShowHelp()
 | 
			
		||||
 | 
			
		||||
static void WriteSavegameInfo(const char *name)
 | 
			
		||||
{
 | 
			
		||||
	extern uint16 _sl_version;
 | 
			
		||||
	extern SaveLoadVersion _sl_version;
 | 
			
		||||
	uint32 last_ottd_rev = 0;
 | 
			
		||||
	byte ever_modified = 0;
 | 
			
		||||
	bool removed_newgrfs = false;
 | 
			
		||||
 
 | 
			
		||||
@@ -53,6 +53,11 @@ const char _openttd_build_date[] = __DATE__ " " __TIME__;
 | 
			
		||||
 */
 | 
			
		||||
const char _openttd_build_configure[] = "!!CONFIGURE_INVOCATION!!";
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * The git revision hash of this version.
 | 
			
		||||
 */
 | 
			
		||||
const char _openttd_revision_hash[] = "!!GITHASH!!";
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Let us know if current build was modified. This detection
 | 
			
		||||
 * works even in the case when revision string is overridden by
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,7 @@
 | 
			
		||||
 | 
			
		||||
extern const char _openttd_revision[];
 | 
			
		||||
extern const char _openttd_build_date[];
 | 
			
		||||
extern const char _openttd_revision_hash[];
 | 
			
		||||
extern const char _openttd_build_configure[];
 | 
			
		||||
extern const byte _openttd_revision_modified;
 | 
			
		||||
extern const uint32 _openttd_newgrf_version;
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -30,8 +30,8 @@ static bool _ai_saveload_is_random;
 | 
			
		||||
static const SaveLoad _ai_company[] = {
 | 
			
		||||
	    SLEG_STR(_ai_saveload_name,        SLE_STRB),
 | 
			
		||||
	    SLEG_STR(_ai_saveload_settings,    SLE_STRB),
 | 
			
		||||
	SLEG_CONDVAR(_ai_saveload_version,   SLE_UINT32, 108, SL_MAX_VERSION),
 | 
			
		||||
	SLEG_CONDVAR(_ai_saveload_is_random,   SLE_BOOL, 136, SL_MAX_VERSION),
 | 
			
		||||
	SLEG_CONDVAR(_ai_saveload_version,   SLE_UINT32, SLV_108, SL_MAX_VERSION),
 | 
			
		||||
	SLEG_CONDVAR(_ai_saveload_is_random,   SLE_BOOL, SLV_136, SL_MAX_VERSION),
 | 
			
		||||
	     SLE_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -35,10 +35,10 @@ static void Save_ANIT()
 | 
			
		||||
static void Load_ANIT()
 | 
			
		||||
{
 | 
			
		||||
	/* Before version 80 we did NOT have a variable length animated tile table */
 | 
			
		||||
	if (IsSavegameVersionBefore(80)) {
 | 
			
		||||
	if (IsSavegameVersionBefore(SLV_80)) {
 | 
			
		||||
		/* In pre version 6, we has 16bit per tile, now we have 32bit per tile, convert it ;) */
 | 
			
		||||
		TileIndex anim_list[256];
 | 
			
		||||
		SlArray(anim_list, 256, IsSavegameVersionBefore(6) ? (SLE_FILE_U16 | SLE_VAR_U32) : SLE_UINT32);
 | 
			
		||||
		SlArray(anim_list, 256, IsSavegameVersionBefore(SLV_6) ? (SLE_FILE_U16 | SLE_VAR_U32) : SLE_UINT32);
 | 
			
		||||
 | 
			
		||||
		for (int i = 0; i < 256; i++) {
 | 
			
		||||
			if (anim_list[i] == 0) break;
 | 
			
		||||
 
 | 
			
		||||
@@ -21,8 +21,8 @@ static const SaveLoad _engine_renew_desc[] = {
 | 
			
		||||
	    SLE_VAR(EngineRenew, to,       SLE_UINT16),
 | 
			
		||||
 | 
			
		||||
	    SLE_REF(EngineRenew, next,     REF_ENGINE_RENEWS),
 | 
			
		||||
	SLE_CONDVAR(EngineRenew, group_id, SLE_UINT16, 60, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(EngineRenew, replace_when_old, SLE_BOOL, 175, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(EngineRenew, group_id, SLE_UINT16, SLV_60, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(EngineRenew, replace_when_old, SLE_BOOL, SLV_175, SL_MAX_VERSION),
 | 
			
		||||
	SLE_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -45,9 +45,9 @@ static void Load_ERNW()
 | 
			
		||||
		SlObject(er, _engine_renew_desc);
 | 
			
		||||
 | 
			
		||||
		/* Advanced vehicle lists, ungrouped vehicles got added */
 | 
			
		||||
		if (IsSavegameVersionBefore(60)) {
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_60)) {
 | 
			
		||||
			er->group_id = ALL_GROUP;
 | 
			
		||||
		} else if (IsSavegameVersionBefore(71)) {
 | 
			
		||||
		} else if (IsSavegameVersionBefore(SLV_71)) {
 | 
			
		||||
			if (er->group_id == DEFAULT_GROUP) er->group_id = ALL_GROUP;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ extern btree::btree_map<uint64, Money> _cargo_packet_deferred_payments;
 | 
			
		||||
 */
 | 
			
		||||
/* static */ void CargoPacket::AfterLoad()
 | 
			
		||||
{
 | 
			
		||||
	if (IsSavegameVersionBefore(44)) {
 | 
			
		||||
	if (IsSavegameVersionBefore(SLV_44)) {
 | 
			
		||||
		Vehicle *v;
 | 
			
		||||
		/* If we remove a station while cargo from it is still en route, payment calculation will assume
 | 
			
		||||
		 * 0, 0 to be the source of the cargo, resulting in very high payments usually. v->source_xy
 | 
			
		||||
@@ -62,7 +62,7 @@ extern btree::btree_map<uint64, Money> _cargo_packet_deferred_payments;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (IsSavegameVersionBefore(120)) {
 | 
			
		||||
	if (IsSavegameVersionBefore(SLV_120)) {
 | 
			
		||||
		/* CargoPacket's source should be either INVALID_STATION or a valid station */
 | 
			
		||||
		CargoPacket *cp;
 | 
			
		||||
		FOR_ALL_CARGOPACKETS(cp) {
 | 
			
		||||
@@ -70,7 +70,7 @@ extern btree::btree_map<uint64, Money> _cargo_packet_deferred_payments;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!IsSavegameVersionBefore(68)) {
 | 
			
		||||
	if (!IsSavegameVersionBefore(SLV_68)) {
 | 
			
		||||
		/* Only since version 68 we have cargo packets. Savegames from before used
 | 
			
		||||
		 * 'new CargoPacket' + cargolist.Append so their caches are already
 | 
			
		||||
		 * correct and do not need rebuilding. */
 | 
			
		||||
@@ -83,7 +83,7 @@ extern btree::btree_map<uint64, Money> _cargo_packet_deferred_payments;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (IsSavegameVersionBefore(181)) {
 | 
			
		||||
	if (IsSavegameVersionBefore(SLV_181)) {
 | 
			
		||||
		Vehicle *v;
 | 
			
		||||
		FOR_ALL_VEHICLES(v) v->cargo.KeepAll();
 | 
			
		||||
	}
 | 
			
		||||
@@ -103,11 +103,11 @@ const SaveLoad *GetCargoPacketDesc()
 | 
			
		||||
		     SLE_VAR(CargoPacket, count,           SLE_UINT16),
 | 
			
		||||
		     SLE_VAR(CargoPacket, days_in_transit, SLE_UINT8),
 | 
			
		||||
		     SLE_VAR(CargoPacket, feeder_share,    SLE_INT64),
 | 
			
		||||
		 SLE_CONDVAR(CargoPacket, source_type,     SLE_UINT8,  125, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(CargoPacket, source_id,       SLE_UINT16, 125, SL_MAX_VERSION),
 | 
			
		||||
		 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, 0, 120),
 | 
			
		||||
		SLE_CONDNULL(1, SL_MIN_VERSION, SLV_121),
 | 
			
		||||
 | 
			
		||||
		SLE_END()
 | 
			
		||||
	};
 | 
			
		||||
 
 | 
			
		||||
@@ -241,120 +241,120 @@ void AfterLoadCompanyStats()
 | 
			
		||||
static const SaveLoad _company_desc[] = {
 | 
			
		||||
	    SLE_VAR(CompanyProperties, name_2,          SLE_UINT32),
 | 
			
		||||
	    SLE_VAR(CompanyProperties, name_1,          SLE_STRINGID),
 | 
			
		||||
	SLE_CONDSTR(CompanyProperties, name,            SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDSTR(CompanyProperties, name,            SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	    SLE_VAR(CompanyProperties, president_name_1, SLE_STRINGID),
 | 
			
		||||
	    SLE_VAR(CompanyProperties, president_name_2, SLE_UINT32),
 | 
			
		||||
	SLE_CONDSTR(CompanyProperties, president_name,  SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDSTR(CompanyProperties, president_name,  SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	    SLE_VAR(CompanyProperties, face,            SLE_UINT32),
 | 
			
		||||
 | 
			
		||||
	/* money was changed to a 64 bit field in savegame version 1. */
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, money,                 SLE_VAR_I64 | SLE_FILE_I32,  0, 0),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, money,                 SLE_INT64,                   1, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, money,                 SLE_VAR_I64 | SLE_FILE_I32,  SL_MIN_VERSION, SLV_1),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, money,                 SLE_INT64,                   SLV_1, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, current_loan,          SLE_VAR_I64 | SLE_FILE_I32,  0, 64),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, current_loan,          SLE_INT64,                  65, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, current_loan,          SLE_VAR_I64 | SLE_FILE_I32,  SL_MIN_VERSION, SLV_65),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, current_loan,          SLE_INT64,                  SLV_65, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	    SLE_VAR(CompanyProperties, colour,                SLE_UINT8),
 | 
			
		||||
	    SLE_VAR(CompanyProperties, money_fraction,        SLE_UINT8),
 | 
			
		||||
	SLE_CONDNULL(1,  0,  57), ///< avail_railtypes
 | 
			
		||||
	SLE_CONDNULL(1,  SL_MIN_VERSION,  SLV_58), ///< avail_railtypes
 | 
			
		||||
	    SLE_VAR(CompanyProperties, block_preview,         SLE_UINT8),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDNULL(2,  0,  93), ///< cargo_types
 | 
			
		||||
	SLE_CONDNULL(4, 94, 169), ///< cargo_types
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, location_of_HQ,        SLE_FILE_U16 | SLE_VAR_U32,  0,  5),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, location_of_HQ,        SLE_UINT32,                  6, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, last_build_coordinate, SLE_FILE_U16 | SLE_VAR_U32,  0,  5),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, last_build_coordinate, SLE_UINT32,                  6, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, inaugurated_year,      SLE_FILE_U8  | SLE_VAR_I32,  0, 30),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, inaugurated_year,      SLE_INT32,                  31, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDNULL(2,  SL_MIN_VERSION,  SLV_94), ///< cargo_types
 | 
			
		||||
	SLE_CONDNULL(4, SLV_94, SLV_170), ///< cargo_types
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, location_of_HQ,        SLE_FILE_U16 | SLE_VAR_U32,  SL_MIN_VERSION,  SLV_6),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, location_of_HQ,        SLE_UINT32,                  SLV_6, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, last_build_coordinate, SLE_FILE_U16 | SLE_VAR_U32,  SL_MIN_VERSION,  SLV_6),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, last_build_coordinate, SLE_UINT32,                  SLV_6, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, inaugurated_year,      SLE_FILE_U8  | SLE_VAR_I32,  SL_MIN_VERSION, SLV_31),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, inaugurated_year,      SLE_INT32,                  SLV_31, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	    SLE_ARR(CompanyProperties, share_owners,          SLE_UINT8, 4),
 | 
			
		||||
 | 
			
		||||
	    SLE_VAR(CompanyProperties, num_valid_stat_ent,    SLE_UINT8),
 | 
			
		||||
 | 
			
		||||
	    SLE_VAR(CompanyProperties, months_of_bankruptcy,  SLE_UINT8),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, bankrupt_asked,        SLE_FILE_U8  | SLE_VAR_U16,  0, 103),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, bankrupt_asked,        SLE_UINT16,                104, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, bankrupt_asked,        SLE_FILE_U8  | SLE_VAR_U16,  SL_MIN_VERSION, SLV_104),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, bankrupt_asked,        SLE_UINT16,                SLV_104, SL_MAX_VERSION),
 | 
			
		||||
	    SLE_VAR(CompanyProperties, bankrupt_timeout,      SLE_INT16),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, bankrupt_value,        SLE_VAR_I64 | SLE_FILE_I32,  0, 64),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, bankrupt_value,        SLE_INT64,                  65, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, bankrupt_value,        SLE_VAR_I64 | SLE_FILE_I32,  SL_MIN_VERSION, SLV_65),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, bankrupt_value,        SLE_INT64,                  SLV_65, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	/* yearly expenses was changed to 64-bit in savegame version 2. */
 | 
			
		||||
	SLE_CONDARR(CompanyProperties, yearly_expenses,       SLE_FILE_I32 | SLE_VAR_I64, 3 * 13, 0, 1),
 | 
			
		||||
	SLE_CONDARR_X(CompanyProperties, yearly_expenses,     SLE_INT64, 3 * 13,                  2, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING, 0, 0)),
 | 
			
		||||
	SLE_CONDARR_X(CompanyProperties, yearly_expenses,     SLE_INT64, 3 * 15,                  2, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING)),
 | 
			
		||||
	SLE_CONDARR(CompanyProperties, yearly_expenses,       SLE_FILE_I32 | SLE_VAR_I64, 3 * 13, SL_MIN_VERSION, SLV_2),
 | 
			
		||||
	SLE_CONDARR_X(CompanyProperties, yearly_expenses,     SLE_INT64, 3 * 13,                  SLV_2, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING, 0, 0)),
 | 
			
		||||
	SLE_CONDARR_X(CompanyProperties, yearly_expenses,     SLE_INT64, 3 * 15,                  SLV_2, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING)),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, is_ai,                 SLE_BOOL,                    2, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDNULL(1, 107, 111), ///< is_noai
 | 
			
		||||
	SLE_CONDNULL(1, 4, 99),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, is_ai,                 SLE_BOOL,                    SLV_2, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDNULL(1, SLV_107, SLV_112), ///< is_noai
 | 
			
		||||
	SLE_CONDNULL(1, SLV_4, SLV_100),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, terraform_limit,       SLE_UINT32,                156, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, clear_limit,           SLE_UINT32,                156, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, tree_limit,            SLE_UINT32,                175, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR_X(CompanyProperties, purchase_land_limit, SLE_UINT32,                  0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_BUY_LAND_RATE_LIMIT)),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, terraform_limit,       SLE_UINT32,                SLV_156, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, clear_limit,           SLE_UINT32,                SLV_156, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(CompanyProperties, tree_limit,            SLE_UINT32,                SLV_175, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR_X(CompanyProperties, purchase_land_limit, SLE_UINT32,         SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_BUY_LAND_RATE_LIMIT)),
 | 
			
		||||
 | 
			
		||||
	SLE_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const SaveLoad _company_settings_desc[] = {
 | 
			
		||||
	/* Engine renewal settings */
 | 
			
		||||
	SLE_CONDNULL(512, 16, 18),
 | 
			
		||||
	SLE_CONDREF(Company, engine_renew_list,            REF_ENGINE_RENEWS,   19, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Company, settings.engine_renew,        SLE_BOOL,            16, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Company, settings.engine_renew_months, SLE_INT16,           16, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Company, settings.engine_renew_money,  SLE_UINT32,          16, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Company, settings.renew_keep_length,   SLE_BOOL,             2, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDNULL(512, SLV_16, SLV_19),
 | 
			
		||||
	SLE_CONDREF(Company, engine_renew_list,            REF_ENGINE_RENEWS,   SLV_19, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Company, settings.engine_renew,        SLE_BOOL,            SLV_16, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Company, settings.engine_renew_months, SLE_INT16,           SLV_16, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Company, settings.engine_renew_money,  SLE_UINT32,          SLV_16, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Company, settings.renew_keep_length,   SLE_BOOL,             SLV_2, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	/* Default vehicle settings */
 | 
			
		||||
	SLE_CONDVAR(Company, settings.vehicle.servint_ispercent,   SLE_BOOL,     120, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Company, settings.vehicle.servint_trains,    SLE_UINT16,     120, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Company, settings.vehicle.servint_roadveh,   SLE_UINT16,     120, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Company, settings.vehicle.servint_aircraft,  SLE_UINT16,     120, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Company, settings.vehicle.servint_ships,     SLE_UINT16,     120, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR_X(Company, settings.vehicle.auto_timetable_by_default, SLE_BOOL, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_AUTO_TIMETABLE, 2, 2)),
 | 
			
		||||
	SLE_CONDVAR(Company, settings.vehicle.servint_ispercent,   SLE_BOOL,     SLV_120, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Company, settings.vehicle.servint_trains,    SLE_UINT16,     SLV_120, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Company, settings.vehicle.servint_roadveh,   SLE_UINT16,     SLV_120, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Company, settings.vehicle.servint_aircraft,  SLE_UINT16,     SLV_120, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Company, settings.vehicle.servint_ships,     SLE_UINT16,     SLV_120, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR_X(Company, settings.vehicle.auto_timetable_by_default, SLE_BOOL, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_AUTO_TIMETABLE, 2, 2)),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDNULL(63, 2, 143), // old reserved space
 | 
			
		||||
	SLE_CONDNULL(63, SLV_2, SLV_144), // old reserved space
 | 
			
		||||
 | 
			
		||||
	SLE_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const SaveLoad _company_settings_skip_desc[] = {
 | 
			
		||||
	/* Engine renewal settings */
 | 
			
		||||
	SLE_CONDNULL(512, 16, 18),
 | 
			
		||||
	SLE_CONDNULL(2, 19, 68),                 // engine_renew_list
 | 
			
		||||
	SLE_CONDNULL(4, 69, SL_MAX_VERSION),     // engine_renew_list
 | 
			
		||||
	SLE_CONDNULL(1, 16, SL_MAX_VERSION),     // settings.engine_renew
 | 
			
		||||
	SLE_CONDNULL(2, 16, SL_MAX_VERSION),     // settings.engine_renew_months
 | 
			
		||||
	SLE_CONDNULL(4, 16, SL_MAX_VERSION),     // settings.engine_renew_money
 | 
			
		||||
	SLE_CONDNULL(1,  2, SL_MAX_VERSION),     // settings.renew_keep_length
 | 
			
		||||
	SLE_CONDNULL(512, SLV_16, SLV_19),
 | 
			
		||||
	SLE_CONDNULL(2, SLV_19, SLV_69),                 // engine_renew_list
 | 
			
		||||
	SLE_CONDNULL(4, SLV_69, SL_MAX_VERSION),     // engine_renew_list
 | 
			
		||||
	SLE_CONDNULL(1, SLV_16, SL_MAX_VERSION),     // settings.engine_renew
 | 
			
		||||
	SLE_CONDNULL(2, SLV_16, SL_MAX_VERSION),     // settings.engine_renew_months
 | 
			
		||||
	SLE_CONDNULL(4, SLV_16, SL_MAX_VERSION),     // settings.engine_renew_money
 | 
			
		||||
	SLE_CONDNULL(1,  SLV_2, SL_MAX_VERSION),     // settings.renew_keep_length
 | 
			
		||||
 | 
			
		||||
	/* Default vehicle settings */
 | 
			
		||||
	SLE_CONDNULL(1, 120, SL_MAX_VERSION),    // settings.vehicle.servint_ispercent
 | 
			
		||||
	SLE_CONDNULL(2, 120, SL_MAX_VERSION),    // settings.vehicle.servint_trains
 | 
			
		||||
	SLE_CONDNULL(2, 120, SL_MAX_VERSION),    // settings.vehicle.servint_roadveh
 | 
			
		||||
	SLE_CONDNULL(2, 120, SL_MAX_VERSION),    // settings.vehicle.servint_aircraft
 | 
			
		||||
	SLE_CONDNULL(2, 120, SL_MAX_VERSION),    // settings.vehicle.servint_ships
 | 
			
		||||
	SLE_CONDNULL_X(1, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_AUTO_TIMETABLE, 2, 2)), // settings.vehicle.auto_timetable_by_default
 | 
			
		||||
	SLE_CONDNULL(1, SLV_120, SL_MAX_VERSION),    // settings.vehicle.servint_ispercent
 | 
			
		||||
	SLE_CONDNULL(2, SLV_120, SL_MAX_VERSION),    // settings.vehicle.servint_trains
 | 
			
		||||
	SLE_CONDNULL(2, SLV_120, SL_MAX_VERSION),    // settings.vehicle.servint_roadveh
 | 
			
		||||
	SLE_CONDNULL(2, SLV_120, SL_MAX_VERSION),    // settings.vehicle.servint_aircraft
 | 
			
		||||
	SLE_CONDNULL(2, SLV_120, SL_MAX_VERSION),    // settings.vehicle.servint_ships
 | 
			
		||||
	SLE_CONDNULL_X(1, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_AUTO_TIMETABLE, 2, 2)), // settings.vehicle.auto_timetable_by_default
 | 
			
		||||
 | 
			
		||||
	SLE_CONDNULL(63, 2, 143), // old reserved space
 | 
			
		||||
	SLE_CONDNULL(63, SLV_2, SLV_144), // old reserved space
 | 
			
		||||
 | 
			
		||||
	SLE_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const SaveLoad _company_economy_desc[] = {
 | 
			
		||||
	/* these were changed to 64-bit in savegame format 2 */
 | 
			
		||||
	SLE_CONDVAR(CompanyEconomyEntry, income,              SLE_FILE_I32 | SLE_VAR_I64, 0, 1),
 | 
			
		||||
	SLE_CONDVAR(CompanyEconomyEntry, income,              SLE_INT64,                  2, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(CompanyEconomyEntry, expenses,            SLE_FILE_I32 | SLE_VAR_I64, 0, 1),
 | 
			
		||||
	SLE_CONDVAR(CompanyEconomyEntry, expenses,            SLE_INT64,                  2, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(CompanyEconomyEntry, company_value,       SLE_FILE_I32 | SLE_VAR_I64, 0, 1),
 | 
			
		||||
	SLE_CONDVAR(CompanyEconomyEntry, company_value,       SLE_INT64,                  2, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(CompanyEconomyEntry, income,              SLE_FILE_I32 | SLE_VAR_I64, SL_MIN_VERSION, SLV_2),
 | 
			
		||||
	SLE_CONDVAR(CompanyEconomyEntry, income,              SLE_INT64,                  SLV_2, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(CompanyEconomyEntry, expenses,            SLE_FILE_I32 | SLE_VAR_I64, SL_MIN_VERSION, SLV_2),
 | 
			
		||||
	SLE_CONDVAR(CompanyEconomyEntry, expenses,            SLE_INT64,                  SLV_2, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(CompanyEconomyEntry, company_value,       SLE_FILE_I32 | SLE_VAR_I64, SL_MIN_VERSION, SLV_2),
 | 
			
		||||
	SLE_CONDVAR(CompanyEconomyEntry, company_value,       SLE_INT64,                  SLV_2, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDVAR(CompanyEconomyEntry, delivered_cargo[NUM_CARGO - 1], SLE_INT32,       0, 169),
 | 
			
		||||
	SLE_CONDARR(CompanyEconomyEntry, delivered_cargo,     SLE_UINT32, 32,           170, 198),
 | 
			
		||||
	SLE_CONDARR(CompanyEconomyEntry, delivered_cargo,     SLE_UINT32, NUM_CARGO,    199, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(CompanyEconomyEntry, delivered_cargo[NUM_CARGO - 1], SLE_INT32,       SL_MIN_VERSION, SLV_170),
 | 
			
		||||
	SLE_CONDARR(CompanyEconomyEntry, delivered_cargo,     SLE_UINT32, 32,           SLV_170, SLV_EXTEND_CARGOTYPES),
 | 
			
		||||
	SLE_CONDARR(CompanyEconomyEntry, delivered_cargo,     SLE_UINT32, NUM_CARGO,    SLV_EXTEND_CARGOTYPES, SL_MAX_VERSION),
 | 
			
		||||
	    SLE_VAR(CompanyEconomyEntry, performance_history, SLE_INT32),
 | 
			
		||||
 | 
			
		||||
	SLE_END()
 | 
			
		||||
@@ -366,49 +366,49 @@ struct CompanyOldAI {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const SaveLoad _company_ai_desc[] = {
 | 
			
		||||
	SLE_CONDNULL(2,  0, 106),
 | 
			
		||||
	SLE_CONDNULL(2,  0, 12),
 | 
			
		||||
	SLE_CONDNULL(4, 13, 106),
 | 
			
		||||
	SLE_CONDNULL(8,  0, 106),
 | 
			
		||||
	 SLE_CONDVAR(CompanyOldAI, num_build_rec, SLE_UINT8, 0, 106),
 | 
			
		||||
	SLE_CONDNULL(3,  0, 106),
 | 
			
		||||
	SLE_CONDNULL(2,  SL_MIN_VERSION, SLV_107),
 | 
			
		||||
	SLE_CONDNULL(2,  SL_MIN_VERSION, SLV_13),
 | 
			
		||||
	SLE_CONDNULL(4, SLV_13, SLV_107),
 | 
			
		||||
	SLE_CONDNULL(8,  SL_MIN_VERSION, SLV_107),
 | 
			
		||||
	 SLE_CONDVAR(CompanyOldAI, num_build_rec, SLE_UINT8, SL_MIN_VERSION, SLV_107),
 | 
			
		||||
	SLE_CONDNULL(3,  SL_MIN_VERSION, SLV_107),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDNULL(2,  0,  5),
 | 
			
		||||
	SLE_CONDNULL(4,  6, 106),
 | 
			
		||||
	SLE_CONDNULL(2,  0,  5),
 | 
			
		||||
	SLE_CONDNULL(4,  6, 106),
 | 
			
		||||
	SLE_CONDNULL(2,  0, 106),
 | 
			
		||||
	SLE_CONDNULL(2,  SL_MIN_VERSION,  SLV_6),
 | 
			
		||||
	SLE_CONDNULL(4,  SLV_6, SLV_107),
 | 
			
		||||
	SLE_CONDNULL(2,  SL_MIN_VERSION,  SLV_6),
 | 
			
		||||
	SLE_CONDNULL(4,  SLV_6, SLV_107),
 | 
			
		||||
	SLE_CONDNULL(2,  SL_MIN_VERSION, SLV_107),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDNULL(2,  0,  5),
 | 
			
		||||
	SLE_CONDNULL(4,  6, 106),
 | 
			
		||||
	SLE_CONDNULL(2,  0,  5),
 | 
			
		||||
	SLE_CONDNULL(4,  6, 106),
 | 
			
		||||
	SLE_CONDNULL(2,  0, 106),
 | 
			
		||||
	SLE_CONDNULL(2,  SL_MIN_VERSION,  SLV_6),
 | 
			
		||||
	SLE_CONDNULL(4,  SLV_6, SLV_107),
 | 
			
		||||
	SLE_CONDNULL(2,  SL_MIN_VERSION,  SLV_6),
 | 
			
		||||
	SLE_CONDNULL(4,  SLV_6, SLV_107),
 | 
			
		||||
	SLE_CONDNULL(2,  SL_MIN_VERSION, SLV_107),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDNULL(2,  0, 68),
 | 
			
		||||
	SLE_CONDNULL(4,  69, 106),
 | 
			
		||||
	SLE_CONDNULL(2,  SL_MIN_VERSION, SLV_69),
 | 
			
		||||
	SLE_CONDNULL(4,  SLV_69, SLV_107),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDNULL(18, 0, 106),
 | 
			
		||||
	SLE_CONDNULL(20, 0, 106),
 | 
			
		||||
	SLE_CONDNULL(32, 0, 106),
 | 
			
		||||
	SLE_CONDNULL(18, SL_MIN_VERSION, SLV_107),
 | 
			
		||||
	SLE_CONDNULL(20, SL_MIN_VERSION, SLV_107),
 | 
			
		||||
	SLE_CONDNULL(32, SL_MIN_VERSION, SLV_107),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDNULL(64, 2, 106),
 | 
			
		||||
	SLE_CONDNULL(64, SLV_2, SLV_107),
 | 
			
		||||
	SLE_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const SaveLoad _company_ai_build_rec_desc[] = {
 | 
			
		||||
	SLE_CONDNULL(2, 0, 5),
 | 
			
		||||
	SLE_CONDNULL(4, 6, 106),
 | 
			
		||||
	SLE_CONDNULL(2, 0, 5),
 | 
			
		||||
	SLE_CONDNULL(4, 6, 106),
 | 
			
		||||
	SLE_CONDNULL(8, 0, 106),
 | 
			
		||||
	SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6),
 | 
			
		||||
	SLE_CONDNULL(4, SLV_6, SLV_107),
 | 
			
		||||
	SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6),
 | 
			
		||||
	SLE_CONDNULL(4, SLV_6, SLV_107),
 | 
			
		||||
	SLE_CONDNULL(8, SL_MIN_VERSION, SLV_107),
 | 
			
		||||
	SLE_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const SaveLoad _company_livery_desc[] = {
 | 
			
		||||
	SLE_CONDVAR(Livery, in_use,  SLE_UINT8, 34, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Livery, colour1, SLE_UINT8, 34, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Livery, colour2, SLE_UINT8, 34, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Livery, in_use,  SLE_UINT8, SLV_34, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Livery, colour1, SLE_UINT8, SLV_34, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Livery, colour2, SLE_UINT8, SLV_34, SL_MAX_VERSION),
 | 
			
		||||
	SLE_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -425,7 +425,7 @@ static void SaveLoad_PLYR_common(Company *c, CompanyProperties *cprops)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Keep backwards compatible for savegames, so load the old AI block */
 | 
			
		||||
	if (IsSavegameVersionBefore(107) && cprops->is_ai) {
 | 
			
		||||
	if (IsSavegameVersionBefore(SLV_107) && cprops->is_ai) {
 | 
			
		||||
		CompanyOldAI old_ai;
 | 
			
		||||
		char nothing;
 | 
			
		||||
 | 
			
		||||
@@ -445,8 +445,8 @@ static void SaveLoad_PLYR_common(Company *c, CompanyProperties *cprops)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Write each livery entry. */
 | 
			
		||||
	int num_liveries = IsSavegameVersionBefore(63) ? LS_END - 4 : (IsSavegameVersionBefore(85) ? LS_END - 2: LS_END);
 | 
			
		||||
	bool update_in_use = IsSavegameVersionBefore(205);
 | 
			
		||||
	int num_liveries = IsSavegameVersionBefore(SLV_63) ? LS_END - 4 : (IsSavegameVersionBefore(SLV_85) ? LS_END - 2: LS_END);
 | 
			
		||||
	bool update_in_use = IsSavegameVersionBefore(SLV_GROUP_LIVERIES);
 | 
			
		||||
	if (c != NULL) {
 | 
			
		||||
		for (i = 0; i < num_liveries; i++) {
 | 
			
		||||
			SlObject(&c->livery[i], _company_livery_desc);
 | 
			
		||||
@@ -522,7 +522,7 @@ static void Check_PLYR()
 | 
			
		||||
		SaveLoad_PLYR_common(NULL, cprops);
 | 
			
		||||
 | 
			
		||||
		/* We do not load old custom names */
 | 
			
		||||
		if (IsSavegameVersionBefore(84)) {
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_84)) {
 | 
			
		||||
			if (GetStringTab(cprops->name_1) == TEXT_TAB_OLD_CUSTOM) {
 | 
			
		||||
				cprops->name_1 = STR_GAME_SAVELOAD_NOT_AVAILABLE;
 | 
			
		||||
			}
 | 
			
		||||
 
 | 
			
		||||
@@ -20,14 +20,14 @@
 | 
			
		||||
static TownID _town_index;
 | 
			
		||||
 | 
			
		||||
static const SaveLoad _depot_desc[] = {
 | 
			
		||||
	 SLE_CONDVAR(Depot, xy,         SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
 | 
			
		||||
	 SLE_CONDVAR(Depot, xy,         SLE_UINT32,                 6, SL_MAX_VERSION),
 | 
			
		||||
	SLEG_CONDVAR(_town_index,       SLE_UINT16,                 0, 140),
 | 
			
		||||
	 SLE_CONDREF(Depot, town,       REF_TOWN,                 141, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDVAR(Depot, town_cn,    SLE_UINT16,               141, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDSTR(Depot, name,       SLE_STR, 0,               141, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDVAR(Depot, build_date, SLE_INT32,                142, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDNULL_X(4,                                          0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 5)),
 | 
			
		||||
	 SLE_CONDVAR(Depot, xy,         SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6),
 | 
			
		||||
	 SLE_CONDVAR(Depot, xy,         SLE_UINT32,                 SLV_6, SL_MAX_VERSION),
 | 
			
		||||
	SLEG_CONDVAR(_town_index,       SLE_UINT16,                 SL_MIN_VERSION, SLV_141),
 | 
			
		||||
	 SLE_CONDREF(Depot, town,       REF_TOWN,                 SLV_141, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDVAR(Depot, town_cn,    SLE_UINT16,               SLV_141, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDSTR(Depot, name,       SLE_STR, 0,               SLV_141, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDVAR(Depot, build_date, SLE_INT32,                SLV_142, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDNULL_X(4,                                 SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 5)),
 | 
			
		||||
	 SLE_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -50,7 +50,7 @@ static void Load_DEPT()
 | 
			
		||||
		SlObject(depot, _depot_desc);
 | 
			
		||||
 | 
			
		||||
		/* Set the town 'pointer' so we can restore it later. */
 | 
			
		||||
		if (IsSavegameVersionBefore(141)) depot->town = (Town *)(size_t)_town_index;
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_141)) depot->town = (Town *)(size_t)_town_index;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -60,7 +60,7 @@ static void Ptrs_DEPT()
 | 
			
		||||
 | 
			
		||||
	FOR_ALL_DEPOTS(depot) {
 | 
			
		||||
		SlObject(depot, _depot_desc);
 | 
			
		||||
		if (IsSavegameVersionBefore(141)) depot->town = Town::Get((size_t)depot->town);
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_141)) depot->town = Town::Get((size_t)depot->town);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@
 | 
			
		||||
static void Load_PRIC()
 | 
			
		||||
{
 | 
			
		||||
	/* Old games store 49 base prices, very old games store them as int32 */
 | 
			
		||||
	int vt = IsSavegameVersionBefore(65) ? SLE_FILE_I32 : SLE_FILE_I64;
 | 
			
		||||
	int vt = IsSavegameVersionBefore(SLV_65) ? SLE_FILE_I32 : SLE_FILE_I64;
 | 
			
		||||
	SlArray(NULL, 49, vt | SLE_VAR_NULL);
 | 
			
		||||
	SlArray(NULL, 49, SLE_FILE_U16 | SLE_VAR_NULL);
 | 
			
		||||
}
 | 
			
		||||
@@ -29,25 +29,25 @@ static void Load_PRIC()
 | 
			
		||||
/** Cargo payment rates in pre 126 savegames */
 | 
			
		||||
static void Load_CAPR()
 | 
			
		||||
{
 | 
			
		||||
	uint num_cargo = IsSavegameVersionBefore(55) ? 12 : IsSavegameVersionBefore(199) ? 32 : NUM_CARGO;
 | 
			
		||||
	int vt = IsSavegameVersionBefore(65) ? SLE_FILE_I32 : SLE_FILE_I64;
 | 
			
		||||
	uint num_cargo = IsSavegameVersionBefore(SLV_55) ? 12 : IsSavegameVersionBefore(SLV_EXTEND_CARGOTYPES) ? 32 : NUM_CARGO;
 | 
			
		||||
	int vt = IsSavegameVersionBefore(SLV_65) ? SLE_FILE_I32 : SLE_FILE_I64;
 | 
			
		||||
	SlArray(NULL, num_cargo, vt | SLE_VAR_NULL);
 | 
			
		||||
	SlArray(NULL, num_cargo, SLE_FILE_U16 | SLE_VAR_NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const SaveLoad _economy_desc[] = {
 | 
			
		||||
	SLE_CONDNULL(4,                                                                  0, 64),             // max_loan
 | 
			
		||||
	SLE_CONDNULL(8,                                                                 65, 143), // max_loan
 | 
			
		||||
	SLE_CONDVAR(Economy, old_max_loan_unround,          SLE_FILE_I32 | SLE_VAR_I64,  0, 64),
 | 
			
		||||
	SLE_CONDVAR(Economy, old_max_loan_unround,          SLE_INT64,                  65, 125),
 | 
			
		||||
	SLE_CONDVAR(Economy, old_max_loan_unround_fract,    SLE_UINT16,                 70, 125),
 | 
			
		||||
	SLE_CONDVAR(Economy, inflation_prices,              SLE_UINT64,                126, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Economy, inflation_payment,             SLE_UINT64,                126, SL_MAX_VERSION),
 | 
			
		||||
	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),
 | 
			
		||||
	SLE_CONDVAR(Economy, inflation_prices,              SLE_UINT64,                SLV_126, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Economy, inflation_payment,             SLE_UINT64,                SLV_126, SL_MAX_VERSION),
 | 
			
		||||
	    SLE_VAR(Economy, fluct,                         SLE_INT16),
 | 
			
		||||
	    SLE_VAR(Economy, interest_rate,                 SLE_UINT8),
 | 
			
		||||
	    SLE_VAR(Economy, infl_amount,                   SLE_UINT8),
 | 
			
		||||
	    SLE_VAR(Economy, infl_amount_pr,                SLE_UINT8),
 | 
			
		||||
	SLE_CONDVAR(Economy, industry_daily_change_counter, SLE_UINT32,                102, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Economy, industry_daily_change_counter, SLE_UINT32,                SLV_102, SL_MAX_VERSION),
 | 
			
		||||
	    SLE_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -61,14 +61,14 @@ static void Save_ECMY()
 | 
			
		||||
static void Load_ECMY()
 | 
			
		||||
{
 | 
			
		||||
	SlObject(&_economy, _economy_desc);
 | 
			
		||||
	StartupIndustryDailyChanges(IsSavegameVersionBefore(102));  // old savegames will need to be initialized
 | 
			
		||||
	StartupIndustryDailyChanges(IsSavegameVersionBefore(SLV_102));  // old savegames will need to be initialized
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const SaveLoad _cargopayment_desc[] = {
 | 
			
		||||
	    SLE_REF(CargoPayment, front,           REF_VEHICLE),
 | 
			
		||||
	    SLE_VAR(CargoPayment, route_profit,    SLE_INT64),
 | 
			
		||||
	    SLE_VAR(CargoPayment, visual_profit,   SLE_INT64),
 | 
			
		||||
	SLE_CONDVAR(CargoPayment, visual_transfer, SLE_INT64, 181, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(CargoPayment, visual_transfer, SLE_INT64, SLV_181, SL_MAX_VERSION),
 | 
			
		||||
	    SLE_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -18,10 +18,10 @@
 | 
			
		||||
#include "../safeguards.h"
 | 
			
		||||
 | 
			
		||||
static const SaveLoad _engine_desc[] = {
 | 
			
		||||
	 SLE_CONDVAR(Engine, intro_date,          SLE_FILE_U16 | SLE_VAR_I32,  0,  30),
 | 
			
		||||
	 SLE_CONDVAR(Engine, intro_date,          SLE_INT32,                  31, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDVAR(Engine, age,                 SLE_FILE_U16 | SLE_VAR_I32,  0,  30),
 | 
			
		||||
	 SLE_CONDVAR(Engine, age,                 SLE_INT32,                  31, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDVAR(Engine, intro_date,          SLE_FILE_U16 | SLE_VAR_I32,  SL_MIN_VERSION,  SLV_31),
 | 
			
		||||
	 SLE_CONDVAR(Engine, intro_date,          SLE_INT32,                  SLV_31, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDVAR(Engine, age,                 SLE_FILE_U16 | SLE_VAR_I32,  SL_MIN_VERSION,  SLV_31),
 | 
			
		||||
	 SLE_CONDVAR(Engine, age,                 SLE_INT32,                  SLV_31, SL_MAX_VERSION),
 | 
			
		||||
	     SLE_VAR(Engine, reliability,         SLE_UINT16),
 | 
			
		||||
	     SLE_VAR(Engine, reliability_spd_dec, SLE_UINT16),
 | 
			
		||||
	     SLE_VAR(Engine, reliability_start,   SLE_UINT16),
 | 
			
		||||
@@ -31,19 +31,19 @@ static const SaveLoad _engine_desc[] = {
 | 
			
		||||
	     SLE_VAR(Engine, duration_phase_2,    SLE_UINT16),
 | 
			
		||||
	     SLE_VAR(Engine, duration_phase_3,    SLE_UINT16),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDNULL(1,                                                        0, 120),
 | 
			
		||||
	SLE_CONDNULL(1,                                                        SL_MIN_VERSION, SLV_121),
 | 
			
		||||
	     SLE_VAR(Engine, flags,               SLE_UINT8),
 | 
			
		||||
	SLE_CONDNULL(1,                                                        0, 178), // old preview_company_rank
 | 
			
		||||
	 SLE_CONDVAR(Engine, preview_asked,       SLE_UINT16,                179, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDVAR(Engine, preview_company,     SLE_UINT8,                 179, SL_MAX_VERSION),
 | 
			
		||||
	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,                                                        0,  44),
 | 
			
		||||
	 SLE_CONDVAR(Engine, company_avail,       SLE_FILE_U8  | SLE_VAR_U16,  0, 103),
 | 
			
		||||
	 SLE_CONDVAR(Engine, company_avail,       SLE_UINT16,                104, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDVAR(Engine, company_hidden,      SLE_UINT16,                193, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDSTR(Engine, name,                SLE_STR, 0,                 84, SL_MAX_VERSION),
 | 
			
		||||
	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_CONDSTR(Engine, name,                SLE_STR, 0,                 SLV_84, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDNULL(16,                                                       2, 143), // old reserved space
 | 
			
		||||
	SLE_CONDNULL(16,                                                       SLV_2, SLV_144), // old reserved space
 | 
			
		||||
 | 
			
		||||
	SLE_END()
 | 
			
		||||
};
 | 
			
		||||
@@ -105,7 +105,7 @@ static void Load_ENGN()
 | 
			
		||||
		Engine *e = GetTempDataEngine(index);
 | 
			
		||||
		SlObject(e, _engine_desc);
 | 
			
		||||
 | 
			
		||||
		if (IsSavegameVersionBefore(179)) {
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_179)) {
 | 
			
		||||
			/* preview_company_rank was replaced with preview_company and preview_asked.
 | 
			
		||||
			 * Just cancel any previews. */
 | 
			
		||||
			e->flags &= ~4; // ENGINE_OFFER_WINDOW_OPEN
 | 
			
		||||
 
 | 
			
		||||
@@ -114,9 +114,9 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = {
 | 
			
		||||
 * and return the combination of the two tests using the operator defined in the constructor.
 | 
			
		||||
 * Otherwise just returns the result of the savegame version test
 | 
			
		||||
 */
 | 
			
		||||
bool SlXvFeatureTest::IsFeaturePresent(uint16 savegame_version, uint16 savegame_version_from, uint16 savegame_version_to) const
 | 
			
		||||
bool SlXvFeatureTest::IsFeaturePresent(SaveLoadVersion savegame_version, SaveLoadVersion savegame_version_from, SaveLoadVersion savegame_version_to) const
 | 
			
		||||
{
 | 
			
		||||
	bool savegame_version_ok = savegame_version >= savegame_version_from && savegame_version <= savegame_version_to;
 | 
			
		||||
	bool savegame_version_ok = savegame_version >= savegame_version_from && savegame_version < savegame_version_to;
 | 
			
		||||
 | 
			
		||||
	if (this->functor) return (*this->functor)(savegame_version, savegame_version_ok);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -16,6 +16,8 @@
 | 
			
		||||
 | 
			
		||||
#include <vector>
 | 
			
		||||
 | 
			
		||||
enum SaveLoadVersion : uint16;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * List of extended features, each feature has its own (16 bit) version
 | 
			
		||||
 */
 | 
			
		||||
@@ -112,7 +114,7 @@ struct SlXvFeatureTest {
 | 
			
		||||
	SlXvFeatureTest(TestFunctorPtr functor_)
 | 
			
		||||
			: min_version(0), max_version(0), feature(XSLFI_NULL), op(XSLFTO_OR), functor(functor_) { }
 | 
			
		||||
 | 
			
		||||
	bool IsFeaturePresent(uint16 savegame_version, uint16 savegame_version_from, uint16 savegame_version_to) const;
 | 
			
		||||
	bool IsFeaturePresent(SaveLoadVersion savegame_version, SaveLoadVersion savegame_version_from, SaveLoadVersion savegame_version_to) const;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
bool SlXvIsFeaturePresent(SlXvFeatureIndex feature, uint16 min_version = 1, uint16 max_version = 0xFFFF);
 | 
			
		||||
 
 | 
			
		||||
@@ -28,11 +28,11 @@ static const SaveLoad _glog_mode_desc[] = {
 | 
			
		||||
	SLE_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static char old_revision_text[NETWORK_REVISION_LENGTH];
 | 
			
		||||
static char old_revision_text[GAMELOG_REVISION_LENGTH];
 | 
			
		||||
 | 
			
		||||
static const SaveLoad _glog_revision_desc[] = {
 | 
			
		||||
	SLEG_CONDARR_X(old_revision_text,        SLE_UINT8, NETWORK_REVISION_LENGTH, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_EXTENDED_GAMELOG, 0, 0)),
 | 
			
		||||
	SLE_CONDSTR_X(LoggedChange, revision.text, SLE_STR,                       0, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_EXTENDED_GAMELOG)),
 | 
			
		||||
	SLEG_CONDARR_X(old_revision_text,        SLE_UINT8, GAMELOG_REVISION_LENGTH, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_EXTENDED_GAMELOG, 0, 0)),
 | 
			
		||||
	SLE_CONDSTR_X(LoggedChange, revision.text, SLE_STR,                       0, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_EXTENDED_GAMELOG)),
 | 
			
		||||
	SLE_VAR(LoggedChange, revision.newgrf,   SLE_UINT32),
 | 
			
		||||
	SLE_VAR(LoggedChange, revision.slver,    SLE_UINT16),
 | 
			
		||||
	SLE_VAR(LoggedChange, revision.modified, SLE_UINT8),
 | 
			
		||||
 
 | 
			
		||||
@@ -21,8 +21,8 @@ static const SaveLoad _goals_desc[] = {
 | 
			
		||||
	    SLE_VAR(Goal, type,      SLE_FILE_U16 | SLE_VAR_U8),
 | 
			
		||||
	    SLE_VAR(Goal, dst,       SLE_UINT32),
 | 
			
		||||
	    SLE_STR(Goal, text,      SLE_STR | SLF_ALLOW_CONTROL, 0),
 | 
			
		||||
	SLE_CONDSTR(Goal, progress,  SLE_STR | SLF_ALLOW_CONTROL, 0, 182, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Goal, completed, SLE_BOOL, 182, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDSTR(Goal, progress,  SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_182, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Goal, completed, SLE_BOOL, SLV_182, SL_MAX_VERSION),
 | 
			
		||||
	    SLE_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -18,16 +18,16 @@
 | 
			
		||||
#include "../safeguards.h"
 | 
			
		||||
 | 
			
		||||
static const SaveLoad _group_desc[] = {
 | 
			
		||||
	 SLE_CONDVAR(Group, name,               SLE_NAME,                       0,  83),
 | 
			
		||||
	 SLE_CONDSTR(Group, name,               SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDNULL(2,                                                         0,  163), // num_vehicle
 | 
			
		||||
	 SLE_CONDVAR(Group, name,               SLE_NAME,                       SL_MIN_VERSION,  SLV_84),
 | 
			
		||||
	 SLE_CONDSTR(Group, name,               SLE_STR | SLF_ALLOW_CONTROL, 0, 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, replace_protection, SLE_BOOL),
 | 
			
		||||
	 SLE_CONDVAR(Group, livery.in_use,      SLE_UINT8,                     205, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDVAR(Group, livery.colour1,     SLE_UINT8,                     205, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDVAR(Group, livery.colour2,     SLE_UINT8,                     205, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDVAR(Group, parent,             SLE_UINT16,                    189, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDVAR(Group, livery.in_use,      SLE_UINT8,                     SLV_GROUP_LIVERIES, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDVAR(Group, livery.colour1,     SLE_UINT8,                     SLV_GROUP_LIVERIES, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDVAR(Group, livery.colour2,     SLE_UINT8,                     SLV_GROUP_LIVERIES, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDVAR(Group, parent,             SLE_UINT16,                    SLV_189, SL_MAX_VERSION),
 | 
			
		||||
	     SLE_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -50,9 +50,9 @@ static void Load_GRPS()
 | 
			
		||||
		Group *g = new (index) Group();
 | 
			
		||||
		SlObject(g, _group_desc);
 | 
			
		||||
 | 
			
		||||
		if (IsSavegameVersionBefore(189)) g->parent = INVALID_GROUP;
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_189)) g->parent = INVALID_GROUP;
 | 
			
		||||
 | 
			
		||||
		if (IsSavegameVersionBefore(205)) {
 | 
			
		||||
		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;
 | 
			
		||||
 
 | 
			
		||||
@@ -20,58 +20,58 @@
 | 
			
		||||
static OldPersistentStorage _old_ind_persistent_storage;
 | 
			
		||||
 | 
			
		||||
static const SaveLoad _industry_desc[] = {
 | 
			
		||||
	SLE_CONDVAR(Industry, location.tile,              SLE_FILE_U16 | SLE_VAR_U32,  0, 5),
 | 
			
		||||
	SLE_CONDVAR(Industry, location.tile,              SLE_UINT32,                  6, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Industry, location.tile,              SLE_FILE_U16 | SLE_VAR_U32,  SL_MIN_VERSION, SLV_6),
 | 
			
		||||
	SLE_CONDVAR(Industry, location.tile,              SLE_UINT32,                  SLV_6, SL_MAX_VERSION),
 | 
			
		||||
	    SLE_VAR(Industry, location.w,                 SLE_FILE_U8 | SLE_VAR_U16),
 | 
			
		||||
	    SLE_VAR(Industry, location.h,                 SLE_FILE_U8 | SLE_VAR_U16),
 | 
			
		||||
	    SLE_REF(Industry, town,                       REF_TOWN),
 | 
			
		||||
	SLE_CONDNULL( 2, 0, 60),       ///< used to be industry's produced_cargo
 | 
			
		||||
	SLE_CONDARR(Industry, produced_cargo,             SLE_UINT8,   2,              78, 201),
 | 
			
		||||
	SLE_CONDARR(Industry, produced_cargo,             SLE_UINT8,  16,             202, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDARR(Industry, incoming_cargo_waiting,     SLE_UINT16,  3,              70, 201),
 | 
			
		||||
	SLE_CONDARR(Industry, incoming_cargo_waiting,     SLE_UINT16, 16,             202, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDARR(Industry, produced_cargo_waiting,     SLE_UINT16,  2,               0, 201),
 | 
			
		||||
	SLE_CONDARR(Industry, produced_cargo_waiting,     SLE_UINT16, 16,             202, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDARR(Industry, production_rate,            SLE_UINT8,   2,               0, 201),
 | 
			
		||||
	SLE_CONDARR(Industry, production_rate,            SLE_UINT8,  16,             202, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDNULL( 3, 0, 60),       ///< used to be industry's accepts_cargo
 | 
			
		||||
	SLE_CONDARR(Industry, accepts_cargo,              SLE_UINT8,   3,              78, 201),
 | 
			
		||||
	SLE_CONDARR(Industry, accepts_cargo,              SLE_UINT8,  16,             202, 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),
 | 
			
		||||
	SLE_CONDARR(Industry, incoming_cargo_waiting,     SLE_UINT16, 16,             SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDARR(Industry, produced_cargo_waiting,     SLE_UINT16,  2,               SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS),
 | 
			
		||||
	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),
 | 
			
		||||
	SLE_CONDARR(Industry, this_month_production,      SLE_UINT16,  2,               0, 201),
 | 
			
		||||
	SLE_CONDARR(Industry, this_month_production,      SLE_UINT16, 16,             202, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDARR(Industry, this_month_transported,     SLE_UINT16,  2,               0, 201),
 | 
			
		||||
	SLE_CONDARR(Industry, this_month_transported,     SLE_UINT16, 16,             202, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDARR(Industry, last_month_pct_transported, SLE_UINT8,   2,               0, 201),
 | 
			
		||||
	SLE_CONDARR(Industry, last_month_pct_transported, SLE_UINT8,  16,             202, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDARR(Industry, last_month_production,      SLE_UINT16,  2,               0, 201),
 | 
			
		||||
	SLE_CONDARR(Industry, last_month_production,      SLE_UINT16, 16,             202, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDARR(Industry, last_month_transported,     SLE_UINT16,  2,               0, 201),
 | 
			
		||||
	SLE_CONDARR(Industry, last_month_transported,     SLE_UINT16, 16,             202, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDARR(Industry, this_month_production,      SLE_UINT16,  2,               SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS),
 | 
			
		||||
	SLE_CONDARR(Industry, this_month_production,      SLE_UINT16, 16,             SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDARR(Industry, this_month_transported,     SLE_UINT16,  2,               SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS),
 | 
			
		||||
	SLE_CONDARR(Industry, this_month_transported,     SLE_UINT16, 16,             SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDARR(Industry, last_month_pct_transported, SLE_UINT8,   2,               SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS),
 | 
			
		||||
	SLE_CONDARR(Industry, last_month_pct_transported, SLE_UINT8,  16,             SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDARR(Industry, last_month_production,      SLE_UINT16,  2,               SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS),
 | 
			
		||||
	SLE_CONDARR(Industry, last_month_production,      SLE_UINT16, 16,             SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDARR(Industry, last_month_transported,     SLE_UINT16,  2,               SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS),
 | 
			
		||||
	SLE_CONDARR(Industry, last_month_transported,     SLE_UINT16, 16,             SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	    SLE_VAR(Industry, counter,                    SLE_UINT16),
 | 
			
		||||
 | 
			
		||||
	    SLE_VAR(Industry, type,                       SLE_UINT8),
 | 
			
		||||
	    SLE_VAR(Industry, owner,                      SLE_UINT8),
 | 
			
		||||
	    SLE_VAR(Industry, random_colour,              SLE_UINT8),
 | 
			
		||||
	SLE_CONDVAR(Industry, last_prod_year,             SLE_FILE_U8 | SLE_VAR_I32,  0, 30),
 | 
			
		||||
	SLE_CONDVAR(Industry, last_prod_year,             SLE_INT32,                 31, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Industry, last_prod_year,             SLE_FILE_U8 | SLE_VAR_I32,  SL_MIN_VERSION, SLV_31),
 | 
			
		||||
	SLE_CONDVAR(Industry, last_prod_year,             SLE_INT32,                 SLV_31, SL_MAX_VERSION),
 | 
			
		||||
	    SLE_VAR(Industry, was_cargo_delivered,        SLE_UINT8),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDVAR(Industry, founder,                    SLE_UINT8,                 70, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Industry, construction_date,          SLE_INT32,                 70, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Industry, construction_type,          SLE_UINT8,                 70, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Industry, last_cargo_accepted_at[0],  SLE_INT32,                 70, 201),
 | 
			
		||||
	SLE_CONDARR(Industry, last_cargo_accepted_at,     SLE_INT32, 16,            202, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Industry, selected_layout,            SLE_UINT8,                 73, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Industry, founder,                    SLE_UINT8,                 SLV_70, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Industry, construction_date,          SLE_INT32,                 SLV_70, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Industry, construction_type,          SLE_UINT8,                 SLV_70, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Industry, last_cargo_accepted_at[0],  SLE_INT32,                 SLV_70, SLV_EXTEND_INDUSTRY_CARGO_SLOTS),
 | 
			
		||||
	SLE_CONDARR(Industry, last_cargo_accepted_at,     SLE_INT32, 16,            SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Industry, selected_layout,            SLE_UINT8,                 SLV_73, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLEG_CONDARR(_old_ind_persistent_storage.storage, SLE_UINT32, 16,            76, 160),
 | 
			
		||||
	SLE_CONDREF(Industry, psa,                        REF_STORAGE,              161, SL_MAX_VERSION),
 | 
			
		||||
	SLEG_CONDARR(_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, 82, 196), // random_triggers
 | 
			
		||||
	SLE_CONDVAR(Industry, random,                     SLE_UINT16,                82, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDNULL(1, SLV_82, SLV_197), // random_triggers
 | 
			
		||||
	SLE_CONDVAR(Industry, random,                     SLE_UINT16,                SLV_82, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDNULL(32, 2, 143), // old reserved space
 | 
			
		||||
	SLE_CONDNULL(32, SLV_2, SLV_144), // old reserved space
 | 
			
		||||
 | 
			
		||||
	SLE_END()
 | 
			
		||||
};
 | 
			
		||||
@@ -108,7 +108,7 @@ static void Load_INDY()
 | 
			
		||||
		SlObject(i, _industry_desc);
 | 
			
		||||
 | 
			
		||||
		/* Before savegame version 161, persistent storages were not stored in a pool. */
 | 
			
		||||
		if (IsSavegameVersionBefore(161) && !IsSavegameVersionBefore(76)) {
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_161) && !IsSavegameVersionBefore(SLV_76)) {
 | 
			
		||||
			/* Store the old persistent storage. The GRFID will be added later. */
 | 
			
		||||
			assert(PersistentStorage::CanAllocateItem());
 | 
			
		||||
			i->psa = new PersistentStorage(0, 0, 0);
 | 
			
		||||
 
 | 
			
		||||
@@ -83,7 +83,7 @@ const SaveLoad *GetLinkGraphJobDesc()
 | 
			
		||||
 | 
			
		||||
		const SaveLoad job_desc[] = {
 | 
			
		||||
			SLE_VAR(LinkGraphJob, join_date_ticks,  SLE_INT32),
 | 
			
		||||
			SLE_CONDVAR_X(LinkGraphJob, start_date_ticks,  SLE_INT32, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_LINKGRAPH_DAY_SCALE)),
 | 
			
		||||
			SLE_CONDVAR_X(LinkGraphJob, start_date_ticks,  SLE_INT32, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_LINKGRAPH_DAY_SCALE)),
 | 
			
		||||
			SLE_VAR(LinkGraphJob, link_graph.index, SLE_UINT16),
 | 
			
		||||
			SLE_END()
 | 
			
		||||
		};
 | 
			
		||||
@@ -117,7 +117,7 @@ const SaveLoad *GetLinkGraphScheduleDesc()
 | 
			
		||||
 * SaveLoad desc for a link graph node.
 | 
			
		||||
 */
 | 
			
		||||
static const SaveLoad _node_desc[] = {
 | 
			
		||||
	SLE_CONDVAR(Node, xy,          SLE_UINT32, 191, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Node, xy,          SLE_UINT32, SLV_191, SL_MAX_VERSION),
 | 
			
		||||
	    SLE_VAR(Node, supply,      SLE_UINT32),
 | 
			
		||||
	    SLE_VAR(Node, demand,      SLE_UINT32),
 | 
			
		||||
	    SLE_VAR(Node, station,     SLE_UINT16),
 | 
			
		||||
@@ -129,11 +129,11 @@ static const SaveLoad _node_desc[] = {
 | 
			
		||||
 * SaveLoad desc for a link graph edge.
 | 
			
		||||
 */
 | 
			
		||||
static const SaveLoad _edge_desc[] = {
 | 
			
		||||
	SLE_CONDNULL(4, 0, 190), // distance
 | 
			
		||||
	SLE_CONDNULL(4, SL_MIN_VERSION, SLV_191), // distance
 | 
			
		||||
	     SLE_VAR(Edge, capacity,                 SLE_UINT32),
 | 
			
		||||
	     SLE_VAR(Edge, usage,                    SLE_UINT32),
 | 
			
		||||
	     SLE_VAR(Edge, last_unrestricted_update, SLE_INT32),
 | 
			
		||||
	 SLE_CONDVAR(Edge, last_restricted_update,   SLE_INT32, 187, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDVAR(Edge, last_restricted_update,   SLE_INT32, SLV_187, SL_MAX_VERSION),
 | 
			
		||||
	     SLE_VAR(Edge, next_edge,                SLE_UINT16),
 | 
			
		||||
	     SLE_END()
 | 
			
		||||
};
 | 
			
		||||
@@ -148,7 +148,7 @@ void SaveLoad_LinkGraph(LinkGraph &lg)
 | 
			
		||||
	for (NodeID from = 0; from < size; ++from) {
 | 
			
		||||
		Node *node = &lg.nodes[from];
 | 
			
		||||
		SlObject(node, _node_desc);
 | 
			
		||||
		if (IsSavegameVersionBefore(191)) {
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_191)) {
 | 
			
		||||
			/* We used to save the full matrix ... */
 | 
			
		||||
			for (NodeID to = 0; to < size; ++to) {
 | 
			
		||||
				SlObject(&lg.edges[from][to], _edge_desc);
 | 
			
		||||
@@ -240,7 +240,7 @@ static void Load_LGRS()
 | 
			
		||||
 */
 | 
			
		||||
void AfterLoadLinkGraphs()
 | 
			
		||||
{
 | 
			
		||||
	if (IsSavegameVersionBefore(191)) {
 | 
			
		||||
	if (IsSavegameVersionBefore(SLV_191)) {
 | 
			
		||||
		LinkGraph *lg;
 | 
			
		||||
		FOR_ALL_LINK_GRAPHS(lg) {
 | 
			
		||||
			for (NodeID node_id = 0; node_id < lg->Size(); ++node_id) {
 | 
			
		||||
 
 | 
			
		||||
@@ -25,8 +25,8 @@ static uint32 _map_dim_x;
 | 
			
		||||
static uint32 _map_dim_y;
 | 
			
		||||
 | 
			
		||||
static const SaveLoadGlobVarList _map_dimensions[] = {
 | 
			
		||||
	SLEG_CONDVAR(_map_dim_x, SLE_UINT32, 6, SL_MAX_VERSION),
 | 
			
		||||
	SLEG_CONDVAR(_map_dim_y, SLE_UINT32, 6, SL_MAX_VERSION),
 | 
			
		||||
	SLEG_CONDVAR(_map_dim_x, SLE_UINT32, SLV_6, SL_MAX_VERSION),
 | 
			
		||||
	SLEG_CONDVAR(_map_dim_y, SLE_UINT32, SLV_6, SL_MAX_VERSION),
 | 
			
		||||
	    SLEG_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -96,7 +96,7 @@ static void Load_MAP2()
 | 
			
		||||
	for (TileIndex i = 0; i != size;) {
 | 
			
		||||
		SlArray(buf, MAP_SL_BUF_SIZE,
 | 
			
		||||
			/* In those versions the m2 was 8 bits */
 | 
			
		||||
			IsSavegameVersionBefore(5) ? SLE_FILE_U8 | SLE_VAR_U16 : SLE_UINT16
 | 
			
		||||
			IsSavegameVersionBefore(SLV_5) ? SLE_FILE_U8 | SLE_VAR_U16 : SLE_UINT16
 | 
			
		||||
		);
 | 
			
		||||
		for (uint j = 0; j != MAP_SL_BUF_SIZE; j++) _m[i++].m2 = buf[j];
 | 
			
		||||
	}
 | 
			
		||||
@@ -140,7 +140,7 @@ static void Load_MAP6()
 | 
			
		||||
	SmallStackSafeStackAlloc<byte, MAP_SL_BUF_SIZE> buf;
 | 
			
		||||
	TileIndex size = MapSize();
 | 
			
		||||
 | 
			
		||||
	if (IsSavegameVersionBefore(42)) {
 | 
			
		||||
	if (IsSavegameVersionBefore(SLV_42)) {
 | 
			
		||||
		for (TileIndex i = 0; i != size;) {
 | 
			
		||||
			/* 1024, otherwise we overflow on 64x64 maps! */
 | 
			
		||||
			SlArray(buf, 1024, SLE_UINT8);
 | 
			
		||||
 
 | 
			
		||||
@@ -71,54 +71,54 @@ void ResetViewportAfterLoadGame()
 | 
			
		||||
byte _age_cargo_skip_counter; ///< Skip aging of cargo? Used before savegame version 162.
 | 
			
		||||
 | 
			
		||||
static const SaveLoadGlobVarList _date_desc[] = {
 | 
			
		||||
	SLEG_CONDVAR(_date,                   SLE_FILE_U16 | SLE_VAR_I32,  0,  30),
 | 
			
		||||
	SLEG_CONDVAR(_date,                   SLE_INT32,                  31, SL_MAX_VERSION),
 | 
			
		||||
	SLEG_CONDVAR(_date,                   SLE_FILE_U16 | SLE_VAR_I32,  SL_MIN_VERSION,  SLV_31),
 | 
			
		||||
	SLEG_CONDVAR(_date,                   SLE_INT32,                  SLV_31, SL_MAX_VERSION),
 | 
			
		||||
	    SLEG_VAR(_date_fract,             SLE_UINT16),
 | 
			
		||||
	    SLEG_VAR(_tick_counter,           SLE_UINT16),
 | 
			
		||||
	SLEG_CONDVAR_X(_tick_skip_counter,    SLE_UINT8,                   0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_VARIABLE_DAY_LENGTH)),
 | 
			
		||||
	SLE_CONDNULL(2, 0, 156), // _vehicle_id_ctr_day
 | 
			
		||||
	SLEG_CONDVAR(_age_cargo_skip_counter, SLE_UINT8,                   0, 161),
 | 
			
		||||
	SLE_CONDNULL(1, 0, 45),
 | 
			
		||||
	SLEG_CONDVAR(_cur_tileloop_tile,      SLE_FILE_U16 | SLE_VAR_U32,  0, 5),
 | 
			
		||||
	SLEG_CONDVAR(_cur_tileloop_tile,      SLE_UINT32,                  6, SL_MAX_VERSION),
 | 
			
		||||
	SLEG_CONDVAR_X(_tick_skip_counter,    SLE_UINT8,                   SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_VARIABLE_DAY_LENGTH)),
 | 
			
		||||
	SLE_CONDNULL(2, SL_MIN_VERSION, SLV_157), // _vehicle_id_ctr_day
 | 
			
		||||
	SLEG_CONDVAR(_age_cargo_skip_counter, SLE_UINT8,                   SL_MIN_VERSION, SLV_162),
 | 
			
		||||
	SLE_CONDNULL(1, SL_MIN_VERSION, SLV_46),
 | 
			
		||||
	SLEG_CONDVAR(_cur_tileloop_tile,      SLE_FILE_U16 | SLE_VAR_U32,  SL_MIN_VERSION, SLV_6),
 | 
			
		||||
	SLEG_CONDVAR(_cur_tileloop_tile,      SLE_UINT32,                  SLV_6, SL_MAX_VERSION),
 | 
			
		||||
	    SLEG_VAR(_disaster_delay,         SLE_UINT16),
 | 
			
		||||
	SLE_CONDNULL(2, 0, 119),
 | 
			
		||||
	SLE_CONDNULL(2, SL_MIN_VERSION, SLV_120),
 | 
			
		||||
	    SLEG_VAR(_random.state[0],        SLE_UINT32),
 | 
			
		||||
	    SLEG_VAR(_random.state[1],        SLE_UINT32),
 | 
			
		||||
	SLE_CONDNULL(1,  0,   9),
 | 
			
		||||
	SLE_CONDNULL(4, 10, 119),
 | 
			
		||||
	SLE_CONDNULL(1,  SL_MIN_VERSION,  SLV_10),
 | 
			
		||||
	SLE_CONDNULL(4, SLV_10, SLV_120),
 | 
			
		||||
	    SLEG_VAR(_cur_company_tick_index, SLE_FILE_U8  | SLE_VAR_U32),
 | 
			
		||||
	SLEG_CONDVAR(_next_competitor_start,  SLE_FILE_U16 | SLE_VAR_U32,  0, 108),
 | 
			
		||||
	SLEG_CONDVAR(_next_competitor_start,  SLE_UINT32,                109, SL_MAX_VERSION),
 | 
			
		||||
	SLEG_CONDVAR(_next_competitor_start,  SLE_FILE_U16 | SLE_VAR_U32,  SL_MIN_VERSION, SLV_109),
 | 
			
		||||
	SLEG_CONDVAR(_next_competitor_start,  SLE_UINT32,                SLV_109, SL_MAX_VERSION),
 | 
			
		||||
	    SLEG_VAR(_trees_tick_ctr,         SLE_UINT8),
 | 
			
		||||
	SLEG_CONDVAR(_pause_mode,             SLE_UINT8,                   4, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDNULL(4, 11, 119),
 | 
			
		||||
	SLEG_CONDVAR(_pause_mode,             SLE_UINT8,                   SLV_4, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDNULL(4, SLV_11, SLV_120),
 | 
			
		||||
	    SLEG_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const SaveLoadGlobVarList _date_check_desc[] = {
 | 
			
		||||
	SLEG_CONDVAR(_load_check_data.current_date,  SLE_FILE_U16 | SLE_VAR_I32,  0,  30),
 | 
			
		||||
	SLEG_CONDVAR(_load_check_data.current_date,  SLE_INT32,                  31, SL_MAX_VERSION),
 | 
			
		||||
	SLEG_CONDVAR(_load_check_data.current_date,  SLE_FILE_U16 | SLE_VAR_I32,  SL_MIN_VERSION,  SLV_31),
 | 
			
		||||
	SLEG_CONDVAR(_load_check_data.current_date,  SLE_INT32,                  SLV_31, SL_MAX_VERSION),
 | 
			
		||||
	    SLE_NULL(2),                       // _date_fract
 | 
			
		||||
	    SLE_NULL(2),                       // _tick_counter
 | 
			
		||||
	SLE_CONDNULL_X(1, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_VARIABLE_DAY_LENGTH)), // _tick_skip_counter
 | 
			
		||||
	SLE_CONDNULL(2, 0, 156),               // _vehicle_id_ctr_day
 | 
			
		||||
	SLE_CONDNULL(1, 0, 161),               // _age_cargo_skip_counter
 | 
			
		||||
	SLE_CONDNULL(1, 0, 45),
 | 
			
		||||
	SLE_CONDNULL(2, 0, 5),                 // _cur_tileloop_tile
 | 
			
		||||
	SLE_CONDNULL(4, 6, SL_MAX_VERSION),    // _cur_tileloop_tile
 | 
			
		||||
	SLE_CONDNULL_X(1, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_VARIABLE_DAY_LENGTH)), // _tick_skip_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, 0, 119),
 | 
			
		||||
	SLE_CONDNULL(2, SL_MIN_VERSION, SLV_120),
 | 
			
		||||
	    SLE_NULL(4),                       // _random.state[0]
 | 
			
		||||
	    SLE_NULL(4),                       // _random.state[1]
 | 
			
		||||
	SLE_CONDNULL(1,  0,   9),
 | 
			
		||||
	SLE_CONDNULL(4, 10, 119),
 | 
			
		||||
	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, 0, 108),               // _next_competitor_start
 | 
			
		||||
	SLE_CONDNULL(4, 109, SL_MAX_VERSION),  // _next_competitor_start
 | 
			
		||||
	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, 4, SL_MAX_VERSION),    // _pause_mode
 | 
			
		||||
	SLE_CONDNULL(4, 11, 119),
 | 
			
		||||
	SLE_CONDNULL(1, SLV_4, SL_MAX_VERSION),    // _pause_mode
 | 
			
		||||
	SLE_CONDNULL(4, SLV_11, SLV_120),
 | 
			
		||||
	    SLEG_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -133,17 +133,17 @@ static void SaveLoad_DATE()
 | 
			
		||||
static void Check_DATE()
 | 
			
		||||
{
 | 
			
		||||
	SlGlobList(_date_check_desc);
 | 
			
		||||
	if (IsSavegameVersionBefore(31)) {
 | 
			
		||||
	if (IsSavegameVersionBefore(SLV_31)) {
 | 
			
		||||
		_load_check_data.current_date += DAYS_TILL_ORIGINAL_BASE_YEAR;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static const SaveLoadGlobVarList _view_desc[] = {
 | 
			
		||||
	SLEG_CONDVAR(_saved_scrollpos_x,    SLE_FILE_I16 | SLE_VAR_I32, 0, 5),
 | 
			
		||||
	SLEG_CONDVAR(_saved_scrollpos_x,    SLE_INT32,                  6, SL_MAX_VERSION),
 | 
			
		||||
	SLEG_CONDVAR(_saved_scrollpos_y,    SLE_FILE_I16 | SLE_VAR_I32, 0, 5),
 | 
			
		||||
	SLEG_CONDVAR(_saved_scrollpos_y,    SLE_INT32,                  6, SL_MAX_VERSION),
 | 
			
		||||
	SLEG_CONDVAR(_saved_scrollpos_x,    SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_6),
 | 
			
		||||
	SLEG_CONDVAR(_saved_scrollpos_x,    SLE_INT32,                  SLV_6, SL_MAX_VERSION),
 | 
			
		||||
	SLEG_CONDVAR(_saved_scrollpos_y,    SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_6),
 | 
			
		||||
	SLEG_CONDVAR(_saved_scrollpos_y,    SLE_INT32,                  SLV_6, SL_MAX_VERSION),
 | 
			
		||||
	    SLEG_VAR(_saved_scrollpos_zoom, SLE_UINT8),
 | 
			
		||||
	    SLEG_END()
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -61,10 +61,10 @@ static const SaveLoad _grfconfig_desc[] = {
 | 
			
		||||
	    SLE_STR(GRFConfig, filename,         SLE_STR,    0x40),
 | 
			
		||||
	    SLE_VAR(GRFConfig, ident.grfid,      SLE_UINT32),
 | 
			
		||||
	    SLE_ARR(GRFConfig, ident.md5sum,     SLE_UINT8,  16),
 | 
			
		||||
	SLE_CONDVAR(GRFConfig, version,          SLE_UINT32, 151, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(GRFConfig, version,          SLE_UINT32, SLV_151, SL_MAX_VERSION),
 | 
			
		||||
	    SLE_ARR(GRFConfig, param,            SLE_UINT32, 0x80),
 | 
			
		||||
	    SLE_VAR(GRFConfig, num_params,       SLE_UINT8),
 | 
			
		||||
	SLE_CONDVAR(GRFConfig, palette,          SLE_UINT8,  101, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(GRFConfig, palette,          SLE_UINT8,  SLV_101, SL_MAX_VERSION),
 | 
			
		||||
	SLE_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -87,7 +87,7 @@ static void Load_NGRF_common(GRFConfig *&grfconfig)
 | 
			
		||||
	while (SlIterateArray() != -1) {
 | 
			
		||||
		GRFConfig *c = new GRFConfig();
 | 
			
		||||
		SlObject(c, _grfconfig_desc);
 | 
			
		||||
		if (IsSavegameVersionBefore(101)) c->SetSuitablePalette();
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_101)) c->SetSuitablePalette();
 | 
			
		||||
		AppendToGRFConfigList(&grfconfig, c);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -24,9 +24,9 @@ static const SaveLoad _object_desc[] = {
 | 
			
		||||
	    SLE_VAR(Object, location.h,                 SLE_FILE_U8 | SLE_VAR_U16),
 | 
			
		||||
	    SLE_REF(Object, town,                       REF_TOWN),
 | 
			
		||||
	    SLE_VAR(Object, build_date,                 SLE_UINT32),
 | 
			
		||||
	SLE_CONDVAR(Object, colour,                     SLE_UINT8,                  148, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Object, view,                       SLE_UINT8,                  155, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Object, type,                       SLE_UINT16,                 186, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Object, colour,                     SLE_UINT8,                  SLV_148, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Object, view,                       SLE_UINT8,                  SLV_155, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Object, type,                       SLE_UINT16,                 SLV_186, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLE_END()
 | 
			
		||||
};
 | 
			
		||||
@@ -56,7 +56,7 @@ static void Ptrs_OBJS()
 | 
			
		||||
	Object *o;
 | 
			
		||||
	FOR_ALL_OBJECTS(o) {
 | 
			
		||||
		SlObject(o, _object_desc);
 | 
			
		||||
		if (IsSavegameVersionBefore(148) && !IsTileType(o->location.tile, MP_OBJECT)) {
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_148) && !IsTileType(o->location.tile, MP_OBJECT)) {
 | 
			
		||||
			/* Due to a small bug stale objects could remain. */
 | 
			
		||||
			delete o;
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@ void Order::ConvertFromOldSavegame()
 | 
			
		||||
	this->flags = 0;
 | 
			
		||||
 | 
			
		||||
	/* First handle non-stop - use value from savegame if possible, else use value from config file */
 | 
			
		||||
	if (_settings_client.gui.sg_new_nonstop || (IsSavegameVersionBefore(22) && _savegame_type != SGT_TTO && _savegame_type != SGT_TTD && _settings_client.gui.new_nonstop)) {
 | 
			
		||||
	if (_settings_client.gui.sg_new_nonstop || (IsSavegameVersionBefore(SLV_22) && _savegame_type != SGT_TTO && _savegame_type != SGT_TTD && _settings_client.gui.new_nonstop)) {
 | 
			
		||||
		/* OFB_NON_STOP */
 | 
			
		||||
		this->SetNonStopType((old_flags & 8) ? ONSF_NO_STOP_AT_ANY_STATION : ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS);
 | 
			
		||||
	} else {
 | 
			
		||||
@@ -49,7 +49,7 @@ void Order::ConvertFromOldSavegame()
 | 
			
		||||
			this->SetLoadType(OLF_LOAD_IF_POSSIBLE);
 | 
			
		||||
		} else {
 | 
			
		||||
			/* old OTTD versions stored full_load_any in config file - assume it was enabled when loading */
 | 
			
		||||
			this->SetLoadType(_settings_client.gui.sg_full_load_any || IsSavegameVersionBefore(22) ? OLF_FULL_LOAD_ANY : OLFB_FULL_LOAD);
 | 
			
		||||
			this->SetLoadType(_settings_client.gui.sg_full_load_any || IsSavegameVersionBefore(SLV_22) ? OLF_FULL_LOAD_ANY : OLFB_FULL_LOAD);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (this->IsType(OT_GOTO_STATION)) this->SetStopLocation(OSL_PLATFORM_FAR_END);
 | 
			
		||||
@@ -106,22 +106,22 @@ const SaveLoad *GetOrderDescription()
 | 
			
		||||
	static const SaveLoad _order_desc[] = {
 | 
			
		||||
		     SLE_VAR(Order, type,           SLE_UINT8),
 | 
			
		||||
		     SLE_VAR(Order, flags,          SLE_UINT8),
 | 
			
		||||
		SLE_CONDNULL_X(1, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
 | 
			
		||||
		SLE_CONDNULL_X(1, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
 | 
			
		||||
		     SLE_VAR(Order, dest,           SLE_UINT16),
 | 
			
		||||
		     SLE_REF(Order, next,           REF_ORDER),
 | 
			
		||||
		 SLE_CONDVAR(Order, refit_cargo,    SLE_UINT8,   36, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDNULL(1,                                  36, 181), // refit_subtype
 | 
			
		||||
		SLE_CONDVAR_X(Order, occupancy,     SLE_UINT8,    0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_ORDER_OCCUPANCY)),
 | 
			
		||||
		SLE_CONDVAR_X(Order, wait_time,     SLE_FILE_U16 | SLE_VAR_U32,  67, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA, 0, 5)),
 | 
			
		||||
		SLE_CONDVAR_X(Order, wait_time,     SLE_UINT32,                  67, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA, 6)),
 | 
			
		||||
		SLE_CONDVAR_X(Order, travel_time,   SLE_FILE_U16 | SLE_VAR_U32,  67, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA, 0, 5)),
 | 
			
		||||
		SLE_CONDVAR_X(Order, travel_time,   SLE_UINT32,                  67, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA, 6)),
 | 
			
		||||
		 SLE_CONDVAR(Order, max_speed,      SLE_UINT16, 172, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDVAR_X(Order, jump_counter,  SLE_INT8,     0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_MORE_COND_ORDERS)),
 | 
			
		||||
		 SLE_CONDVAR(Order, refit_cargo,    SLE_UINT8,   SLV_36, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDNULL(1,                                  SLV_36, SLV_182), // refit_subtype
 | 
			
		||||
		SLE_CONDVAR_X(Order, occupancy,     SLE_UINT8,           SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_ORDER_OCCUPANCY)),
 | 
			
		||||
		SLE_CONDVAR_X(Order, wait_time,     SLE_FILE_U16 | SLE_VAR_U32,  SLV_67, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA, 0, 5)),
 | 
			
		||||
		SLE_CONDVAR_X(Order, wait_time,     SLE_UINT32,                  SLV_67, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA, 6)),
 | 
			
		||||
		SLE_CONDVAR_X(Order, travel_time,   SLE_FILE_U16 | SLE_VAR_U32,  SLV_67, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA, 0, 5)),
 | 
			
		||||
		SLE_CONDVAR_X(Order, travel_time,   SLE_UINT32,                  SLV_67, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA, 6)),
 | 
			
		||||
		 SLE_CONDVAR(Order, max_speed,      SLE_UINT16, SLV_172, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDVAR_X(Order, jump_counter,  SLE_INT8,            SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_MORE_COND_ORDERS)),
 | 
			
		||||
 | 
			
		||||
		/* 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,                                  5,  35),
 | 
			
		||||
		SLE_CONDNULL(10,                                  SLV_5,  SLV_36),
 | 
			
		||||
		     SLE_END()
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
@@ -140,12 +140,12 @@ static void Save_ORDR()
 | 
			
		||||
 | 
			
		||||
static void Load_ORDR()
 | 
			
		||||
{
 | 
			
		||||
	if (IsSavegameVersionBefore(5, 2)) {
 | 
			
		||||
	if (IsSavegameVersionBefore(SLV_5, 2)) {
 | 
			
		||||
		/* Version older than 5.2 did not have a ->next pointer. Convert them
 | 
			
		||||
		 * (in the old days, the orderlist was 5000 items big) */
 | 
			
		||||
		size_t len = SlGetFieldLength();
 | 
			
		||||
 | 
			
		||||
		if (IsSavegameVersionBefore(5)) {
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_5)) {
 | 
			
		||||
			/* Pre-version 5 had another layout for orders
 | 
			
		||||
			 * (uint16 instead of uint32) */
 | 
			
		||||
			len /= sizeof(uint16);
 | 
			
		||||
@@ -159,7 +159,7 @@ static void Load_ORDR()
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			free(orders);
 | 
			
		||||
		} else if (IsSavegameVersionBefore(5, 2)) {
 | 
			
		||||
		} else if (IsSavegameVersionBefore(SLV_5, 2)) {
 | 
			
		||||
			len /= sizeof(uint32);
 | 
			
		||||
			uint32 *orders = MallocT<uint32>(len + 1);
 | 
			
		||||
 | 
			
		||||
@@ -191,7 +191,7 @@ static void Load_ORDR()
 | 
			
		||||
		while ((index = SlIterateArray()) != -1) {
 | 
			
		||||
			Order *order = new (index) Order();
 | 
			
		||||
			SlObject(order, GetOrderDescription());
 | 
			
		||||
			if (IsSavegameVersionBefore(190)) {
 | 
			
		||||
			if (IsSavegameVersionBefore(SLV_190)) {
 | 
			
		||||
				order->SetTravelTimetabled(order->GetTravelTime() > 0);
 | 
			
		||||
				order->SetWaitTimetabled(order->GetWaitTime() > 0);
 | 
			
		||||
			} else if (order->IsType(OT_CONDITIONAL) && SlXvIsFeatureMissing(XSLFI_TIMETABLE_EXTRA)) {
 | 
			
		||||
@@ -204,10 +204,10 @@ static void Load_ORDR()
 | 
			
		||||
const SaveLoad *GetOrderExtraInfoDescription()
 | 
			
		||||
{
 | 
			
		||||
	static const SaveLoad _order_extra_info_desc[] = {
 | 
			
		||||
		SLE_CONDARR_X(OrderExtraInfo, cargo_type_flags, SLE_UINT8, 32,        0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CARGO_TYPE_ORDERS, 1, 2)),
 | 
			
		||||
		SLE_CONDARR_X(OrderExtraInfo, cargo_type_flags, SLE_UINT8, NUM_CARGO, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CARGO_TYPE_ORDERS, 3)),
 | 
			
		||||
		SLE_CONDVAR_X(OrderExtraInfo, xflags,           SLE_UINT8,            0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA)),
 | 
			
		||||
		SLE_CONDVAR_X(OrderExtraInfo, xdata,           SLE_UINT32,            0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_ORDER_EXTRA_DATA)),
 | 
			
		||||
		SLE_CONDARR_X(OrderExtraInfo, cargo_type_flags, SLE_UINT8, 32,        SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CARGO_TYPE_ORDERS, 1, 2)),
 | 
			
		||||
		SLE_CONDARR_X(OrderExtraInfo, cargo_type_flags, SLE_UINT8, NUM_CARGO, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CARGO_TYPE_ORDERS, 3)),
 | 
			
		||||
		SLE_CONDVAR_X(OrderExtraInfo, xflags,           SLE_UINT8,            SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA)),
 | 
			
		||||
		SLE_CONDVAR_X(OrderExtraInfo, xdata,           SLE_UINT32,            SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_ORDER_EXTRA_DATA)),
 | 
			
		||||
		SLE_END()
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
@@ -240,7 +240,7 @@ void Load_ORDX()
 | 
			
		||||
static void Ptrs_ORDR()
 | 
			
		||||
{
 | 
			
		||||
	/* Orders from old savegames have pointers corrected in Load_ORDR */
 | 
			
		||||
	if (IsSavegameVersionBefore(5, 2)) return;
 | 
			
		||||
	if (IsSavegameVersionBefore(SLV_5, 2)) return;
 | 
			
		||||
 | 
			
		||||
	Order *o;
 | 
			
		||||
 | 
			
		||||
@@ -253,12 +253,12 @@ const SaveLoad *GetOrderListDescription()
 | 
			
		||||
{
 | 
			
		||||
	static const SaveLoad _orderlist_desc[] = {
 | 
			
		||||
		      SLE_REF(OrderList, first,                                    REF_ORDER),
 | 
			
		||||
		SLE_CONDVARVEC_X(OrderList, scheduled_dispatch,                    SLE_UINT32, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SCHEDULED_DISPATCH)),
 | 
			
		||||
		SLE_CONDVAR_X(OrderList, scheduled_dispatch_duration,              SLE_UINT32, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SCHEDULED_DISPATCH)),
 | 
			
		||||
		SLE_CONDVAR_X(OrderList, scheduled_dispatch_start_date,            SLE_INT32,  0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SCHEDULED_DISPATCH)),
 | 
			
		||||
		SLE_CONDVAR_X(OrderList, scheduled_dispatch_start_full_date_fract, SLE_UINT16, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SCHEDULED_DISPATCH)),
 | 
			
		||||
		SLE_CONDVAR_X(OrderList, scheduled_dispatch_last_dispatch,         SLE_INT32,  0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SCHEDULED_DISPATCH)),
 | 
			
		||||
		SLE_CONDVAR_X(OrderList, scheduled_dispatch_max_delay,             SLE_INT32,  0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SCHEDULED_DISPATCH)),
 | 
			
		||||
		SLE_CONDVARVEC_X(OrderList, scheduled_dispatch,                    SLE_UINT32, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SCHEDULED_DISPATCH)),
 | 
			
		||||
		SLE_CONDVAR_X(OrderList, scheduled_dispatch_duration,              SLE_UINT32, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SCHEDULED_DISPATCH)),
 | 
			
		||||
		SLE_CONDVAR_X(OrderList, scheduled_dispatch_start_date,            SLE_INT32,  SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SCHEDULED_DISPATCH)),
 | 
			
		||||
		SLE_CONDVAR_X(OrderList, scheduled_dispatch_start_full_date_fract, SLE_UINT16, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SCHEDULED_DISPATCH)),
 | 
			
		||||
		SLE_CONDVAR_X(OrderList, scheduled_dispatch_last_dispatch,         SLE_INT32,  SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SCHEDULED_DISPATCH)),
 | 
			
		||||
		SLE_CONDVAR_X(OrderList, scheduled_dispatch_max_delay,             SLE_INT32,  SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SCHEDULED_DISPATCH)),
 | 
			
		||||
		SLE_END()
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
@@ -303,20 +303,20 @@ const SaveLoad *GetOrderBackupDescription()
 | 
			
		||||
		     SLE_VAR(OrderBackup, user,                     SLE_UINT32),
 | 
			
		||||
		     SLE_VAR(OrderBackup, tile,                     SLE_UINT32),
 | 
			
		||||
		     SLE_VAR(OrderBackup, group,                    SLE_UINT16),
 | 
			
		||||
		 SLE_CONDVAR(OrderBackup, service_interval,         SLE_FILE_U32 | SLE_VAR_U16,  0, 191),
 | 
			
		||||
		 SLE_CONDVAR(OrderBackup, service_interval,         SLE_UINT16,                192, SL_MAX_VERSION),
 | 
			
		||||
		 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_STR(OrderBackup, name,                     SLE_STR, 0),
 | 
			
		||||
		SLE_CONDNULL(2,                                                                  0, 191), // clone (2 bytes of pointer, i.e. garbage)
 | 
			
		||||
		 SLE_CONDREF(OrderBackup, clone,                    REF_VEHICLE,               192, SL_MAX_VERSION),
 | 
			
		||||
		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,                 176, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDVAR_X(OrderBackup, cur_timetable_order_index, SLE_UINT8,                 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA)),
 | 
			
		||||
		 SLE_CONDVAR(OrderBackup, current_order_time,       SLE_UINT32,                176, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(OrderBackup, lateness_counter,         SLE_INT32,                 176, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(OrderBackup, timetable_start,          SLE_INT32,                 176, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDVAR_X(OrderBackup,timetable_start_subticks, SLE_UINT16,                  0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLES_START_TICKS, 2)),
 | 
			
		||||
		 SLE_CONDVAR(OrderBackup, vehicle_flags,            SLE_FILE_U8 | SLE_VAR_U16, 176, 179),
 | 
			
		||||
		 SLE_CONDVAR(OrderBackup, vehicle_flags,            SLE_UINT16,                180, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(OrderBackup, cur_implicit_order_index, SLE_UINT8,                 SLV_176, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDVAR_X(OrderBackup, cur_timetable_order_index, SLE_UINT8,        SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA)),
 | 
			
		||||
		 SLE_CONDVAR(OrderBackup, current_order_time,       SLE_UINT32,                SLV_176, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(OrderBackup, lateness_counter,         SLE_INT32,                 SLV_176, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(OrderBackup, timetable_start,          SLE_INT32,                 SLV_176, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDVAR_X(OrderBackup,timetable_start_subticks, SLE_UINT16,         SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLES_START_TICKS, 2)),
 | 
			
		||||
		 SLE_CONDVAR(OrderBackup, vehicle_flags,            SLE_FILE_U8 | SLE_VAR_U16, SLV_176, SLV_180),
 | 
			
		||||
		 SLE_CONDVAR(OrderBackup, vehicle_flags,            SLE_UINT16,                SLV_180, SL_MAX_VERSION),
 | 
			
		||||
		     SLE_REF(OrderBackup, orders,                   REF_ORDER),
 | 
			
		||||
		     SLE_END()
 | 
			
		||||
	};
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@ static const SaveLoad _plan_desc[] = {
 | 
			
		||||
	SLE_VAR(Plan, visible,        SLE_BOOL),
 | 
			
		||||
	SLE_VAR(Plan, visible_by_all, SLE_BOOL),
 | 
			
		||||
	SLE_VAR(Plan, creation_date,  SLE_INT32),
 | 
			
		||||
	SLE_CONDSTDSTR_X(Plan, name, 0, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_ENH_VIEWPORT_PLANS, 3)),
 | 
			
		||||
	SLE_CONDSTDSTR_X(Plan, name, 0, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_ENH_VIEWPORT_PLANS, 3)),
 | 
			
		||||
	SLE_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,6 @@
 | 
			
		||||
 * <li>repeat this until everything is done, and flush any remaining output to file
 | 
			
		||||
 * </ol>
 | 
			
		||||
 */
 | 
			
		||||
#include <deque>
 | 
			
		||||
 | 
			
		||||
#include "../stdafx.h"
 | 
			
		||||
#include "../debug.h"
 | 
			
		||||
@@ -57,245 +56,23 @@
 | 
			
		||||
#include "saveload_buffer.h"
 | 
			
		||||
#include "extended_ver_sl.h"
 | 
			
		||||
 | 
			
		||||
#include "../safeguards.h"
 | 
			
		||||
 | 
			
		||||
#include <deque>
 | 
			
		||||
#include <vector>
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Previous savegame versions, the trunk revision where they were
 | 
			
		||||
 * introduced and the released version that had that particular
 | 
			
		||||
 * savegame version.
 | 
			
		||||
 * Up to savegame version 18 there is a minor version as well.
 | 
			
		||||
 *
 | 
			
		||||
 *    1.0         0.1.x, 0.2.x
 | 
			
		||||
 *    2.0         0.3.0
 | 
			
		||||
 *    2.1         0.3.1, 0.3.2
 | 
			
		||||
 *    3.x         lost
 | 
			
		||||
 *    4.0     1
 | 
			
		||||
 *    4.1   122   0.3.3, 0.3.4
 | 
			
		||||
 *    4.2  1222   0.3.5
 | 
			
		||||
 *    4.3  1417
 | 
			
		||||
 *    4.4  1426
 | 
			
		||||
 *    5.0  1429
 | 
			
		||||
 *    5.1  1440
 | 
			
		||||
 *    5.2  1525   0.3.6
 | 
			
		||||
 *    6.0  1721
 | 
			
		||||
 *    6.1  1768
 | 
			
		||||
 *    7.0  1770
 | 
			
		||||
 *    8.0  1786
 | 
			
		||||
 *    9.0  1909
 | 
			
		||||
 *   10.0  2030
 | 
			
		||||
 *   11.0  2033
 | 
			
		||||
 *   11.1  2041
 | 
			
		||||
 *   12.1  2046
 | 
			
		||||
 *   13.1  2080   0.4.0, 0.4.0.1
 | 
			
		||||
 *   14.0  2441
 | 
			
		||||
 *   15.0  2499
 | 
			
		||||
 *   16.0  2817
 | 
			
		||||
 *   16.1  3155
 | 
			
		||||
 *   17.0  3212
 | 
			
		||||
 *   17.1  3218
 | 
			
		||||
 *   18    3227
 | 
			
		||||
 *   19    3396
 | 
			
		||||
 *   20    3403
 | 
			
		||||
 *   21    3472   0.4.x
 | 
			
		||||
 *   22    3726
 | 
			
		||||
 *   23    3915
 | 
			
		||||
 *   24    4150
 | 
			
		||||
 *   25    4259
 | 
			
		||||
 *   26    4466
 | 
			
		||||
 *   27    4757
 | 
			
		||||
 *   28    4987
 | 
			
		||||
 *   29    5070
 | 
			
		||||
 *   30    5946
 | 
			
		||||
 *   31    5999
 | 
			
		||||
 *   32    6001
 | 
			
		||||
 *   33    6440
 | 
			
		||||
 *   34    6455
 | 
			
		||||
 *   35    6602
 | 
			
		||||
 *   36    6624
 | 
			
		||||
 *   37    7182
 | 
			
		||||
 *   38    7195
 | 
			
		||||
 *   39    7269
 | 
			
		||||
 *   40    7326
 | 
			
		||||
 *   41    7348   0.5.x
 | 
			
		||||
 *   42    7573
 | 
			
		||||
 *   43    7642
 | 
			
		||||
 *   44    8144
 | 
			
		||||
 *   45    8501
 | 
			
		||||
 *   46    8705
 | 
			
		||||
 *   47    8735
 | 
			
		||||
 *   48    8935
 | 
			
		||||
 *   49    8969
 | 
			
		||||
 *   50    8973
 | 
			
		||||
 *   51    8978
 | 
			
		||||
 *   52    9066
 | 
			
		||||
 *   53    9316
 | 
			
		||||
 *   54    9613
 | 
			
		||||
 *   55    9638
 | 
			
		||||
 *   56    9667
 | 
			
		||||
 *   57    9691
 | 
			
		||||
 *   58    9762
 | 
			
		||||
 *   59    9779
 | 
			
		||||
 *   60    9874
 | 
			
		||||
 *   61    9892
 | 
			
		||||
 *   62    9905
 | 
			
		||||
 *   63    9956
 | 
			
		||||
 *   64   10006
 | 
			
		||||
 *   65   10210
 | 
			
		||||
 *   66   10211
 | 
			
		||||
 *   67   10236
 | 
			
		||||
 *   68   10266
 | 
			
		||||
 *   69   10319
 | 
			
		||||
 *   70   10541
 | 
			
		||||
 *   71   10567
 | 
			
		||||
 *   72   10601
 | 
			
		||||
 *   73   10903
 | 
			
		||||
 *   74   11030
 | 
			
		||||
 *   75   11107
 | 
			
		||||
 *   76   11139
 | 
			
		||||
 *   77   11172
 | 
			
		||||
 *   78   11176
 | 
			
		||||
 *   79   11188
 | 
			
		||||
 *   80   11228
 | 
			
		||||
 *   81   11244
 | 
			
		||||
 *   82   11410
 | 
			
		||||
 *   83   11589
 | 
			
		||||
 *   84   11822
 | 
			
		||||
 *   85   11874
 | 
			
		||||
 *   86   12042
 | 
			
		||||
 *   87   12129
 | 
			
		||||
 *   88   12134
 | 
			
		||||
 *   89   12160
 | 
			
		||||
 *   90   12293
 | 
			
		||||
 *   91   12347
 | 
			
		||||
 *   92   12381   0.6.x
 | 
			
		||||
 *   93   12648
 | 
			
		||||
 *   94   12816
 | 
			
		||||
 *   95   12924
 | 
			
		||||
 *   96   13226
 | 
			
		||||
 *   97   13256
 | 
			
		||||
 *   98   13375
 | 
			
		||||
 *   99   13838
 | 
			
		||||
 *  100   13952
 | 
			
		||||
 *  101   14233
 | 
			
		||||
 *  102   14332
 | 
			
		||||
 *  103   14598
 | 
			
		||||
 *  104   14735
 | 
			
		||||
 *  105   14803
 | 
			
		||||
 *  106   14919
 | 
			
		||||
 *  107   15027
 | 
			
		||||
 *  108   15045
 | 
			
		||||
 *  109   15075
 | 
			
		||||
 *  110   15148
 | 
			
		||||
 *  111   15190
 | 
			
		||||
 *  112   15290
 | 
			
		||||
 *  113   15340
 | 
			
		||||
 *  114   15601
 | 
			
		||||
 *  115   15695
 | 
			
		||||
 *  116   15893   0.7.x
 | 
			
		||||
 *  117   16037
 | 
			
		||||
 *  118   16129
 | 
			
		||||
 *  119   16242
 | 
			
		||||
 *  120   16439
 | 
			
		||||
 *  121   16694
 | 
			
		||||
 *  122   16855
 | 
			
		||||
 *  123   16909
 | 
			
		||||
 *  124   16993
 | 
			
		||||
 *  125   17113
 | 
			
		||||
 *  126   17433
 | 
			
		||||
 *  127   17439
 | 
			
		||||
 *  128   18281
 | 
			
		||||
 *  129   18292
 | 
			
		||||
 *  130   18404
 | 
			
		||||
 *  131   18481
 | 
			
		||||
 *  132   18522
 | 
			
		||||
 *  133   18674
 | 
			
		||||
 *  134   18703
 | 
			
		||||
 *  135   18719
 | 
			
		||||
 *  136   18764
 | 
			
		||||
 *  137   18912
 | 
			
		||||
 *  138   18942   1.0.x
 | 
			
		||||
 *  139   19346
 | 
			
		||||
 *  140   19382
 | 
			
		||||
 *  141   19799
 | 
			
		||||
 *  142   20003
 | 
			
		||||
 *  143   20048
 | 
			
		||||
 *  144   20334
 | 
			
		||||
 *  145   20376
 | 
			
		||||
 *  146   20446
 | 
			
		||||
 *  147   20621
 | 
			
		||||
 *  148   20659
 | 
			
		||||
 *  149   20832
 | 
			
		||||
 *  150   20857
 | 
			
		||||
 *  151   20918
 | 
			
		||||
 *  152   21171
 | 
			
		||||
 *  153   21263
 | 
			
		||||
 *  154   21426
 | 
			
		||||
 *  155   21453
 | 
			
		||||
 *  156   21728
 | 
			
		||||
 *  157   21862
 | 
			
		||||
 *  158   21933
 | 
			
		||||
 *  159   21962
 | 
			
		||||
 *  160   21974   1.1.x
 | 
			
		||||
 *  161   22567
 | 
			
		||||
 *  162   22713
 | 
			
		||||
 *  163   22767
 | 
			
		||||
 *  164   23290
 | 
			
		||||
 *  165   23304
 | 
			
		||||
 *  166   23415
 | 
			
		||||
 *  167   23504
 | 
			
		||||
 *  168   23637
 | 
			
		||||
 *  169   23816
 | 
			
		||||
 *  170   23826
 | 
			
		||||
 *  171   23835
 | 
			
		||||
 *  172   23947
 | 
			
		||||
 *  173   23967   1.2.0-RC1
 | 
			
		||||
 *  174   23973   1.2.x
 | 
			
		||||
 *  175   24136
 | 
			
		||||
 *  176   24446
 | 
			
		||||
 *  177   24619
 | 
			
		||||
 *  178   24789
 | 
			
		||||
 *  179   24810
 | 
			
		||||
 *  180   24998   1.3.x
 | 
			
		||||
 *  181   25012
 | 
			
		||||
 *  182   25296
 | 
			
		||||
 *  183   25363
 | 
			
		||||
 *  184   25508
 | 
			
		||||
 *  185   25620
 | 
			
		||||
 *  186   25833
 | 
			
		||||
 *  187   25899
 | 
			
		||||
 *  188   26169   1.4.x
 | 
			
		||||
 *  189   26450
 | 
			
		||||
 *  190   26547
 | 
			
		||||
 *  191   26646
 | 
			
		||||
 *  192   26700
 | 
			
		||||
 *  193   26802
 | 
			
		||||
 *  194   26881   1.5.x, 1.6.0
 | 
			
		||||
 *  195   27572   1.6.x
 | 
			
		||||
 *  196   27778   1.7.x
 | 
			
		||||
 *  197   27978   1.8.x
 | 
			
		||||
 *  198
 | 
			
		||||
 *  199
 | 
			
		||||
 *  200   #6805   Extend railtypes to 64, adding uint16 to map array.
 | 
			
		||||
 *  201   #6885   Extend NewGRF persistant storages.
 | 
			
		||||
 *  202   #6867   Increase industry cargo slots to 16 in, 16 out
 | 
			
		||||
 *  203   #7072   Add path cache for ships
 | 
			
		||||
 *  204   #7065   Add extra rotation stages for ships.
 | 
			
		||||
 *  205   #7108   Livery storage change and group liveries.
 | 
			
		||||
 */
 | 
			
		||||
extern const uint16 SAVEGAME_VERSION = 205; ///< Current savegame version of OpenTTD.
 | 
			
		||||
const uint16 SAVEGAME_VERSION_EXT = 0x8000; ///< Savegame extension indicator mask
 | 
			
		||||
#include "../safeguards.h"
 | 
			
		||||
 | 
			
		||||
extern const SaveLoadVersion SAVEGAME_VERSION = (SaveLoadVersion)(SL_MAX_VERSION - 1); ///< Current savegame version of OpenTTD.
 | 
			
		||||
 | 
			
		||||
const SaveLoadVersion SAVEGAME_VERSION_EXT = (SaveLoadVersion)(0x8000); ///< Savegame extension indicator mask
 | 
			
		||||
 | 
			
		||||
SavegameType _savegame_type; ///< type of savegame we are loading
 | 
			
		||||
FileToSaveLoad _file_to_saveload; ///< File to save or load in the openttd loop.
 | 
			
		||||
 | 
			
		||||
uint32 _ttdp_version;     ///< version of TTDP savegame (if applicable)
 | 
			
		||||
uint16 _sl_version;       ///< the major savegame version identifier
 | 
			
		||||
byte   _sl_minor_version; ///< the minor savegame version, DO NOT USE!
 | 
			
		||||
char _savegame_format[8]; ///< how to compress savegames
 | 
			
		||||
bool _do_autosave;        ///< are we doing an autosave at the moment?
 | 
			
		||||
uint32 _ttdp_version;        ///< version of TTDP savegame (if applicable)
 | 
			
		||||
SaveLoadVersion _sl_version; ///< the major savegame version identifier
 | 
			
		||||
byte   _sl_minor_version;    ///< the minor savegame version, DO NOT USE!
 | 
			
		||||
char _savegame_format[8];    ///< how to compress savegames
 | 
			
		||||
bool _do_autosave;           ///< are we doing an autosave at the moment?
 | 
			
		||||
 | 
			
		||||
extern bool _sl_is_ext_version;
 | 
			
		||||
 | 
			
		||||
@@ -912,7 +689,7 @@ static inline byte SlCalcConvFileLen(VarType conv)
 | 
			
		||||
/** Return the size in bytes of a reference (pointer) */
 | 
			
		||||
static inline size_t SlCalcRefLen()
 | 
			
		||||
{
 | 
			
		||||
	return IsSavegameVersionBefore(69) ? 2 : 4;
 | 
			
		||||
	return IsSavegameVersionBefore(SLV_69) ? 2 : 4;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SlSetArrayIndex(uint index)
 | 
			
		||||
@@ -1272,7 +1049,7 @@ static void SlString(void *ptr, size_t length, VarType conv)
 | 
			
		||||
			StringValidationSettings settings = SVS_REPLACE_WITH_QUESTION_MARK;
 | 
			
		||||
			if ((conv & SLF_ALLOW_CONTROL) != 0) {
 | 
			
		||||
				settings = settings | SVS_ALLOW_CONTROL_CODE;
 | 
			
		||||
				if (IsSavegameVersionBefore(169)) {
 | 
			
		||||
				if (IsSavegameVersionBefore(SLV_169)) {
 | 
			
		||||
					str_fix_scc_encoded((char *)ptr, (char *)ptr + len);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
@@ -1435,7 +1212,7 @@ static void *IntToReference(size_t index, SLRefType rt)
 | 
			
		||||
 | 
			
		||||
	/* After version 4.3 REF_VEHICLE_OLD is saved as REF_VEHICLE,
 | 
			
		||||
	 * and should be loaded like that */
 | 
			
		||||
	if (rt == REF_VEHICLE_OLD && !IsSavegameVersionBefore(4, 4)) {
 | 
			
		||||
	if (rt == REF_VEHICLE_OLD && !IsSavegameVersionBefore(SLV_4, 4)) {
 | 
			
		||||
		rt = REF_VEHICLE;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -1454,7 +1231,7 @@ static void *IntToReference(size_t index, SLRefType rt)
 | 
			
		||||
		case REF_ORDER:
 | 
			
		||||
			if (Order::IsValidID(index)) return Order::Get(index);
 | 
			
		||||
			/* in old versions, invalid order was used to mark end of order list */
 | 
			
		||||
			if (IsSavegameVersionBefore(5, 2)) return NULL;
 | 
			
		||||
			if (IsSavegameVersionBefore(SLV_5, 2)) return NULL;
 | 
			
		||||
			SlErrorCorrupt("Referencing invalid Order");
 | 
			
		||||
 | 
			
		||||
		case REF_VEHICLE_OLD:
 | 
			
		||||
@@ -1515,7 +1292,7 @@ static inline size_t SlCalcListLen(const void *list)
 | 
			
		||||
{
 | 
			
		||||
	const PtrList *l = (const PtrList *) list;
 | 
			
		||||
 | 
			
		||||
	int type_size = IsSavegameVersionBefore(69) ? 2 : 4;
 | 
			
		||||
	int type_size = IsSavegameVersionBefore(SLV_69) ? 2 : 4;
 | 
			
		||||
	/* Each entry is saved as type_size bytes, plus type_size bytes are used for the length
 | 
			
		||||
	 * of the list */
 | 
			
		||||
	return l->size() * type_size + type_size;
 | 
			
		||||
@@ -1562,11 +1339,11 @@ static void SlList(void *list, SLRefType conv)
 | 
			
		||||
		}
 | 
			
		||||
		case SLA_LOAD_CHECK:
 | 
			
		||||
		case SLA_LOAD: {
 | 
			
		||||
			size_t length = IsSavegameVersionBefore(69) ? SlReadUint16() : SlReadUint32();
 | 
			
		||||
			size_t length = IsSavegameVersionBefore(SLV_69) ? SlReadUint16() : SlReadUint32();
 | 
			
		||||
 | 
			
		||||
			/* Load each reference and push to the end of the list */
 | 
			
		||||
			for (size_t i = 0; i < length; i++) {
 | 
			
		||||
				size_t data = IsSavegameVersionBefore(69) ? SlReadUint16() : SlReadUint32();
 | 
			
		||||
				size_t data = IsSavegameVersionBefore(SLV_69) ? SlReadUint16() : SlReadUint32();
 | 
			
		||||
				l->push_back((void *)data);
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
@@ -1928,7 +1705,7 @@ bool SlObjectMember(void *ptr, const SaveLoad *sld)
 | 
			
		||||
							break;
 | 
			
		||||
						case SLA_LOAD_CHECK:
 | 
			
		||||
						case SLA_LOAD:
 | 
			
		||||
							*(size_t *)ptr = IsSavegameVersionBefore(69) ? SlReadUint16() : SlReadUint32();
 | 
			
		||||
							*(size_t *)ptr = IsSavegameVersionBefore(SLV_69) ? SlReadUint16() : SlReadUint32();
 | 
			
		||||
							break;
 | 
			
		||||
						case SLA_PTRS:
 | 
			
		||||
							*(void **)ptr = IntToReference(*(size_t *)ptr, (SLRefType)conv);
 | 
			
		||||
@@ -2427,7 +2204,7 @@ struct LZOLoadFilter : LoadFilter {
 | 
			
		||||
		/* Check if size is bad */
 | 
			
		||||
		((uint32*)out)[0] = size = tmp[1];
 | 
			
		||||
 | 
			
		||||
		if (_sl_version != 0) {
 | 
			
		||||
		if (_sl_version != SL_MIN_VERSION) {
 | 
			
		||||
			tmp[0] = TO_BE32(tmp[0]);
 | 
			
		||||
			size = TO_BE32(size);
 | 
			
		||||
		}
 | 
			
		||||
@@ -3077,7 +2854,7 @@ static SaveOrLoadResult DoLoad(LoadFilter *reader, bool load_check)
 | 
			
		||||
		if (fmt == endof(_saveload_formats)) {
 | 
			
		||||
			DEBUG(sl, 0, "Unknown savegame type, trying to load it as the buggy format");
 | 
			
		||||
			_sl.lf->Reset();
 | 
			
		||||
			_sl_version = 0;
 | 
			
		||||
			_sl_version = SL_MIN_VERSION;
 | 
			
		||||
			_sl_minor_version = 0;
 | 
			
		||||
			SlXvResetState();
 | 
			
		||||
 | 
			
		||||
@@ -3096,14 +2873,14 @@ static SaveOrLoadResult DoLoad(LoadFilter *reader, bool load_check)
 | 
			
		||||
 | 
			
		||||
		if (fmt->tag == hdr[0]) {
 | 
			
		||||
			/* check version number */
 | 
			
		||||
			_sl_version = TO_BE32(hdr[1]) >> 16;
 | 
			
		||||
			_sl_version = (SaveLoadVersion)(TO_BE32(hdr[1]) >> 16);
 | 
			
		||||
			/* Minor is not used anymore from version 18.0, but it is still needed
 | 
			
		||||
			 * in versions before that (4 cases) which can't be removed easy.
 | 
			
		||||
			 * Therefore it is loaded, but never saved (or, it saves a 0 in any scenario). */
 | 
			
		||||
			_sl_minor_version = (TO_BE32(hdr[1]) >> 8) & 0xFF;
 | 
			
		||||
 | 
			
		||||
			if (_sl_version & SAVEGAME_VERSION_EXT) {
 | 
			
		||||
				_sl_version &= ~SAVEGAME_VERSION_EXT;
 | 
			
		||||
				_sl_version = (SaveLoadVersion)(_sl_version & ~SAVEGAME_VERSION_EXT);
 | 
			
		||||
				_sl_is_ext_version = true;
 | 
			
		||||
			} else {
 | 
			
		||||
				SlXvCheckSpecialSavegameVersions();
 | 
			
		||||
@@ -3138,7 +2915,7 @@ static SaveOrLoadResult DoLoad(LoadFilter *reader, bool load_check)
 | 
			
		||||
 | 
			
		||||
		GamelogReset();
 | 
			
		||||
 | 
			
		||||
		if (IsSavegameVersionBefore(4)) {
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_4)) {
 | 
			
		||||
			/*
 | 
			
		||||
			 * NewGRFs were introduced between 0.3,4 and 0.3.5, which both
 | 
			
		||||
			 * shared savegame version 4. Anything before that 'obviously'
 | 
			
		||||
@@ -3245,7 +3022,7 @@ SaveOrLoadResult SaveOrLoad(const char *filename, SaveLoadOperation fop, Detaile
 | 
			
		||||
			ClearGRFConfigList(&_grfconfig);
 | 
			
		||||
			GamelogReset();
 | 
			
		||||
			if (!LoadOldSaveGame(filename)) return SL_REINIT;
 | 
			
		||||
			_sl_version = 0;
 | 
			
		||||
			_sl_version = SL_MIN_VERSION;
 | 
			
		||||
			_sl_minor_version = 0;
 | 
			
		||||
			SlXvResetState();
 | 
			
		||||
			GamelogStartAction(GLAT_LOAD);
 | 
			
		||||
 
 | 
			
		||||
@@ -18,6 +18,284 @@
 | 
			
		||||
 | 
			
		||||
#include <stdarg.h>
 | 
			
		||||
 | 
			
		||||
/** SaveLoad versions
 | 
			
		||||
 * Previous savegame versions, the trunk revision where they were
 | 
			
		||||
 * introduced and the released version that had that particular
 | 
			
		||||
 * savegame version.
 | 
			
		||||
 * Up to savegame version 18 there is a minor version as well.
 | 
			
		||||
 *
 | 
			
		||||
 * Older entries keep their original numbering.
 | 
			
		||||
 *
 | 
			
		||||
 * Newer entries should use a descriptive labels, numeric version
 | 
			
		||||
 * and PR can be added to comment.
 | 
			
		||||
 *
 | 
			
		||||
 * Note that this list must not be reordered.
 | 
			
		||||
 */
 | 
			
		||||
enum SaveLoadVersion : uint16 {
 | 
			
		||||
	SL_MIN_VERSION,                         ///< First savegame version
 | 
			
		||||
 | 
			
		||||
	SLV_1,                                  ///<   1.0         0.1.x, 0.2.x
 | 
			
		||||
	SLV_2,                                  /**<   2.0         0.3.0
 | 
			
		||||
	                                         *     2.1         0.3.1, 0.3.2 */
 | 
			
		||||
	SLV_3,                                  ///<   3.x         lost
 | 
			
		||||
	SLV_4,                                  /**<   4.0     1
 | 
			
		||||
	                                         *     4.1   122   0.3.3, 0.3.4
 | 
			
		||||
	                                         *     4.2  1222   0.3.5
 | 
			
		||||
	                                         *     4.3  1417
 | 
			
		||||
	                                         *     4.4  1426 */
 | 
			
		||||
 | 
			
		||||
	SLV_5,                                  /**<   5.0  1429
 | 
			
		||||
	                                         *     5.1  1440
 | 
			
		||||
	                                         *     5.2  1525   0.3.6 */
 | 
			
		||||
	SLV_6,                                  /**<   6.0  1721
 | 
			
		||||
	                                         *     6.1  1768 */
 | 
			
		||||
	SLV_7,                                  ///<   7.0  1770
 | 
			
		||||
	SLV_8,                                  ///<   8.0  1786
 | 
			
		||||
	SLV_9,                                  ///<   9.0  1909
 | 
			
		||||
 | 
			
		||||
	SLV_10,                                 ///<  10.0  2030
 | 
			
		||||
	SLV_11,                                 /**<  11.0  2033
 | 
			
		||||
	                                         *    11.1  2041 */
 | 
			
		||||
	SLV_12,                                 ///<  12.1  2046
 | 
			
		||||
	SLV_13,                                 ///<  13.1  2080   0.4.0, 0.4.0.1
 | 
			
		||||
	SLV_14,                                 ///<  14.0  2441
 | 
			
		||||
 | 
			
		||||
	SLV_15,                                 ///<  15.0  2499
 | 
			
		||||
	SLV_16,                                 /**<  16.0  2817
 | 
			
		||||
	                                         *    16.1  3155 */
 | 
			
		||||
	SLV_17,                                 /**<  17.0  3212
 | 
			
		||||
	                                         *    17.1  3218 */
 | 
			
		||||
	SLV_18,                                 ///<  18    3227
 | 
			
		||||
	SLV_19,                                 ///<  19    3396
 | 
			
		||||
 | 
			
		||||
	SLV_20,                                 ///<  20    3403
 | 
			
		||||
	SLV_21,                                 ///<  21    3472   0.4.x
 | 
			
		||||
	SLV_22,                                 ///<  22    3726
 | 
			
		||||
	SLV_23,                                 ///<  23    3915
 | 
			
		||||
	SLV_24,                                 ///<  24    4150
 | 
			
		||||
 | 
			
		||||
	SLV_25,                                 ///<  25    4259
 | 
			
		||||
	SLV_26,                                 ///<  26    4466
 | 
			
		||||
	SLV_27,                                 ///<  27    4757
 | 
			
		||||
	SLV_28,                                 ///<  28    4987
 | 
			
		||||
	SLV_29,                                 ///<  29    5070
 | 
			
		||||
 | 
			
		||||
	SLV_30,                                 ///<  30    5946
 | 
			
		||||
	SLV_31,                                 ///<  31    5999
 | 
			
		||||
	SLV_32,                                 ///<  32    6001
 | 
			
		||||
	SLV_33,                                 ///<  33    6440
 | 
			
		||||
	SLV_34,                                 ///<  34    6455
 | 
			
		||||
 | 
			
		||||
	SLV_35,                                 ///<  35    6602
 | 
			
		||||
	SLV_36,                                 ///<  36    6624
 | 
			
		||||
	SLV_37,                                 ///<  37    7182
 | 
			
		||||
	SLV_38,                                 ///<  38    7195
 | 
			
		||||
	SLV_39,                                 ///<  39    7269
 | 
			
		||||
 | 
			
		||||
	SLV_40,                                 ///<  40    7326
 | 
			
		||||
	SLV_41,                                 ///<  41    7348   0.5.x
 | 
			
		||||
	SLV_42,                                 ///<  42    7573
 | 
			
		||||
	SLV_43,                                 ///<  43    7642
 | 
			
		||||
	SLV_44,                                 ///<  44    8144
 | 
			
		||||
 | 
			
		||||
	SLV_45,                                 ///<  45    8501
 | 
			
		||||
	SLV_46,                                 ///<  46    8705
 | 
			
		||||
	SLV_47,                                 ///<  47    8735
 | 
			
		||||
	SLV_48,                                 ///<  48    8935
 | 
			
		||||
	SLV_49,                                 ///<  49    8969
 | 
			
		||||
 | 
			
		||||
	SLV_50,                                 ///<  50    8973
 | 
			
		||||
	SLV_51,                                 ///<  51    8978
 | 
			
		||||
	SLV_52,                                 ///<  52    9066
 | 
			
		||||
	SLV_53,                                 ///<  53    9316
 | 
			
		||||
	SLV_54,                                 ///<  54    9613
 | 
			
		||||
 | 
			
		||||
	SLV_55,                                 ///<  55    9638
 | 
			
		||||
	SLV_56,                                 ///<  56    9667
 | 
			
		||||
	SLV_57,                                 ///<  57    9691
 | 
			
		||||
	SLV_58,                                 ///<  58    9762
 | 
			
		||||
	SLV_59,                                 ///<  59    9779
 | 
			
		||||
 | 
			
		||||
	SLV_60,                                 ///<  60    9874
 | 
			
		||||
	SLV_61,                                 ///<  61    9892
 | 
			
		||||
	SLV_62,                                 ///<  62    9905
 | 
			
		||||
	SLV_63,                                 ///<  63    9956
 | 
			
		||||
	SLV_64,                                 ///<  64   10006
 | 
			
		||||
 | 
			
		||||
	SLV_65,                                 ///<  65   10210
 | 
			
		||||
	SLV_66,                                 ///<  66   10211
 | 
			
		||||
	SLV_67,                                 ///<  67   10236
 | 
			
		||||
	SLV_68,                                 ///<  68   10266
 | 
			
		||||
	SLV_69,                                 ///<  69   10319
 | 
			
		||||
 | 
			
		||||
	SLV_70,                                 ///<  70   10541
 | 
			
		||||
	SLV_71,                                 ///<  71   10567
 | 
			
		||||
	SLV_72,                                 ///<  72   10601
 | 
			
		||||
	SLV_73,                                 ///<  73   10903
 | 
			
		||||
	SLV_74,                                 ///<  74   11030
 | 
			
		||||
 | 
			
		||||
	SLV_75,                                 ///<  75   11107
 | 
			
		||||
	SLV_76,                                 ///<  76   11139
 | 
			
		||||
	SLV_77,                                 ///<  77   11172
 | 
			
		||||
	SLV_78,                                 ///<  78   11176
 | 
			
		||||
	SLV_79,                                 ///<  79   11188
 | 
			
		||||
 | 
			
		||||
	SLV_80,                                 ///<  80   11228
 | 
			
		||||
	SLV_81,                                 ///<  81   11244
 | 
			
		||||
	SLV_82,                                 ///<  82   11410
 | 
			
		||||
	SLV_83,                                 ///<  83   11589
 | 
			
		||||
	SLV_84,                                 ///<  84   11822
 | 
			
		||||
 | 
			
		||||
	SLV_85,                                 ///<  85   11874
 | 
			
		||||
	SLV_86,                                 ///<  86   12042
 | 
			
		||||
	SLV_87,                                 ///<  87   12129
 | 
			
		||||
	SLV_88,                                 ///<  88   12134
 | 
			
		||||
	SLV_89,                                 ///<  89   12160
 | 
			
		||||
 | 
			
		||||
	SLV_90,                                 ///<  90   12293
 | 
			
		||||
	SLV_91,                                 ///<  91   12347
 | 
			
		||||
	SLV_92,                                 ///<  92   12381   0.6.x
 | 
			
		||||
	SLV_93,                                 ///<  93   12648
 | 
			
		||||
	SLV_94,                                 ///<  94   12816
 | 
			
		||||
 | 
			
		||||
	SLV_95,                                 ///<  95   12924
 | 
			
		||||
	SLV_96,                                 ///<  96   13226
 | 
			
		||||
	SLV_97,                                 ///<  97   13256
 | 
			
		||||
	SLV_98,                                 ///<  98   13375
 | 
			
		||||
	SLV_99,                                 ///<  99   13838
 | 
			
		||||
 | 
			
		||||
	SLV_100,                                ///< 100   13952
 | 
			
		||||
	SLV_101,                                ///< 101   14233
 | 
			
		||||
	SLV_102,                                ///< 102   14332
 | 
			
		||||
	SLV_103,                                ///< 103   14598
 | 
			
		||||
	SLV_104,                                ///< 104   14735
 | 
			
		||||
 | 
			
		||||
	SLV_105,                                ///< 105   14803
 | 
			
		||||
	SLV_106,                                ///< 106   14919
 | 
			
		||||
	SLV_107,                                ///< 107   15027
 | 
			
		||||
	SLV_108,                                ///< 108   15045
 | 
			
		||||
	SLV_109,                                ///< 109   15075
 | 
			
		||||
 | 
			
		||||
	SLV_110,                                ///< 110   15148
 | 
			
		||||
	SLV_111,                                ///< 111   15190
 | 
			
		||||
	SLV_112,                                ///< 112   15290
 | 
			
		||||
	SLV_113,                                ///< 113   15340
 | 
			
		||||
	SLV_114,                                ///< 114   15601
 | 
			
		||||
 | 
			
		||||
	SLV_115,                                ///< 115   15695
 | 
			
		||||
	SLV_116,                                ///< 116   15893   0.7.x
 | 
			
		||||
	SLV_117,                                ///< 117   16037
 | 
			
		||||
	SLV_118,                                ///< 118   16129
 | 
			
		||||
	SLV_119,                                ///< 119   16242
 | 
			
		||||
 | 
			
		||||
	SLV_120,                                ///< 120   16439
 | 
			
		||||
	SLV_121,                                ///< 121   16694
 | 
			
		||||
	SLV_122,                                ///< 122   16855
 | 
			
		||||
	SLV_123,                                ///< 123   16909
 | 
			
		||||
	SLV_124,                                ///< 124   16993
 | 
			
		||||
 | 
			
		||||
	SLV_125,                                ///< 125   17113
 | 
			
		||||
	SLV_126,                                ///< 126   17433
 | 
			
		||||
	SLV_127,                                ///< 127   17439
 | 
			
		||||
	SLV_128,                                ///< 128   18281
 | 
			
		||||
	SLV_129,                                ///< 129   18292
 | 
			
		||||
 | 
			
		||||
	SLV_130,                                ///< 130   18404
 | 
			
		||||
	SLV_131,                                ///< 131   18481
 | 
			
		||||
	SLV_132,                                ///< 132   18522
 | 
			
		||||
	SLV_133,                                ///< 133   18674
 | 
			
		||||
	SLV_134,                                ///< 134   18703
 | 
			
		||||
 | 
			
		||||
	SLV_135,                                ///< 135   18719
 | 
			
		||||
	SLV_136,                                ///< 136   18764
 | 
			
		||||
	SLV_137,                                ///< 137   18912
 | 
			
		||||
	SLV_138,                                ///< 138   18942   1.0.x
 | 
			
		||||
	SLV_139,                                ///< 139   19346
 | 
			
		||||
 | 
			
		||||
	SLV_140,                                ///< 140   19382
 | 
			
		||||
	SLV_141,                                ///< 141   19799
 | 
			
		||||
	SLV_142,                                ///< 142   20003
 | 
			
		||||
	SLV_143,                                ///< 143   20048
 | 
			
		||||
	SLV_144,                                ///< 144   20334
 | 
			
		||||
 | 
			
		||||
	SLV_145,                                ///< 145   20376
 | 
			
		||||
	SLV_146,                                ///< 146   20446
 | 
			
		||||
	SLV_147,                                ///< 147   20621
 | 
			
		||||
	SLV_148,                                ///< 148   20659
 | 
			
		||||
	SLV_149,                                ///< 149   20832
 | 
			
		||||
 | 
			
		||||
	SLV_150,                                ///< 150   20857
 | 
			
		||||
	SLV_151,                                ///< 151   20918
 | 
			
		||||
	SLV_152,                                ///< 152   21171
 | 
			
		||||
	SLV_153,                                ///< 153   21263
 | 
			
		||||
	SLV_154,                                ///< 154   21426
 | 
			
		||||
 | 
			
		||||
	SLV_155,                                ///< 155   21453
 | 
			
		||||
	SLV_156,                                ///< 156   21728
 | 
			
		||||
	SLV_157,                                ///< 157   21862
 | 
			
		||||
	SLV_158,                                ///< 158   21933
 | 
			
		||||
	SLV_159,                                ///< 159   21962
 | 
			
		||||
 | 
			
		||||
	SLV_160,                                ///< 160   21974   1.1.x
 | 
			
		||||
	SLV_161,                                ///< 161   22567
 | 
			
		||||
	SLV_162,                                ///< 162   22713
 | 
			
		||||
	SLV_163,                                ///< 163   22767
 | 
			
		||||
	SLV_164,                                ///< 164   23290
 | 
			
		||||
 | 
			
		||||
	SLV_165,                                ///< 165   23304
 | 
			
		||||
	SLV_166,                                ///< 166   23415
 | 
			
		||||
	SLV_167,                                ///< 167   23504
 | 
			
		||||
	SLV_168,                                ///< 168   23637
 | 
			
		||||
	SLV_169,                                ///< 169   23816
 | 
			
		||||
 | 
			
		||||
	SLV_170,                                ///< 170   23826
 | 
			
		||||
	SLV_171,                                ///< 171   23835
 | 
			
		||||
	SLV_172,                                ///< 172   23947
 | 
			
		||||
	SLV_173,                                ///< 173   23967   1.2.0-RC1
 | 
			
		||||
	SLV_174,                                ///< 174   23973   1.2.x
 | 
			
		||||
 | 
			
		||||
	SLV_175,                                ///< 175   24136
 | 
			
		||||
	SLV_176,                                ///< 176   24446
 | 
			
		||||
	SLV_177,                                ///< 177   24619
 | 
			
		||||
	SLV_178,                                ///< 178   24789
 | 
			
		||||
	SLV_179,                                ///< 179   24810
 | 
			
		||||
 | 
			
		||||
	SLV_180,                                ///< 180   24998   1.3.x
 | 
			
		||||
	SLV_181,                                ///< 181   25012
 | 
			
		||||
	SLV_182,                                ///< 182   25115 FS#5492, r25259, r25296 Goal status
 | 
			
		||||
	SLV_183,                                ///< 183   25363 Cargodist
 | 
			
		||||
	SLV_184,                                ///< 184   25508 Unit localisation split
 | 
			
		||||
 | 
			
		||||
	SLV_185,                                ///< 185   25620 Storybooks
 | 
			
		||||
	SLV_186,                                ///< 186   25833 Objects storage
 | 
			
		||||
	SLV_187,                                ///< 187   25899 Linkgraph - restricted flows
 | 
			
		||||
	SLV_188,                                ///< 188   26169 FS#5831 Unify RV travel time
 | 
			
		||||
	SLV_189,                                ///< 189   26450 Heirarchical vehicle subgroups
 | 
			
		||||
 | 
			
		||||
	SLV_190,                                ///< 190   26547 Separate order travel and wait times
 | 
			
		||||
	SLV_191,                                ///< 191   26636 FS#6026 Fix disaster vehicle storage (No bump)
 | 
			
		||||
	                                        ///< 191   26646 FS#6041 Linkgraph - store locations
 | 
			
		||||
	SLV_192,                                ///< 192   26700 FS#6066 Fix saving of order backups
 | 
			
		||||
	SLV_193,                                ///< 193   26802
 | 
			
		||||
	SLV_194,                                ///< 194   26881 v1.5
 | 
			
		||||
 | 
			
		||||
	SLV_195,                                ///< 195   27572 v1.6.1
 | 
			
		||||
	SLV_196,                                ///< 196   27778 v1.7
 | 
			
		||||
	SLV_197,                                ///< 197   27978 v1.8
 | 
			
		||||
	SLV_198,                                ///< 198  PR#6763 Switch town growth rate and counter to actual game ticks
 | 
			
		||||
	SLV_EXTEND_CARGOTYPES,                  ///< 199  PR#6802 Extend cargotypes to 64
 | 
			
		||||
 | 
			
		||||
	SLV_EXTEND_RAILTYPES,                   ///< 200  PR#6805 Extend railtypes to 64, adding uint16 to map array.
 | 
			
		||||
	SLV_EXTEND_PERSISTENT_STORAGE,          ///< 201  PR#6885 Extend NewGRF persistant storages.
 | 
			
		||||
	SLV_EXTEND_INDUSTRY_CARGO_SLOTS,        ///< 202  PR#6867 Increase industry cargo slots to 16 in, 16 out
 | 
			
		||||
	SLV_SHIP_PATH_CACHE,                    ///< 203  PR#7072 Add path cache for ships
 | 
			
		||||
	SLV_SHIP_ROTATION,                      ///< 204  PR#7065 Add extra rotation stages for ships.
 | 
			
		||||
 | 
			
		||||
	SLV_GROUP_LIVERIES,                     ///< 205  PR#7108 Livery storage change and group liveries.
 | 
			
		||||
 | 
			
		||||
	SL_MAX_VERSION,                         ///< Highest possible saveload version
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/** Save or load result codes. */
 | 
			
		||||
enum SaveOrLoadResult {
 | 
			
		||||
	SL_OK     = 0, ///< completed successfully
 | 
			
		||||
@@ -97,9 +375,6 @@ enum SLRefType {
 | 
			
		||||
	REF_DOCKS            = 13,	///< Load/save a reference to a dock.
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/** Highest possible savegame version. */
 | 
			
		||||
#define SL_MAX_VERSION UINT16_MAX
 | 
			
		||||
 | 
			
		||||
/** Flags of a chunk. */
 | 
			
		||||
enum ChunkType {
 | 
			
		||||
	CH_RIFF         =  0,
 | 
			
		||||
@@ -228,8 +503,8 @@ struct SaveLoad {
 | 
			
		||||
	SaveLoadType cmd;    ///< the action to take with the saved/loaded type, All types need different action
 | 
			
		||||
	VarType conv;        ///< type of the variable to be saved, int
 | 
			
		||||
	uint16 length;       ///< (conditional) length of the variable (eg. arrays) (max array size is 65536 elements)
 | 
			
		||||
	uint16 version_from; ///< save/load the variable starting from this savegame version
 | 
			
		||||
	uint16 version_to;   ///< save/load the variable until this savegame version
 | 
			
		||||
	SaveLoadVersion version_from; ///< save/load the variable starting from this savegame version
 | 
			
		||||
	SaveLoadVersion version_to;   ///< save/load the variable until this savegame version
 | 
			
		||||
	/* NOTE: This element either denotes the address of the variable for a global
 | 
			
		||||
	 * variable, or the offset within a struct which is then bound to a variable
 | 
			
		||||
	 * during runtime. Decision on which one to use is controlled by the function
 | 
			
		||||
@@ -384,7 +659,7 @@ typedef SaveLoad SaveLoadGlobVarList;
 | 
			
		||||
 * @param variable Name of the variable in the class or struct referenced by \a base.
 | 
			
		||||
 * @param type     Storage of the data in memory and in the savegame.
 | 
			
		||||
 */
 | 
			
		||||
#define SLE_VAR(base, variable, type) SLE_CONDVAR(base, variable, type, 0, SL_MAX_VERSION)
 | 
			
		||||
#define SLE_VAR(base, variable, type) SLE_CONDVAR(base, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Storage of a reference in every version of a savegame.
 | 
			
		||||
@@ -392,7 +667,7 @@ typedef SaveLoad SaveLoadGlobVarList;
 | 
			
		||||
 * @param variable Name of the variable in the class or struct referenced by \a base.
 | 
			
		||||
 * @param type     Type of the reference, a value from #SLRefType.
 | 
			
		||||
 */
 | 
			
		||||
#define SLE_REF(base, variable, type) SLE_CONDREF(base, variable, type, 0, SL_MAX_VERSION)
 | 
			
		||||
#define SLE_REF(base, variable, type) SLE_CONDREF(base, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Storage of an array in every version of a savegame.
 | 
			
		||||
@@ -401,7 +676,7 @@ typedef SaveLoad SaveLoadGlobVarList;
 | 
			
		||||
 * @param type     Storage of the data in memory and in the savegame.
 | 
			
		||||
 * @param length   Number of elements in the array.
 | 
			
		||||
 */
 | 
			
		||||
#define SLE_ARR(base, variable, type, length) SLE_CONDARR(base, variable, type, length, 0, SL_MAX_VERSION)
 | 
			
		||||
#define SLE_ARR(base, variable, type, length) SLE_CONDARR(base, variable, type, length, SL_MIN_VERSION, SL_MAX_VERSION)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Storage of a string in every savegame version.
 | 
			
		||||
@@ -410,7 +685,7 @@ typedef SaveLoad SaveLoadGlobVarList;
 | 
			
		||||
 * @param type     Storage of the data in memory and in the savegame.
 | 
			
		||||
 * @param length   Number of elements in the string (only used for fixed size buffers).
 | 
			
		||||
 */
 | 
			
		||||
#define SLE_STR(base, variable, type, length) SLE_CONDSTR(base, variable, type, length, 0, SL_MAX_VERSION)
 | 
			
		||||
#define SLE_STR(base, variable, type, length) SLE_CONDSTR(base, variable, type, length, SL_MIN_VERSION, SL_MAX_VERSION)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Storage of a std::string in every savegame version.
 | 
			
		||||
@@ -418,7 +693,7 @@ typedef SaveLoad SaveLoadGlobVarList;
 | 
			
		||||
 * @param variable Name of the variable in the class or struct referenced by \a base.
 | 
			
		||||
 * @param type     Storage of the data in memory and in the savegame.
 | 
			
		||||
 */
 | 
			
		||||
#define SLE_STDSTR(base, variable, type) SLE_CONDSTDSTR(base, variable, type, 0, SL_MAX_VERSION)
 | 
			
		||||
#define SLE_STDSTR(base, variable, type) SLE_CONDSTDSTR(base, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Storage of a list in every savegame version.
 | 
			
		||||
@@ -426,7 +701,7 @@ typedef SaveLoad SaveLoadGlobVarList;
 | 
			
		||||
 * @param variable Name of the variable in the class or struct referenced by \a base.
 | 
			
		||||
 * @param type     Storage of the data in memory and in the savegame.
 | 
			
		||||
 */
 | 
			
		||||
#define SLE_LST(base, variable, type) SLE_CONDLST(base, variable, type, 0, SL_MAX_VERSION)
 | 
			
		||||
#define SLE_LST(base, variable, type) SLE_CONDLST(base, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Storage of a deque in every savegame version.
 | 
			
		||||
@@ -434,7 +709,7 @@ typedef SaveLoad SaveLoadGlobVarList;
 | 
			
		||||
 * @param variable Name of the variable in the class or struct referenced by \a base.
 | 
			
		||||
 * @param type     Storage of the data in memory and in the savegame.
 | 
			
		||||
 */
 | 
			
		||||
#define SLE_PTRDEQ(base, variable, type) SLE_CONDPTRDEQ(base, variable, type, 0, SL_MAX_VERSION)
 | 
			
		||||
#define SLE_PTRDEQ(base, variable, type) SLE_CONDPTRDEQ(base, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Storage of a vector in every savegame version.
 | 
			
		||||
@@ -442,13 +717,13 @@ typedef SaveLoad SaveLoadGlobVarList;
 | 
			
		||||
 * @param variable Name of the variable in the class or struct referenced by \a base.
 | 
			
		||||
 * @param type     Storage of the data in memory and in the savegame.
 | 
			
		||||
 */
 | 
			
		||||
#define SLE_VEC(base, variable, type) SLE_CONDVEC(base, variable, type, 0, SL_MAX_VERSION)
 | 
			
		||||
#define SLE_VEC(base, variable, type) SLE_CONDVEC(base, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Empty space in every savegame version.
 | 
			
		||||
 * @param length Length of the empty space.
 | 
			
		||||
 */
 | 
			
		||||
#define SLE_NULL(length) SLE_CONDNULL(length, 0, SL_MAX_VERSION)
 | 
			
		||||
#define SLE_NULL(length) SLE_CONDNULL(length, SL_MIN_VERSION, SL_MAX_VERSION)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Empty space in some savegame versions.
 | 
			
		||||
@@ -461,13 +736,13 @@ typedef SaveLoad SaveLoadGlobVarList;
 | 
			
		||||
#define SLE_CONDNULL(length, from, to) SLE_CONDNULL_X(length, from, to, SlXvFeatureTest())
 | 
			
		||||
 | 
			
		||||
/** Translate values ingame to different values in the savegame and vv. */
 | 
			
		||||
#define SLE_WRITEBYTE(base, variable) SLE_GENERAL(SL_WRITEBYTE, base, variable, 0, 0, 0, 0)
 | 
			
		||||
#define SLE_WRITEBYTE(base, variable) SLE_GENERAL(SL_WRITEBYTE, base, variable, 0, 0, SL_MIN_VERSION, SL_MAX_VERSION)
 | 
			
		||||
 | 
			
		||||
#define SLE_VEH_INCLUDE() {false, SL_VEH_INCLUDE, 0, 0, 0, SL_MAX_VERSION, NULL, 0, SlXvFeatureTest()}
 | 
			
		||||
#define SLE_ST_INCLUDE() {false, SL_ST_INCLUDE, 0, 0, 0, SL_MAX_VERSION, NULL, 0, SlXvFeatureTest()}
 | 
			
		||||
#define SLE_VEH_INCLUDE() {false, SL_VEH_INCLUDE, 0, 0, SL_MIN_VERSION, SL_MAX_VERSION, NULL, 0, SlXvFeatureTest()}
 | 
			
		||||
#define SLE_ST_INCLUDE() {false, SL_ST_INCLUDE, 0, 0, SL_MIN_VERSION, SL_MAX_VERSION, NULL, 0, SlXvFeatureTest()}
 | 
			
		||||
 | 
			
		||||
/** End marker of a struct/class save or load. */
 | 
			
		||||
#define SLE_END() {false, SL_END, 0, 0, 0, 0, NULL, 0, SlXvFeatureTest()}
 | 
			
		||||
#define SLE_END() {false, SL_END, 0, 0, SL_MIN_VERSION, SL_MIN_VERSION, NULL, 0, SlXvFeatureTest()}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Storage of global simple variables, references (pointers), and arrays.
 | 
			
		||||
@@ -566,49 +841,49 @@ typedef SaveLoad SaveLoadGlobVarList;
 | 
			
		||||
 * @param variable Name of the global variable.
 | 
			
		||||
 * @param type     Storage of the data in memory and in the savegame.
 | 
			
		||||
 */
 | 
			
		||||
#define SLEG_VAR(variable, type) SLEG_CONDVAR(variable, type, 0, SL_MAX_VERSION)
 | 
			
		||||
#define SLEG_VAR(variable, type) SLEG_CONDVAR(variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Storage of a global reference in every savegame version.
 | 
			
		||||
 * @param variable Name of the global variable.
 | 
			
		||||
 * @param type     Storage of the data in memory and in the savegame.
 | 
			
		||||
 */
 | 
			
		||||
#define SLEG_REF(variable, type) SLEG_CONDREF(variable, type, 0, SL_MAX_VERSION)
 | 
			
		||||
#define SLEG_REF(variable, type) SLEG_CONDREF(variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Storage of a global array in every savegame version.
 | 
			
		||||
 * @param variable Name of the global variable.
 | 
			
		||||
 * @param type     Storage of the data in memory and in the savegame.
 | 
			
		||||
 */
 | 
			
		||||
#define SLEG_ARR(variable, type) SLEG_CONDARR(variable, type, lengthof(variable), 0, SL_MAX_VERSION)
 | 
			
		||||
#define SLEG_ARR(variable, type) SLEG_CONDARR(variable, type, lengthof(variable), SL_MIN_VERSION, SL_MAX_VERSION)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Storage of a global string in every savegame version.
 | 
			
		||||
 * @param variable Name of the global variable.
 | 
			
		||||
 * @param type     Storage of the data in memory and in the savegame.
 | 
			
		||||
 */
 | 
			
		||||
#define SLEG_STR(variable, type) SLEG_CONDSTR(variable, type, sizeof(variable), 0, SL_MAX_VERSION)
 | 
			
		||||
#define SLEG_STR(variable, type) SLEG_CONDSTR(variable, type, sizeof(variable), SL_MIN_VERSION, SL_MAX_VERSION)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Storage of a global list in every savegame version.
 | 
			
		||||
 * @param variable Name of the global variable.
 | 
			
		||||
 * @param type     Storage of the data in memory and in the savegame.
 | 
			
		||||
 */
 | 
			
		||||
#define SLEG_LST(variable, type) SLEG_CONDLST(variable, type, 0, SL_MAX_VERSION)
 | 
			
		||||
#define SLEG_LST(variable, type) SLEG_CONDLST(variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Storage of a global deque in every savegame version.
 | 
			
		||||
 * @param variable Name of the global variable.
 | 
			
		||||
 * @param type     Storage of the data in memory and in the savegame.
 | 
			
		||||
 */
 | 
			
		||||
#define SLEG_PTRDEQ(variable, type) SLEG_CONDPTRDEQ(variable, type, 0, SL_MAX_VERSION)
 | 
			
		||||
#define SLEG_PTRDEQ(variable, type) SLEG_CONDPTRDEQ(variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Storage of a global vector in every savegame version.
 | 
			
		||||
 * @param variable Name of the global variable.
 | 
			
		||||
 * @param type     Storage of the data in memory and in the savegame.
 | 
			
		||||
 */
 | 
			
		||||
#define SLEG_VEC(variable, type) SLEG_CONDVEC(variable, type, 0, SL_MAX_VERSION)
 | 
			
		||||
#define SLEG_VEC(variable, type) SLEG_CONDVEC(variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Empty global space in some savegame versions.
 | 
			
		||||
@@ -620,7 +895,7 @@ typedef SaveLoad SaveLoadGlobVarList;
 | 
			
		||||
#define SLEG_CONDNULL(length, from, to) {true, SL_ARR, SLE_FILE_U8 | SLE_VAR_NULL | SLF_NOT_IN_CONFIG, length, from, to, (void*)NULL, SlXvFeatureTest()}
 | 
			
		||||
 | 
			
		||||
/** End marker of global variables save or load. */
 | 
			
		||||
#define SLEG_END() {true, SL_END, 0, 0, 0, 0, NULL, 0, SlXvFeatureTest()}
 | 
			
		||||
#define SLEG_END() {true, SL_END, 0, 0, SL_MIN_VERSION, SL_MIN_VERSION, NULL, 0, SlXvFeatureTest()}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Checks whether the savegame is below \a major.\a minor.
 | 
			
		||||
@@ -628,23 +903,23 @@ typedef SaveLoad SaveLoadGlobVarList;
 | 
			
		||||
 * @param minor Minor number of the version to check against. If \a minor is 0 or not specified, only the major number is checked.
 | 
			
		||||
 * @return Savegame version is earlier than the specified version.
 | 
			
		||||
 */
 | 
			
		||||
static inline bool IsSavegameVersionBefore(uint16 major, byte minor = 0)
 | 
			
		||||
static inline bool IsSavegameVersionBefore(SaveLoadVersion major, byte minor = 0)
 | 
			
		||||
{
 | 
			
		||||
	extern uint16 _sl_version;
 | 
			
		||||
	extern byte   _sl_minor_version;
 | 
			
		||||
	extern SaveLoadVersion _sl_version;
 | 
			
		||||
	extern byte            _sl_minor_version;
 | 
			
		||||
	return _sl_version < major || (minor > 0 && _sl_version == major && _sl_minor_version < minor);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Checks if some version from/to combination falls within the range of the
 | 
			
		||||
 * active savegame version.
 | 
			
		||||
 * @param version_from Lowest version number that falls within the range.
 | 
			
		||||
 * @param version_to   Highest version number that falls within the range.
 | 
			
		||||
 * @param version_from Inclusive savegame version lower bound.
 | 
			
		||||
 * @param version_to   Exclusive savegame version upper bound. SL_MAX_VERSION if no upper bound.
 | 
			
		||||
 * @return Active savegame version falls within the given range.
 | 
			
		||||
 */
 | 
			
		||||
static inline bool SlIsObjectCurrentlyValid(uint16 version_from, uint16 version_to, SlXvFeatureTest ext_feature_test)
 | 
			
		||||
static inline bool SlIsObjectCurrentlyValid(SaveLoadVersion version_from, SaveLoadVersion version_to, SlXvFeatureTest ext_feature_test)
 | 
			
		||||
{
 | 
			
		||||
	extern const uint16 SAVEGAME_VERSION;
 | 
			
		||||
	extern const SaveLoadVersion SAVEGAME_VERSION;
 | 
			
		||||
	if (!ext_feature_test.IsFeaturePresent(SAVEGAME_VERSION, version_from, version_to)) return false;
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
 
 | 
			
		||||
@@ -19,15 +19,15 @@
 | 
			
		||||
 | 
			
		||||
/** Description of a sign within the savegame. */
 | 
			
		||||
static const SaveLoad _sign_desc[] = {
 | 
			
		||||
	SLE_CONDVAR(Sign, name,  SLE_NAME,                   0, 83),
 | 
			
		||||
	SLE_CONDSTR(Sign, name,  SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Sign, x,     SLE_FILE_I16 | SLE_VAR_I32, 0, 4),
 | 
			
		||||
	SLE_CONDVAR(Sign, y,     SLE_FILE_I16 | SLE_VAR_I32, 0, 4),
 | 
			
		||||
	SLE_CONDVAR(Sign, x,     SLE_INT32,                  5, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Sign, y,     SLE_INT32,                  5, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Sign, owner, SLE_UINT8,                  6, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Sign, z,     SLE_FILE_U8  | SLE_VAR_I32, 0, 163),
 | 
			
		||||
	SLE_CONDVAR(Sign, z,     SLE_INT32,                164, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Sign, name,  SLE_NAME,                   SL_MIN_VERSION, SLV_84),
 | 
			
		||||
	SLE_CONDSTR(Sign, name,  SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Sign, x,     SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_5),
 | 
			
		||||
	SLE_CONDVAR(Sign, y,     SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_5),
 | 
			
		||||
	SLE_CONDVAR(Sign, x,     SLE_INT32,                  SLV_5, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Sign, y,     SLE_INT32,                  SLV_5, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Sign, owner, SLE_UINT8,                  SLV_6, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Sign, z,     SLE_FILE_U8  | SLE_VAR_I32, SL_MIN_VERSION, SLV_164),
 | 
			
		||||
	SLE_CONDVAR(Sign, z,     SLE_INT32,                SLV_164, SL_MAX_VERSION),
 | 
			
		||||
	SLE_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -55,12 +55,12 @@ static void Load_SIGN()
 | 
			
		||||
		 *  - we can't use IsValidCompany() now, so this is fixed in AfterLoadGame()
 | 
			
		||||
		 * All signs that were saved are valid (including those with just 'Sign' and INVALID_OWNER).
 | 
			
		||||
		 *  - so set owner to OWNER_NONE if needed (signs from pre-version 6.1 would be lost) */
 | 
			
		||||
		if (IsSavegameVersionBefore(6, 1) || (IsSavegameVersionBefore(83) && si->owner == INVALID_OWNER)) {
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_6, 1) || (IsSavegameVersionBefore(SLV_83) && si->owner == INVALID_OWNER)) {
 | 
			
		||||
			si->owner = OWNER_NONE;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/* Signs placed in scenario editor shall now be OWNER_DEITY */
 | 
			
		||||
		if (IsSavegameVersionBefore(171) && si->owner == OWNER_NONE && _file_to_saveload.abstract_ftype == FT_SCENARIO) {
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_171) && si->owner == OWNER_NONE && _file_to_saveload.abstract_ftype == FT_SCENARIO) {
 | 
			
		||||
			si->owner = OWNER_DEITY;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -159,18 +159,18 @@ void AfterLoadRoadStops()
 | 
			
		||||
 | 
			
		||||
static const SaveLoad _roadstop_desc[] = {
 | 
			
		||||
	SLE_VAR(RoadStop, xy,           SLE_UINT32),
 | 
			
		||||
	SLE_CONDNULL(1, 0, 44),
 | 
			
		||||
	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, 0, 8),
 | 
			
		||||
	SLE_CONDNULL(2, 0, 44),
 | 
			
		||||
	SLE_CONDNULL(1, 0, 25),
 | 
			
		||||
	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, 0, 44),
 | 
			
		||||
	SLE_CONDNULL(2, SL_MIN_VERSION, SLV_45),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDNULL(4, 0, 24),
 | 
			
		||||
	SLE_CONDNULL(1, 25, 25),
 | 
			
		||||
	SLE_CONDNULL(4, SL_MIN_VERSION, SLV_25),
 | 
			
		||||
	SLE_CONDNULL(1, SLV_25, SLV_26),
 | 
			
		||||
 | 
			
		||||
	SLE_END()
 | 
			
		||||
};
 | 
			
		||||
@@ -184,61 +184,61 @@ static const SaveLoad _dock_desc[] = {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const SaveLoad _old_station_desc[] = {
 | 
			
		||||
	SLE_CONDVAR(Station, xy,                         SLE_FILE_U16 | SLE_VAR_U32,  0, 5),
 | 
			
		||||
	SLE_CONDVAR(Station, xy,                         SLE_UINT32,                  6, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDNULL(4, 0, 5),  ///< bus/lorry tile
 | 
			
		||||
	SLE_CONDVAR(Station, train_station.tile,         SLE_FILE_U16 | SLE_VAR_U32,  0, 5),
 | 
			
		||||
	SLE_CONDVAR(Station, train_station.tile,         SLE_UINT32,                  6, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Station, airport.tile,               SLE_FILE_U16 | SLE_VAR_U32,  0, 5),
 | 
			
		||||
	SLE_CONDVAR(Station, airport.tile,               SLE_UINT32,                  6, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Station, dock_station.tile,          SLE_FILE_U16 | SLE_VAR_U32,  0, 5),
 | 
			
		||||
	SLE_CONDVAR(Station, dock_station.tile,          SLE_UINT32,                  6, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Station, xy,                         SLE_FILE_U16 | SLE_VAR_U32,  SL_MIN_VERSION, SLV_6),
 | 
			
		||||
	SLE_CONDVAR(Station, xy,                         SLE_UINT32,                  SLV_6, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDNULL(4, SL_MIN_VERSION, SLV_6),  ///< bus/lorry tile
 | 
			
		||||
	SLE_CONDVAR(Station, train_station.tile,         SLE_FILE_U16 | SLE_VAR_U32,  SL_MIN_VERSION, SLV_6),
 | 
			
		||||
	SLE_CONDVAR(Station, train_station.tile,         SLE_UINT32,                  SLV_6, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Station, airport.tile,               SLE_FILE_U16 | SLE_VAR_U32,  SL_MIN_VERSION, SLV_6),
 | 
			
		||||
	SLE_CONDVAR(Station, airport.tile,               SLE_UINT32,                  SLV_6, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Station, dock_station.tile,          SLE_FILE_U16 | SLE_VAR_U32,  SL_MIN_VERSION, SLV_6),
 | 
			
		||||
	SLE_CONDVAR(Station, dock_station.tile,          SLE_UINT32,                  SLV_6, SL_MAX_VERSION),
 | 
			
		||||
	    SLE_REF(Station, town,                       REF_TOWN),
 | 
			
		||||
	    SLE_VAR(Station, train_station.w,            SLE_FILE_U8 | SLE_VAR_U16),
 | 
			
		||||
	SLE_CONDVAR(Station, train_station.h,            SLE_FILE_U8 | SLE_VAR_U16,   2, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Station, train_station.h,            SLE_FILE_U8 | SLE_VAR_U16,   SLV_2, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDNULL(1, 0, 3),  ///< alpha_order
 | 
			
		||||
	SLE_CONDNULL(1, SL_MIN_VERSION, SLV_4),  ///< alpha_order
 | 
			
		||||
 | 
			
		||||
	    SLE_VAR(Station, string_id,                  SLE_STRINGID),
 | 
			
		||||
	SLE_CONDSTR(Station, name,                       SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Station, indtype,                    SLE_UINT8,                 103, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Station, had_vehicle_of_type,        SLE_FILE_U16 | SLE_VAR_U8,   0, 121),
 | 
			
		||||
	SLE_CONDVAR(Station, had_vehicle_of_type,        SLE_UINT8,                 122, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDSTR(Station, name,                       SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Station, indtype,                    SLE_UINT8,                 SLV_103, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Station, had_vehicle_of_type,        SLE_FILE_U16 | SLE_VAR_U8,   SL_MIN_VERSION, SLV_122),
 | 
			
		||||
	SLE_CONDVAR(Station, had_vehicle_of_type,        SLE_UINT8,                 SLV_122, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	    SLE_VAR(Station, time_since_load,            SLE_UINT8),
 | 
			
		||||
	    SLE_VAR(Station, time_since_unload,          SLE_UINT8),
 | 
			
		||||
	SLE_CONDVAR_X(Station, delete_ctr,               SLE_UINT8,                   0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 0, 3)),
 | 
			
		||||
	SLE_CONDVAR_X(Station, delete_ctr,               SLE_FILE_U16  | SLE_VAR_U8,  0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 4)),
 | 
			
		||||
	SLE_CONDVAR_X(Station, delete_ctr,               SLE_UINT8,                   SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 0, 3)),
 | 
			
		||||
	SLE_CONDVAR_X(Station, delete_ctr,               SLE_FILE_U16  | SLE_VAR_U8,  SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 4)),
 | 
			
		||||
	    SLE_VAR(Station, owner,                      SLE_UINT8),
 | 
			
		||||
	    SLE_VAR(Station, facilities,                 SLE_UINT8),
 | 
			
		||||
	    SLE_VAR(Station, airport.type,               SLE_UINT8),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDNULL(2, 0, 5),  ///< Truck/bus stop status
 | 
			
		||||
	SLE_CONDNULL(1, 0, 4),  ///< Blocked months
 | 
			
		||||
	SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6),  ///< Truck/bus stop status
 | 
			
		||||
	SLE_CONDNULL(1, SL_MIN_VERSION, SLV_5),  ///< Blocked months
 | 
			
		||||
 | 
			
		||||
	SLE_CONDVAR(Station, airport.flags,              SLE_VAR_U64 | SLE_FILE_U16,  0,  2),
 | 
			
		||||
	SLE_CONDVAR(Station, airport.flags,              SLE_VAR_U64 | SLE_FILE_U32,  3, 45),
 | 
			
		||||
	SLE_CONDVAR(Station, airport.flags,              SLE_UINT64,                 46, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Station, airport.flags,              SLE_VAR_U64 | SLE_FILE_U16,  SL_MIN_VERSION,  SLV_3),
 | 
			
		||||
	SLE_CONDVAR(Station, airport.flags,              SLE_VAR_U64 | SLE_FILE_U32,  SLV_3, SLV_46),
 | 
			
		||||
	SLE_CONDVAR(Station, airport.flags,              SLE_UINT64,                 SLV_46, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDNULL(2, 0, 25), ///< last-vehicle
 | 
			
		||||
	SLEG_CONDVAR_X(_old_last_vehicle_type,           SLE_UINT8,                  26, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_ST_LAST_VEH_TYPE, 0, 0)),
 | 
			
		||||
	SLE_CONDNULL(2, SL_MIN_VERSION, SLV_26), ///< last-vehicle
 | 
			
		||||
	SLEG_CONDVAR_X(_old_last_vehicle_type,           SLE_UINT8,                  SLV_26, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_ST_LAST_VEH_TYPE, 0, 0)),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDNULL(2, 3, 25), ///< custom station class and id
 | 
			
		||||
	SLE_CONDVAR(Station, build_date,                 SLE_FILE_U16 | SLE_VAR_I32,  3, 30),
 | 
			
		||||
	SLE_CONDVAR(Station, build_date,                 SLE_INT32,                  31, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDNULL(2, SLV_3, SLV_26), ///< custom station class and id
 | 
			
		||||
	SLE_CONDVAR(Station, build_date,                 SLE_FILE_U16 | SLE_VAR_I32,  SLV_3, SLV_31),
 | 
			
		||||
	SLE_CONDVAR(Station, build_date,                 SLE_INT32,                  SLV_31, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDREF(Station, bus_stops,                  REF_ROADSTOPS,               6, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDREF(Station, truck_stops,                REF_ROADSTOPS,               6, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDREF(Station, bus_stops,                  REF_ROADSTOPS,               SLV_6, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDREF(Station, truck_stops,                REF_ROADSTOPS,               SLV_6, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	/* Used by newstations for graphic variations */
 | 
			
		||||
	SLE_CONDVAR(Station, random_bits,                SLE_UINT16,                 27, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Station, waiting_triggers,           SLE_UINT8,                  27, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Station, num_specs,                  SLE_UINT8,                  27, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Station, random_bits,                SLE_UINT16,                 SLV_27, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Station, waiting_triggers,           SLE_UINT8,                  SLV_27, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Station, num_specs,                  SLE_UINT8,                  SLV_27, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDVEC(Station, loading_vehicles,           REF_VEHICLE,                57, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVEC(Station, loading_vehicles,           REF_VEHICLE,                SLV_57, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	/* reserve extra space in savegame here. (currently 32 bytes) */
 | 
			
		||||
	SLE_CONDNULL(32, 2, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDNULL(32, SLV_2, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLE_END()
 | 
			
		||||
};
 | 
			
		||||
@@ -251,8 +251,8 @@ static uint8  _cargo_days;
 | 
			
		||||
static Money  _cargo_feeder_share;
 | 
			
		||||
 | 
			
		||||
static const SaveLoad _station_speclist_desc[] = {
 | 
			
		||||
	SLE_CONDVAR(StationSpecList, grfid,    SLE_UINT32, 27, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(StationSpecList, localidx, SLE_UINT8,  27, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(StationSpecList, grfid,    SLE_UINT32, SLV_27, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(StationSpecList, localidx, SLE_UINT8,  SLV_27, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLE_END()
 | 
			
		||||
};
 | 
			
		||||
@@ -273,7 +273,7 @@ static const SaveLoad _flow_desc[] = {
 | 
			
		||||
	    SLE_VAR(FlowSaveLoad, source,     SLE_UINT16),
 | 
			
		||||
	    SLE_VAR(FlowSaveLoad, via,        SLE_UINT16),
 | 
			
		||||
	    SLE_VAR(FlowSaveLoad, share,      SLE_UINT32),
 | 
			
		||||
	SLE_CONDVAR(FlowSaveLoad, restricted, SLE_BOOL, 187, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(FlowSaveLoad, restricted, SLE_BOOL, SLV_187, SL_MAX_VERSION),
 | 
			
		||||
	    SLE_END()
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
@@ -286,29 +286,29 @@ static const SaveLoad _flow_desc[] = {
 | 
			
		||||
const SaveLoad *GetGoodsDesc()
 | 
			
		||||
{
 | 
			
		||||
	static const SaveLoad goods_desc[] = {
 | 
			
		||||
		SLEG_CONDVAR(            _waiting_acceptance,  SLE_UINT16,                  0, 67),
 | 
			
		||||
		 SLE_CONDVAR(GoodsEntry, status,               SLE_UINT8,                  68, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDNULL(2,                                                            51, 67),
 | 
			
		||||
		SLEG_CONDVAR(            _waiting_acceptance,  SLE_UINT16,                  SL_MIN_VERSION, SLV_68),
 | 
			
		||||
		 SLE_CONDVAR(GoodsEntry, status,               SLE_UINT8,                  SLV_68, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDNULL(2,                                                            SLV_51, SLV_68),
 | 
			
		||||
		     SLE_VAR(GoodsEntry, time_since_pickup,    SLE_UINT8),
 | 
			
		||||
		 SLE_CONDNULL_X(6,                                                          0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 4)),
 | 
			
		||||
		 SLE_CONDNULL_X(6,                                                 SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 4)),
 | 
			
		||||
		     SLE_VAR(GoodsEntry, rating,               SLE_UINT8),
 | 
			
		||||
		SLEG_CONDVAR(            _cargo_source,        SLE_FILE_U8 | SLE_VAR_U16,   0, 6),
 | 
			
		||||
		SLEG_CONDVAR(            _cargo_source,        SLE_UINT16,                  7, 67),
 | 
			
		||||
		SLEG_CONDVAR(            _cargo_source_xy,     SLE_UINT32,                 44, 67),
 | 
			
		||||
		SLEG_CONDVAR(            _cargo_days,          SLE_UINT8,                   0, 67),
 | 
			
		||||
		SLEG_CONDVAR(            _cargo_source,        SLE_FILE_U8 | SLE_VAR_U16,   SL_MIN_VERSION, SLV_7),
 | 
			
		||||
		SLEG_CONDVAR(            _cargo_source,        SLE_UINT16,                  SLV_7, SLV_68),
 | 
			
		||||
		SLEG_CONDVAR(            _cargo_source_xy,     SLE_UINT32,                 SLV_44, SLV_68),
 | 
			
		||||
		SLEG_CONDVAR(            _cargo_days,          SLE_UINT8,                   SL_MIN_VERSION, SLV_68),
 | 
			
		||||
		     SLE_VAR(GoodsEntry, last_speed,           SLE_UINT8),
 | 
			
		||||
		     SLE_VAR(GoodsEntry, last_age,             SLE_UINT8),
 | 
			
		||||
		SLEG_CONDVAR(            _cargo_feeder_share,  SLE_FILE_U32 | SLE_VAR_I64, 14, 64),
 | 
			
		||||
		SLEG_CONDVAR(            _cargo_feeder_share,  SLE_INT64,                  65, 67),
 | 
			
		||||
		 SLE_CONDVAR(GoodsEntry, amount_fract,         SLE_UINT8,                 150, SL_MAX_VERSION),
 | 
			
		||||
		SLEG_CONDPTRDEQ(         _packets,             REF_CARGO_PACKET,           68, 182),
 | 
			
		||||
		SLEG_CONDVAR(            _num_dests,           SLE_UINT32,                183, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(GoodsEntry, cargo.reserved_count, SLE_UINT,                  181, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(GoodsEntry, link_graph,           SLE_UINT16,                183, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(GoodsEntry, node,                 SLE_UINT16,                183, SL_MAX_VERSION),
 | 
			
		||||
		SLEG_CONDVAR(            _num_flows,           SLE_UINT32,                183, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(GoodsEntry, max_waiting_cargo,    SLE_UINT32,                183, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDVAR_X(GoodsEntry, last_vehicle_type,   SLE_UINT8,                   0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_ST_LAST_VEH_TYPE, 1)),
 | 
			
		||||
		SLEG_CONDVAR(            _cargo_feeder_share,  SLE_FILE_U32 | SLE_VAR_I64, SLV_14, SLV_65),
 | 
			
		||||
		SLEG_CONDVAR(            _cargo_feeder_share,  SLE_INT64,                  SLV_65, SLV_68),
 | 
			
		||||
		 SLE_CONDVAR(GoodsEntry, amount_fract,         SLE_UINT8,                 SLV_150, SL_MAX_VERSION),
 | 
			
		||||
		SLEG_CONDPTRDEQ(         _packets,             REF_CARGO_PACKET,           SLV_68, SLV_183),
 | 
			
		||||
		SLEG_CONDVAR(            _num_dests,           SLE_UINT32,                SLV_183, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(GoodsEntry, cargo.reserved_count, SLE_UINT,                  SLV_181, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(GoodsEntry, link_graph,           SLE_UINT16,                SLV_183, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(GoodsEntry, node,                 SLE_UINT16,                SLV_183, SL_MAX_VERSION),
 | 
			
		||||
		SLEG_CONDVAR(            _num_flows,           SLE_UINT32,                SLV_183, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(GoodsEntry, max_waiting_cargo,    SLE_UINT32,                SLV_183, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDVAR_X(GoodsEntry, last_vehicle_type,   SLE_UINT8,          SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_ST_LAST_VEH_TYPE, 1)),
 | 
			
		||||
		SLE_END()
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
@@ -351,7 +351,7 @@ static void Load_STNS()
 | 
			
		||||
	_cargo_days = 0;
 | 
			
		||||
	_cargo_feeder_share = 0;
 | 
			
		||||
 | 
			
		||||
	uint num_cargo = IsSavegameVersionBefore(55) ? 12 : IsSavegameVersionBefore(199) ? 32 : NUM_CARGO;
 | 
			
		||||
	uint num_cargo = IsSavegameVersionBefore(SLV_55) ? 12 : IsSavegameVersionBefore(SLV_EXTEND_CARGOTYPES) ? 32 : NUM_CARGO;
 | 
			
		||||
	int index;
 | 
			
		||||
	while ((index = SlIterateArray()) != -1) {
 | 
			
		||||
		Station *st = new (index) Station();
 | 
			
		||||
@@ -364,11 +364,11 @@ static void Load_STNS()
 | 
			
		||||
			GoodsEntry *ge = &st->goods[i];
 | 
			
		||||
			SlObject(ge, GetGoodsDesc());
 | 
			
		||||
			SwapPackets(ge);
 | 
			
		||||
			if (IsSavegameVersionBefore(68)) {
 | 
			
		||||
			if (IsSavegameVersionBefore(SLV_68)) {
 | 
			
		||||
				SB(ge->status, GoodsEntry::GES_ACCEPTANCE, 1, HasBit(_waiting_acceptance, 15));
 | 
			
		||||
				if (GB(_waiting_acceptance, 0, 12) != 0) {
 | 
			
		||||
					/* In old versions, enroute_from used 0xFF as INVALID_STATION */
 | 
			
		||||
					StationID source = (IsSavegameVersionBefore(7) && _cargo_source == 0xFF) ? INVALID_STATION : _cargo_source;
 | 
			
		||||
					StationID source = (IsSavegameVersionBefore(SLV_7) && _cargo_source == 0xFF) ? INVALID_STATION : _cargo_source;
 | 
			
		||||
 | 
			
		||||
					/* Make sure we can allocate the CargoPacket. This is safe
 | 
			
		||||
					 * as there can only be ~64k stations and 32 cargoes in these
 | 
			
		||||
@@ -398,12 +398,12 @@ static void Load_STNS()
 | 
			
		||||
static void Ptrs_STNS()
 | 
			
		||||
{
 | 
			
		||||
	/* Don't run when savegame version is higher than or equal to 123. */
 | 
			
		||||
	if (!IsSavegameVersionBefore(123)) return;
 | 
			
		||||
	if (!IsSavegameVersionBefore(SLV_123)) return;
 | 
			
		||||
 | 
			
		||||
	uint num_cargo = IsSavegameVersionBefore(199) ? 32 : NUM_CARGO;
 | 
			
		||||
	uint num_cargo = IsSavegameVersionBefore(SLV_EXTEND_CARGOTYPES) ? 32 : NUM_CARGO;
 | 
			
		||||
	Station *st;
 | 
			
		||||
	FOR_ALL_STATIONS(st) {
 | 
			
		||||
		if (!IsSavegameVersionBefore(68)) {
 | 
			
		||||
		if (!IsSavegameVersionBefore(SLV_68)) {
 | 
			
		||||
			for (CargoID i = 0; i < num_cargo; i++) {
 | 
			
		||||
				GoodsEntry *ge = &st->goods[i];
 | 
			
		||||
				SwapPackets(ge);
 | 
			
		||||
@@ -421,8 +421,8 @@ static const SaveLoad _base_station_desc[] = {
 | 
			
		||||
	      SLE_REF(BaseStation, town,                   REF_TOWN),
 | 
			
		||||
	      SLE_VAR(BaseStation, string_id,              SLE_STRINGID),
 | 
			
		||||
	      SLE_STR(BaseStation, name,                   SLE_STR | SLF_ALLOW_CONTROL, 0),
 | 
			
		||||
	SLE_CONDVAR_X(Station,     delete_ctr,             SLE_UINT8,                   0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 0, 3)),
 | 
			
		||||
	SLE_CONDVAR_X(Station,     delete_ctr,             SLE_FILE_U16  | SLE_VAR_U8,  0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 4)),
 | 
			
		||||
	SLE_CONDVAR_X(Station,     delete_ctr,             SLE_UINT8,                   SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 0, 3)),
 | 
			
		||||
	SLE_CONDVAR_X(Station,     delete_ctr,             SLE_FILE_U16  | SLE_VAR_U8,  SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 4)),
 | 
			
		||||
	      SLE_VAR(BaseStation, owner,                  SLE_UINT8),
 | 
			
		||||
	      SLE_VAR(BaseStation, facilities,             SLE_UINT8),
 | 
			
		||||
	      SLE_VAR(BaseStation, build_date,             SLE_INT32),
 | 
			
		||||
@@ -447,29 +447,29 @@ static const SaveLoad _station_desc[] = {
 | 
			
		||||
 | 
			
		||||
	      SLE_REF(Station, bus_stops,                  REF_ROADSTOPS),
 | 
			
		||||
	      SLE_REF(Station, truck_stops,                REF_ROADSTOPS),
 | 
			
		||||
    SLE_CONDVAR_X(Station, dock_station.tile,          SLE_UINT32,                  0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_MULTIPLE_DOCKS, 0, 0)),
 | 
			
		||||
    SLE_CONDREF_X(Station, docks,                      REF_DOCKS,                   0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_MULTIPLE_DOCKS, 1)),
 | 
			
		||||
    SLE_CONDVAR_X(Station, dock_station.tile,          SLE_UINT32,                  SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_MULTIPLE_DOCKS, 0, 0)),
 | 
			
		||||
    SLE_CONDREF_X(Station, docks,                      REF_DOCKS,                   SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_MULTIPLE_DOCKS, 1)),
 | 
			
		||||
	      SLE_VAR(Station, airport.tile,               SLE_UINT32),
 | 
			
		||||
	  SLE_CONDVAR(Station, airport.w,                  SLE_FILE_U8 | SLE_VAR_U16, 140, SL_MAX_VERSION),
 | 
			
		||||
	  SLE_CONDVAR(Station, airport.h,                  SLE_FILE_U8 | SLE_VAR_U16, 140, SL_MAX_VERSION),
 | 
			
		||||
	  SLE_CONDVAR(Station, airport.w,                  SLE_FILE_U8 | SLE_VAR_U16, SLV_140, SL_MAX_VERSION),
 | 
			
		||||
	  SLE_CONDVAR(Station, airport.h,                  SLE_FILE_U8 | SLE_VAR_U16, SLV_140, SL_MAX_VERSION),
 | 
			
		||||
	      SLE_VAR(Station, airport.type,               SLE_UINT8),
 | 
			
		||||
	  SLE_CONDVAR(Station, airport.layout,             SLE_UINT8,                 145, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDNULL_X(1, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 1, 6)),
 | 
			
		||||
	  SLE_CONDVAR(Station, airport.layout,             SLE_UINT8,                 SLV_145, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDNULL_X(1, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 1, 6)),
 | 
			
		||||
	      SLE_VAR(Station, airport.flags,              SLE_UINT64),
 | 
			
		||||
	SLE_CONDNULL_X(8, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 1, 6)),
 | 
			
		||||
	  SLE_CONDVAR(Station, airport.rotation,           SLE_UINT8,                 145, SL_MAX_VERSION),
 | 
			
		||||
	 SLEG_CONDARR(_old_st_persistent_storage.storage,  SLE_UINT32, 16,            145, 160),
 | 
			
		||||
	  SLE_CONDREF(Station, airport.psa,                REF_STORAGE,               161, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDNULL_X(8, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 1, 6)),
 | 
			
		||||
	  SLE_CONDVAR(Station, airport.rotation,           SLE_UINT8,                 SLV_145, SL_MAX_VERSION),
 | 
			
		||||
	 SLEG_CONDARR(_old_st_persistent_storage.storage,  SLE_UINT32, 16,            SLV_145, SLV_161),
 | 
			
		||||
	  SLE_CONDREF(Station, airport.psa,                REF_STORAGE,               SLV_161, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	      SLE_VAR(Station, indtype,                    SLE_UINT8),
 | 
			
		||||
 | 
			
		||||
	      SLE_VAR(Station, time_since_load,            SLE_UINT8),
 | 
			
		||||
	      SLE_VAR(Station, time_since_unload,          SLE_UINT8),
 | 
			
		||||
	SLEG_CONDVAR_X(_old_last_vehicle_type,             SLE_UINT8,                   0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_ST_LAST_VEH_TYPE, 0, 0)),
 | 
			
		||||
	SLEG_CONDVAR_X(_old_last_vehicle_type,             SLE_UINT8,           SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_ST_LAST_VEH_TYPE, 0, 0)),
 | 
			
		||||
	      SLE_VAR(Station, had_vehicle_of_type,        SLE_UINT8),
 | 
			
		||||
	      SLE_VEC(Station, loading_vehicles,           REF_VEHICLE),
 | 
			
		||||
	  SLE_CONDVAR(Station, always_accepted,            SLE_FILE_U32 | SLE_VAR_U64, 127, 198),
 | 
			
		||||
	  SLE_CONDVAR(Station, always_accepted,            SLE_UINT64,                 199, SL_MAX_VERSION),
 | 
			
		||||
	  SLE_CONDVAR(Station, always_accepted,            SLE_FILE_U32 | SLE_VAR_U64, SLV_127, SLV_EXTEND_CARGOTYPES),
 | 
			
		||||
	  SLE_CONDVAR(Station, always_accepted,            SLE_UINT64,                 SLV_EXTEND_CARGOTYPES, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	      SLE_END()
 | 
			
		||||
};
 | 
			
		||||
@@ -480,9 +480,9 @@ static const SaveLoad _waypoint_desc[] = {
 | 
			
		||||
 | 
			
		||||
	      SLE_VAR(Waypoint, town_cn,                   SLE_UINT16),
 | 
			
		||||
 | 
			
		||||
	  SLE_CONDVAR(Waypoint, train_station.tile,        SLE_UINT32,                  124, SL_MAX_VERSION),
 | 
			
		||||
	  SLE_CONDVAR(Waypoint, train_station.w,           SLE_FILE_U8 | SLE_VAR_U16,   124, SL_MAX_VERSION),
 | 
			
		||||
	  SLE_CONDVAR(Waypoint, train_station.h,           SLE_FILE_U8 | SLE_VAR_U16,   124, SL_MAX_VERSION),
 | 
			
		||||
	  SLE_CONDVAR(Waypoint, train_station.tile,        SLE_UINT32,                  SLV_124, SL_MAX_VERSION),
 | 
			
		||||
	  SLE_CONDVAR(Waypoint, train_station.w,           SLE_FILE_U8 | SLE_VAR_U16,   SLV_124, SL_MAX_VERSION),
 | 
			
		||||
	  SLE_CONDVAR(Waypoint, train_station.h,           SLE_FILE_U8 | SLE_VAR_U16,   SLV_124, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	      SLE_END()
 | 
			
		||||
};
 | 
			
		||||
@@ -557,7 +557,7 @@ static void Load_STNN()
 | 
			
		||||
{
 | 
			
		||||
	_num_flows = 0;
 | 
			
		||||
 | 
			
		||||
	const uint num_cargo = IsSavegameVersionBefore(199) ? 32 : NUM_CARGO;
 | 
			
		||||
	const uint num_cargo = IsSavegameVersionBefore(SLV_EXTEND_CARGOTYPES) ? 32 : NUM_CARGO;
 | 
			
		||||
	ReadBuffer *buffer = ReadBuffer::GetCurrent();
 | 
			
		||||
 | 
			
		||||
	int index;
 | 
			
		||||
@@ -571,7 +571,7 @@ static void Load_STNN()
 | 
			
		||||
			Station *st = Station::From(bst);
 | 
			
		||||
 | 
			
		||||
			/* Before savegame version 161, persistent storages were not stored in a pool. */
 | 
			
		||||
			if (IsSavegameVersionBefore(161) && !IsSavegameVersionBefore(145) && st->facilities & FACIL_AIRPORT) {
 | 
			
		||||
			if (IsSavegameVersionBefore(SLV_161) && !IsSavegameVersionBefore(SLV_145) && st->facilities & FACIL_AIRPORT) {
 | 
			
		||||
				/* Store the old persistent storage. The GRFID will be added later. */
 | 
			
		||||
				assert(PersistentStorage::CanAllocateItem());
 | 
			
		||||
				st->airport.psa = new PersistentStorage(0, 0, 0);
 | 
			
		||||
@@ -589,7 +589,7 @@ static void Load_STNN()
 | 
			
		||||
					flow.source = buffer->RawReadUint16();
 | 
			
		||||
					flow.via = buffer->RawReadUint16();
 | 
			
		||||
					flow.share = buffer->RawReadUint32();
 | 
			
		||||
					if (!IsSavegameVersionBefore(187)) flow.restricted = (buffer->ReadByte() != 0);
 | 
			
		||||
					if (!IsSavegameVersionBefore(SLV_187)) flow.restricted = (buffer->ReadByte() != 0);
 | 
			
		||||
 | 
			
		||||
					if (fs == NULL || prev_source != flow.source) {
 | 
			
		||||
						fs = &(st->goods[i].flows.insert(std::make_pair(flow.source, FlowStat(flow.via, flow.share, flow.restricted))).first->second);
 | 
			
		||||
@@ -598,7 +598,7 @@ static void Load_STNN()
 | 
			
		||||
					}
 | 
			
		||||
					prev_source = flow.source;
 | 
			
		||||
				}
 | 
			
		||||
				if (IsSavegameVersionBefore(183)) {
 | 
			
		||||
				if (IsSavegameVersionBefore(SLV_183)) {
 | 
			
		||||
					SwapPackets(&st->goods[i]);
 | 
			
		||||
				} else {
 | 
			
		||||
					StationCargoPair pair;
 | 
			
		||||
@@ -625,14 +625,14 @@ static void Load_STNN()
 | 
			
		||||
static void Ptrs_STNN()
 | 
			
		||||
{
 | 
			
		||||
	/* Don't run when savegame version lower than 123. */
 | 
			
		||||
	if (IsSavegameVersionBefore(123)) return;
 | 
			
		||||
	if (IsSavegameVersionBefore(SLV_123)) return;
 | 
			
		||||
 | 
			
		||||
	uint num_cargo = IsSavegameVersionBefore(199) ? 32 : NUM_CARGO;
 | 
			
		||||
	uint num_cargo = IsSavegameVersionBefore(SLV_EXTEND_CARGOTYPES) ? 32 : NUM_CARGO;
 | 
			
		||||
	Station *st;
 | 
			
		||||
	FOR_ALL_STATIONS(st) {
 | 
			
		||||
		for (CargoID i = 0; i < num_cargo; i++) {
 | 
			
		||||
			GoodsEntry *ge = &st->goods[i];
 | 
			
		||||
			if (IsSavegameVersionBefore(183)) {
 | 
			
		||||
			if (IsSavegameVersionBefore(SLV_183)) {
 | 
			
		||||
				SwapPackets(ge);
 | 
			
		||||
				SlObject(ge, GetGoodsDesc());
 | 
			
		||||
				SwapPackets(ge);
 | 
			
		||||
 
 | 
			
		||||
@@ -17,9 +17,9 @@
 | 
			
		||||
 | 
			
		||||
/** Description of the data to save and load in #PersistentStorage. */
 | 
			
		||||
static const SaveLoad _storage_desc[] = {
 | 
			
		||||
	 SLE_CONDVAR(PersistentStorage, grfid,    SLE_UINT32,                  6, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDARR(PersistentStorage, storage,  SLE_UINT32,  16,           161, 200),
 | 
			
		||||
	 SLE_CONDARR(PersistentStorage, storage,  SLE_UINT32, 256,           201, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDVAR(PersistentStorage, grfid,    SLE_UINT32,                  SLV_6, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDARR(PersistentStorage, storage,  SLE_UINT32,  16,           SLV_161, SLV_EXTEND_PERSISTENT_STORAGE),
 | 
			
		||||
	 SLE_CONDARR(PersistentStorage, storage,  SLE_UINT32, 256,           SLV_EXTEND_PERSISTENT_STORAGE, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
/** Called after load to trash broken pages. */
 | 
			
		||||
void AfterLoadStoryBook()
 | 
			
		||||
{
 | 
			
		||||
	if (IsSavegameVersionBefore(185)) {
 | 
			
		||||
	if (IsSavegameVersionBefore(SLV_185)) {
 | 
			
		||||
		/* Trash all story pages and page elements because
 | 
			
		||||
		 * they were saved with wrong data types.
 | 
			
		||||
		 */
 | 
			
		||||
@@ -29,11 +29,11 @@ void AfterLoadStoryBook()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const SaveLoad _story_page_elements_desc[] = {
 | 
			
		||||
	SLE_CONDVAR(StoryPageElement, sort_value,    SLE_FILE_U16 | SLE_VAR_U32, 0,   184),
 | 
			
		||||
	SLE_CONDVAR(StoryPageElement, sort_value,    SLE_UINT32,                 185, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(StoryPageElement, sort_value,    SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION,   SLV_185),
 | 
			
		||||
	SLE_CONDVAR(StoryPageElement, sort_value,    SLE_UINT32,                 SLV_185, SL_MAX_VERSION),
 | 
			
		||||
	    SLE_VAR(StoryPageElement, page,          SLE_UINT16),
 | 
			
		||||
	SLE_CONDVAR(StoryPageElement, type,          SLE_FILE_U16 | SLE_VAR_U8,  0,   184),
 | 
			
		||||
	SLE_CONDVAR(StoryPageElement, type,          SLE_UINT8,                  185, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(StoryPageElement, type,          SLE_FILE_U16 | SLE_VAR_U8,  SL_MIN_VERSION,   SLV_185),
 | 
			
		||||
	SLE_CONDVAR(StoryPageElement, type,          SLE_UINT8,                  SLV_185, SL_MAX_VERSION),
 | 
			
		||||
	    SLE_VAR(StoryPageElement, referenced_id, SLE_UINT32),
 | 
			
		||||
	    SLE_STR(StoryPageElement, text,          SLE_STR | SLF_ALLOW_CONTROL, 0),
 | 
			
		||||
	    SLE_END()
 | 
			
		||||
@@ -66,11 +66,11 @@ static void Load_STORY_PAGE_ELEMENT()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const SaveLoad _story_pages_desc[] = {
 | 
			
		||||
	SLE_CONDVAR(StoryPage, sort_value, SLE_FILE_U16 | SLE_VAR_U32, 0,   184),
 | 
			
		||||
	SLE_CONDVAR(StoryPage, sort_value, SLE_UINT32,                 185, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(StoryPage, sort_value, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION,   SLV_185),
 | 
			
		||||
	SLE_CONDVAR(StoryPage, sort_value, SLE_UINT32,                 SLV_185, SL_MAX_VERSION),
 | 
			
		||||
	    SLE_VAR(StoryPage, date,       SLE_UINT32),
 | 
			
		||||
	SLE_CONDVAR(StoryPage, company,    SLE_FILE_U16 | SLE_VAR_U8,  0,   184),
 | 
			
		||||
	SLE_CONDVAR(StoryPage, company,    SLE_UINT8,                  185, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(StoryPage, company,    SLE_FILE_U16 | SLE_VAR_U8,  SL_MIN_VERSION,   SLV_185),
 | 
			
		||||
	SLE_CONDVAR(StoryPage, company,    SLE_UINT8,                  SLV_185, SL_MAX_VERSION),
 | 
			
		||||
	    SLE_STR(StoryPage, title,      SLE_STR | SLF_ALLOW_CONTROL, 0),
 | 
			
		||||
	    SLE_END()
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -63,7 +63,7 @@ char *CopyFromOldName(StringID id)
 | 
			
		||||
	/* Is this name an (old) custom name? */
 | 
			
		||||
	if (GetStringTab(id) != TEXT_TAB_OLD_CUSTOM) return NULL;
 | 
			
		||||
 | 
			
		||||
	if (IsSavegameVersionBefore(37)) {
 | 
			
		||||
	if (IsSavegameVersionBefore(SLV_37)) {
 | 
			
		||||
		/* Allow for expansion when converted to UTF-8. */
 | 
			
		||||
		char tmp[LEN_OLD_STRINGS * MAX_CHAR_LENGTH];
 | 
			
		||||
		uint offs = _savegame_type == SGT_TTO ? LEN_OLD_STRINGS_TTO * GB(id, 0, 8) : LEN_OLD_STRINGS * GB(id, 0, 9);
 | 
			
		||||
 
 | 
			
		||||
@@ -19,13 +19,13 @@
 | 
			
		||||
static const SaveLoad _subsidies_desc[] = {
 | 
			
		||||
	    SLE_VAR(Subsidy, cargo_type, SLE_UINT8),
 | 
			
		||||
	    SLE_VAR(Subsidy, remaining,  SLE_UINT8),
 | 
			
		||||
	SLE_CONDVAR(Subsidy, awarded,    SLE_UINT8,                 125, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Subsidy, src_type,   SLE_UINT8,                 125, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Subsidy, dst_type,   SLE_UINT8,                 125, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Subsidy, src,        SLE_FILE_U8 | SLE_VAR_U16,   0, 4),
 | 
			
		||||
	SLE_CONDVAR(Subsidy, src,        SLE_UINT16,                  5, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Subsidy, dst,        SLE_FILE_U8 | SLE_VAR_U16,   0, 4),
 | 
			
		||||
	SLE_CONDVAR(Subsidy, dst,        SLE_UINT16,                  5, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Subsidy, awarded,    SLE_UINT8,                 SLV_125, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Subsidy, src_type,   SLE_UINT8,                 SLV_125, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Subsidy, dst_type,   SLE_UINT8,                 SLV_125, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Subsidy, src,        SLE_FILE_U8 | SLE_VAR_U16,   SL_MIN_VERSION, SLV_5),
 | 
			
		||||
	SLE_CONDVAR(Subsidy, src,        SLE_UINT16,                  SLV_5, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Subsidy, dst,        SLE_FILE_U8 | SLE_VAR_U16,   SL_MIN_VERSION, SLV_5),
 | 
			
		||||
	SLE_CONDVAR(Subsidy, dst,        SLE_UINT16,                  SLV_5, SL_MAX_VERSION),
 | 
			
		||||
	SLE_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -17,11 +17,11 @@ const SaveLoad* GTD() {
 | 
			
		||||
		SLE_VAR(TemplateVehicle, reuse_depot_vehicles, SLE_UINT8),
 | 
			
		||||
		SLE_VAR(TemplateVehicle, keep_remaining_vehicles, SLE_UINT8),
 | 
			
		||||
		SLE_VAR(TemplateVehicle, refit_as_template, SLE_UINT8),
 | 
			
		||||
		SLE_CONDVAR_X(TemplateVehicle, replace_old_only, SLE_UINT8, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 5)),
 | 
			
		||||
		SLE_CONDVAR_X(TemplateVehicle, replace_old_only, SLE_UINT8, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 5)),
 | 
			
		||||
 | 
			
		||||
		SLE_CONDVAR_X(TemplateVehicle, owner, SLE_VAR_U8 | SLE_FILE_U32, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 0, 3)),
 | 
			
		||||
		SLE_CONDVAR_X(TemplateVehicle, owner, SLE_UINT8, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 4)),
 | 
			
		||||
		SLE_CONDNULL_X(1, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 0, 3)),
 | 
			
		||||
		SLE_CONDVAR_X(TemplateVehicle, owner, SLE_VAR_U8 | SLE_FILE_U32, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 0, 3)),
 | 
			
		||||
		SLE_CONDVAR_X(TemplateVehicle, owner, SLE_UINT8, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 4)),
 | 
			
		||||
		SLE_CONDNULL_X(1, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 0, 3)),
 | 
			
		||||
 | 
			
		||||
		SLE_VAR(TemplateVehicle, engine_type, SLE_UINT16),
 | 
			
		||||
		SLE_VAR(TemplateVehicle, cargo_type, SLE_UINT8),
 | 
			
		||||
@@ -40,10 +40,10 @@ const SaveLoad* GTD() {
 | 
			
		||||
		SLE_VAR(TemplateVehicle, weight, SLE_UINT32),
 | 
			
		||||
		SLE_VAR(TemplateVehicle, max_te, SLE_UINT32),
 | 
			
		||||
 | 
			
		||||
		SLE_CONDNULL_X(1, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 0, 3)),
 | 
			
		||||
		SLE_CONDNULL_X(4, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 0, 1)),
 | 
			
		||||
		SLE_CONDNULL_X(36, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 2, 3)),
 | 
			
		||||
		SLE_CONDNULL_X(4, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 0, 3)),
 | 
			
		||||
		SLE_CONDNULL_X(1, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 0, 3)),
 | 
			
		||||
		SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 0, 1)),
 | 
			
		||||
		SLE_CONDNULL_X(36, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 2, 3)),
 | 
			
		||||
		SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 0, 3)),
 | 
			
		||||
 | 
			
		||||
		SLE_END()
 | 
			
		||||
	};
 | 
			
		||||
 
 | 
			
		||||
@@ -116,115 +116,115 @@ void UpdateHousesAndTowns()
 | 
			
		||||
 | 
			
		||||
/** Save and load of towns. */
 | 
			
		||||
static const SaveLoad _town_desc[] = {
 | 
			
		||||
	SLE_CONDVAR(Town, xy,                    SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
 | 
			
		||||
	SLE_CONDVAR(Town, xy,                    SLE_UINT32,                 6, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Town, xy,                    SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6),
 | 
			
		||||
	SLE_CONDVAR(Town, xy,                    SLE_UINT32,                 SLV_6, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDNULL(2, 0, 2),                   ///< population, no longer in use
 | 
			
		||||
	SLE_CONDNULL(4, 3, 84),                  ///< population, no longer in use
 | 
			
		||||
	SLE_CONDNULL(2, 0, 91),                  ///< num_houses, no longer in use
 | 
			
		||||
	SLE_CONDNULL(2, SL_MIN_VERSION, SLV_3),                   ///< population, no longer in use
 | 
			
		||||
	SLE_CONDNULL(4, SLV_3, SLV_85),                  ///< population, no longer in use
 | 
			
		||||
	SLE_CONDNULL(2, SL_MIN_VERSION, SLV_92),                  ///< num_houses, no longer in use
 | 
			
		||||
 | 
			
		||||
	SLE_CONDVAR(Town, townnamegrfid,         SLE_UINT32, 66, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Town, townnamegrfid,         SLE_UINT32, SLV_66, SL_MAX_VERSION),
 | 
			
		||||
	    SLE_VAR(Town, townnametype,          SLE_UINT16),
 | 
			
		||||
	    SLE_VAR(Town, townnameparts,         SLE_UINT32),
 | 
			
		||||
	SLE_CONDSTR(Town, name,                  SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDSTR(Town, name,                  SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	    SLE_VAR(Town, flags,                 SLE_UINT8),
 | 
			
		||||
	SLE_CONDVAR(Town, statues,               SLE_FILE_U8  | SLE_VAR_U16, 0, 103),
 | 
			
		||||
	SLE_CONDVAR(Town, statues,               SLE_UINT16,               104, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Town, statues,               SLE_FILE_U8  | SLE_VAR_U16, SL_MIN_VERSION, SLV_104),
 | 
			
		||||
	SLE_CONDVAR(Town, statues,               SLE_UINT16,               SLV_104, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDNULL(1, 0, 1),                   ///< sort_index, no longer in use
 | 
			
		||||
	SLE_CONDNULL(1, SL_MIN_VERSION, SLV_2),                   ///< sort_index, no longer in use
 | 
			
		||||
 | 
			
		||||
	SLE_CONDVAR(Town, have_ratings,          SLE_FILE_U8  | SLE_VAR_U16, 0, 103),
 | 
			
		||||
	SLE_CONDVAR(Town, have_ratings,          SLE_UINT16,               104, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDARR(Town, ratings,               SLE_INT16, 8,               0, 103),
 | 
			
		||||
	SLE_CONDARR(Town, ratings,               SLE_INT16, MAX_COMPANIES, 104, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDNULL_X(MAX_COMPANIES, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
 | 
			
		||||
	SLE_CONDVAR(Town, have_ratings,          SLE_FILE_U8  | SLE_VAR_U16, SL_MIN_VERSION, SLV_104),
 | 
			
		||||
	SLE_CONDVAR(Town, have_ratings,          SLE_UINT16,               SLV_104, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDARR(Town, ratings,               SLE_INT16, 8,               SL_MIN_VERSION, SLV_104),
 | 
			
		||||
	SLE_CONDARR(Town, ratings,               SLE_INT16, MAX_COMPANIES, SLV_104, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDNULL_X(MAX_COMPANIES, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
 | 
			
		||||
	/* failed bribe attempts are stored since savegame format 4 */
 | 
			
		||||
	SLE_CONDARR(Town, unwanted,              SLE_INT8,  8,               4, 103),
 | 
			
		||||
	SLE_CONDARR(Town, unwanted,              SLE_INT8,  MAX_COMPANIES, 104, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDARR(Town, unwanted,              SLE_INT8,  8,               SLV_4, SLV_104),
 | 
			
		||||
	SLE_CONDARR(Town, unwanted,              SLE_INT8,  MAX_COMPANIES, SLV_104, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_max, SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_MAIL].old_max,       SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_max, SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_MAIL].new_max,       SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_act, SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_MAIL].old_act,       SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_act, SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_MAIL].new_act,       SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_max, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_MAIL].old_max,       SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_max, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_MAIL].new_max,       SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_act, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_MAIL].old_act,       SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_act, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_MAIL].new_act,       SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_max, SLE_UINT32,                 9, 164),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_MAIL].old_max,       SLE_UINT32,                 9, 164),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_max, SLE_UINT32,                 9, 164),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_MAIL].new_max,       SLE_UINT32,                 9, 164),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_act, SLE_UINT32,                 9, 164),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_MAIL].old_act,       SLE_UINT32,                 9, 164),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_act, SLE_UINT32,                 9, 164),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_MAIL].new_act,       SLE_UINT32,                 9, 164),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_max, SLE_UINT32,                 SLV_9, SLV_165),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_MAIL].old_max,       SLE_UINT32,                 SLV_9, SLV_165),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_max, SLE_UINT32,                 SLV_9, SLV_165),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_MAIL].new_max,       SLE_UINT32,                 SLV_9, SLV_165),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_act, SLE_UINT32,                 SLV_9, SLV_165),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_MAIL].old_act,       SLE_UINT32,                 SLV_9, SLV_165),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_act, SLE_UINT32,                 SLV_9, SLV_165),
 | 
			
		||||
	SLE_CONDVAR(Town, supplied[CT_MAIL].new_act,       SLE_UINT32,                 SLV_9, SLV_165),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDNULL(2, 0, 163),                 ///< pct_pass_transported / pct_mail_transported, now computed on the fly
 | 
			
		||||
	SLE_CONDNULL(2, SL_MIN_VERSION, SLV_164),                 ///< pct_pass_transported / pct_mail_transported, now computed on the fly
 | 
			
		||||
 | 
			
		||||
	SLE_CONDVAR(Town, received[TE_FOOD].old_act,       SLE_UINT16,                 0, 164),
 | 
			
		||||
	SLE_CONDVAR(Town, received[TE_WATER].old_act,      SLE_UINT16,                 0, 164),
 | 
			
		||||
	SLE_CONDVAR(Town, received[TE_FOOD].new_act,       SLE_UINT16,                 0, 164),
 | 
			
		||||
	SLE_CONDVAR(Town, received[TE_WATER].new_act,      SLE_UINT16,                 0, 164),
 | 
			
		||||
	SLE_CONDVAR(Town, received[TE_FOOD].old_act,       SLE_UINT16,                 SL_MIN_VERSION, SLV_165),
 | 
			
		||||
	SLE_CONDVAR(Town, received[TE_WATER].old_act,      SLE_UINT16,                 SL_MIN_VERSION, SLV_165),
 | 
			
		||||
	SLE_CONDVAR(Town, received[TE_FOOD].new_act,       SLE_UINT16,                 SL_MIN_VERSION, SLV_165),
 | 
			
		||||
	SLE_CONDVAR(Town, received[TE_WATER].new_act,      SLE_UINT16,                 SL_MIN_VERSION, SLV_165),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDARR(Town, goal, SLE_UINT32, NUM_TE, 165, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDARR(Town, goal, SLE_UINT32, NUM_TE, SLV_165, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDSTR(Town, text,                  SLE_STR | SLF_ALLOW_CONTROL, 0, 168, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDSTR(Town, text,                  SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_168, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDVAR(Town, time_until_rebuild,    SLE_FILE_U8 | SLE_VAR_U16,  0, 53),
 | 
			
		||||
	SLE_CONDVAR(Town, grow_counter,          SLE_FILE_U8 | SLE_VAR_U16,  0, 53),
 | 
			
		||||
	SLE_CONDVAR(Town, growth_rate,           SLE_FILE_U8 | SLE_VAR_I16,  0, 53),
 | 
			
		||||
	SLE_CONDVAR(Town, time_until_rebuild,    SLE_FILE_U8 | SLE_VAR_U16,  SL_MIN_VERSION, SLV_54),
 | 
			
		||||
	SLE_CONDVAR(Town, grow_counter,          SLE_FILE_U8 | SLE_VAR_U16,  SL_MIN_VERSION, SLV_54),
 | 
			
		||||
	SLE_CONDVAR(Town, growth_rate,           SLE_FILE_U8 | SLE_VAR_I16,  SL_MIN_VERSION, SLV_54),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDVAR(Town, time_until_rebuild,    SLE_UINT16,                54, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Town, grow_counter,          SLE_UINT16,                54, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Town, time_until_rebuild,    SLE_UINT16,                SLV_54, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Town, grow_counter,          SLE_UINT16,                SLV_54, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDVAR(Town, growth_rate,           SLE_FILE_I16 | SLE_VAR_U16, 54, 164),
 | 
			
		||||
	SLE_CONDVAR(Town, growth_rate,           SLE_UINT16,                 165, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Town, growth_rate,           SLE_FILE_I16 | SLE_VAR_U16, SLV_54, SLV_165),
 | 
			
		||||
	SLE_CONDVAR(Town, growth_rate,           SLE_UINT16,                 SLV_165, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	    SLE_VAR(Town, fund_buildings_months, SLE_UINT8),
 | 
			
		||||
	    SLE_VAR(Town, road_build_months,     SLE_UINT8),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDVAR(Town, exclusivity,           SLE_UINT8,                  2, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Town, exclusive_counter,     SLE_UINT8,                  2, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Town, exclusivity,           SLE_UINT8,                  SLV_2, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Town, exclusive_counter,     SLE_UINT8,                  SLV_2, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDVAR(Town, larger_town,           SLE_BOOL,                  56, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Town, layout,                SLE_UINT8,                113, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Town, larger_town,           SLE_BOOL,                  SLV_56, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Town, layout,                SLE_UINT8,                SLV_113, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDLST(Town, psa_list,            REF_STORAGE,                161, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDLST(Town, psa_list,            REF_STORAGE,                SLV_161, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDVAR(Town, cargo_produced,        SLE_FILE_U32 | SLE_VAR_U64, 166, 198),
 | 
			
		||||
	SLE_CONDVAR(Town, cargo_produced,        SLE_UINT64,                 199, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(Town, cargo_produced,        SLE_FILE_U32 | SLE_VAR_U64, SLV_166, SLV_EXTEND_CARGOTYPES),
 | 
			
		||||
	SLE_CONDVAR(Town, cargo_produced,        SLE_UINT64,                 SLV_EXTEND_CARGOTYPES, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	/* reserve extra space in savegame here. (currently 30 bytes) */
 | 
			
		||||
	SLE_CONDNULL(30, 2, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDNULL(30, SLV_2, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLE_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const SaveLoad _town_supplied_desc[] = {
 | 
			
		||||
	SLE_CONDVAR(TransportedCargoStat<uint32>, old_max, SLE_UINT32, 165, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(TransportedCargoStat<uint32>, new_max, SLE_UINT32, 165, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(TransportedCargoStat<uint32>, old_act, SLE_UINT32, 165, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(TransportedCargoStat<uint32>, new_act, SLE_UINT32, 165, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(TransportedCargoStat<uint32>, old_max, SLE_UINT32, SLV_165, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(TransportedCargoStat<uint32>, new_max, SLE_UINT32, SLV_165, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(TransportedCargoStat<uint32>, old_act, SLE_UINT32, SLV_165, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(TransportedCargoStat<uint32>, new_act, SLE_UINT32, SLV_165, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLE_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const SaveLoad _town_received_desc[] = {
 | 
			
		||||
	SLE_CONDVAR(TransportedCargoStat<uint16>, old_max, SLE_UINT16, 165, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(TransportedCargoStat<uint16>, new_max, SLE_UINT16, 165, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(TransportedCargoStat<uint16>, old_act, SLE_UINT16, 165, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(TransportedCargoStat<uint16>, new_act, SLE_UINT16, 165, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(TransportedCargoStat<uint16>, old_max, SLE_UINT16, SLV_165, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(TransportedCargoStat<uint16>, new_max, SLE_UINT16, SLV_165, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(TransportedCargoStat<uint16>, old_act, SLE_UINT16, SLV_165, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(TransportedCargoStat<uint16>, new_act, SLE_UINT16, SLV_165, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLE_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const SaveLoad _town_received_desc_spp[] = {
 | 
			
		||||
	SLE_CONDVAR(TransportedCargoStat<uint16>, old_max, SLE_FILE_U32 | SLE_VAR_U16, 165, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(TransportedCargoStat<uint16>, new_max, SLE_FILE_U32 | SLE_VAR_U16, 165, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(TransportedCargoStat<uint16>, old_act, SLE_FILE_U32 | SLE_VAR_U16, 165, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(TransportedCargoStat<uint16>, new_act, SLE_FILE_U32 | SLE_VAR_U16, 165, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(TransportedCargoStat<uint16>, old_max, SLE_FILE_U32 | SLE_VAR_U16, SLV_165, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(TransportedCargoStat<uint16>, new_max, SLE_FILE_U32 | SLE_VAR_U16, SLV_165, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(TransportedCargoStat<uint16>, old_act, SLE_FILE_U32 | SLE_VAR_U16, SLV_165, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(TransportedCargoStat<uint16>, new_act, SLE_FILE_U32 | SLE_VAR_U16, SLV_165, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLE_END()
 | 
			
		||||
};
 | 
			
		||||
@@ -289,7 +289,7 @@ static void Save_TOWN()
 | 
			
		||||
static void Load_TOWN()
 | 
			
		||||
{
 | 
			
		||||
	int index;
 | 
			
		||||
	uint num_cargo = IsSavegameVersionBefore(199) ? 32 : NUM_CARGO;
 | 
			
		||||
	uint num_cargo = IsSavegameVersionBefore(SLV_EXTEND_CARGOTYPES) ? 32 : NUM_CARGO;
 | 
			
		||||
 | 
			
		||||
	while ((index = SlIterateArray()) != -1) {
 | 
			
		||||
		Town *t = new (index) Town();
 | 
			
		||||
@@ -312,7 +312,7 @@ static void Load_TOWN()
 | 
			
		||||
			SlErrorCorrupt("Invalid town name generator");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (IsSavegameVersionBefore(166)) continue;
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_166)) continue;
 | 
			
		||||
 | 
			
		||||
		SlObject(&t->cargo_accepted, GetTileMatrixDesc());
 | 
			
		||||
		if (t->cargo_accepted.area.w != 0) {
 | 
			
		||||
@@ -330,7 +330,7 @@ static void Load_TOWN()
 | 
			
		||||
static void Ptrs_TOWN()
 | 
			
		||||
{
 | 
			
		||||
	/* Don't run when savegame version lower than 161. */
 | 
			
		||||
	if (IsSavegameVersionBefore(161)) return;
 | 
			
		||||
	if (IsSavegameVersionBefore(SLV_161)) return;
 | 
			
		||||
 | 
			
		||||
	Town *t;
 | 
			
		||||
	FOR_ALL_TOWNS(t) {
 | 
			
		||||
 
 | 
			
		||||
@@ -18,10 +18,10 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static const SaveLoad _tunnel_desc[] = {
 | 
			
		||||
	 SLE_CONDVAR(Tunnel, tile_n,           SLE_UINT32,             0, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDVAR(Tunnel, tile_s,           SLE_UINT32,             0, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDVAR(Tunnel, height,            SLE_UINT8,             0, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDVAR(Tunnel, is_chunnel,         SLE_BOOL,             0, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDVAR(Tunnel, tile_n,           SLE_UINT32,             SL_MIN_VERSION, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDVAR(Tunnel, tile_s,           SLE_UINT32,             SL_MIN_VERSION, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDVAR(Tunnel, height,            SLE_UINT8,             SL_MIN_VERSION, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_CONDVAR(Tunnel, is_chunnel,         SLE_BOOL,             SL_MIN_VERSION, SL_MAX_VERSION),
 | 
			
		||||
	 SLE_END()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -275,7 +275,7 @@ void AfterLoadVehicles(bool part_of_load)
 | 
			
		||||
 | 
			
		||||
		FOR_ALL_VEHICLES(v) {
 | 
			
		||||
			if (v->orders.old != NULL) {
 | 
			
		||||
				if (IsSavegameVersionBefore(105)) { // Pre-105 didn't save an OrderList
 | 
			
		||||
				if (IsSavegameVersionBefore(SLV_105)) { // Pre-105 didn't save an OrderList
 | 
			
		||||
					if (mapping[v->orders.old] == NULL) {
 | 
			
		||||
						/* This adds the whole shared vehicle chain for case b */
 | 
			
		||||
 | 
			
		||||
@@ -287,7 +287,7 @@ void AfterLoadVehicles(bool part_of_load)
 | 
			
		||||
					} else {
 | 
			
		||||
						v->orders.list = mapping[v->orders.old];
 | 
			
		||||
						/* For old games (case a) we must create the shared vehicle chain */
 | 
			
		||||
						if (IsSavegameVersionBefore(5, 2)) {
 | 
			
		||||
						if (IsSavegameVersionBefore(SLV_5, 2)) {
 | 
			
		||||
							v->AddToShared(v->orders.list->GetFirstSharedVehicle());
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
@@ -310,7 +310,7 @@ void AfterLoadVehicles(bool part_of_load)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (part_of_load) {
 | 
			
		||||
		if (IsSavegameVersionBefore(105)) {
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_105)) {
 | 
			
		||||
			/* Before 105 there was no order for shared orders, thus it messed up horribly */
 | 
			
		||||
			FOR_ALL_VEHICLES(v) {
 | 
			
		||||
				if (v->First() != v || v->orders.list != NULL || v->previous_shared != NULL || v->next_shared == NULL) continue;
 | 
			
		||||
@@ -324,7 +324,7 @@ void AfterLoadVehicles(bool part_of_load)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (IsSavegameVersionBefore(157)) {
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_157)) {
 | 
			
		||||
			/* The road vehicle subtype was converted to a flag. */
 | 
			
		||||
			RoadVehicle *rv;
 | 
			
		||||
			FOR_ALL_ROADVEHICLES(rv) {
 | 
			
		||||
@@ -342,7 +342,7 @@ void AfterLoadVehicles(bool part_of_load)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (IsSavegameVersionBefore(160)) {
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_160)) {
 | 
			
		||||
			/* In some old savegames there might be some "crap" stored. */
 | 
			
		||||
			FOR_ALL_VEHICLES(v) {
 | 
			
		||||
				if (!v->IsPrimaryVehicle() && v->type != VEH_DISASTER) {
 | 
			
		||||
@@ -352,14 +352,14 @@ void AfterLoadVehicles(bool part_of_load)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (IsSavegameVersionBefore(162)) {
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_162)) {
 | 
			
		||||
			/* Set the vehicle-local cargo age counter from the old global counter. */
 | 
			
		||||
			FOR_ALL_VEHICLES(v) {
 | 
			
		||||
				v->cargo_age_counter = _age_cargo_skip_counter;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (IsSavegameVersionBefore(180)) {
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_180)) {
 | 
			
		||||
			/* Set service interval flags */
 | 
			
		||||
			FOR_ALL_VEHICLES(v) {
 | 
			
		||||
				if (!v->IsPrimaryVehicle()) continue;
 | 
			
		||||
@@ -372,12 +372,23 @@ void AfterLoadVehicles(bool part_of_load)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (IsSavegameVersionBefore(204)) {
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_SHIP_ROTATION)) {
 | 
			
		||||
			/* Ship rotation added */
 | 
			
		||||
			Ship *s;
 | 
			
		||||
			FOR_ALL_SHIPS(s) {
 | 
			
		||||
				s->rotation = s->direction;
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			Ship *s;
 | 
			
		||||
			FOR_ALL_SHIPS(s) {
 | 
			
		||||
				if (s->rotation == s->direction) continue;
 | 
			
		||||
				/* In case we are rotating on gameload, set the rotation position to
 | 
			
		||||
				 * the current position, otherwise the applied workaround offset would
 | 
			
		||||
				 * be with respect to 0,0.
 | 
			
		||||
				 */
 | 
			
		||||
				s->rotation_x_pos = s->x_pos;
 | 
			
		||||
				s->rotation_y_pos = s->y_pos;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	v = nullptr;
 | 
			
		||||
@@ -420,7 +431,7 @@ void AfterLoadVehicles(bool part_of_load)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Stop non-front engines */
 | 
			
		||||
	if (part_of_load && IsSavegameVersionBefore(112)) {
 | 
			
		||||
	if (part_of_load && IsSavegameVersionBefore(SLV_112)) {
 | 
			
		||||
		FOR_ALL_VEHICLES(v) {
 | 
			
		||||
			if (v->type == VEH_TRAIN) {
 | 
			
		||||
				Train *t = Train::From(v);
 | 
			
		||||
@@ -433,7 +444,7 @@ void AfterLoadVehicles(bool part_of_load)
 | 
			
		||||
			}
 | 
			
		||||
			/* trains weren't stopping gradually in old OTTD versions (and TTO/TTD)
 | 
			
		||||
			 * other vehicle types didn't have zero speed while stopped (even in 'recent' OTTD versions) */
 | 
			
		||||
			if ((v->vehstatus & VS_STOPPED) && (v->type != VEH_TRAIN || IsSavegameVersionBefore(2, 1))) {
 | 
			
		||||
			if ((v->vehstatus & VS_STOPPED) && (v->type != VEH_TRAIN || IsSavegameVersionBefore(SLV_2, 1))) {
 | 
			
		||||
				v->cur_speed = 0;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
@@ -595,157 +606,157 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
 | 
			
		||||
		     SLE_VAR(Vehicle, subtype,               SLE_UINT8),
 | 
			
		||||
 | 
			
		||||
		     SLE_REF(Vehicle, next,                  REF_VEHICLE_OLD),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, name,                  SLE_NAME,                     0,  83),
 | 
			
		||||
		 SLE_CONDSTR(Vehicle, name,                  SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, unitnumber,            SLE_FILE_U8  | SLE_VAR_U16,   0,   7),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, unitnumber,            SLE_UINT16,                   8, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, name,                  SLE_NAME,                     SL_MIN_VERSION,  SLV_84),
 | 
			
		||||
		 SLE_CONDSTR(Vehicle, name,                  SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, unitnumber,            SLE_FILE_U8  | SLE_VAR_U16,   SL_MIN_VERSION,   SLV_8),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, unitnumber,            SLE_UINT16,                   SLV_8, SL_MAX_VERSION),
 | 
			
		||||
		     SLE_VAR(Vehicle, owner,                 SLE_UINT8),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, tile,                  SLE_FILE_U16 | SLE_VAR_U32,   0,   5),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, tile,                  SLE_UINT32,                   6, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, dest_tile,             SLE_FILE_U16 | SLE_VAR_U32,   0,   5),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, dest_tile,             SLE_UINT32,                   6, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, tile,                  SLE_FILE_U16 | SLE_VAR_U32,   SL_MIN_VERSION,   SLV_6),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, tile,                  SLE_UINT32,                   SLV_6, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, dest_tile,             SLE_FILE_U16 | SLE_VAR_U32,   SL_MIN_VERSION,   SLV_6),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, dest_tile,             SLE_UINT32,                   SLV_6, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, x_pos,                 SLE_FILE_U16 | SLE_VAR_U32,   0,   5),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, x_pos,                 SLE_UINT32,                   6, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, y_pos,                 SLE_FILE_U16 | SLE_VAR_U32,   0,   5),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, y_pos,                 SLE_UINT32,                   6, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, z_pos,                 SLE_FILE_U8  | SLE_VAR_I32,   0, 163),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, z_pos,                 SLE_INT32,                  164, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, x_pos,                 SLE_FILE_U16 | SLE_VAR_U32,   SL_MIN_VERSION,   SLV_6),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, x_pos,                 SLE_UINT32,                   SLV_6, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, y_pos,                 SLE_FILE_U16 | SLE_VAR_U32,   SL_MIN_VERSION,   SLV_6),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, y_pos,                 SLE_UINT32,                   SLV_6, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, z_pos,                 SLE_FILE_U8  | SLE_VAR_I32,   SL_MIN_VERSION, SLV_164),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, z_pos,                 SLE_INT32,                  SLV_164, SL_MAX_VERSION),
 | 
			
		||||
		     SLE_VAR(Vehicle, direction,             SLE_UINT8),
 | 
			
		||||
 | 
			
		||||
		SLE_CONDNULL(2,                                                            0,  57),
 | 
			
		||||
		SLE_CONDNULL(2,                                                            SL_MIN_VERSION,  SLV_58),
 | 
			
		||||
		     SLE_VAR(Vehicle, spritenum,             SLE_UINT8),
 | 
			
		||||
		SLE_CONDNULL(5,                                                            0,  57),
 | 
			
		||||
		SLE_CONDNULL(5,                                                            SL_MIN_VERSION,  SLV_58),
 | 
			
		||||
		     SLE_VAR(Vehicle, engine_type,           SLE_UINT16),
 | 
			
		||||
 | 
			
		||||
		SLE_CONDNULL(2,                                                            0,  151),
 | 
			
		||||
		SLE_CONDNULL(2,                                                            SL_MIN_VERSION,  SLV_152),
 | 
			
		||||
		     SLE_VAR(Vehicle, cur_speed,             SLE_UINT16),
 | 
			
		||||
		     SLE_VAR(Vehicle, subspeed,              SLE_UINT8),
 | 
			
		||||
		     SLE_VAR(Vehicle, acceleration,          SLE_UINT8),
 | 
			
		||||
		     SLE_VAR(Vehicle, progress,              SLE_UINT8),
 | 
			
		||||
 | 
			
		||||
		     SLE_VAR(Vehicle, vehstatus,             SLE_UINT8),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, last_station_visited,  SLE_FILE_U8  | SLE_VAR_U16,   0,   4),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, last_station_visited,  SLE_UINT16,                   5, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, last_loading_station,  SLE_UINT16,                 182, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, last_station_visited,  SLE_FILE_U8  | SLE_VAR_U16,   SL_MIN_VERSION,   SLV_5),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, last_station_visited,  SLE_UINT16,                   SLV_5, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, last_loading_station,  SLE_UINT16,                 SLV_182, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
		     SLE_VAR(Vehicle, cargo_type,            SLE_UINT8),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, cargo_subtype,         SLE_UINT8,                   35, SL_MAX_VERSION),
 | 
			
		||||
		SLEG_CONDVAR(         _cargo_days,           SLE_UINT8,                    0,  67),
 | 
			
		||||
		SLEG_CONDVAR(         _cargo_source,         SLE_FILE_U8  | SLE_VAR_U16,   0,   6),
 | 
			
		||||
		SLEG_CONDVAR(         _cargo_source,         SLE_UINT16,                   7,  67),
 | 
			
		||||
		SLEG_CONDVAR(         _cargo_source_xy,      SLE_UINT32,                  44,  67),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, cargo_subtype,         SLE_UINT8,                   SLV_35, SL_MAX_VERSION),
 | 
			
		||||
		SLEG_CONDVAR(         _cargo_days,           SLE_UINT8,                    SL_MIN_VERSION,  SLV_68),
 | 
			
		||||
		SLEG_CONDVAR(         _cargo_source,         SLE_FILE_U8  | SLE_VAR_U16,   SL_MIN_VERSION,   SLV_7),
 | 
			
		||||
		SLEG_CONDVAR(         _cargo_source,         SLE_UINT16,                   SLV_7,  SLV_68),
 | 
			
		||||
		SLEG_CONDVAR(         _cargo_source_xy,      SLE_UINT32,                  SLV_44,  SLV_68),
 | 
			
		||||
		     SLE_VAR(Vehicle, cargo_cap,             SLE_UINT16),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, refit_cap,             SLE_UINT16,                 182, SL_MAX_VERSION),
 | 
			
		||||
		SLEG_CONDVAR(         _cargo_count,          SLE_UINT16,                   0,  67),
 | 
			
		||||
		 SLE_CONDPTRDEQ(Vehicle, cargo.packets,      REF_CARGO_PACKET,            68, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDARR(Vehicle, cargo.action_counts,   SLE_UINT, VehicleCargoList::NUM_MOVE_TO_ACTION, 181, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, cargo_age_counter,     SLE_UINT16,                 162, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, refit_cap,             SLE_UINT16,                 SLV_182, SL_MAX_VERSION),
 | 
			
		||||
		SLEG_CONDVAR(         _cargo_count,          SLE_UINT16,                   SL_MIN_VERSION,  SLV_68),
 | 
			
		||||
		SLE_CONDPTRDEQ(Vehicle, cargo.packets,         REF_CARGO_PACKET,            SLV_68, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDARR(Vehicle, cargo.action_counts,   SLE_UINT, VehicleCargoList::NUM_MOVE_TO_ACTION, SLV_181, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, cargo_age_counter,     SLE_UINT16,                 SLV_162, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
		     SLE_VAR(Vehicle, day_counter,           SLE_UINT8),
 | 
			
		||||
		     SLE_VAR(Vehicle, tick_counter,          SLE_UINT8),
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle, running_ticks,        SLE_FILE_U8  | SLE_VAR_U16,  88, SL_MAX_VERSION, SlXvFeatureTest([](uint16 version, bool version_in_range) -> bool {
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle, running_ticks,        SLE_FILE_U8  | SLE_VAR_U16,  SLV_88, SL_MAX_VERSION, SlXvFeatureTest([](uint16 version, bool version_in_range) -> bool {
 | 
			
		||||
			return version_in_range && !(SlXvIsFeaturePresent(XSLFI_SPRINGPP, 3) || SlXvIsFeaturePresent(XSLFI_VARIABLE_DAY_LENGTH, 2));
 | 
			
		||||
		})),
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle, running_ticks,        SLE_UINT16,                  88, SL_MAX_VERSION, SlXvFeatureTest([](uint16 version, bool version_in_range) -> bool {
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle, running_ticks,        SLE_UINT16,                  SLV_88, SL_MAX_VERSION, SlXvFeatureTest([](uint16 version, bool version_in_range) -> bool {
 | 
			
		||||
			return version_in_range && (SlXvIsFeaturePresent(XSLFI_SPRINGPP, 2) || SlXvIsFeaturePresent(XSLFI_VARIABLE_DAY_LENGTH, 2));
 | 
			
		||||
		})),
 | 
			
		||||
 | 
			
		||||
		     SLE_VAR(Vehicle, cur_implicit_order_index,  SLE_UINT8),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, cur_real_order_index,  SLE_UINT8,                  158, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle, cur_timetable_order_index, SLE_UINT8,               0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA)),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, cur_real_order_index,  SLE_UINT8,                  SLV_158, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle, cur_timetable_order_index, SLE_UINT8,      SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA)),
 | 
			
		||||
		/* num_orders is now part of OrderList and is not saved but counted */
 | 
			
		||||
		SLE_CONDNULL(1,                                                            0, 104),
 | 
			
		||||
		SLE_CONDNULL(1,                                                            SL_MIN_VERSION, SLV_105),
 | 
			
		||||
 | 
			
		||||
		/* This next line is for version 4 and prior compatibility.. it temporarily reads
 | 
			
		||||
		 type and flags (which were both 4 bits) into type. Later on this is
 | 
			
		||||
		 converted correctly */
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, current_order.type,    SLE_UINT8,                    0,   4),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, current_order.dest,    SLE_FILE_U8  | SLE_VAR_U16,   0,   4),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, current_order.type,    SLE_UINT8,                    SL_MIN_VERSION,   SLV_5),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, current_order.dest,    SLE_FILE_U8  | SLE_VAR_U16,   SL_MIN_VERSION,   SLV_5),
 | 
			
		||||
 | 
			
		||||
		/* Orders for version 5 and on */
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, current_order.type,    SLE_UINT8,                    5, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, current_order.flags,   SLE_UINT8,                    5, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, current_order.dest,    SLE_UINT16,                   5, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, current_order.type,    SLE_UINT8,                    SLV_5, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, current_order.flags,   SLE_UINT8,                    SLV_5, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, current_order.dest,    SLE_UINT16,                   SLV_5, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
		/* Refit in current order */
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, current_order.refit_cargo,   SLE_UINT8,             36, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDNULL(1,                                                           36, 181), // refit_subtype
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, current_order.refit_cargo,   SLE_UINT8,             SLV_36, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDNULL(1,                                                           SLV_36, SLV_182), // refit_subtype
 | 
			
		||||
 | 
			
		||||
		/* Timetable in current order */
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle, current_order.wait_time,    SLE_FILE_U16 | SLE_VAR_U32,  67, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA, 0, 5)),
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle, current_order.wait_time,    SLE_UINT32,                  67, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA, 6)),
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle, current_order.travel_time,  SLE_FILE_U16 | SLE_VAR_U32,  67, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA, 0, 5)),
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle, current_order.travel_time,  SLE_UINT32,                  67, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA, 6)),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, current_order.max_speed,     SLE_UINT16,           174, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, timetable_start,       SLE_INT32,                  129, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle, timetable_start_subticks,   SLE_UINT16,             0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLES_START_TICKS, 2)),
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle, current_order.wait_time,    SLE_FILE_U16 | SLE_VAR_U32, SLV_67, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA, 0, 5)),
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle, current_order.wait_time,    SLE_UINT32,                 SLV_67, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA, 6)),
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle, current_order.travel_time,  SLE_FILE_U16 | SLE_VAR_U32, SLV_67, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA, 0, 5)),
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle, current_order.travel_time,  SLE_UINT32,                 SLV_67, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA, 6)),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, current_order.max_speed,     SLE_UINT16,           SLV_174, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, timetable_start,       SLE_INT32,                  SLV_129, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle, timetable_start_subticks,   SLE_UINT16,    SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLES_START_TICKS, 2)),
 | 
			
		||||
 | 
			
		||||
		 SLE_CONDREF(Vehicle, orders,                REF_ORDER,                    0, 104),
 | 
			
		||||
		 SLE_CONDREF(Vehicle, orders,                REF_ORDERLIST,              105, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDREF(Vehicle, orders,                REF_ORDER,                    SL_MIN_VERSION, SLV_105),
 | 
			
		||||
		 SLE_CONDREF(Vehicle, orders,                REF_ORDERLIST,              SLV_105, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, age,                   SLE_FILE_U16 | SLE_VAR_I32,   0,  30),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, age,                   SLE_INT32,                   31, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, max_age,               SLE_FILE_U16 | SLE_VAR_I32,   0,  30),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, max_age,               SLE_INT32,                   31, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, date_of_last_service,  SLE_FILE_U16 | SLE_VAR_I32,   0,  30),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, date_of_last_service,  SLE_INT32,                   31, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, service_interval,      SLE_UINT16,                   0,  30),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, service_interval,      SLE_FILE_U32 | SLE_VAR_U16,  31, 179),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, service_interval,      SLE_UINT16,                 180, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, age,                   SLE_FILE_U16 | SLE_VAR_I32,   SL_MIN_VERSION,  SLV_31),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, age,                   SLE_INT32,                   SLV_31, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, max_age,               SLE_FILE_U16 | SLE_VAR_I32,   SL_MIN_VERSION,  SLV_31),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, max_age,               SLE_INT32,                   SLV_31, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, date_of_last_service,  SLE_FILE_U16 | SLE_VAR_I32,   SL_MIN_VERSION,  SLV_31),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, date_of_last_service,  SLE_INT32,                   SLV_31, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, service_interval,      SLE_UINT16,                   SL_MIN_VERSION,  SLV_31),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, service_interval,      SLE_FILE_U32 | SLE_VAR_U16,  SLV_31, SLV_180),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, service_interval,      SLE_UINT16,                 SLV_180, SL_MAX_VERSION),
 | 
			
		||||
		     SLE_VAR(Vehicle, reliability,           SLE_UINT16),
 | 
			
		||||
		     SLE_VAR(Vehicle, reliability_spd_dec,   SLE_UINT16),
 | 
			
		||||
		     SLE_VAR(Vehicle, breakdown_ctr,         SLE_UINT8),
 | 
			
		||||
		     SLE_VAR(Vehicle, breakdown_delay,       SLE_UINT8),
 | 
			
		||||
		     SLE_VAR(Vehicle, breakdowns_since_last_service, SLE_UINT8),
 | 
			
		||||
		     SLE_VAR(Vehicle, breakdown_chance,      SLE_UINT8),
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle, breakdown_chance_factor, SLE_UINT8,                 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_IMPROVED_BREAKDOWNS, 3)),
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle, breakdown_type,       SLE_UINT8,                    0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_IMPROVED_BREAKDOWNS)),
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle, breakdown_severity,   SLE_UINT8,                    0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_IMPROVED_BREAKDOWNS)),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, build_year,            SLE_FILE_U8 | SLE_VAR_I32,    0,  30),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, build_year,            SLE_INT32,                   31, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle, breakdown_chance_factor, SLE_UINT8,                 SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_IMPROVED_BREAKDOWNS, 3)),
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle, breakdown_type,       SLE_UINT8,                    SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_IMPROVED_BREAKDOWNS)),
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle, breakdown_severity,   SLE_UINT8,                    SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_IMPROVED_BREAKDOWNS)),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, build_year,            SLE_FILE_U8 | SLE_VAR_I32,    SL_MIN_VERSION,  SLV_31),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, build_year,            SLE_INT32,                   SLV_31, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
		     SLE_VAR(Vehicle, load_unload_ticks,     SLE_UINT16),
 | 
			
		||||
		SLEG_CONDVAR(         _cargo_paid_for,       SLE_UINT16,                  45, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, vehicle_flags,         SLE_FILE_U8 | SLE_VAR_U16,   40, 179),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, vehicle_flags,         SLE_UINT16,                 180, SL_MAX_VERSION),
 | 
			
		||||
		SLEG_CONDVAR(         _cargo_paid_for,       SLE_UINT16,                  SLV_45, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, vehicle_flags,         SLE_FILE_U8 | SLE_VAR_U16,   SLV_40, SLV_180),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, vehicle_flags,         SLE_UINT16,                 SLV_180, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, profit_this_year,      SLE_FILE_I32 | SLE_VAR_I64,   0,  64),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, profit_this_year,      SLE_INT64,                   65, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, profit_last_year,      SLE_FILE_I32 | SLE_VAR_I64,   0,  64),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, profit_last_year,      SLE_INT64,                   65, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle,profit_lifetime,       SLE_INT64,                    0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_VEH_LIFETIME_PROFIT)),
 | 
			
		||||
		SLEG_CONDVAR(         _cargo_feeder_share,   SLE_FILE_I32 | SLE_VAR_I64,  51,  64),
 | 
			
		||||
		SLEG_CONDVAR(         _cargo_feeder_share,   SLE_INT64,                   65,  67),
 | 
			
		||||
		SLEG_CONDVAR(         _cargo_loaded_at_xy,   SLE_UINT32,                  51,  67),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, value,                 SLE_FILE_I32 | SLE_VAR_I64,   0,  64),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, value,                 SLE_INT64,                   65, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDNULL_X(8,                                                          0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_VEHICLE_REPAIR_COST, 1, 1)),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, profit_this_year,      SLE_FILE_I32 | SLE_VAR_I64,   SL_MIN_VERSION,  SLV_65),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, profit_this_year,      SLE_INT64,                   SLV_65, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, profit_last_year,      SLE_FILE_I32 | SLE_VAR_I64,   SL_MIN_VERSION,  SLV_65),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, profit_last_year,      SLE_INT64,                   SLV_65, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle,profit_lifetime,       SLE_INT64,                    SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_VEH_LIFETIME_PROFIT)),
 | 
			
		||||
		SLEG_CONDVAR(         _cargo_feeder_share,   SLE_FILE_I32 | SLE_VAR_I64,  SLV_51,  SLV_65),
 | 
			
		||||
		SLEG_CONDVAR(         _cargo_feeder_share,   SLE_INT64,                   SLV_65,  SLV_68),
 | 
			
		||||
		SLEG_CONDVAR(         _cargo_loaded_at_xy,   SLE_UINT32,                  SLV_51,  SLV_68),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, value,                 SLE_FILE_I32 | SLE_VAR_I64,   SL_MIN_VERSION,  SLV_65),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, value,                 SLE_INT64,                   SLV_65, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDNULL_X(8,                                                          SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_VEHICLE_REPAIR_COST, 1, 1)),
 | 
			
		||||
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, random_bits,           SLE_UINT8,                    2, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, waiting_triggers,      SLE_UINT8,                    2, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, random_bits,           SLE_UINT8,                    SLV_2, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, waiting_triggers,      SLE_UINT8,                    SLV_2, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
		SLE_CONDREF_X(Vehicle, ahead_separation,     REF_VEHICLE,                  0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_AUTO_TIMETABLE)),
 | 
			
		||||
		SLE_CONDREF_X(Vehicle, behind_separation,    REF_VEHICLE,                  0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_AUTO_TIMETABLE)),
 | 
			
		||||
		SLE_CONDREF_X(Vehicle, ahead_separation,     REF_VEHICLE,                  SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_AUTO_TIMETABLE)),
 | 
			
		||||
		SLE_CONDREF_X(Vehicle, behind_separation,    REF_VEHICLE,                  SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_AUTO_TIMETABLE)),
 | 
			
		||||
 | 
			
		||||
		 SLE_CONDREF(Vehicle, next_shared,           REF_VEHICLE,                  2, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDNULL(2,                                                            2,  68),
 | 
			
		||||
		SLE_CONDNULL(4,                                                           69, 100),
 | 
			
		||||
		 SLE_CONDREF(Vehicle, next_shared,           REF_VEHICLE,                  SLV_2, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDNULL(2,                                                            SLV_2,  SLV_69),
 | 
			
		||||
		SLE_CONDNULL(4,                                                           SLV_69, SLV_101),
 | 
			
		||||
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, group_id,              SLE_UINT16,                  60, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, group_id,              SLE_UINT16,                  SLV_60, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, current_order_time,    SLE_UINT32,                  67, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle, current_loading_time, SLE_UINT32,                   0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_AUTO_TIMETABLE)),
 | 
			
		||||
		SLE_CONDNULL_X(4, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, lateness_counter,      SLE_INT32,                   67, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, current_order_time,    SLE_UINT32,                  SLV_67, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDVAR_X(Vehicle, current_loading_time, SLE_UINT32,                   SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_AUTO_TIMETABLE)),
 | 
			
		||||
		SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, lateness_counter,      SLE_INT32,                   SLV_67, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
		SLE_CONDNULL(10,                                                           2, 143), // old reserved space
 | 
			
		||||
		SLE_CONDNULL(10,                                                           SLV_2, SLV_144), // old reserved space
 | 
			
		||||
 | 
			
		||||
		SLE_CONDNULL_X((8 + 8 + 2 + 2 + 4 + 4 + 1 + 1) * 30, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
 | 
			
		||||
		SLE_CONDNULL_X((8 + 8 + 2 + 2 + 4 + 4 + 1 + 1) * 70, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 4)),
 | 
			
		||||
		SLE_CONDNULL_X(1, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
 | 
			
		||||
		SLE_CONDNULL_X(1, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
 | 
			
		||||
		SLE_CONDNULL_X(2, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
 | 
			
		||||
		SLE_CONDNULL_X((8 + 8 + 2 + 2 + 4 + 4 + 1 + 1) * 30, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
 | 
			
		||||
		SLE_CONDNULL_X((8 + 8 + 2 + 2 + 4 + 4 + 1 + 1) * 70, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 4)),
 | 
			
		||||
		SLE_CONDNULL_X(1, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
 | 
			
		||||
		SLE_CONDNULL_X(1, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
 | 
			
		||||
		SLE_CONDNULL_X(2, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
 | 
			
		||||
 | 
			
		||||
		     SLE_END()
 | 
			
		||||
	};
 | 
			
		||||
@@ -759,19 +770,19 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
 | 
			
		||||
		     SLE_VAR(Train, railtype,            SLE_UINT8),
 | 
			
		||||
		     SLE_VAR(Train, track,               SLE_UINT8),
 | 
			
		||||
 | 
			
		||||
		 SLE_CONDVAR(Train, flags,               SLE_FILE_U8  | SLE_VAR_U32,   2,  99),
 | 
			
		||||
		SLE_CONDVAR_X(Train, flags,              SLE_FILE_U16 | SLE_VAR_U32, 100, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TRAIN_FLAGS_EXTRA, 0, 0)),
 | 
			
		||||
		SLE_CONDVAR_X(Train, flags,              SLE_UINT32,                   0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TRAIN_FLAGS_EXTRA, 1)),
 | 
			
		||||
		SLE_CONDNULL(2, 2, 59),
 | 
			
		||||
		 SLE_CONDVAR(Train, flags,               SLE_FILE_U8  | SLE_VAR_U32,            SLV_2, SLV_100),
 | 
			
		||||
		SLE_CONDVAR_X(Train, flags,              SLE_FILE_U16 | SLE_VAR_U32,          SLV_100, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TRAIN_FLAGS_EXTRA, 0, 0)),
 | 
			
		||||
		SLE_CONDVAR_X(Train, flags,              SLE_UINT32,                   SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TRAIN_FLAGS_EXTRA, 1)),
 | 
			
		||||
		SLE_CONDNULL(2, SLV_2, SLV_60),
 | 
			
		||||
 | 
			
		||||
		 SLE_CONDVAR(Train, wait_counter,        SLE_UINT16,                 136, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDVAR_X(Train, tunnel_bridge_signal_num, SLE_UINT16,             0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SIG_TUNNEL_BRIDGE, 5)),
 | 
			
		||||
		 SLE_CONDVAR(Train, wait_counter,        SLE_UINT16,                 SLV_136, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR_X(Train, tunnel_bridge_signal_num, SLE_UINT16,   SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SIG_TUNNEL_BRIDGE, 5)),
 | 
			
		||||
 | 
			
		||||
		SLE_CONDNULL(2, 2, 19),
 | 
			
		||||
		 SLE_CONDVAR(Train, gv_flags,            SLE_UINT16,                 139, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDNULL(11, 2, 143), // old reserved space
 | 
			
		||||
		SLE_CONDVAR_X(Train, reverse_distance,    SLE_UINT16,                  0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_REVERSE_AT_WAYPOINT)),
 | 
			
		||||
		SLE_CONDVAR_X(Train, critical_breakdown_count, SLE_UINT8,              0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_IMPROVED_BREAKDOWNS, 2)),
 | 
			
		||||
		SLE_CONDNULL(2, SLV_2, SLV_20),
 | 
			
		||||
		 SLE_CONDVAR(Train, gv_flags,            SLE_UINT16,                 SLV_139, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDNULL(11, SLV_2, SLV_144), // old reserved space
 | 
			
		||||
		SLE_CONDVAR_X(Train, reverse_distance,    SLE_UINT16,         SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_REVERSE_AT_WAYPOINT)),
 | 
			
		||||
		SLE_CONDVAR_X(Train, critical_breakdown_count, SLE_UINT8,     SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_IMPROVED_BREAKDOWNS, 2)),
 | 
			
		||||
 | 
			
		||||
		     SLE_END()
 | 
			
		||||
	};
 | 
			
		||||
@@ -787,12 +798,12 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
 | 
			
		||||
		     SLE_VAR(RoadVehicle, crashed_ctr,          SLE_UINT16),
 | 
			
		||||
		     SLE_VAR(RoadVehicle, reverse_ctr,          SLE_UINT8),
 | 
			
		||||
 | 
			
		||||
		SLE_CONDNULL(2,                                                               6,  68),
 | 
			
		||||
		 SLE_CONDVAR(RoadVehicle, gv_flags,             SLE_UINT16,                 139, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDNULL(4,                                                              69, 130),
 | 
			
		||||
		SLE_CONDNULL(2,                                                               6, 130),
 | 
			
		||||
		SLE_CONDNULL(16,                                                              2, 143), // old reserved space
 | 
			
		||||
		SLE_CONDVAR_X(RoadVehicle, critical_breakdown_count, SLE_UINT8,               0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_IMPROVED_BREAKDOWNS, 6)),
 | 
			
		||||
		SLE_CONDNULL(2,                                                               SLV_6,  SLV_69),
 | 
			
		||||
		 SLE_CONDVAR(RoadVehicle, gv_flags,             SLE_UINT16,                 SLV_139, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDNULL(4,                                                              SLV_69, SLV_131),
 | 
			
		||||
		SLE_CONDNULL(2,                                                               SLV_6, SLV_131),
 | 
			
		||||
		SLE_CONDNULL(16,                                                              SLV_2, SLV_144), // old reserved space
 | 
			
		||||
		SLE_CONDVAR_X(RoadVehicle, critical_breakdown_count, SLE_UINT8,      SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_IMPROVED_BREAKDOWNS, 6)),
 | 
			
		||||
 | 
			
		||||
		     SLE_END()
 | 
			
		||||
	};
 | 
			
		||||
@@ -801,10 +812,10 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
 | 
			
		||||
		SLE_WRITEBYTE(Vehicle, type),
 | 
			
		||||
		SLE_VEH_INCLUDE(),
 | 
			
		||||
		      SLE_VAR(Ship, state,                     SLE_UINT8),
 | 
			
		||||
		SLE_CONDDEQUE(Ship, path,                      SLE_UINT8,                  203, SL_MAX_VERSION),
 | 
			
		||||
		  SLE_CONDVAR(Ship, rotation,                  SLE_UINT8,                  204, SL_MAX_VERSION),
 | 
			
		||||
		SLE_CONDDEQUE(Ship, path,                      SLE_UINT8,                  SLV_SHIP_PATH_CACHE, SL_MAX_VERSION),
 | 
			
		||||
		  SLE_CONDVAR(Ship, rotation,                  SLE_UINT8,                  SLV_SHIP_ROTATION, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
		SLE_CONDNULL(16, 2, 143), // old reserved space
 | 
			
		||||
		SLE_CONDNULL(16, SLV_2, SLV_144), // old reserved space
 | 
			
		||||
 | 
			
		||||
		     SLE_END()
 | 
			
		||||
	};
 | 
			
		||||
@@ -815,20 +826,20 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
 | 
			
		||||
		     SLE_VAR(Aircraft, crashed_counter,       SLE_UINT16),
 | 
			
		||||
		     SLE_VAR(Aircraft, pos,                   SLE_UINT8),
 | 
			
		||||
 | 
			
		||||
		 SLE_CONDVAR(Aircraft, targetairport,         SLE_FILE_U8  | SLE_VAR_U16,   0, 4),
 | 
			
		||||
		 SLE_CONDVAR(Aircraft, targetairport,         SLE_UINT16,                   5, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Aircraft, targetairport,         SLE_FILE_U8  | SLE_VAR_U16,   SL_MIN_VERSION, SLV_5),
 | 
			
		||||
		 SLE_CONDVAR(Aircraft, targetairport,         SLE_UINT16,                   SLV_5, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
		     SLE_VAR(Aircraft, state,                 SLE_UINT8),
 | 
			
		||||
 | 
			
		||||
		 SLE_CONDVAR(Aircraft, previous_pos,          SLE_UINT8,                    2, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Aircraft, last_direction,        SLE_UINT8,                    2, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Aircraft, number_consecutive_turns, SLE_UINT8,                 2, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDNULL_X(2, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
 | 
			
		||||
		 SLE_CONDVAR(Aircraft, previous_pos,          SLE_UINT8,                    SLV_2, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Aircraft, last_direction,        SLE_UINT8,                    SLV_2, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Aircraft, number_consecutive_turns, SLE_UINT8,                 SLV_2, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDNULL_X(2, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
 | 
			
		||||
 | 
			
		||||
		 SLE_CONDVAR(Aircraft, turn_counter,          SLE_UINT8,                  136, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Aircraft, flags,                 SLE_UINT8,                  167, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Aircraft, turn_counter,          SLE_UINT8,                  SLV_136, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Aircraft, flags,                 SLE_UINT8,                  SLV_167, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
		SLE_CONDNULL(13,                                                           2, 143), // old reserved space
 | 
			
		||||
		SLE_CONDNULL(13,                                                           SLV_2, SLV_144), // old reserved space
 | 
			
		||||
 | 
			
		||||
		     SLE_END()
 | 
			
		||||
	};
 | 
			
		||||
@@ -838,29 +849,29 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
 | 
			
		||||
 | 
			
		||||
		     SLE_VAR(Vehicle, subtype,               SLE_UINT8),
 | 
			
		||||
 | 
			
		||||
		SLE_CONDNULL_X(5, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
 | 
			
		||||
		SLE_CONDNULL_X(5, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
 | 
			
		||||
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, tile,                  SLE_FILE_U16 | SLE_VAR_U32,   0,   5),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, tile,                  SLE_UINT32,                   6, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, tile,                  SLE_FILE_U16 | SLE_VAR_U32,   SL_MIN_VERSION,   SLV_6),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, tile,                  SLE_UINT32,                   SLV_6, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, x_pos,                 SLE_FILE_I16 | SLE_VAR_I32,   0,   5),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, x_pos,                 SLE_INT32,                    6, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, y_pos,                 SLE_FILE_I16 | SLE_VAR_I32,   0,   5),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, y_pos,                 SLE_INT32,                    6, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, z_pos,                 SLE_FILE_U8  | SLE_VAR_I32,   0, 163),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, z_pos,                 SLE_INT32,                  164, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, x_pos,                 SLE_FILE_I16 | SLE_VAR_I32,   SL_MIN_VERSION,   SLV_6),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, x_pos,                 SLE_INT32,                    SLV_6, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, y_pos,                 SLE_FILE_I16 | SLE_VAR_I32,   SL_MIN_VERSION,   SLV_6),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, y_pos,                 SLE_INT32,                    SLV_6, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, z_pos,                 SLE_FILE_U8  | SLE_VAR_I32,   SL_MIN_VERSION, SLV_164),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, z_pos,                 SLE_INT32,                  SLV_164, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
		     SLE_VAR(Vehicle, sprite_seq.seq[0].sprite, SLE_FILE_U16 | SLE_VAR_U32),
 | 
			
		||||
		SLE_CONDNULL(5,                                                            0,  57),
 | 
			
		||||
		SLE_CONDNULL(5,                                                            SL_MIN_VERSION,  SLV_59),
 | 
			
		||||
		     SLE_VAR(Vehicle, progress,              SLE_UINT8),
 | 
			
		||||
		     SLE_VAR(Vehicle, vehstatus,             SLE_UINT8),
 | 
			
		||||
 | 
			
		||||
		     SLE_VAR(EffectVehicle, animation_state,    SLE_UINT16),
 | 
			
		||||
		     SLE_VAR(EffectVehicle, animation_substate, SLE_UINT8),
 | 
			
		||||
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, spritenum,             SLE_UINT8,                    2, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, spritenum,             SLE_UINT8,                    SLV_2, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
		SLE_CONDNULL(15,                                                           2, 143), // old reserved space
 | 
			
		||||
		SLE_CONDNULL(15,                                                           SLV_2, SLV_144), // old reserved space
 | 
			
		||||
 | 
			
		||||
		     SLE_END()
 | 
			
		||||
	};
 | 
			
		||||
@@ -871,38 +882,38 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
 | 
			
		||||
		     SLE_REF(Vehicle, next,                  REF_VEHICLE_OLD),
 | 
			
		||||
 | 
			
		||||
		     SLE_VAR(Vehicle, subtype,               SLE_UINT8),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, tile,                  SLE_FILE_U16 | SLE_VAR_U32,   0,   5),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, tile,                  SLE_UINT32,                   6, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, dest_tile,             SLE_FILE_U16 | SLE_VAR_U32,   0,   5),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, dest_tile,             SLE_UINT32,                   6, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, tile,                  SLE_FILE_U16 | SLE_VAR_U32,   SL_MIN_VERSION,   SLV_6),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, tile,                  SLE_UINT32,                   SLV_6, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, dest_tile,             SLE_FILE_U16 | SLE_VAR_U32,   SL_MIN_VERSION,   SLV_6),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, dest_tile,             SLE_UINT32,                   SLV_6, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, x_pos,                 SLE_FILE_I16 | SLE_VAR_I32,   0,   5),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, x_pos,                 SLE_INT32,                    6, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, y_pos,                 SLE_FILE_I16 | SLE_VAR_I32,   0,   5),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, y_pos,                 SLE_INT32,                    6, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, z_pos,                 SLE_FILE_U8  | SLE_VAR_I32,   0, 163),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, z_pos,                 SLE_INT32,                  164, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, x_pos,                 SLE_FILE_I16 | SLE_VAR_I32,   SL_MIN_VERSION,   SLV_6),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, x_pos,                 SLE_INT32,                    SLV_6, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, y_pos,                 SLE_FILE_I16 | SLE_VAR_I32,   SL_MIN_VERSION,   SLV_6),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, y_pos,                 SLE_INT32,                    SLV_6, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, z_pos,                 SLE_FILE_U8  | SLE_VAR_I32,   SL_MIN_VERSION, SLV_164),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, z_pos,                 SLE_INT32,                  SLV_164, SL_MAX_VERSION),
 | 
			
		||||
		     SLE_VAR(Vehicle, direction,             SLE_UINT8),
 | 
			
		||||
 | 
			
		||||
		SLE_CONDNULL(5,                                                            0,  57),
 | 
			
		||||
		SLE_CONDNULL(5,                                                            SL_MIN_VERSION,  SLV_58),
 | 
			
		||||
		     SLE_VAR(Vehicle, owner,                 SLE_UINT8),
 | 
			
		||||
		     SLE_VAR(Vehicle, vehstatus,             SLE_UINT8),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, current_order.dest,    SLE_FILE_U8 | SLE_VAR_U16,    0,   4),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, current_order.dest,    SLE_UINT16,                   5, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, current_order.dest,    SLE_FILE_U8 | SLE_VAR_U16,    SL_MIN_VERSION,   SLV_5),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, current_order.dest,    SLE_UINT16,                   SLV_5, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
		     SLE_VAR(Vehicle, sprite_seq.seq[0].sprite, SLE_FILE_U16 | SLE_VAR_U32),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, age,                   SLE_FILE_U16 | SLE_VAR_I32,   0,  30),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, age,                   SLE_INT32,                   31, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, age,                   SLE_FILE_U16 | SLE_VAR_I32,   SL_MIN_VERSION,  SLV_31),
 | 
			
		||||
		 SLE_CONDVAR(Vehicle, age,                   SLE_INT32,                   SLV_31, SL_MAX_VERSION),
 | 
			
		||||
		     SLE_VAR(Vehicle, tick_counter,          SLE_UINT8),
 | 
			
		||||
 | 
			
		||||
		 SLE_CONDVAR(DisasterVehicle, image_override,            SLE_FILE_U16 | SLE_VAR_U32,   0, 190),
 | 
			
		||||
		 SLE_CONDVAR(DisasterVehicle, image_override,            SLE_UINT32,                 191, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(DisasterVehicle, big_ufo_destroyer_target,  SLE_FILE_U16 | SLE_VAR_U32,   0, 190),
 | 
			
		||||
		 SLE_CONDVAR(DisasterVehicle, big_ufo_destroyer_target,  SLE_UINT32,                 191, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDNULL_X(2, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
 | 
			
		||||
		 SLE_CONDVAR(DisasterVehicle, flags,                     SLE_UINT8,                  194, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(DisasterVehicle, image_override,            SLE_FILE_U16 | SLE_VAR_U32,   SL_MIN_VERSION, SLV_191),
 | 
			
		||||
		 SLE_CONDVAR(DisasterVehicle, image_override,            SLE_UINT32,                 SLV_191, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDVAR(DisasterVehicle, big_ufo_destroyer_target,  SLE_FILE_U16 | SLE_VAR_U32,   SL_MIN_VERSION, SLV_191),
 | 
			
		||||
		 SLE_CONDVAR(DisasterVehicle, big_ufo_destroyer_target,  SLE_UINT32,                 SLV_191, SL_MAX_VERSION),
 | 
			
		||||
		 SLE_CONDNULL_X(2, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
 | 
			
		||||
		 SLE_CONDVAR(DisasterVehicle, flags,                     SLE_UINT8,                  SLV_194, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
		SLE_CONDNULL(16,                                                           2, 143), // old reserved space
 | 
			
		||||
		SLE_CONDNULL(16,                                                           SLV_2, SLV_144), // old reserved space
 | 
			
		||||
 | 
			
		||||
		     SLE_END()
 | 
			
		||||
	};
 | 
			
		||||
@@ -963,13 +974,13 @@ void Load_VEHS()
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/* Old savegames used 'last_station_visited = 0xFF' */
 | 
			
		||||
		if (IsSavegameVersionBefore(5) && v->last_station_visited == 0xFF) {
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_5) && v->last_station_visited == 0xFF) {
 | 
			
		||||
			v->last_station_visited = INVALID_STATION;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (IsSavegameVersionBefore(182)) v->last_loading_station = INVALID_STATION;
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_182)) v->last_loading_station = INVALID_STATION;
 | 
			
		||||
 | 
			
		||||
		if (IsSavegameVersionBefore(5)) {
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_5)) {
 | 
			
		||||
			/* Convert the current_order.type (which is a mix of type and flags, because
 | 
			
		||||
			 *  in those versions, they both were 4 bits big) to type and flags */
 | 
			
		||||
			v->current_order.flags = GB(v->current_order.type, 4, 4);
 | 
			
		||||
@@ -977,7 +988,7 @@ void Load_VEHS()
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/* Advanced vehicle lists got added */
 | 
			
		||||
		if (IsSavegameVersionBefore(60)) v->group_id = DEFAULT_GROUP;
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_60)) v->group_id = DEFAULT_GROUP;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -70,7 +70,7 @@ void MoveWaypointsToBaseStations()
 | 
			
		||||
	 * waypoints to make way for storing the index in m2. The custom graphics
 | 
			
		||||
	 * id which was stored in m4 is now saved as a grf/id reference in the
 | 
			
		||||
	 * waypoint struct. */
 | 
			
		||||
	if (IsSavegameVersionBefore(17)) {
 | 
			
		||||
	if (IsSavegameVersionBefore(SLV_17)) {
 | 
			
		||||
		for (OldWaypoint *wp = _old_waypoints.Begin(); wp != _old_waypoints.End(); wp++) {
 | 
			
		||||
			if (wp->delete_ctr != 0) continue; // The waypoint was deleted
 | 
			
		||||
 | 
			
		||||
@@ -113,7 +113,7 @@ void MoveWaypointsToBaseStations()
 | 
			
		||||
		TileIndex t = wp->xy;
 | 
			
		||||
		if (IsTileType(t, MP_RAILWAY) && GetRailTileType(t) == 2 /* RAIL_TILE_WAYPOINT */ && _m[t].m2 == wp->index) {
 | 
			
		||||
			/* The tile might've been reserved! */
 | 
			
		||||
			bool reserved = !IsSavegameVersionBefore(100) && HasBit(_m[t].m5, 4);
 | 
			
		||||
			bool reserved = !IsSavegameVersionBefore(SLV_100) && HasBit(_m[t].m5, 4);
 | 
			
		||||
 | 
			
		||||
			/* The tile really has our waypoint, so reassign the map array */
 | 
			
		||||
			MakeRailWaypoint(t, GetTileOwner(t), new_wp->index, (Axis)GB(_m[t].m5, 0, 1), 0, GetRailType(t));
 | 
			
		||||
@@ -150,21 +150,21 @@ void MoveWaypointsToBaseStations()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const SaveLoad _old_waypoint_desc[] = {
 | 
			
		||||
	SLE_CONDVAR(OldWaypoint, xy,         SLE_FILE_U16 | SLE_VAR_U32,  0, 5),
 | 
			
		||||
	SLE_CONDVAR(OldWaypoint, xy,         SLE_UINT32,                  6, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(OldWaypoint, town_index, SLE_UINT16,                 12, 121),
 | 
			
		||||
	SLE_CONDREF(OldWaypoint, town,       REF_TOWN,                  122, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(OldWaypoint, town_cn,    SLE_FILE_U8 | SLE_VAR_U16,  12, 88),
 | 
			
		||||
	SLE_CONDVAR(OldWaypoint, town_cn,    SLE_UINT16,                 89, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(OldWaypoint, string_id,  SLE_STRINGID,                0, 83),
 | 
			
		||||
	SLE_CONDSTR(OldWaypoint, name,       SLE_STR, 0,                 84, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(OldWaypoint, xy,         SLE_FILE_U16 | SLE_VAR_U32,  SL_MIN_VERSION, SLV_6),
 | 
			
		||||
	SLE_CONDVAR(OldWaypoint, xy,         SLE_UINT32,                  SLV_6, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(OldWaypoint, town_index, SLE_UINT16,                 SLV_12, SLV_122),
 | 
			
		||||
	SLE_CONDREF(OldWaypoint, town,       REF_TOWN,                  SLV_122, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(OldWaypoint, town_cn,    SLE_FILE_U8 | SLE_VAR_U16,  SLV_12, SLV_89),
 | 
			
		||||
	SLE_CONDVAR(OldWaypoint, town_cn,    SLE_UINT16,                 SLV_89, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(OldWaypoint, string_id,  SLE_STRINGID,                SL_MIN_VERSION, SLV_84),
 | 
			
		||||
	SLE_CONDSTR(OldWaypoint, name,       SLE_STR, 0,                 SLV_84, SL_MAX_VERSION),
 | 
			
		||||
	    SLE_VAR(OldWaypoint, delete_ctr, SLE_UINT8),
 | 
			
		||||
 | 
			
		||||
	SLE_CONDVAR(OldWaypoint, build_date, SLE_FILE_U16 | SLE_VAR_I32,  3, 30),
 | 
			
		||||
	SLE_CONDVAR(OldWaypoint, build_date, SLE_INT32,                  31, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(OldWaypoint, localidx,   SLE_UINT8,                   3, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(OldWaypoint, grfid,      SLE_UINT32,                 17, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(OldWaypoint, owner,      SLE_UINT8,                 101, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(OldWaypoint, build_date, SLE_FILE_U16 | SLE_VAR_I32,  SLV_3, SLV_31),
 | 
			
		||||
	SLE_CONDVAR(OldWaypoint, build_date, SLE_INT32,                  SLV_31, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(OldWaypoint, localidx,   SLE_UINT8,                   SLV_3, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(OldWaypoint, grfid,      SLE_UINT32,                 SLV_17, SL_MAX_VERSION),
 | 
			
		||||
	SLE_CONDVAR(OldWaypoint, owner,      SLE_UINT8,                 SLV_101, SL_MAX_VERSION),
 | 
			
		||||
 | 
			
		||||
	SLE_END()
 | 
			
		||||
};
 | 
			
		||||
@@ -190,10 +190,10 @@ static void Ptrs_WAYP()
 | 
			
		||||
	for (OldWaypoint *wp = _old_waypoints.Begin(); wp != _old_waypoints.End(); wp++) {
 | 
			
		||||
		SlObject(wp, _old_waypoint_desc);
 | 
			
		||||
 | 
			
		||||
		if (IsSavegameVersionBefore(12)) {
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_12)) {
 | 
			
		||||
			wp->town_cn = (wp->string_id & 0xC000) == 0xC000 ? (wp->string_id >> 8) & 0x3F : 0;
 | 
			
		||||
			wp->town = ClosestTownFromTile(wp->xy, UINT_MAX);
 | 
			
		||||
		} else if (IsSavegameVersionBefore(122)) {
 | 
			
		||||
		} else if (IsSavegameVersionBefore(SLV_122)) {
 | 
			
		||||
			/* Only for versions 12 .. 122 */
 | 
			
		||||
			if (!Town::IsValidID(wp->town_index)) {
 | 
			
		||||
				/* Upon a corrupted waypoint we'll likely get here. The next step will be to
 | 
			
		||||
@@ -206,7 +206,7 @@ static void Ptrs_WAYP()
 | 
			
		||||
			}
 | 
			
		||||
			wp->town = Town::Get(wp->town_index);
 | 
			
		||||
		}
 | 
			
		||||
		if (IsSavegameVersionBefore(84)) {
 | 
			
		||||
		if (IsSavegameVersionBefore(SLV_84)) {
 | 
			
		||||
			wp->name = CopyFromOldName(wp->string_id);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -139,7 +139,7 @@ public:
 | 
			
		||||
	/**
 | 
			
		||||
	 * Randomize all settings the Script requested to be randomized.
 | 
			
		||||
	 */
 | 
			
		||||
	void AddRandomDeviation();
 | 
			
		||||
	virtual void AddRandomDeviation();
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Is this config attached to an Script? In other words, is there a Script
 | 
			
		||||
 
 | 
			
		||||
@@ -1504,7 +1504,7 @@ static void PrepareOldDiffCustom()
 | 
			
		||||
 */
 | 
			
		||||
static void HandleOldDiffCustom(bool savegame)
 | 
			
		||||
{
 | 
			
		||||
	uint options_to_load = GAME_DIFFICULTY_NUM - ((savegame && IsSavegameVersionBefore(4)) ? 1 : 0);
 | 
			
		||||
	uint options_to_load = GAME_DIFFICULTY_NUM - ((savegame && IsSavegameVersionBefore(SLV_4)) ? 1 : 0);
 | 
			
		||||
 | 
			
		||||
	if (!savegame) {
 | 
			
		||||
		/* If we did read to old_diff_custom, then at least one value must be non 0. */
 | 
			
		||||
@@ -2352,7 +2352,7 @@ static void LoadSettingsXref(const SettingDesc *osd, void *object) {
 | 
			
		||||
 */
 | 
			
		||||
static void LoadSettings(const SettingDesc *osd, void *object)
 | 
			
		||||
{
 | 
			
		||||
	extern uint16 _sl_version;
 | 
			
		||||
	extern SaveLoadVersion _sl_version;
 | 
			
		||||
 | 
			
		||||
	for (; osd->save.cmd != SL_END; osd++) {
 | 
			
		||||
		if (osd->patx_name != NULL) continue;
 | 
			
		||||
 
 | 
			
		||||
@@ -31,6 +31,8 @@ struct Ship FINAL : public SpecializedVehicle<Ship, VEH_SHIP> {
 | 
			
		||||
	TrackBitsByte state;    ///< The "track" the ship is following.
 | 
			
		||||
	ShipPathCache path;     ///< Cached path.
 | 
			
		||||
	DirectionByte rotation; ///< Visible direction.
 | 
			
		||||
	int16 rotation_x_pos;   ///< NOSAVE: X Position before rotation.
 | 
			
		||||
	int16 rotation_y_pos;   ///< NOSAVE: Y Position before rotation.
 | 
			
		||||
 | 
			
		||||
	/** We don't want GCC to zero our struct! It already is zeroed and has an index! */
 | 
			
		||||
	Ship() : SpecializedVehicleBase() {}
 | 
			
		||||
 
 | 
			
		||||
@@ -320,6 +320,15 @@ void Ship::UpdateDeltaXY()
 | 
			
		||||
	this->x_extent      = bb[1];
 | 
			
		||||
	this->y_extent      = bb[0];
 | 
			
		||||
	this->z_extent      = 6;
 | 
			
		||||
 | 
			
		||||
	if (this->direction != this->rotation) {
 | 
			
		||||
		/* If we are rotating, then it is possible the ship was moved to its next position. In that
 | 
			
		||||
		 * case, because we are still showing the old direction, the ship will appear to glitch sideways
 | 
			
		||||
		 * slightly. We can work around this by applying an additional offset to make the ship appear
 | 
			
		||||
		 * where it was before it moved. */
 | 
			
		||||
		this->x_offs -= this->x_pos - this->rotation_x_pos;
 | 
			
		||||
		this->y_offs -= this->y_pos - this->rotation_y_pos;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -829,6 +838,9 @@ static void ShipController(Ship *v)
 | 
			
		||||
					/* Stop for rotation */
 | 
			
		||||
					v->cur_speed = 0;
 | 
			
		||||
					v->direction = new_direction;
 | 
			
		||||
					/* Remember our current location to avoid movement glitch */
 | 
			
		||||
					v->rotation_x_pos = v->x_pos;
 | 
			
		||||
					v->rotation_y_pos = v->y_pos;
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
@@ -858,6 +870,9 @@ getout:
 | 
			
		||||
 | 
			
		||||
reverse_direction:
 | 
			
		||||
	v->direction = ReverseDir(v->direction);
 | 
			
		||||
	/* Remember our current location to avoid movement glitch */
 | 
			
		||||
	v->rotation_x_pos = v->x_pos;
 | 
			
		||||
	v->rotation_y_pos = v->y_pos;
 | 
			
		||||
	v->cur_speed = 0;
 | 
			
		||||
	v->path.clear();
 | 
			
		||||
	goto getout;
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ strhelp  = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
 | 
			
		||||
strval   = STR_NULL
 | 
			
		||||
proc     = NULL
 | 
			
		||||
load     = NULL
 | 
			
		||||
from     = 0
 | 
			
		||||
from     = SL_MIN_VERSION
 | 
			
		||||
to       = SL_MAX_VERSION
 | 
			
		||||
cat      = SC_ADVANCED
 | 
			
		||||
extver   = SlXvFeatureTest()
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ strhelp  = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
 | 
			
		||||
strval   = STR_NULL
 | 
			
		||||
proc     = NULL
 | 
			
		||||
load     = NULL
 | 
			
		||||
from     = 0
 | 
			
		||||
from     = SL_MIN_VERSION
 | 
			
		||||
to       = SL_MAX_VERSION
 | 
			
		||||
cat      = SC_ADVANCED
 | 
			
		||||
extver   = SlXvFeatureTest()
 | 
			
		||||
 
 | 
			
		||||
@@ -60,7 +60,7 @@ strhelp  = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
 | 
			
		||||
strval   = STR_NULL
 | 
			
		||||
proc     = NULL
 | 
			
		||||
load     = NULL
 | 
			
		||||
from     = 0
 | 
			
		||||
from     = SL_MIN_VERSION
 | 
			
		||||
to       = SL_MAX_VERSION
 | 
			
		||||
cat      = SC_ADVANCED
 | 
			
		||||
extver   = SlXvFeatureTest()
 | 
			
		||||
@@ -80,7 +80,7 @@ def      = 0
 | 
			
		||||
min      = 0
 | 
			
		||||
max      = 0
 | 
			
		||||
full     = NULL
 | 
			
		||||
to       = 3
 | 
			
		||||
to       = SLV_4
 | 
			
		||||
 | 
			
		||||
[SDTG_GENERAL]
 | 
			
		||||
name     = ""diff_custom""
 | 
			
		||||
@@ -94,7 +94,7 @@ def      = 0
 | 
			
		||||
min      = 0
 | 
			
		||||
max      = 0
 | 
			
		||||
full     = NULL
 | 
			
		||||
from     = 4
 | 
			
		||||
from     = SLV_4
 | 
			
		||||
 | 
			
		||||
##
 | 
			
		||||
[SDTG_VAR]
 | 
			
		||||
@@ -155,21 +155,21 @@ type     = SLE_UINT8
 | 
			
		||||
def      = DEF_SNOWLINE_HEIGHT * TILE_HEIGHT
 | 
			
		||||
min      = MIN_SNOWLINE_HEIGHT * TILE_HEIGHT
 | 
			
		||||
max      = MAX_SNOWLINE_HEIGHT * TILE_HEIGHT
 | 
			
		||||
to       = 21
 | 
			
		||||
to       = SLV_22
 | 
			
		||||
 | 
			
		||||
[SDT_NULL]
 | 
			
		||||
length   = 1
 | 
			
		||||
from     = 22
 | 
			
		||||
to       = 164
 | 
			
		||||
from     = SLV_22
 | 
			
		||||
to       = SLV_165
 | 
			
		||||
 | 
			
		||||
[SDT_NULL]
 | 
			
		||||
length   = 1
 | 
			
		||||
to       = 22
 | 
			
		||||
to       = SLV_23
 | 
			
		||||
 | 
			
		||||
[SDTC_OMANY]
 | 
			
		||||
var      = gui.autosave
 | 
			
		||||
type     = SLE_UINT8
 | 
			
		||||
from     = 23
 | 
			
		||||
from     = SLV_23
 | 
			
		||||
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 | 
			
		||||
def      = 1
 | 
			
		||||
max      = 4
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ strhelp  = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
 | 
			
		||||
strval   = STR_NULL
 | 
			
		||||
proc     = NULL
 | 
			
		||||
load     = NULL
 | 
			
		||||
from     = 0
 | 
			
		||||
from     = SL_MIN_VERSION
 | 
			
		||||
to       = SL_MAX_VERSION
 | 
			
		||||
cat      = SC_ADVANCED
 | 
			
		||||
extver   = SlXvFeatureTest()
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -30,7 +30,7 @@ strhelp  = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
 | 
			
		||||
strval   = STR_NULL
 | 
			
		||||
proc     = NULL
 | 
			
		||||
load     = NULL
 | 
			
		||||
from     = 0
 | 
			
		||||
from     = SL_MIN_VERSION
 | 
			
		||||
to       = SL_MAX_VERSION
 | 
			
		||||
cat      = SC_ADVANCED
 | 
			
		||||
extver   = SlXvFeatureTest()
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@ strhelp  = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
 | 
			
		||||
strval   = STR_NULL
 | 
			
		||||
proc     = NULL
 | 
			
		||||
load     = NULL
 | 
			
		||||
from     = 0
 | 
			
		||||
from     = SL_MIN_VERSION
 | 
			
		||||
to       = SL_MAX_VERSION
 | 
			
		||||
cat      = SC_ADVANCED
 | 
			
		||||
extver   = SlXvFeatureTest()
 | 
			
		||||
 
 | 
			
		||||
@@ -2456,11 +2456,12 @@ LiveryScheme GetEngineLiveryScheme(EngineID engine_type, EngineID parent_engine_
 | 
			
		||||
					if (parent_engine_type == INVALID_ENGINE) {
 | 
			
		||||
						return LS_PASSENGER_WAGON_STEAM;
 | 
			
		||||
					} else {
 | 
			
		||||
						bool is_mu = HasBit(EngInfo(parent_engine_type)->misc_flags, EF_RAIL_IS_MU);
 | 
			
		||||
						switch (RailVehInfo(parent_engine_type)->engclass) {
 | 
			
		||||
							default: NOT_REACHED();
 | 
			
		||||
							case EC_STEAM:    return LS_PASSENGER_WAGON_STEAM;
 | 
			
		||||
							case EC_DIESEL:   return LS_PASSENGER_WAGON_DIESEL;
 | 
			
		||||
							case EC_ELECTRIC: return LS_PASSENGER_WAGON_ELECTRIC;
 | 
			
		||||
							case EC_DIESEL:   return is_mu ? LS_DMU : LS_PASSENGER_WAGON_DIESEL;
 | 
			
		||||
							case EC_ELECTRIC: return is_mu ? LS_EMU : LS_PASSENGER_WAGON_ELECTRIC;
 | 
			
		||||
							case EC_MONORAIL: return LS_PASSENGER_WAGON_MONORAIL;
 | 
			
		||||
							case EC_MAGLEV:   return LS_PASSENGER_WAGON_MAGLEV;
 | 
			
		||||
						}
 | 
			
		||||
 
 | 
			
		||||
@@ -3134,7 +3134,7 @@ void UpdateWindows()
 | 
			
		||||
 | 
			
		||||
	CallWindowRealtimeTickEvent(delta_ms);
 | 
			
		||||
 | 
			
		||||
#ifdef ENABLE_NETWORKING
 | 
			
		||||
#ifdef ENABLE_NETWORK
 | 
			
		||||
	static GUITimer network_message_timer = GUITimer(1);
 | 
			
		||||
	if (network_message_timer.Elapsed(delta_ms)) {
 | 
			
		||||
		network_message_timer.SetInterval(1000);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user