(svn r9816) [NoAI] -Sync with trunk r9712:9815 except r9759 (MorphOS threading) because that needs special attention. noai
authorrubidium
Wed, 09 May 2007 20:22:49 +0000
branchnoai
changeset 9620 31e38d28a0af
parent 9619 6e81cec30a2b
child 9621 7654501cf02d
(svn r9816) [NoAI] -Sync with trunk r9712:9815 except r9759 (MorphOS threading) because that needs special attention.
bin/data/openttd.grf
projects/openttd.vcproj
projects/openttd.xcode/default.pbxuser
projects/openttd.xcode/project.pbxproj
projects/openttd_vs80.vcproj
source.list
src/ai/api/ai_road.cpp
src/ai/api/ai_tile.cpp
src/aircraft.h
src/aircraft_cmd.cpp
src/airport_movement.h
src/autoreplace_cmd.cpp
src/build_vehicle_gui.cpp
src/command.cpp
src/console_cmds.cpp
src/disaster_cmd.cpp
src/economy.cpp
src/economy.h
src/engine.cpp
src/engine.h
src/genworld.cpp
src/genworld_gui.cpp
src/gui.h
src/heightmap.cpp
src/industry.h
src/industry_cmd.cpp
src/intro_gui.cpp
src/lang/american.txt
src/lang/brazilian_portuguese.txt
src/lang/bulgarian.txt
src/lang/catalan.txt
src/lang/czech.txt
src/lang/danish.txt
src/lang/dutch.txt
src/lang/english.txt
src/lang/esperanto.txt
src/lang/estonian.txt
src/lang/finnish.txt
src/lang/french.txt
src/lang/german.txt
src/lang/hungarian.txt
src/lang/italian.txt
src/lang/japanese.txt
src/lang/korean.txt
src/lang/norwegian_nynorsk.txt
src/lang/polish.txt
src/lang/portuguese.txt
src/lang/romanian.txt
src/lang/russian.txt
src/lang/simplified_chinese.txt
src/lang/slovak.txt
src/lang/slovenian.txt
src/lang/spanish.txt
src/lang/swedish.txt
src/lang/traditional_chinese.txt
src/lang/turkish.txt
src/lang/ukrainian.txt
src/main_gui.cpp
src/map.cpp
src/map.h
src/network/network.cpp
src/network/network_client.cpp
src/network/network_gui.cpp
src/network/network_gui.h
src/network/network_server.cpp
src/newgrf.cpp
src/newgrf.h
src/newgrf_canal.cpp
src/newgrf_canal.h
src/newgrf_engine.cpp
src/newgrf_spritegroup.h
src/newgrf_text.cpp
src/news_gui.cpp
src/oldloader.cpp
src/openttd.cpp
src/openttd.h
src/order_cmd.cpp
src/players.cpp
src/rail_cmd.cpp
src/rail_gui.cpp
src/rail_map.h
src/road_cmd.cpp
src/roadveh.h
src/roadveh_cmd.cpp
src/saveload.cpp
src/settings.cpp
src/settings_gui.cpp
src/ship.h
src/ship_cmd.cpp
src/smallmap_gui.cpp
src/station_cmd.cpp
src/table/engines.h
src/table/files.h
src/table/sprites.h
src/table/water_land.h
src/terraform_gui.cpp
src/town_cmd.cpp
src/train.h
src/train_cmd.cpp
src/transparency_gui.cpp
src/tunnel_map.h
src/tunnelbridge_cmd.cpp
src/variables.h
src/vehicle.cpp
src/vehicle.h
src/video/win32_v.cpp
src/viewport.cpp
src/water_cmd.cpp
src/window.cpp
src/window.h
src/yapf/yapf_destrail.hpp
Binary file bin/data/openttd.grf has changed
--- a/projects/openttd.vcproj	Fri May 04 23:17:26 2007 +0000
+++ b/projects/openttd.vcproj	Wed May 09 20:22:49 2007 +0000
@@ -519,6 +519,9 @@
 				RelativePath=".\..\src\newgrf_callbacks.h">
 			</File>
 			<File
+				RelativePath=".\..\src\newgrf_canal.h">
+			</File>
+			<File
 				RelativePath=".\..\src\newgrf_cargo.h">
 			</File>
 			<File
@@ -1176,6 +1179,9 @@
 				RelativePath=".\..\src\newgrf.cpp">
 			</File>
 			<File
+				RelativePath=".\..\src\newgrf_canal.cpp">
+			</File>
+			<File
 				RelativePath=".\..\src\newgrf_cargo.cpp">
 			</File>
 			<File
--- a/projects/openttd.xcode/default.pbxuser	Fri May 04 23:17:26 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,532 +0,0 @@
-// !$*UTF8*$!
-{
-	08FB7793FE84155DC02AAC07 = {
-		activeBuildStyle = 014CEA520018CE5811CA2923;
-		activeExecutable = 68C517A107AB2F1F00652893;
-		activeTarget = 92BA222C07AAF30200DBA913;
-		codeSenseManager = 68C517A007AB2E2100652893;
-		executables = (
-			68C517A107AB2F1F00652893,
-		);
-		perUserDictionary = {
-			PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = {
-				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
-				PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID;
-				PBXFileTableDataSourceColumnWidthsKey = (
-					22,
-					372.7974,
-				);
-				PBXFileTableDataSourceColumnsKey = (
-					PBXExecutablesDataSource_ActiveFlagID,
-					PBXExecutablesDataSource_NameID,
-				);
-			};
-			PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
-				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
-				PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
-				PBXFileTableDataSourceColumnWidthsKey = (
-					20,
-					190,
-					20,
-					39,
-					43,
-					43,
-					20,
-				);
-				PBXFileTableDataSourceColumnsKey = (
-					PBXFileDataSource_FiletypeID,
-					PBXFileDataSource_Filename_ColumnID,
-					PBXFileDataSource_Built_ColumnID,
-					PBXFileDataSource_ObjectSize_ColumnID,
-					PBXFileDataSource_Errors_ColumnID,
-					PBXFileDataSource_Warnings_ColumnID,
-					PBXFileDataSource_Target_ColumnID,
-				);
-			};
-			PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = {
-				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
-				PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
-				PBXFileTableDataSourceColumnWidthsKey = (
-					20,
-					167,
-					41,
-					20,
-					41,
-					43,
-					43,
-				);
-				PBXFileTableDataSourceColumnsKey = (
-					PBXFileDataSource_FiletypeID,
-					PBXFileDataSource_Filename_ColumnID,
-					PBXTargetDataSource_PrimaryAttribute,
-					PBXFileDataSource_Built_ColumnID,
-					PBXFileDataSource_ObjectSize_ColumnID,
-					PBXFileDataSource_Errors_ColumnID,
-					PBXFileDataSource_Warnings_ColumnID,
-				);
-			};
-			PBXPerProjectTemplateStateSaveDate = 128685251;
-			PBXPrepackagedSmartGroups_v2 = (
-				{
-					PBXTransientLocationAtTop = bottom;
-					absolutePathToBundle = "";
-					activationKey = OldTargetSmartGroup;
-					clz = PBXTargetSmartGroup;
-					description = "Displays all targets of the project.";
-					globalID = 1C37FABC04509CD000000102;
-					name = Targets;
-					preferences = {
-						image = Targets;
-					};
-				},
-				{
-					PBXTransientLocationAtTop = bottom;
-					absolutePathToBundle = "";
-					clz = PBXTargetSmartGroup2;
-					description = "Displays all targets of the project as well as nested build phases.";
-					globalID = 1C37FBAC04509CD000000102;
-					name = Targets;
-					preferences = {
-						image = Targets;
-					};
-				},
-				{
-					PBXTransientLocationAtTop = bottom;
-					absolutePathToBundle = "";
-					clz = PBXExecutablesSmartGroup;
-					description = "Displays all executables of the project.";
-					globalID = 1C37FAAC04509CD000000102;
-					name = Executables;
-					preferences = {
-						image = Executable;
-					};
-				},
-				{
-					" PBXTransientLocationAtTop " = bottom;
-					absolutePathToBundle = "";
-					clz = PBXErrorsWarningsSmartGroup;
-					description = "Displays files with errors or warnings.";
-					globalID = 1C08E77C0454961000C914BD;
-					name = "Errors and Warnings";
-					preferences = {
-						fnmatch = "";
-						image = WarningsErrors;
-						recursive = 1;
-						regex = "";
-						root = "<PROJECT>";
-					};
-				},
-				{
-					PBXTransientLocationAtTop = bottom;
-					absolutePathToBundle = "";
-					clz = PBXFilenameSmartGroup;
-					description = "Filters items in a given group (potentially recursively) based on matching the name with the regular expression of the filter.";
-					globalID = 1CC0EA4004350EF90044410B;
-					name = "Implementation Files";
-					preferences = {
-						canSave = 1;
-						fnmatch = "";
-						image = SmartFolder;
-						isLeaf = 0;
-						recursive = 1;
-						regex = "?*\\.[mcMC]";
-						root = "<PROJECT>";
-					};
-				},
-				{
-					PBXTransientLocationAtTop = bottom;
-					absolutePathToBundle = "";
-					clz = PBXFilenameSmartGroup;
-					description = "This group displays Interface Builder NIB Files.";
-					globalID = 1CC0EA4004350EF90041110B;
-					name = "NIB Files";
-					preferences = {
-						canSave = 1;
-						fnmatch = "*.nib";
-						image = SmartFolder;
-						isLeaf = 0;
-						recursive = 1;
-						regex = "";
-						root = "<PROJECT>";
-					};
-				},
-				{
-					PBXTransientLocationAtTop = no;
-					absolutePathToBundle = "";
-					clz = PBXFindSmartGroup;
-					description = "Displays Find Results.";
-					globalID = 1C37FABC05509CD000000102;
-					name = "Find Results";
-					preferences = {
-						image = spyglass;
-					};
-				},
-				{
-					PBXTransientLocationAtTop = no;
-					absolutePathToBundle = "";
-					clz = PBXBookmarksSmartGroup;
-					description = "Displays Project Bookmarks.";
-					globalID = 1C37FABC05539CD112110102;
-					name = Bookmarks;
-					preferences = {
-						image = Bookmarks;
-					};
-				},
-				{
-					PBXTransientLocationAtTop = bottom;
-					absolutePathToBundle = "";
-					clz = XCSCMSmartGroup;
-					description = "Displays files with interesting SCM status.";
-					globalID = E2644B35053B69B200211256;
-					name = SCM;
-					preferences = {
-						image = PBXRepository;
-						isLeaf = 0;
-					};
-				},
-				{
-					PBXTransientLocationAtTop = bottom;
-					absolutePathToBundle = "";
-					clz = PBXSymbolsSmartGroup;
-					description = "Displays all symbols for the project.";
-					globalID = 1C37FABC04509CD000100104;
-					name = "Project Symbols";
-					preferences = {
-						image = ProjectSymbols;
-						isLeaf = 1;
-					};
-				},
-				{
-					PBXTransientLocationAtTop = bottom;
-					absolutePathToBundle = "";
-					clz = PBXFilenameSmartGroup;
-					description = "Filters items in a given group (potentially recursively) based on matching the name with the regular expression of the filter.";
-					globalID = PBXTemplateMarker;
-					name = "Simple Filter SmartGroup";
-					preferences = {
-						canSave = 1;
-						fnmatch = "*.nib";
-						image = SmartFolder;
-						isLeaf = 0;
-						recursive = 1;
-						regex = "";
-						root = "<PROJECT>";
-					};
-				},
-				{
-					PBXTransientLocationAtTop = bottom;
-					absolutePathToBundle = "";
-					clz = PBXFilenameSmartGroup;
-					description = "Filters items in a given group (potentially recursively) based on matching the name with the regular expression of the filter.";
-					globalID = PBXTemplateMarker;
-					name = "Simple Regular Expression SmartGroup";
-					preferences = {
-						canSave = 1;
-						fnmatch = "";
-						image = SmartFolder;
-						isLeaf = 0;
-						recursive = 1;
-						regex = "?*\\.[mcMC]";
-						root = "<PROJECT>";
-					};
-				},
-			);
-			PBXWorkspaceContents = (
-				{
-					PBXProjectWorkspaceModule_StateKey_Rev39 = {
-						PBXProjectWorkspaceModule_DataSourceSelectionKey_Rev6 = {
-							BoundsStr = "{{0, 0}, {403, 284}}";
-							Rows = (
-							);
-							VisibleRectStr = "{{0, 0}, {403, 284}}";
-						};
-						PBXProjectWorkspaceModule_EditorOpen = false;
-						PBXProjectWorkspaceModule_EmbeddedNavigatorGroup = {
-							PBXSplitModuleInNavigatorKey = {
-								SplitCount = 1;
-							};
-						};
-						PBXProjectWorkspaceModule_GeometryKey_Rev15 = {
-							PBXProjectWorkspaceModule_SGTM_Geometry = {
-								_collapsingFrameDimension = 0;
-								_indexOfCollapsedView = 0;
-								_percentageOfCollapsedView = 0;
-								sizes = (
-									"{{0, 0}, {182, 301}}",
-									"{{182, 0}, {418, 301}}",
-								);
-							};
-						};
-						PBXProjectWorkspaceModule_OldDetailFrame = "{{0, 0}, {418, 301}}";
-						PBXProjectWorkspaceModule_OldEditorFrame = "{{0, 0}, {750, 480}}";
-						PBXProjectWorkspaceModule_OldSuperviewFrame = "{{182, 0}, {418, 301}}";
-						PBXProjectWorkspaceModule_SGTM = {
-							PBXBottomSmartGroupGIDs = (
-								1C37FBAC04509CD000000102,
-								1C37FAAC04509CD000000102,
-								1C08E77C0454961000C914BD,
-								1CC0EA4004350EF90044410B,
-								1CC0EA4004350EF90041110B,
-								1C37FABC05509CD000000102,
-								1C37FABC05539CD112110102,
-								E2644B35053B69B200211256,
-								1C37FABC04509CD000100104,
-							);
-							PBXSmartGroupTreeModuleColumnData = {
-								PBXSmartGroupTreeModuleColumnWidthsKey = (
-									165,
-								);
-								PBXSmartGroupTreeModuleColumnsKey_v4 = (
-									MainColumn,
-								);
-							};
-							PBXSmartGroupTreeModuleOutlineStateKey_v7 = {
-								PBXSmartGroupTreeModuleOutlineStateExpansionKey = (
-								);
-								PBXSmartGroupTreeModuleOutlineStateSelectionKey = (
-									(
-										1,
-									),
-								);
-								PBXSmartGroupTreeModuleOutlineStateVisibleRectKey = "{{0, 0}, {165, 283}}";
-							};
-							PBXTopSmartGroupGIDs = (
-							);
-						};
-					};
-				},
-			);
-			"PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXBuildResultsModule" = {
-			};
-			"PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXCVSModule" = {
-			};
-			"PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXDebugCLIModule" = {
-			};
-			"PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXDebugSessionModule" = {
-				Debugger = {
-					HorizontalSplitView = {
-						_collapsingFrameDimension = 0;
-						_indexOfCollapsedView = 0;
-						_percentageOfCollapsedView = 0;
-						isCollapsed = yes;
-						sizes = (
-							"{{0, 0}, {283, 209}}",
-							"{{283, 0}, {462, 209}}",
-						);
-					};
-					VerticalSplitView = {
-						_collapsingFrameDimension = 0;
-						_indexOfCollapsedView = 0;
-						_percentageOfCollapsedView = 0;
-						isCollapsed = yes;
-						sizes = (
-							"{{0, 0}, {745, 209}}",
-							"{{0, 209}, {745, 213}}",
-						);
-					};
-				};
-				LauncherConfigVersion = 8;
-			};
-			"PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXNavigatorGroup" = {
-				PBXSplitModuleInNavigatorKey = {
-					SplitCount = 1;
-				};
-			};
-			"PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXProjectWorkspaceModule" = {
-				PBXProjectWorkspaceModule_StateKey_Rev39 = {
-					PBXProjectWorkspaceModule_EditorOpen = false;
-					PBXProjectWorkspaceModule_EmbeddedNavigatorGroup = {
-						PBXSplitModuleInNavigatorKey = {
-							SplitCount = 1;
-						};
-					};
-					PBXProjectWorkspaceModule_GeometryKey_Rev15 = {
-						PBXProjectWorkspaceModule_SGTM_Geometry = {
-							_collapsingFrameDimension = 0;
-							_indexOfCollapsedView = 0;
-							_percentageOfCollapsedView = 0;
-							sizes = (
-								"{{0, 0}, {182, 301}}",
-								"{{182, 0}, {418, 301}}",
-							);
-						};
-					};
-					PBXProjectWorkspaceModule_OldDetailFrame = "{{0, 0}, {418, 301}}";
-					PBXProjectWorkspaceModule_OldEditorFrame = "{{0, 0}, {750, 480}}";
-					PBXProjectWorkspaceModule_OldSuperviewFrame = "{{182, 0}, {418, 301}}";
-					PBXProjectWorkspaceModule_SGTM = {
-						PBXBottomSmartGroupGIDs = (
-							1C37FBAC04509CD000000102,
-							1C37FAAC04509CD000000102,
-							1C08E77C0454961000C914BD,
-							1CC0EA4004350EF90044410B,
-							1CC0EA4004350EF90041110B,
-							1C37FABC05509CD000000102,
-							1C37FABC05539CD112110102,
-							E2644B35053B69B200211256,
-							1C37FABC04509CD000100104,
-						);
-						PBXSmartGroupTreeModuleColumnData = {
-							PBXSmartGroupTreeModuleColumnWidthsKey = (
-								165,
-							);
-							PBXSmartGroupTreeModuleColumnsKey_v4 = (
-								MainColumn,
-							);
-						};
-						PBXSmartGroupTreeModuleOutlineStateKey_v7 = {
-							PBXSmartGroupTreeModuleOutlineStateExpansionKey = (
-							);
-							PBXSmartGroupTreeModuleOutlineStateSelectionKey = (
-							);
-							PBXSmartGroupTreeModuleOutlineStateVisibleRectKey = "{{0, 0}, {165, 283}}";
-						};
-						PBXTopSmartGroupGIDs = (
-						);
-					};
-				};
-			};
-			"PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXRunSessionModule" = {
-				LauncherConfigVersion = 3;
-				Runner = {
-					HorizontalSplitView = {
-						_collapsingFrameDimension = 0;
-						_indexOfCollapsedView = 0;
-						_percentageOfCollapsedView = 0;
-						isCollapsed = yes;
-						sizes = (
-							"{{0, 0}, {491, 167}}",
-							"{{0, 176}, {491, 267}}",
-						);
-					};
-					VerticalSplitView = {
-						_collapsingFrameDimension = 0;
-						_indexOfCollapsedView = 0;
-						_percentageOfCollapsedView = 0;
-						isCollapsed = yes;
-						sizes = (
-							"{{0, 0}, {405, 443}}",
-							"{{414, 0}, {514, 443}}",
-						);
-					};
-				};
-			};
-			PBXWorkspaceGeometries = (
-				{
-					Frame = "{{0, 0}, {600, 301}}";
-					PBXProjectWorkspaceModule_GeometryKey_Rev15 = {
-						PBXProjectWorkspaceModule_DebuggerWindowVisible = true;
-					};
-					RubberWindowFrame = "50 403 600 343 0 0 1024 746 ";
-				},
-			);
-			"PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXBuildResultsModule" = {
-				Frame = "{{0, 0}, {481, 201}}";
-				PBXModuleWindowStatusBarHidden = YES;
-				RubberWindowFrame = "272 423 481 222 0 0 1024 746 ";
-			};
-			"PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXCVSModule" = {
-				Frame = "{{0, 0}, {482, 276}}";
-				RubberWindowFrame = "262 214 482 318 0 0 1024 746 ";
-			};
-			"PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXDebugCLIModule" = {
-				Frame = "{{0, 0}, {400, 201}}";
-				PBXModuleWindowStatusBarHidden = YES;
-				RubberWindowFrame = "50 718 400 222 0 0 1024 746 ";
-			};
-			"PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXDebugSessionModule" = {
-				DebugConsoleDrawerSize = "{100, 120}";
-				DebugConsoleVisible = None;
-				DebugConsoleWindowFrame = "{{200, 200}, {500, 300}}";
-				DebugSTDIOWindowFrame = "{{200, 200}, {500, 300}}";
-				Frame = "{{0, 0}, {745, 422}}";
-				RubberWindowFrame = "208 276 745 464 0 0 1024 746 ";
-			};
-			"PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXNavigatorGroup" = {
-				Frame = "{{0, 0}, {750, 481}}";
-				PBXModuleWindowStatusBarHidden = YES;
-				RubberWindowFrame = "84 176 750 502 0 0 1024 746 ";
-			};
-			"PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXProjectWorkspaceModule" = {
-				Frame = "{{0, 0}, {600, 301}}";
-				PBXProjectWorkspaceModule_GeometryKey_Rev15 = {
-				};
-				RubberWindowFrame = "50 403 600 343 0 0 1024 746 ";
-			};
-			"PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXRunSessionModule" = {
-				Frame = "{{0, 0}, {745, 422}}";
-				RubberWindowFrame = "139 272 745 464 0 0 1024 746 ";
-			};
-			PBXWorkspaceStateSaveDate = 128685251;
-		};
-		sourceControlManager = 68C5179F07AB2E2100652893;
-		userBuildSettings = {
-		};
-	};
-	68C5179F07AB2E2100652893 = {
-		isa = PBXSourceControlManager;
-		scmConfiguration = {
-		};
-		scmType = scm.cvs;
-	};
-	68C517A007AB2E2100652893 = {
-		indexTemplatePath = "";
-		isa = PBXCodeSenseManager;
-		usesDefaults = 1;
-		wantsCodeCompletion = 1;
-		wantsCodeCompletionAutoPopup = 0;
-		wantsCodeCompletionAutoSuggestions = 0;
-		wantsCodeCompletionCaseSensitivity = 1;
-		wantsCodeCompletionOnlyMatchingItems = 1;
-		wantsCodeCompletionParametersIncluded = 1;
-		wantsCodeCompletionPlaceholdersInserted = 1;
-		wantsCodeCompletionTabCompletes = 1;
-		wantsIndex = 1;
-	};
-	68C517A107AB2F1F00652893 = {
-		activeArgIndex = 2147483647;
-		activeArgIndices = (
-		);
-		argumentStrings = (
-		);
-		configStateDict = {
-		};
-		debuggerPlugin = GDBDebugging;
-		dylibVariantSuffix = "";
-		enableDebugStr = 1;
-		environmentEntries = (
-		);
-		isa = PBXExecutable;
-		launchableReference = 68C517A707AB353500652893;
-		name = Executable;
-		shlibInfoDictList = (
-		);
-		sourceDirectories = (
-		);
-		startupPath = "<<ProjectDirectory>>";
-	};
-	68C517A707AB353500652893 = {
-		isa = PBXFileReference;
-		lastKnownFileType = "compiled.mach-o.executable";
-		path = openttd;
-		refType = 4;
-		sourceTree = "<group>";
-	};
-	92BA20FC07AAF1EE00DBA913 = {
-		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {842, 19935}}";
-			sepNavSelRange = "{33085, 0}";
-			sepNavVisRect = "{{0, 19643}, {706, 181}}";
-		};
-	};
-	92BA212307AAF1EE00DBA913 = {
-		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {992, 11857}}";
-			sepNavSelRange = "{19846, 0}";
-			sepNavVisRect = "{{0, 11676}, {706, 181}}";
-		};
-	};
-	92BA222C07AAF30200DBA913 = {
-		activeExec = 0;
-	};
-}
--- a/projects/openttd.xcode/project.pbxproj	Fri May 04 23:17:26 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3168 +0,0 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 39;
-	objects = {
-		014CEA520018CE5811CA2923 = {
-			buildSettings = {
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				HEADER_SEARCH_PATHS = /sw/include/SDL;
-				LIBRARY_SEARCH_PATHS = /sw/include/SDL;
-				ZERO_LINK = NO;
-			};
-			isa = PBXBuildStyle;
-			name = Development;
-		};
-		014CEA530018CE5811CA2923 = {
-			buildSettings = {
-				COPY_PHASE_STRIP = YES;
-				GCC_ENABLE_FIX_AND_CONTINUE = NO;
-				ZERO_LINK = NO;
-			};
-			isa = PBXBuildStyle;
-			name = Deployment;
-		};
-//010
-//011
-//012
-//013
-//014
-//080
-//081
-//082
-//083
-//084
-		08FB7793FE84155DC02AAC07 = {
-			buildSettings = {
-			};
-			buildStyles = (
-				014CEA520018CE5811CA2923,
-				014CEA530018CE5811CA2923,
-			);
-			hasScannedForEncodings = 1;
-			isa = PBXProject;
-			mainGroup = 08FB7794FE84155DC02AAC07;
-			projectDirPath = "";
-			targets = (
-				92BA222C07AAF30200DBA913,
-			);
-		};
-		08FB7794FE84155DC02AAC07 = {
-			children = (
-				08FB7795FE84155DC02AAC07,
-				C6A0FF2B0290797F04C91782,
-				1AB674ADFE9D54B511CA2CBB,
-			);
-			isa = PBXGroup;
-			name = OpenTTD;
-			refType = 4;
-			sourceTree = "<group>";
-		};
-		08FB7795FE84155DC02AAC07 = {
-			children = (
-				92BA20DF07AAF1EE00DBA913,
-				92BA20E007AAF1EE00DBA913,
-				92BA20E107AAF1EE00DBA913,
-				92BA20E207AAF1EE00DBA913,
-				92BA20E307AAF1EE00DBA913,
-				92BA20E407AAF1EE00DBA913,
-				92BA20E507AAF1EE00DBA913,
-				92BA20E607AAF1EE00DBA913,
-				92BA20E707AAF1EE00DBA913,
-				92BA20E807AAF1EE00DBA913,
-				92BA20E907AAF1EE00DBA913,
-				92BA20EA07AAF1EE00DBA913,
-				92BA20EB07AAF1EE00DBA913,
-				92BA20EC07AAF1EE00DBA913,
-				92BA20ED07AAF1EE00DBA913,
-				92BA20EE07AAF1EE00DBA913,
-				92BA20EF07AAF1EE00DBA913,
-				92BA20F007AAF1EE00DBA913,
-				92BA20F107AAF1EE00DBA913,
-				92BA20F207AAF1EE00DBA913,
-				92BA20F307AAF1EE00DBA913,
-				92BA20F407AAF1EE00DBA913,
-				92BA20F507AAF1EE00DBA913,
-				92BA20F607AAF1EE00DBA913,
-				92BA20F707AAF1EE00DBA913,
-				92BA20F807AAF1EE00DBA913,
-				92BA20F907AAF1EE00DBA913,
-				92BA20FA07AAF1EE00DBA913,
-				92BA20FB07AAF1EE00DBA913,
-				92BA20FC07AAF1EE00DBA913,
-				92BA20FD07AAF1EE00DBA913,
-				92BA20FE07AAF1EE00DBA913,
-				92BA20FF07AAF1EE00DBA913,
-				92BA210007AAF1EE00DBA913,
-				92BA210107AAF1EE00DBA913,
-				92BA210207AAF1EE00DBA913,
-				92BA210307AAF1EE00DBA913,
-				92BA210407AAF1EE00DBA913,
-				92BA210507AAF1EE00DBA913,
-				92BA212107AAF1EE00DBA913,
-				92BA212207AAF1EE00DBA913,
-				92BA212307AAF1EE00DBA913,
-				92BA212407AAF1EE00DBA913,
-				92BA212C07AAF1EE00DBA913,
-				92BA212D07AAF1EE00DBA913,
-				92BA212E07AAF1EE00DBA913,
-				92BA212F07AAF1EE00DBA913,
-				92BA213007AAF1EE00DBA913,
-				92BA213107AAF1EE00DBA913,
-				92BA213207AAF1EE00DBA913,
-				92BA213307AAF1EE00DBA913,
-				92BA213407AAF1EE00DBA913,
-				92BA213507AAF1EE00DBA913,
-				92BA213607AAF1EE00DBA913,
-				92BA213707AAF1EE00DBA913,
-				92BA213807AAF1EE00DBA913,
-				92BA213907AAF1EE00DBA913,
-				92BA213A07AAF1EE00DBA913,
-				92BA213B07AAF1EE00DBA913,
-				92BA213C07AAF1EE00DBA913,
-				92BA213D07AAF1EE00DBA913,
-				92BA213E07AAF1EE00DBA913,
-				92BA214607AAF1EE00DBA913,
-				92BA214707AAF1EE00DBA913,
-				92BA214807AAF1EE00DBA913,
-				92BA214C07AAF1EE00DBA913,
-				92BA214D07AAF1EE00DBA913,
-				92BA214E07AAF1EE00DBA913,
-				92BA214F07AAF1EE00DBA913,
-				92BA215007AAF1EE00DBA913,
-				92BA215107AAF1EE00DBA913,
-				92BA215207AAF1EE00DBA913,
-				92BA215307AAF1EE00DBA913,
-				92BA215407AAF1EE00DBA913,
-				92BA215507AAF1EE00DBA913,
-				92BA215607AAF1EE00DBA913,
-				92BA215707AAF1EE00DBA913,
-				92BA215807AAF1EE00DBA913,
-				92BA215907AAF1EE00DBA913,
-				92BA215A07AAF1EE00DBA913,
-				92BA215B07AAF1EE00DBA913,
-				92BA215C07AAF1EE00DBA913,
-				92BA215D07AAF1EE00DBA913,
-				92BA215E07AAF1EE00DBA913,
-				92BA218807AAF1EF00DBA913,
-				92BA218907AAF1EF00DBA913,
-				92BA218A07AAF1EF00DBA913,
-				92BA218B07AAF1EF00DBA913,
-				92BA218C07AAF1EF00DBA913,
-				92BA218D07AAF1EF00DBA913,
-				92BA218E07AAF1EF00DBA913,
-				92BA218F07AAF1EF00DBA913,
-				92BA219007AAF1EF00DBA913,
-				92BA219107AAF1EF00DBA913,
-				92BA219207AAF1EF00DBA913,
-				92BA219307AAF1EF00DBA913,
-				92BA219407AAF1EF00DBA913,
-				92BA219507AAF1EF00DBA913,
-				92BA219607AAF1EF00DBA913,
-				92BA219707AAF1EF00DBA913,
-				92BA219807AAF1EF00DBA913,
-				92BA219907AAF1EF00DBA913,
-				92BA219A07AAF1EF00DBA913,
-				92BA219B07AAF1EF00DBA913,
-				92BA219C07AAF1EF00DBA913,
-				92BA219D07AAF1EF00DBA913,
-				92BA219E07AAF1EF00DBA913,
-				92BA219F07AAF1EF00DBA913,
-				92BA21A007AAF1EF00DBA913,
-				92BA21A107AAF1EF00DBA913,
-				92BA21A207AAF1EF00DBA913,
-				92BA21A307AAF1EF00DBA913,
-				92BA21A407AAF1EF00DBA913,
-				92BA21A507AAF1EF00DBA913,
-				92BA21AE07AAF1EF00DBA913,
-				92BA21AF07AAF1EF00DBA913,
-				92BA21B007AAF1EF00DBA913,
-				92BA21B107AAF1EF00DBA913,
-				92BA21B207AAF1EF00DBA913,
-				92BA21B507AAF1EF00DBA913,
-				92BA21B607AAF1EF00DBA913,
-				92BA21B707AAF1EF00DBA913,
-				92BA21B807AAF1EF00DBA913,
-				92BA21B907AAF1EF00DBA913,
-				92BA21BA07AAF1EF00DBA913,
-				92BA21BB07AAF1EF00DBA913,
-				92BA21D607AAF1EF00DBA913,
-				92BA21D707AAF1EF00DBA913,
-				92BA21D807AAF1EF00DBA913,
-				92BA21D907AAF1EF00DBA913,
-				92BA21DA07AAF1EF00DBA913,
-				92BA21DB07AAF1EF00DBA913,
-				92BA21DC07AAF1EF00DBA913,
-				92BA21DD07AAF1EF00DBA913,
-				92BA21DE07AAF1EF00DBA913,
-				92BA21DF07AAF1EF00DBA913,
-				92BA21E007AAF1EF00DBA913,
-				92BA21E107AAF1EF00DBA913,
-				92BA21E207AAF1EF00DBA913,
-				92BA21E307AAF1EF00DBA913,
-				92BA21E407AAF1EF00DBA913,
-				92BA21E507AAF1EF00DBA913,
-				92BA21E607AAF1EF00DBA913,
-				92BA21E707AAF1EF00DBA913,
-				92BA21E807AAF1EF00DBA913,
-				92BA21E907AAF1EF00DBA913,
-				92BA21EA07AAF1EF00DBA913,
-				92BA21EB07AAF1EF00DBA913,
-				92BA21EC07AAF1EF00DBA913,
-				92BA21FC07AAF1EF00DBA913,
-				92BA21FD07AAF1EF00DBA913,
-				92BA21FE07AAF1EF00DBA913,
-				92BA21FF07AAF1EF00DBA913,
-				92BA220C07AAF1EF00DBA913,
-				92BA220D07AAF1EF00DBA913,
-				92BA220E07AAF1EF00DBA913,
-				92BA220F07AAF1EF00DBA913,
-				92BA221007AAF1EF00DBA913,
-				92BA221107AAF1EF00DBA913,
-				92BA221207AAF1EF00DBA913,
-				92BA221307AAF1EF00DBA913,
-				92BA221407AAF1EF00DBA913,
-				92BA221507AAF1EF00DBA913,
-				92BA221607AAF1EF00DBA913,
-				92BA221707AAF1EF00DBA913,
-				92BA221807AAF1EF00DBA913,
-				92BA221907AAF1EF00DBA913,
-				92BA221A07AAF1EF00DBA913,
-				92BA221B07AAF1EF00DBA913,
-				92BA221C07AAF1EF00DBA913,
-				92BA221D07AAF1EF00DBA913,
-				92BA221E07AAF1EF00DBA913,
-				92BA221F07AAF1EF00DBA913,
-				92BA222007AAF1EF00DBA913,
-				92BA222107AAF1EF00DBA913,
-				92BA222207AAF1EF00DBA913,
-			);
-			isa = PBXGroup;
-			name = Source;
-			refType = 4;
-			sourceTree = "<group>";
-		};
-//080
-//081
-//082
-//083
-//084
-//1A0
-//1A1
-//1A2
-//1A3
-//1A4
-		1AB674ADFE9D54B511CA2CBB = {
-			children = (
-			);
-			isa = PBXGroup;
-			name = Products;
-			refType = 4;
-			sourceTree = "<group>";
-		};
-//1A0
-//1A1
-//1A2
-//1A3
-//1A4
-//920
-//921
-//922
-//923
-//924
-		92BA20DF07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = sdl.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20E007AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = news_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20E107AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = news.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20E207AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.make;
-			path = Makefile;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20E307AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = console.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20E407AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = console.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20E507AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = window.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20E607AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = window.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20E707AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = win32.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20E807AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = widget.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20E907AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = water_cmd.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20EA07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.cpp.cpp;
-			path = w32dm2.cpp;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20EB07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = w32dm.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20EC07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = viewport.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20ED07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = viewport.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20EE07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = vehicle_gui.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20EF07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = vehicle_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20F007AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = vehicle.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20F107AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = vehicle.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20F207AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = variables.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20F307AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = unmovable_cmd.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20F407AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = unix.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20F507AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = tunnelbridge_cmd.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20F607AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text.plist.xml;
-			path = ttd.vcproj;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20F707AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			path = ttd.sln;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20F807AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			path = ttd.rc;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20F907AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = ttd.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20FA07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			path = ttd.dsw;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20FB07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			path = ttd.dsp;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20FC07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = ttd.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20FD07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = tree_cmd.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20FE07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = train_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA20FF07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = train_cmd.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA210007AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = town_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA210107AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = town_cmd.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA210207AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = town.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA210307AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = texteff.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA210407AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = terraform_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA210507AAF1EE00DBA913 = {
-			children = (
-				92BA210607AAF1EE00DBA913,
-				92BA210707AAF1EE00DBA913,
-				92BA210807AAF1EE00DBA913,
-				92BA210907AAF1EE00DBA913,
-				92BA210A07AAF1EE00DBA913,
-				92BA210B07AAF1EE00DBA913,
-				92BA210C07AAF1EE00DBA913,
-				92BA210D07AAF1EE00DBA913,
-				92BA210E07AAF1EE00DBA913,
-				92BA210F07AAF1EE00DBA913,
-				92BA211007AAF1EE00DBA913,
-				92BA211107AAF1EE00DBA913,
-				92BA211207AAF1EE00DBA913,
-				92BA211307AAF1EE00DBA913,
-				92BA211407AAF1EE00DBA913,
-				92BA211507AAF1EE00DBA913,
-				92BA211607AAF1EE00DBA913,
-				92BA211707AAF1EE00DBA913,
-				92BA211807AAF1EE00DBA913,
-				92BA211907AAF1EE00DBA913,
-				92BA211A07AAF1EE00DBA913,
-				92BA211B07AAF1EE00DBA913,
-				92BA211C07AAF1EE00DBA913,
-				92BA211D07AAF1EE00DBA913,
-				92BA211E07AAF1EE00DBA913,
-				92BA211F07AAF1EE00DBA913,
-				92BA212007AAF1EE00DBA913,
-			);
-			isa = PBXGroup;
-			path = table;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA210607AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = ai_rail.h;
-			path = table/ai_rail.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA210707AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = animcursors.h;
-			path = table/animcursors.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA210807AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = autorail.h;
-			path = table/autorail.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA210907AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = bridge_land.h;
-			path = table/bridge_land.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA210A07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = build_industry.h;
-			path = table/build_industry.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA210B07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = clear_land.h;
-			path = table/clear_land.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA210C07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = currency.h;
-			path = table/currency.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA210D07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = directions.h;
-			path = table/directions.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA210E07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = engines.h;
-			path = table/engines.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA210F07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = files.h;
-			path = table/files.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA211007AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = genland.h;
-			path = table/genland.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA211107AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = industry_land.h;
-			path = table/industry_land.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA211207AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = landscape_const.h;
-			path = table/landscape_const.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA211307AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = landscape_sprite.h;
-			path = table/landscape_sprite.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA211407AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = namegen.h;
-			path = table/namegen.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA211507AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = palettes.h;
-			path = table/palettes.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA211607AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = road_land.h;
-			path = table/road_land.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA211707AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = roadveh.h;
-			path = table/roadveh.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA211807AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = sprites.h;
-			path = table/sprites.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA211907AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = station_land.h;
-			path = table/station_land.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA211A07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = town_land.h;
-			path = table/town_land.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA211B07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = track_land.h;
-			path = table/track_land.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA211C07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = train_cmd.h;
-			path = table/train_cmd.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA211D07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = tree_land.h;
-			path = table/tree_land.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA211E07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = tunnel_land.h;
-			path = table/tunnel_land.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA211F07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = unmovable_land.h;
-			path = table/unmovable_land.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA212007AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = water_land.h;
-			path = table/water_land.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA212107AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text.script.sh;
-			path = svnup.sh;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA212207AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = subsidy_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA212307AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = strings.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA212407AAF1EE00DBA913 = {
-			children = (
-				92BA212507AAF1EE00DBA913,
-				92BA212607AAF1EE00DBA913,
-				92BA212707AAF1EE00DBA913,
-				92BA212807AAF1EE00DBA913,
-				92BA212907AAF1EE00DBA913,
-				92BA212A07AAF1EE00DBA913,
-				92BA212B07AAF1EE00DBA913,
-			);
-			isa = PBXGroup;
-			path = strgen;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA212507AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			name = stdafx.c;
-			path = strgen/stdafx.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA212607AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			name = stdafx.h;
-			path = strgen/stdafx.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA212707AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			name = strgen.c;
-			path = strgen/strgen.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA212807AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = strgen.dsp;
-			path = strgen/strgen.dsp;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA212907AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = strgen.dsw;
-			path = strgen/strgen.dsw;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA212A07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = strgen.tgt;
-			path = strgen/strgen.tgt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA212B07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text.plist.xml;
-			name = strgen.vcproj;
-			path = strgen/strgen.vcproj;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA212C07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = stdafx.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA212D07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = StdAfx.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA212E07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = station_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA212F07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = station_cmd.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA213007AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = station.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA213107AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = spritecache.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA213207AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = sprite.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA213307AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = sprite.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA213407AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = sound.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA213507AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = sound.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA213607AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = smallmap_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA213707AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = signs.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA213807AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = signs.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA213907AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = ship_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA213A07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = ship_cmd.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA213B07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = settings_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA213C07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = settings.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA213D07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = settings.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA213E07AAF1EE00DBA913 = {
-			children = (
-				92BA213F07AAF1EE00DBA913,
-				92BA214007AAF1EE00DBA913,
-				92BA214107AAF1EE00DBA913,
-				92BA214207AAF1EE00DBA913,
-				92BA214307AAF1EE00DBA913,
-				92BA214407AAF1EE00DBA913,
-				92BA214507AAF1EE00DBA913,
-			);
-			isa = PBXGroup;
-			path = scripts;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA213F07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = autoexec.scr.example;
-			path = scripts/autoexec.scr.example;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA214007AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = on_client.scr.example;
-			path = scripts/on_client.scr.example;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA214107AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = on_dedicated.scr.example;
-			path = scripts/on_dedicated.scr.example;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA214207AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = on_server.scr.example;
-			path = scripts/on_server.scr.example;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA214307AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = pre_dedicated.scr.example;
-			path = scripts/pre_dedicated.scr.example;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA214407AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = pre_server.scr.example;
-			path = scripts/pre_server.scr.example;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA214507AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = readme.txt;
-			path = scripts/readme.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA214607AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = screenshot.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA214707AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = screenshot.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA214807AAF1EE00DBA913 = {
-			children = (
-				92BA214907AAF1EE00DBA913,
-				92BA214A07AAF1EE00DBA913,
-				92BA214B07AAF1EE00DBA913,
-			);
-			isa = PBXGroup;
-			path = scenario;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA214907AAF1EE00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = file;
-			name = "Linkgame Islands 2004.scn";
-			path = "scenario/Linkgame Islands 2004.scn";
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA214A07AAF1EE00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = file;
-			name = "Mountain Pass.scn";
-			path = "scenario/Mountain Pass.scn";
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA214B07AAF1EE00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = file;
-			name = "Volcano City.scn";
-			path = "scenario/Volcano City.scn";
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA214C07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = saveload.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA214D07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = saveload.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA214E07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = roadveh_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA214F07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = roadveh_cmd.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA215007AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = road_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA215107AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = road_cmd.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA215207AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = resource.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA215307AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			path = readme.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA215407AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = rail_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA215507AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = rail_cmd.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA215607AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = queue.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA215707AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = queue.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA215807AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = players.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA215907AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = player_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA215A07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = player.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA215B07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = pathfind.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA215C07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = pathfind.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA215D07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = os2.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA215E07AAF1EE00DBA913 = {
-			children = (
-				92BA215F07AAF1EE00DBA913,
-				92BA216107AAF1EE00DBA913,
-				92BA216C07AAF1EE00DBA913,
-				92BA216F07AAF1EE00DBA913,
-				92BA217707AAF1EE00DBA913,
-				92BA217D07AAF1EE00DBA913,
-				92BA218107AAF1EE00DBA913,
-			);
-			isa = PBXGroup;
-			path = os;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA215F07AAF1EE00DBA913 = {
-			children = (
-				92BA216007AAF1EE00DBA913,
-			);
-			isa = PBXGroup;
-			path = beos;
-			refType = 4;
-			sourceTree = "<group>";
-		};
-		92BA216007AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.cpp.cpp;
-			name = bemidi.cpp;
-			path = os/beos/bemidi.cpp;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA216107AAF1EE00DBA913 = {
-			children = (
-				92BA216207AAF1EE00DBA913,
-				92BA216307AAF1EE00DBA913,
-				92BA216407AAF1EE00DBA913,
-				92BA216507AAF1EE00DBA913,
-				92BA216607AAF1EE00DBA913,
-				92BA216707AAF1EE00DBA913,
-				92BA216807AAF1EE00DBA913,
-				92BA216907AAF1EE00DBA913,
-				92BA216A07AAF1EE00DBA913,
-				92BA216B07AAF1EE00DBA913,
-			);
-			isa = PBXGroup;
-			path = debian;
-			refType = 4;
-			sourceTree = "<group>";
-		};
-		92BA216207AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = changelog;
-			path = os/debian/changelog;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA216307AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = compat;
-			path = os/debian/compat;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA216407AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = control;
-			path = os/debian/control;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA216507AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = copyright;
-			path = os/debian/copyright;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA216607AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = docs;
-			path = os/debian/docs;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA216707AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = menu;
-			path = os/debian/menu;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA216807AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text.script.sh;
-			name = postinst;
-			path = os/debian/postinst;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA216907AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text.script.sh;
-			name = postrm;
-			path = os/debian/postrm;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA216A07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = README.Debian;
-			path = os/debian/README.Debian;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA216B07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = rules;
-			path = os/debian/rules;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA216C07AAF1EE00DBA913 = {
-			children = (
-				92BA216D07AAF1EE00DBA913,
-				92BA216E07AAF1EE00DBA913,
-			);
-			isa = PBXGroup;
-			path = linux;
-			refType = 4;
-			sourceTree = "<group>";
-		};
-		92BA216D07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = openttd.spec;
-			path = os/linux/openttd.spec;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA216E07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = README.urpmi;
-			path = os/linux/README.urpmi;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA216F07AAF1EE00DBA913 = {
-			children = (
-				92BA217007AAF1EE00DBA913,
-				92BA217107AAF1EE00DBA913,
-				92BA217207AAF1EE00DBA913,
-				92BA217307AAF1EE00DBA913,
-				92BA217407AAF1EE00DBA913,
-				92BA217507AAF1EE00DBA913,
-				92BA217607AAF1EE00DBA913,
-			);
-			isa = PBXGroup;
-			path = macos;
-			refType = 4;
-			sourceTree = "<group>";
-		};
-		92BA217007AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = Open_Transport_Tycoon_Forum.webloc;
-			path = os/macos/Open_Transport_Tycoon_Forum.webloc;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA217107AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = Open_Transport_Tycoon_Homepage.webloc;
-			path = os/macos/Open_Transport_Tycoon_Homepage.webloc;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA217207AAF1EE00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = image.icns;
-			name = openttd.icns;
-			path = os/macos/openttd.icns;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA217307AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.java;
-			name = openttdmidi.java;
-			path = os/macos/openttdmidi.java;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA217407AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text.script.sh;
-			name = plistgen.sh;
-			path = os/macos/plistgen.sh;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA217507AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = SourceForge_OpenTTD_project_homepage.webloc;
-			path = os/macos/SourceForge_OpenTTD_project_homepage.webloc;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA217607AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text.script.sh;
-			name = track_starter;
-			path = os/macos/track_starter;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA217707AAF1EE00DBA913 = {
-			children = (
-				92BA217807AAF1EE00DBA913,
-			);
-			isa = PBXGroup;
-			path = morphos;
-			refType = 4;
-			sourceTree = "<group>";
-		};
-		92BA217807AAF1EE00DBA913 = {
-			children = (
-				92BA217907AAF1EE00DBA913,
-				92BA217A07AAF1EE00DBA913,
-				92BA217B07AAF1EE00DBA913,
-				92BA217C07AAF1EE00DBA913,
-			);
-			isa = PBXGroup;
-			path = icons;
-			refType = 4;
-			sourceTree = "<group>";
-		};
-		92BA217907AAF1EE00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = file;
-			name = docs.info;
-			path = os/morphos/icons/docs.info;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA217A07AAF1EE00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = file;
-			name = document.info;
-			path = os/morphos/icons/document.info;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA217B07AAF1EE00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = file;
-			name = drawer.info;
-			path = os/morphos/icons/drawer.info;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA217C07AAF1EE00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = file;
-			name = OpenTTD.info;
-			path = os/morphos/icons/OpenTTD.info;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA217D07AAF1EE00DBA913 = {
-			children = (
-				92BA217E07AAF1EE00DBA913,
-				92BA217F07AAF1EE00DBA913,
-				92BA218007AAF1EE00DBA913,
-			);
-			isa = PBXGroup;
-			path = os2;
-			refType = 4;
-			sourceTree = "<group>";
-		};
-		92BA217E07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = build_lang.cmd;
-			path = os/os2/build_lang.cmd;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA217F07AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = dedicated.cmd;
-			path = os/os2/dedicated.cmd;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA218007AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = openttd.wpj;
-			path = os/os2/openttd.wpj;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA218107AAF1EE00DBA913 = {
-			children = (
-				92BA218207AAF1EE00DBA913,
-			);
-			isa = PBXGroup;
-			path = win32;
-			refType = 4;
-			sourceTree = "<group>";
-		};
-		92BA218207AAF1EE00DBA913 = {
-			children = (
-				92BA218307AAF1EE00DBA913,
-				92BA218407AAF1EE00DBA913,
-				92BA218507AAF1EE00DBA913,
-				92BA218607AAF1EF00DBA913,
-				92BA218707AAF1EF00DBA913,
-			);
-			isa = PBXGroup;
-			path = installer;
-			refType = 4;
-			sourceTree = "<group>";
-		};
-		92BA218307AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = CDFinder.ini;
-			path = os/win32/installer/CDFinder.ini;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA218407AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = gpl.txt;
-			path = os/win32/installer/gpl.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA218507AAF1EE00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = install.nsi;
-			path = os/win32/installer/install.nsi;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA218607AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = InstallChoices.ini;
-			path = os/win32/installer/InstallChoices.ini;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA218707AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = "TTD to OpenTTD Transition Guide.txt";
-			path = "os/win32/installer/TTD to OpenTTD Transition Guide.txt";
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA218807AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = order_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA218907AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = order_cmd.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA218A07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = order.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA218B07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			path = openttd.tgt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA218C07AAF1EF00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = image.ico;
-			path = openttd.ico;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA218D07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = oldloader.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA218E07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = newgrf.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA218F07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = newgrf.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA219007AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = network_udp.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA219107AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = network_udp.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA219207AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = network_server.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA219307AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = network_server.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA219407AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = network_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA219507AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = network_gamelist.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA219607AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = network_gamelist.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA219707AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = network_data.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA219807AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = network_data.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA219907AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = network_core.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA219A07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = network_client.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA219B07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = network_client.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA219C07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = network.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA219D07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = network.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA219E07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = namegen.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA219F07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = music_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21A007AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = misc_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21A107AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = misc_cmd.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21A207AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = misc.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21A307AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = minilzo.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21A407AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = minilzo.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21A507AAF1EF00DBA913 = {
-			children = (
-				92BA21A607AAF1EF00DBA913,
-				92BA21A707AAF1EF00DBA913,
-				92BA21A807AAF1EF00DBA913,
-				92BA21A907AAF1EF00DBA913,
-				92BA21AA07AAF1EF00DBA913,
-				92BA21AB07AAF1EF00DBA913,
-				92BA21AC07AAF1EF00DBA913,
-				92BA21AD07AAF1EF00DBA913,
-			);
-			isa = PBXGroup;
-			path = media;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21A607AAF1EF00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = image.png;
-			name = openttd.128.png;
-			path = media/openttd.128.png;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21A707AAF1EF00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = image.png;
-			name = openttd.16.png;
-			path = media/openttd.16.png;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21A807AAF1EF00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = image.png;
-			name = openttd.256.png;
-			path = media/openttd.256.png;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21A907AAF1EF00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = image.png;
-			name = openttd.32.png;
-			path = media/openttd.32.png;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21AA07AAF1EF00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = image.png;
-			name = openttd.48.png;
-			path = media/openttd.48.png;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21AB07AAF1EF00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = image.png;
-			name = openttd.64.png;
-			path = media/openttd.64.png;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21AC07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = openttd.64.xpm;
-			path = media/openttd.64.xpm;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21AD07AAF1EF00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = file;
-			name = palette.act;
-			path = media/palette.act;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21AE07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = md5.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21AF07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = md5.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21B007AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = map.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21B107AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = map.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21B207AAF1EF00DBA913 = {
-			children = (
-				92BA21B307AAF1EF00DBA913,
-				92BA21B407AAF1EF00DBA913,
-			);
-			isa = PBXGroup;
-			path = makefiledir;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21B307AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = Makefile.config_writer;
-			path = makefiledir/Makefile.config_writer;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21B407AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = Makefile.libdetection;
-			path = makefiledir/Makefile.libdetection;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21B507AAF1EF00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = image.ico;
-			path = mainicon.ico;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21B607AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = main_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21B707AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = macros.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21B807AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = lzoconf.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21B907AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text.plist.xml;
-			path = langs.vcproj;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21BA07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			path = langs.dsp;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21BB07AAF1EF00DBA913 = {
-			children = (
-				92BA21BC07AAF1EF00DBA913,
-				92BA21BD07AAF1EF00DBA913,
-				92BA21BE07AAF1EF00DBA913,
-				92BA21BF07AAF1EF00DBA913,
-				92BA21C007AAF1EF00DBA913,
-				92BA21C107AAF1EF00DBA913,
-				92BA21C207AAF1EF00DBA913,
-				92BA21C307AAF1EF00DBA913,
-				92BA21C407AAF1EF00DBA913,
-				92BA21C507AAF1EF00DBA913,
-				92BA21C607AAF1EF00DBA913,
-				92BA21C707AAF1EF00DBA913,
-				92BA21C807AAF1EF00DBA913,
-				92BA21C907AAF1EF00DBA913,
-				92BA21CA07AAF1EF00DBA913,
-				92BA21CB07AAF1EF00DBA913,
-				92BA21CC07AAF1EF00DBA913,
-				92BA21CD07AAF1EF00DBA913,
-				92BA21CE07AAF1EF00DBA913,
-				92BA21CF07AAF1EF00DBA913,
-				92BA21D007AAF1EF00DBA913,
-				92BA21D107AAF1EF00DBA913,
-			);
-			isa = PBXGroup;
-			path = lang;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21BC07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = american.txt;
-			path = lang/american.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21BD07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = catalan.txt;
-			path = lang/catalan.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21BE07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = czech.txt;
-			path = lang/czech.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21BF07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = danish.txt;
-			path = lang/danish.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21C007AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = dutch.txt;
-			path = lang/dutch.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21C107AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = english.txt;
-			path = lang/english.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21C207AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = finnish.txt;
-			path = lang/finnish.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21C307AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = french.txt;
-			path = lang/french.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21C407AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = galician.txt;
-			path = lang/galician.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21C507AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = german.txt;
-			path = lang/german.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21C607AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = hungarian.txt;
-			path = lang/hungarian.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21C707AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = icelandic.txt;
-			path = lang/icelandic.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21C807AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = italian.txt;
-			path = lang/italian.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21C907AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = norwegian.txt;
-			path = lang/norwegian.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21CA07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = origveh.txt;
-			path = lang/origveh.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21CB07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = polish.txt;
-			path = lang/polish.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21CC07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = portuguese.txt;
-			path = lang/portuguese.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21CD07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = romanian.txt;
-			path = lang/romanian.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21CE07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = slovak.txt;
-			path = lang/slovak.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21CF07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = spanish.txt;
-			path = lang/spanish.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21D007AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = swedish.txt;
-			path = lang/swedish.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21D107AAF1EF00DBA913 = {
-			children = (
-				92BA21D207AAF1EF00DBA913,
-				92BA21D307AAF1EF00DBA913,
-				92BA21D407AAF1EF00DBA913,
-				92BA21D507AAF1EF00DBA913,
-			);
-			isa = PBXGroup;
-			path = unfinished;
-			refType = 4;
-			sourceTree = "<group>";
-		};
-		92BA21D207AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = estonian.txt;
-			path = lang/unfinished/estonian.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21D307AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = latvian.txt;
-			path = lang/unfinished/latvian.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21D407AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = russian.txt;
-			path = lang/unfinished/russian.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21D507AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = turkish.txt;
-			path = lang/unfinished/turkish.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21D607AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = landscape.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21D707AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			path = "known-bugs.txt";
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21D807AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = intro_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21D907AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = industry_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21DA07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = industry_cmd.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21DB07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = industry.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21DC07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = hal.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21DD07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = gui.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21DE07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = graph_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21DF07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = gfx.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21E007AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = gfx.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21E107AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = functions.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21E207AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = fileio.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21E307AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = fileio.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21E407AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = extmidi.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21E507AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = engine_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21E607AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = engine.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21E707AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = engine.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21E807AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = endian_check.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21E907AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = economy.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21EA07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = economy.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21EB07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = dummy_land.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21EC07AAF1EF00DBA913 = {
-			children = (
-				92BA21ED07AAF1EF00DBA913,
-				92BA21EE07AAF1EF00DBA913,
-				92BA21EF07AAF1EF00DBA913,
-				92BA21F007AAF1EF00DBA913,
-				92BA21F107AAF1EF00DBA913,
-				92BA21F207AAF1EF00DBA913,
-				92BA21F307AAF1EF00DBA913,
-				92BA21F407AAF1EF00DBA913,
-				92BA21F507AAF1EF00DBA913,
-				92BA21F607AAF1EF00DBA913,
-				92BA21F707AAF1EF00DBA913,
-				92BA21F807AAF1EF00DBA913,
-				92BA21F907AAF1EF00DBA913,
-				92BA21FA07AAF1EF00DBA913,
-				92BA21FB07AAF1EF00DBA913,
-			);
-			isa = PBXGroup;
-			path = docs;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21ED07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = console.txt;
-			path = docs/console.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21EE07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = directmusic.txt;
-			path = docs/directmusic.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21EF07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = Howto_compile_lng_files_from_CLI.txt;
-			path = docs/Howto_compile_lng_files_from_CLI.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21F007AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text.html;
-			name = landscape.html;
-			path = docs/landscape.html;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21F107AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = Manual.txt;
-			path = docs/Manual.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21F207AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = multiplayer.txt;
-			path = docs/multiplayer.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21F307AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = openttd.6;
-			path = docs/openttd.6;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21F407AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = OSX_where_did_the_package_go.txt;
-			path = docs/OSX_where_did_the_package_go.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21F507AAF1EF00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = image.gif;
-			name = "ottd-colour-palette.gif";
-			path = "docs/ottd-colour-palette.gif";
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21F607AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = README_if_game_crashed_on_OSX.txt;
-			path = docs/README_if_game_crashed_on_OSX.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21F707AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = Readme_Mandrake_Linux.txt;
-			path = docs/Readme_Mandrake_Linux.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21F807AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = Readme_OS2.txt;
-			path = docs/Readme_OS2.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21F907AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = Readme_Windows_MSVC6.0.txt;
-			path = docs/Readme_Windows_MSVC6.0.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21FA07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			name = textcolor.txt;
-			path = docs/textcolor.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21FB07AAF1EF00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = image.png;
-			name = tileh.png;
-			path = docs/tileh.png;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21FC07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = dock_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21FD07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = disaster_cmd.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21FE07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = dedicated.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA21FF07AAF1EF00DBA913 = {
-			children = (
-				92BA220007AAF1EF00DBA913,
-				92BA220107AAF1EF00DBA913,
-				92BA220207AAF1EF00DBA913,
-				92BA220307AAF1EF00DBA913,
-				92BA220407AAF1EF00DBA913,
-				92BA220507AAF1EF00DBA913,
-				92BA220607AAF1EF00DBA913,
-				92BA220707AAF1EF00DBA913,
-				92BA220807AAF1EF00DBA913,
-				92BA220907AAF1EF00DBA913,
-				92BA220A07AAF1EF00DBA913,
-				92BA220B07AAF1EF00DBA913,
-			);
-			isa = PBXGroup;
-			path = data;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA220007AAF1EF00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = file;
-			name = autorail.grf;
-			path = data/autorail.grf;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA220107AAF1EF00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = file;
-			name = canalsw.grf;
-			path = data/canalsw.grf;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA220207AAF1EF00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = file;
-			name = openttd.grf;
-			path = data/openttd.grf;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA220307AAF1EF00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = file;
-			name = opntitle.dat;
-			path = data/opntitle.dat;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA220407AAF1EF00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = file;
-			name = sample.cat;
-			path = data/sample.cat;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA220507AAF1EF00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = file;
-			name = signalsw.grf;
-			path = data/signalsw.grf;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA220607AAF1EF00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = file;
-			name = trg1r.grf;
-			path = data/trg1r.grf;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA220707AAF1EF00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = file;
-			name = trgcr.grf;
-			path = data/trgcr.grf;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA220807AAF1EF00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = file;
-			name = trghr.grf;
-			path = data/trghr.grf;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA220907AAF1EF00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = file;
-			name = trgir.grf;
-			path = data/trgir.grf;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA220A07AAF1EF00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = file;
-			name = trgtr.grf;
-			path = data/trgtr.grf;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA220B07AAF1EF00DBA913 = {
-			isa = PBXFileReference;
-			lastKnownFileType = file;
-			name = trkfoundw.grf;
-			path = data/trkfoundw.grf;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA220C07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			path = COPYING;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA220D07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = console_cmds.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA220E07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = command.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA220F07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = command.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA221007AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = clear_cmd.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA221107AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = text;
-			path = changelog.txt;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA221207AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = callback_table.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA221307AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = callback_table.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA221407AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = bridge_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA221507AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = aystar.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA221607AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = aystar.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA221707AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = airport_movement.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA221807AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = airport_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA221907AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = airport.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA221A07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = airport.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA221B07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = aircraft_gui.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA221C07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = aircraft_cmd.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA221D07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = ai_shared.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA221E07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = ai_pathfinder.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA221F07AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = ai_new.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA222007AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = ai_build.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA222107AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.h;
-			path = ai_new.h;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA222207AAF1EF00DBA913 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			lastKnownFileType = sourcecode.c.c;
-			path = ai_old.c;
-			refType = 2;
-			sourceTree = SOURCE_ROOT;
-		};
-		92BA222C07AAF30200DBA913 = {
-			buildArgumentsString = "$(ACTION) OSX=1 STATIC=1 DEBUG=1";
-			buildPhases = (
-			);
-			buildSettings = {
-				C_INCLUDE_PATH = "/sw/include:/sw/include/SDL";
-				OTHER_LDFLAGS = "";
-				OTHER_REZFLAGS = "";
-				PATH = "/sw/bin:/sw/sbin:/bin:/sbin:/usr/bin:/usr/sbin";
-				PRODUCT_NAME = openttd;
-				SECTORDER_FLAGS = "";
-				WARNING_CFLAGS = "";
-			};
-			buildToolPath = /usr/bin/make;
-			buildWorkingDirectory = "";
-			dependencies = (
-			);
-			isa = PBXLegacyTarget;
-			name = openttd;
-			passBuildSettingsInEnvironment = 1;
-			productName = open;
-		};
-//920
-//921
-//922
-//923
-//924
-//C60
-//C61
-//C62
-//C63
-//C64
-		C6A0FF2B0290797F04C91782 = {
-			children = (
-			);
-			isa = PBXGroup;
-			name = Documentation;
-			refType = 4;
-			sourceTree = "<group>";
-		};
-	};
-	rootObject = 08FB7793FE84155DC02AAC07;
-}
--- a/projects/openttd_vs80.vcproj	Fri May 04 23:17:26 2007 +0000
+++ b/projects/openttd_vs80.vcproj	Wed May 09 20:22:49 2007 +0000
@@ -920,6 +920,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\newgrf_canal.h"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\newgrf_cargo.h"
 				>
 			</File>
@@ -1784,6 +1788,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\newgrf_canal.cpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\newgrf_cargo.cpp"
 				>
 			</File>
--- a/source.list	Fri May 04 23:17:26 2007 +0000
+++ b/source.list	Wed May 09 20:22:49 2007 +0000
@@ -140,6 +140,7 @@
 network/network_udp.h
 newgrf.h
 newgrf_callbacks.h
+newgrf_canal.h
 newgrf_cargo.h
 newgrf_config.h
 newgrf_engine.h
@@ -371,6 +372,7 @@
 
 # NewGRF
 newgrf.cpp
+newgrf_canal.cpp
 newgrf_cargo.cpp
 newgrf_config.cpp
 newgrf_engine.cpp
--- a/src/ai/api/ai_road.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/ai/api/ai_road.cpp	Wed May 09 20:22:49 2007 +0000
@@ -10,7 +10,7 @@
 bool AIRoad::IsRoadTile(TileIndex tile)
 {
 	/* Outside of the map */
-	if (tile >= _map_size) return false;
+	if (tile >= ::MapSize()) return false;
 
 	return (::IsTileType(tile, MP_STREET) && ::GetRoadTileType(tile) != ROAD_TILE_DEPOT) ||
 			this->IsDriveThroughRoadStationTile(tile);
@@ -19,7 +19,7 @@
 bool AIRoad::IsRoadDepotTile(TileIndex tile)
 {
 	/* Outside of the map */
-	if (tile >= _map_size) return false;
+	if (tile >= ::MapSize()) return false;
 
 	return ::IsTileType(tile, MP_STREET) && ::GetRoadTileType(tile) == ROAD_TILE_DEPOT;
 }
@@ -27,7 +27,7 @@
 bool AIRoad::IsRoadStationTile(TileIndex tile)
 {
 	/* Outside of the map */
-	if (tile >= _map_size) return false;
+	if (tile >= ::MapSize()) return false;
 
 	return ::IsRoadStopTile(tile);
 }
@@ -35,7 +35,7 @@
 bool AIRoad::IsDriveThroughRoadStationTile(TileIndex tile)
 {
 	/* Outside of the map */
-	if (tile >= _map_size) return false;
+	if (tile >= ::MapSize()) return false;
 
 	return ::IsDriveThroughStopTile(tile);
 }
@@ -43,7 +43,7 @@
 bool AIRoad::AreRoadTilesConnected(TileIndex t1, TileIndex t2)
 {
 	/* Outside of the map */
-	if (t1 >= _map_size || t2 >= _map_size) return false;
+	if (t1 >= ::MapSize() || t2 >= ::MapSize()) return false;
 
 	/* Tiles not neighbouring */
 	if ((abs((int)::TileX(t1) - (int)::TileX(t2)) + abs((int)::TileY(t1) - (int)::TileY(t2))) != 1) return false;
@@ -60,7 +60,7 @@
 int32 AIRoad::GetNeighbourRoadCount(TileIndex tile)
 {
 	/* Outside of the map */
-	if (tile >= _map_size) return false;
+	if (tile >= ::MapSize()) return false;
 
 	int32 neighbour = 0;
 
@@ -96,7 +96,7 @@
 bool AIRoad::BuildRoad(TileIndex start, TileIndex end)
 {
 	/* Outside of the map */
-	if (start >= _map_size || end >= _map_size || start == end) return false;
+	if (start >= ::MapSize() || end >= ::MapSize() || start == end) return false;
 	/* Not on one line */
 	if (TileX(start) != TileX(end) &&
 			TileY(start) != TileY(end)) return false;
@@ -107,7 +107,7 @@
 bool AIRoad::BuildRoadDepot(TileIndex tile, TileIndex front)
 {
 	/* Outside of the map */
-	if (tile >= _map_size || tile == front) return false;
+	if (tile >= ::MapSize() || tile == front) return false;
 
 	uint entrance_dir = (TileX(tile) == TileX(front)) ? (TileY(tile) < TileY(front) ? 1 : 3) : (TileX(tile) < TileX(front) ? 2 : 0);
 
@@ -117,7 +117,7 @@
 bool AIRoad::BuildRoadStation(TileIndex tile, TileIndex front, bool truck, bool drive_through)
 {
 	/* Outside of the map */
-	if (tile >= _map_size || tile == front) return false;
+	if (tile >= ::MapSize() || tile == front) return false;
 
 	uint entrance_dir;
 	if (drive_through) {
@@ -132,7 +132,7 @@
 bool AIRoad::RemoveRoad(TileIndex start, TileIndex end)
 {
 	/* Outside of the map */
-	if (start >= _map_size || end >= _map_size) return false;
+	if (start >= ::MapSize() || end >= ::MapSize()) return false;
 	/* Not on one line */
 	if (TileX(start) != TileX(end) &&
 			TileY(start) != TileY(end)) return false;
@@ -143,7 +143,7 @@
 bool AIRoad::RemoveRoadDepot(TileIndex tile)
 {
 	/* Outside of the map */
-	if (tile >= _map_size) return false;
+	if (tile >= ::MapSize()) return false;
 
 	/* Not a road depot tile */
 	if (!IsTileType(tile, MP_STREET) || GetRoadTileType(tile) != ROAD_TILE_DEPOT) return false;
@@ -154,7 +154,7 @@
 bool AIRoad::RemoveRoadStation(TileIndex tile)
 {
 	/* Outside of the map */
-	if (tile >= _map_size) return false;
+	if (tile >= ::MapSize()) return false;
 
 	/* Not a road station tile */
 	if (!IsTileType(tile, MP_STATION) || !IsRoadStop(tile)) return false;
--- a/src/ai/api/ai_tile.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/ai/api/ai_tile.cpp	Wed May 09 20:22:49 2007 +0000
@@ -10,7 +10,7 @@
 bool AITile::IsBuildable(TileIndex tile)
 {
 	/* Outside of the map */
-	if (tile >= _map_size) return false;
+	if (tile >= ::MapSize()) return false;
 
 	switch (::GetTileType(tile)) {
 		default: return 1;
@@ -25,7 +25,7 @@
 int32 AITile::GetSlope(TileIndex tile)
 {
 	/* Outside of the map */
-	if (tile >= _map_size) return 0;
+	if (tile >= ::MapSize()) return 0;
 
 	return GetTileSlope(tile, NULL);
 }
@@ -33,7 +33,7 @@
 int32 AITile::GetCargoAcceptance(TileIndex tile, CargoID cargo_type)
 {
 	/* Outside of the map */
-	if (tile >= _map_size) return false;
+	if (tile >= ::MapSize()) return false;
 
 	/* TODO -- Make it an enum via constructor, for now it assumes RoadVehicle Station */
 	uint rad = 3;
--- a/src/aircraft.h	Fri May 04 23:17:26 2007 +0000
+++ b/src/aircraft.h	Wed May 09 20:22:49 2007 +0000
@@ -115,4 +115,26 @@
  */
 void UpdateAircraftCache(Vehicle *v);
 
+/**
+ * This class 'wraps' Vehicle; you do not actually instantiate this class.
+ * You create a Vehicle using AllocateVehicle, so it is added to the pool
+ * and you reinitialize that to a Train using:
+ *   v = new (v) Aircraft();
+ *
+ * As side-effect the vehicle type is set correctly.
+ */
+struct Aircraft : public Vehicle {
+	/** Initializes the Vehicle to an aircraft */
+	Aircraft() { this->type = VEH_AIRCRAFT; }
+
+	/** We want to 'destruct' the right class. */
+	virtual ~Aircraft() {}
+
+	const char *GetTypeString() const { return "aircraft"; }
+	void MarkDirty();
+	void UpdateDeltaXY(Direction direction);
+	ExpensesType GetExpenseType(bool income) const { return income ? EXPENSES_AIRCRAFT_INC : EXPENSES_AIRCRAFT_RUN; }
+	WindowClass GetVehicleListWindowClass() const { return WC_AIRCRAFT_LIST; }
+};
+
 #endif /* AIRCRAFT_H */
--- a/src/aircraft_cmd.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/aircraft_cmd.cpp	Wed May 09 20:22:49 2007 +0000
@@ -33,6 +33,35 @@
 #include "spritecache.h"
 #include "cargotype.h"
 
+void Aircraft::UpdateDeltaXY(Direction direction)
+{
+	uint32 x;
+#define MKIT(a, b, c, d) ((a & 0xFF) << 24) | ((b & 0xFF) << 16) | ((c & 0xFF) << 8) | ((d & 0xFF) << 0)
+	switch (this->subtype) {
+		default: NOT_REACHED();
+		case AIR_AIRCRAFT:
+		case AIR_HELICOPTER:
+			switch (this->u.air.state) {
+				case ENDTAKEOFF:
+				case LANDING:
+				case HELILANDING:
+				case FLYING:     x = MKIT(24, 24, -1, -1); break;
+				default:         x = MKIT( 2,  2, -1, -1); break;
+			}
+			this->z_height = 5;
+			break;
+		case AIR_SHADOW:     this->z_height = 1; x = MKIT(2,  2,  0,  0); break;
+		case AIR_ROTOR:      this->z_height = 1; x = MKIT(2,  2, -1, -1); break;
+	}
+#undef MKIT
+
+	this->x_offs        = GB(x,  0, 8);
+	this->y_offs        = GB(x,  8, 8);
+	this->sprite_width  = GB(x, 16, 8);
+	this->sprite_height = GB(x, 24, 8);
+}
+
+
 /** this maps the terminal to its corresponding state and block flag
  *  currently set for 10 terms, 4 helipads */
 static const byte _airport_terminal_state[] = {2, 3, 4, 5, 6, 7, 19, 20, 0, 0, 8, 9, 21, 22};
@@ -198,9 +227,9 @@
 	height = spr->height;
 }
 
-static int32 EstimateAircraftCost(const AircraftVehicleInfo *avi)
+static int32 EstimateAircraftCost(EngineID engine, const AircraftVehicleInfo *avi)
 {
-	return avi->base_cost * (_price.aircraft_base >> 3) >> 5;
+	return GetEngineProperty(engine, 0x0B, avi->base_cost) * (_price.aircraft_base >> 3) >> 5;
 }
 
 
@@ -241,7 +270,7 @@
 	if (!IsEngineBuildable(p1, VEH_AIRCRAFT, _current_player)) return_cmd_error(STR_AIRCRAFT_NOT_AVAILABLE);
 
 	const AircraftVehicleInfo *avi = AircraftVehInfo(p1);
-	int32 value = EstimateAircraftCost(avi);
+	int32 value = EstimateAircraftCost(p1, avi);
 
 	/* to just query the cost, it is not neccessary to have a valid tile (automation/AI) */
 	if (flags & DC_QUERY_COST) return value;
@@ -269,7 +298,8 @@
 		Vehicle *u = vl[1]; // shadow
 
 		v->unitnumber = unit_num;
-		v->type = u->type = VEH_AIRCRAFT;
+		v = new (v) Aircraft();
+		u = new (u) Aircraft();
 		v->direction = DIR_SE;
 
 		v->owner = u->owner = _current_player;
@@ -286,15 +316,8 @@
 		u->z_pos = GetSlopeZ(x, y);
 		v->z_pos = u->z_pos + 1;
 
-		v->x_offs = v->y_offs = -1;
 //		u->delta_x = u->delta_y = 0;
 
-		v->sprite_width = v->sprite_height = 2;
-		v->z_height = 5;
-
-		u->sprite_width = u->sprite_height = 2;
-		u->z_height = 1;
-
 		v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
 		u->vehstatus = VS_HIDDEN | VS_UNCLICKABLE | VS_SHADOW;
 
@@ -322,9 +345,11 @@
 		v->engine_type = p1;
 
 		v->subtype = (avi->subtype & AIR_CTOL ? AIR_AIRCRAFT : AIR_HELICOPTER);
+		v->UpdateDeltaXY(INVALID_DIR);
 		v->value = value;
 
 		u->subtype = AIR_SHADOW;
+		u->UpdateDeltaXY(INVALID_DIR);
 
 		/* Danger, Will Robinson!
 		 * If the aircraft is refittable, but cannot be refitted to
@@ -404,15 +429,12 @@
 
 			u->next = w;
 
-			w->type = VEH_AIRCRAFT;
+			w = new (w) Aircraft();
 			w->direction = DIR_N;
 			w->owner = _current_player;
 			w->x_pos = v->x_pos;
 			w->y_pos = v->y_pos;
 			w->z_pos = v->z_pos + 5;
-			w->x_offs = w->y_offs = -1;
-			w->sprite_width = w->sprite_height = 2;
-			w->z_height = 1;
 			w->vehstatus = VS_HIDDEN | VS_UNCLICKABLE;
 			w->spritenum = 0xFF;
 			w->subtype = AIR_ROTOR;
@@ -420,6 +442,7 @@
 			w->random_bits = VehicleRandomBits();
 			/* Use rotor's air.state to store the rotor animation frame */
 			w->u.air.state = HRS_ROTOR_STOPPED;
+			w->UpdateDeltaXY(INVALID_DIR);
 			VehiclePositionChanged(w);
 		}
 
@@ -597,6 +620,7 @@
  * @param p2 various bitstuffed elements
  * - p2 = (bit 0-7) - the new cargo type to refit to
  * - p2 = (bit 8-15) - the new cargo subtype to refit to
+ * - p2 = (bit 16) - refit only this vehicle (ignored)
  * @return cost of refit or error
  */
 int32 CmdRefitAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
@@ -1067,6 +1091,7 @@
 				 * helicopter will circle until sign disappears, then go to next order
 				 * what to do when it is the only order left, right now it just stays in 1 place */
 				v->u.air.state = FLYING;
+				UpdateAircraftCache(v);
 				AircraftNextAirportPos_and_Order(v);
 				return false;
 			}
@@ -1181,6 +1206,7 @@
 			if (st->airport_tile == 0) {
 				/* Airport has been removed, abort the landing procedure */
 				v->u.air.state = FLYING;
+				UpdateAircraftCache(v);
 				AircraftNextAirportPos_and_Order(v);
 				/* get aircraft back on running altitude */
 				SetAircraftPosition(v, gp.x, gp.y, GetAircraftFlyingAltitude(v));
@@ -1383,50 +1409,11 @@
 	InvalidateWindowClasses(WC_AIRCRAFT_LIST);
 }
 
-/** Mark all views dirty for an aircraft.
- * @param v vehicle to be redrawn.
- */
-static void MarkAircraftDirty(Vehicle *v)
-{
-		v->cur_image = GetAircraftImage(v, v->direction);
-		if (v->subtype == AIR_HELICOPTER) v->next->next->cur_image = GetRotorImage(v);
-		MarkAllViewportsDirty(v->left_coord, v->top_coord, v->right_coord + 1, v->bottom_coord + 1);
-}
-
-static void HandleAircraftLoading(Vehicle *v, int mode)
+void Aircraft::MarkDirty()
 {
-	switch (v->current_order.type) {
-		case OT_LOADING: {
-			if (mode != 0) return;
-			if (--v->load_unload_time_rem != 0) return;
-
-			if (CanFillVehicle(v) && (
-						v->current_order.flags & OF_FULL_LOAD ||
-						(_patches.gradual_loading && !HASBIT(v->vehicle_flags, VF_LOADING_FINISHED))
-					)) {
-				SET_EXPENSES_TYPE(EXPENSES_AIRCRAFT_INC);
-				if (LoadUnloadVehicle(v, false)) {
-					InvalidateWindow(WC_AIRCRAFT_LIST, v->owner);
-					MarkAircraftDirty(v);
-				}
-				return;
-			}
-
-			Order b = v->current_order;
-			v->LeaveStation();
-			v->current_order.Free();
-			MarkAircraftDirty(v);
-			if (!(b.flags & OF_NON_STOP)) return;
-			break;
-		}
-
-		case OT_DUMMY: break;
-
-		default: return;
-	}
-
-	v->cur_order_index++;
-	InvalidateVehicleOrder(v);
+		this->cur_image = GetAircraftImage(this, this->direction);
+		if (this->subtype == AIR_HELICOPTER) this->next->next->cur_image = GetRotorImage(this);
+		MarkAllViewportsDirty(this->left_coord, this->top_coord, this->right_coord + 1, this->bottom_coord + 1);
 }
 
 static void CrashAirplane(Vehicle *v)
@@ -1508,31 +1495,13 @@
 			0);
 	}
 
-	Order old_order = v->current_order;
 	v->BeginLoading();
-	v->current_order.flags = 0;
-
-	if (old_order.type == OT_GOTO_STATION &&
-			v->current_order.dest == v->last_station_visited) {
-		v->current_order.flags =
-			(old_order.flags & (OF_FULL_LOAD | OF_UNLOAD | OF_TRANSFER)) | OF_NON_STOP;
-	}
-
-	SET_EXPENSES_TYPE(EXPENSES_AIRCRAFT_INC);
-	LoadUnloadVehicle(v, true);
-	MarkAircraftDirty(v);
-	InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
-	InvalidateWindowClasses(WC_AIRCRAFT_LIST);
-}
-
-static void AircraftLand(Vehicle *v)
-{
-	v->sprite_width = v->sprite_height = 2;
 }
 
 static void AircraftLandAirplane(Vehicle *v)
 {
-	AircraftLand(v);
+	v->UpdateDeltaXY(INVALID_DIR);
+
 	if (!PlayVehicleSound(v, VSE_TOUCHDOWN)) {
 		SndPlayVehicleFx(SND_17_SKID_PLANE, v);
 	}
@@ -1691,8 +1660,8 @@
 
 static void AircraftEventHandler_StartTakeOff(Vehicle *v, const AirportFTAClass *apc)
 {
-	v->sprite_width = v->sprite_height = 24; // ??? no idea what this is
 	v->u.air.state = ENDTAKEOFF;
+	v->UpdateDeltaXY(INVALID_DIR);
 }
 
 static void AircraftEventHandler_EndTakeOff(Vehicle *v, const AirportFTAClass *apc)
@@ -1705,8 +1674,9 @@
 static void AircraftEventHandler_HeliTakeOff(Vehicle *v, const AirportFTAClass *apc)
 {
 	const Player* p = GetPlayer(v->owner);
-	v->sprite_width = v->sprite_height = 24; // ??? no idea what this is
 	v->u.air.state = FLYING;
+	v->UpdateDeltaXY(INVALID_DIR);
+
 	/* get the next position to go to, differs per airport */
 	AircraftNextAirportPos_and_Order(v);
 
@@ -1764,8 +1734,9 @@
 
 static void AircraftEventHandler_Landing(Vehicle *v, const AirportFTAClass *apc)
 {
+	v->u.air.state = ENDLANDING;
 	AircraftLandAirplane(v);  // maybe crash airplane
-	v->u.air.state = ENDLANDING;
+
 	/* check if the aircraft needs to be replaced or renewed and send it to a hangar if needed */
 	if (v->current_order.type != OT_GOTO_DEPOT && v->owner == _local_player) {
 		/* only the vehicle owner needs to calculate the rest (locally) */
@@ -1782,8 +1753,8 @@
 
 static void AircraftEventHandler_HeliLanding(Vehicle *v, const AirportFTAClass *apc)
 {
-	AircraftLand(v); // helicopters don't crash
 	v->u.air.state = HELIENDLANDING;
+	v->UpdateDeltaXY(INVALID_DIR);
 }
 
 static void AircraftEventHandler_EndLanding(Vehicle *v, const AirportFTAClass *apc)
@@ -1884,7 +1855,7 @@
 		byte prev_state = v->u.air.state;
 		_aircraft_state_handlers[v->u.air.state](v, apc);
 		if (v->u.air.state != FLYING) v->u.air.previous_pos = prev_pos;
-		if (v->u.air.state != prev_state) UpdateAircraftCache(v);
+		if (v->u.air.state != prev_state || v->u.air.pos != prev_pos) UpdateAircraftCache(v);
 		return true;
 	}
 
@@ -1894,6 +1865,7 @@
 	if (current->next == NULL) {
 		if (AirportSetBlocks(v, current, apc)) {
 			v->u.air.pos = current->next_position;
+			UpdateAircraftCache(v);
 		} // move to next position
 		return false;
 	}
@@ -1904,6 +1876,7 @@
 		if (v->u.air.state == current->heading || current->heading == TO_ALL) {
 			if (AirportSetBlocks(v, current, apc)) {
 				v->u.air.pos = current->next_position;
+				UpdateAircraftCache(v);
 			} // move to next position
 			return false;
 		}
@@ -2131,7 +2104,7 @@
 
 	HandleAircraftSmoke(v);
 	ProcessAircraftOrder(v);
-	HandleAircraftLoading(v, loop);
+	v->HandleLoading(loop != 0);
 
 	if (v->current_order.type >= OT_LOADING) return;
 
@@ -2208,6 +2181,7 @@
 				if (v->u.air.state >= FLYING) { // circle around
 					v->u.air.pos = v->u.air.previous_pos = AircraftGetEntryPoint(v, ap);
 					v->u.air.state = FLYING;
+					UpdateAircraftCache(v);
 					/* landing plane needs to be reset to flying height (only if in pause mode upgrade,
 					 * in normal mode, plane is reset in AircraftController. It doesn't hurt for FLYING */
 					GetNewVehiclePosResult gp = GetNewVehiclePos(v);
@@ -2221,6 +2195,7 @@
 					for (uint cnt = 0; cnt < ap->nofelements; cnt++) {
 						if (ap->layout[cnt].heading == takeofftype) {
 							v->u.air.pos = ap->layout[cnt].position;
+							UpdateAircraftCache(v);
 							break;
 						}
 					}
--- a/src/airport_movement.h	Fri May 04 23:17:26 2007 +0000
+++ b/src/airport_movement.h	Wed May 09 20:22:49 2007 +0000
@@ -276,7 +276,7 @@
 	{  136,   96, AMED_HELI_LOWER,                 {DIR_N} }, // 56 Land in front of hangar2
 	{  126,  104, 0,                               {DIR_SE} }, // 57 Outway 2
 	{  136,  136, 0,                               {DIR_NE} }, // 58 Airport OUTWAY 2
-	{  136,  152, AMED_EXACTPOS,                   {DIR_SW} }, // 59 Accelerate to end of runway2
+	{  136,  152, AMED_EXACTPOS,                   {DIR_NE} }, // 59 Accelerate to end of runway2
 	{   16,  152, AMED_NOSPDCLAMP,                 {DIR_N} }, // 60 Release control of runway2, for smoother movement
 	{   20,  152, AMED_NOSPDCLAMP,                 {DIR_N} }, // 61 End of runway2
 	{  -56,  152, AMED_NOSPDCLAMP | AMED_TAKEOFF,  {DIR_N} }, // 62 Take off2
--- a/src/autoreplace_cmd.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/autoreplace_cmd.cpp	Wed May 09 20:22:49 2007 +0000
@@ -196,6 +196,7 @@
 			new_v->service_interval = old_v->service_interval;
 			new_front = true;
 			new_v->unitnumber = old_v->unitnumber; // use the same unit number
+			new_v->dest_tile  = old_v->dest_tile;
 
 			new_v->current_order = old_v->current_order;
 			if (old_v->type == VEH_TRAIN && GetNextVehicle(old_v) != NULL){
--- a/src/build_vehicle_gui.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/build_vehicle_gui.cpp	Wed May 09 20:22:49 2007 +0000
@@ -379,21 +379,25 @@
 static int DrawRailWagonPurchaseInfo(int x, int y, EngineID engine_number, const RailVehicleInfo *rvi)
 {
 	/* Purchase cost */
-	SetDParam(0, (rvi->base_cost * _price.build_railwagon) >> 8);
+	SetDParam(0, (GetEngineProperty(engine_number, 0x17, rvi->base_cost) * _price.build_railwagon) >> 8);
 	DrawString(x, y, STR_PURCHASE_INFO_COST, 0);
 	y += 10;
 
 	/* Wagon weight - (including cargo) */
-	SetDParam(0, rvi->weight);
-	SetDParam(1, (GetCargo(rvi->cargo_type)->weight * rvi->capacity >> 4) + rvi->weight);
+	uint weight = GetEngineProperty(engine_number, 0x16, rvi->weight);
+	SetDParam(0, weight);
+	SetDParam(1, (GetCargo(rvi->cargo_type)->weight * rvi->capacity >> 4) + weight);
 	DrawString(x, y, STR_PURCHASE_INFO_WEIGHT_CWEIGHT, 0);
 	y += 10;
 
 	/* Wagon speed limit, displayed if above zero */
-	if (rvi->max_speed > 0 && _patches.wagon_speed_limits) {
-		SetDParam(0, rvi->max_speed * 10 / 16);
-		DrawString(x, y, STR_PURCHASE_INFO_SPEED, 0);
-		y += 10;
+	if (_patches.wagon_speed_limits) {
+		uint max_speed = GetEngineProperty(engine_number, 0x09, rvi->max_speed);
+		if (max_speed > 0) {
+			SetDParam(0, max_speed * 10 / 16);
+			DrawString(x, y, STR_PURCHASE_INFO_SPEED, 0);
+			y += 10;
+		}
 	}
 	return y;
 }
@@ -402,22 +406,23 @@
 static int DrawRailEnginePurchaseInfo(int x, int y, EngineID engine_number, const RailVehicleInfo *rvi)
 {
 	int multihead = (rvi->railveh_type == RAILVEH_MULTIHEAD ? 1 : 0);
+	uint weight = GetEngineProperty(engine_number, 0x16, rvi->weight);
 
 	/* Purchase Cost - Engine weight */
-	SetDParam(0, rvi->base_cost * (_price.build_railvehicle >> 3) >> 5);
-	SetDParam(1, rvi->weight << multihead);
+	SetDParam(0, GetEngineProperty(engine_number, 0x17, rvi->base_cost) * (_price.build_railvehicle >> 3) >> 5);
+	SetDParam(1, weight << multihead);
 	DrawString(x, y, STR_PURCHASE_INFO_COST_WEIGHT, 0);
 	y += 10;
 
 	/* Max speed - Engine power */
-	SetDParam(0, rvi->max_speed * 10 / 16);
-	SetDParam(1, rvi->power << multihead);
+	SetDParam(0, GetEngineProperty(engine_number, 0x09, rvi->max_speed) * 10 / 16);
+	SetDParam(1, GetEngineProperty(engine_number, 0x0B, rvi->power) << multihead);
 	DrawString(x, y, STR_PURCHASE_INFO_SPEED_POWER, 0);
 	y += 10;
 
 	/* Max tractive effort - not applicable if old acceleration or maglev */
 	if (_patches.realistic_acceleration && rvi->railtype != RAILTYPE_MAGLEV) {
-		SetDParam(0, ((rvi->weight << multihead) * 10 * rvi->tractive_effort) / 256);
+		SetDParam(0, ((weight << multihead) * 10 * GetEngineProperty(engine_number, 0x1F, rvi->tractive_effort)) / 256);
 		DrawString(x, y, STR_PURCHASE_INFO_MAX_TE, 0);
 		y += 10;
 	}
@@ -444,7 +449,7 @@
 	bool refittable = (_engine_info[engine_number].refit_mask != 0);
 
 	/* Purchase cost - Max speed */
-	SetDParam(0, rvi->base_cost * (_price.roadveh_base >> 3) >> 5);
+	SetDParam(0, GetEngineProperty(engine_number, 0x11, rvi->base_cost) * (_price.roadveh_base >> 3) >> 5);
 	SetDParam(1, rvi->max_speed * 10 / 32);
 	DrawString(x, y, STR_PURCHASE_INFO_COST_SPEED, 0);
 	y += 10;
@@ -468,8 +473,8 @@
 static int DrawShipPurchaseInfo(int x, int y, EngineID engine_number, const ShipVehicleInfo *svi)
 {
 	/* Purchase cost - Max speed */
-	SetDParam(0, svi->base_cost * (_price.ship_base >> 3) >> 5);
-	SetDParam(1, svi->max_speed * 10 / 32);
+	SetDParam(0, GetEngineProperty(engine_number, 0x0A, svi->base_cost) * (_price.ship_base >> 3) >> 5);
+	SetDParam(1, GetEngineProperty(engine_number, 0x0B, svi->max_speed) * 10 / 32);
 	DrawString(x, y, STR_PURCHASE_INFO_COST_SPEED, 0);
 	y += 10;
 
@@ -481,7 +486,7 @@
 	y += 10;
 
 	/* Running cost */
-	SetDParam(0, GetEngineProperty(engine_number, 0x0B, svi->running_cost) * _price.ship_running >> 8);
+	SetDParam(0, GetEngineProperty(engine_number, 0x0F, svi->running_cost) * _price.ship_running >> 8);
 	DrawString(x, y, STR_PURCHASE_INFO_RUNNINGCOST, 0);
 	y += 10;
 
@@ -494,7 +499,7 @@
 	CargoID cargo;
 
 	/* Purchase cost - Max speed */
-	SetDParam(0, avi->base_cost * (_price.aircraft_base >> 3) >> 5);
+	SetDParam(0, GetEngineProperty(engine_number, 0x0B, avi->base_cost) * (_price.aircraft_base >> 3) >> 5);
 	SetDParam(1, avi->max_speed * 10 / 16);
 	DrawString(x, y, STR_PURCHASE_INFO_COST_SPEED, 0);
 	y += 10;
--- a/src/command.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/command.cpp	Wed May 09 20:22:49 2007 +0000
@@ -456,13 +456,17 @@
 	 * restrictions which may cause the test run to fail (the previous
 	 * road fragments still stay there and the town won't let you
 	 * disconnect the road system), but the exec will succeed and this
-	 * fact will trigger an assertion failure. --pasky */
+	 * fact will trigger an assertion failure. --pasky
+	 * CMD_CLONE_VEHICLE: Both building new vehicles and refitting them can be
+	 * influenced by newgrf callbacks, which makes it impossible to accurately
+	 * estimate the cost of cloning a vehicle. */
 	notest =
 		(cmd & 0xFF) == CMD_CLEAR_AREA ||
 		(cmd & 0xFF) == CMD_CONVERT_RAIL ||
 		(cmd & 0xFF) == CMD_LEVEL_LAND ||
 		(cmd & 0xFF) == CMD_REMOVE_ROAD ||
-		(cmd & 0xFF) == CMD_REMOVE_LONG_ROAD;
+		(cmd & 0xFF) == CMD_REMOVE_LONG_ROAD ||
+		(cmd & 0xFF) == CMD_CLONE_VEHICLE;
 
 	_docommand_recursive = 1;
 
--- a/src/console_cmds.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/console_cmds.cpp	Wed May 09 20:22:49 2007 +0000
@@ -142,8 +142,6 @@
 	FOR_ALL_VEHICLES(v) {
 		/* Code ripped from CmdStartStopTrain. Can't call it, because of
 		 * ownership problems, so we'll duplicate some code, for now */
-		if (v->type == VEH_TRAIN)
-			v->u.rail.days_since_order_progr = 0;
 		v->vehstatus |= VS_STOPPED;
 		InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 		InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
@@ -1234,13 +1232,16 @@
 
 		if (!p->is_active) continue;
 
+		const NetworkPlayerInfo *npi = &_network_player_info[p->index];
+
 		GetString(buffer, STR_00D1_DARK_BLUE + _player_colors[p->index], lastof(buffer));
-		IConsolePrintF(8, "#:%d(%s) Company Name: '%s'  Year Founded: %d  Money: %d  Loan: %d  Value: %" OTTD_PRINTF64 "d  (T:%d, R:%d, P:%d, S:%d)",
-			p->index + 1, buffer, _network_player_info[p->index].company_name, p->inaugurated_year, p->player_money, p->current_loan, CalculateCompanyValue(p),
-			/* trains      */ _network_player_info[p->index].num_vehicle[0],
-			/* lorry + bus */ _network_player_info[p->index].num_vehicle[1] + _network_player_info[p->index].num_vehicle[2],
-			/* planes      */ _network_player_info[p->index].num_vehicle[3],
-			/* ships       */ _network_player_info[p->index].num_vehicle[4]);
+		IConsolePrintF(8, "#:%d(%s) Company Name: '%s'  Year Founded: %d  Money: %d  Loan: %d  Value: %" OTTD_PRINTF64 "d  (T:%d, R:%d, P:%d, S:%d) %sprotected",
+			p->index + 1, buffer, npi->company_name, p->inaugurated_year, p->player_money, p->current_loan, CalculateCompanyValue(p),
+			/* trains      */ npi->num_vehicle[0],
+			/* lorry + bus */ npi->num_vehicle[1] + npi->num_vehicle[2],
+			/* planes      */ npi->num_vehicle[3],
+			/* ships       */ npi->num_vehicle[4],
+			/* protected   */ StrEmpty(npi->password) ? "un" : "");
 	}
 
 	return true;
--- a/src/disaster_cmd.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/disaster_cmd.cpp	Wed May 09 20:22:49 2007 +0000
@@ -116,23 +116,18 @@
 	v->cur_image = img;
 }
 
-
 /** Initialize a disaster vehicle. These vehicles are of type VEH_DISASTER, are unclickable
  * and owned by nobody */
 static void InitializeDisasterVehicle(Vehicle *v, int x, int y, byte z, Direction direction, byte subtype)
 {
-	v->type = VEH_DISASTER;
+	v = new (v) DisasterVehicle();
 	v->x_pos = x;
 	v->y_pos = y;
 	v->z_pos = z;
 	v->tile = TileVirtXY(x, y);
 	v->direction = direction;
 	v->subtype = subtype;
-	v->x_offs = -1;
-	v->y_offs = -1;
-	v->sprite_width = 2;
-	v->sprite_height = 2;
-	v->z_height = 5;
+	v->UpdateDeltaXY(INVALID_DIR);
 	v->owner = OWNER_NONE;
 	v->vehstatus = VS_UNCLICKABLE;
 	v->u.disaster.image_override = 0;
@@ -1065,3 +1060,12 @@
 {
 	ResetDisasterDelay();
 }
+
+void DisasterVehicle::UpdateDeltaXY(Direction direction)
+{
+	this->x_offs        = -1;
+	this->y_offs        = -1;
+	this->sprite_width  =  2;
+	this->sprite_height =  2;
+	this->z_height      =  5;
+}
--- a/src/economy.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/economy.cpp	Wed May 09 20:22:49 2007 +0000
@@ -1377,24 +1377,192 @@
 	return false;
 }
 
-int LoadUnloadVehicle(Vehicle *v, bool just_arrived)
+static bool CanFillVehicle_FullLoadAny(Vehicle *v)
 {
+	uint32 full = 0, not_full = 0;
+	const GoodsEntry *ge = GetStation(v->last_station_visited)->goods;
+
+	/* special handling of aircraft */
+
+	/* if the aircraft carries passengers and is NOT full, then
+	 *continue loading, no matter how much mail is in */
+	if (v->type == VEH_AIRCRAFT &&
+			IsCargoInClass(v->cargo_type, CC_PASSENGERS) &&
+			v->cargo_cap != v->cargo_count) {
+		return true;
+	}
+
+	/* patch should return "true" to continue loading, i.e. when there is no cargo type that is fully loaded. */
+	do {
+		/* Should never happen, but just in case future additions change this */
+		assert(v->cargo_type<32);
+
+		if (v->cargo_cap != 0) {
+			uint32 mask = 1 << v->cargo_type;
+
+			if (!HASBIT(v->vehicle_flags, VF_CARGO_UNLOADING) && v->cargo_cap == v->cargo_count) {
+				full |= mask;
+			} else if (GB(ge[v->cargo_type].waiting_acceptance, 0, 12) > 0 ||
+					(HASBIT(v->vehicle_flags, VF_CARGO_UNLOADING) && (ge[v->cargo_type].waiting_acceptance & 0x8000))) {
+				/* If there is any cargo waiting, or this vehicle is still unloading
+				 * and the station accepts the cargo, don't leave the station. */
+				return true;
+			} else {
+				not_full |= mask;
+			}
+		}
+	} while ((v = v->next) != NULL);
+
+	/* continue loading if there is a non full cargo type and no cargo type that is full */
+	return not_full && (full & ~not_full) == 0;
+}
+
+
+static bool CanFillVehicle(Vehicle *front_v)
+{
+	TileIndex tile = front_v->tile;
+
+	assert(IsTileType(tile, MP_STATION) ||
+			(front_v->type == VEH_SHIP && (
+				IsTileType(TILE_ADDXY(tile,  1,  0), MP_STATION) ||
+				IsTileType(TILE_ADDXY(tile, -1,  0), MP_STATION) ||
+				IsTileType(TILE_ADDXY(tile,  0,  1), MP_STATION) ||
+				IsTileType(TILE_ADDXY(tile,  0, -1), MP_STATION) ||
+				IsTileType(TILE_ADDXY(tile, -2,  0), MP_STATION)
+			)));
+
+	bool full_load = HASBIT(front_v->current_order.flags, OFB_FULL_LOAD);
+
+	/* If patch is active, use alternative CanFillVehicle-function */
+	if (_patches.full_load_any && full_load) return CanFillVehicle_FullLoadAny(front_v);
+
+	Vehicle *v = front_v;
+	do {
+		if (HASBIT(v->vehicle_flags, VF_CARGO_UNLOADING) || (full_load && v->cargo_count != v->cargo_cap)) return true;
+	} while ((v = v->next) != NULL);
+
+	return !HASBIT(front_v->vehicle_flags, VF_LOADING_FINISHED);
+}
+
+/**
+ * Performs the vehicle payment _and_ marks the vehicle to be unloaded.
+ * @param front_v the vehicle to be unloaded
+ */
+void VehiclePayment(Vehicle *front_v)
+{
+	int result = 0;
+
 	int profit = 0;
-	int total_veh_profit = 0;      // accumulates the profit across the vehicle chain (used by trains)
-	int32 route_profit = 0;        // the grand total amount for the route. A-D of transfer chain A-B-C-D
-	int virtual_profit = 0;        // virtual profit of one vehicle element for feeder systems
-	int virtual_profit_total = 0;  // virtual profit for entire vehicle chain
-	int total_cargo_feeder_share = 0;  // the feeder cash amount for the goods being loaded/unloaded in this load step
+	int total_veh_profit = 0;         // accumulates the profit across the vehicle chain (used by trains)
+	int32 route_profit = 0;           // the grand total amount for the route. A-D of transfer chain A-B-C-D
+	int virtual_profit = 0;           // virtual profit of one vehicle element for feeder systems
+	int virtual_profit_total = 0;     // virtual profit for entire vehicle chain
+	int total_cargo_feeder_share = 0; // the feeder cash amount for the goods being loaded/unloaded in this load step
+
+	int all_vehicles_cargo_feeder_share = front_v->cargo_feeder_share; // used to hold transfer value of complete vehicle chain - used by trains
+
+	StationID last_visited = front_v->last_station_visited;
+	Station *st = GetStation(last_visited);
+
+	/* The owner of the train wants to be paid */
+	PlayerID old_player = _current_player;
+	_current_player = front_v->owner;
+
+	/* At this moment loading cannot be finished */
+	CLRBIT(front_v->vehicle_flags, VF_LOADING_FINISHED);
+
+	/* Start unloading in at the first possible moment */
+	front_v->load_unload_time_rem = 1;
+
+	for (Vehicle *v = front_v; v != NULL; v = v->next) {
+		/* No cargo to unload */
+		if (v->cargo_cap == 0) continue;
+
+		SETBIT(v->vehicle_flags, VF_CARGO_UNLOADING);
+		/* All cargo has already been paid for, no need to pay again */
+		if (v->cargo_count == v->cargo_paid_for) continue;
+
+		GoodsEntry *ge = &st->goods[v->cargo_type];
+
+		if (v->cargo_source != last_visited &&
+				HASBIT(ge->waiting_acceptance, 15) &&
+				(front_v->current_order.flags & OF_TRANSFER) == 0) {
+			/* Deliver goods to the station */
+			st->time_since_unload = 0;
+
+			/* handle end of route payment */
+			profit += DeliverGoods(v->cargo_count - v->cargo_paid_for, v->cargo_type, v->cargo_source, last_visited, v->cargo_source_xy, v->cargo_days);
+			v->cargo_paid_for        = v->cargo_count;
+			route_profit             = profit;                                   // display amount paid for final route delivery, A-D of a chain A-B-C-D
+			total_veh_profit         = profit - all_vehicles_cargo_feeder_share; // whole vehicle is not payed for transfers picked up earlier
+			total_cargo_feeder_share = -all_vehicles_cargo_feeder_share;         // total of transfer fees in vehicle chain needs to be zero at end of unload
+
+			v->cargo_feeder_share = 0;   // clear transfer cost per vehicle
+			result |= 1;
+		} else if (front_v->current_order.flags & (OF_UNLOAD | OF_TRANSFER)) {
+			if ((front_v->current_order.flags & OF_TRANSFER) != 0) {
+				virtual_profit = GetTransportedGoodsIncome(
+					v->cargo_count - v->cargo_paid_for,
+					/* pay transfer vehicle for only the part of transfer it has done: ie. cargo_loaded_at_xy to here */
+					DistanceManhattan(v->cargo_loaded_at_xy, GetStation(last_visited)->xy),
+					v->cargo_days,
+					v->cargo_type);
+
+				front_v->profit_this_year += virtual_profit;
+				ge->feeder_profit         += v->cargo_feeder_share + virtual_profit; // transfer cargo transfer fees to station
+				total_cargo_feeder_share  -= v->cargo_feeder_share; // accumulate deduction of feeder shares
+				v->cargo_feeder_share      = 0;                     // clear transfer cost
+
+				/* keep total of cargo unloaded (pending) for accurate cargoshare calculation on load */
+				SB(ge->unload_pending, 0, 12, GB(ge->unload_pending, 0, 12) + v->cargo_count);
+
+				virtual_profit_total += virtual_profit;   // accumulate transfer profits for whole vehicle
+				v->cargo_paid_for = v->cargo_count;       // record how much of the cargo has been paid for to eliminate double counting
+			}
+			result |= 2;
+		}
+	}
+
+	/* Ensure a negative total is only applied to the vehicle if there is value to reduce. */
+	front_v->cargo_feeder_share = max(front_v->cargo_feeder_share + total_cargo_feeder_share, 0);
+
+	if (virtual_profit_total > 0) {
+		ShowFeederIncomeAnimation(front_v->x_pos, front_v->y_pos, front_v->z_pos, virtual_profit_total);
+	}
+
+	if (route_profit != 0) {
+		front_v->profit_this_year += total_veh_profit;
+		SubtractMoneyFromPlayer(-route_profit);
+
+		if (IsLocalPlayer() && !PlayVehicleSound(front_v, VSE_LOAD_UNLOAD)) {
+			SndPlayVehicleFx(SND_14_CASHTILL, front_v);
+		}
+
+		ShowCostOrIncomeAnimation(front_v->x_pos, front_v->y_pos, front_v->z_pos, -total_veh_profit);
+	}
+
+	_current_player = old_player;
+}
+
+/**
+ * Loads/unload the vehicle if possible.
+ * @param v the vehicle to be (un)loaded
+ * @return true if something was (un)loaded. False if the train is ready to leave.
+ */
+bool LoadUnloadVehicle(Vehicle *v)
+{
+	if (!CanFillVehicle(v)) return false;
 
 	int unloading_time = 20;
 	Vehicle *u = v;
 	int result = 0;
 	int t;
 	uint count, cap;
-	PlayerID old_player;
+
 	bool completely_empty = true;
 	byte load_amount;
 	bool anything_loaded = false;
+	int total_cargo_feeder_share = 0; // the feeder cash amount for the goods being loaded/unloaded in this load step
 
 	assert(v->current_order.type == OT_LOADING);
 
@@ -1406,14 +1574,9 @@
 	 * enabling though. */
 	SETBIT(v->vehicle_flags, VF_LOADING_FINISHED);
 
-	old_player = _current_player;
-	_current_player = v->owner;
-
 	StationID last_visited = v->last_station_visited;
 	Station *st = GetStation(last_visited);
 
-	int all_vehicles_cargo_feeder_share = v->cargo_feeder_share; // used to hold transfer value of complete vehicle chain - used by trains
-
 	for (; v != NULL; v = v->next) {
 		GoodsEntry* ge;
 		load_amount = EngInfo(v->engine_type)->load_amount;
@@ -1424,9 +1587,6 @@
 
 		if (v->cargo_cap == 0) continue;
 
-		/* If the vehicle has just arrived, set it to unload. */
-		if (just_arrived) SETBIT(v->vehicle_flags, VF_CARGO_UNLOADING);
-
 		ge = &st->goods[v->cargo_type];
 		count = GB(ge->waiting_acceptance, 0, 12);
 
@@ -1442,45 +1602,15 @@
 
 				unloading_time += v->cargo_count; // TTDBUG: bug in original TTD
 
-				/* handle end of route payment */
-				if (just_arrived && v->cargo_paid_for < v->cargo_count) {
-					profit += DeliverGoods(v->cargo_count - v->cargo_paid_for, v->cargo_type, v->cargo_source, last_visited, v->cargo_source_xy, v->cargo_days);
-					v->cargo_paid_for = v->cargo_count;
-					route_profit = profit;       // display amount paid for final route delivery, A-D of a chain A-B-C-D
-					total_veh_profit = profit - all_vehicles_cargo_feeder_share;  // whole vehicle is not payed for transfers picked up earlier
-					total_cargo_feeder_share = -all_vehicles_cargo_feeder_share;  // total of transfer fees in vehicle chain needs to be zero at end of unload
-					v->cargo_feeder_share = 0;   // clear transfer cost per vehicle
-				}
 				result |= 1;
 				v->cargo_count -= amount_unloaded;
 				v->cargo_paid_for -= min(amount_unloaded, v->cargo_paid_for);
 				if (_patches.gradual_loading) continue;
 
 			} else if (u->current_order.flags & (OF_UNLOAD | OF_TRANSFER)) {
-
 				/* unload goods and let it wait at the station */
 				st->time_since_unload = 0;
 
-				/* handle transfer */
-				if (just_arrived && (u->current_order.flags & OF_TRANSFER) && v->cargo_paid_for < v->cargo_count) {
-					virtual_profit = GetTransportedGoodsIncome(
-						v->cargo_count - v->cargo_paid_for,
-						/* pay transfer vehicle for only the part of transfer it has done: ie. cargo_loaded_at_xy to here */
-						DistanceManhattan(v->cargo_loaded_at_xy, GetStation(last_visited)->xy),
-						v->cargo_days,
-						v->cargo_type);
-
-					ge->feeder_profit += v->cargo_feeder_share;         // transfer cargo transfer fees to station
-					total_cargo_feeder_share -= v->cargo_feeder_share;  // accumulate deduction of feeder shares
-					v->cargo_feeder_share = 0;                          // clear transfer cost
-
-					/* keep total of cargo unloaded (pending) for accurate cargoshare calculation on load */
-					SB(ge->unload_pending, 0, 12, GB(ge->unload_pending, 0, 12) + v->cargo_count);
-
-					virtual_profit_total += virtual_profit;   // accumulate transfer profits for whole vehicle
-					v->cargo_paid_for = v->cargo_count;       // record how much of the cargo has been paid for to eliminate double counting
-				}
-
 				unloading_time += v->cargo_count;
 				t = GB(ge->waiting_acceptance, 0, 12);
 				if (t == 0) {
@@ -1504,10 +1634,6 @@
 				 * else deduct amount actually unloaded from unload_pending */
 				SB(ge->unload_pending, 0, 12, max(GB(ge->unload_pending, 0, 12) - amount_unloaded, 0U));
 
-				if (u->current_order.flags & OF_TRANSFER) {
-					ge->feeder_profit += virtual_profit;
-					u->profit_this_year += virtual_profit;
-				}
 				result |= 2;
 				v->cargo_count -= amount_unloaded;
 				v->cargo_paid_for -= min(amount_unloaded, v->cargo_paid_for);
@@ -1548,7 +1674,10 @@
 
 			/* Skip loading this vehicle if another train/vehicle is already handling
 			 * the same cargo type at this station */
-			if (_patches.improved_load && (u->current_order.flags & OF_FULL_LOAD) && LoadWait(v,u)) continue;
+			if (_patches.improved_load && (u->current_order.flags & OF_FULL_LOAD) && LoadWait(v,u)) {
+				CLRBIT(u->vehicle_flags, VF_LOADING_FINISHED);
+				continue;
+			}
 
 			/* TODO: Regarding this, when we do gradual loading, we
 			 * should first unload all vehicles and then start
@@ -1592,9 +1721,7 @@
 
 	v = u;
 
-	/* Ensure a negative total is only applied to the vehicle if there is value to reduce. */
-	if (!((v->cargo_feeder_share == 0) && (total_cargo_feeder_share < 0)))
-		v->cargo_feeder_share += total_cargo_feeder_share;
+	v->cargo_feeder_share += total_cargo_feeder_share;
 
 	if (_patches.gradual_loading) {
 		/* The time it takes to load one 'slice' of cargo or passengers depends
@@ -1611,10 +1738,6 @@
 		}
 	}
 
-	if (virtual_profit_total > 0) {
-		ShowFeederIncomeAnimation(v->x_pos, v->y_pos, v->z_pos, virtual_profit_total);
-	}
-
 	if (v->type == VEH_TRAIN) {
 		/* Each platform tile is worth 2 rail vehicles. */
 		int overhang = v->u.rail.cached_total_length - st->GetPlatformLength(v->tile) * TILE_SIZE;
@@ -1631,25 +1754,16 @@
 	}
 
 	if (result != 0) {
+		InvalidateWindow(v->GetVehicleListWindowClass(), v->owner);
 		InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
+
 		st->MarkTilesDirty();
+		v->MarkDirty();
 
 		if (result & 2) InvalidateWindow(WC_STATION_VIEW, last_visited);
-
-		if (route_profit != 0) {
-			v->profit_this_year += total_veh_profit;
-			SubtractMoneyFromPlayer(-route_profit);
-
-			if (IsLocalPlayer() && !PlayVehicleSound(v, VSE_LOAD_UNLOAD)) {
-				SndPlayVehicleFx(SND_14_CASHTILL, v);
-			}
-
-			ShowCostOrIncomeAnimation(v->x_pos, v->y_pos, v->z_pos, -total_veh_profit);
-		}
 	}
 
-	_current_player = old_player;
-	return result;
+	return true;
 }
 
 void PlayersMonthlyLoop()
--- a/src/economy.h	Fri May 04 23:17:26 2007 +0000
+++ b/src/economy.h	Wed May 09 20:22:49 2007 +0000
@@ -68,4 +68,6 @@
 int32 GetTransportedGoodsIncome(uint num_pieces, uint dist, byte transit_days, CargoID cargo_type);
 uint MoveGoodsToStation(TileIndex tile, int w, int h, CargoID type, uint amount);
 
+void VehiclePayment(Vehicle *front_v);
+
 #endif /* ECONOMY_H */
--- a/src/engine.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/engine.cpp	Wed May 09 20:22:49 2007 +0000
@@ -401,6 +401,12 @@
 	/* check if it's available */
 	if (!HASBIT(e->player_avail, player)) return false;
 
+	if (type == VEH_TRAIN) {
+		/* Check if the rail type is available to this player */
+		const Player *p = GetPlayer(player);
+		if (!HASBIT(p->avail_railtypes, RailVehInfo(engine)->railtype)) return false;
+	}
+
 	return true;
 }
 
--- a/src/engine.h	Fri May 04 23:17:26 2007 +0000
+++ b/src/engine.h	Wed May 09 20:22:49 2007 +0000
@@ -16,6 +16,14 @@
 	RAILVEH_WAGON,       ///< simple wagon, not motorized
 };
 
+enum EngineClass {
+	EC_STEAM,
+	EC_DIESEL,
+	EC_ELECTRIC,
+	EC_MONORAIL,
+	EC_MAGLEV,
+};
+
 struct RailVehicleInfo {
 	byte image_index;
 	RailVehicleTypes railveh_type;
@@ -26,7 +34,7 @@
 	uint16 weight;
 	byte running_cost_base;
 	byte running_cost_class;
-	byte engclass;         ///< 0: steam, 1: diesel, 2: electric
+	EngineClass engclass;           ///< Class of engine for this vehicle
 	byte capacity;
 	CargoID cargo_type;
 	byte ai_rank;
--- a/src/genworld.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/genworld.cpp	Wed May 09 20:22:49 2007 +0000
@@ -10,6 +10,7 @@
 #include "table/sprites.h"
 #include "variables.h"
 #include "thread.h"
+#include "command.h"
 #include "genworld.h"
 #include "gfx.h"
 #include "gfxinit.h"
@@ -153,6 +154,8 @@
 
 	if (_network_dedicated) DEBUG(net, 0, "Map generated, starting game");
 
+	if (_patches.pause_on_newgame && _game_mode == GM_NORMAL) DoCommandP(0, 1, 0, NULL, CMD_PAUSE);
+
 	return NULL;
 }
 
--- a/src/genworld_gui.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/genworld_gui.cpp	Wed May 09 20:22:49 2007 +0000
@@ -199,7 +199,7 @@
 	}
 }
 
-static void HeightmapScaledTooMuchCallback(Window *w, bool confirmed)
+static void LandscapeGenerationCallback(Window *w, bool confirmed)
 {
 	if (confirmed) StartGeneratingLandscape((glwp_modes)w->window_number);
 }
@@ -213,8 +213,8 @@
 	static const StringID tree_placer[] = {STR_CONFIG_PATCHES_TREE_PLACER_NONE, STR_CONFIG_PATCHES_TREE_PLACER_ORIGINAL, STR_CONFIG_PATCHES_TREE_PLACER_IMPROVED, INVALID_STRING_ID};
 	static const StringID rotation[]    = {STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE, STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_CLOCKWISE, INVALID_STRING_ID};
 	static const StringID landscape[]   = {STR_CONFIG_PATCHES_LAND_GENERATOR_ORIGINAL, STR_CONFIG_PATCHES_LAND_GENERATOR_TERRA_GENESIS, INVALID_STRING_ID};
-	static const StringID num_towns[]   = {STR_6816_LOW, STR_6817_NORMAL, STR_6818_HIGH, INVALID_STRING_ID};
-	static const StringID num_inds[]    = {STR_26816_NONE, STR_6816_LOW, STR_6817_NORMAL, STR_6818_HIGH, INVALID_STRING_ID};
+	static const StringID num_towns[]   = {STR_NUM_VERY_LOW, STR_6816_LOW, STR_6817_NORMAL, STR_6818_HIGH, INVALID_STRING_ID};
+	static const StringID num_inds[]    = {STR_26816_NONE, STR_NUM_VERY_LOW, STR_6816_LOW, STR_6817_NORMAL, STR_6818_HIGH, INVALID_STRING_ID};
 
 	/* Data used for the generate seed edit box */
 	static querystr_d _genseed_query;
@@ -354,14 +354,26 @@
 			SetWindowDirty(w);
 			break;
 		case GLAND_GENERATE_BUTTON: // Generate
-			if (mode == GLWP_HEIGHTMAP && (
-					_heightmap_x * 2 < (1U << _patches_newgame.map_x) || _heightmap_x / 2 > (1U << _patches_newgame.map_x) ||
-					_heightmap_y * 2 < (1U << _patches_newgame.map_y) || _heightmap_y / 2 > (1U << _patches_newgame.map_y))) {
+
+			UpdatePatches();
+
+			if (_patches.town_layout == TL_NO_ROADS) {
+				ShowQuery(
+					STR_TOWN_LAYOUT_WARNING_CAPTION,
+					STR_TOWN_LAYOUT_WARNING_MESSAGE,
+					w,
+					LandscapeGenerationCallback);
+			} else if (mode == GLWP_HEIGHTMAP &&
+					(_heightmap_x * 2 < (1U << _patches_newgame.map_x) ||
+					_heightmap_x / 2 > (1U << _patches_newgame.map_x) ||
+					_heightmap_y * 2 < (1U << _patches_newgame.map_y) ||
+					_heightmap_y / 2 > (1U << _patches_newgame.map_y))) {
 				ShowQuery(
 					STR_HEIGHTMAP_SCALE_WARNING_CAPTION,
 					STR_HEIGHTMAP_SCALE_WARNING_MESSAGE,
 					w,
-					HeightmapScaledTooMuchCallback);
+					LandscapeGenerationCallback);
+
 			} else {
 				StartGeneratingLandscape(mode);
 			}
@@ -545,6 +557,10 @@
 
 void StartScenarioEditor()
 {
+	if (_patches_newgame.town_layout == TL_NO_ROADS) {
+		_patches_newgame.town_layout = TL_ORIGINAL;
+	}
+
 	StartGeneratingLandscape(GLWP_SCENARIO);
 }
 
--- a/src/gui.h	Fri May 04 23:17:26 2007 +0000
+++ b/src/gui.h	Wed May 09 20:22:49 2007 +0000
@@ -75,6 +75,7 @@
 	GUI_PlaceProc_WaterArea       = 3 << 4,
 	GUI_PlaceProc_ConvertRailArea = 4 << 4,
 	GUI_PlaceProc_RockyArea       = 5 << 4,
+	GUI_PlaceProc_RemoveFromStation = 6 << 4,
 };
 
 /* misc_gui.cpp */
--- a/src/heightmap.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/heightmap.cpp	Wed May 09 20:22:49 2007 +0000
@@ -275,6 +275,13 @@
 	return true;
 }
 
+/**
+ * Converts a given grayscale map to something that fits in OTTD map system
+ * and create a map of that data.
+ * @param img_width  the with of the image in pixels/tiles
+ * @param img_height the height of the image in pixels/tiles
+ * @param map        the input map
+ */
 static void GrayscaleToMapHeights(uint img_width, uint img_height, byte *map)
 {
 	/* Defines the detail of the aspect ratio (to avoid doubles) */
--- a/src/industry.h	Fri May 04 23:17:26 2007 +0000
+++ b/src/industry.h	Wed May 09 20:22:49 2007 +0000
@@ -140,6 +140,9 @@
 const IndustrySpec *GetIndustrySpec(IndustryType thistype);    ///< Array of industries default data
 const IndustryTileSpec *GetIndustryTileSpec(IndustryGfx gfx);  ///< Array of industry tiles default data
 
+/* smallmap_gui.cpp */
+void BuildIndustriesLegend();
+
 DECLARE_OLD_POOL(Industry, Industry, 3, 8000)
 
 /**
--- a/src/industry_cmd.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/industry_cmd.cpp	Wed May 09 20:22:49 2007 +0000
@@ -1541,9 +1541,10 @@
 	return CreateNewIndustryHelper(tile, type, DC_EXEC, indspec, it);
 }
 
-static const byte _numof_industry_table[4][12] = {
+static const byte _numof_industry_table[5][12] = {
 	/* difficulty settings for number of industries */
 	{0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0},   //none
+	{0, 1, 1, 1, 1, 1, 1, 1,  1,  1,  1},   //very low
 	{0, 1, 1, 1, 2, 2, 3, 3,  4,  4,  5},   //low
 	{0, 1, 2, 3, 4, 5, 6, 7,  8,  9, 10},   //normal
 	{0, 2, 3, 4, 6, 7, 8, 9, 10, 10, 10},   //high
--- a/src/intro_gui.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/intro_gui.cpp	Wed May 09 20:22:49 2007 +0000
@@ -64,6 +64,10 @@
 		break;
 
 	case WE_CLICK:
+		/* Do not create a network server when you (just) have closed one of the game
+		 * creation/load windows for the network server. */
+		if (2 <= e->we.click.widget && e->we.click.widget <= 6) _is_network_server = false;
+
 		switch (e->we.click.widget) {
 		case 2: ShowGenerateLandscape(); break;
 		case 3: ShowSaveLoadDialog(SLD_LOAD_GAME); break;
--- a/src/lang/american.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/american.txt	Wed May 09 20:22:49 2007 +0000
@@ -751,6 +751,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Small
 STR_02A2_MEDIUM                                                 :{BLACK}Medium
 STR_02A3_LARGE                                                  :{BLACK}Large
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}City
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Select town size
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Town size:
 
@@ -1096,6 +1097,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Scroll map
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Off
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Map scrollwheel speed: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Automatically pause when starting a new game: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Max trains per player: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Max road vehicles per player: {ORANGE}{STRING}
@@ -1129,6 +1131,15 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Allow buying shares from other companies
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}When dragging place signals every: {ORANGE}{STRING} tile(s)
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Automatically build semaphores before: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}The town layout "no more roads" isn't valid in the scenario editor
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Select town-road layout: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :no more roads
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :default
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :better roads
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :2x2 grid
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :3x3 grid
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Position of main toolbar: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Left
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Centre
@@ -1143,6 +1154,7 @@
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Very fast
 STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Proportion of towns that will grow twice as fast: {ORANGE}1 in {STRING}
 STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Proportion of towns that will grow twice as fast: {ORANGE}None
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Initial city size multiplier: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Interface
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Construction
@@ -2035,6 +2047,7 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :None
+STR_NUM_VERY_LOW                                                :Very low
 STR_6816_LOW                                                    :Low
 STR_6817_NORMAL                                                 :Normal
 STR_6818_HIGH                                                   :High
@@ -3100,6 +3113,8 @@
 STR_START_DATE_QUERY_CAPT                                       :{WHITE}Change starting year
 STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Scale warning
 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}Resizing source map too much is not recommended. Continue with the generation?
+STR_TOWN_LAYOUT_WARNING_CAPTION                                 :{WHITE}Town layout warning
+STR_TOWN_LAYOUT_WARNING_MESSAGE                                 :{YELLOW}The town layout "no more roads" is not recommended. Continue with the generation?
 STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
 STR_HEIGHTMAP_NAME                                              :{BLACK}Heightmap name:
 STR_HEIGHTMAP_SIZE                                              :{BLACK}Size: {ORANGE}{NUM} x {NUM}
--- a/src/lang/brazilian_portuguese.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/brazilian_portuguese.txt	Wed May 09 20:22:49 2007 +0000
@@ -753,6 +753,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Pequena
 STR_02A2_MEDIUM                                                 :{BLACK}Média
 STR_02A3_LARGE                                                  :{BLACK}Grande
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}Cidade
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Selecionar tamanho da cidade
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Tamanho da cidade:
 
@@ -1098,6 +1099,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Scroll map
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Desligado
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Velocidade do scrollwheel do mapa: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Pausar automaticamente ao inicar um novo jogo: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Máximo de trens por jogador: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Máximo de automóveis por jogador: {ORANGE}{STRING}
@@ -1131,6 +1133,15 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Permite comprar ações de outras companhias
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Ao arrastar colocar sinais a cada: {ORANGE}{STRING} quadrado(s)
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Automaticamente constroi semáforos anteriores: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}O layout de cidade "sem mais estradas" não é válido no editor
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Selecione o layout das estradas {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :sem mais estradas
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :padrão
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :melhores estradas
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :grade 2x2
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :grade 3x3
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Posição da barra de ferramentas principal: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Esquerda
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Centro
@@ -1145,6 +1156,7 @@
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Muito rápido
 STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Proporção de cidades que irão crescer duas vezes mais rápido: {ORANGE}1 em {STRING}
 STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Proporção de cidades que irão crescer duas vezes mais rápido: {ORANGE}Nenhum
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Multiplicador do tamanho inicial da cidade: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Interface
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Construção
@@ -2039,6 +2051,7 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :Nenhum
+STR_NUM_VERY_LOW                                                :Muito baixo
 STR_6816_LOW                                                    :Baixo
 STR_6817_NORMAL                                                 :Normal
 STR_6818_HIGH                                                   :Alto
@@ -3104,6 +3117,8 @@
 STR_START_DATE_QUERY_CAPT                                       :{WHITE}Mudar data de início
 STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Aviso de Escala
 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}Alterar muito o tamanho do mapa original não é recomendado. Continuar com a geração?
+STR_TOWN_LAYOUT_WARNING_CAPTION                                 :{WHITE}Aviso do layout da cidade
+STR_TOWN_LAYOUT_WARNING_MESSAGE                                 :{YELLOW}O Layout "sem mais estradas" não é recomendado. Continuar com a geração?
 STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
 STR_HEIGHTMAP_NAME                                              :{BLACK}Nome do mapa em relevo:
 STR_HEIGHTMAP_SIZE                                              :{BLACK}Tamanho: {ORANGE}{NUM} x {NUM}
--- a/src/lang/bulgarian.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/bulgarian.txt	Wed May 09 20:22:49 2007 +0000
@@ -1099,6 +1099,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Разгледай картата
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Изклучен
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Scrollwheel скорост на картата: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Автоматична пауза стартирайки нова игра: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Макс. влакове на играч: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Макс. брой коли на играч: {ORANGE}{STRING}
@@ -1132,6 +1133,12 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Позволяване покупката на акции от други компании
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}При влачене, поставяне на семафори всеки: {ORANGE}{STRING} плочка(и)
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Автоматично построй семафори преди: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Избери грацки пътформат: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :по-добри пътища
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :2х2 мрежа
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :3х3 мрежа
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Позиция на лента за инструменти: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Ляво
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Център
@@ -2039,6 +2046,7 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :Николко
+STR_NUM_VERY_LOW                                                :Много ниско
 STR_6816_LOW                                                    :малко
 STR_6817_NORMAL                                                 :нормално
 STR_6818_HIGH                                                   :много
@@ -3104,6 +3112,7 @@
 STR_START_DATE_QUERY_CAPT                                       :{WHITE}Промяна началната година
 STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Мащаб предупреждение
 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}Прекаленото оразмеряване не е препорачително. Продължаване с генерацията?
+STR_TOWN_LAYOUT_WARNING_CAPTION                                 :{WHITE}Грацки план предупреждение
 STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
 STR_HEIGHTMAP_NAME                                              :{BLACK}Име на височинна карта:
 STR_HEIGHTMAP_SIZE                                              :{BLACK}Размер: {ORANGE}{NUM} x {NUM}
--- a/src/lang/catalan.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/catalan.txt	Wed May 09 20:22:49 2007 +0000
@@ -1097,6 +1097,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Moure mapa
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Off
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Velocitat del mapa amb la rodeta del ratolí: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Posa en pausa automàticament en començar un joc nou: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Max trens per jugador: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Max automòbils per jugador: {ORANGE}{STRING}
@@ -1130,6 +1131,15 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Permet comprar participacions d'altres empreses
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Arrossegant, sitúa senyals cada: {ORANGE}{STRING} quadre(s)
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Construir semàfors automàticament abans de: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}El format de poble "no més carreteres" no és vàlid a l'editor d'escenaris
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Selecciona el format poble-carretera: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :sense més carreteres
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :predeterminat
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :millors carreteres
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :graella 2x2
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :graella 3x3
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Posició de la barra d'eines principal: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Esquerra
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Centre
@@ -2037,6 +2047,7 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :Cap
+STR_NUM_VERY_LOW                                                :Molt baix
 STR_6816_LOW                                                    :Baix
 STR_6817_NORMAL                                                 :Normal
 STR_6818_HIGH                                                   :Alt
@@ -3102,6 +3113,8 @@
 STR_START_DATE_QUERY_CAPT                                       :{WHITE}Canviar l'any inicial
 STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Alerta d'escala
 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}No es recomana redimensionar massa el mapa d'origen. Vols continuar amb la generació?
+STR_TOWN_LAYOUT_WARNING_CAPTION                                 :{WHITE}Alerta de format de poble
+STR_TOWN_LAYOUT_WARNING_MESSAGE                                 :{YELLOW}El format de poble "no més carreteres" no està recomanat. Continuar amb la generació?
 STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
 STR_HEIGHTMAP_NAME                                              :{BLACK}Nom del mapa d'alçades:
 STR_HEIGHTMAP_SIZE                                              :{BLACK}Mida: {ORANGE}{NUM} x {NUM}
--- a/src/lang/czech.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/czech.txt	Wed May 09 20:22:49 2007 +0000
@@ -1155,6 +1155,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :pohyb po mapě
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :nic
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Rychlost skrolovacího kolečka: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Zastavit automaticky hru při začínání nové hry: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Maximum vlaků na hráče: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Maximum silničních vozidel na hráče: {ORANGE}{STRING}
@@ -1188,6 +1189,15 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Povolit kupování podílu z ostatních společností
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Při tažení umisťovat signály každých(é): {ORANGE}{STRING} dilků(y)
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Semafory automaticky stavět do roku: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}Vzor "žádné silnice" se neuplatňuje v editoru scénářů
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Vyber vzor městských silnic: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :žádné silnice
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :původní
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :lepší silnice
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :mřížka 2x2
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :mřížka 3x3
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Umístění hlavní lišty: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :vlevo
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :uprostřed
@@ -2095,6 +2105,7 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :žádný
+STR_NUM_VERY_LOW                                                :velmi nízké
 STR_6816_LOW                                                    :nízké
 STR_6817_NORMAL                                                 :střední
 STR_6818_HIGH                                                   :vysoké
@@ -3166,6 +3177,8 @@
 STR_START_DATE_QUERY_CAPT                                       :{WHITE}Změnit počáteční rok
 STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Varování kvůli velikosti
 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}Tak velká zmena velikosti zdrojové mapy není doporučena. Pokračovat s generováním?
+STR_TOWN_LAYOUT_WARNING_CAPTION                                 :{WHITE}Varování kvůli vzoru silnic
+STR_TOWN_LAYOUT_WARNING_MESSAGE                                 :{YELLOW}Vzor "žádné silnice" není doporučen (nepostaví se ani domy). Pokračovat ve vytváření mapy?
 STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
 STR_HEIGHTMAP_NAME                                              :{BLACK}Jméno výškové mapy:
 STR_HEIGHTMAP_SIZE                                              :{BLACK}Velikost: {ORANGE}{NUM} x {NUM}
--- a/src/lang/danish.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/danish.txt	Wed May 09 20:22:49 2007 +0000
@@ -1097,6 +1097,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Rul kort
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Slået fra
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Rulleknap-hastighed på kort: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Sæt automatisk på pause når nyt spil startes: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Maks. antal tog per spiller: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Maks. antal køretøjer per spiller: {ORANGE}{STRING}
@@ -1130,6 +1131,15 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Tillad at købe aktier i andre selskaber
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Ved trækning placer signal hvert: {ORANGE}{STRING} felt
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Byg automatisk semaforer før: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}Vejlayoutet "ikke flere veje" er ikke gyldigt i scenarieeditoren
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Vælg layout for veje i byer: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :ikke flere veje
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :standard
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :bedre veje
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :2x2 gitter
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :3x3 gitter
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Placering af værktøjslinje: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Venstre
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Center
@@ -2037,6 +2047,7 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :Ingen
+STR_NUM_VERY_LOW                                                :Meget lav
 STR_6816_LOW                                                    :Lav
 STR_6817_NORMAL                                                 :Normal
 STR_6818_HIGH                                                   :Høj
@@ -3102,6 +3113,8 @@
 STR_START_DATE_QUERY_CAPT                                       :{WHITE}Ændre startår
 STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Skalerings advarsel
 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}At ændre størrelsen på kildebilledet anbefales ikke. Fortsæt genereringen?
+STR_TOWN_LAYOUT_WARNING_CAPTION                                 :{WHITE}Vejlayout-advarsel
+STR_TOWN_LAYOUT_WARNING_MESSAGE                                 :{YELLOW}Vejlayoutet "ikke flere veje" anbefales ikke. Fortsæt med at generere?
 STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
 STR_HEIGHTMAP_NAME                                              :{BLACK}Højdekortets navn:
 STR_HEIGHTMAP_SIZE                                              :{BLACK}Størrelse: {ORANGE}{NUM} x {NUM}
--- a/src/lang/dutch.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/dutch.txt	Wed May 09 20:22:49 2007 +0000
@@ -1097,6 +1097,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Scroll kaart
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Uit
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Kaart muiswiel snelheid: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Automatisch pauzeren wanneer je een nieuw spel start: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Maximaal aantal treinen per speler: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Maximaal aantal wegvoertuigen per speler: {ORANGE}{STRING}
@@ -1130,6 +1131,15 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Sta het kopen van aandelen toe
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Bij slepen, plaats seinen elke: {ORANGE}{STRING} tegel(s)
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Plaats automatisch semaphore seinen voor: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}De stadindeling "geen wegen" is niet geldig in de scenario editor
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Selecteer stedelijke wegindeling: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :geen wegen
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :standaard
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :betere wegen
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :2x2 rooster
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :3x3 rooster
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Positie van algemene toolbar: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Links
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Midden
@@ -2037,6 +2047,7 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :Geen
+STR_NUM_VERY_LOW                                                :Erg laag
 STR_6816_LOW                                                    :Laag
 STR_6817_NORMAL                                                 :Normaal
 STR_6818_HIGH                                                   :Hoog
@@ -3079,7 +3090,7 @@
 
 ########### String for New Landscape Generator
 
-STR_GENERATE                                                    :{WHITE}Creeër
+STR_GENERATE                                                    :{WHITE}Maak aan
 STR_RANDOM                                                      :{BLACK}Willekeurig maken
 STR_RANDOM_HELP                                                 :{BLACK}Wijzig het willekeurige getal voor terrein creatie
 STR_WORLD_GENERATION_CAPTION                                    :{WHITE}Wereld maken
@@ -3102,6 +3113,8 @@
 STR_START_DATE_QUERY_CAPT                                       :{WHITE}Verander begin jaar
 STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Schaal waarschuwing
 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}Het aanpassen van de grootte van een bronkaar is niet aan te bevelen. Toch doorgaan?
+STR_TOWN_LAYOUT_WARNING_CAPTION                                 :{WHITE}Stadsindelingwaarschuwing
+STR_TOWN_LAYOUT_WARNING_MESSAGE                                 :{YELLOW}De stadsindeling "geen wegen" is niet aanbevolen. Doorgaan met aanmaken?
 STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
 STR_HEIGHTMAP_NAME                                              :{BLACK}Hoogtekaart naam:
 STR_HEIGHTMAP_SIZE                                              :{BLACK}Grootte: {ORANGE}{NUM} x {NUM}
@@ -3122,7 +3135,7 @@
 STR_SE_FLAT_WORLD                                               :{WHITE}Vlak land
 STR_SE_FLAT_WORLD_TIP                                           :{BLACK}Genereer een platte kaart
 STR_SE_RANDOM_LAND                                              :{WHITE}Willekeurig land
-STR_SE_NEW_WORLD                                                :{BLACK}Creeër nieuw scenario
+STR_SE_NEW_WORLD                                                :{BLACK}Maak nieuw scenario aan
 STR_SE_CAPTION                                                  :{WHITE}Scenario type
 STR_FLAT_WORLD_HEIGHT_DOWN                                      :{BLACK}Maak de hoogte van plat land een lager
 STR_FLAT_WORLD_HEIGHT_UP                                        :{BLACK}Maak de hoogte van plat land een hoger
--- a/src/lang/english.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/english.txt	Wed May 09 20:22:49 2007 +0000
@@ -1097,6 +1097,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Scroll map
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Off
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Map scrollwheel speed: {ORANGE}{STRING1}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Automatically pause when starting a new game: {ORANGE}{STRING1}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Max trains per player: {ORANGE}{STRING1}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Max road vehicles per player: {ORANGE}{STRING1}
@@ -1130,6 +1131,15 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Allow buying shares from other companies
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}When dragging, place signals every: {ORANGE}{STRING1} tile(s)
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Automatically build semaphores before: {ORANGE}{STRING1}
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}The town layout "no more roads" isn't valid in the scenario editor
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Select town-road layout: {ORANGE}{STRING1}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :no more roads
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :default
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :better roads
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :2x2 grid
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :3x3 grid
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Position of main toolbar: {ORANGE}{STRING1}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Left
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Centre
@@ -2037,6 +2047,7 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :None
+STR_NUM_VERY_LOW                                                :Very low
 STR_6816_LOW                                                    :Low
 STR_6817_NORMAL                                                 :Normal
 STR_6818_HIGH                                                   :High
@@ -3102,6 +3113,8 @@
 STR_START_DATE_QUERY_CAPT                                       :{WHITE}Change starting year
 STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Scale warning
 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}Resizing source map too much is not recommended. Continue with the generation?
+STR_TOWN_LAYOUT_WARNING_CAPTION                                 :{WHITE}Town layout warning
+STR_TOWN_LAYOUT_WARNING_MESSAGE                                 :{YELLOW}The town layout "no more roads" is not recommended. Continue with the generation?
 STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
 STR_HEIGHTMAP_NAME                                              :{BLACK}Heightmap name:
 STR_HEIGHTMAP_SIZE                                              :{BLACK}Size: {ORANGE}{NUM} x {NUM}
--- a/src/lang/esperanto.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/esperanto.txt	Wed May 09 20:22:49 2007 +0000
@@ -1098,6 +1098,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Skroli mapon
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Malaktiva
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Mapskrolrada rapido: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Aŭtomate paŭzu startante novan ludon: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Trajna maksimumo por ĉiu ludanto: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Vojveturila maksimumo por ĉiu ludanto: {ORANGE}{STRING}
@@ -1131,6 +1132,15 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Permesu aĉetadon de dividaĵoj en aliaj kompanioj
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Tirante metu signalojn je ĉiuj: {ORANGE}{STRING} kvadrado(j)
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Aŭtomate konstruu semaforojn antaŭ: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}La urbaspekto "sen pliaj vojoj" ne validas en la scenarkreilo
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Elektu urbvojan aspekton: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :sen pliaj vojoj
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :defaŭlte
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :pli bonaj vojoj
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :kvadrataro de 2x2
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :kvadrataro de 3x3
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Loko de ĉefa ilbreto: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Maldekstre
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Centre
@@ -2038,6 +2048,7 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :Neniu
+STR_NUM_VERY_LOW                                                :Tre malalte
 STR_6816_LOW                                                    :Malalte
 STR_6817_NORMAL                                                 :Normale
 STR_6818_HIGH                                                   :Alte
@@ -3103,6 +3114,8 @@
 STR_START_DATE_QUERY_CAPT                                       :{WHITE}Ŝanĝu komencjaron
 STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Skala averto
 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}Ne rekomendindas tro ŝanĝi la grandecon de la mapo. Ĉu daŭrigi la generadon?
+STR_TOWN_LAYOUT_WARNING_CAPTION                                 :{WHITE}Urbaspekta averto
+STR_TOWN_LAYOUT_WARNING_MESSAGE                                 :{YELLOW}La urbaspekto "sen pliaj vojoj" ne estas rekomendata. Ĉu plugeneri?
 STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
 STR_HEIGHTMAP_NAME                                              :{BLACK}Mapa nomo:
 STR_HEIGHTMAP_SIZE                                              :{BLACK}Grandeco: {ORANGE}{NUM} x {NUM}
--- a/src/lang/estonian.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/estonian.txt	Wed May 09 20:22:49 2007 +0000
@@ -1197,6 +1197,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Keri kaarti
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Väljas
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Kaarti kerimisratta kiirus: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Automaatne mängu peatamine uue mängu alustamisel: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Maks. rongide arv mängija kohta: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Suurim maanteesõidukite arv mängija kohta: {ORANGE}{STRING}
@@ -2508,7 +2509,7 @@
 STR_80A5_UHL_WATER_TANKER                                       :Uhl veeveok
 STR_80A6_BALOGH_WATER_TANKER                                    :Balogh veeveok
 STR_80A7_MPS_WATER_TANKER                                       :MPS veeveok
-STR_80A8_BALOGH_FRUIT_TRUCK                                     :Balogh veeveok
+STR_80A8_BALOGH_FRUIT_TRUCK                                     :Balogh puuviljaveok
 STR_80A9_UHL_FRUIT_TRUCK                                        :Uhl puuviljaveok
 STR_80AA_KELLING_FRUIT_TRUCK                                    :Kelling puuviljaveok
 STR_80AB_BALOGH_RUBBER_TRUCK                                    :Balogh kummiveok
--- a/src/lang/finnish.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/finnish.txt	Wed May 09 20:22:49 2007 +0000
@@ -1097,6 +1097,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Vieritä karttaa
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Pois
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Rullan nopeus: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Uusi peli alkaa pysäytettynä: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Junia/pelaaja: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Ajoneuvoja/pelaaja: {ORANGE}{STRING}
@@ -1130,6 +1131,15 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Salli osakkeiden ostaminen muista yhtiöistä
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Vedettäessä aseta opastimien väleiksi: {ORANGE}{STRING} ruutu(a)
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Rakenna opasteet automaattisesti ennen: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}Tiekaavaa "ei uusia teitä" ei voi käyttää editorissa
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Valitse tiekaava: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :ei uusia teitä
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :oletus
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :parempia teitä
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :2x2 ruudukko
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :3x3 ruudukko
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Päätyökalupalkin sijainti: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :vasen
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :keskellä
@@ -2037,6 +2047,7 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :Ei mitään
+STR_NUM_VERY_LOW                                                :Erittäin alhainen
 STR_6816_LOW                                                    :Matala
 STR_6817_NORMAL                                                 :Normaali
 STR_6818_HIGH                                                   :Korkea
@@ -3102,6 +3113,8 @@
 STR_START_DATE_QUERY_CAPT                                       :{WHITE}Vaihda aloitusvuosi
 STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Mittakaava-varoitus
 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}Lähdekartan koon liiallinen muuttaminen ei ole suositeltavaa. Haluatko jatkaa?
+STR_TOWN_LAYOUT_WARNING_CAPTION                                 :{WHITE}Varoitus tiekaavasta
+STR_TOWN_LAYOUT_WARNING_MESSAGE                                 :{YELLOW}Tiekaavaa "ei uusia teitä" ei suositella. Jatketaanko?
 STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
 STR_HEIGHTMAP_NAME                                              :{BLACK}Korkeuskartan nimi:
 STR_HEIGHTMAP_SIZE                                              :{BLACK}Koko: {ORANGE}{NUM} x {NUM}
--- a/src/lang/french.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/french.txt	Wed May 09 20:22:49 2007 +0000
@@ -1098,6 +1098,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Défilement de la carte
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Désactivé
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Vitesse de défilement avec molette: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Pause automatique en début de nouvelle partie: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Nombre de trains max. par joueur: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Nombre de véhicules routiers max. par joueur: {ORANGE}{STRING}
@@ -1131,6 +1132,15 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Permettre d'acheter des actions d'autres compagnies
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Espacements des signaux en mode drag & drop : {ORANGE}{STRING} case(s)
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Construire automatiquement des sémaphores avant: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}Le schéma de ville "pas de routes" n'est pas autorisé dans l'éditeur de scénario
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Choisir un schéma de ville: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :pas de routes
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :défaut
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :meilleures routes
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :grille 2x2
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :grille 3x3
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Position de la barre d'outils principale: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :À gauche
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Centrée
@@ -2038,6 +2048,7 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :Aucune
+STR_NUM_VERY_LOW                                                :Très bas
 STR_6816_LOW                                                    :Bas
 STR_6817_NORMAL                                                 :Normal
 STR_6818_HIGH                                                   :Élevé
@@ -3103,6 +3114,8 @@
 STR_START_DATE_QUERY_CAPT                                       :{WHITE}Modifier l'année de départ
 STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Avertissement de redimensionnement
 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}Trop redimensionner la carte source n'est pas recommandé. Continuer la génération ?
+STR_TOWN_LAYOUT_WARNING_CAPTION                                 :{WHITE}Avertissement schéma de ville
+STR_TOWN_LAYOUT_WARNING_MESSAGE                                 :{YELLOW}Le schéma de ville "pas de routes" n'est pas recommandé.  Voulez-vous poursuivre la génération?
 STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
 STR_HEIGHTMAP_NAME                                              :{BLACK}Nom de la carte d'altitude :
 STR_HEIGHTMAP_SIZE                                              :{BLACK}Taille: {ORANGE}{NUM} x {NUM}
--- a/src/lang/german.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/german.txt	Wed May 09 20:22:49 2007 +0000
@@ -1097,6 +1097,8 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_ZOOM                             :Karte vergrößern
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Kartenansicht verschieben
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Aus
+STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Scrollradgeschwindigkeit auf der Karte: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Automatische Pause bei Spielstart: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Maximale Anzahl der Züge pro Spieler: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Maximale Anzahl der Straßenfahrzeuge pro Spieler: {ORANGE}{STRING}
@@ -1130,6 +1132,15 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Erlaube Anteile an anderen Firmen zu kaufen
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Errichte Signale alle {ORANGE}{STRING} Felder beim Ziehen mit der Maus
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Automatischer Bau von Formsignalen bis: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}Der Stadtaufbau "keine weiteren Straßen" ist im Szenarioeditor nicht möglich
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Wähle den Stadtstraßenaufbau: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :keine weiteren Straßen
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :Vorgabe
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :bessere Straßen
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :2x2 Gitter
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :3x3 Gitter
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Position der Werkzeugleiste: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Links
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Mitte
@@ -2037,6 +2048,7 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :Keine
+STR_NUM_VERY_LOW                                                :Sehr niedrig
 STR_6816_LOW                                                    :Niedrig
 STR_6817_NORMAL                                                 :Normal
 STR_6818_HIGH                                                   :Hoch
@@ -3102,6 +3114,8 @@
 STR_START_DATE_QUERY_CAPT                                       :{WHITE}Ändere Startjahr
 STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Skalierungswarnung
 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}Zu starke Skalierung der Karte ist nicht empfohlen. Trotzdem Generierung fortsetzen?
+STR_TOWN_LAYOUT_WARNING_CAPTION                                 :{WHITE}Städtebauwarnung
+STR_TOWN_LAYOUT_WARNING_MESSAGE                                 :{YELLOW}Der Stadtaufbau "keine weiteren Straßen" ist nicht empfohlen. Mit der Generierung fortfahren?
 STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
 STR_HEIGHTMAP_NAME                                              :{BLACK}Reliefkartenname:
 STR_HEIGHTMAP_SIZE                                              :{BLACK}Größe: {ORANGE}{NUM} x {NUM}
--- a/src/lang/hungarian.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/hungarian.txt	Wed May 09 20:22:49 2007 +0000
@@ -1163,6 +1163,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Térkép mozgatás
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Ki
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Scrollgomb sebessége a térképen: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Automatikus pause-mode új játék esetén: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Maximum vonat játékosonként: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Maximum közúti jármű játékosonként: {ORANGE}{STRING}
@@ -1196,6 +1197,15 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Másik cégekből részvényt lehet vásárolni
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Amikor megragadom helyezzen lámpákat minden {ORANGE}{STRING}. mezőre
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Automatikusan szemafor épüljön eddig: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}A "nincs több út" városkinézeti séma a pályaszerkesztőben nem elérhető
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Válassz városi úthálózat-sémát: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :nincs több út
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :alapértelmezett
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :jobb utak
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :2x2-es háló
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :3x3-as háló
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}A fő eszközsor helye: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Balra
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Középen
@@ -2140,6 +2150,7 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :Egyiksem
+STR_NUM_VERY_LOW                                                :Nagyon kevés
 STR_6816_LOW                                                    :Kevés
 STR_6817_NORMAL                                                 :Normál
 STR_6818_HIGH                                                   :Sok
@@ -3205,6 +3216,8 @@
 STR_START_DATE_QUERY_CAPT                                       :{WHITE}Kezdő év megváltoztatása
 STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Átméretezési figyelmeztetés
 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}A forrás térkép túlságosan nagy mértékű átméretezése nem javasolt. Folytatod mégis?
+STR_TOWN_LAYOUT_WARNING_CAPTION                                 :{WHITE}Városkinézeti figyelmeztetés
+STR_TOWN_LAYOUT_WARNING_MESSAGE                                 :{YELLOW}A "nincs több út" városkinézeti séma ellenjavallott. Biztosan folytatod a generálást?
 STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
 STR_HEIGHTMAP_NAME                                              :{BLACK}Magasságtérkép neve:
 STR_HEIGHTMAP_SIZE                                              :{BLACK}Méret: {ORANGE}{NUM} x {NUM}
--- a/src/lang/italian.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/italian.txt	Wed May 09 20:22:49 2007 +0000
@@ -1099,6 +1099,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Scorri la mappa
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Off
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Velocità rotellina mappa: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Metti in pausa all'inizio di una nuova partita: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Max treni per giocatore: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Max automezzi per giocatore: {ORANGE}{STRING}
@@ -1132,6 +1133,15 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Permetti l'acquisto di azioni di altre compagnie
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Trascinando il cursore, piazza i segnali ogni: {ORANGE}{STRING} quadrato/i
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Costruisci automaticamente i semafori prima del: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}L'opzione "Nessuna nuova strada" non è valida nell'editor di scenari
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Disposizione delle strade cittadine: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :Nessuna nuova strada
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :Predefinita
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :Pianta migliorata
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :Griglia 2x2
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :Griglia 3x3
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Posizione barra degli strumenti principale: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Sinistra
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Centro
@@ -1386,7 +1396,7 @@
 STR_NETWORK_LANG_FRENCH                                         :Francese
 ############ End of leave-in-this-order
 
-STR_NETWORK_GAME_LOBBY                                          :{WHITE}Stanza principale partite multigiocatore
+STR_NETWORK_GAME_LOBBY                                          :{WHITE}Stanza principale partita multigiocatore
 
 STR_NETWORK_PREPARE_TO_JOIN                                     :{BLACK}Preparazione all'ingresso in:   {ORANGE}{STRING}
 STR_NETWORK_COMPANY_LIST_TIP                                    :{BLACK}Elenco di tutte le compagnie attualmente nella partita. È possibile unirsi ad una di esse o fondarne una nuova se è disponibile un posto
@@ -2039,6 +2049,7 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :Nessuno
+STR_NUM_VERY_LOW                                                :Molto basso
 STR_6816_LOW                                                    :Basso
 STR_6817_NORMAL                                                 :Normale
 STR_6818_HIGH                                                   :Alto
@@ -2050,25 +2061,9 @@
 STR_681E_FAST                                                   :Veloce
 STR_681F_VERY_FAST                                              :Molto veloce
 STR_VERY_LOW                                                    :Molto basso
-STR_VERY_LOW.ms                                                 :Molto basso
-STR_VERY_LOW.mp                                                 :Molto bassi
-STR_VERY_LOW.fp                                                 :Molto basse
-STR_VERY_LOW.fs                                                 :Molto bassa
 STR_6820_LOW                                                    :Basso
-STR_6820_LOW.ms                                                 :Basso
-STR_6820_LOW.mp                                                 :Bassi
-STR_6820_LOW.fs                                                 :Bassa
-STR_6820_LOW.fp                                                 :Basse
 STR_6821_MEDIUM                                                 :Medio
-STR_6821_MEDIUM.ms                                              :Medio
-STR_6821_MEDIUM.mp                                              :Medi
-STR_6821_MEDIUM.fs                                              :Media
-STR_6821_MEDIUM.fp                                              :Medie
 STR_6822_HIGH                                                   :Alto
-STR_6822_HIGH.ms                                                :Alto
-STR_6822_HIGH.mp                                                :Alti
-STR_6822_HIGH.fs                                                :Alta
-STR_6822_HIGH.fp                                                :Alte
 STR_6823_NONE                                                   :Nessuno
 STR_6824_REDUCED                                                :Ridotti
 STR_6825_NORMAL                                                 :Normali
@@ -2180,7 +2175,7 @@
 STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
 STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Compagnia di trasporti in difficolta!
-STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}La {COMPANY} verrà venduta o dichiarerà bancarotta a meno che le prestazioni non miglioreranno presto!
+STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}La {COMPANY} verrà venduta o dichiarerà bancarotta a meno che le prestazioni non migliorino presto!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Presidente)
 STR_7059_TRANSPORT_COMPANY_MERGER                               :{BLACK}{BIGFONT}Fusione tra compagnie di trasporti!
 STR_705A_HAS_BEEN_SOLD_TO_FOR                                   :{BLACK}{BIGFONT}La {COMPANY} è stata venduta alla {COMPANY} per {CURRENCY}!
@@ -3120,6 +3115,8 @@
 STR_START_DATE_QUERY_CAPT                                       :{WHITE}Cambia l'anno di inizio
 STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Avviso scala
 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}Ridimensionare di molto l'heightmap sorgente non è consigliabile. Continuare con la generazione?
+STR_TOWN_LAYOUT_WARNING_CAPTION                                 :{WHITE}Avviso sulla disposizione delle strade
+STR_TOWN_LAYOUT_WARNING_MESSAGE                                 :{YELLOW}L'opzione "Nessuna nuova strada" non è raccomandata. Proseguire con la generazione?
 STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
 STR_HEIGHTMAP_NAME                                              :{BLACK}Nome heightmap:
 STR_HEIGHTMAP_SIZE                                              :{BLACK}Dim.: {ORANGE}{NUM} x {NUM}
--- a/src/lang/japanese.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/japanese.txt	Wed May 09 20:22:49 2007 +0000
@@ -1097,6 +1097,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :地図をスクロール
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :切
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}地図のスクロール速度:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}新規ゲームを開始したときに自動的にポーズ:{ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}一人のプレヤーの列車数上限:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}一人のプレヤーの道路車両数上限:{ORANGE}{STRING}
@@ -1130,6 +1131,8 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}他の会社が所有している株式の購入を入にする
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}ドラッグするときの信号設備頻度:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}次の年まで腕木式信号を建設:{ORANGE}{STRING}
+
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}主のツールバーの位置:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :左
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :中位
@@ -2037,6 +2040,7 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :なし
+STR_NUM_VERY_LOW                                                :特に低い
 STR_6816_LOW                                                    :低い
 STR_6817_NORMAL                                                 :通常
 STR_6818_HIGH                                                   :高い
--- a/src/lang/korean.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/korean.txt	Wed May 09 20:22:49 2007 +0000
@@ -1098,6 +1098,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :맵 스크롤
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :끄기
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}맵 스크롤 속도: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}새로운 게임 시작할 때 자동으로 일시정지: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}최대 열차 수: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}최대 자동차 수: {ORANGE}{STRING}
@@ -1131,6 +1132,15 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}다른 회사가 주식을 사는 것을 허용
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}드래그 할때 신호등을 매 {ORANGE}{STRING}타일마다 설치
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}자동으로 신호기 설치 : {ORANGE}{STRING} 이전에
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}도시설계 "도로건설 안함"은 시나리오 에디터에서 유효하지 않습니다
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}도시도로 설계: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :도로건설 안함
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :기본값
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :개선된 도로
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :2x2 칸
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :3x3 칸
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}주메뉴의 위치 : {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :왼쪽
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :가운데
@@ -2038,6 +2048,7 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :없음
+STR_NUM_VERY_LOW                                                :매우 적음
 STR_6816_LOW                                                    :낮음
 STR_6817_NORMAL                                                 :보통
 STR_6818_HIGH                                                   :높음
@@ -3103,6 +3114,8 @@
 STR_START_DATE_QUERY_CAPT                                       :{WHITE}시작 년도를 변경합니다.
 STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}맵 크기에 대한 경고
 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}맵 자원의 크기를 너무 키우는 것은 좋지 않습니다. 생성을 계속하시겠습니까?
+STR_TOWN_LAYOUT_WARNING_CAPTION                                 :{WHITE}도시 설계 경고
+STR_TOWN_LAYOUT_WARNING_MESSAGE                                 :{YELLOW}도시 설계 "도로건설 안함"은 추천하지 않습니다. 생성을 계속 하시겠습니까?
 STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
 STR_HEIGHTMAP_NAME                                              :{BLACK}DEM지형 이름:
 STR_HEIGHTMAP_SIZE                                              :{BLACK}크기: {ORANGE}{NUM} x {NUM}
--- a/src/lang/norwegian_nynorsk.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/norwegian_nynorsk.txt	Wed May 09 20:22:49 2007 +0000
@@ -752,6 +752,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Liten
 STR_02A2_MEDIUM                                                 :{BLACK}Middels
 STR_02A3_LARGE                                                  :{BLACK}Stor
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}By
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Vel storleik på by
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Bystorleik:
 
@@ -1095,8 +1096,9 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLLING                        :{LTBLUE}Funksjonen til scrollhjulet: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SCROLLWHEEL_ZOOM                             :Zoom kart
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Scroll kart
-STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Av
+STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :av
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Fart på rullehjul: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Automatisk pause når ein startar nytt spel: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Maks antal tog per speler: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Maks antal køyretøy per spelar: {ORANGE}{STRING}
@@ -1130,12 +1132,30 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Tillat kjøping av aksjar i andre selskap
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Ved opptrekking, plasser signal hver: {ORANGE}{STRING} rute{P "" r}
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Bygg semaforer automatisk før: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}Byoppsettet " ingen fleire vegar" kan ikkje brukast i scenarioredigeringsprogrammet
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Velg oppsett for byvegar: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :Ingen fleire vegar
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :standard
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :betre vegar
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :2x2 rutenett
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :3x3 rutenett
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Plassering av hovudverktøylinje: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Venstre
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Midtstilt
 STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT                            :Høgre
 STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}Knipseradius for vindauge: {ORANGE}{STRING} px
 STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}Knipseradius for vindauge: {ORANGE}deaktivert
+STR_CONFIG_PATCHES_TOWN_GROWTH                                  :{LTBLUE}Byen sin vekseProporsjonfart: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_GROWTH_NONE                             :Ingen
+STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW                             :Sakte
+STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL                           :Normal
+STR_CONFIG_PATCHES_TOWN_GROWTH_FAST                             :Rask
+STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Særs rask
+STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Proporsjon på byar som vil vekse dobbelt så fort: {ORANGE}1 av {STRING}
+STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Proporsjon på byar som vil vekse dobbelt så fort: {ORANGE}Ingen
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Faktor for multiplikasjon av bystorleik: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Grensesnitt
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Konstruksjon
@@ -1454,7 +1474,7 @@
 STR_NETWORK_ERR_CLIENT_NOT_EXPECTED                             :mottok merkeleg pakke
 STR_NETWORK_ERR_CLIENT_WRONG_REVISION                           :feil versjon
 STR_NETWORK_ERR_CLIENT_NAME_IN_USE                              :namnet er brukt av nokon andre
-STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD                           :feil passord til spelet
+STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD                           :feil passord for til spelet
 STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH                          :feil spelar-id i DoCommand
 STR_NETWORK_ERR_CLIENT_KICKED                                   :sparka ut av tenaren
 STR_NETWORK_ERR_CLIENT_CHEATER                                  :freista å jukse
@@ -2028,6 +2048,7 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :Ingen
+STR_NUM_VERY_LOW                                                :Særs låg
 STR_6816_LOW                                                    :Lite
 STR_6817_NORMAL                                                 :Normal
 STR_6818_HIGH                                                   :Høgt
@@ -2779,7 +2800,7 @@
 STR_9841_CAN_T_REFIT_SHIP                                       :{WHITE}Kan ikkje bygge om skip...
 STR_9842_REFITTABLE                                             :(ombyggbart)
 STR_GO_TO_SHIP_DEPOT                                            :Seil til {TOWN} skipsdepot
-SERVICE_AT_SHIP_DEPOT                                           :Vedlikehald ved {TOWN} skipsdepot
+SERVICE_AT_SHIP_DEPOT                                           :Vedlikehald ved {TOWN} Skipsdepot
 
 ##id 0xA000
 STR_A000_AIRPORTS                                               :{WHITE}Flyplassar
@@ -3093,6 +3114,8 @@
 STR_START_DATE_QUERY_CAPT                                       :{WHITE}Endre startår
 STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Skalaåtvaring
 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}Å endre storleiken på kjeldekartet for mykje er ikkje anbefalt. Vil du halde fram med genereringa?
+STR_TOWN_LAYOUT_WARNING_CAPTION                                 :{WHITE}Åtvaring for byoppsett
+STR_TOWN_LAYOUT_WARNING_MESSAGE                                 :{YELLOW}Byoppsettet "ingen fleire vegar" er ikkje anbefalt.  Hald fram med bygginga?
 STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
 STR_HEIGHTMAP_NAME                                              :{BLACK}Høgdekartnamn:
 STR_HEIGHTMAP_SIZE                                              :{BLACK}Storleik: {ORANGE}{NUM} x {NUM}
@@ -3155,4 +3178,13 @@
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Overfør kreditt: {LTBLUE}{CURRENCY}
 STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...denne vegen eigast av ein by
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...vegen peiker feil veg
 
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Gjennomsynsval
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Byt gjennomsyn for stasjonssktilt
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Byt gjennomsyn for tre
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Byt gjennomsyn for hus
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Byt gjennomsyn for industriar
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Byt gjennomsyn for bygningar som kan byggast, til dømes depot og vegmerker
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Byt gjennomsyn for bruer
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Byt gjennomsyn for bygningar som fyrtårn og antenner, kanskje i framtida for fine effekter
--- a/src/lang/polish.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/polish.txt	Wed May 09 20:22:49 2007 +0000
@@ -1184,6 +1184,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Przesuń widok
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Rolka wyłączona
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Prędkość przesuwania widoku: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Automatycznie włącz pauzę tworząc nową grę: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Maks. liczba pociągów na gracza: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Maks. liczba samochodów na gracza: {ORANGE}{STRING}
@@ -1217,6 +1218,15 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Pozwól kupować odziały w innych firmach
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}W trakcie przeciągania ustaw sygnały co: {ORANGE}{STRING} kratk{P e i ek}
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Automatycznie buduj semafory przed: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}Plan sieci dróg "bez nowych dróg" nie jest poprawny dla edytora scenariuszy
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Wybierz plan sieci dróg miejskich: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :bez nowych dróg
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :standardowy
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :lepsze drogi
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :siatka 2x2
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :siatka 3x3
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Pozycja głównego paska narzędzi: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Z lewej strony
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Wyśrodkowane
--- a/src/lang/portuguese.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/portuguese.txt	Wed May 09 20:22:49 2007 +0000
@@ -386,7 +386,7 @@
 STR_SORT_BY_FACILITY                                            :Tipo de Estação
 STR_SORT_BY_WAITING                                             :Valor da carga em espera
 STR_SORT_BY_RATING_MAX                                          :Avaliação de carga
-STR_ENGINE_SORT_ENGINE_ID                                       :Ordenação clássica
+STR_ENGINE_SORT_ENGINE_ID                                       :EngineID (ordernação clássica)
 STR_ENGINE_SORT_COST                                            :Custo
 STR_ENGINE_SORT_POWER                                           :Potência
 STR_ENGINE_SORT_INTRO_DATE                                      :Data de Introdução
@@ -751,6 +751,7 @@
 STR_02A1_SMALL                                                  :{BLACK}Pequena
 STR_02A2_MEDIUM                                                 :{BLACK}Média
 STR_02A3_LARGE                                                  :{BLACK}Grande
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}Cidade
 STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Seleccione o tamanho da cidade
 STR_02A5_TOWN_SIZE                                              :{YELLOW}Tamanho da cidade:
 
@@ -1048,7 +1049,7 @@
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Permitir sempre aeroportos pequenos: {ORANGE}{STRING}
 
-STR_CONFIG_PATCHES_WARN_LOST_TRAIN                              :{LTBLUE}Avisar quando comboios andam perdidos: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_WARN_LOST_TRAIN                              :{LTBLUE}Alertar em caso de perda do combóio: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ORDER_REVIEW                                 :{LTBLUE}Analisar ordens dos veículos: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ORDER_REVIEW_OFF                             :Não
 STR_CONFIG_PATCHES_ORDER_REVIEW_EXDEPOT                         :Sim, mas excluir veículos parados
@@ -1085,7 +1086,7 @@
 STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}Manutenção automática de helicópteros em heliportos: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Ligar ferramentas de paisagem com as de construção: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}Ao deslizar com o rato, mover a vista na direcção oposta: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}Mostrar medidas ao usar ferramentas de construção: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}Mostrar uma dica de medição ao utilizar várias ferramentas de construção: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}Mostrar estampagens da companhia: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES_NONE                                :Nenhum
 STR_CONFIG_PATCHES_LIVERIES_OWN                                 :Própria companhia
@@ -1096,6 +1097,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Percorrer mapa
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Desligado
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Velocidade do scrollwheel no mapa: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Pausa automática ao iniciar um novo jogo: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Máximo de comboios por jogador: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Máximo de veículos de estrada por jogador: {ORANGE}{STRING}
@@ -1129,12 +1131,30 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Permite comprar acções de outras companhias
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Ao arrastar colocar sinais a cada: {ORANGE}{STRING} quadrado(s)
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Construir automaticamente semáforos antes de: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}A disposição de cidade "sem mais estradas" não é válida no editor de cenários
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Seleccionar disposição das estradas na cidade: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :sem mais estradas
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :por defeito
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :estradas melhores
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :grelha 2x2
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :grelha 3x3
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Posição da barra de ferramentas principal: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Esquerda
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Centro
 STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT                            :Direita
 STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}Raio de atracção de janelas: {ORANGE}{STRING} px
 STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}Raio de atracção de janelas: {ORANGE}desactivado
+STR_CONFIG_PATCHES_TOWN_GROWTH                                  :{LTBLUE}Ritmo de crescimento de cidades: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_GROWTH_NONE                             :Nenhum
+STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW                             :Lento
+STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL                           :Normal
+STR_CONFIG_PATCHES_TOWN_GROWTH_FAST                             :Rápido
+STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Muito Rápido
+STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Proporção de cidades que se tornarão metrópoles: {ORANGE}1 em {STRING}
+STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Proporção de cidades que se tornarão metrópoles: {ORANGE}Nenhuma
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Multiplicador inicial para dimensão da cidade: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Interface
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Construção
@@ -2027,6 +2047,7 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :Nenhum
+STR_NUM_VERY_LOW                                                :Muito baixo
 STR_6816_LOW                                                    :Baixo
 STR_6817_NORMAL                                                 :Normal
 STR_6818_HIGH                                                   :Alto
@@ -2557,9 +2578,9 @@
 STR_8826_GO_TO                                                  :{BLACK}Ir Para
 STR_8827_FULL_LOAD                                              :{BLACK}Carga
 STR_8828_UNLOAD                                                 :{BLACK}Descarga
-STR_REFIT                                                       :{BLACK}Reconverter
-STR_REFIT_TIP                                                   :{BLACK}Escolha o tipo de carga para reconverter nesta ordem. Control click para remover a instrução de reconversão
-STR_REFIT_ORDER                                                 :(Reconverter para {STRING})
+STR_REFIT                                                       :{BLACK}Converter
+STR_REFIT_TIP                                                   :{BLACK}Seleccionar o tipo de carga a converter nesta ordem. Pressionar Ctrl e botão-esquerdo do rato para remover instrução de conversão
+STR_REFIT_ORDER                                                 :(Converter para {STRING})
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Ordens)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Fim de Ordens - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
@@ -3092,6 +3113,8 @@
 STR_START_DATE_QUERY_CAPT                                       :{WHITE}Mudar ano de início
 STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Aviso de redimensionamento
 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}Redimensionar muito o mapa não é recomendado. Continuar com a criação?
+STR_TOWN_LAYOUT_WARNING_CAPTION                                 :{WHITE}Aviso de disposição da cidade
+STR_TOWN_LAYOUT_WARNING_MESSAGE                                 :{YELLOW}A disposição de cidade "sem mais estradas" não é recomendado. Continuar a geração?
 STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
 STR_HEIGHTMAP_NAME                                              :{BLACK}Nome mapa de alt.:
 STR_HEIGHTMAP_SIZE                                              :{BLACK}Tamanho: {ORANGE}{NUM} x {NUM}
@@ -3153,5 +3176,14 @@
 ########
 
 STR_FEEDER_CARGO_VALUE                                          :{BLACK}Créditos de Transferência: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...esta estrada é detida pela cidade
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...estrada orientada na direcção incorrecta
 
 STR_TRANSPARENCY_TOOLB                                          :{WHITE}Opções de Transparência
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Comutar transparência para sinais das estações
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Comutar transparência das árvores
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Comutar transparência das casas
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Comutar transparência das indústrias
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Comutar transparência para edificações como estações, depósitos, pontos-de-passagem e catenárias
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Comutar transparência para pontes
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Comutar transparência para estruturas como faróis-terrestres e antenas (talvez, no futuro, para embelezamentos)
--- a/src/lang/romanian.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/romanian.txt	Wed May 09 20:22:49 2007 +0000
@@ -1097,6 +1097,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Ruleaza harta
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :inactiva
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Viteza harta la rotita mouse: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}La pornirea unui joc nou, pune-l pe pauza: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Nr. max. de trenuri per jucãtor: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Nr. max. de autovehicule pentru un jucãtor: {ORANGE}{STRING}
@@ -1130,6 +1131,15 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Permite cumpararea de actiuni de la alte companii
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Plasare automatã a semnalelor la fiecare: {ORANGE}{STRING} pãtrãtele
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Construieste automat semafaore înainte de: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}Apectul de oras "fara alte drumuri" nu este valid in editorul de scenarii
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Alege aspect drum-de-oras: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :fara alte drumuri
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :implicit
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :drumuri mai bune
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :grila 2x2
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :grila 3x3
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Pozitia listei cu instrumente: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :stânga
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :centru
@@ -2037,6 +2047,7 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :zero
+STR_NUM_VERY_LOW                                                :Foarte putine
 STR_6816_LOW                                                    :scãzut
 STR_6817_NORMAL                                                 :normal
 STR_6818_HIGH                                                   :ridicat
@@ -3102,6 +3113,8 @@
 STR_START_DATE_QUERY_CAPT                                       :{WHITE}Modifica inceputul anului
 STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Avertisment de scala
 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}Redimensionarea excesiva a hartii nu este recomandata. Continui cu generarea?
+STR_TOWN_LAYOUT_WARNING_CAPTION                                 :{WHITE}Avertisment aspect oras
+STR_TOWN_LAYOUT_WARNING_MESSAGE                                 :{YELLOW}Aspectul de oras "fara alte drumuri" nu este recomanat. Continui generarea?
 STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
 STR_HEIGHTMAP_NAME                                              :{BLACK}Nume harta inaltimi:
 STR_HEIGHTMAP_SIZE                                              :{BLACK}Dimensiune: {ORANGE}{NUM} x {NUM}
--- a/src/lang/russian.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/russian.txt	Wed May 09 20:22:49 2007 +0000
@@ -158,7 +158,7 @@
 STR_00B3_MESSAGE_FROM                                           :{YELLOW}Сообщение из {STRING}
 STR_POPUP_CAUTION_CAPTION                                       :{WHITE}Осторожно!
 STR_00B4_CAN_T_DO_THIS                                          :{WHITE}Это невозможно
-STR_00B5_CAN_T_CLEAR_THIS_AREA                                  :{WHITE}Невозможно расчистить
+STR_00B5_CAN_T_CLEAR_THIS_AREA                                  :{WHITE}Невозможно расчистить...
 STR_00B6_ORIGINAL_COPYRIGHT                                     :{BLACK}Оригинальные авторские права {COPYRIGHT} 1995 Chris Sawyer, Все права защищены
 STR_00B7_VERSION                                                :{BLACK}OpenTTD v{REV}
 STR_00BA_COPYRIGHT_OPENTTD                                      :{BLACK}OpenTTD {COPYRIGHT}2002-2007 Команда разработчиков OpenTTD
@@ -195,7 +195,7 @@
 STR_00E1_TOO_MANY_VEHICLES_IN_GAME                              :{WHITE}Слишком много транспорта в игре
 STR_00E2                                                        :{BLACK}{COMMA}
 STR_00E3                                                        :{RED}{COMMA}
-STR_00E4_LOCATION                                               :{BLACK}Позиция
+STR_00E4_LOCATION                                               :{BLACK}Обзор
 STR_00E5_CONTOURS                                               :Контуры
 STR_00E6_VEHICLES                                               :Транспорт
 STR_00E7_INDUSTRIES                                             :Промышленность
@@ -221,7 +221,7 @@
 STR_00FB_POWER_STATION                                          :{BLACK}{TINYFONT}Электростанция
 STR_00FC_FOREST                                                 :{BLACK}{TINYFONT}Лес
 STR_00FD_SAWMILL                                                :{BLACK}{TINYFONT}Лесопилка
-STR_00FE_OIL_REFINERY                                           :{BLACK}{TINYFONT}Нефтеперегонный завод
+STR_00FE_OIL_REFINERY                                           :{BLACK}{TINYFONT}Нефтезавод
 STR_00FF_FARM                                                   :{BLACK}{TINYFONT}Ферма
 STR_0100_FACTORY                                                :{BLACK}{TINYFONT}Завод
 STR_0101_PRINTING_WORKS                                         :{BLACK}{TINYFONT}Типография
@@ -229,7 +229,7 @@
 STR_0103_IRON_ORE_MINE                                          :{BLACK}{TINYFONT}Шахта железной руды
 STR_0104_STEEL_MILL                                             :{BLACK}{TINYFONT}Сталелитейный завод
 STR_0105_BANK                                                   :{BLACK}{TINYFONT}Банк
-STR_0106_PAPER_MILL                                             :{BLACK}{TINYFONT}Целлюлозно-бумажный комбинат
+STR_0106_PAPER_MILL                                             :{BLACK}{TINYFONT}Бумажная фабрика
 STR_0107_GOLD_MINE                                              :{BLACK}{TINYFONT}Золотой прииск
 STR_0108_FOOD_PROCESSING_PLANT                                  :{BLACK}{TINYFONT}Пищевой завод
 STR_0109_DIAMOND_MINE                                           :{BLACK}{TINYFONT}Алмазная шахта
@@ -270,7 +270,7 @@
 STR_012C_MESSAGE                                                :{WHITE}Сообщение
 STR_012D                                                        :{WHITE}{STRING}
 STR_012E_CANCEL                                                 :{BLACK}Отмена
-STR_012F_OK                                                     :{BLACK}Хорошо
+STR_012F_OK                                                     :{BLACK}Принять
 STR_0130_RENAME                                                 :{BLACK}Переимен.
 STR_0131_TOO_MANY_NAMES_DEFINED                                 :{WHITE}Слишком много имен определено
 STR_0132_CHOSEN_NAME_IN_USE_ALREADY                             :{WHITE}Выбранное имя уже используется
@@ -284,7 +284,7 @@
 STR_OSNAME_OS2                                                  :OS/2
 STR_OSNAME_SUNOS                                                :SunOS
 
-STR_013B_OWNED_BY                                               :{WHITE}...принадлежащий {STRING}
+STR_013B_OWNED_BY                                               :{WHITE}...принадлежит {STRING}
 STR_013C_CARGO                                                  :{BLACK}Груз
 STR_013D_INFORMATION                                            :{BLACK}Информация
 STR_013E_CAPACITIES                                             :{BLACK}Вместимость
@@ -348,14 +348,14 @@
 STR_UNITS_FORCE_SI                                              :{COMMA} kN
 
 ############ range for menu starts
-STR_0154_OPERATING_PROFIT_GRAPH                                 :Текущий график доходов
+STR_0154_OPERATING_PROFIT_GRAPH                                 :График прибыли
 STR_0155_INCOME_GRAPH                                           :График дохода
-STR_0156_DELIVERED_CARGO_GRAPH                                  :Доставленные грузы
-STR_0157_PERFORMANCE_HISTORY_GRAPH                              :Рейтинг
-STR_0158_COMPANY_VALUE_GRAPH                                    :Стоимость компании
-STR_0159_CARGO_PAYMENT_RATES                                    :Оплата перевозок
-STR_015A_COMPANY_LEAGUE_TABLE                                   :Порядковая таблица компаний
-STR_PERFORMANCE_DETAIL_MENU                                     :Подробные данные
+STR_0156_DELIVERED_CARGO_GRAPH                                  :График доставленного груза
+STR_0157_PERFORMANCE_HISTORY_GRAPH                              :График рейтинга компаний
+STR_0158_COMPANY_VALUE_GRAPH                                    :График стоимости компаний
+STR_0159_CARGO_PAYMENT_RATES                                    :График оплаты перевозок
+STR_015A_COMPANY_LEAGUE_TABLE                                   :Табель о рангах
+STR_PERFORMANCE_DETAIL_MENU                                     :Рейтинг в деталях
 ############ range for menu ends
 
 STR_015B_OPENTTD                                                :{WHITE}Об OpenTTD
@@ -365,35 +365,35 @@
 STR_015F_QUIT                                                   :Выход
 STR_ABANDON_GAME_QUERY                                          :{YELLOW}Вы действительно хотите выйти из игры?
 STR_0161_QUIT_GAME                                              :{WHITE}В главное меню
-STR_SORT_ORDER_TIP                                              :{BLACK}Выбор направления сортировки (убывание/возрастание)
-STR_SORT_CRITERIA_TIP                                           :{BLACK}Выбор критерия сортировки
-STR_SORT_BY                                                     :{BLACK}Сортировать по
+STR_SORT_ORDER_TIP                                              :{BLACK}Смена направления сортировки (убывание/возрастание)
+STR_SORT_CRITERIA_TIP                                           :{BLACK}Смена критерия сортировки
+STR_SORT_BY                                                     :{BLACK}Сортировка
 
-STR_SORT_BY_POPULATION                                          :{BLACK}населению
-STR_SORT_BY_PRODUCTION                                          :{BLACK}кол-ву продукции
-STR_SORT_BY_TYPE                                                :{BLACK}типу
-STR_SORT_BY_TRANSPORTED                                         :{BLACK}перевезенной прод.
-STR_SORT_BY_NAME                                                :{BLACK}имени
-STR_SORT_BY_DROPDOWN_NAME                                       :названию
-STR_SORT_BY_DATE                                                :{BLACK}дате
-STR_SORT_BY_NUMBER                                              :номеру
-STR_SORT_BY_PROFIT_LAST_YEAR                                    :прибыли в прошлом году
-STR_SORT_BY_PROFIT_THIS_YEAR                                    :прибыли в этом году
-STR_SORT_BY_AGE                                                 :возрасту
-STR_SORT_BY_RELIABILITY                                         :надежности
-STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE                        :вместимости грузов
-STR_SORT_BY_MAX_SPEED                                           :макс. скорости
-STR_SORT_BY_MODEL                                               :модели
-STR_SORT_BY_VALUE                                               :значению
-STR_SORT_BY_FACILITY                                            :типу станции
-STR_SORT_BY_WAITING                                             :кол-ву товара на станции
-STR_SORT_BY_RATING_MAX                                          :рейтингу грузов
+STR_SORT_BY_POPULATION                                          :{BLACK}Население
+STR_SORT_BY_PRODUCTION                                          :{BLACK}Продукция
+STR_SORT_BY_TYPE                                                :{BLACK}Тип
+STR_SORT_BY_TRANSPORTED                                         :{BLACK}Вывоз
+STR_SORT_BY_NAME                                                :{BLACK}Имя
+STR_SORT_BY_DROPDOWN_NAME                                       :Название
+STR_SORT_BY_DATE                                                :{BLACK}Дата
+STR_SORT_BY_NUMBER                                              :Номер
+STR_SORT_BY_PROFIT_LAST_YEAR                                    :Прибыль в прошлом году
+STR_SORT_BY_PROFIT_THIS_YEAR                                    :Прибыль в этом году
+STR_SORT_BY_AGE                                                 :Возраст
+STR_SORT_BY_RELIABILITY                                         :Надежность
+STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE                        :Вместимость груза
+STR_SORT_BY_MAX_SPEED                                           :Максимальная скорость
+STR_SORT_BY_MODEL                                               :Модель
+STR_SORT_BY_VALUE                                               :Стоимость
+STR_SORT_BY_FACILITY                                            :Тип станции
+STR_SORT_BY_WAITING                                             :Кол-во товара на станции
+STR_SORT_BY_RATING_MAX                                          :Рейтинг грузов
 STR_ENGINE_SORT_ENGINE_ID                                       :Название
 STR_ENGINE_SORT_COST                                            :Цена
 STR_ENGINE_SORT_POWER                                           :Мощность
 STR_ENGINE_SORT_INTRO_DATE                                      :Дата постройки
-STR_ENGINE_SORT_RUNNING_COST                                    :Стоимость обслуж.
-STR_ENGINE_SORT_POWER_VS_RUNNING_COST                           :Мощн./Стоим. обслуж.
+STR_ENGINE_SORT_RUNNING_COST                                    :Цена обслуживания
+STR_ENGINE_SORT_POWER_VS_RUNNING_COST                           :Мощность/Цена обслуживания
 STR_ENGINE_SORT_CARGO_CAPACITY                                  :Вместимость
 STR_NO_WAITING_CARGO                                            :{BLACK}На станции нет грузов, ожидающих погрузки
 STR_SELECT_ALL_FACILITIES                                       :{BLACK}Выбрать все устройства
@@ -403,14 +403,14 @@
 STR_AVAILABLE_SHIPS                                             :{BLACK}Доступные суда
 STR_AVAILABLE_AIRCRAFT                                          :{BLACK}Доступные самолеты
 STR_AVAILABLE_ENGINES_TIP                                       :{BLACK}Список доступного транспорта.
-STR_MANAGE_LIST                                                 :{BLACK}Редакт. список
-STR_MANAGE_LIST_TIP                                             :{BLACK}Послать инструкции всему транспорту в списке
-STR_REPLACE_VEHICLES                                            :Замена Транспорта
-STR_SEND_TRAIN_TO_DEPOT                                         :Послать в Депо
+STR_MANAGE_LIST                                                 :{BLACK}Организация
+STR_MANAGE_LIST_TIP                                             :{BLACK}Управление транспортом, находящимся в этом списке
+STR_REPLACE_VEHICLES                                            :Замена транспорта
+STR_SEND_TRAIN_TO_DEPOT                                         :Послать в депо
 STR_SEND_ROAD_VEHICLE_TO_DEPOT                                  :Послать в гараж
-STR_SEND_SHIP_TO_DEPOT                                          :Послать в Док
-STR_SEND_AIRCRAFT_TO_HANGAR                                     :Послать в Ангар
-STR_SEND_FOR_SERVICING                                          :Послать на обслуживание
+STR_SEND_SHIP_TO_DEPOT                                          :Послать в док
+STR_SEND_AIRCRAFT_TO_HANGAR                                     :Послать в ангар
+STR_SEND_FOR_SERVICING                                          :Послать обслужить
 
 ############ range for months starts
 STR_0162_JAN                                                    :Янв
@@ -458,10 +458,10 @@
 STR_018A_CAN_T_CHANGE_SERVICING                                 :{WHITE}Невозможно изменить сервисный интервал...
 STR_018B_CLOSE_WINDOW                                           :{BLACK}Закрыть Окно
 STR_018C_WINDOW_TITLE_DRAG_THIS                                 :{BLACK}Заголовок окна - для перемещения окна тащить за него
-STR_STICKY_BUTTON                                               :{BLACK}Пометить это окно как незакрываемое для клавиши 'Закрыть все Окна'
+STR_STICKY_BUTTON                                               :{BLACK}Иммунитет от нажатия клавиши 'Закрыть все окна'
 STR_RESIZE_BUTTON                                               :{BLACK}Нажмите и тащите для изменения размера окна
 STR_SAVELOAD_HOME_BUTTON                                        :{BLACK}Кликните, чтобы перейти к текущей папке загрузки/сохранения по умолчанию
-STR_018D_DEMOLISH_BUILDINGS_ETC                                 :{BLACK}Уничтожить постройки и т.п. в квадрате земли
+STR_018D_DEMOLISH_BUILDINGS_ETC                                 :{BLACK}Уничтожить здания, постройки, траву, деревья в ячейке местности
 STR_018E_LOWER_A_CORNER_OF_LAND                                 :{BLACK}Опустить угол земли
 STR_018F_RAISE_A_CORNER_OF_LAND                                 :{BLACK}Поднять угол земли
 STR_0190_SCROLL_BAR_SCROLLS_LIST                                :{BLACK}Прокрутка вверх/вниз
@@ -482,8 +482,8 @@
 
 STR_019C_ROAD_VEHICLE                                           :Автотранспорт
 STR_019D_AIRCRAFT                                               :Воздушный транспорт
-STR_019E_SHIP                                                   :Корабли
-STR_019F_TRAIN                                                  :Поезда
+STR_019E_SHIP                                                   :Корабль
+STR_019F_TRAIN                                                  :Поезд
 STR_01A0_IS_GETTING_OLD                                         :{WHITE}{STRING} {COMMA} устарел
 STR_01A1_IS_GETTING_VERY_OLD                                    :{WHITE}{STRING} {COMMA} сильно устарел
 STR_01A2_IS_GETTING_VERY_OLD_AND                                :{WHITE}{STRING} {COMMA} сильно устарел и требует замены
@@ -577,7 +577,7 @@
 STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1                          :{BLACK}Очистка пользовательской программы
 STR_01F9_SAVE_MUSIC_SETTINGS                                    :{BLACK}Сохранить настройки музыки
 STR_01FA_CLICK_ON_MUSIC_TRACK_TO                                :{BLACK}Кликните по названию трека для добавления в пользовательскую программу
-STR_CLICK_ON_TRACK_TO_REMOVE                                    :{BLACK}Выберите трек для удаления его из данной программы (только пользовательские)
+STR_CLICK_ON_TRACK_TO_REMOVE                                    :{BLACK}Выберите дорожку для удаления из списка (только пользовательского)
 STR_01FB_TOGGLE_PROGRAM_SHUFFLE                                 :{BLACK}Вкл./Выкл. случайный выбор программы
 STR_01FC_SHOW_MUSIC_TRACK_SELECTION                             :{BLACK}Показать окно выбора музыкальных треков
 STR_01FD_CLICK_ON_SERVICE_TO_CENTER                             :{BLACK}Нажмите на маршрут для отображения предприятия/города
@@ -653,8 +653,8 @@
 STR_0241_POWER_STATION                                          :{BLACK}Электростанция
 STR_0242_SAWMILL                                                :{BLACK}Лесопилка
 STR_0243_FOREST                                                 :{BLACK}Лес
-STR_0244_OIL_REFINERY                                           :{BLACK}Нефтеобраб. завод
-STR_0245_OIL_RIG                                                :{BLACK}Буровая вышка
+STR_0244_OIL_REFINERY                                           :{BLACK}Нефтезавод
+STR_0245_OIL_RIG                                                :{BLACK}Нефтяная вышка
 STR_0246_FACTORY                                                :{BLACK}Фабрика
 STR_0247_STEEL_MILL                                             :{BLACK}Сталеплавильный завод
 STR_0248_FARM                                                   :{BLACK}Ферма
@@ -687,24 +687,24 @@
 STR_0263_CONSTRUCT_POWER_STATION                                :{BLACK}Построить электростанцию
 STR_0264_CONSTRUCT_SAWMILL                                      :{BLACK}Построить лесопилку
 STR_0265_PLANT_FOREST                                           :{BLACK}Посадить лес
-STR_0266_CONSTRUCT_OIL_REFINERY                                 :{BLACK}Построить нефтеперераб. завод
-STR_0267_CONSTRUCT_OIL_RIG_CAN_ONLY                             :{BLACK}Построить буровую платформу (возможно только у края карты)
+STR_0266_CONSTRUCT_OIL_REFINERY                                 :{BLACK}Построить нефтезавод
+STR_0267_CONSTRUCT_OIL_RIG_CAN_ONLY                             :{BLACK}Построить нефтяную вышку (только возможно у края карты)
 STR_0268_CONSTRUCT_FACTORY                                      :{BLACK}Построить фабрику
-STR_0269_CONSTRUCT_STEEL_MILL                                   :{BLACK}Построить Сталелитейный завод
+STR_0269_CONSTRUCT_STEEL_MILL                                   :{BLACK}Построить сталелитейный завод
 STR_026A_CONSTRUCT_FARM                                         :{BLACK}Построить ферму
 STR_026B_CONSTRUCT_IRON_ORE_MINE                                :{BLACK}Построить шахту железной руды
 STR_026C_CONSTRUCT_OIL_WELLS                                    :{BLACK}Построить нефтяные скважины
-STR_026D_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Построить банк (Возможно только в городе с населением более 1200)
-STR_026E_CONSTRUCT_PAPER_MILL                                   :{BLACK}Построить ЦБК
+STR_026D_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Построить банк (только возможно в городе с населением более 1200)
+STR_026E_CONSTRUCT_PAPER_MILL                                   :{BLACK}Построить бумажную фабрику
 STR_026F_CONSTRUCT_FOOD_PROCESSING                              :{BLACK}Построить пищевой завод
 STR_0270_CONSTRUCT_PRINTING_WORKS                               :{BLACK}Построить типографию
 STR_0271_CONSTRUCT_GOLD_MINE                                    :{BLACK}Построить золотой прииск
-STR_0272_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Построить банк (Возможно только в городе)
+STR_0272_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Построить банк (только возможно в городе)
 STR_0273_CONSTRUCT_LUMBER_MILL_TO                               :{BLACK}Построить лесопилку (уничтожает джунгли и производит дерево)
 STR_0274_PLANT_FRUIT_PLANTATION                                 :{BLACK}Создать фруктовую плантацию
 STR_0275_PLANT_RUBBER_PLANTATION                                :{BLACK}Создать плантацию каучука
 STR_0276_CONSTRUCT_WATER_SUPPLY                                 :{BLACK}Построить водокачку
-STR_0277_CONSTRUCT_WATER_TOWER_CAN                              :{BLACK}Построить водонапорную башню (только в городе)
+STR_0277_CONSTRUCT_WATER_TOWER_CAN                              :{BLACK}Построить водонапорную башню (только возможно в городе)
 STR_0278_CONSTRUCT_DIAMOND_MINE                                 :{BLACK}Построить алмазную шахту
 STR_0279_CONSTRUCT_COPPER_ORE_MINE                              :{BLACK}Построить шахту медной руды
 STR_027A_PLANT_COTTON_CANDY_FOREST                              :{BLACK}Посадить лес сахарной ваты
@@ -718,18 +718,18 @@
 STR_0282_CONSTRUCT_BUBBLE_GENERATOR                             :{BLACK}Построить генератор пузырьков
 STR_0283_CONSTRUCT_TOFFEE_QUARRY                                :{BLACK}Построить карьер ирисок
 STR_0284_CONSTRUCT_SUGAR_MINE                                   :{BLACK}Построить сахарную шахту
-STR_0285_CAN_T_BUILD_HERE                                       :{WHITE}Здесь нельзя создать {STRING} ...
+STR_0285_CAN_T_BUILD_HERE                                       :{WHITE}Здесь нельзя создать {STRING}...
 STR_0286_MUST_BUILD_TOWN_FIRST                                  :{WHITE}...сначала постройте город
 STR_0287_ONLY_ONE_ALLOWED_PER_TOWN                              :{WHITE}...такой объект уже есть в городе
 STR_0288_PLANT_TREES                                            :{BLACK}Сажать деревья
 STR_0289_PLACE_SIGN                                             :{BLACK}Поместить знак
-STR_028A_RANDOM_TREES                                           :{BLACK}Случайные деревья
-STR_028B_PLANT_TREES_RANDOMLY_OVER                              :{BLACK}Разместить случайные деревья на карте
+STR_028A_RANDOM_TREES                                           :{BLACK}Расставить по карте
+STR_028B_PLANT_TREES_RANDOMLY_OVER                              :{BLACK}Разместить по карте деревья случайным образом
 STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE                         :{BLACK}Разместить скалы на карте
 STR_028D_PLACE_LIGHTHOUSE                                       :{BLACK}Поставить маяк
 STR_028E_PLACE_TRANSMITTER                                      :{BLACK}Поставить передатчик
 STR_028F_DEFINE_DESERT_AREA                                     :{BLACK}Задать площадь пустыни.{}Нажмите и держите CTRL для удаления
-STR_CREATE_LAKE                                                 :{BLACK}Указать водную область.{}Создать канал, или наводнить всю окружающую область при зажатом CTRL на уровне моря.
+STR_CREATE_LAKE                                                 :{BLACK}Создать воду:{}При отжатом CTRL создаётся канал.{}При зажатом CTRL клетка на уровне моря наполняется водой.
 STR_0290_DELETE                                                 :{BLACK}Уничтожить
 STR_0291_DELETE_THIS_TOWN_COMPLETELY                            :{BLACK}Полностью уничтожить этот город
 STR_0292_SAVE_SCENARIO                                          :Сохранить сценарий
@@ -746,7 +746,7 @@
 STR_PLAY_HEIGHTMAP_HINT                                         :{BLACK}Начать новую игру, используя карту высот в качестве шаблона карты
 STR_QUIT_SCENARIO_QUERY                                         :{YELLOW}Вы уверены, что хотите выйти из этого сценария?
 STR_029C_QUIT_EDITOR                                            :{WHITE}Выход из редактора
-STR_029D_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}...может быть построен только в городах с населением не менее 1200
+STR_029D_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}...можно построить в городах с населением более 1200 жителей
 STR_029E_MOVE_THE_STARTING_DATE                                 :{BLACK}Уменьшить год начала игры на 1
 STR_029F_MOVE_THE_STARTING_DATE                                 :{BLACK}Увеличить год начала игры на 1
 STR_02A0_ENDS_OF_BRIDGE_MUST_BOTH                               :{WHITE}...оба конца моста должны опираться на землю
@@ -768,9 +768,9 @@
 STR_02BD                                                        :{BLACK}{STRING}
 STR_02BE_DEFAULT                                                :По умолчанию
 STR_02BF_CUSTOM                                                 :Свои
-STR_02C0_SAVE_CUSTOM_NAMES                                      :{BLACK}Сохранить названия транспорта
-STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION                         :{BLACK}Выберите названия транспортных средств
-STR_02C2_SAVE_CUSTOMIZED_VEHICLE                                :{BLACK}Сохранить свои названия транспортных средств
+STR_02C0_SAVE_CUSTOM_NAMES                                      :{BLACK}Сохранить пользовательские названия
+STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION                         :{BLACK}Загрузка пользовательских названий транспортных средств
+STR_02C2_SAVE_CUSTOMIZED_VEHICLE                                :{BLACK}Сохранить пользовательские названия транспортных средств
 
 STR_CHECKMARK                                                   :{CHECKMARK}
 ############ range for menu starts
@@ -805,33 +805,33 @@
 STR_02DE_MAP_OF_WORLD                                           :Карта мира
 STR_EXTRA_VIEW_PORT                                             :Доп. окно просмотра
 STR_SIGN_LIST                                                   :Список меток
-STR_TRANSPARENCY_OPTIONS                                        :Настройки прозрачности.
+STR_TRANSPARENCY_OPTIONS                                        :Настройки прозрачности
 STR_02DF_TOWN_DIRECTORY                                         :Список городов
 STR_TOWN_POPULATION                                             :{BLACK}Население: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Окно просмотра {COMMA}
-STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN                                :{BLACK}Скопировать позицию в окно просмотра
+STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN                                :{BLACK}Скопировать в окно
 STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT                             :{BLACK}Скопировать эту позицию в окно просмотра
-STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW                                :{BLACK}Вставить позицию из окна просмотра
+STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW                                :{BLACK}Вставить из окна
 STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT                             :{BLACK}Вставить эту позицию из окна просмотра
 
 STR_02E0_CURRENCY_UNITS                                         :{BLACK}Валюта
 STR_02E1                                                        :{BLACK}{SKIP}{STRING}
-STR_02E2_CURRENCY_UNITS_SELECTION                               :{BLACK}Выберите валюту
+STR_02E2_CURRENCY_UNITS_SELECTION                               :{BLACK}Смена используемой в игре валюты
 STR_MEASURING_UNITS                                             :{BLACK}Единицы измерения
 STR_02E4                                                        :{BLACK}{SKIP}{SKIP}{STRING}
-STR_MEASURING_UNITS_SELECTION                                   :{BLACK}Выберите систему единиц измерения
+STR_MEASURING_UNITS_SELECTION                                   :{BLACK}Используемая система единиц измерения
 STR_02E6_ROAD_VEHICLES                                          :{BLACK}Направление движения
 STR_02E7                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{STRING}
-STR_02E8_SELECT_SIDE_OF_ROAD_FOR                                :{BLACK}Выберите направление движения
+STR_02E8_SELECT_SIDE_OF_ROAD_FOR                                :{BLACK}С какой стороны дороги ездит автотранспорт
 STR_02E9_DRIVE_ON_LEFT                                          :Левостороннее
 STR_02EA_DRIVE_ON_RIGHT                                         :Правостороннее
 STR_02EB_TOWN_NAMES                                             :{BLACK}Названия городов
 STR_02EC                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_02ED_SELECT_STYLE_OF_TOWN_NAMES                             :{BLACK}Выберите язык названий городов
+STR_02ED_SELECT_STYLE_OF_TOWN_NAMES                             :{BLACK}На каком языке будут названы населённые пункты
 
 STR_02F4_AUTOSAVE                                               :{BLACK}Автосохранение
 STR_02F5                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_02F6_SELECT_INTERVAL_BETWEEN                                :{BLACK}Выберите интервал автосохранения игры
+STR_02F6_SELECT_INTERVAL_BETWEEN                                :{BLACK}Интервал автосохранения игры
 STR_02F7_OFF                                                    :Отключено
 STR_02F8_EVERY_3_MONTHS                                         :Каждые 3 месяца
 STR_02F9_EVERY_6_MONTHS                                         :Каждые 6 месяцев
@@ -871,7 +871,7 @@
 
 STR_0329_PURCHASE_LAND_FOR_FUTURE                               :{BLACK}Купить землю
 STR_032F_AUTOSAVE                                               :{RED}Автосохранение
-STR_SAVING_GAME                                                 :{RED}*  *  СОХРАНЯЮ ИГРУ  *  *
+STR_SAVING_GAME                                                 :{RED}*  *  СОХРАНЕНИЕ ИГРЫ  *  *
 STR_SAVE_STILL_IN_PROGRESS                                      :{WHITE}Сохранение все еще идет,{}пожалуйста, дождитесь завершения!
 STR_0330_SELECT_EZY_STREET_STYLE                                :{BLACK}Выбрать музыкальную программу
 
@@ -879,10 +879,10 @@
 STR_0336_7                                                      :{BLACK}7
 
 ############ start of townname region
-STR_TOWNNAME_ORIGINAL_ENGLISH                                   :Английские (оригинальные)
+STR_TOWNNAME_ORIGINAL_ENGLISH                                   :Английские
 STR_TOWNNAME_FRENCH                                             :Французские
 STR_TOWNNAME_GERMAN                                             :Немецкие
-STR_TOWNNAME_ADDITIONAL_ENGLISH                                 :Английские (дополнительные)
+STR_TOWNNAME_ADDITIONAL_ENGLISH                                 :Английские (дополн.)
 STR_TOWNNAME_LATIN_AMERICAN                                     :Латино-американские
 STR_TOWNNAME_SILLY                                              :Английские (шуточные)
 STR_TOWNNAME_SWEDISH                                            :Шведские
@@ -934,18 +934,18 @@
 
 STR_OPTIONS_LANG                                                :{BLACK}Язык
 STR_OPTIONS_LANG_CBO                                            :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_OPTIONS_LANG_TIP                                            :{BLACK}Выберите язык интерфейса
+STR_OPTIONS_LANG_TIP                                            :{BLACK}Язык пользовательского интерфейса
 
 STR_OPTIONS_FULLSCREEN                                          :{BLACK}Полноэкранный режим
 STR_OPTIONS_FULLSCREEN_TIP                                      :{BLACK}Включить/выключить полноэкранный режим
 
 STR_OPTIONS_RES                                                 :{BLACK}Разрешение экрана
 STR_OPTIONS_RES_CBO                                             :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_OPTIONS_RES_TIP                                             :{BLACK}Выберите разрешение экрана
+STR_OPTIONS_RES_TIP                                             :{BLACK}Выбор разрешения экрана
 
 STR_OPTIONS_SCREENSHOT_FORMAT                                   :{BLACK}Формат скриншотов
 STR_OPTIONS_SCREENSHOT_FORMAT_CBO                               :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_OPTIONS_SCREENSHOT_FORMAT_TIP                               :{BLACK}Выберите формат скриншотов
+STR_OPTIONS_SCREENSHOT_FORMAT_TIP                               :{BLACK}Формат, в котором будут сохраняться снимки экрана
 
 STR_AUTOSAVE_1_MONTH                                            :Каждый месяц
 STR_AUTOSAVE_FAILED                                             :{WHITE}Ошибка автосохранения
@@ -981,15 +981,15 @@
 
 STR_CANT_SHARE_ORDER_LIST                                       :{WHITE}Невозможно использовать общий список заданий
 STR_CANT_COPY_ORDER_LIST                                        :{WHITE}Невозможно скопировать список заданий
-STR_END_OF_SHARED_ORDERS                                        :{SETX 10}- - Конец списка заданий - -
+STR_END_OF_SHARED_ORDERS                                        :{SETX 10}- - Конец общих заданий - -
 
-STR_TRAIN_IS_LOST                                               :{WHITE}Поезд {COMMA} не находит путь ...
-STR_TRAIN_IS_UNPROFITABLE                                       :{WHITE}Доход поезда {COMMA} за прошлый год составил {CURRENCY}
+STR_TRAIN_IS_LOST                                               :{WHITE}Поезд {COMMA} не может найти пути
+STR_TRAIN_IS_UNPROFITABLE                                       :{WHITE}Поезд {COMMA} за прошлый год принёс {CURRENCY} убытка
 STR_EURO_INTRODUCE                                              :{BLACK}{BIGFONT}Создана зона евро!{}{}Теперь в вашей стране в качестве единой валюты используется евро!
 
 # Start of order review system.
 # DON'T ADD OR REMOVE LINES HERE
-STR_TRAIN_HAS_TOO_FEW_ORDERS                                    :{WHITE}Только одно задание в списке заданий для поезда {COMMA}
+STR_TRAIN_HAS_TOO_FEW_ORDERS                                    :{WHITE}Только одно задание у поезда {COMMA}
 STR_TRAIN_HAS_VOID_ORDER                                        :{WHITE}У поезда {COMMA} нет заданий
 STR_TRAIN_HAS_DUPLICATE_ENTRY                                   :{WHITE}У поезда {COMMA} дублируются задания
 STR_TRAIN_HAS_INVALID_ENTRY                                     :{WHITE}У поезда {COMMA} неправильное место назначения
@@ -1022,53 +1022,53 @@
 STR_CONFIG_PATCHES_VEHICLESPEED                                 :{LTBLUE}Показывать скорость в панели статуса транспорта: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_BUILDONSLOPES                                :{LTBLUE}Разрешить строительство на склонах и на берегу: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_CATCHMENT                                    :{LTBLUE}Зона покрытия зависит от типа станции: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_EXTRADYNAMITE                                :{LTBLUE}Разрешить удаление всех городских объектов: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MAMMOTHTRAINS                                :{LTBLUE}Разрешить строительство очень длинных поездов: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_EXTRADYNAMITE                                :{LTBLUE}Разрешить снос (почти) всех городских объектов: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAMMOTHTRAINS                                :{LTBLUE}Разрешить очень длинные поезда: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_REALISTICACCEL                               :{LTBLUE}Включить реалистичное ускорение для поездов: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_FORBID_90_DEG                                :{LTBLUE}Запретить резкие повороты поездам и кораблям: {ORANGE}{STRING} {LTBLUE}(NPF)
-STR_CONFIG_PATCHES_JOINSTATIONS                                 :{LTBLUE}Объединять построенные рядом ж/д станции: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_FORBID_90_DEG                                :{LTBLUE}Запретить 90-градусные повороты на ж/д и море: {ORANGE}{STRING} {LTBLUE} (NPF)
+STR_CONFIG_PATCHES_JOINSTATIONS                                 :{LTBLUE}Объединять рядом построенные ж/д станции: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FULLLOADANY                                  :{LTBLUE}Покидать станцию, когда любой груз полностью загружен: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_IMPROVEDLOAD                                 :{LTBLUE}Использовать улучшенный алгоритм загрузки: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GRADUAL_LOADING                              :{LTBLUE}Постепенная загрузка транспорта: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_INFLATION                                    :{LTBLUE}Включить инфляцию: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Поставлять груз на станцию, только если на него был спрос: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Разрешить строительство очень длинных мостов: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Разрешить добавлять депо в маршрут: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Депо можно добавить в маршрут: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Разрешить строительство сырьевых предприятий: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Разрешить несколько предприятий одного типа на город: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Одинаковые предприятия могут быть рядом друг с другом: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Всегда показывать длинную дату в панели состояния: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Всегда полная дата в панели состояния: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SIGNALSIDE                                   :{LTBLUE}Показывать светофоры на стороне движения: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_SHOWFINANCES                                 :{LTBLUE}Показывать финансовую статистику в конце года: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SHOWFINANCES                                 :{LTBLUE}Показывать финансовую статистику каждый год: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_NONSTOP                                  :{LTBLUE}Использовать поведение TTDP для приказа "без остановок": {ORANGE}{STRING}
-STR_CONFIG_PATCHES_ROADVEH_QUEUE                                :{LTBLUE}Разрешить автомобилям ожидать въезда на станцию: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ROADVEH_QUEUE                                :{LTBLUE}Автотранспорт строится в очередь у станции: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_AUTOSCROLL                                   :{LTBLUE}Смещать обзор, когда курсор находится у края экрана: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_BRIBE                                        :{LTBLUE}Разрешить подкупать муниципальную власть: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Станции могут быть произвольной формы: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Включить новый алгоритм навигации (NPF, заменяет NTP): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Алгоритм навигации NPF (замена оригинального): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Множитель увеличения веса груза для товарных поездов: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Позволять строить остановки на городских дорогах: {ORANGE}{STRING}
 
-STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Всегда разрешать строительство малых аэропортов: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Малые аэропорты всегда доступны: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_WARN_LOST_TRAIN                              :{LTBLUE}Предупреждать, если поезд заблудился: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ORDER_REVIEW                                 :{LTBLUE}Проверять маршруты на правильность: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_ORDER_REVIEW_OFF                             :нет
-STR_CONFIG_PATCHES_ORDER_REVIEW_EXDEPOT                         :кроме остановленного
-STR_CONFIG_PATCHES_ORDER_REVIEW_ON                              :всего транспорта
-STR_CONFIG_PATCHES_WARN_INCOME_LESS                             :{LTBLUE}Предупреждать, если поезд приносит убыток: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_NEVER_EXPIRE_VEHICLES                        :{LTBLUE}Транспорт никогда не устаревает: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AUTORENEW_VEHICLE                            :{LTBLUE}Автоматически обновлять изношенный транспорт
-STR_CONFIG_PATCHES_AUTORENEW_MONTHS                             :{LTBLUE}Обновлять через {ORANGE}{STRING}{LTBLUE} месяцев после истечения срока службы
-STR_CONFIG_PATCHES_AUTORENEW_MONEY                              :{LTBLUE}Сумма, необходимая для автообновления: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_ERRMSG_DURATION                              :{LTBLUE}Длительность сообщений об ошибке: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ORDER_REVIEW_OFF                             :не проверять
+STR_CONFIG_PATCHES_ORDER_REVIEW_EXDEPOT                         :у всех запущенных
+STR_CONFIG_PATCHES_ORDER_REVIEW_ON                              :у всех
+STR_CONFIG_PATCHES_WARN_INCOME_LESS                             :{LTBLUE}Предупреждать, если поезд убыточный: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_NEVER_EXPIRE_VEHICLES                        :{LTBLUE}Транспорт не будет выходить из эксплутации: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTORENEW_VEHICLE                            :{LTBLUE}Автоозамена изношенного транспорта
+STR_CONFIG_PATCHES_AUTORENEW_MONTHS                             :{LTBLUE}Замена через {ORANGE}{STRING}{LTBLUE} месяц{P "" а ев} после истечения срока службы
+STR_CONFIG_PATCHES_AUTORENEW_MONEY                              :{LTBLUE}Сумма, необходимая для автозамены: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ERRMSG_DURATION                              :{LTBLUE}Макс. длительность сообщений об ошибке (сек.): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_POPULATION_IN_LABEL                          :{LTBLUE}Показывать количество жителей города после названия: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_INVISIBLE_TREES                              :{LTBLUE}Убирать деревья при включении прозрачности зданий: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_LAND_GENERATOR                               :{LTBLUE}Генератор земли: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_LAND_GENERATOR_ORIGINAL                      :оригинальный
+STR_CONFIG_PATCHES_LAND_GENERATOR_ORIGINAL                      :Оригинальный
 STR_CONFIG_PATCHES_LAND_GENERATOR_TERRA_GENESIS                 :TerraGenesis
-STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE                        :{LTBLUE}Макс. расстояние от края карты до нефтепер. заводов: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE                        :{LTBLUE}Нефтезаводы не дальше от края карты (клеток): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SNOWLINE_HEIGHT                              :{LTBLUE}Высота "снежной" линии: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN                         :{LTBLUE}Неровность земли (только для TerraGenesis) : {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH             :Очень гладкий
@@ -1086,8 +1086,8 @@
 
 STR_CONFIG_PATCHES_STATION_SPREAD                               :{LTBLUE}Макс. протяженность: {ORANGE}{STRING} {RED}(большие значения замедляют игру)
 STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}Включить обслуживание на вертолетных площадках: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Открывать ландшафтную панель вместе с транспортными: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}Обратить направление перетаскивания обзора: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Связать ландшафтную панель с транспортной: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}Обратить направление перемещения обзора мышью: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}Показывать замеры при строительстве: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}Показывать окраску транспорта: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES_NONE                                :нет
@@ -1099,45 +1099,46 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :для смещения обзора
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :не использовать
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Скорость смещения обзора прокруткой колеса мыши: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Автопауза в начале игры: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Максимальное количество поездов на игрока: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Максимальное количество автомобилей на игрока: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Максимальное количество автотранспорта на игрока: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Максимальное количество авиатранспорта на игрока: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_SHIPS                                    :{LTBLUE}Максимальное количество кораблей на игрока: {ORANGE}{STRING}
 
-STR_CONFIG_PATCHES_AI_BUILDS_TRAINS                             :{LTBLUE}Не допускать постройки поездов конкурентами: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AI_BUILDS_ROADVEH                            :{LTBLUE}Не допускать постройки автомобилей конкурентами: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AI_BUILDS_AIRCRAFT                           :{LTBLUE}Не допускать постройки авиатранспорта конкурентами: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AI_BUILDS_SHIPS                              :{LTBLUE}Не допускать постройки кораблей конкурентами: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_BUILDS_TRAINS                             :{LTBLUE}Не допускать постройки поездов компьютером: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_BUILDS_ROADVEH                            :{LTBLUE}Не допускать постройки автомобилей компьютером: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_BUILDS_AIRCRAFT                           :{LTBLUE}Не допускать постройки авиатранспорта компьютером: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_BUILDS_SHIPS                              :{LTBLUE}Не допускать постройки кораблей компьютером: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_AINEW_ACTIVE                                 :{LTBLUE}Включить новый AI (альфа-версия): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_AI_IN_MULTIPLAYER                            :{LTBLUE}Разрешить появление AI-конкурентов в сетевой игре: {ORANGE}{STRING}
 
-STR_CONFIG_PATCHES_SERVINT_TRAINS                               :{LTBLUE}Интервал обслуживания поездов: {ORANGE}{STRING} дней/%
-STR_CONFIG_PATCHES_SERVINT_TRAINS_DISABLED                      :{LTBLUE}Интервал обслуживания поездов: {ORANGE}не обслуживаются
-STR_CONFIG_PATCHES_SERVINT_ROADVEH                              :{LTBLUE}Интервал обслуживания автомобилей: {ORANGE}{STRING} дней/%
-STR_CONFIG_PATCHES_SERVINT_ROADVEH_DISABLED                     :{LTBLUE}Интервал обслуживания автомобилей: {ORANGE}не обслуживаются
-STR_CONFIG_PATCHES_SERVINT_AIRCRAFT                             :{LTBLUE}Интервал обслуживания авиатранспорта: {ORANGE}{STRING} дней/%
-STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED                    :{LTBLUE}Интервал обслуживания авиатранспорта: {ORANGE}не обслуживается
-STR_CONFIG_PATCHES_SERVINT_SHIPS                                :{LTBLUE}Интервал обслуживания кораблей: {ORANGE}{STRING} дней/%
-STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED                       :{LTBLUE}Интервал обслуживания кораблей: {ORANGE}не обслуживаются
-STR_CONFIG_PATCHES_NOSERVICE                                    :{LTBLUE}Отключить обслуживание, если поломки выключены: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_WAGONSPEEDLIMITS                             :{LTBLUE}Включить ограничение скорости вагонов: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_DISABLE_ELRAILS                              :{LTBLUE}Отключить электрофицированную железную дорогу: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SERVINT_TRAINS                               :{LTBLUE}Обслуживание поездов по умолчанию: {ORANGE}кажд{P 1 ый ые ые} {STRING} д{P 1 ень ня ней}/%
+STR_CONFIG_PATCHES_SERVINT_TRAINS_DISABLED                      :{LTBLUE}Обслуживание поездов по умолчанию: {ORANGE}не обслуживаются
+STR_CONFIG_PATCHES_SERVINT_ROADVEH                              :{LTBLUE}Обслуживание автотранспорта: {ORANGE}кажд{P 1 ый ые ые} {STRING} д{P 1 ень ня ней}/%
+STR_CONFIG_PATCHES_SERVINT_ROADVEH_DISABLED                     :{LTBLUE}Обслуживание автотранспорта: {ORANGE}не обслуживаются
+STR_CONFIG_PATCHES_SERVINT_AIRCRAFT                             :{LTBLUE}Обслуживание авиатранспорта: {ORANGE}кажд{P 1 ый ые ые} {STRING} д{P 1 ень ня ней}/%
+STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED                    :{LTBLUE}Обслуживание авиатранспорта: {ORANGE}не обслуживается
+STR_CONFIG_PATCHES_SERVINT_SHIPS                                :{LTBLUE}Обслуживание кораблей: {ORANGE}кажд{P 1 ый ые ые} {STRING} д{P 1 ень ня ней}/%
+STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED                       :{LTBLUE}Обслуживание кораблей: {ORANGE}не обслуживаются
+STR_CONFIG_PATCHES_NOSERVICE                                    :{LTBLUE}Не обслуживать транспорт, если отключены поломки: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_WAGONSPEEDLIMITS                             :{LTBLUE}Использовать органичение скорости у вагонов (если есть): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DISABLE_ELRAILS                              :{LTBLUE}Выключить электрофицированную железную дорогу: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_COLORED_NEWS_YEAR                            :{LTBLUE}Цветные газеты появляются: {ORANGE}в {STRING} году
 STR_CONFIG_PATCHES_STARTING_YEAR                                :{LTBLUE}Год начала игры: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ENDING_YEAR                                  :{LTBLUE}Заканчивать игру: {ORANGE}в {STRING} году
 STR_CONFIG_PATCHES_SMOOTH_ECONOMY                               :{LTBLUE}Включить плавную экономику (частые, небольшие изменения)
-STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Разрешить покупать акции других компаний
-STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}При перетаскивании ставить светофоры каждые: {ORANGE}{STRING} клетки
-STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Автоматически строить семафоры: {ORANGE}до {STRING} года
+STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Разрешить торговлю акциями других компаний
+STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}При установке светофоров линией, ставить кажд{P 1 ую ые ые}: {ORANGE}{STRING} клет{P 1 ку ки ок}
+STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Строить семафоры старого стиля: {ORANGE}до {STRING} года
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Положение главной панели инструментов: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :слева
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :в центре
 STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT                            :справа
-STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}Радиус прилипания окон: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}Радиус прилипания окон: {ORANGE}отключено
+STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}Радиус прилипания окон (пикселей): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}Радиус прилипания окон (пикселей): {ORANGE}отключено
 STR_CONFIG_PATCHES_TOWN_GROWTH                                  :{LTBLUE}Скорость роста городов: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOWN_GROWTH_NONE                             :нет
 STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW                             :медленная
@@ -1160,10 +1161,10 @@
 STR_CONFIG_PATCHES_CURRENCY                                     :{CURRENCY}
 
 STR_CONFIG_PATCHES_QUERY_CAPT                                   :{WHITE}Изменить значение
-STR_CONFIG_PATCHES_SERVICE_INTERVAL_INCOMPATIBLE                :{WHITE}Некоторые интервалы не совместимы с выбранной установкой. Допускаются значения 5-90% или 30-800 дней.
-STR_CONFIG_PATCHES_YAPF_SHIPS                                   :{LTBLUE}Использовать YAPF для кораблей: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_YAPF_ROAD                                    :{LTBLUE}Использовать YAPF для автомобилей: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_YAPF_RAIL                                    :{LTBLUE}Использовать YAPF для поездов: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SERVICE_INTERVAL_INCOMPATIBLE                :{WHITE}Некоторые интервалы не совместимы с выбранной установкой. Допускаются значения 5-90% или 30-800 дней
+STR_CONFIG_PATCHES_YAPF_SHIPS                                   :{LTBLUE}Алгоритм навигации YAPF для кораблей: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_YAPF_ROAD                                    :{LTBLUE}Алгоритм навигации YAPF для автотранспорта: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_YAPF_RAIL                                    :{LTBLUE}Алгоритм навигации YAPF для поездов: {ORANGE}{STRING}
 
 STR_TEMPERATE_LANDSCAPE                                         :Умеренный ландшафт
 STR_SUB_ARCTIC_LANDSCAPE                                        :Субарктический ландшафт
@@ -1174,11 +1175,11 @@
 STR_CHEATS_TIP                                                  :{BLACK}Галочка показывает, использовали ли Вы этот ЧИТ раньше
 STR_CHEATS_WARNING                                              :{BLACK}Внимание, вы собираетесь предать своих соперников! Этого вам никогда не простят!
 STR_CHEAT_MONEY                                                 :{LTBLUE}Увеличить деньги на {CURRENCY64}
-STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Управлять игроком: {ORANGE}{COMMA}
-STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Волшебный бульдозер (удаляет промышленность и т.п.): {ORANGE}{STRING}
+STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Играть за компанию: {ORANGE}{COMMA}
+STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Волшебный динамит (снос _ВСЕГО_): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Туннели могут пересекаться: {ORANGE}{STRING}
 STR_CHEAT_BUILD_IN_PAUSE                                        :{LTBLUE}Строить в режиме паузы: {ORANGE}{STRING}
-STR_CHEAT_NO_JETCRASH                                           :{LTBLUE}Большие самолеты не будут часто разбиваться в маленьких аэропортах: {ORANGE} {STRING}
+STR_CHEAT_NO_JETCRASH                                           :{LTBLUE}Большие самолеты реже разбиваются в малых аэропортах: {ORANGE}{STRING}
 STR_CHEAT_SWITCH_CLIMATE                                        :{LTBLUE}Сменить климат на: {ORANGE} {STRING}
 STR_CHEAT_CHANGE_DATE                                           :{LTBLUE}Изменение даты: {ORANGE} {DATE_SHORT}
 STR_CHEAT_SETUP_PROD                                            :{LTBLUE}Разрешить изменение производительности: {ORANGE}{STRING}
@@ -1186,8 +1187,8 @@
 STR_HEADING_FOR_WAYPOINT                                        :{LTBLUE}Следует к {WAYPOINT}
 STR_HEADING_FOR_WAYPOINT_VEL                                    :{LTBLUE}Следует к {WAYPOINT}, {VELOCITY}
 
-STR_GO_TO_WAYPOINT                                              :Идти через {WAYPOINT}
-STR_GO_NON_STOP_TO_WAYPOINT                                     :Идти б/остан. через {WAYPOINT}
+STR_GO_TO_WAYPOINT                                              :Ехать через {WAYPOINT}
+STR_GO_NON_STOP_TO_WAYPOINT                                     :Ехать через {WAYPOINT} без остановки
 
 STR_WAYPOINTNAME_CITY                                           :Точка пути {TOWN}
 STR_WAYPOINTNAME_CITY_SERIAL                                    :Точка пути {TOWN} #{COMMA}
@@ -1226,7 +1227,7 @@
 STR_TREES_RANDOM_TYPE_TIP                                       :{BLACK}Разместить деревья случайного типа
 
 STR_CANT_BUILD_CANALS                                           :{WHITE}Невозможно построить канал здесь...
-STR_BUILD_CANALS_TIP                                            :{BLACK}Строить каналы.
+STR_BUILD_CANALS_TIP                                            :{BLACK}Строить каналы
 STR_LANDINFO_CANAL                                              :Канал
 
 STR_CANT_BUILD_LOCKS                                            :{WHITE}Невозможно построить шлюз здесь...
@@ -1243,8 +1244,8 @@
 
 STR_DRAG_WHOLE_TRAIN_TO_SELL_TIP                                :{BLACK}Перетащите сюда локомотив для продажи всего поезда
 
-STR_DRAG_DROP                                                   :{BLACK}Перетаскивание
-STR_STATION_DRAG_DROP                                           :{BLACK}Строить станцию, используя перетаскивание
+STR_DRAG_DROP                                                   :{BLACK}Участок
+STR_STATION_DRAG_DROP                                           :{BLACK}Постройка станции на указанном игроком участке
 STR_SELECT_STATION_CLASS_TIP                                    :{BLACK}Выберите класс станций для отображения
 STR_SELECT_STATION_TYPE_TIP                                     :{BLACK}Выберите тип станции для постройки
 
@@ -1285,36 +1286,36 @@
 STR_RAIL_REFIT_VEHICLE                                          :{BLACK}Переоборудовать поезда
 STR_RAIL_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Выбор типа груза для перевозки
 STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED                             :{BLACK}Переоборудование поезда для выделенного типа груза
-STR_RAIL_CAN_T_REFIT_VEHICLE                                    :{WHITE}Не могу переоборуд. поезд...
-STR_CONFIG_PATCHES_SERVINT_ISPERCENT                            :{LTBLUE}Интервалы обслуживания в процентах от срока службы: {ORANGE}{STRING}
+STR_RAIL_CAN_T_REFIT_VEHICLE                                    :{WHITE}Не могу переоборудовать поезд...
+STR_CONFIG_PATCHES_SERVINT_ISPERCENT                            :{LTBLUE}Интервал обслуживания в процентах: {ORANGE}{STRING}
 STR_CONFIG_GAME_PRODUCTION                                      :{WHITE}Изменить производительность
 
 TEMP_AI_IN_PROGRESS                                             :{WHITE}Добро пожаловать в новый ИИ, он совершенствуется. Вы должны быть готовы к проблемам. Когда это случится, сделайте снимок и отправьте на форум. Наслаждайтесь!
 TEMP_AI_ACTIVATED                                               :{WHITE}Внимание: новый AI всё еще находится в состоянии альфа-версии! В настоящее время работает только с автотранспортом!
-TEMP_AI_MULTIPLAYER                                             :{WHITE}Внимание: экспериментальная эксплуатация нового AI. Пожалуйста, сообщайте обо всех проблемах на truelight@openttd.org.
+TEMP_AI_MULTIPLAYER                                             :{WHITE}Внимание: экспериментальная эксплуатация нового AI. Пожалуйста, сообщайте обо всех проблемах на truelight@openttd.org
 
 ############ network gui strings
 
 STR_NETWORK_MULTIPLAYER                                         :{WHITE}Сетевая игра
 
 STR_NETWORK_PLAYER_NAME                                         :{BLACK}Имя игрока:
-STR_NETWORK_ENTER_NAME_TIP                                      :{BLACK}Это имя, по которому другие игроки определяют вас
+STR_NETWORK_ENTER_NAME_TIP                                      :{BLACK}Это имя, под которым вы представитесь другим игрокам
 STR_NETWORK_CONNECTION                                          :{BLACK}Соединение:
-STR_NETWORK_CONNECTION_TIP                                      :{BLACK}Выбор между Интернет игрой или игрой в Локальной Сети (СЕТЬ)
+STR_NETWORK_CONNECTION_TIP                                      :{BLACK}Искать сервера в локальной сети, или в Интернете
 
 STR_NETWORK_START_SERVER                                        :{BLACK}Запуск сервера
-STR_NETWORK_START_SERVER_TIP                                    :{BLACK}Запуск своего сервера
+STR_NETWORK_START_SERVER_TIP                                    :{BLACK}Запуск сервера на вашем компьютере. К этой игре смогут подсоединяться другие игроки.
 
 STR_NETWORK_GAME_NAME                                           :{BLACK}Название
 STR_NETWORK_GAME_NAME_TIP                                       :{BLACK}Название игры
 STR_NETWORK_INFO_ICONS_TIP                                      :{BLACK}Язык, версия сервера и т.п.
 STR_NETWORK_CLICK_GAME_TO_SELECT                                :{BLACK}Выберите игру из списка
 
-STR_NETWORK_FIND_SERVER                                         :{BLACK}Найти сервер
-STR_NETWORK_FIND_SERVER_TIP                                     :{BLACK}Найти сервер в сети
+STR_NETWORK_FIND_SERVER                                         :{BLACK}Обновить
+STR_NETWORK_FIND_SERVER_TIP                                     :{BLACK}Обновить список серверов, которые сейчас есть в сети
 STR_NETWORK_ADD_SERVER                                          :{BLACK}Добавить сервер
-STR_NETWORK_ADD_SERVER_TIP                                      :{BLACK}Добавить сервер в список, который будет всегда проверяться при запуске игр.
-STR_NETWORK_ENTER_IP                                            :{BLACK}Ввести адрес сервера
+STR_NETWORK_ADD_SERVER_TIP                                      :{BLACK}Добавить сервер, который будет автоматически обновляться при открытии этого окна
+STR_NETWORK_ENTER_IP                                            :{BLACK}Введите адрес сервера
 
 STR_NETWORK_GENERAL_ONLINE                                      :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA}
 STR_NETWORK_CLIENTS_CAPTION                                     :{BLACK}Клиенты
@@ -1335,7 +1336,7 @@
 STR_NETWORK_VERSION_MISMATCH                                    :{SILVER}ВЕРСИЯ НЕ ПОДХОДИТ
 STR_NETWORK_GRF_MISMATCH                                        :{SILVER}НЕ СОВПАДАЕТ НАБОР NEWGRF
 
-STR_NETWORK_JOIN_GAME                                           :{BLACK}Присоединиться к игре
+STR_NETWORK_JOIN_GAME                                           :{BLACK}Присоединиться
 
 
 STR_NETWORK_START_GAME_WINDOW                                   :{WHITE}Запуск новой сетевой игры
@@ -1351,8 +1352,8 @@
 STR_NETWORK_COMBO1                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
 STR_NETWORK_LAN                                                 :Локальная сеть
 STR_NETWORK_INTERNET                                            :Интернет
-STR_NETWORK_LAN_INTERNET                                        :Локальная сеть/Интернет
-STR_NETWORK_INTERNET_ADVERTISE                                  :Интернет (объявленный)
+STR_NETWORK_LAN_INTERNET                                        :Лок. сеть/Интернет
+STR_NETWORK_INTERNET_ADVERTISE                                  :Интернет (объявл.)
 STR_NETWORK_COMBO2                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
 STR_NETWORK_0_PLAYERS                                           :0 игроков
 STR_NETWORK_1_PLAYERS                                           :1 игрок
@@ -1374,9 +1375,9 @@
 STR_NETWORK_LANGUAGE_SPOKEN                                     :{BLACK}Язык общения:
 STR_NETWORK_LANGUAGE_TIP                                        :{BLACK}Другие игроки будут знать, на каком языке говорят на сервере
 STR_NETWORK_COMBO5                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_START_GAME                                          :{BLACK}Запуск Игры
+STR_NETWORK_START_GAME                                          :{BLACK}Запуск игры
 STR_NETWORK_START_GAME_TIP                                      :{BLACK}Запуск новой сетевой игры с произвольной карты или сценария
-STR_NETWORK_LOAD_GAME                                           :{BLACK}Загрузка Игры
+STR_NETWORK_LOAD_GAME                                           :{BLACK}Загрузка игры
 STR_NETWORK_LOAD_GAME_TIP                                       :{BLACK}Продолжить ранее сохраненную сетевую игру (проверьте, что подсоединились прежним игроком)
 
 ############ Leave those lines in this order!!
@@ -1394,8 +1395,8 @@
 STR_NETWORK_NEW_COMPANY_TIP                                     :{BLACK}Основать новую компанию
 STR_NETWORK_SPECTATE_GAME                                       :{BLACK}Наблюдать за игрой
 STR_NETWORK_SPECTATE_GAME_TIP                                   :{BLACK}Следить за игрой в качестве зрителя
-STR_NETWORK_JOIN_COMPANY                                        :{BLACK}Присоединиться к компании
-STR_NETWORK_JOIN_COMPANY_TIP                                    :{BLACK}Помочь в управлении компанией
+STR_NETWORK_JOIN_COMPANY                                        :{BLACK}Присоединиться
+STR_NETWORK_JOIN_COMPANY_TIP                                    :{BLACK}Присоединиться к компании и помочь в управлении ею
 STR_NETWORK_REFRESH                                             :{BLACK}Обновить сервер
 STR_NETWORK_REFRESH_TIP                                         :{BLACK}Обновить информацию о сервере
 
@@ -1518,8 +1519,8 @@
 STR_BMPMAP_ERR_IMAGE_TYPE                                       :{WHITE}...невозможно преобразовать тип изображения.
 
 ##id 0x0800
-STR_0800_COST                                                   :{TINYFONT}{RED}Цена: {CURRENCY}
-STR_0801_COST                                                   :{RED}Цена: {CURRENCY}
+STR_0800_COST                                                   :{TINYFONT}{RED}Расход: {CURRENCY}
+STR_0801_COST                                                   :{RED}Расход: {CURRENCY}
 STR_0802_INCOME                                                 :{TINYFONT}{GREEN}Доход: {CURRENCY}
 STR_0803_INCOME                                                 :{GREEN}Доход: {CURRENCY}
 STR_FEEDER_TINY                                                 :{TINYFONT}{YELLOW}Трансфер: {CURRENCY}
@@ -1582,7 +1583,7 @@
 
 ##id 0x1800
 STR_1801_MUST_REMOVE_ROAD_FIRST                                 :{WHITE}Сначала удалите дорогу
-STR_ROAD_WORKS_IN_PROGRESS                                      :{WHITE}Идут дорожные работы ...
+STR_ROAD_WORKS_IN_PROGRESS                                      :{WHITE}Идут дорожные работы...
 STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Строительство дорог
 STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Выберите тип моста
 STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}Не могу проложить дорогу здесь...
@@ -1620,7 +1621,7 @@
 STR_2006_POPULATION                                             :{BLACK}Население: {ORANGE}{COMMA}{BLACK}  Зданий: {ORANGE}{COMMA}
 STR_2007_RENAME_TOWN                                            :Переименовать город
 STR_2008_CAN_T_RENAME_TOWN                                      :{WHITE}Не могу переименовать город...
-STR_2009_LOCAL_AUTHORITY_REFUSES                                :{WHITE}{TOWN} местная администрация не дает
+STR_2009_LOCAL_AUTHORITY_REFUSES                                :{WHITE}Местная администрация города {TOWN} не допустит.
 STR_200A_TOWN_NAMES_CLICK_ON_NAME                               :{BLACK}Названия городов - кликните на названии для отображения города
 STR_200B_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Отцентрировать основное окно по городу
 STR_200C_CHANGE_TOWN_NAME                                       :{BLACK}Переименовать город
@@ -1650,7 +1651,7 @@
 STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Субсидии
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Свободные субсидии
-STR_2027_FROM_TO                                                :{ORANGE}{STRING} по маршруту из {STRING} в {STRING}
+STR_2027_FROM_TO                                                :{ORANGE}{STRING.p} по маршруту из {STRING} в {STRING}
 STR_2028_BY                                                     :{YELLOW} (по {DATE_SHORT})
 STR_202A_NONE                                                   :{ORANGE}нет
 STR_202B_SERVICES_ALREADY_SUBSIDISED                            :{BLACK}Субсидируемые маршруты:
@@ -1659,10 +1660,10 @@
 STR_202E_OFFER_OF_SUBSIDY_EXPIRED                               :{BLACK}{BIGFONT}Предложение субсидии истекло:{}{}{STRING} по маршруту {STRING} - {STRING} субсидироваться не будет.
 STR_202F_SUBSIDY_WITHDRAWN_SERVICE                              :{BLACK}{BIGFONT}Срок субсидии истек:{}{}{STRING} по маршруту {STATION} - {STATION} больше не субсидируется.
 STR_2030_SERVICE_SUBSIDY_OFFERED                                :{BLACK}{BIGFONT}Предложена субсидия:{}{}Первая компания, которая повезет {STRING} по маршруту {STRING} - {STRING} получит годовую субсидию от местных властей!
-STR_2031_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Компания {COMPANY} получает субсидию!{}{}{STRING} по маршруту {STATION} - {STATION} оплачивается на 50% больше в следующем году!
-STR_2032_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Компания {COMPANY}получает субсидию!{}{}{STRING} по маршруту {STATION} - {STATION} оплачивается вдвойне в следующем году!
-STR_2033_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Компания{COMPANY} получает субсидию!{}{}{STRING} по маршруту {STATION} - {STATION} оплачивается втройне в следующем году!
-STR_2034_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Компания {COMPANY} получает субсидию!{}{}{STRING} по маршруту {STATION} в {STATION} оплачивается вчетверо в следующем году!
+STR_2031_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Компания {COMPANY} получает субсидию!{}{}{STRING} по маршруту {STATION} - {STATION} оплачивается наполовину больше в следующем году!
+STR_2032_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Компания {COMPANY} получает субсидию!{}{}{STRING} по маршруту {STATION} - {STATION} оплачивается вдвойне в следующем году!
+STR_2033_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Компания {COMPANY} получает субсидию!{}{}{STRING} по маршруту {STATION} - {STATION} оплачивается втройне в следующем году!
+STR_2034_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Компания {COMPANY} получает субсидию!{}{}{STRING} по маршруту {STATION} - {STATION} оплачивается вчетверо в следующем году!
 STR_2035_LOCAL_AUTHORITY_REFUSES                                :{WHITE}{TOWN} местная власть запрещает постройку другого аэропорта в городе
 STR_2036_COTTAGES                                               :Коттеджи
 STR_2037_HOUSES                                                 :Дома
@@ -1676,7 +1677,7 @@
 STR_203F_HOUSES                                                 :Дома
 STR_2040_CINEMA                                                 :Кинотеатр
 STR_2041_SHOPPING_MALL                                          :Торговый центр
-STR_2042_DO_IT                                                  :{BLACK}ДАВАЙ!
+STR_2042_DO_IT                                                  :{BLACK}Применить
 STR_2043_LIST_OF_THINGS_TO_DO_AT                                :{BLACK}То, что можно сделать в этом городе - кликните для получения доп. сведений
 STR_2044_CARRY_OUT_THE_HIGHLIGHTED                              :{BLACK}Выполнить выделенное действие в списке выше
 STR_2045_ACTIONS_AVAILABLE                                      :{BLACK}Доступные действия:
@@ -1684,10 +1685,10 @@
 STR_2047_MEDIUM_ADVERTISING_CAMPAIGN                            :Средняя рекламная компания
 STR_2048_LARGE_ADVERTISING_CAMPAIGN                             :Большая рекламная компания
 STR_2049_FUND_LOCAL_ROAD_RECONSTRUCTION                         :Профинансировать ремонт городских дорог
-STR_204A_BUILD_STATUE_OF_COMPANY                                :Построить статую владельца компании
+STR_204A_BUILD_STATUE_OF_COMPANY                                :Установить статую владельца компании
 STR_204B_FUND_NEW_BUILDINGS                                     :Профинансировать строительство новых зданий
 STR_204C_BUY_EXCLUSIVE_TRANSPORT                                :Купить эксклюзивные транспортные права
-STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY                              :Дать взятку местной администрации
+STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY                              :Взятка местной администрации
 STR_204D_INITIATE_A_SMALL_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} Провести малую рекламную кампанию для увеличения грузо- и пассажиропотока на ваших станциях.{} Цена: {CURRENCY}
 STR_204E_INITIATE_A_MEDIUM_LOCAL                                :{WHITE}{STRING}{}{YELLOW} Провести среднюю рекламную кампанию для увеличения грузо- и пассажиропотока на ваших станциях.{} Цена: {CURRENCY}
 STR_204F_INITIATE_A_LARGE_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} Провести большую рекламную кампанию для увеличения грузо- и пассажиропотока на ваших станциях.{} Цена: {CURRENCY}
@@ -1773,7 +1774,7 @@
 STR_3043_TRUCK_STATION_ORIENT                                   :{WHITE}Ориентация станции
 STR_3046_MUST_DEMOLISH_BUS_STATION                              :{WHITE}Сначала удалите автобусную остановку
 STR_3047_MUST_DEMOLISH_TRUCK_STATION                            :{WHITE}Сначала удалите грузовой терминал
-STR_3048_STATIONS                                               :{WHITE}{COMPANY} - {COMMA} Станции
+STR_3048_STATIONS                                               :{WHITE}{COMPANY} - {COMMA} Станц{P 2 ия ии ий}
 STR_3049_0                                                      :{YELLOW}{STATION} {STATIONFEATURES}
 STR_304A_NONE                                                   :{YELLOW}- Нет -
 STR_304B_SITE_UNSUITABLE                                        :{WHITE}...неподходящее место
@@ -1849,14 +1850,14 @@
 STR_4803_POWER_STATION                                          :Электростанция
 STR_4804_SAWMILL                                                :Лесопилка
 STR_4805_FOREST                                                 :Лес
-STR_4806_OIL_REFINERY                                           :Нефтеперерабат. завод
-STR_4807_OIL_RIG                                                :Буровая вышка
+STR_4806_OIL_REFINERY                                           :Нефтезавод
+STR_4807_OIL_RIG                                                :Нефтяная вышка
 STR_4808_FACTORY                                                :Завод
 STR_4809_PRINTING_WORKS                                         :Типография
 STR_480A_STEEL_MILL                                             :Сталелитейный завод
 STR_480B_FARM                                                   :Ферма
 STR_480C_COPPER_ORE_MINE                                        :Шахта медной руды
-STR_480D_OIL_WELLS                                              :Нефтяная платформа
+STR_480D_OIL_WELLS                                              :Нефтяная скважина
 STR_480E_BANK                                                   :Банк
 STR_480F_FOOD_PROCESSING_PLANT                                  :Пищевая фабрика
 STR_4810_PAPER_MILL                                             :Бумажная фабрика
@@ -1892,8 +1893,8 @@
 STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Произведено за прошлый месяц:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% перевезено)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Показать предприятие в основном окне
-STR_482D_NEW_UNDER_CONSTRUCTION                                 :{BLACK}{BIGFONT}Новое предприятие - {STRING} строится возле г. {TOWN}!
-STR_482E_NEW_BEING_PLANTED_NEAR                                 :{BLACK}{BIGFONT}Новое предприятие - {STRING} заложен возле г. {TOWN}!
+STR_482D_NEW_UNDER_CONSTRUCTION                                 :{BLACK}{BIGFONT}Новое предприятие! {STRING} строится возле г. {TOWN}!
+STR_482E_NEW_BEING_PLANTED_NEAR                                 :{BLACK}{BIGFONT}Новое предприятие! {STRING} заложен возле г. {TOWN}!
 STR_482F_COST                                                   :{BLACK}Цена: {YELLOW}{CURRENCY}
 STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY                          :{WHITE}Невозможно построить это предприятие здесь...
 STR_4831_FOREST_CAN_ONLY_BE_PLANTED                             :{WHITE}...лес можно сажать только выше линии снега
@@ -1971,21 +1972,21 @@
 STR_SV_AIRCRAFT_NAME                                            :Самолет {COMMA}
 
 STR_SV_STNAME                                                   :{STRING}
-STR_SV_STNAME_NORTH                                             :{STRING} Северная
-STR_SV_STNAME_SOUTH                                             :{STRING} Южная
-STR_SV_STNAME_EAST                                              :{STRING} Восточная
-STR_SV_STNAME_WEST                                              :{STRING} Западная
-STR_SV_STNAME_CENTRAL                                           :{STRING} Центральная
-STR_SV_STNAME_TRANSFER                                          :Платформа {STRING}
-STR_SV_STNAME_HALT                                              :Полустанок {STRING}
-STR_SV_STNAME_VALLEY                                            :{STRING} Долина
-STR_SV_STNAME_HEIGHTS                                           :{STRING} Высотная
-STR_SV_STNAME_WOODS                                             :{STRING} Лесная
-STR_SV_STNAME_LAKESIDE                                          :{STRING} Озерная
-STR_SV_STNAME_EXCHANGE                                          :{STRING} Сортировочная
-STR_SV_STNAME_AIRPORT                                           :{STRING} Аэропорт
-STR_SV_STNAME_OILFIELD                                          :Нефтяное поле {STRING}
-STR_SV_STNAME_MINES                                             :{STRING} Шахты
+STR_SV_STNAME_NORTH                                             :Северный {STRING}
+STR_SV_STNAME_SOUTH                                             :Южный {STRING}
+STR_SV_STNAME_EAST                                              :Восточный {STRING}
+STR_SV_STNAME_WEST                                              :Западный {STRING}
+STR_SV_STNAME_CENTRAL                                           :Центральный {STRING}
+STR_SV_STNAME_TRANSFER                                          :Перегонный {STRING}
+STR_SV_STNAME_HALT                                              :{STRING}-привал
+STR_SV_STNAME_VALLEY                                            :Долина {STRING}
+STR_SV_STNAME_HEIGHTS                                           :{STRING}-высотная
+STR_SV_STNAME_WOODS                                             :Лесная {STRING}
+STR_SV_STNAME_LAKESIDE                                          :Озёрная {STRING}
+STR_SV_STNAME_EXCHANGE                                          :{STRING}-сортировочная
+STR_SV_STNAME_AIRPORT                                           :Аэропорт {STRING}
+STR_SV_STNAME_OILFIELD                                          :Нефтяная вышка {STRING}
+STR_SV_STNAME_MINES                                             :Шахты {STRING}
 STR_SV_STNAME_DOCKS                                             :Пристань {STRING}
 STR_SV_STNAME_BUOY_1                                            :{STRING} Буй 1
 STR_SV_STNAME_BUOY_2                                            :{STRING} Буй 2
@@ -1996,13 +1997,13 @@
 STR_SV_STNAME_BUOY_7                                            :{STRING} Буй 7
 STR_SV_STNAME_BUOY_8                                            :{STRING} Буй 8
 STR_SV_STNAME_BUOY_9                                            :{STRING} Буй 9
-STR_SV_STNAME_ANNEXE                                            :{STRING} Дополнительная
-STR_SV_STNAME_SIDINGS                                           :{STRING} Запасная
-STR_SV_STNAME_BRANCH                                            :{STRING} Береговая
-STR_SV_STNAME_UPPER                                             :{STRING} Верхняя
-STR_SV_STNAME_LOWER                                             :{STRING} Нижняя
+STR_SV_STNAME_ANNEXE                                            :{STRING}-дополнительная
+STR_SV_STNAME_SIDINGS                                           :{STRING}-запасный
+STR_SV_STNAME_BRANCH                                            :{STRING}-ветка
+STR_SV_STNAME_UPPER                                             :Верхний {STRING}
+STR_SV_STNAME_LOWER                                             :Нижний {STRING}
 STR_SV_STNAME_HELIPORT                                          :Площадка {STRING}
-STR_SV_STNAME_FOREST                                            :{STRING} Лес
+STR_SV_STNAME_FOREST                                            :Лес {STRING}
 
 ############ end of savegame specific region!
 
@@ -2017,8 +2018,8 @@
 STR_6802_MEDIUM.f                                               :{BLACK}средняя
 STR_6803_HARD                                                   :{BLACK}Тяжёлый
 STR_6803_HARD.f                                                 :{BLACK}тяжёлая
-STR_6804_CUSTOM                                                 :{BLACK}Свой
-STR_6804_CUSTOM.f                                               :{BLACK}своя
+STR_6804_CUSTOM                                                 :{BLACK}Пользов.
+STR_6804_CUSTOM.f                                               :{BLACK}пользов.
 ############ range for difficulty levels ends
 
 ############ range for difficulty settings starts
@@ -2026,7 +2027,7 @@
 STR_6806_COMPETITOR_START_TIME                                  :{LTBLUE}Конкуренты начинают игру: {ORANGE}{STRING}
 STR_6807_NO_OF_TOWNS                                            :{LTBLUE}Количество городов: {ORANGE}{STRING}
 STR_6808_NO_OF_INDUSTRIES                                       :{LTBLUE}Количество предприятий: {ORANGE}{STRING}
-STR_6809_MAXIMUM_INITIAL_LOAN_000                               :{LTBLUE}Максимальная начальная ссуда: {ORANGE}{CURRENCY}
+STR_6809_MAXIMUM_INITIAL_LOAN_000                               :{LTBLUE}Максимальная стартовая ссуда: {ORANGE}{CURRENCY}
 STR_680A_INITIAL_INTEREST_RATE                                  :{LTBLUE}Начальная процентная ставка: {ORANGE}{COMMA}%
 STR_680B_VEHICLE_RUNNING_COSTS                                  :{LTBLUE}Затраты на содержание транспорта: {ORANGE}{STRING.p}
 STR_680C_CONSTRUCTION_SPEED_OF_COMPETITOR                       :{LTBLUE}Скорость строительства конкурентов: {ORANGE}{STRING}
@@ -2042,70 +2043,70 @@
 STR_16816_CITY_APPROVAL                                         :{LTBLUE}Отношение властей к изменению территорий: {ORANGE}{STRING}
 ############ range for difficulty settings ends
 
-STR_26816_NONE                                                  :нет
-STR_6816_LOW                                                    :низкое
-STR_6817_NORMAL                                                 :среднее
-STR_6818_HIGH                                                   :большое
+STR_26816_NONE                                                  :Нет
+STR_6816_LOW                                                    :Низкое
+STR_6817_NORMAL                                                 :Среднее
+STR_6818_HIGH                                                   :Большое
 STR_6819                                                        :{BLACK}{SMALLLEFTARROW}
 STR_681A                                                        :{BLACK}{SMALLRIGHTARROW}
-STR_681B_VERY_SLOW                                              :очень медленная
-STR_681C_SLOW                                                   :медленная
-STR_681D_MEDIUM                                                 :средняя
-STR_681E_FAST                                                   :быстрая
-STR_681F_VERY_FAST                                              :очень быстрая
-STR_VERY_LOW                                                    :очень низкий
-STR_VERY_LOW.n                                                  :очень низкое
-STR_6820_LOW                                                    :низкий
+STR_681B_VERY_SLOW                                              :Очень медленная
+STR_681C_SLOW                                                   :Медленная
+STR_681D_MEDIUM                                                 :Средняя
+STR_681E_FAST                                                   :Быстрая
+STR_681F_VERY_FAST                                              :Очень быстрая
+STR_VERY_LOW                                                    :Очень низкий
+STR_VERY_LOW.n                                                  :Очень низкое
+STR_6820_LOW                                                    :Низкий
 STR_6820_LOW.n                                                  :низкое
-STR_6820_LOW.p                                                  :низкие
-STR_6821_MEDIUM                                                 :средний
+STR_6820_LOW.p                                                  :Низкие
+STR_6821_MEDIUM                                                 :Средний
 STR_6821_MEDIUM.n                                               :среднее
-STR_6821_MEDIUM.p                                               :средние
-STR_6822_HIGH                                                   :высокий
+STR_6821_MEDIUM.p                                               :Средние
+STR_6822_HIGH                                                   :Высокий
 STR_6822_HIGH.n                                                 :высокое
-STR_6822_HIGH.p                                                 :высокие
-STR_6823_NONE                                                   :нет
-STR_6824_REDUCED                                                :уменьшенная
-STR_6825_NORMAL                                                 :нормальная
+STR_6822_HIGH.p                                                 :Высокие
+STR_6823_NONE                                                   :Выключено
+STR_6824_REDUCED                                                :Умеренная
+STR_6825_NORMAL                                                 :Обычная
 STR_6826_X1_5                                                   :x1.5
 STR_6827_X2                                                     :x2
 STR_6828_X3                                                     :x3
 STR_6829_X4                                                     :x4
-STR_682A_VERY_FLAT                                              :очень плоский
-STR_682B_FLAT                                                   :плоский
-STR_682C_HILLY                                                  :холмистый
-STR_682D_MOUNTAINOUS                                            :гористый
-STR_682E_STEADY                                                 :стабильная
-STR_682F_FLUCTUATING                                            :неустойчивая
-STR_6830_IMMEDIATE                                              :немедленно
-STR_6831_3_MONTHS_AFTER_PLAYER                                  :через 3 месяца после игрока
-STR_6832_6_MONTHS_AFTER_PLAYER                                  :через 6 месяцев после игрока
-STR_6833_9_MONTHS_AFTER_PLAYER                                  :через 9 месяцев после игрока
-STR_6834_AT_END_OF_LINE_AND_AT_STATIONS                         :в конце линий и на станциях
-STR_6835_AT_END_OF_LINE_ONLY                                    :только в конце линий
-STR_6836_OFF                                                    :выключены
-STR_6837_ON                                                     :включены
+STR_682A_VERY_FLAT                                              :Очень плоский
+STR_682B_FLAT                                                   :Плоский
+STR_682C_HILLY                                                  :Холмистый
+STR_682D_MOUNTAINOUS                                            :Гористый
+STR_682E_STEADY                                                 :Стабильная
+STR_682F_FLUCTUATING                                            :Неустойчивая
+STR_6830_IMMEDIATE                                              :Немедленно
+STR_6831_3_MONTHS_AFTER_PLAYER                                  :Через 3 месяца после игрока
+STR_6832_6_MONTHS_AFTER_PLAYER                                  :Через 6 месяцев после игрока
+STR_6833_9_MONTHS_AFTER_PLAYER                                  :Через 9 месяцев после игрока
+STR_6834_AT_END_OF_LINE_AND_AT_STATIONS                         :В конце линий и на станциях
+STR_6835_AT_END_OF_LINE_ONLY                                    :Только в конце линий
+STR_6836_OFF                                                    :Выключены
+STR_6837_ON                                                     :Включены
 STR_6838_SHOW_HI_SCORE_CHART                                    :{BLACK}Показать таблицу рекордов
-STR_6839_PERMISSIVE                                             :снисходительное
-STR_683A_TOLERANT                                               :терпимое
-STR_683B_HOSTILE                                                :отрицательное
+STR_6839_PERMISSIVE                                             :Дозволяющее
+STR_683A_TOLERANT                                               :Терпимое
+STR_683B_HOSTILE                                                :Враждебное
 
 ##id 0x7000
 STR_7000                                                        :
 STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
 STR_7002_PLAYER                                                 :(Игрок {COMMA})
-STR_7004_NEW_FACE                                               :{BLACK}Новое лицо
+STR_7004_NEW_FACE                                               :{BLACK}Лицо
 STR_7005_COLOR_SCHEME                                           :{BLACK}Цвет
 STR_7006_COLOR_SCHEME                                           :{GOLD}Цвет:
 STR_7007_NEW_COLOR_SCHEME                                       :{WHITE}Новый цвет
-STR_7008_COMPANY_NAME                                           :{BLACK}Название фирмы
-STR_7009_PRESIDENT_NAME                                         :{BLACK}Имя директора
+STR_7008_COMPANY_NAME                                           :{BLACK}Название
+STR_7009_PRESIDENT_NAME                                         :{BLACK}Директор
 STR_700A_COMPANY_NAME                                           :Компания
 STR_700B_PRESIDENT_S_NAME                                       :Имя директора
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Невозможно изменить название компании...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Невозможно изменить имя директора...
 STR_700E_FINANCES                                               :{WHITE}{COMPANY} Денежные средства {BLACK}{PLAYERNAME}
-STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Статьи расхода/дохода
+STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Расход/доход
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Строительство
 STR_7012_NEW_VEHICLES                                           :{GOLD}Новая техника
@@ -2134,22 +2135,22 @@
 STR_7028                                                        :{BLACK}{CURRENCY64}
 STR_7029_BORROW                                                 :{BLACK}Занять {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
 STR_702A_REPAY                                                  :{BLACK}Отдать {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...максимально допустимый размер ссуды {CURRENCY}
+STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...максимально допустимый размер ссуды - {CURRENCY}.
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Невозможно занять больше денег...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...нет ссуды для выплачивания
 STR_702E_REQUIRED                                               :{WHITE}...{CURRENCY} надо
 STR_702F_CAN_T_REPAY_LOAN                                       :{WHITE}Невозможно погасить ссуду...
 STR_INSUFFICIENT_FUNDS                                          :{WHITE}Невозможно отдать ссуженные банком деньги...
-STR_7030_SELECT_NEW_FACE_FOR_PRESIDENT                          :{BLACK}Выбрать новое лицо управляющего
+STR_7030_SELECT_NEW_FACE_FOR_PRESIDENT                          :{BLACK}Выбрать новое лицо директора
 STR_7031_CHANGE_THE_COMPANY_VEHICLE                             :{BLACK}Изменить цвет транспортных средств компании
-STR_7032_CHANGE_THE_PRESIDENT_S                                 :{BLACK}Изменение имени управляющего
+STR_7032_CHANGE_THE_PRESIDENT_S                                 :{BLACK}Изменение имени директора
 STR_7033_CHANGE_THE_COMPANY_NAME                                :{BLACK}Изменение названия компании
 STR_7034_CLICK_ON_SELECTED_NEW_COLOR                            :{BLACK}Выберите цветовую схему
 STR_7035_INCREASE_SIZE_OF_LOAN                                  :{BLACK}Взять/увеличить кредит
 STR_7036_REPAY_PART_OF_LOAN                                     :{BLACK}Вернуть часть ссуды
-STR_7037_PRESIDENT                                              :{WHITE}{PLAYERNAME}{}{GOLD}(Управляющий)
+STR_7037_PRESIDENT                                              :{WHITE}{PLAYERNAME}{}{GOLD}(Директор)
 STR_7038_INAUGURATED                                            :{GOLD}В должности с: {WHITE}{NUM}
-STR_7039_VEHICLES                                               :{GOLD}Транспорта:
+STR_7039_VEHICLES                                               :{GOLD}Транспорт:
 STR_TRAINS                                                      :{WHITE}{COMMA} поезд{P "" а ов}
 STR_ROAD_VEHICLES                                               :{WHITE}{COMMA} автомашин{P а ы ""}
 STR_AIRCRAFT                                                    :{WHITE}{COMMA} авиатранспорт
@@ -2176,7 +2177,7 @@
 STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Транспортная компания в опасном положении!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT} {COMPANY} будет продана или объявлена банкротом, если ситуация не изменится!
-STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Управляющий)
+STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Директор)
 STR_7059_TRANSPORT_COMPANY_MERGER                               :{BLACK}{BIGFONT}Объединение компаний!
 STR_705A_HAS_BEEN_SOLD_TO_FOR                                   :{BLACK}{BIGFONT}{COMPANY} продана {COMPANY} за {CURRENCY}!
 STR_705B_WE_ARE_LOOKING_FOR_A_TRANSPORT                         :{WHITE}Мы ищем транспортную компанию для присоединения к ней.{}{}Вы хотите купить {COMPANY} за {CURRENCY}?
@@ -2199,12 +2200,12 @@
 STR_706C_CHAIRMAN                                               :Председатель
 STR_706D_PRESIDENT                                              :Президент
 STR_706E_TYCOON                                                 :Магнат
-STR_706F_BUILD_HQ                                               :{BLACK}Построить штаб-квартиру
-STR_7070_BUILD_COMPANY_HEADQUARTERS                             :{BLACK}Построить/просмотреть штаб-квартиру компании
-STR_RELOCATE_COMPANY_HEADQUARTERS                               :{BLACK}Перестроить штаб компании в другом месте за 1% оценочной стоимости капитала компании
+STR_706F_BUILD_HQ                                               :{BLACK}Построить штаб
+STR_7070_BUILD_COMPANY_HEADQUARTERS                             :{BLACK}Построить штаб-квартиру компании / Осмотреть штаб-квартиру компании
+STR_RELOCATE_COMPANY_HEADQUARTERS                               :{BLACK}Переместить штаб компании в другом месте за 1% оценочной стоимости капитала компании
 STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS                       :{WHITE}Невозможно построить штаб-квартиру компании...
-STR_7072_VIEW_HQ                                                :{BLACK}Посмотреть штаб
-STR_RELOCATE_HQ                                                 :{BLACK}Переместить штаб
+STR_7072_VIEW_HQ                                                :{BLACK}Осмотреть штаб
+STR_RELOCATE_HQ                                                 :{BLACK}Переместить
 STR_COMPANY_PASSWORD                                            :{BLACK}Пароль
 STR_COMPANY_PASSWORD_TOOLTIP                                    :{BLACK}Защитить вашу компанию паролем, чтобы неавторизованные пользователи не могли присоединиться
 STR_SET_COMPANY_PASSWORD                                        :Установить пароль компании
@@ -2231,9 +2232,9 @@
 STR_LIVERY_MAGLEV                                               :Маглев
 STR_LIVERY_DMU                                                  :DMU
 STR_LIVERY_EMU                                                  :EMU
-STR_LIVERY_PASSENGER_WAGON_STEAM                                :Пассажирский вагон (паровоз)
-STR_LIVERY_PASSENGER_WAGON_DIESEL                               :Пассажирский вагон (дизель)
-STR_LIVERY_PASSENGER_WAGON_ELECTRIC                             :Пассажирский вагон (электро)
+STR_LIVERY_PASSENGER_WAGON_STEAM                                :Пассаж. вагон (паровоз)
+STR_LIVERY_PASSENGER_WAGON_DIESEL                               :Пассаж. вагон (дизель)
+STR_LIVERY_PASSENGER_WAGON_ELECTRIC                             :Пассаж. вагон (электро)
 STR_LIVERY_FREIGHT_WAGON                                        :Грузовой вагон
 STR_LIVERY_BUS                                                  :Автобус
 STR_LIVERY_TRUCK                                                :Грузовое авто
@@ -2243,13 +2244,13 @@
 STR_LIVERY_SMALL_PLANE                                          :Малый самолет
 STR_LIVERY_LARGE_PLANE                                          :Большой самолет
 
-STR_LIVERY_GENERAL_TIP                                          :{BLACK}Показ. основную цветовую схему
-STR_LIVERY_TRAIN_TIP                                            :{BLACK}Показ. цветовую схему поездов
-STR_LIVERY_ROADVEH_TIP                                          :{BLACK}Показ. цветовую схему авто
-STR_LIVERY_SHIP_TIP                                             :{BLACK}Показ. цветовую схему судов
-STR_LIVERY_AIRCRAFT_TIP                                         :{BLACK}Показ. цветовую схему авиатранспорта
-STR_LIVERY_PRIMARY_TIP                                          :{BLACK}Выберите основной цвет для данной схемы
-STR_LIVERY_SECONDARY_TIP                                        :{BLACK}Выберите вторичный цвет для данной схемы
+STR_LIVERY_GENERAL_TIP                                          :{BLACK}Настройка основной цветовой схемы
+STR_LIVERY_TRAIN_TIP                                            :{BLACK}Настройка цветовой схемы поездов
+STR_LIVERY_ROADVEH_TIP                                          :{BLACK}Настройка цветовой схемы автотранспорта
+STR_LIVERY_SHIP_TIP                                             :{BLACK}Настройка цветовой схемы судов
+STR_LIVERY_AIRCRAFT_TIP                                         :{BLACK}Настройка цветовой схемы авиатранспорта
+STR_LIVERY_PRIMARY_TIP                                          :{BLACK}Настройка основного цвета
+STR_LIVERY_SECONDARY_TIP                                        :{BLACK}Настройка вторичного цвета
 STR_LIVERY_PANEL_TIP                                            :{BLACK}Выберите цветовую схему для изменения, либо несколько схем с CTRL. Кликните на чекбокс для использования выбранной схемы.
 
 ##id 0x8000
@@ -2512,35 +2513,35 @@
 STR_8100_MESSAGE_FROM_VEHICLE_MANUFACTURE                       :{WHITE}Сообщение от производителя транспорта
 STR_8101_WE_HAVE_JUST_DESIGNED_A                                :{GOLD}Мы создали новую модель: {STRING}. Заинтересованы ли вы в его годовом эксклюзивном использовании для проверки перед запуском в серийное производство?
 STR_8102_RAILROAD_LOCOMOTIVE                                    :ж/д локомотив
-STR_8103_ROAD_VEHICLE                                           :автомобиль
-STR_8104_AIRCRAFT                                               :воздушное судно
+STR_8103_ROAD_VEHICLE                                           :автотранспорт
+STR_8104_AIRCRAFT                                               :авиатранспорт
 STR_8105_SHIP                                                   :корабль
-STR_8106_MONORAIL_LOCOMOTIVE                                    :монорельс
-STR_8107_MAGLEV_LOCOMOTIVE                                      :магниторельс
+STR_8106_MONORAIL_LOCOMOTIVE                                    :монорельсовый локомотив
+STR_8107_MAGLEV_LOCOMOTIVE                                      :магниторельсовый локомотив
 
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}Депо {TOWN}
-STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Жители празднуют . . .{}Первый поезд прибыл на станцию {STATION}!
+STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Жители празднуют!{}Первый поезд прибыл на станцию {STATION}!
 STR_8802_DETAILS                                                :{WHITE}{STRING} (Детали)
-STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Впереди поезд
+STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Поезд мешает
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8806_GO_TO                                                  :Ехать к ст. {STATION}
-STR_8807_GO_TO_TRANSFER                                         :Ехать к ст. {STATION} (Отдать и забрать груз)
-STR_8808_GO_TO_UNLOAD                                           :Ехать к ст. {STATION} (Разгрузка)
-STR_8809_GO_TO_TRANSFER_UNLOAD                                  :Ехать к ст. {STATION} (Разгрузиться и уехать пустым)
-STR_880A_GO_TO_LOAD                                             :Ехать к ст. {STATION} (Загрузиться)
-STR_880B_GO_TO_TRANSFER_LOAD                                    :Ехать к ст. {STATION} (Отдать и ждать полной загрузки)
-STR_880C_GO_NON_STOP_TO                                         :Ехать без ост. на {STATION}
-STR_880D_GO_TO_NON_STOP_TRANSFER                                :Ехать без ост. на {STATION} (Отдать и забрать груз)
-STR_880E_GO_NON_STOP_TO_UNLOAD                                  :Ехать без ост. на {STATION} (Разгрузка)
-STR_880F_GO_TO_NON_STOP_TRANSFER_UNLOAD                         :Ехать без ост. на {STATION} (Разгрузиться и уехать пустым)
-STR_8810_GO_NON_STOP_TO_LOAD                                    :Ехать без ост. на {STATION} (Загрузиться)
-STR_8811_GO_TO_NON_STOP_TRANSFER_LOAD                           :Ехать без ост. на {STATION} (Отдать и ждать полной загрузки)
+STR_8807_GO_TO_TRANSFER                                         :Ехать к ст. {STATION} (Трансфер)
+STR_8808_GO_TO_UNLOAD                                           :Ехать к ст. {STATION} (Не грузиться)
+STR_8809_GO_TO_TRANSFER_UNLOAD                                  :Ехать к ст. {STATION} (Трансфер и не грузиться)
+STR_880A_GO_TO_LOAD                                             :Ехать к ст. {STATION} (Полная загрузка)
+STR_880B_GO_TO_TRANSFER_LOAD                                    :Ехать к ст. {STATION} (Трансфер и полная загрузка)
+STR_880C_GO_NON_STOP_TO                                         :Ехать к ст. {STATION} без остановки
+STR_880D_GO_TO_NON_STOP_TRANSFER                                :Ехать к ст. {STATION} без остановки (Трансфер)
+STR_880E_GO_NON_STOP_TO_UNLOAD                                  :Ехать к ст. {STATION} без остановки (Не грузиться)
+STR_880F_GO_TO_NON_STOP_TRANSFER_UNLOAD                         :Ехать к ст. {STATION} без остановки (Трансфер и не грузиться)
+STR_8810_GO_NON_STOP_TO_LOAD                                    :Ехать к ст. {STATION} без остановки (Полная загрузка)
+STR_8811_GO_TO_NON_STOP_TRANSFER_LOAD                           :Ехать к ст. {STATION} без остановки (Трансфер и полная загрузка)
 STR_GO_TO_TRAIN_DEPOT                                           :Ехать в депо {TOWN}
-STR_SERVICE_AT_TRAIN_DEPOT                                      :Обслуж. в депо {TOWN}
-STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Ехать без ост. в Депо {TOWN}
-STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Обслуж. без ост. в депо {TOWN}
+STR_SERVICE_AT_TRAIN_DEPOT                                      :Обслужиться в депо {TOWN}
+STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Ехать в депо {TOWN} без остановки
+STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Обслужиться в депо {TOWN} без остановки
 
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Следует в депо {TOWN}
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Следует в Депо {TOWN}, {VELOCITY}
@@ -2558,7 +2559,7 @@
 STR_8816                                                        :{BLACK}-
 STR_8819_TRAIN_TOO_LONG                                         :{WHITE}Поезд слишком длинный
 STR_881A_TRAINS_CAN_ONLY_BE_ALTERED                             :{WHITE}Структуру поезда можно менять только в депо
-STR_881B_TRAINS                                                 :{WHITE}{COMPANY} - {COMMA} Поезда
+STR_881B_TRAINS                                                 :{WHITE}{COMPANY} - {COMMA} Поезд{P 2 "" а ов}
 
 STR_881C_NEW_RAIL_VEHICLES                                      :{WHITE}Новый поезд
 STR_NEW_ELRAIL_VEHICLES                                         :{WHITE}Новый электропоезд
@@ -2567,7 +2568,7 @@
 STR_ALL_AVAIL_RAIL_VEHICLES                                     :{WHITE}Поезда
 
 STR_881F_BUILD_VEHICLE                                          :{BLACK}Построить
-STR_CLONE_ROAD_VEHICLE                                          :{BLACK}Копировать транспорт
+STR_CLONE_ROAD_VEHICLE                                          :{BLACK}Копировать
 STR_CLONE_ROAD_VEHICLE_INFO                                     :{BLACK}Создает копию автомобиля. Control-щелчок копирует задания
 STR_CLONE_ROAD_VEHICLE_DEPOT_INFO                               :{BLACK}Создает копию автомобиля. Щелкнуть на кнопке и затем на машине внутри или снаружи гаража. Control-щелчок копирует и задания
 STR_CLONE_TRAIN                                                 :{BLACK}Копировать состав
@@ -2576,17 +2577,17 @@
 STR_8820_RENAME                                                 :{BLACK}Переимен.
 STR_8823_SKIP                                                   :{BLACK}Пропуск
 STR_8824_DELETE                                                 :{BLACK}Удалить
-STR_8825_NON_STOP                                               :{BLACK}Б/останов.
+STR_8825_NON_STOP                                               :{BLACK}Без ост.
 STR_8826_GO_TO                                                  :{BLACK}Ехать
-STR_8827_FULL_LOAD                                              :{BLACK}Загрузка
-STR_8828_UNLOAD                                                 :{BLACK}Разгрузка
-STR_REFIT                                                       :{BLACK}Переоборуд.
+STR_8827_FULL_LOAD                                              :{BLACK}Полный
+STR_8828_UNLOAD                                                 :{BLACK}Без груза
+STR_REFIT                                                       :{BLACK}Переоб.
 STR_REFIT_TIP                                                   :{BLACK}Выберите тип грузов для переоборудования. CTRL+клик - для удаления.
 STR_REFIT_ORDER                                                 :(Переоборуд. для {STRING})
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Задания)
-STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Конец списка заданий - -
+STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Конец заданий - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
-STR_SERVICE                                                     :{BLACK}Обслуживание
+STR_SERVICE                                                     :{BLACK}Обслуж.
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Невозможно построить ж/д транспорт...
 STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Построен: {LTBLUE}{NUM}{BLACK} Стоимость: {LTBLUE}{CURRENCY}
 STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Стоимость: {LTBLUE}{CURRENCY}
@@ -2601,7 +2602,7 @@
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Невозможно изменить это задание...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Невозможно переместить трансп. средство...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}Тыловой локомотив всегда следует за его передней частью
-STR_8838_N_A                                                    :недоступно{SKIP}
+STR_8838_N_A                                                    :отсутствует{SKIP}
 STR_8839_CAN_T_SELL_RAILROAD_VEHICLE                            :{WHITE}Невозможно продать рельсовый транспорт...
 STR_883A_UNABLE_TO_FIND_ROUTE_TO                                :{WHITE}Невозможно найти дорогу к депо
 STR_883B_CAN_T_STOP_START_TRAIN                                 :{WHITE}Невозможно остановить/запустить поезд...
@@ -2629,19 +2630,19 @@
 STR_8850_SHOW_DETAILS_OF_TRAIN_VEHICLES                         :{BLACK}Показать сведения о вагонах
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Показать вместимость вагонов
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Показать общую вместимость поезда по типам грузов
-STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Показать список заданий - кликните для выделения. CTRL+клик - переход к станции.
+STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Показ списка заданий - щелкните для выделения. Если зажать CTRL - обзор станции.
 STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Пропустить текущее задание и перейти к следующему
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Удалить выделенное задание
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Ехать по выбранному заданию без остановок
-STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Вставить новое задание перед выделенным или в конец списка
+STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Вставить новое задание перед выделенным, или в конец списка
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Задать ожидание полной загрузки
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Задать ожидание полной разгрузки
 STR_SERVICE_HINT                                                :{BLACK}Пропустить это задание, если обслуживание не требуется
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Цена: {CURRENCY} Вес: {WEIGHT_S}{}Скорость: {VELOCITY}  Мощность: {POWER}{}Цена обслуж.: {CURRENCY}/год{}Емкость: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}Поломка
 STR_885D_AGE_RUNNING_COST_YR                                    :{BLACK}Возраст: {LTBLUE}{STRING}{BLACK} Стоимость обслуживания: {LTBLUE}{CURRENCY}/год
-STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED                         :{BLACK}Вес: {LTBLUE}{WEIGHT_S}  {BLACK}Мощность: {LTBLUE}{POWER}{BLACK} Макс. скорость: {LTBLUE}{VELOCITY}
-STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE                  :{BLACK}Вес: {LTBLUE}{WEIGHT_S} {BLACK}Мощность: {LTBLUE}{POWER}{BLACK} Макс. скорость: {LTBLUE}{VELOCITY} {BLACK}Макс. Тяговое Усилие: {LTBLUE}{FORCE}
+STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED                         :{BLACK}Вес: {LTBLUE}{WEIGHT_S} {BLACK}Мощность: {LTBLUE}{POWER}{BLACK} Макс. скорость: {LTBLUE}{VELOCITY}
+STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE                  :{BLACK}Вес: {LTBLUE}{WEIGHT_S} {BLACK}Мощн.: {LTBLUE}{POWER}{BLACK} Макс. ск.: {LTBLUE}{VELOCITY} {BLACK}Макс. ТУ: {LTBLUE}{FORCE}
 STR_885F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Прибыль в этом году: {LTBLUE}{CURRENCY}  (прошлый год: {CURRENCY})
 STR_8860_RELIABILITY_BREAKDOWNS                                 :{BLACK}Надежность: {LTBLUE}{COMMA}%  {BLACK}Поломок с последнего ремонта: {LTBLUE}{COMMA}
 STR_8861_STOPPED                                                :{RED}Остановлен
@@ -2651,7 +2652,7 @@
 STR_8865_NAME_TRAIN                                             :{WHITE}Назвать поезд
 STR_8866_CAN_T_NAME_TRAIN                                       :{WHITE}Невозможно назвать поезд...
 STR_8867_NAME_TRAIN                                             :{BLACK}Назвать поезд
-STR_8868_TRAIN_CRASH_DIE_IN_FIREBALL                            :{BLACK}{BIGFONT}Крушение поезда!{}{COMMA} чел. погибло в огне!
+STR_8868_TRAIN_CRASH_DIE_IN_FIREBALL                            :{BLACK}{BIGFONT}Крушение поезда!{}{COMMA} человек{P "" а ""} погиб{P "" ло ли} в огне!
 STR_8869_CAN_T_REVERSE_DIRECTION                                :{WHITE}Невозможно развернуть поезд...
 STR_886A_RENAME_TRAIN_VEHICLE_TYPE                              :{WHITE}Переименовать тип вагона
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}Невозможно переименовать тип вагона ...
@@ -2660,7 +2661,7 @@
 
 STR_TRAIN_STOPPING                                              :{RED}Остановлен
 STR_TRAIN_STOPPING_VEL                                          :{RED}Останавливаю, {VELOCITY}
-STR_INCOMPATIBLE_RAIL_TYPES                                     :IНесовместимый тип рельсов
+STR_INCOMPATIBLE_RAIL_TYPES                                     :IНесовместимый тип рельс
 STR_TRAIN_NO_POWER                                              :{RED}Нет тока.
 STR_TRAIN_START_NO_CATENARY                                     :Кто-то украл все провода, поезд не может ехать...
 
@@ -2670,9 +2671,9 @@
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Машина на пути
-STR_9001_ROAD_VEHICLES                                          :{WHITE}{COMPANY} - {COMMA} Автомашин{P а ы ""}
+STR_9001_ROAD_VEHICLES                                          :{WHITE}{COMPANY} - {COMMA} Автомашин{P 2 а ы ""}
 STR_9002                                                        :{WHITE}{VEHICLE}
-STR_9003_ROAD_VEHICLE_DEPOT                                     :{WHITE}{TOWN} Гараж
+STR_9003_ROAD_VEHICLE_DEPOT                                     :{WHITE}Гараж {TOWN}
 STR_9004_NEW_VEHICLES                                           :{BLACK}Новая машина
 STR_9006_NEW_ROAD_VEHICLES                                      :{WHITE}Новая машина
 STR_9007_BUILD_VEHICLE                                          :{BLACK}Построить
@@ -2706,42 +2707,42 @@
 STR_9023_BUILD_NEW_ROAD_VEHICLE                                 :{BLACK}Построить новый автомобиль
 STR_9024_DRAG_ROAD_VEHICLE_TO_HERE                              :{BLACK}Перетащите автомобиль сюда, чтобы продать его
 STR_9025_CENTER_MAIN_VIEW_ON_ROAD                               :{BLACK}Показать гараж в главном окне
-STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Список автомобилей - кликните для получения информации
+STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Список автотранспорта - кликните для получения информации
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Построить выделенный автомобиль
-STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Цена: {CURRENCY}{}Скорость: {VELOCITY}{}Стоимость обслуж.: {CURRENCY}/год{}Емкость: {CARGO}
+STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Цена: {CURRENCY}{}Скорость: {VELOCITY}{}Стоимость обслуживания: {CURRENCY}/год{}Емкость: {CARGO}
 
-STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Назвать автомобиль
-STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Невозможно переименовать автомобиль ...
-STR_902E_NAME_ROAD_VEHICLE                                      :{BLACK}Назвать автомобиль
-STR_902F_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Жители празднуют . . .{}Первый автобус прибыл на остановку {STATION}!
-STR_9030_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Жители празднуют . . .{}Первый грузовик прибыл на станцию {STATION}!
+STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Назвать автотранспорт
+STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Невозможно переименовать автотранспорт ...
+STR_902E_NAME_ROAD_VEHICLE                                      :{BLACK}Назвать автотранспорт
+STR_902F_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Жители празднуют!{}Первый автобус прибыл на остановку {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Жители празднуют!{}Первый грузовик прибыл на станцию {STATION}!
 STR_9031_ROAD_VEHICLE_CRASH_DRIVER                              :{BLACK}{BIGFONT}АВАРИЯ!{}Водитель погиб при столкновении с поездом
-STR_9032_ROAD_VEHICLE_CRASH_DIE                                 :{BLACK}{BIGFONT}АВАРИЯ!{}{COMMA} человек погибло в столкновении с поездом
-STR_9033_CAN_T_MAKE_VEHICLE_TURN                                :{WHITE}Невозможно развернуть автомобиль ...
+STR_9032_ROAD_VEHICLE_CRASH_DIE                                 :{BLACK}{BIGFONT}АВАРИЯ!{}{COMMA} человек{P "" а ""} погиб{P "" ло ли} в столкновении с поездом!
+STR_9033_CAN_T_MAKE_VEHICLE_TURN                                :{WHITE}Невозможно развернуть автомобиль...
 STR_ONLY_TURN_SINGLE_UNIT                                       :{WHITE}Невозможно развернуть многосоставной транспорт
 STR_9034_RENAME                                                 :{BLACK}Переимен.
 STR_9035_RENAME_ROAD_VEHICLE_TYPE                               :{BLACK}Переименовать автомобиль
 STR_9036_RENAME_ROAD_VEHICLE_TYPE                               :{WHITE}Переименовать автомобиль
-STR_9037_CAN_T_RENAME_ROAD_VEHICLE                              :{WHITE}Невозможно переименовать автомобиль ...
+STR_9037_CAN_T_RENAME_ROAD_VEHICLE                              :{WHITE}Невозможно переименовать автомобиль...
 STR_9038_GO_TO_ROADVEH_DEPOT                                    :Ехать в гараж {TOWN}
 STR_SERVICE_AT_ROADVEH_DEPOT                                    :Обслуж. в гараже {TOWN}
 
 STR_REFIT_ROAD_VEHICLE_TO_CARRY                                 :{BLACK}Переоборуд. авто для доставки разных видов грузов.
 STR_REFIT_ROAD_VEHICLE                                          :{BLACK}Переоборуд. авто
 STR_REFIT_ROAD_VEHICLE_TO_CARRY_HIGHLIGHTED                     :{BLACK}Переоборуд авто для перевозки доступных видов грузов
-STR_REFIT_ROAD_VEHICLE_CAN_T                                    :{WHITE}Невозможно переоборуд. авто...
+STR_REFIT_ROAD_VEHICLE_CAN_T                                    :{WHITE}Невозможно переоборудовать авто...
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Выберите тип грузов для перевозки
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Строительство РЕКА-МОРЕ
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Строительство РЕКА-МОРЕ
+STR_9800_DOCK_CONSTRUCTION                                      :Морские коммуникации
+STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Морские коммуникации
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Невозможно построить пристань здесь...
-STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} ДОК
-STR_9804_NEW_SHIPS                                              :{BLACK}Новые корабли
-STR_9805_SHIPS                                                  :{WHITE}{COMPANY} - {COMMA} Корабли
-STR_9808_NEW_SHIPS                                              :{WHITE}Новые корабли
-STR_9809_BUILD_SHIP                                             :{BLACK}Купить Корабль
-STR_CLONE_SHIP                                                  :{BLACK}Копировать Судно
+STR_9803_SHIP_DEPOT                                             :{WHITE}Док {TOWN}
+STR_9804_NEW_SHIPS                                              :{BLACK}Новое судно
+STR_9805_SHIPS                                                  :{WHITE}{COMPANY} - {COMMA} Корабл{P 2 ь я ей}
+STR_9808_NEW_SHIPS                                              :{WHITE}Покупка кораблей
+STR_9809_BUILD_SHIP                                             :{BLACK}Купить
+STR_CLONE_SHIP                                                  :{BLACK}Копировать судно
 STR_CLONE_SHIP_INFO                                             :{BLACK}Создает копию корабля. Control-клик копирует задания
 STR_CLONE_SHIP_DEPOT_INFO                                       :{BLACK}Создает копию корабля. Щелкнуть на кнопке и затем на корабле внутри или снаружи дока. Control-клик копирует задания
 STR_980B_SHIP_MUST_BE_STOPPED_IN                                :{WHITE}Корабль должен быть остановлен в доке
@@ -2750,7 +2751,7 @@
 STR_980E_SHIP_IN_THE_WAY                                        :{WHITE}Корабль на пути
 STR_980F                                                        :{WHITE}{VEHICLE}
 STR_9811_DETAILS                                                :{WHITE}{VEHICLE} (Детали)
-STR_9812_AGE_RUNNING_COST_YR                                    :{BLACK}Возраст: {LTBLUE}{STRING}{BLACK}  Стоимость обслуж.: {LTBLUE}{CURRENCY}/год
+STR_9812_AGE_RUNNING_COST_YR                                    :{BLACK}Возраст: {LTBLUE}{STRING}{BLACK}  Стоимость обслуживания: {LTBLUE}{CURRENCY}/год
 STR_9813_MAX_SPEED                                              :{BLACK}Макс. скорость: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Прибыль в этом году: {LTBLUE}{CURRENCY}  (прошлый год: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Надежность: {LTBLUE}{COMMA}%  {BLACK}Поломок с последнего обслуж.: {LTBLUE}{COMMA}
@@ -2779,13 +2780,13 @@
 STR_9829_CENTER_MAIN_VIEW_ON_SHIP                               :{BLACK}Показать корабль в главном окне
 STR_982A_SEND_SHIP_TO_DEPOT                                     :{BLACK}Отправить корабль в док. CTRL+клик - только для обслуживания
 STR_982B_SHOW_SHIP_DETAILS                                      :{BLACK}Показать информацию о корабле
-STR_982E_COST_MAX_SPEED_CAPACITY                                :{BLACK}Цена: {CURRENCY} Макс. Скорость: {VELOCITY}{}Емкость: {CARGO}{}Стоимость обслуж.: {CURRENCY}/год
+STR_982E_COST_MAX_SPEED_CAPACITY                                :{BLACK}Цена: {CURRENCY} Макс. Скорость: {VELOCITY}{}Емкость: {CARGO}{}Стоимость обслуживания: {CURRENCY}/год
 STR_982F_NAME_SHIP                                              :{BLACK}Название корабля
 
 STR_9831_NAME_SHIP                                              :{WHITE}Название корабля
 STR_9832_CAN_T_NAME_SHIP                                        :{WHITE}Не могу назвать корабль...
-STR_9833_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Жители празднуют . . .{}Первый корабль причалил к {STATION}!
-STR_9834_POSITION_BUOY_WHICH_CAN                                :{BLACK}Постройте буй, чтобы использовать его как точку маршрута
+STR_9833_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Жители празднуют!{}Первый корабль причалил к {STATION}!
+STR_9834_POSITION_BUOY_WHICH_CAN                                :{BLACK}Буй помогает в навигации, если дистанция большая, исользуйте его как точку маршрута
 STR_9835_CAN_T_POSITION_BUOY_HERE                               :{WHITE}Не могу построить буй здесь...
 STR_9836_RENAME                                                 :{BLACK}Переимен.
 STR_9837_RENAME_SHIP_TYPE                                       :{BLACK}Переименовать
@@ -2797,28 +2798,28 @@
 STR_983D_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Выберите тип груза для перевозки
 STR_983E_REFIT_SHIP_TO_CARRY_HIGHLIGHTED                        :{BLACK}Переоборудовать корабль для перевозки выбранного груза
 STR_983F_SELECT_CARGO_TYPE_TO_CARRY                             :{GOLD}Выберите тип груза для перевозки:
-STR_9840_NEW_CAPACITY_COST_OF_REFIT                             :{BLACK}Новая емкость: {GOLD}{CARGO}{}{BLACK}Стоимость переоборуд.: {GOLD}{CURRENCY}
-STR_9841_CAN_T_REFIT_SHIP                                       :{WHITE}Не могу переоборуд. корабль......
-STR_9842_REFITTABLE                                             :(переоборудование)
+STR_9840_NEW_CAPACITY_COST_OF_REFIT                             :{BLACK}Новая емкость: {GOLD}{CARGO}{}{BLACK}Стоимость переоборудования: {GOLD}{CURRENCY}
+STR_9841_CAN_T_REFIT_SHIP                                       :{WHITE}Не могу переоборудовать корабль......
+STR_9842_REFITTABLE                                             :(переоб.)
 STR_GO_TO_SHIP_DEPOT                                            :Плыть в Док {TOWN}
 SERVICE_AT_SHIP_DEPOT                                           :Обслуживание в доке {TOWN}
 
 ##id 0xA000
 STR_A000_AIRPORTS                                               :{WHITE}Аэропорты
 STR_A001_CAN_T_BUILD_AIRPORT_HERE                               :{WHITE}Невозможно построить аэропорт здесь...
-STR_A002_AIRCRAFT_HANGAR                                        :{WHITE}{STATION} Ангар
-STR_A003_NEW_AIRCRAFT                                           :{BLACK}Новый
-STR_CLONE_AIRCRAFT                                              :{BLACK}Копировать транспорт
+STR_A002_AIRCRAFT_HANGAR                                        :{WHITE}Ангар {STATION}
+STR_A003_NEW_AIRCRAFT                                           :{BLACK}Новое судно
+STR_CLONE_AIRCRAFT                                              :{BLACK}Копировать
 STR_CLONE_AIRCRAFT_INFO                                         :{BLACK}Создает копию самолета. Control-клик - копирует задания
 STR_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW                           :{BLACK}Построить копию возд. судна. Нажмите на кнопку, а потом на возд. судно в/вне ангара. CTRL+click - также скопирует и задание.
 STR_A005_NEW_AIRCRAFT                                           :{WHITE}Новый
 STR_A006_BUILD_AIRCRAFT                                         :{BLACK}Построить
 STR_A008_CAN_T_BUILD_AIRCRAFT                                   :{WHITE}Невозможно построить возд. транспорт...
-STR_A009_AIRCRAFT                                               :{WHITE}{COMPANY} - {COMMA} Авиатранспорт
+STR_A009_AIRCRAFT                                               :{WHITE}{COMPANY} - {COMMA} Единиц{P 2 а ы ""} авиатранспорта
 STR_A00A                                                        :{WHITE}{VEHICLE}
 STR_A00B_ORDERS                                                 :{WHITE}{VEHICLE} (Задания)
 STR_A00C_DETAILS                                                :{WHITE}{VEHICLE} (Детали)
-STR_A00D_AGE_RUNNING_COST_YR                                    :{BLACK}Возраст: {LTBLUE}{STRING}{BLACK} Стоимость обслуж.: {LTBLUE}{CURRENCY}/год
+STR_A00D_AGE_RUNNING_COST_YR                                    :{BLACK}Возраст: {LTBLUE}{STRING}{BLACK} Стоимость обслуживания: {LTBLUE}{CURRENCY}/год
 STR_A00E_MAX_SPEED                                              :{BLACK}Макс. скорость: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Прибыль в этом году: {LTBLUE}{CURRENCY}  (прошлый год: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Надежность: {LTBLUE}{COMMA}%  {BLACK}Поломок с последнего ремонта: {LTBLUE}{COMMA}
@@ -2851,14 +2852,14 @@
 STR_A029_CENTER_MAIN_VIEW_ON_AIRCRAFT                           :{BLACK}Показать транспорт в главном окне
 STR_A02A_SEND_AIRCRAFT_TO_HANGAR                                :{BLACK}Послать авиатранспорт в ангар. CTRL+клик - только для обслуживания.
 STR_A02B_SHOW_AIRCRAFT_DETAILS                                  :{BLACK}Показать сведения об авиатранспорте.
-STR_A02E_COST_MAX_SPEED_CAPACITY                                :{BLACK}Цена: {CURRENCY} Макс. Скорость: {VELOCITY}{}Емкость: {COMMA} пассажиров, {COMMA} почты{}Цена обслуж.: {CURRENCY}/год
+STR_A02E_COST_MAX_SPEED_CAPACITY                                :{BLACK}Цена: {CURRENCY} Макс. Скорость: {VELOCITY}{}Емкость: {COMMA} пассажиров, {COMMA} почты{}Цена обслуживания: {CURRENCY}/год
 
 STR_A030_NAME_AIRCRAFT                                          :{WHITE}Название самолета
 STR_A031_CAN_T_NAME_AIRCRAFT                                    :{WHITE}Не могу назвать самолет...
 STR_A032_NAME_AIRCRAFT                                          :{BLACK}Название самолета
-STR_A033_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Жители празднуют...{}Первый самолет прибыл в {STATION}!
-STR_A034_PLANE_CRASH_DIE_IN_FIREBALL                            :{BLACK}{BIGFONT}Авиакатастрофа!{}{COMMA} человек погибло в огне в {STATION}
-STR_PLANE_CRASH_OUT_OF_FUEL                                     :{BLACK}{BIGFONT}Авиакатастрофа{}В самолете закончилось топливо, {COMMA} человек погибли при столкновении с землей!
+STR_A033_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Жители празднуют!{}Первый самолет прибыл в {STATION}!
+STR_A034_PLANE_CRASH_DIE_IN_FIREBALL                            :{BLACK}{BIGFONT}Авиакатастрофа!{}{COMMA} человек{P "" а ""} погиб{P "" ло ли} в огне в {STATION}!
+STR_PLANE_CRASH_OUT_OF_FUEL                                     :{BLACK}{BIGFONT}Авиакатастрофа!{}В самолете закончилось топливо, {COMMA} человек{P "" а ""} погиб{P "" ло ли} при столкновении с землей!
 STR_A036                                                        :{TINYFONT}{BLACK}{STATION}
 STR_A037_RENAME                                                 :{BLACK}Переимен.
 STR_A038_RENAME_AIRCRAFT_TYPE                                   :{BLACK}Переименовать
@@ -2882,13 +2883,13 @@
 STR_B003_FACTORY_DESTROYED_IN_SUSPICIOUS                        :{BLACK}{BIGFONT}Взрыв завода при подозрительных обстоятельствах вблизи {TOWN}!
 STR_B004_UFO_LANDS_NEAR                                         :{BLACK}{BIGFONT}НЛО приземлилось возле {TOWN}!
 STR_B005_COAL_MINE_SUBSIDENCE_LEAVES                            :{BLACK}{BIGFONT}Обвал на угольной шахте вызывает оползень около {TOWN}!
-STR_B006_FLOOD_VEHICLE_DESTROYED                                :{BLACK}{BIGFONT}НАВОДНЕНИЕ!{}По крайней мере {COMMA} скорее всего погибли при наводнении!
+STR_B006_FLOOD_VEHICLE_DESTROYED                                :{BLACK}{BIGFONT}ПОТОП!{}{COMMA} человек{P "" а ""} погиб{P "" ло ли} при наводнении транспорта!
 
 STR_BRIBE_FAILED                                                :{WHITE}Ваша попытка дать взятку была
 STR_BRIBE_FAILED_2                                              :{WHITE}обнаружена региональным следователем
 STR_BUILD_DATE                                                  :{BLACK}Построено: {LTBLUE}{DATE_LONG}
 
-STR_PERFORMANCE_DETAIL                                          :{WHITE}Подробные данные
+STR_PERFORMANCE_DETAIL                                          :{WHITE}Рейтинг в деталях
 STR_PERFORMANCE_DETAIL_KEY                                      :{BLACK}Детали
 STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY                          :{BLACK}({CURRCOMPACT}/{CURRCOMPACT})
 STR_PERFORMANCE_DETAIL_AMOUNT_INT                               :{BLACK}({COMMA}/{COMMA})
@@ -2926,7 +2927,7 @@
 STR_NEWGRF_FILENAME                                             :{BLACK}Имя файла: {SILVER}{STRING}
 STR_NEWGRF_GRF_ID                                               :{BLACK}GRF ID: {SILVER}{STRING}
 STR_NEWGRF_MD5SUM                                               :{BLACK}Сумма MD5: {SILVER}{STRING}
-STR_NEWGRF_CONFIRMATION_TEXT                                    :{YELLOW}Вы хотите сделать изменения в уже запущенной игре - это может привести к сбоям и игровым несоответствиям.{}Вы абсолютно уверены в том, что хотите сделать?
+STR_NEWGRF_CONFIRMATION_TEXT                                    :{YELLOW}Вы вносите изменения в загруженной карте - это может привести к нестабильности игры.{}{}Вы действительно хотите этого?
 
 STR_NEWGRF_ERROR_MSG_INFO                                       :{SILVER}{STRING}
 STR_NEWGRF_ERROR_MSG_WARNING                                    :{RED}Внимание: {SILVER}{STRING}
@@ -3020,20 +3021,20 @@
 STR_VEHICLE_LIST_SHIP_DEPOT                                     :{BLACK}{STRING} - {COMMA} корабл{P ь я ей}
 STR_VEHICLE_LIST_AIRCRAFT_DEPOT                                 :{BLACK}{STRING} - {COMMA} авиатранспорт{P "" а ов}
 
-STR_REPLACE_VEHICLES_WHITE                                      :{WHITE}Заменить транспорт {STRING}
-STR_REPLACE_VEHICLES_START                                      :{BLACK}Начать замену транспорта
-STR_REPLACE_VEHICLES_STOP                                       :{BLACK}Остановить замену транспорта
+STR_REPLACE_VEHICLES_WHITE                                      :{WHITE}Замена {STRING.p}
+STR_REPLACE_VEHICLES_START                                      :{BLACK}Начать замену
+STR_REPLACE_VEHICLES_STOP                                       :{BLACK}Прекратить замену
 STR_NOT_REPLACING                                               :{BLACK}Нет замены
 STR_NOT_REPLACING_VEHICLE_SELECTED                              :{BLACK}Транспорт не выбран
 STR_REPLACE_HELP_LEFT_ARRAY                                     :{BLACK}Выбор типа транспорта для замены
-STR_REPLACE_HELP_RIGHT_ARRAY                                    :{BLACK}Выбор нового типа машин, который хотелось бы использовать вместо выбранного слева типа транспорта
-STR_REPLACE_HELP_STOP_BUTTON                                    :{BLACK}Нажмите, чтобы прекратить замену локомотивов выбранного
-STR_REPLACE_HELP_START_BUTTON                                   :{BLACK}Нажмите для начала замены выбранного слева типа на выбранный справа тип
-STR_REPLACE_HELP_RAILTYPE                                       :{BLACK}Выберите тип пути, для которого вы хотите заменить локомотивы
-STR_REPLACE_HELP_REPLACE_INFO_TAB                               :{BLACK}Показывает, на какой локомотив заменяется локомотив, выбранный слева.
+STR_REPLACE_HELP_RIGHT_ARRAY                                    :{BLACK}Выбор типа транспорта, на который следует заменить
+STR_REPLACE_HELP_STOP_BUTTON                                    :{BLACK}Прекратить замену транспорта
+STR_REPLACE_HELP_START_BUTTON                                   :{BLACK}Начать замену выбранных типов транспорта
+STR_REPLACE_HELP_RAILTYPE                                       :{BLACK}Тип пути, на котором производить замену
+STR_REPLACE_HELP_REPLACE_INFO_TAB                               :{BLACK}На какой танспорт происходит замена
 STR_REPLACE_HELP                                                :{BLACK}Это позволяет заменять один тип локомотива другим, когда локомотивы выбранного типа заезжают в депо.
-STR_REPLACE_REMOVE_WAGON                                        :{BLACK}Удаление вагона: {ORANGE}{SKIP}{STRING}
-STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Разрешить при автозамене сохранять длину поездов удалением вагонов (начиная с головы поезда), если при автозамене локомотив увеличит длину поезда.
+STR_REPLACE_REMOVE_WAGON                                        :{BLACK}Удаление вагонов: {ORANGE}{SKIP}{STRING}
+STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Разрешить при автозамене сохранять длину поездов способом удаления вагонов (начиная с головы поезда), если при автозамене локомотива увеличится длина поезда.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Заменяем: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK}ЭКСПЕРИМЕНТАЛЬНО {}Переключение между окнами замены локомотивов и вагонов.{}Автозамена вагонов производится только в том случае, если совпадает тип перевозимых грузов. Эта проверка производится для каждого вагона во время автозамены.
 STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Локомотив недоступен
@@ -3058,16 +3059,16 @@
 STR_MASS_START_LIST_TIP                                         :{BLACK}Нажмите для запуска всего транспорта в списке
 
 STR_SHORT_DATE                                                  :{WHITE}{DATE_TINY}
-STR_SIGN_LIST_CAPTION                                           :{WHITE}Список меток - {COMMA} Метки
+STR_SIGN_LIST_CAPTION                                           :{WHITE}Список меток - {COMMA} Мет{P ка ки ок}
 
 STR_ORDER_REFIT_FAILED                                          :{WHITE}Ошибка задания переоборудования {STRING} {COMMA}
 
 ############ Lists rail types
 
-STR_RAIL_VEHICLES                                               :ЖД Транспорт
+STR_RAIL_VEHICLES                                               :Поезда
 STR_ELRAIL_VEHICLES                                             :Электропоезда
-STR_MONORAIL_VEHICLES                                           :Монорельсовый Транспорт
-STR_MAGLEV_VEHICLES                                             :Магнитный Транспорт
+STR_MONORAIL_VEHICLES                                           :Монорельсовые
+STR_MAGLEV_VEHICLES                                             :Магнитные
 
 ############ End of list of rail types
 
@@ -3076,9 +3077,9 @@
 STR_PURCHASE_INFO_COST_WEIGHT                                   :{BLACK}Цена: {GOLD}{CURRENCY}{BLACK} Вес: {GOLD}{WEIGHT_S}
 STR_PURCHASE_INFO_SPEED_POWER                                   :{BLACK}Скорость: {GOLD}{VELOCITY}{BLACK}   Мощность: {GOLD}{POWER}
 STR_PURCHASE_INFO_SPEED                                         :{BLACK}Скорость: {GOLD}{VELOCITY}
-STR_PURCHASE_INFO_RUNNINGCOST                                   :{BLACK}Стоимость обслуж.: {GOLD}{CURRENCY}/год
+STR_PURCHASE_INFO_RUNNINGCOST                                   :{BLACK}Стоимость обслуживания: {GOLD}{CURRENCY}/год
 STR_PURCHASE_INFO_CAPACITY                                      :{BLACK}Емкость: {GOLD}{CARGO} {STRING}
-STR_PURCHASE_INFO_DESIGNED_LIFE                                 :{BLACK}Разработано в: {GOLD}{NUM}{BLACK} Срок работы: {GOLD}{COMMA} лет
+STR_PURCHASE_INFO_DESIGNED_LIFE                                 :{BLACK}Разработано в: {GOLD}{NUM}{BLACK} Срок службы: {GOLD}{COMMA} лет
 STR_PURCHASE_INFO_RELIABILITY                                   :{BLACK}Макс. надежность: {GOLD}{COMMA}%
 STR_PURCHASE_INFO_COST                                          :{BLACK}Цена: {GOLD}{CURRENCY}
 STR_PURCHASE_INFO_WEIGHT_CWEIGHT                                :{BLACK}Вес: {GOLD}{WEIGHT_S} ({WEIGHT_S})
@@ -3088,16 +3089,16 @@
 STR_PURCHASE_INFO_REFITTABLE_TO                                 :{BLACK}Переоборуд. для: {GOLD}
 STR_PURCHASE_INFO_ALL_TYPES                                     :Всех типов грузов
 STR_PURCHASE_INFO_ALL_BUT                                       :Все, кроме {GOLD}
-STR_PURCHASE_INFO_MAX_TE                                        :{BLACK}Макс. Тяговое Усилие: {GOLD}{FORCE}
+STR_PURCHASE_INFO_MAX_TE                                        :{BLACK}Макс. тяговое усилие: {GOLD}{FORCE}
 
 ########### String for New Landscape Generator
 
 STR_GENERATE                                                    :{WHITE}Создать
-STR_RANDOM                                                      :{BLACK}Случайно
-STR_RANDOM_HELP                                                 :{BLACK}Изменить случайный номер, используемый Генератором ландшафта.
+STR_RANDOM                                                      :{BLACK}Изменить
+STR_RANDOM_HELP                                                 :{BLACK}Изменить случайный номер, используемый генератором ландшафта
 STR_WORLD_GENERATION_CAPTION                                    :{WHITE}Создание мира
-STR_RANDOM_SEED                                                 :{BLACK}Случ. номер:
-STR_RANDOM_SEED_HELP                                            :{BLACK}Нажмите для ввода случайного номера
+STR_RANDOM_SEED                                                 :{BLACK}Начальное число:
+STR_RANDOM_SEED_HELP                                            :{BLACK}Ландшафт генерируется псевдослучайно, число - опорная точка в последовательности случайных чисел.
 STR_LAND_GENERATOR                                              :{BLACK}Генератор ландш.:
 STR_TREE_PLACER                                                 :{BLACK}Генератор лесов:
 STR_HEIGHTMAP_ROTATION                                          :{BLACK}Поворот РЕЛЬЕФА:
@@ -3127,11 +3128,11 @@
 STR_WORLD_GENERATION                                            :{BLACK}Создание мира
 STR_TREE_GENERATION                                             :{BLACK}Высадка лесов
 STR_UNMOVABLE_GENERATION                                        :{BLACK}Генерация недвижимости
-STR_CLEARING_TILES                                              :{BLACK}Время разбрасывать камни ...
+STR_CLEARING_TILES                                              :{BLACK}Расстановка декораций и камней
 STR_SETTINGUP_GAME                                              :{BLACK}Настройка
 STR_PREPARING_TILELOOP                                          :{BLACK}Выполняем цикл
 STR_PREPARING_GAME                                              :{BLACK}Подготовка игры
-STR_DIFFICULTY_TO_CUSTOM                                        :{WHITE}Здесь можно изменить уровень сложности
+STR_DIFFICULTY_TO_CUSTOM                                        :{WHITE}Ваши действия сменили уровень сложности на пользовательский
 STR_SE_FLAT_WORLD                                               :{WHITE}Ровная земля
 STR_SE_FLAT_WORLD_TIP                                           :{BLACK}Создать ровную землю
 STR_SE_RANDOM_LAND                                              :{WHITE}Случайная земля
@@ -3146,20 +3147,20 @@
 STR_SMALLMAP_CENTER                                             :{BLACK}Центрировать миникарту по этой позиции
 
 ########### String for new airports
-STR_SMALL_AIRPORT                                               :{BLACK}Малый аэропорт
-STR_CITY_AIRPORT                                                :{BLACK}Городской аэропорт
-STR_METRO_AIRPORT                                               :{BLACK}Федеральный аэропорт
-STR_INTERNATIONAL_AIRPORT                                       :{BLACK}Международный аэропорт
-STR_COMMUTER_AIRPORT                                            :{BLACK}Пригородный аэропорт
-STR_INTERCONTINENTAL_AIRPORT                                    :{BLACK}Межконтинентальный аэропорт
-STR_HELIPORT                                                    :{BLACK}Вертопорт
-STR_HELIDEPOT                                                   :{BLACK}ВертоДепо
-STR_HELISTATION                                                 :{BLACK}Вертостанция
+STR_SMALL_AIRPORT                                               :{BLACK}Малый
+STR_CITY_AIRPORT                                                :{BLACK}Городской
+STR_METRO_AIRPORT                                               :{BLACK}Федеральный
+STR_INTERNATIONAL_AIRPORT                                       :{BLACK}Международный
+STR_COMMUTER_AIRPORT                                            :{BLACK}Пригородный
+STR_INTERCONTINENTAL_AIRPORT                                    :{BLACK}Межконтинентальный
+STR_HELIPORT                                                    :{BLACK}Вертолётная площадка
+STR_HELIDEPOT                                                   :{BLACK}Вертолётное депо
+STR_HELISTATION                                                 :{BLACK}Вертолётная станция
 
 STR_SMALL_AIRPORTS                                              :{BLACK}Малые аэропорты
 STR_LARGE_AIRPORTS                                              :{BLACK}Большие аэропорты
 STR_HUB_AIRPORTS                                                :{BLACK}Базовые аэропорты
-STR_HELIPORTS                                                   :{BLACK}Вертопорты
+STR_HELIPORTS                                                   :{BLACK}Вертолётные площадки
 
 ############ Tooltip measurment
 
@@ -3179,7 +3180,7 @@
 STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...эта дорога принадлежит городу
 STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...дорога неправильного направления
 
-STR_TRANSPARENCY_TOOLB                                          :{WHITE}Настройки прозрачности.
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Настройки прозрачности
 STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Переключить прозрачность значков станций.
 STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Переключить прозрачность деревьев.
 STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Переключить прозрачность зданий.
--- a/src/lang/simplified_chinese.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/simplified_chinese.txt	Wed May 09 20:22:49 2007 +0000
@@ -1144,6 +1144,7 @@
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :非常快
 STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}城镇发展为城市的比例:{ORANGE}1 / {STRING}
 STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}城镇发展为城市的比例:{ORANGE}无
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}初始城市规模因子:{ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}界面
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}建设
@@ -3167,3 +3168,9 @@
 
 STR_TRANSPARENCY_TOOLB                                          :{WHITE}透明选项
 STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}调整站牌的透明度
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}调节树木透明度
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}调节建筑透明度
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}调节工业设施透明度
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}调节车站、码头及路点等的透明度
+STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}调节桥梁的透明度
+STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}调节灯塔及信号发射塔的透明度
--- a/src/lang/slovak.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/slovak.txt	Wed May 09 20:22:49 2007 +0000
@@ -602,36 +602,36 @@
 STR_01D3_SOUND_MUSIC                                            :Zvuk/Hudba
 STR_01D4_SHOW_SOUND_MUSIC_WINDOW                                :{BLACK}Zobraz okno zvuku a hudby
 STR_01D5_ALL                                                    :{TINYFONT}Všetko
-STR_01D6_OLD_STYLE                                              :{TINYFONT}Stary styl
-STR_01D7_NEW_STYLE                                              :{TINYFONT}Novy styl
+STR_01D6_OLD_STYLE                                              :{TINYFONT}Starý štýl
+STR_01D7_NEW_STYLE                                              :{TINYFONT}Nový štýl
 STR_01D8_EZY_STREET                                             :{TINYFONT}Ezy Street
-STR_01D9_CUSTOM_1                                               :{TINYFONT}Vlastne 1
-STR_01DA_CUSTOM_2                                               :{TINYFONT}Vlastne 2
+STR_01D9_CUSTOM_1                                               :{TINYFONT}Vlastné 1
+STR_01DA_CUSTOM_2                                               :{TINYFONT}Vlastné 2
 STR_01DB_MUSIC_VOLUME                                           :{BLACK}{TINYFONT}Hlasitost hudby
 STR_01DC_EFFECTS_VOLUME                                         :{BLACK}{TINYFONT}Hlasitost zvuk. efektov
 STR_01DD_MIN_MAX                                                :{BLACK}{TINYFONT}MIN  '  '  ' '  '  '  MAX
-STR_01DE_SKIP_TO_PREVIOUS_TRACK                                 :{BLACK}Predchadzajuca stopa
-STR_01DF_SKIP_TO_NEXT_TRACK_IN_SELECTION                        :{BLACK}Nasledujuca stopa
-STR_01E0_STOP_PLAYING_MUSIC                                     :{BLACK}Zastavit prehravanie hudby
-STR_01E1_START_PLAYING_MUSIC                                    :{BLACK}Spustit prehravanie hudby
-STR_01E2_DRAG_SLIDERS_TO_SET_MUSIC                              :{BLACK}Tahat posuvace pre zmenu hlasitosti
+STR_01DE_SKIP_TO_PREVIOUS_TRACK                                 :{BLACK}Predchádzajúca stopa
+STR_01DF_SKIP_TO_NEXT_TRACK_IN_SELECTION                        :{BLACK}Nasledujúca stopa
+STR_01E0_STOP_PLAYING_MUSIC                                     :{BLACK}Zastavit prehrávanie hudby
+STR_01E1_START_PLAYING_MUSIC                                    :{BLACK}Spustit prehrávanie hudby
+STR_01E2_DRAG_SLIDERS_TO_SET_MUSIC                              :{BLACK}Tahat posúvace pre zmenu hlasitosti
 STR_01E3                                                        :{DKGREEN}{TINYFONT}--
 STR_01E4_0                                                      :{DKGREEN}{TINYFONT}0{COMMA}
 STR_01E5                                                        :{DKGREEN}{TINYFONT}{COMMA}
 STR_01E6                                                        :{DKGREEN}{TINYFONT}------
 STR_01E7                                                        :{DKGREEN}{TINYFONT}"{STRING}"
 STR_01E8_TRACK_XTITLE                                           :{BLACK}{TINYFONT}Stopa{SETX 88}Title
-STR_01E9_SHUFFLE                                                :{TINYFONT}Nahodne
+STR_01E9_SHUFFLE                                                :{TINYFONT}Náhodne
 STR_01EA_PROGRAM                                                :{TINYFONT}{BLACK}Program
-STR_01EB_MUSIC_PROGRAM_SELECTION                                :{WHITE}Vyber hudobneho programu
+STR_01EB_MUSIC_PROGRAM_SELECTION                                :{WHITE}Výber hudobného programu
 STR_01EC_0                                                      :{TINYFONT}{LTBLUE}0{COMMA} "{STRING}"
 STR_01ED                                                        :{TINYFONT}{LTBLUE}{COMMA} "{STRING}"
-STR_01EE_TRACK_INDEX                                            :{TINYFONT}{BLACK}Cislo stopy
+STR_01EE_TRACK_INDEX                                            :{TINYFONT}{BLACK}Císlo stopy
 STR_01EF_PROGRAM                                                :{TINYFONT}{BLACK}Program - '{STRING}'
 STR_01F0_CLEAR                                                  :{TINYFONT}{BLACK}Zmazat
-STR_01F1_SAVE                                                   :{TINYFONT}{BLACK}Ulozit
-STR_01F2_CURRENT_PROGRAM_OF_MUSIC                               :{BLACK}Aktualny program
-STR_01F3_SELECT_ALL_TRACKS_PROGRAM                              :{BLACK}Vybrat 'Vsetko'
+STR_01F1_SAVE                                                   :{TINYFONT}{BLACK}Uložit
+STR_01F2_CURRENT_PROGRAM_OF_MUSIC                               :{BLACK}Aktuálny program
+STR_01F3_SELECT_ALL_TRACKS_PROGRAM                              :{BLACK}Vybrat 'Všetko'
 STR_01F4_SELECT_OLD_STYLE_MUSIC                                 :{BLACK}Vybrat 'Stary styl'
 STR_01F5_SELECT_NEW_STYLE_MUSIC                                 :{BLACK}Vybrat 'Novy styl'
 STR_01F6_SELECT_CUSTOM_1_USER_DEFINED                           :{BLACK}Vybrat 'Vlastny 1' (uzivatelom definovany) program
@@ -1161,6 +1161,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Posúvat mapu
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Vypnuté
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Rychlost posúvania mapy: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Automaticka pauza pri štarte novej hry: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Maximalny pocet vlakov hraca: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Maximalny pocet automobilov hraca: {ORANGE}{STRING}
--- a/src/lang/slovenian.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/slovenian.txt	Wed May 09 20:22:49 2007 +0000
@@ -1139,6 +1139,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Premikaj zemljevid
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Izklopljeno
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Hitrost premika s kolescem miške: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Avtomatsko pavziraj ob zagonu nove igre: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Največ vlakov na igralca: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Največ cestnih vozil na igralca: {ORANGE}{STRING}
--- a/src/lang/spanish.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/spanish.txt	Wed May 09 20:22:49 2007 +0000
@@ -1098,6 +1098,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Scroll sobre el mapa
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Nada
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Velocidad del scroll sobre el mapa: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Automaticamente hace pausa cuando empieza un juego nuevo: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Máx trenes por jugador: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Máx vehículos de carretera por jugador: {ORANGE}{STRING}
@@ -1131,6 +1132,8 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Permitir comprar acciones de otras empresas
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Cuando arrastre colocar señales cada: {ORANGE}{STRING} casilla(s)
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Coloca automáticamente semáforos antes de: {ORANGE}{STRING}
+
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Posición de la barra de herramientas principal: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Izquierda
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Centro
@@ -2038,6 +2041,7 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :Ninguno
+STR_NUM_VERY_LOW                                                :Muy bajo
 STR_6816_LOW                                                    :Baja
 STR_6817_NORMAL                                                 :Normal
 STR_6818_HIGH                                                   :Alta
--- a/src/lang/swedish.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/swedish.txt	Wed May 09 20:22:49 2007 +0000
@@ -1097,6 +1097,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Scrolla kartan
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Avstängd
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Mushjulshastighet: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Pausa automatiskt vid start av nytt spel: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Max antal tåg per spelare: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Max antal vägfordon per spelare: {ORANGE}{STRING}
@@ -1130,6 +1131,15 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Tillåt inköp av aktier från andra företag
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Vid utdragning av signaler, placera en signal var: {ORANGE}{STRING} ruta
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Bygg automatiskt semaforer innan: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}Det går ej att använda "inga fler vägar" i scenario editorn
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Välj stadens väg-inställningar: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :inga fler vägar
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :standard
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :bättre vägar
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :2x2 rutnät
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :3x3 rutnät
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Position av verktygsraden: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Vänster
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Centrerad
@@ -2037,6 +2047,7 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :Ingen
+STR_NUM_VERY_LOW                                                :Väldigt låg
 STR_6816_LOW                                                    :Låg
 STR_6817_NORMAL                                                 :Normal
 STR_6818_HIGH                                                   :Hög
@@ -3102,6 +3113,8 @@
 STR_START_DATE_QUERY_CAPT                                       :{WHITE}Ändra Startår
 STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Skala-varning
 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}För stora storleksändringar av källkarta är inte rekomenderat. Fortsätt med generering?
+STR_TOWN_LAYOUT_WARNING_CAPTION                                 :{WHITE}Varning genererat från stadens väg-inställningar
+STR_TOWN_LAYOUT_WARNING_MESSAGE                                 :{YELLOW}Det är ej rekommenderat att använda inställningen "inga fler vägar". Vill du fortsätta ändå?
 STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
 STR_HEIGHTMAP_NAME                                              :{BLACK}Namn på höjdkarta:
 STR_HEIGHTMAP_SIZE                                              :{BLACK}Storlek: {ORANGE}{NUM} x {NUM}
--- a/src/lang/traditional_chinese.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/traditional_chinese.txt	Wed May 09 20:22:49 2007 +0000
@@ -421,8 +421,8 @@
 STR_0169_AUG                                                    :8
 STR_016A_SEP                                                    :9
 STR_016B_OCT                                                    :10
-STR_016C_NOV                                                    :十一月
-STR_016D_DEC                                                    :十二月
+STR_016C_NOV                                                    :11
+STR_016D_DEC                                                    :12
 ############ range for months ends
 
 STR_016E                                                        :{TINYFONT}{STRING}{} {STRING}
@@ -1097,6 +1097,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :捲動地圖
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :關閉
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}滾輪地圖捲動速度: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}自動在開始新遊戲時暫停:{ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}每位玩家可擁有列車數目:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}每位玩家可擁有車輛數目:{ORANGE}{STRING}
@@ -1130,6 +1131,15 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}可以從對手購入股份
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}拖放時訊號燈之間距離:{ORANGE}{STRING} 格
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}於日期前自動建立舊式號誌臂:{ORANGE}{STRING}年
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}在場景編輯器中,"市鎮道路不再配置" 是不合法的
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}選擇市鎮道路配置:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :道路不再配置
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :預設
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :較好的配置
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :2乘2網格
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :3乘3網格
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}主工具列位置:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :左
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :中
@@ -2037,6 +2047,7 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :無
+STR_NUM_VERY_LOW                                                :非常少
 STR_6816_LOW                                                    :低
 STR_6817_NORMAL                                                 :普通
 STR_6818_HIGH                                                   :高
@@ -2541,7 +2552,7 @@
 STR_8813_FROM                                                   :{LTBLUE}{CARGO} 來自 {STATION}
 STR_FROM_MULT                                                   :{LTBLUE}{CARGO} 來自 {STATION} (x{NUM})
 STR_8814_TRAIN_IS_WAITING_IN_DEPOT                              :{WHITE}列車 {COMMA} 已在機廠待命
-STR_8815_NEW_VEHICLES                                           :{BLACK}新造車輛
+STR_8815_NEW_VEHICLES                                           :{BLACK}購買新車輛
 STR_8816                                                        :{BLACK}-
 STR_8819_TRAIN_TOO_LONG                                         :{WHITE}列車太長
 STR_881A_TRAINS_CAN_ONLY_BE_ALTERED                             :{WHITE}列車只有在停放於機廠內的時候才能變動
@@ -3102,6 +3113,8 @@
 STR_START_DATE_QUERY_CAPT                                       :{WHITE}變更開始年份
 STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}縮放警告
 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}不建議過度縮放地圖。繼續產生?
+STR_TOWN_LAYOUT_WARNING_CAPTION                                 :{WHITE}市鎮配置警告
+STR_TOWN_LAYOUT_WARNING_MESSAGE                                 :{YELLOW} "市鎮道路不再配置" 是不建議的。要繼續產生嗎?
 STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
 STR_HEIGHTMAP_NAME                                              :{BLACK}高度圖名稱:
 STR_HEIGHTMAP_SIZE                                              :{BLACK}大小:{ORANGE}{NUM} x {NUM}
--- a/src/lang/turkish.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/turkish.txt	Wed May 09 20:22:49 2007 +0000
@@ -1130,17 +1130,27 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Diğer şirketlerin hisseleri alınabilsin
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Sürüklerken her: {ORANGE}{STRING} karede bir sinyal koy
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Bu tarihten önce ışık yerine semafor kullan: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}Senaryo düzenleyicisinde "yolsuz" şehir seçeneği kullanılamaz
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :yolsuz
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :varsayılan
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :daha iyi yollar
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :2x2
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :3x3
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Ana araç çubuğu pozisyonu: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Sol
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Orta
 STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT                            :Sağ
 STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}Pencere yapışma yarıçapı: {ORANGE}{STRING} piksel
 STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}Pencere yapışma yarıçapı: {ORANGE}kapalı
+STR_CONFIG_PATCHES_TOWN_GROWTH                                  :{LTBLUE}Şehirlerin genişleme hızı: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOWN_GROWTH_NONE                             :Hiçbiri
 STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW                             :Yavaş
 STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL                           :Normal
 STR_CONFIG_PATCHES_TOWN_GROWTH_FAST                             :Hızlı
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Çok Hızlı
+STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Kasabaların şehir olması için gerekli nüfus: {ORANGE}1 in {STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Arayüz
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}İnşaat
--- a/src/lang/ukrainian.txt	Fri May 04 23:17:26 2007 +0000
+++ b/src/lang/ukrainian.txt	Wed May 09 20:22:49 2007 +0000
@@ -1223,6 +1223,7 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Прокрутка карти
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Відкл.
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Швидкість прокрутки колесом миші: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Автоматично ставити паузу при старті нової гри: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Макс. поїздів у гравця: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Макс. авто у гравця: {ORANGE}{STRING}
@@ -1256,6 +1257,15 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Можна купувати інші компанії
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}При протаскуванні сигнали ставляться через:{ORANGE}{STRING} клітки(ок)
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Автоматично будувати семафори до: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}Схема міста "не треба більше доріг" недійсна у редакторі сценаріїв
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Виберіть схему доріг у місті: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :не треба більше доріг
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :стандартна
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :кращі дороги
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :сітка 2x2
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :сітка 3x3
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Положення головного меню: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Ліворуч
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :По центру
@@ -1270,7 +1280,7 @@
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Дуже швидка
 STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Кількість міст, які будуть рости вдвічі швидше: {ORANGE}1 з {STRING}
 STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Кількість міст, які будуть рости вдвічі швидше: {ORANGE}нема
-STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Початковий коєффіцієнт розміру міст: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Початковий коефіцієнт розміру міст: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Вигляд
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Споруди
@@ -2200,6 +2210,7 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :Нема
+STR_NUM_VERY_LOW                                                :дуже мало
 STR_6816_LOW                                                    :МалО
 STR_6817_NORMAL                                                 :Нормально
 STR_6818_HIGH                                                   :Багато
@@ -3265,6 +3276,8 @@
 STR_START_DATE_QUERY_CAPT                                       :{WHITE}Змінити рік початку гри
 STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Завелике значення
 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}Розміри дуже великі. Продовжити генерацію?
+STR_TOWN_LAYOUT_WARNING_CAPTION                                 :{WHITE}Попередження про схему міста
+STR_TOWN_LAYOUT_WARNING_MESSAGE                                 :{YELLOW}Схема міста "не треба більше доріг" небажана. Продовжити генерацію?
 STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
 STR_HEIGHTMAP_NAME                                              :{BLACK}Ім'я рельєфа:
 STR_HEIGHTMAP_SIZE                                              :{BLACK}Розмір: {ORANGE}{NUM} x {NUM}
--- a/src/main_gui.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/main_gui.cpp	Wed May 09 20:22:49 2007 +0000
@@ -171,12 +171,12 @@
 		case 2: ShowPatchesSelection(); return;
 		case 3: ShowNewGRFSettings(!_networking, true, true, &_grfconfig);   return;
 
-		case  5: _display_opt ^= DO_SHOW_TOWN_NAMES;    break;
-		case  6: _display_opt ^= DO_SHOW_STATION_NAMES; break;
-		case  7: _display_opt ^= DO_SHOW_SIGNS;         break;
-		case  8: _display_opt ^= DO_WAYPOINTS;          break;
-		case  9: _display_opt ^= DO_FULL_ANIMATION;     break;
-		case 10: _display_opt ^= DO_FULL_DETAIL;        break;
+		case  5: TOGGLEBIT(_display_opt, DO_SHOW_TOWN_NAMES);    break;
+		case  6: TOGGLEBIT(_display_opt, DO_SHOW_STATION_NAMES); break;
+		case  7: TOGGLEBIT(_display_opt, DO_SHOW_SIGNS);         break;
+		case  8: TOGGLEBIT(_display_opt, DO_WAYPOINTS);          break;
+		case  9: TOGGLEBIT(_display_opt, DO_FULL_ANIMATION);     break;
+		case 10: TOGGLEBIT(_display_opt, DO_FULL_DETAIL);        break;
 		case 11: ToggleTransparency(); break;
 		case 12: TOGGLEBIT(_transparent_opt, TO_SIGNS); break;
 	}
@@ -974,12 +974,12 @@
 
 	w = PopupMainToolbMenu(w, 2, STR_02C3_GAME_OPTIONS, 13, 0);
 
-	if (_display_opt & DO_SHOW_TOWN_NAMES)    SETBIT(x,  5);
-	if (_display_opt & DO_SHOW_STATION_NAMES) SETBIT(x,  6);
-	if (_display_opt & DO_SHOW_SIGNS)         SETBIT(x,  7);
-	if (_display_opt & DO_WAYPOINTS)          SETBIT(x,  8);
-	if (_display_opt & DO_FULL_ANIMATION)     SETBIT(x,  9);
-	if (_display_opt & DO_FULL_DETAIL)        SETBIT(x, 10);
+	if (HASBIT(_display_opt, DO_SHOW_TOWN_NAMES))    SETBIT(x,  5);
+	if (HASBIT(_display_opt, DO_SHOW_STATION_NAMES)) SETBIT(x,  6);
+	if (HASBIT(_display_opt, DO_SHOW_SIGNS))         SETBIT(x,  7);
+	if (HASBIT(_display_opt, DO_WAYPOINTS))          SETBIT(x,  8);
+	if (HASBIT(_display_opt, DO_FULL_ANIMATION))     SETBIT(x,  9);
+	if (HASBIT(_display_opt, DO_FULL_DETAIL))        SETBIT(x, 10);
 	if (GB(_transparent_opt, 1, 7) != 0)      SETBIT(x, 11);
 	if (HASBIT(_transparent_opt, TO_SIGNS))   SETBIT(x, 12);
 	WP(w,menu_d).checked_items = x;
--- a/src/map.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/map.cpp	Wed May 09 20:22:49 2007 +0000
@@ -16,24 +16,29 @@
 extern "C" _CRTIMP void __cdecl _assert(void *, void *, unsigned);
 #endif
 
-uint _map_log_x;
-uint _map_size_x;
-uint _map_size_y;
-uint _map_tile_mask;
-uint _map_size;
+uint _map_log_x;     ///< 2^_map_log_x == _map_size_x
+uint _map_size_x;    ///< Size of the map along the X
+uint _map_size_y;    ///< Size of the map along the Y
+uint _map_size;      ///< The number of tiles on the map
+uint _map_tile_mask; ///< _map_size - 1 (to mask the mapsize)
 
-Tile *_m = NULL;
-TileExtended *_me = NULL;
+Tile *_m = NULL;          ///< Tiles of the map
+TileExtended *_me = NULL; ///< Extended Tiles of the map
 
 
+/**
+ * (Re)allocates a map with the given dimension
+ * @param size_x the width of the map along the NE/SW edge
+ * @param size_y the 'height' of the map along the SE/NW edge
+ */
 void AllocateMap(uint size_x, uint size_y)
 {
 	/* Make sure that the map size is within the limits and that
 	 * the x axis size is a power of 2. */
 	if (size_x < 64 || size_x > 2048 ||
 			size_y < 64 || size_y > 2048 ||
-			(size_x&(size_x-1)) != 0 ||
-			(size_y&(size_y-1)) != 0)
+			(size_x & (size_x - 1)) != 0 ||
+			(size_y & (size_y - 1)) != 0)
 		error("Invalid map size");
 
 	DEBUG(map, 1, "Allocating map of size %dx%d", size_x, size_y);
@@ -92,7 +97,12 @@
 }
 #endif
 
-
+/**
+ * Scales the given value by the map size, where the given value is
+ * for a 256 by 256 map
+ * @param n the value to scale
+ * @return the scaled size
+ */
 uint ScaleByMapSize(uint n)
 {
 	/* First shift by 12 to prevent integer overflow for large values of n.
@@ -102,7 +112,12 @@
 }
 
 
-/* Scale relative to the circumference of the map */
+/**
+ * Scales the given value by the maps circumference, where the given
+ * value is for a 256 by 256 map
+ * @param n the value to scale
+ * @return the scaled size
+ */
 uint ScaleByMapSize1D(uint n)
 {
 	/* Normal circumference for the X+Y is 256+256 = 1<<9
@@ -113,12 +128,18 @@
 }
 
 
-/* This function checks if we add addx/addy to tile, if we
+/**
+ * This function checks if we add addx/addy to tile, if we
  *  do wrap around the edges. For example, tile = (10,2) and
  *  addx = +3 and addy = -4. This function will now return
  *  INVALID_TILE, because the y is wrapped. This is needed in
  *  for example, farmland. When the tile is not wrapped,
- *  the result will be tile + TileDiffXY(addx, addy) */
+ *  the result will be tile + TileDiffXY(addx, addy)
+ * @param tile the 'starting' point of the adding
+ * @param addx the amount of tiles in the X direction to add
+ * @param addy the amount of tiles in the Y direction to add
+ * @return translated tile, or INVALID_TILE when it would've wrapped.
+ */
 uint TileAddWrap(TileIndex tile, int addx, int addy)
 {
 	uint x = TileX(tile) + addx;
@@ -131,6 +152,7 @@
 	return INVALID_TILE;
 }
 
+/** 'Lookup table' for tile offsets given a DiagDirection */
 extern const TileIndexDiffC _tileoffs_by_diagdir[] = {
 	{-1,  0}, ///< DIAGDIR_NE
 	{ 0,  1}, ///< DIAGDIR_SE
@@ -138,6 +160,7 @@
 	{ 0, -1}  ///< DIAGDIR_NW
 };
 
+/** 'Lookup table' for tile offsets given a Direction */
 extern const TileIndexDiffC _tileoffs_by_dir[] = {
 	{-1, -1}, ///< DIR_N
 	{-1,  0}, ///< DIR_NE
@@ -149,6 +172,15 @@
 	{ 0, -1}  ///< DIR_NW
 };
 
+/**
+ * Gets the Manhattan distance between the two given tiles.
+ * The Manhattan distance is the sum of the delta of both the
+ * X and Y component.
+ * Also known as L1-Norm
+ * @param t0 the start tile
+ * @param t1 the end tile
+ * @return the distance
+ */
 uint DistanceManhattan(TileIndex t0, TileIndex t1)
 {
 	const uint dx = delta(TileX(t0), TileX(t1));
@@ -157,6 +189,15 @@
 }
 
 
+/**
+ * Gets the 'Square' distance between the two given tiles.
+ * The 'Square' distance is the square of the shortest (straight line)
+ * distance between the two tiles.
+ * Also known as euclidian- or L2-Norm squared.
+ * @param t0 the start tile
+ * @param t1 the end tile
+ * @return the distance
+ */
 uint DistanceSquare(TileIndex t0, TileIndex t1)
 {
 	const int dx = TileX(t0) - TileX(t1);
@@ -165,6 +206,13 @@
 }
 
 
+/**
+ * Gets the biggest distance component (x or y) between the two given tiles.
+ * Also known as L-Infinity-Norm.
+ * @param t0 the start tile
+ * @param t1 the end tile
+ * @return the distance
+ */
 uint DistanceMax(TileIndex t0, TileIndex t1)
 {
 	const uint dx = delta(TileX(t0), TileX(t1));
@@ -173,6 +221,14 @@
 }
 
 
+/**
+ * Gets the biggest distance component (x or y) between the two given tiles
+ * plus the Manhattan distance, i.e. two times the biggest distance component
+ * and once the smallest component.
+ * @param t0 the start tile
+ * @param t1 the end tile
+ * @return the distance
+ */
 uint DistanceMaxPlusManhattan(TileIndex t0, TileIndex t1)
 {
 	const uint dx = delta(TileX(t0), TileX(t1));
@@ -180,6 +236,11 @@
 	return dx > dy ? 2 * dx + dy : 2 * dy + dx;
 }
 
+/**
+ * Param the minimum distance to an edge
+ * @param tile the tile to get the distance from
+ * @return the distance from the edge in tiles
+ */
 uint DistanceFromEdge(TileIndex tile)
 {
 	const uint xl = TileX(tile);
--- a/src/map.h	Fri May 04 23:17:26 2007 +0000
+++ b/src/map.h	Wed May 09 20:22:49 2007 +0000
@@ -7,29 +7,41 @@
 
 #include "stdafx.h"
 
-/* Putting externs inside inline functions seems to confuse the aliasing
- * checking on MSVC6. Never use those variables directly. */
-extern uint _map_log_x;
-extern uint _map_size_x;
-extern uint _map_size_y;
 extern uint _map_tile_mask;
-extern uint _map_size;
+
+/**
+ * 'Wraps' the given tile to it is within the map. It does
+ * this by masking the 'high' bits of.
+ * @param x the tile to 'wrap'
+ */
 
 #define TILE_MASK(x) ((x) & _map_tile_mask)
+/**
+ * Asserts when the tile is outside of the map.
+ * @param x the tile to check
+ */
 #define TILE_ASSERT(x) assert(TILE_MASK(x) == (x));
 
+/**
+ * Data that is stored per tile. Also used TileExtended for this.
+ * Look at docs/landscape.html for the exact meaning of the members.
+ */
 struct Tile {
-	byte type_height;
-	byte m1;
-	uint16 m2;
-	byte m3;
-	byte m4;
-	byte m5;
-	byte m6;
+	byte type_height; ///< The type (bits 4..7) and height of the northern corner
+	byte m1;   ///< Primarily used for ownership information
+	uint16 m2; ///< Primarily used for indices to towns, industries and stations
+	byte m3;   ///< General purpose
+	byte m4;   ///< General purpose
+	byte m5;   ///< General purpose
+	byte m6;   ///< Primarily used for bridges and rainforest/desert
 };
 
+/**
+ * Data that is stored per tile. Also used Tile for this.
+ * Look at docs/landscape.html for the exact meaning of the members.
+ */
 struct TileExtended {
-	byte m7;
+	byte m7; ///< Primarily used for newgrf support
 };
 
 extern Tile *_m;
@@ -37,16 +49,64 @@
 
 void AllocateMap(uint size_x, uint size_y);
 
-/* binary logarithm of the map size, try to avoid using this one */
-static inline uint MapLogX()  { return _map_log_x; }
-/* The size of the map */
-static inline uint MapSizeX() { return _map_size_x; }
-static inline uint MapSizeY() { return _map_size_y; }
-/* The maximum coordinates */
-static inline uint MapMaxX() { return _map_size_x - 1; }
-static inline uint MapMaxY() { return _map_size_y - 1; }
-/* The number of tiles in the map */
-static inline uint MapSize() { return _map_size; }
+/**
+ * Logarithm of the map size along the X side.
+ * @note try to avoid using this one
+ * @return 2^"return value" == MapSizeX()
+ */
+static inline uint MapLogX()
+{
+	extern uint _map_log_x;
+	return _map_log_x;
+}
+
+/**
+ * Get the size of the map along the X
+ * @return the number of tiles along the X of the map
+ */
+static inline uint MapSizeX()
+{
+	extern uint _map_size_x;
+	return _map_size_x;
+}
+
+/**
+ * Get the size of the map along the Y
+ * @return the number of tiles along the Y of the map
+ */
+static inline uint MapSizeY()
+{
+	extern uint _map_size_y;
+	return _map_size_y;
+}
+
+/**
+ * Get the size of the map
+ * @return the number of tiles of the map
+ */
+static inline uint MapSize()
+{
+	extern uint _map_size;
+	return _map_size;
+}
+
+/**
+ * Gets the maximum X coordinate within the map, including MP_VOID
+ * @return the maximum X coordinate
+ */
+static inline uint MapMaxX()
+{
+	return MapSizeX() - 1;
+}
+
+/**
+ * Gets the maximum X coordinate within the map, including MP_VOID
+ * @return the maximum X coordinate
+ */
+static inline uint MapMaxY()
+{
+	return MapSizeY() - 1;
+}
 
 /* Scale a number relative to the map size */
 uint ScaleByMapSize(uint); // Scale relative to the number of tiles
@@ -76,7 +136,7 @@
 
 
 enum {
-	INVALID_TILE = (TileIndex)-1
+	INVALID_TILE = (TileIndex)-1 ///< The very nice invalid tile marker
 };
 
 enum {
@@ -86,11 +146,21 @@
 };
 
 
+/**
+ * Get the X component of a tile
+ * @param tile the tile to get the X component of
+ * @return the X component
+ */
 static inline uint TileX(TileIndex tile)
 {
 	return tile & MapMaxX();
 }
 
+/**
+ * Get the Y component of a tile
+ * @param tile the tile to get the Y component of
+ * @return the Y component
+ */
 static inline uint TileY(TileIndex tile)
 {
 	return tile >> MapLogX();
@@ -139,6 +209,23 @@
 		return TileXY(x, y);
 }
 
+/**
+ * Returns the diff between two tiles
+ *
+ * @param tile_a from tile
+ * @param tile_b to tile
+ * @return the difference between tila_a and tile_b
+ */
+static inline TileIndexDiffC TileIndexToTileIndexDiffC(TileIndex tile_a, TileIndex tile_b)
+{
+	TileIndexDiffC difference;
+
+	difference.x = TileX(tile_a) - TileX(tile_b);
+	difference.y = TileY(tile_a) - TileY(tile_b);
+
+	return difference;
+}
+
 /* Functions to calculate distances */
 uint DistanceManhattan(TileIndex, TileIndex); ///< also known as L1-Norm. Is the shortest distance one could go over diagonal tracks (or roads)
 uint DistanceSquare(TileIndex, TileIndex); ///< euclidian- or L2-Norm squared
--- a/src/network/network.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/network/network.cpp	Wed May 09 20:22:49 2007 +0000
@@ -1395,11 +1395,13 @@
 		byte cl_max = _network_game_info.clients_max;
 		byte cp_max = _network_game_info.companies_max;
 		byte sp_max = _network_game_info.spectators_max;
+		byte s_lang = _network_game_info.server_lang;
 
 		memset(&_network_game_info, 0, sizeof(_network_game_info));
 		_network_game_info.clients_max = cl_max;
 		_network_game_info.companies_max = cp_max;
 		_network_game_info.spectators_max = sp_max;
+		_network_game_info.server_lang = s_lang;
 	}
 
 
--- a/src/network/network_client.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/network/network_client.cpp	Wed May 09 20:22:49 2007 +0000
@@ -183,7 +183,7 @@
 	// Data:
 	//    uint8:  ActionID (see network_data.h, NetworkAction)
 	//    uint8:  Destination Type (see network_data.h, DestType);
-	//    uint8:  Destination Player (1..MAX_PLAYERS)
+	//    uint16: Destination Player
 	//    String: Message (max MAX_TEXT_MSG_LEN)
 	//
 
@@ -191,7 +191,7 @@
 
 	p->Send_uint8 (action);
 	p->Send_uint8 (type);
-	p->Send_uint8 (dest);
+	p->Send_uint16(dest);
 	p->Send_string(msg);
 	MY_CLIENT->Send_Packet(p);
 }
--- a/src/network/network_gui.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/network/network_gui.cpp	Wed May 09 20:22:49 2007 +0000
@@ -1469,7 +1469,7 @@
 	if (w != NULL) w->parent = FindWindowById(WC_NETWORK_WINDOW, 0);
 }
 
-static void SendChat(const char *buf, DestType type, byte dest)
+static void SendChat(const char *buf, DestType type, int dest)
 {
 	if (buf[0] == '\0') return;
 	if (!_network_server) {
@@ -1533,7 +1533,7 @@
 static void ChatTabCompletion(Window *w)
 {
 	static char _chat_tab_completion_buf[lengthof(_edit_str_buf)];
-	Textbuf *tb = &WP(w, querystr_d).text;
+	Textbuf *tb = &WP(w, chatquerystr_d).text;
 	uint len, tb_len;
 	uint item;
 	char *tb_buf, *pre_buf;
@@ -1591,7 +1591,7 @@
 			}
 
 			/* Update the textbuffer */
-			UpdateTextBufferSize(&WP(w, querystr_d).text);
+			UpdateTextBufferSize(&WP(w, chatquerystr_d).text);
 
 			SetWindowDirty(w);
 			free(pre_buf);
@@ -1605,17 +1605,17 @@
 		_chat_tab_completion_active = false;
 
 		/* Update the textbuffer */
-		UpdateTextBufferSize(&WP(w, querystr_d).text);
+		UpdateTextBufferSize(&WP(w, chatquerystr_d).text);
 
 		SetWindowDirty(w);
 	}
 	free(pre_buf);
 }
 
-/* uses querystr_d WP macro
- * uses querystr_d->caption to store
- * - type of chat message (Private/Team/All) in bytes 0-7
- * - destination of chat message in the case of Team/Private in bytes 8-15 */
+/*
+ * uses chatquerystr_d WP macro
+ * uses chatquerystr_d->caption to store type of chat message (Private/Team/All)
+ */
 static void ChatWindowWndProc(Window *w, WindowEvent *e)
 {
 	switch (e->event) {
@@ -1634,25 +1634,25 @@
 
 		DrawWindowWidgets(w);
 
-		assert(GB(WP(w, querystr_d).caption, 0, 8) < lengthof(chat_captions));
-		msg = chat_captions[GB(WP(w, querystr_d).caption, 0, 8)];
+		assert(WP(w, chatquerystr_d).caption < lengthof(chat_captions));
+		msg = chat_captions[WP(w, chatquerystr_d).caption];
 		DrawStringRightAligned(w->widget[2].left - 2, w->widget[2].top + 1, msg, 16);
-		DrawEditBox(w, &WP(w, querystr_d), 2);
+		DrawEditBox(w, &WP(w, chatquerystr_d), 2);
 	} break;
 
 	case WE_CLICK:
 		switch (e->we.click.widget) {
 			case 3: { /* Send */
-				DestType type = (DestType)GB(WP(w, querystr_d).caption, 0, 8);
-				byte dest = GB(WP(w, querystr_d).caption, 8, 8);
-				SendChat(WP(w, querystr_d).text.buf, type, dest);
+				DestType type = (DestType)WP(w, chatquerystr_d).caption;
+				int dest = WP(w, chatquerystr_d).dest;
+				SendChat(WP(w, chatquerystr_d).text.buf, type, dest);
 			} /* FALLTHROUGH */
 			case 0: /* Cancel */ DeleteWindow(w); break;
 		}
 		break;
 
 	case WE_MOUSELOOP:
-		HandleEditBox(w, &WP(w, querystr_d), 2);
+		HandleEditBox(w, &WP(w, chatquerystr_d), 2);
 		break;
 
 	case WE_KEYPRESS:
@@ -1660,11 +1660,11 @@
 			ChatTabCompletion(w);
 		} else {
 			_chat_tab_completion_active = false;
-			switch (HandleEditBoxKey(w, &WP(w, querystr_d), 2, e)) {
+			switch (HandleEditBoxKey(w, &WP(w, chatquerystr_d), 2, e)) {
 				case 1: { /* Return */
-				DestType type = (DestType)GB(WP(w, querystr_d).caption, 0, 8);
-				byte dest = GB(WP(w, querystr_d).caption, 8, 8);
-				SendChat(WP(w, querystr_d).text.buf, type, dest);
+				DestType type = (DestType)WP(w, chatquerystr_d).caption;
+				int dest = WP(w, chatquerystr_d).dest;
+				SendChat(WP(w, chatquerystr_d).text.buf, type, dest);
 			} /* FALLTHROUGH */
 				case 2: /* Escape */ DeleteWindow(w); break;
 			}
@@ -1694,7 +1694,7 @@
 	ChatWindowWndProc
 };
 
-void ShowNetworkChatQueryWindow(DestType type, byte dest)
+void ShowNetworkChatQueryWindow(DestType type, int dest)
 {
 	Window *w;
 
@@ -1706,9 +1706,10 @@
 	w = AllocateWindowDesc(&_chat_window_desc);
 
 	LowerWindowWidget(w, 2);
-	WP(w, querystr_d).caption = GB(type, 0, 8) | (dest << 8); // Misuse of caption
-	WP(w, querystr_d).afilter = CS_ALPHANUMERAL;
-	InitializeTextBuffer(&WP(w, querystr_d).text, _edit_str_buf, lengthof(_edit_str_buf), 0);
+	WP(w, chatquerystr_d).caption = type; // Misuse of caption
+	WP(w, chatquerystr_d).dest    = dest;
+	WP(w, chatquerystr_d).afilter = CS_ALPHANUMERAL;
+	InitializeTextBuffer(&WP(w, chatquerystr_d).text, _edit_str_buf, lengthof(_edit_str_buf), 0);
 }
 
 #endif /* ENABLE_NETWORK */
--- a/src/network/network_gui.h	Fri May 04 23:17:26 2007 +0000
+++ b/src/network/network_gui.h	Wed May 09 20:22:49 2007 +0000
@@ -9,7 +9,7 @@
 
 void ShowNetworkNeedPassword(NetworkPasswordType npt);
 void ShowNetworkGiveMoneyWindow(PlayerID player); // PlayerID
-void ShowNetworkChatQueryWindow(DestType type, byte dest);
+void ShowNetworkChatQueryWindow(DestType type, int dest);
 void ShowJoinStatusWindow();
 void ShowNetworkGameWindow();
 void ShowClientList();
@@ -17,7 +17,7 @@
 #else /* ENABLE_NETWORK */
 /* Network function stubs when networking is disabled */
 
-static inline void ShowNetworkChatQueryWindow(byte desttype, byte dest) {}
+static inline void ShowNetworkChatQueryWindow(byte desttype, int dest) {}
 static inline void ShowClientList() {}
 static inline void ShowNetworkGameWindow() {}
 
--- a/src/network/network_server.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/network/network_server.cpp	Wed May 09 20:22:49 2007 +0000
@@ -101,7 +101,7 @@
 		p->Send_uint16(_network_player_info[player->index].performance);
 
 		/* Send 1 if there is a passord for the company else send 0 */
-		p->Send_bool(StrEmpty(_network_player_info[player->index].password));
+		p->Send_bool(!StrEmpty(_network_player_info[player->index].password));
 
 		for (i = 0; i < NETWORK_VEHICLE_TYPES; i++) {
 			p->Send_uint16(_network_player_info[player->index].num_vehicle[i]);
@@ -1115,7 +1115,7 @@
 {
 	NetworkAction action = (NetworkAction)p->Recv_uint8();
 	DestType desttype = (DestType)p->Recv_uint8();
-	int dest = p->Recv_uint8();
+	int dest = p->Recv_uint16();
 	char msg[MAX_TEXT_MSG_LEN];
 
 	p->Recv_string(msg, MAX_TEXT_MSG_LEN);
--- a/src/newgrf.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/newgrf.cpp	Wed May 09 20:22:49 2007 +0000
@@ -38,6 +38,8 @@
 #include "helpers.hpp"
 #include "table/town_land.h"
 #include "cargotype.h"
+#include "industry.h"
+#include "newgrf_canal.h"
 
 /* TTDPatch extended GRF format codec
  * (c) Petr Baudis 2004 (GPL'd)
@@ -310,7 +312,7 @@
 				uint8 tracktype = grf_load_byte(&buf);
 
 				switch (tracktype) {
-					case 0: rvi[i].railtype = rvi[i].engclass == 2 ? RAILTYPE_ELECTRIC : RAILTYPE_RAIL; break;
+					case 0: rvi[i].railtype = rvi[i].engclass >= 2 ? RAILTYPE_ELECTRIC : RAILTYPE_RAIL; break;
 					case 1: rvi[i].railtype = RAILTYPE_MONO; break;
 					case 2: rvi[i].railtype = RAILTYPE_MAGLEV; break;
 					default:
@@ -446,21 +448,23 @@
 			 */
 			FOR_EACH_OBJECT {
 				uint8 traction = grf_load_byte(&buf);
-				int engclass;
+				EngineClass engclass;
 
 				if (traction <= 0x07) {
-					engclass = 0;
+					engclass = EC_STEAM;
 				} else if (traction <= 0x27) {
-					engclass = 1;
+					engclass = EC_DIESEL;
 				} else if (traction <= 0x31) {
-					engclass = 2;
+					engclass = EC_ELECTRIC;
+				} else if (traction <= 0x37) {
+					engclass = EC_MONORAIL;
 				} else if (traction <= 0x41) {
-					engclass = 2;
+					engclass = EC_MAGLEV;
 				} else {
 					break;
 				}
-				if (rvi[i].railtype == RAILTYPE_RAIL     && engclass == 2) rvi[i].railtype = RAILTYPE_ELECTRIC;
-				if (rvi[i].railtype == RAILTYPE_ELECTRIC && engclass != 2) rvi[i].railtype = RAILTYPE_RAIL;
+				if (rvi[i].railtype == RAILTYPE_RAIL     && engclass >= EC_ELECTRIC) rvi[i].railtype = RAILTYPE_ELECTRIC;
+				if (rvi[i].railtype == RAILTYPE_ELECTRIC && engclass  < EC_ELECTRIC) rvi[i].railtype = RAILTYPE_RAIL;
 
 				rvi[i].engclass = engclass;
 			}
@@ -1790,11 +1794,6 @@
 
 	EngineInfo *ei = NULL;
 
-	if (len == 1) {
-		grfmsg(8, "Silently ignoring one-byte special sprite 0x00");
-		return;
-	}
-
 	if (!check_length(len, 6, "FeatureChangeInfo")) return;
 	buf++;
 	uint8 feature  = grf_load_byte(&buf);
@@ -1878,11 +1877,6 @@
 /* Action 0x00 (GLS_SAFETYSCAN) */
 static void SafeChangeInfo(byte *buf, int len)
 {
-	if (len == 1) {
-		grfmsg(8, "Silently ignoring one-byte special sprite 0x00");
-		return;
-	}
-
 	if (!check_length(len, 6, "SafeChangeInfo")) return;
 	buf++;
 	uint8 feature  = grf_load_byte(&buf);
@@ -1908,11 +1902,6 @@
 {
 	byte *bufend = buf + len;
 
-	if (len == 1) {
-		grfmsg(8, "Silently ignoring one-byte special sprite 0x00");
-		return;
-	}
-
 	if (!check_length(len, 6, "InitChangeInfo")) return;
 	buf++;
 	uint8 feature  = grf_load_byte(&buf);
@@ -1953,11 +1942,6 @@
 {
 	byte *bufend = buf + len;
 
-	if (len == 1) {
-		grfmsg(8, "Silently ignoring one-byte special sprite 0x00");
-		return;
-	}
-
 	if (!check_length(len, 6, "InitChangeInfo")) return;
 	buf++;
 	uint8 feature  = grf_load_byte(&buf);
@@ -2054,6 +2038,20 @@
 	}
 }
 
+/* Action 0x01 (SKIP) */
+static void SkipAct1(byte *buf, int len)
+{
+	if (!check_length(len, 4, "SkipAct1")) return;
+	buf++;
+	grf_load_byte(&buf);
+	uint8 num_sets  = grf_load_byte(&buf);
+	uint16 num_ents = grf_load_extended(&buf);
+
+	_skip_sprites = num_sets * num_ents;
+
+	grfmsg(3, "SkipAct1: Skipping %d sprites", _skip_sprites);
+}
+
 /* Helper function to either create a callback or link to a previously
  * defined spritegroup. */
 static const SpriteGroup* GetGroupFromGroupID(byte setid, byte type, uint16 groupid)
@@ -2249,6 +2247,7 @@
 				case GSF_SHIP:
 				case GSF_AIRCRAFT:
 				case GSF_STATION:
+				case GSF_CANAL:
 				case GSF_CARGOS:
 				{
 					byte sprites     = _cur_grffile->spriteset_numents;
@@ -2518,6 +2517,30 @@
 }
 
 
+static void CanalMapSpriteGroup(byte *buf, uint8 idcount, uint8 cidcount)
+{
+	byte *bp = &buf[4 + idcount + cidcount * 3];
+	uint16 groupid = grf_load_word(&bp);
+
+	if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) {
+		grfmsg(1, "CanalMapSpriteGroup: Spriteset 0x%04X out of range 0x%X or empty, skipping.",
+		       groupid, _cur_grffile->spritegroups_count);
+		return;
+	}
+
+	for (uint i = 0; i < idcount; i++) {
+		CanalFeature cf = (CanalFeature)buf[3 + i];
+
+		if (cf >= CF_END) {
+			grfmsg(1, "CanalMapSpriteGroup: Canal subset %d out of range, skipping", cf);
+			continue;
+		}
+
+		_canal_sg[cf] = _cur_grffile->spritegroups[groupid];
+	}
+}
+
+
 static void StationMapSpriteGroup(byte *buf, uint8 idcount, uint8 cidcount)
 {
 	for (uint i = 0; i < idcount; i++) {
@@ -2666,6 +2689,10 @@
 			VehicleMapSpriteGroup(buf, feature, idcount, cidcount, wagover);
 			return;
 
+		case GSF_CANAL:
+			CanalMapSpriteGroup(buf, idcount, cidcount);
+			return;
+
 		case GSF_STATION:
 			StationMapSpriteGroup(buf, idcount, cidcount);
 			return;
@@ -2733,8 +2760,6 @@
 
 		if (name_length == 1) {
 			grfmsg(7, "FeatureNewName: Can't add empty name");
-		} else if (name_length > 127) {
-			grfmsg(7, "FeatureNewName: Too long a name (%d)", name_length);
 		} else {
 			grfmsg(8, "FeatureNewName: %d <- %s", id, name);
 
@@ -2916,6 +2941,21 @@
 	}
 }
 
+/* Action 0x05 (SKIP) */
+static void SkipAct5(byte *buf, int len)
+{
+	if (!check_length(len, 2, "SkipAct5")) return;
+	buf++;
+
+	/* Ignore type byte */
+	grf_load_byte(&buf);
+
+	/* Skip the sprites of this action */
+	_skip_sprites = grf_load_extended(&buf);
+
+	grfmsg(3, "SkipAct5: Skipping %d sprites", _skip_sprites);
+}
+
 static uint32 GetParamVal(byte param, uint32 *cond_val)
 {
 	switch (param) {
@@ -2948,7 +2988,7 @@
 			uint major    = 2;
 			uint minor    = 6;
 			uint revision = 0; // special case: 2.0.1 is 2.0.10
-			uint build    = 1168;
+			uint build    = 1210;
 			return (major << 24) | (minor << 20) | (revision << 16) | build;
 		}
 
@@ -3283,6 +3323,22 @@
 	}
 }
 
+/* Action 0x0A (SKIP) */
+static void SkipActA(byte *buf, int len)
+{
+	buf++;
+	uint8 num_sets = grf_load_byte(&buf);
+
+	for (uint i = 0; i < num_sets; i++) {
+		/* Skip the sprites this replaces */
+		_skip_sprites += grf_load_byte(&buf);
+		/* But ignore where they go */
+		grf_load_word(&buf);
+	}
+
+	grfmsg(3, "SkipActA: Skipping %d sprites", _skip_sprites);
+}
+
 /* Action 0x0B */
 static void GRFLoadError(byte *buf, int len)
 {
@@ -3439,7 +3495,7 @@
 {
 	switch (param) {
 		/* start year - 1920 */
-		case 0x0B: return _cur_year - ORIGINAL_BASE_YEAR;
+		case 0x0B: return max(_patches.starting_year, ORIGINAL_BASE_YEAR) - ORIGINAL_BASE_YEAR;
 		/* freight trains weight factor */
 		case 0x0E: return _patches.freight_trains;
 		/* empty wagon speed increase */
@@ -3732,7 +3788,7 @@
 		case 0x9E: // Miscellaneous GRF features
 			_misc_grf_features = res;
 			/* Set train list engine width */
-			_traininfo_vehicle_width = HASBIT(res, 3) ? 32 : 29;
+			_traininfo_vehicle_width = HasGrfMiscBit(GMB_TRAIN_WIDTH_32_PIXELS) ? 32 : 29;
 			break;
 
 		default:
@@ -4291,6 +4347,9 @@
 	ResetStationClasses();
 	ResetCustomStations();
 
+	/* Reset canal sprite groups */
+	memset(_canal_sg, 0, sizeof(_canal_sg));
+
 	/* Reset the snowline table. */
 	ClearSnowLine();
 
@@ -4584,16 +4643,16 @@
 	 * In other stages we skip action 0x10 since it's already dealt with. */
 	static const SpecialSpriteHandler handlers[][GLS_END] = {
 		/* 0x00 */ { NULL,     SafeChangeInfo, NULL,       InitChangeInfo, ReserveChangeInfo, FeatureChangeInfo, },
-		/* 0x01 */ { NULL,     GRFUnsafe, NULL,            NULL,           NULL,              NewSpriteSet, },
-		/* 0x02 */ { NULL,     GRFUnsafe, NULL,            NULL,           NULL,              NewSpriteGroup, },
+		/* 0x01 */ { SkipAct1, SkipAct1,  SkipAct1,        SkipAct1,       SkipAct1,          NewSpriteSet, },
+		/* 0x02 */ { NULL,     NULL,      NULL,            NULL,           NULL,              NewSpriteGroup, },
 		/* 0x03 */ { NULL,     GRFUnsafe, NULL,            NULL,           NULL,              FeatureMapSpriteGroup, },
 		/* 0x04 */ { NULL,     NULL,      NULL,            NULL,           NULL,              FeatureNewName, },
-		/* 0x05 */ { NULL,     NULL,      NULL,            NULL,           NULL,              GraphicsNew, },
+		/* 0x05 */ { SkipAct5, SkipAct5,  SkipAct5,        SkipAct5,       SkipAct5,          GraphicsNew, },
 		/* 0x06 */ { NULL,     NULL,      NULL,            CfgApply,       CfgApply,          CfgApply, },
 		/* 0x07 */ { NULL,     NULL,      NULL,            NULL,           SkipIf,            SkipIf, },
 		/* 0x08 */ { ScanInfo, NULL,      NULL,            GRFInfo,        NULL,              GRFInfo, },
 		/* 0x09 */ { NULL,     NULL,      NULL,            SkipIf,         SkipIf,            SkipIf, },
-		/* 0x0A */ { NULL,     NULL,      NULL,            NULL,           NULL,              SpriteReplace, },
+		/* 0x0A */ { SkipActA, SkipActA,  SkipActA,        SkipActA,       SkipActA,          SpriteReplace, },
 		/* 0x0B */ { NULL,     NULL,      NULL,            GRFLoadError,   GRFLoadError,      GRFLoadError, },
 		/* 0x0C */ { NULL,     NULL,      NULL,            GRFComment,     NULL,              GRFComment, },
 		/* 0x0D */ { NULL,     SafeParamSet, NULL,         ParamSet,       ParamSet,          ParamSet, },
@@ -4738,6 +4797,9 @@
 	/* Add all new houses to the house array. */
 	FinaliseHouseArray();
 
+	/* Create dynamic list of industry legends for smallmap_gui.cpp */
+	BuildIndustriesLegend();
+
 	/* Map cargo strings. This is a separate step because cargos are
 	 * loaded before strings... */
 	MapNewCargoStrings();
@@ -4776,3 +4838,8 @@
 	/* Call any functions that should be run after GRFs have been loaded. */
 	AfterLoadGRFs();
 }
+
+bool HasGrfMiscBit(GrfMiscBit bit)
+{
+	return HASBIT(_misc_grf_features, bit);
+}
--- a/src/newgrf.h	Fri May 04 23:17:26 2007 +0000
+++ b/src/newgrf.h	Wed May 09 20:22:49 2007 +0000
@@ -23,6 +23,14 @@
 
 DECLARE_POSTFIX_INCREMENT(GrfLoadingStage);
 
+enum GrfMiscBit {
+	GMB_DESERT_TREES_FIELDS    = 0, // Unsupported.
+	GMB_DESERT_PAVED_ROADS     = 1,
+	GMB_FIELD_BOUNDING_BOX     = 2, // Unsupported.
+	GMB_TRAIN_WIDTH_32_PIXELS  = 3,
+	GMB_AMBIENT_SOUND_CALLBACK = 4, // Unsupported.
+	GMB_CATENARY_ON_3RD_TRACK  = 5, // Unsupported.
+};
 
 struct GRFLabel {
 	byte label;
@@ -85,4 +93,6 @@
 
 void CDECL grfmsg(int severity, const char *str, ...);
 
+bool HasGrfMiscBit(GrfMiscBit bit);
+
 #endif /* NEWGRF_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/newgrf_canal.cpp	Wed May 09 20:22:49 2007 +0000
@@ -0,0 +1,96 @@
+/* $Id$ */
+
+#include "stdafx.h"
+#include "openttd.h"
+#include "variables.h"
+#include "landscape.h"
+#include "debug.h"
+#include "newgrf.h"
+#include "newgrf_callbacks.h"
+#include "newgrf_spritegroup.h"
+#include "newgrf_canal.h"
+
+
+/** Table of canal 'feature' sprite groups */
+const SpriteGroup *_canal_sg[CF_END];
+
+
+/* Random bits and triggers are not supported for canals, so the following
+ * three functions are stubs. */
+static uint32 CanalGetRandomBits(const ResolverObject *object)
+{
+	return 0;
+}
+
+
+static uint32 CanalGetTriggers(const ResolverObject *object)
+{
+	return 0;
+}
+
+
+static void CanalSetTriggers(const ResolverObject *object, int triggers)
+{
+	return;
+}
+
+
+static uint32 CanalGetVariable(const ResolverObject *object, byte variable, byte parameter, bool *available)
+{
+	TileIndex tile = object->u.canal.tile;
+
+	switch (variable) {
+		case 0x80:
+			return TileHeight(tile);
+
+		case 0x81:
+			return ((_opt.landscape == LT_ARCTIC && GetTileZ(tile) > GetSnowLine()) ? 4 : 0) |
+			       (_opt.landscape == LT_TROPIC ? GetTropicZone(tile) : 0);
+	}
+
+	DEBUG(grf, 1, "Unhandled canal property 0x%02X", variable);
+
+	*available = false;
+	return 0;
+}
+
+
+static const SpriteGroup *CanalResolveReal(const ResolverObject *object, const SpriteGroup *group)
+{
+	if (group->g.real.num_loaded == 0) return NULL;
+
+	return group->g.real.loaded[0];
+}
+
+
+static void NewCanalResolver(ResolverObject *res, TileIndex tile)
+{
+	res->GetRandomBits = &CanalGetRandomBits;
+	res->GetTriggers   = &CanalGetTriggers;
+	res->SetTriggers   = &CanalSetTriggers;
+	res->GetVariable   = &CanalGetVariable;
+	res->ResolveReal   = &CanalResolveReal;
+
+	res->u.canal.tile = tile;
+
+	res->callback        = 0;
+	res->callback_param1 = 0;
+	res->callback_param2 = 0;
+	res->last_value      = 0;
+	res->trigger         = 0;
+	res->reseed          = 0;
+}
+
+
+SpriteID GetCanalSprite(CanalFeature feature, TileIndex tile)
+{
+	ResolverObject object;
+	const SpriteGroup *group;
+
+	NewCanalResolver(&object, tile);
+
+	group = Resolve(_canal_sg[feature], &object);
+	if (group == NULL || group->type != SGT_RESULT) return 0;
+
+	return group->g.result.sprite;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/newgrf_canal.h	Wed May 09 20:22:49 2007 +0000
@@ -0,0 +1,29 @@
+/* $Id$ */
+
+#ifndef NEWGRF_CANAL_H
+#define NEWGRF_CANAL_H
+
+/** List of different canal 'features'.
+ * Each feature gets an entry in the canal spritegroup table */
+enum CanalFeature {
+	CF_WATERSLOPE,
+	CF_LOCKS,
+	CF_DIKES,
+	CF_ICON,
+	CF_DOCKS,
+	CF_END,
+};
+
+
+/** Table of canal 'feature' sprite groups */
+extern const SpriteGroup *_canal_sg[CF_END];
+
+
+/** Lookup the base sprite to use for a canal.
+ * @param feature Which canal feature we want.
+ * @param tile Tile index of canal, if appropriate.
+ * @return Base sprite returned by GRF, or 0 if none.
+ */
+SpriteID GetCanalSprite(CanalFeature feature, TileIndex tile);
+
+#endif /* NEWGRF_CANAL_H */
--- a/src/newgrf_engine.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/newgrf_engine.cpp	Wed May 09 20:22:49 2007 +0000
@@ -589,6 +589,25 @@
 				return (altitude << 8) | airporttype;
 			}
 
+		case 0x45: { // Curvature info
+			/* Format: xxxTxBxF
+			 * F - previous wagon to current wagon, 0 if vehicle is first
+			 * B - current wagon to next wagon, 0 if wagon is last
+			 * T - previous wagon to next wagon, 0 in an S-bend
+			 */
+			if (v->type != VEH_TRAIN) return 0;
+
+			const Vehicle *u_p = GetPrevVehicleInChain(v);
+			const Vehicle *u_n = v->next;
+			DirDiff f = (u_p == NULL) ?  DIRDIFF_SAME : DirDifference(u_p->direction, v->direction);
+			DirDiff b = (u_n == NULL) ?  DIRDIFF_SAME : DirDifference(v->direction, u_n->direction);
+			DirDiff t = ChangeDirDiff(f, b);
+
+			return ((t > DIRDIFF_REVERSE ? t | 8 : t) << 16) |
+			       ((b > DIRDIFF_REVERSE ? b | 8 : b) <<  8) |
+			       ( f > DIRDIFF_REVERSE ? f | 8 : f);
+		}
+
 		case 0x46: // Motion counter
 			return v->motion_counter;
 
--- a/src/newgrf_spritegroup.h	Fri May 04 23:17:26 2007 +0000
+++ b/src/newgrf_spritegroup.h	Wed May 09 20:22:49 2007 +0000
@@ -184,6 +184,9 @@
 		} vehicle;
 		struct {
 			TileIndex tile;
+		} canal;
+		struct {
+			TileIndex tile;
 			const struct Station *st;
 			const struct StationSpec *statspec;
 			CargoID cargo_type;
--- a/src/newgrf_text.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/newgrf_text.cpp	Wed May 09 20:22:49 2007 +0000
@@ -45,9 +45,11 @@
 	GRFLX_GERMAN      = 0x02,
 	GRFLX_FRENCH      = 0x03,
 	GRFLX_SPANISH     = 0x04,
+	GRFLX_ESPERANTO   = 0x05,
 	GRFLX_RUSSIAN     = 0x07,
 	GRFLX_CZECH       = 0x15,
 	GRFLX_SLOVAK      = 0x16,
+	GRFLX_BULGARIAN   = 0x18,
 	GRFLX_AFRIKAANS   = 0x1B,
 	GRFLX_GREEK       = 0x1E,
 	GRFLX_DUTCH       = 0x1F,
@@ -71,6 +73,8 @@
 	GRFLX_PORTUGUESE  = 0x36,
 	GRFLX_BRAZILIAN   = 0x37,
 	GRFLX_CROATIAN    = 0x38,
+	GRFLX_JAPANESE    = 0x39,
+	GRFLX_KOREAN      = 0x3A,
 	GRFLX_TURKISH     = 0x3E,
 	GRFLX_UNSPECIFIED = 0x7F,
 };
@@ -122,6 +126,10 @@
 	{"sv_SE", GRFLX_SWEDISH},
 	{"tr_TR", GRFLX_TURKISH},
 	{"uk_UA", GRFLX_UKRAINIAN},
+	{"eo_EO", GRFLX_ESPERANTO},
+	{"bg_BG", GRFLX_BULGARIAN},
+	{"ja_JP", GRFLX_JAPANESE},
+	{"ko_KR", GRFLX_KOREAN},
 	{"gen",   GRFLB_GENERIC}   ///< this is not iso code, but there has to be something...
 };
 
--- a/src/news_gui.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/news_gui.cpp	Wed May 09 20:22:49 2007 +0000
@@ -620,15 +620,21 @@
 	 * from it such as big fonts, etc. */
 	ptr  = buffer;
 	dest = buffer2;
+	WChar c_last = '\0';
 	for (;;) {
 		WChar c = Utf8Consume(&ptr);
 		if (c == 0) break;
-		if (c == '\r') {
+		/* Make a space from a newline, but ignore multiple newlines */
+		if (c == '\n' && c_last != '\n') {
+			dest[0] = ' ';
+			dest++;
+		} else if (c == '\r') {
 			dest[0] = dest[1] = dest[2] = dest[3] = ' ';
 			dest += 4;
 		} else if (IsPrintable(c)) {
 			dest += Utf8Encode(dest, c);
 		}
+		c_last = c;
 	}
 
 	*dest = '\0';
--- a/src/oldloader.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/oldloader.cpp	Wed May 09 20:22:49 2007 +0000
@@ -15,6 +15,10 @@
 #include "player.h"
 #include "engine.h"
 #include "vehicle.h"
+#include "aircraft.h"
+#include "roadveh.h"
+#include "ship.h"
+#include "train.h"
 #include "signs.h"
 #include "debug.h"
 #include "depot.h"
@@ -923,13 +927,13 @@
 	 * Basically v->type -= 0x10; would suffice, but play safely */
 	switch (v->type) {
 		default: NOT_REACHED();
-		case 0x00 /*VEH_INVALID */: v->type = VEH_INVALID;  res = LoadChunk(ls, NULL,           vehicle_empty_chunk);    break;
-		case 0x10 /*VEH_TRAIN   */: v->type = VEH_TRAIN;    res = LoadChunk(ls, &v->u.rail,     vehicle_train_chunk);    break;
-		case 0x11 /*VEH_ROAD    */: v->type = VEH_ROAD;     res = LoadChunk(ls, &v->u.road,     vehicle_road_chunk);     break;
-		case 0x12 /*VEH_SHIP    */: v->type = VEH_SHIP;     res = LoadChunk(ls, &v->u.ship,     vehicle_ship_chunk);     break;
-		case 0x13 /*VEH_AIRCRAFT*/: v->type = VEH_AIRCRAFT; res = LoadChunk(ls, &v->u.air,      vehicle_air_chunk);      break;
-		case 0x14 /*VEH_SPECIAL */: v->type = VEH_SPECIAL;  res = LoadChunk(ls, &v->u.special,  vehicle_special_chunk);  break;
-		case 0x15 /*VEH_DISASTER*/: v->type = VEH_DISASTER; res = LoadChunk(ls, &v->u.disaster, vehicle_disaster_chunk); break;
+		case 0x00 /*VEH_INVALID */: v = new (v) InvalidVehicle();  res = LoadChunk(ls, NULL,           vehicle_empty_chunk);    break;
+		case 0x10 /*VEH_TRAIN   */: v = new (v) Train();           res = LoadChunk(ls, &v->u.rail,     vehicle_train_chunk);    break;
+		case 0x11 /*VEH_ROAD    */: v = new (v) RoadVehicle();     res = LoadChunk(ls, &v->u.road,     vehicle_road_chunk);     break;
+		case 0x12 /*VEH_SHIP    */: v = new (v) Ship();            res = LoadChunk(ls, &v->u.ship,     vehicle_ship_chunk);     break;
+		case 0x13 /*VEH_AIRCRAFT*/: v = new (v) Aircraft();        res = LoadChunk(ls, &v->u.air,      vehicle_air_chunk);      break;
+		case 0x14 /*VEH_SPECIAL */: v = new (v) SpecialVehicle();  res = LoadChunk(ls, &v->u.special,  vehicle_special_chunk);  break;
+		case 0x15 /*VEH_DISASTER*/: v = new (v) DisasterVehicle(); res = LoadChunk(ls, &v->u.disaster, vehicle_disaster_chunk); break;
 	}
 
 	/* This chunk size should always be 10 bytes */
@@ -965,11 +969,9 @@
 	OCL_SVAR( OC_FILE_U16 | OC_VAR_I32, Vehicle, y_pos ),
 	OCL_SVAR(  OC_UINT8, Vehicle, z_pos ),
 	OCL_SVAR(  OC_UINT8, Vehicle, direction ),
-	OCL_SVAR(   OC_INT8, Vehicle, x_offs ),
-	OCL_SVAR(   OC_INT8, Vehicle, y_offs ),
-	OCL_SVAR(  OC_UINT8, Vehicle, sprite_width ),
-	OCL_SVAR(  OC_UINT8, Vehicle, sprite_height ),
-	OCL_SVAR(  OC_UINT8, Vehicle, z_height ),
+	OCL_NULL( 2 ),         ///< x_offs and y_offs, calculated automatically
+	OCL_NULL( 2 ),         ///< sprite_width and sprite_height, calculated automatically
+	OCL_NULL( 1 ),         ///< z_height, calculated automatically
 
 	OCL_SVAR(  OC_UINT8, Vehicle, owner ),
 	OCL_SVAR(   OC_TILE, Vehicle, tile ),
--- a/src/openttd.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/openttd.cpp	Wed May 09 20:22:49 2007 +0000
@@ -1085,7 +1085,7 @@
 	StateGameLoop();
 #endif /* ENABLE_NETWORK */
 
-	if (!_pause_game && _display_opt & DO_FULL_ANIMATION) DoPaletteAnimations();
+	if (!_pause_game && HASBIT(_display_opt, DO_FULL_ANIMATION)) DoPaletteAnimations();
 
 	if (!_pause_game || _cheats.build_in_pause.value) MoveAllTextEffects();
 
@@ -1304,8 +1304,8 @@
 	/* If Load Scenario / New (Scenario) Game is used,
 	 *  a player does not exist yet. So create one here.
 	 * 1 exeption: network-games. Those can have 0 players
-	 *   But this exeption is not true for network_servers! */
-	if (!_players[0].is_active && (!_networking || (_networking && _network_server)))
+	 *   But this exeption is not true for non dedicated network_servers! */
+	if (!_players[0].is_active && (!_networking || (_networking && _network_server && !_network_dedicated)))
 		DoStartupNewPlayer(false);
 
 	DoZoomInOutWindow(ZOOM_NONE, w); // update button status
@@ -1947,6 +1947,17 @@
 		}
 	}
 
+	if (CheckSavegameVersion(58)) {
+		/* patch difficulty number_industries other then zero get bumped to +1
+		 * since a new option (very low at position1) has been added */
+		if (_opt.diff.number_industries > 0) {
+			_opt.diff.number_industries++;
+		}
+
+		/* Same goes for number of towns, although no test is needed, just an increment */
+		_opt.diff.number_towns++;
+	}
+
 	return true;
 }
 
--- a/src/openttd.h	Fri May 04 23:17:26 2007 +0000
+++ b/src/openttd.h	Wed May 09 20:22:49 2007 +0000
@@ -171,12 +171,12 @@
 
 /* Display Options */
 enum {
-	DO_SHOW_TOWN_NAMES    = 1 << 0,
-	DO_SHOW_STATION_NAMES = 1 << 1,
-	DO_SHOW_SIGNS         = 1 << 2,
-	DO_FULL_ANIMATION     = 1 << 3,
-	DO_FULL_DETAIL        = 1 << 5,
-	DO_WAYPOINTS          = 1 << 6,
+	DO_SHOW_TOWN_NAMES    = 0,
+	DO_SHOW_STATION_NAMES = 1,
+	DO_SHOW_SIGNS         = 2,
+	DO_FULL_ANIMATION     = 3,
+	DO_FULL_DETAIL        = 5,
+	DO_WAYPOINTS          = 6,
 };
 
 enum {
@@ -199,6 +199,24 @@
 	NUM_LANDSCAPE = 4,
 };
 
+/**
+ * Town Layouts
+ */
+enum TownLayout {
+	TL_NO_ROADS     = 0, ///< Build no more roads, but still build houses
+	TL_ORIGINAL,         ///< Original algorithm (min. 1 distance between roads)
+	TL_BETTER_ROADS,     ///< Extended original algorithm (min. 2 distance between roads)
+	TL_2X2_GRID,         ///< Geometric 2x2 grid algorithm
+	TL_3X3_GRID,         ///< Geometric 3x3 grid algorithm
+
+	NUM_TLS,             ///< Number of town layouts
+};
+
+/* It needs to be 8bits, because we save and load it as such */
+/** Define basic enum properties */
+template <> struct EnumPropsT<TownLayout> : MakeEnumPropsT<TownLayout, byte, TL_NO_ROADS, NUM_TLS, NUM_TLS> {};
+typedef TinyEnumT<TownLayout> TownLayoutByte; //typedefing-enumification of TownLayout
+
 enum {
 	NUM_PRICES = 49,
 };
@@ -473,7 +491,7 @@
 };
 
 
-enum {
+enum ExpensesType {
 	EXPENSES_CONSTRUCTION =  0,
 	EXPENSES_NEW_VEHICLES =  1,
 	EXPENSES_TRAIN_RUN    =  2,
--- a/src/order_cmd.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/order_cmd.cpp	Wed May 09 20:22:49 2007 +0000
@@ -581,8 +581,6 @@
 
 		v->cur_order_index = b;
 
-		if (v->type == VEH_TRAIN) v->u.rail.days_since_order_progr = 0;
-
 		if (v->type == VEH_ROAD) ClearSlot(v);
 
 		/* NON-stop flag is misused to see if a train is in a station that is
--- a/src/players.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/players.cpp	Wed May 09 20:22:49 2007 +0000
@@ -1108,7 +1108,7 @@
 
 	    SLE_VAR(Player, player_color,          SLE_UINT8),
 	    SLE_VAR(Player, player_money_fraction, SLE_UINT8),
-	    SLE_VAR(Player, avail_railtypes,       SLE_UINT8),
+	SLE_CONDVAR(Player, avail_railtypes,       SLE_UINT8,                   0, 57),
 	    SLE_VAR(Player, block_preview,         SLE_UINT8),
 
 	    SLE_VAR(Player, cargo_types,           SLE_UINT16),
--- a/src/rail_cmd.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/rail_cmd.cpp	Wed May 09 20:22:49 2007 +0000
@@ -1321,7 +1321,7 @@
 
 		DrawTrackBits(ti, rails);
 
-		if (_display_opt & DO_FULL_DETAIL) DrawTrackDetails(ti);
+		if (HASBIT(_display_opt, DO_FULL_DETAIL)) DrawTrackDetails(ti);
 
 		if (HasSignals(ti->tile)) DrawSignals(ti->tile, rails);
 	} else {
--- a/src/rail_gui.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/rail_gui.cpp	Wed May 09 20:22:49 2007 +0000
@@ -151,7 +151,7 @@
 static void PlaceRail_Station(TileIndex tile)
 {
 	if (_remove_button_clicked) {
-		DoCommandP(tile, 0, 0, CcPlaySound1E, CMD_REMOVE_FROM_RAILROAD_STATION | CMD_MSG(STR_CANT_REMOVE_PART_OF_STATION));
+		VpStartPlaceSizing(tile, VPM_X_AND_Y | GUI_PlaceProc_RemoveFromStation);
 	} else if (_railstation.dragdrop) {
 		VpStartPlaceSizing(tile, VPM_X_AND_Y_LIMITED);
 		VpSetPlaceSizingLimit(_patches.station_spread);
@@ -514,8 +514,13 @@
 			} else if ((e->we.place.userdata & 0xF) == VPM_X_AND_Y) {
 				if (GUIPlaceProcDragXY(e)) break;
 
-				if ((e->we.place.userdata >> 4) == GUI_PlaceProc_ConvertRailArea >> 4)
+				if ((e->we.place.userdata >> 4) == GUI_PlaceProc_RemoveFromStation >> 4) {
+					DoCommandP(end_tile, start_tile, 0, CcPlaySound1E, CMD_REMOVE_FROM_RAILROAD_STATION | CMD_MSG(STR_CANT_REMOVE_PART_OF_STATION));
+				}
+
+				if ((e->we.place.userdata >> 4) == GUI_PlaceProc_ConvertRailArea >> 4) {
 					DoCommandP(end_tile, start_tile, _cur_railtype, CcPlaySound10, CMD_CONVERT_RAIL | CMD_MSG(STR_CANT_CONVERT_RAIL));
+				}
 			} else if (e->we.place.userdata == VPM_X_AND_Y_LIMITED) {
 				HandleStationPlacement(start_tile, end_tile);
 			} else {
--- a/src/rail_map.h	Fri May 04 23:17:26 2007 +0000
+++ b/src/rail_map.h	Wed May 09 20:22:49 2007 +0000
@@ -10,13 +10,21 @@
 #include "tile.h"
 
 
+/** Different types of Rail-related tiles */
 enum RailTileType {
-	RAIL_TILE_NORMAL   = 0,
-	RAIL_TILE_SIGNALS  = 1,
-	RAIL_TILE_WAYPOINT = 2,
-	RAIL_TILE_DEPOT    = 3,
+	RAIL_TILE_NORMAL   = 0, ///< Normal rail tile without signals
+	RAIL_TILE_SIGNALS  = 1, ///< Normal rail tile with signals
+	RAIL_TILE_WAYPOINT = 2, ///< Waypoint (X or Y direction)
+	RAIL_TILE_DEPOT    = 3, ///< Depot (one entrance)
 };
 
+/**
+ * Returns the RailTileType (normal with or without signals,
+ * waypoint or depot).
+ * @param t the tile to get the information from
+ * @pre IsTileType(t, MP_RAILWAY)
+ * @return the RailTileType
+ */
 static inline RailTileType GetRailTileType(TileIndex t)
 {
 	assert(IsTileType(t, MP_RAILWAY));
@@ -26,23 +34,32 @@
 /**
  * Returns whether this is plain rails, with or without signals. Iow, if this
  * tiles RailTileType is RAIL_TILE_NORMAL or RAIL_TILE_SIGNALS.
+ * @param t the tile to get the information from
+ * @pre IsTileType(t, MP_RAILWAY)
+ * @return true if and only if the tile is normal rail (with or without signals)
  */
-static inline bool IsPlainRailTile(TileIndex tile)
+static inline bool IsPlainRailTile(TileIndex t)
 {
-	RailTileType rtt = GetRailTileType(tile);
+	RailTileType rtt = GetRailTileType(t);
 	return rtt == RAIL_TILE_NORMAL || rtt == RAIL_TILE_SIGNALS;
 }
 
 /**
  * Checks if a rail tile has signals.
+ * @param t the tile to get the information from
+ * @pre IsTileType(t, MP_RAILWAY)
+ * @return true if and only if the tile has signals
  */
-static inline bool HasSignals(TileIndex tile)
+static inline bool HasSignals(TileIndex t)
 {
-	return GetRailTileType(tile) == RAIL_TILE_SIGNALS;
+	return GetRailTileType(t) == RAIL_TILE_SIGNALS;
 }
 
 /**
  * Add/remove the 'has signal' bit from the RailTileType
+ * @param tile the tile to add/remove the signals to/from
+ * @param signals whether the rail tile should have signals or not
+ * @pre IsPlainRailTile(tile)
  */
 static inline void SetHasSignals(TileIndex tile, bool signals)
 {
@@ -50,81 +67,144 @@
 	SB(_m[tile].m5, 6, 1, signals);
 }
 
-
+/**
+ * Is this tile a rail depot?
+ * @param t the tile to get the information from
+ * @pre IsTileType(t, MP_RAILWAY)
+ * @return true if and only if the tile is a rail depot
+ */
 static inline bool IsRailDepot(TileIndex t)
 {
 	return GetRailTileType(t) == RAIL_TILE_DEPOT;
 }
 
-
+/**
+ * Is this tile a rail waypoint?
+ * @param t the tile to get the information from
+ * @pre IsTileType(t, MP_RAILWAY)
+ * @return true if and only if the tile is a rail waypoint
+ */
 static inline bool IsRailWaypoint(TileIndex t)
 {
 	return GetRailTileType(t) == RAIL_TILE_WAYPOINT;
 }
 
 
+/**
+ * Gets the rail type of the given tile
+ * @param t the tile to get the rail type from
+ * @return the rail type of the tile
+ */
 static inline RailType GetRailType(TileIndex t)
 {
 	return (RailType)GB(_m[t].m3, 0, 4);
 }
 
+/**
+ * Sets the track bits of the given tile
+ * @param t the tile to set the track bits of
+ * @param r the new track bits for the tile
+ */
 static inline void SetRailType(TileIndex t, RailType r)
 {
 	SB(_m[t].m3, 0, 4, r);
 }
 
 
+/**
+ * Gets the rail type of the given tile
+ * @param t the tile to get the rail type from
+ * @return the rail type of the tile
+ */
 static inline TrackBits GetTrackBits(TileIndex tile)
 {
 	return (TrackBits)GB(_m[tile].m5, 0, 6);
 }
 
+/**
+ * Sets the track bits of the given tile
+ * @param t the tile to set the track bits of
+ * @param b the new track bits for the tile
+ */
 static inline void SetTrackBits(TileIndex t, TrackBits b)
 {
 	SB(_m[t].m5, 0, 6, b);
 }
 
 /**
- * Returns whether the given track is present on the given tile. Tile must be
- * a plain rail tile (IsPlainRailTile()).
+ * Returns whether the given track is present on the given tile.
+ * @param tile  the tile to check the track presence of
+ * @param track the track to search for on the tile
+ * @pre IsPlainRailTile(tile)
+ * @return true if and only if the given track exists on the tile
  */
 static inline bool HasTrack(TileIndex tile, Track track)
 {
 	return HASBIT(GetTrackBits(tile), track);
 }
 
-
+/**
+ * Returns the direction the depot is facing to
+ * @param t the tile to get the depot facing from
+ * @pre IsRailDepotTile(t)
+ * @return the direction the depot is facing
+ */
 static inline DiagDirection GetRailDepotDirection(TileIndex t)
 {
 	return (DiagDirection)GB(_m[t].m5, 0, 2);
 }
 
 
+/**
+ * Returns the axis of the waypoint
+ * @param t the tile to get the waypoint axis from
+ * @pre IsRailWaypointTile(t)
+ * @return the axis of the waypoint
+ */
 static inline Axis GetWaypointAxis(TileIndex t)
 {
 	return (Axis)GB(_m[t].m5, 0, 1);
 }
 
+/**
+ * Returns the track of the waypoint
+ * @param t the tile to get the waypoint track from
+ * @pre IsRailWaypointTile(t)
+ * @return the track of the waypoint
+ */
 static inline Track GetRailWaypointTrack(TileIndex t)
 {
 	return AxisToTrack(GetWaypointAxis(t));
 }
 
+/**
+ * Returns the track bits of the waypoint
+ * @param t the tile to get the waypoint track bits from
+ * @pre IsRailWaypointTile(t)
+ * @return the track bits of the waypoint
+ */
 static inline TrackBits GetRailWaypointBits(TileIndex t)
 {
 	return TrackToTrackBits(GetRailWaypointTrack(t));
 }
 
+/**
+ * Returns waypoint index (for the waypoint pool)
+ * @param t the tile to get the waypoint index from
+ * @pre IsRailWaypointTile(t)
+ * @return the waypoint index
+ */
 static inline WaypointID GetWaypointIndex(TileIndex t)
 {
 	return (WaypointID)_m[t].m2;
 }
 
+/** Type of signal, i.e. how does the signal behave? */
 enum SignalType {
-	SIGTYPE_NORMAL  = 0, // normal signal
-	SIGTYPE_ENTRY   = 1, // presignal block entry
-	SIGTYPE_EXIT    = 2, // presignal block exit
-	SIGTYPE_COMBO   = 3  // presignal inter-block
+	SIGTYPE_NORMAL  = 0, ///< normal signal
+	SIGTYPE_ENTRY   = 1, ///< presignal block entry
+	SIGTYPE_EXIT    = 2, ///< presignal block exit
+	SIGTYPE_COMBO   = 3  ///< presignal inter-block
 };
 
 static inline SignalType GetSignalType(TileIndex t)
@@ -160,10 +240,10 @@
 	SB(_m[t].m3, pos, 2, sig);
 }
 
-
+/** Variant of the signal, i.e. how does the signal look? */
 enum SignalVariant {
-	SIG_ELECTRIC  = 0,
-	SIG_SEMAPHORE = 1
+	SIG_ELECTRIC  = 0, ///< Light signal
+	SIG_SEMAPHORE = 1  ///< Old-fashioned semaphore signal
 };
 
 static inline SignalVariant GetSignalVariant(TileIndex t)
@@ -186,8 +266,8 @@
  * normal boolean evaluation, since that will make future additions easier.
  */
 enum SignalState {
-	SIGNAL_STATE_RED   = 0,
-	SIGNAL_STATE_GREEN = 1,
+	SIGNAL_STATE_RED   = 0, ///< The signal is red
+	SIGNAL_STATE_GREEN = 1, ///< The signal is green
 };
 
 static inline SignalState GetSingleSignalState(TileIndex t, byte signalbit)
@@ -243,21 +323,21 @@
  */
 RailType GetTileRailType(TileIndex tile);
 
-
+/** The ground 'under' the rail */
 enum RailGroundType {
-	RAIL_GROUND_BARREN       =  0,
-	RAIL_GROUND_GRASS        =  1,
-	RAIL_GROUND_FENCE_NW     =  2,
-	RAIL_GROUND_FENCE_SE     =  3,
-	RAIL_GROUND_FENCE_SENW   =  4,
-	RAIL_GROUND_FENCE_NE     =  5,
-	RAIL_GROUND_FENCE_SW     =  6,
-	RAIL_GROUND_FENCE_NESW   =  7,
-	RAIL_GROUND_FENCE_VERT1  =  8,
-	RAIL_GROUND_FENCE_VERT2  =  9,
-	RAIL_GROUND_FENCE_HORIZ1 = 10,
-	RAIL_GROUND_FENCE_HORIZ2 = 11,
-	RAIL_GROUND_ICE_DESERT   = 12,
+	RAIL_GROUND_BARREN       =  0, ///< Nothing (dirt)
+	RAIL_GROUND_GRASS        =  1, ///< Grassy
+	RAIL_GROUND_FENCE_NW     =  2, ///< Grass with a fence at the NW edge
+	RAIL_GROUND_FENCE_SE     =  3, ///< Grass with a fence at the SE edge
+	RAIL_GROUND_FENCE_SENW   =  4, ///< Grass with a fence at the NW and SE edges
+	RAIL_GROUND_FENCE_NE     =  5, ///< Grass with a fence at the NE edge
+	RAIL_GROUND_FENCE_SW     =  6, ///< Grass with a fence at the SW edge
+	RAIL_GROUND_FENCE_NESW   =  7, ///< Grass with a fence at the NE and SW edges
+	RAIL_GROUND_FENCE_VERT1  =  8, ///< Grass with a fence at the western side
+	RAIL_GROUND_FENCE_VERT2  =  9, ///< Grass with a fence at the eastern side
+	RAIL_GROUND_FENCE_HORIZ1 = 10, ///< Grass with a fence at the southern side
+	RAIL_GROUND_FENCE_HORIZ2 = 11, ///< Grass with a fence at the northern side
+	RAIL_GROUND_ICE_DESERT   = 12, ///< Icy or sandy
 };
 
 static inline void SetRailGroundType(TileIndex t, RailGroundType rgt)
--- a/src/road_cmd.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/road_cmd.cpp	Wed May 09 20:22:49 2007 +0000
@@ -26,6 +26,7 @@
 #include "sound.h"
 #include "yapf/yapf.h"
 #include "depot.h"
+#include "newgrf.h"
 
 
 static uint CountRoadBits(RoadBits r)
@@ -659,6 +660,23 @@
 };
 
 /**
+ * Whether to draw unpaved roads regardless of the town zone.
+ * By default, OpenTTD always draws roads as unpaved if they are on a desert
+ * tile or above the snowline. Newgrf files, however, can set a bit that allows
+ * paved roads to be built on desert tiles as they would be on grassy tiles.
+ *
+ * @param tile The tile the road is on
+ * @param roadside What sort of road this is
+ * @return True if the road should be drawn unpaved regardless of the roadside.
+ */
+static bool AlwaysDrawUnpavedRoads(TileIndex tile, Roadside roadside)
+{
+	return (IsOnSnow(tile) &&
+			!(_opt.landscape == LT_TROPIC && HasGrfMiscBit(GMB_DESERT_PAVED_ROADS) &&
+				roadside != ROADSIDE_BARREN && roadside != ROADSIDE_GRASS && roadside != ROADSIDE_GRASS_ROAD_WORKS));
+}
+
+/**
  * Draw ground sprite and road pieces
  * @param ti TileInfo
  */
@@ -684,7 +702,7 @@
 
 	roadside = GetRoadside(ti->tile);
 
-	if (IsOnSnow(ti->tile)) {
+	if (AlwaysDrawUnpavedRoads(ti->tile, roadside)) {
 		image += 19;
 	} else {
 		switch (roadside) {
@@ -704,7 +722,7 @@
 	}
 
 	/* Return if full detail is disabled, or we are zoomed fully out. */
-	if (!(_display_opt & DO_FULL_DETAIL) || _cur_dpi->zoom == 2) return;
+	if (!HASBIT(_display_opt, DO_FULL_DETAIL) || _cur_dpi->zoom == 2) return;
 
 	/* Draw extra details. */
 	for (drts = _road_display_table[roadside][road]; drts->image != 0; drts++) {
@@ -726,6 +744,7 @@
 		case ROAD_TILE_CROSSING: {
 			SpriteID image;
 			SpriteID pal = PAL_NONE;
+			Roadside roadside = GetRoadside(ti->tile);
 
 			if (ti->tileh != SLOPE_FLAT) DrawFoundation(ti, ti->tileh);
 
@@ -734,10 +753,10 @@
 			if (GetCrossingRoadAxis(ti->tile) == AXIS_X) image++;
 			if (IsCrossingBarred(ti->tile)) image += 2;
 
-			if (IsOnSnow(ti->tile)) {
+			if (AlwaysDrawUnpavedRoads(ti->tile, roadside)) {
 				image += 8;
 			} else {
-				switch (GetRoadside(ti->tile)) {
+				switch (roadside) {
 					case ROADSIDE_BARREN: pal = PALETTE_TO_BARE_LAND; break;
 					case ROADSIDE_GRASS:  break;
 					default:              image += 4; break; // Paved
--- a/src/roadveh.h	Fri May 04 23:17:26 2007 +0000
+++ b/src/roadveh.h	Wed May 09 20:22:49 2007 +0000
@@ -22,4 +22,27 @@
 void CcBuildRoadVeh(bool success, TileIndex tile, uint32 p1, uint32 p2);
 void CcCloneRoadVeh(bool success, TileIndex tile, uint32 p1, uint32 p2);
 
+
+/**
+ * This class 'wraps' Vehicle; you do not actually instantiate this class.
+ * You create a Vehicle using AllocateVehicle, so it is added to the pool
+ * and you reinitialize that to a Train using:
+ *   v = new (v) RoadVehicle();
+ *
+ * As side-effect the vehicle type is set correctly.
+ */
+struct RoadVehicle : public Vehicle {
+	/** Initializes the Vehicle to a road vehicle */
+	RoadVehicle() { this->type = VEH_ROAD; }
+
+	/** We want to 'destruct' the right class. */
+	virtual ~RoadVehicle() {}
+
+	const char *GetTypeString() const { return "road vehicle"; }
+	void MarkDirty();
+	void UpdateDeltaXY(Direction direction);
+	ExpensesType GetExpenseType(bool income) const { return income ? EXPENSES_ROADVEH_INC : EXPENSES_ROADVEH_RUN; }
+	WindowClass GetVehicleListWindowClass() const { return WC_ROADVEH_LIST; }
+};
+
 #endif /* ROADVEH_H */
--- a/src/roadveh_cmd.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/roadveh_cmd.cpp	Wed May 09 20:22:49 2007 +0000
@@ -117,7 +117,7 @@
 
 static int32 EstimateRoadVehCost(EngineID engine_type)
 {
-	return ((_price.roadveh_base >> 3) * RoadVehInfo(engine_type)->base_cost) >> 5;
+	return ((_price.roadveh_base >> 3) * GetEngineProperty(engine_type, 0x11, RoadVehInfo(engine_type)->base_cost)) >> 5;
 }
 
 /** Build a road vehicle.
@@ -169,7 +169,6 @@
 		v->x_pos = x;
 		v->y_pos = y;
 		v->z_pos = GetSlopeZ(x, y);
-		v->z_height = 6;
 
 		v->u.road.state = RVSB_IN_DEPOT;
 		v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
@@ -205,7 +204,7 @@
 		v->date_of_last_service = _date;
 		v->build_year = _cur_year;
 
-		v->type = VEH_ROAD;
+		v = new (v) RoadVehicle();
 		v->cur_image = 0xC15;
 		v->random_bits = VehicleRandomBits();
 
@@ -486,15 +485,15 @@
 }
 
 
-static void MarkRoadVehDirty(Vehicle *v)
+void RoadVehicle::MarkDirty()
 {
-	v->cur_image = GetRoadVehImage(v, v->direction);
-	MarkAllViewportsDirty(v->left_coord, v->top_coord, v->right_coord + 1, v->bottom_coord + 1);
+	this->cur_image = GetRoadVehImage(this, this->direction);
+	MarkAllViewportsDirty(this->left_coord, this->top_coord, this->right_coord + 1, this->bottom_coord + 1);
 }
 
-static void UpdateRoadVehDeltaXY(Vehicle *v)
+void RoadVehicle::UpdateDeltaXY(Direction direction)
 {
-#define MKIT(a,b,c,d) ((a&0xFF)<<24) | ((b&0xFF)<<16) | ((c&0xFF)<<8) | ((d&0xFF)<<0)
+#define MKIT(a, b, c, d) ((a & 0xFF) << 24) | ((b & 0xFF) << 16) | ((c & 0xFF) << 8) | ((d & 0xFF) << 0)
 	static const uint32 _delta_xy_table[8] = {
 		MKIT(3, 3, -1, -1),
 		MKIT(3, 7, -1, -3),
@@ -506,11 +505,13 @@
 		MKIT(7, 3, -3, -1),
 	};
 #undef MKIT
-	uint32 x = _delta_xy_table[v->direction];
-	v->x_offs        = GB(x,  0, 8);
-	v->y_offs        = GB(x,  8, 8);
-	v->sprite_width  = GB(x, 16, 8);
-	v->sprite_height = GB(x, 24, 8);
+
+	uint32 x = _delta_xy_table[direction];
+	this->x_offs        = GB(x,  0, 8);
+	this->y_offs        = GB(x,  8, 8);
+	this->sprite_width  = GB(x, 16, 8);
+	this->sprite_height = GB(x, 24, 8);
+	this->z_height      = 6;
 }
 
 static void ClearCrashedStation(Vehicle *v)
@@ -566,7 +567,7 @@
 
 	v->direction = ChangeDir(v->direction, delta[r & 3]);
 	BeginVehicleMove(v);
-	UpdateRoadVehDeltaXY(v);
+	v->UpdateDeltaXY(v->direction);
 	v->cur_image = GetRoadVehImage(v, v->direction);
 	SetRoadVehPosition(v, v->x_pos, v->y_pos);
 }
@@ -752,39 +753,6 @@
 	InvalidateVehicleOrder(v);
 }
 
-static void HandleRoadVehLoading(Vehicle *v)
-{
-	switch (v->current_order.type) {
-		case OT_LOADING: {
-			Order b;
-
-			if (--v->load_unload_time_rem != 0) return;
-
-			if (CanFillVehicle(v) && (v->current_order.flags & OF_FULL_LOAD ||
-					(_patches.gradual_loading && !HASBIT(v->vehicle_flags, VF_LOADING_FINISHED)))) {
-				SET_EXPENSES_TYPE(EXPENSES_ROADVEH_INC);
-				if (LoadUnloadVehicle(v, false)) {
-					InvalidateWindow(WC_ROADVEH_LIST, v->owner);
-					MarkRoadVehDirty(v);
-				}
-				return;
-			}
-
-			b = v->current_order;
-			v->LeaveStation();
-			if (!(b.flags & OF_NON_STOP)) return;
-			break;
-		}
-
-		case OT_DUMMY: break;
-
-		default: return;
-	}
-
-	v->cur_order_index++;
-	InvalidateVehicleOrder(v);
-}
-
 static void StartRoadVehSound(const Vehicle* v)
 {
 	if (!PlayVehicleSound(v, VSE_START)) {
@@ -1311,7 +1279,7 @@
 	if (v->vehstatus & VS_STOPPED) return;
 
 	ProcessRoadVehOrder(v);
-	HandleRoadVehLoading(v);
+	v->HandleLoading();
 
 	if (v->current_order.type == OT_LOADING) return;
 
@@ -1345,7 +1313,7 @@
 		v->u.road.frame = RVC_DEPOT_START_FRAME;
 
 		v->cur_image = GetRoadVehImage(v, v->direction);
-		UpdateRoadVehDeltaXY(v);
+		v->UpdateDeltaXY(v->direction);
 		SetRoadVehPosition(v,x,y);
 
 		InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
@@ -1381,7 +1349,7 @@
 		if ((IsTunnelTile(gp.new_tile) || IsBridgeTile(gp.new_tile)) && HASBIT(VehicleEnterTile(v, gp.new_tile, gp.x, gp.y), VETS_ENTERED_WORMHOLE)) {
 			/* Vehicle has just entered a bridge or tunnel */
 			v->cur_image = GetRoadVehImage(v, v->direction);
-			UpdateRoadVehDeltaXY(v);
+			v->UpdateDeltaXY(v->direction);
 			SetRoadVehPosition(v,gp.x,gp.y);
 			return;
 		}
@@ -1469,7 +1437,7 @@
 		}
 
 		v->cur_image = GetRoadVehImage(v, newdir);
-		UpdateRoadVehDeltaXY(v);
+		v->UpdateDeltaXY(v->direction);
 		RoadZPosAffectSpeed(v, SetRoadVehPosition(v, x, y));
 		return;
 	}
@@ -1509,7 +1477,7 @@
 		}
 
 		v->cur_image = GetRoadVehImage(v, newdir);
-		UpdateRoadVehDeltaXY(v);
+		v->UpdateDeltaXY(v->direction);
 		RoadZPosAffectSpeed(v, SetRoadVehPosition(v, x, y));
 		return;
 	}
@@ -1539,7 +1507,7 @@
 		if (old_dir != v->u.road.state) {
 			/* The vehicle is in a road stop */
 			v->cur_image = GetRoadVehImage(v, new_dir);
-			UpdateRoadVehDeltaXY(v);
+			v->UpdateDeltaXY(v->direction);
 			SetRoadVehPosition(v, v->x_pos, v->y_pos);
 			/* Note, return here means that the frame counter is not incremented
 			 * for vehicles changing direction in a road stop. This causes frames to
@@ -1569,14 +1537,11 @@
 		if (v->current_order.type != OT_LEAVESTATION &&
 				v->current_order.type != OT_GOTO_DEPOT) {
 			/* Vehicle has arrived at a bay in a road stop */
-			Order old_order;
 
 			if (IsDriveThroughStopTile(v->tile)) {
 				TileIndex next_tile = TILE_ADD(v->tile, TileOffsByDir(v->direction));
 				RoadStop::Type type = IsCargoInClass(v->cargo_type, CC_PASSENGERS) ? RoadStop::BUS : RoadStop::TRUCK;
 
-				assert(HASBIT(v->u.road.state, RVS_IS_STOPPING));
-
 				/* Check if next inline bay is free */
 				if (IsDriveThroughStopTile(next_tile) && (GetRoadStopType(next_tile) == type)) {
 					RoadStop *rs_n = GetRoadStopByTile(next_tile, type);
@@ -1601,23 +1566,8 @@
 			v->last_station_visited = GetStationIndex(v->tile);
 
 			RoadVehArrivesAt(v, st);
-
-			old_order = v->current_order;
 			v->BeginLoading();
-			v->current_order.flags = 0;
 
-			if (old_order.type == OT_GOTO_STATION &&
-					v->current_order.dest == v->last_station_visited) {
-				v->current_order.flags =
-					(old_order.flags & (OF_FULL_LOAD | OF_UNLOAD | OF_TRANSFER)) | OF_NON_STOP;
-			}
-
-			SET_EXPENSES_TYPE(EXPENSES_ROADVEH_INC);
-			if (LoadUnloadVehicle(v, true)) {
-				InvalidateWindow(WC_ROADVEH_LIST, v->owner);
-				MarkRoadVehDirty(v);
-			}
-			InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 			return;
 		}
 
@@ -1677,7 +1627,7 @@
 	if (!HASBIT(r, VETS_ENTERED_WORMHOLE)) v->u.road.frame++;
 
 	v->cur_image = GetRoadVehImage(v, v->direction);
-	UpdateRoadVehDeltaXY(v);
+	v->UpdateDeltaXY(v->direction);
 	RoadZPosAffectSpeed(v, SetRoadVehPosition(v, x, y));
 }
 
@@ -1853,6 +1803,8 @@
  * @param p2 Bitstuffed elements
  * - p2 = (bit 0-7) - the new cargo type to refit to
  * - p2 = (bit 8-15) - the new cargo subtype to refit to
+ * - p2 = (bit 16) - refit only this vehicle (ignored)
+ * @return cost of refit or error
  */
 int32 CmdRefitRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
--- a/src/saveload.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/saveload.cpp	Wed May 09 20:22:49 2007 +0000
@@ -29,7 +29,7 @@
 #include <setjmp.h>
 #include <list>
 
-extern const uint16 SAVEGAME_VERSION = 57;
+extern const uint16 SAVEGAME_VERSION = 59;
 uint16 _sl_version;       ///< the major savegame version identifier
 byte   _sl_minor_version; ///< the minor savegame version, DO NOT USE!
 
--- a/src/settings.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/settings.cpp	Wed May 09 20:22:49 2007 +0000
@@ -1005,7 +1005,7 @@
 #define SDTG_CONDOMANY(name, type, flags, guiflags, var, def, max, full, str, proc, from, to)\
 	SDTG_GENERAL(name, SDT_ONEOFMANY, SL_VAR, type, flags, guiflags, var, 0, def, 0, max, 0, full, str, proc, from, to)
 #define SDTG_OMANY(name, type, flags, guiflags, var, def, max, full, str, proc)\
-	SDTG_CONDOMANY(name, type, flags, guiflags, var, def, max full, str, proc, 0, SL_MAX_VERSION)
+	SDTG_CONDOMANY(name, type, flags, guiflags, var, def, max, full, str, proc, 0, SL_MAX_VERSION)
 
 #define SDTG_CONDMMANY(name, type, flags, guiflags, var, def, full, str, proc, from, to)\
 	SDTG_GENERAL(name, SDT_MANYOFMANY, SL_VAR, type, flags, guiflags, var, 0, def, 0, 0, 0, full, str, proc, from, to)
@@ -1168,6 +1168,24 @@
 	DoCommandP(0, 2, _patches.autorenew_money, NULL, CMD_SET_AUTOREPLACE);
 	return 0;
 }
+
+/**
+ * Check for right TownLayout usage in editor mode.
+ * The No Road mode is not desirable since towns have to be
+ * able to grow. If a user desires to have a town with no road,
+ * he can easily remove them himself. This would create less confusion
+ * @param p1 unused
+ * @return always 0
+ */
+static int32 CheckTownLayout(int32 p1)
+{
+	if (_patches.town_layout == TL_NO_ROADS && _game_mode == GM_EDITOR) {
+		ShowErrorMessage(INVALID_STRING_ID, STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID, 0, 0);
+		_patches.town_layout = TL_ORIGINAL;
+	}
+	return 0;
+}
+
 /** Conversion callback for _gameopt_settings.landscape
  * It converts (or try) between old values and the new ones,
  * without loosing initial setting  of the user
@@ -1238,29 +1256,30 @@
 
 #ifdef ENABLE_NETWORK
 static const SettingDescGlobVarList _network_settings[] = {
-	 SDTG_VAR("sync_freq",           SLE_UINT16,C|S,0, _network_sync_freq,            100, 0,   100,   0, STR_NULL, NULL),
-	 SDTG_VAR("frame_freq",           SLE_UINT8,C|S,0, _network_frame_freq,             0, 0,   100,   0, STR_NULL, NULL),
-	 SDTG_VAR("max_join_time",       SLE_UINT16, S, 0, _network_max_join_time,        500, 0, 32000,   0, STR_NULL, NULL),
-	SDTG_BOOL("pause_on_join",                   S, 0, _network_pause_on_join,        true,               STR_NULL, NULL),
-	 SDTG_STR("server_bind_ip",        SLE_STRB, S, 0, _network_server_bind_ip_host,  "0.0.0.0",          STR_NULL, NULL),
-	 SDTG_VAR("server_port",         SLE_UINT16, S, 0, _network_server_port,          NETWORK_DEFAULT_PORT, 0, 65535, 0, STR_NULL, NULL),
-	SDTG_BOOL("server_advertise",                S, 0, _network_advertise,            false,              STR_NULL, NULL),
-	 SDTG_VAR("lan_internet",         SLE_UINT8, S, 0, _network_lan_internet,           0, 0,     1,   0, STR_NULL, NULL),
-	 SDTG_STR("player_name",           SLE_STRB, S, 0, _network_player_name,          NULL,               STR_NULL, NULL),
-	 SDTG_STR("server_password",       SLE_STRB, S, 0, _network_server_password,      NULL,               STR_NULL, NULL),
-	 SDTG_STR("rcon_password",         SLE_STRB, S, 0, _network_rcon_password,        NULL,               STR_NULL, NULL),
-	 SDTG_STR("server_name",           SLE_STRB, S, 0, _network_server_name,          NULL,               STR_NULL, NULL),
-	 SDTG_STR("connect_to_ip",         SLE_STRB, S, 0, _network_default_ip,           NULL,               STR_NULL, NULL),
-	 SDTG_STR("network_id",            SLE_STRB, S, 0, _network_unique_id,            NULL,               STR_NULL, NULL),
-	SDTG_BOOL("autoclean_companies",             S, 0, _network_autoclean_companies,  false,              STR_NULL, NULL),
-	 SDTG_VAR("autoclean_unprotected",SLE_UINT8, S, 0, _network_autoclean_unprotected,12, 0,     60,   0, STR_NULL, NULL),
-	 SDTG_VAR("autoclean_protected",  SLE_UINT8, S, 0, _network_autoclean_protected,  36, 0,    180,   0, STR_NULL, NULL),
-	 SDTG_VAR("max_companies",        SLE_UINT8, S, 0, _network_game_info.companies_max,   8, 0,  8,   0, STR_NULL, NULL),
-	 SDTG_VAR("max_clients",          SLE_UINT8, S, 0, _network_game_info.clients_max,    10, 0, 10,   0, STR_NULL, NULL),
-	 SDTG_VAR("max_spectators",       SLE_UINT8, S, 0, _network_game_info.spectators_max, 10, 0, 10,   0, STR_NULL, NULL),
-	 SDTG_VAR("restart_game_year",    SLE_INT32, S,D0, _network_restart_game_year,    0, MIN_YEAR, MAX_YEAR, 1, STR_NULL, NULL),
-	 SDTG_VAR("min_players",          SLE_UINT8, S, 0, _network_min_players,               0, 0, 10,   0, STR_NULL, NULL),
-	 SDTG_END()
+	  SDTG_VAR("sync_freq",           SLE_UINT16,C|S,0, _network_sync_freq,            100, 0,   100,   0, STR_NULL, NULL),
+	  SDTG_VAR("frame_freq",           SLE_UINT8,C|S,0, _network_frame_freq,             0, 0,   100,   0, STR_NULL, NULL),
+	  SDTG_VAR("max_join_time",       SLE_UINT16, S, 0, _network_max_join_time,        500, 0, 32000,   0, STR_NULL, NULL),
+	 SDTG_BOOL("pause_on_join",                   S, 0, _network_pause_on_join,        true,               STR_NULL, NULL),
+	  SDTG_STR("server_bind_ip",        SLE_STRB, S, 0, _network_server_bind_ip_host,  "0.0.0.0",          STR_NULL, NULL),
+	  SDTG_VAR("server_port",         SLE_UINT16, S, 0, _network_server_port,          NETWORK_DEFAULT_PORT, 0, 65535, 0, STR_NULL, NULL),
+	 SDTG_BOOL("server_advertise",                S, 0, _network_advertise,            false,              STR_NULL, NULL),
+	  SDTG_VAR("lan_internet",         SLE_UINT8, S, 0, _network_lan_internet,           0, 0,     1,   0, STR_NULL, NULL),
+	  SDTG_STR("player_name",           SLE_STRB, S, 0, _network_player_name,          NULL,               STR_NULL, NULL),
+	  SDTG_STR("server_password",       SLE_STRB, S, 0, _network_server_password,      NULL,               STR_NULL, NULL),
+	  SDTG_STR("rcon_password",         SLE_STRB, S, 0, _network_rcon_password,        NULL,               STR_NULL, NULL),
+	  SDTG_STR("server_name",           SLE_STRB, S, 0, _network_server_name,          NULL,               STR_NULL, NULL),
+	  SDTG_STR("connect_to_ip",         SLE_STRB, S, 0, _network_default_ip,           NULL,               STR_NULL, NULL),
+	  SDTG_STR("network_id",            SLE_STRB, S, 0, _network_unique_id,            NULL,               STR_NULL, NULL),
+	 SDTG_BOOL("autoclean_companies",             S, 0, _network_autoclean_companies,  false,              STR_NULL, NULL),
+	  SDTG_VAR("autoclean_unprotected",SLE_UINT8, S, 0, _network_autoclean_unprotected,12, 0,     60,   0, STR_NULL, NULL),
+	  SDTG_VAR("autoclean_protected",  SLE_UINT8, S, 0, _network_autoclean_protected,  36, 0,    180,   0, STR_NULL, NULL),
+	  SDTG_VAR("max_companies",        SLE_UINT8, S, 0, _network_game_info.companies_max,   8, 0,  8,   0, STR_NULL, NULL),
+	  SDTG_VAR("max_clients",          SLE_UINT8, S, 0, _network_game_info.clients_max,    10, 0, 10,   0, STR_NULL, NULL),
+	  SDTG_VAR("max_spectators",       SLE_UINT8, S, 0, _network_game_info.spectators_max, 10, 0, 10,   0, STR_NULL, NULL),
+	  SDTG_VAR("restart_game_year",    SLE_INT32, S,D0, _network_restart_game_year,    0, MIN_YEAR, MAX_YEAR, 1, STR_NULL, NULL),
+	  SDTG_VAR("min_players",          SLE_UINT8, S, 0, _network_min_players,               0, 0, 10,   0, STR_NULL, NULL),
+	SDTG_OMANY("server_lang",          SLE_UINT8, S, 0, _network_game_info.server_lang,     0, 3, "ANY|ENGLISH|GERMAN|FRENCH", STR_NULL, NULL),
+	  SDTG_END()
 };
 #endif /* ENABLE_NETWORK */
 
@@ -1316,6 +1335,7 @@
 	SDT_BOOL(Patches, prefer_teamchat,               S, 0, false,        STR_CONFIG_PATCHES_PREFER_TEAMCHAT,       NULL),
 	SDT_VAR(Patches, scrollwheel_scrolling,SLE_UINT8,S,MS, 0,  0,  2, 0, STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLLING, NULL),
 	SDT_VAR(Patches,scrollwheel_multiplier,SLE_UINT8,S, 0, 5,  1, 15, 1, STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER,NULL),
+	SDT_BOOL(Patches, pause_on_newgame,              S, 0, false,        STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME,     NULL),
 
 	/***************************************************************************/
 	/* Construction section of the GUI-configure patches window */
@@ -1326,6 +1346,7 @@
 	SDT_BOOL(Patches, always_small_airport,          0, 0, false,        STR_CONFIG_PATCHES_SMALL_AIRPORTS,      NULL),
 	 SDT_VAR(Patches, drag_signals_density,SLE_UINT8,S, 0,  4, 1, 20, 0, STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY,NULL),
 	 SDT_VAR(Patches, semaphore_build_before,SLE_INT32, S, NC, 1975, MIN_YEAR, MAX_YEAR, 1, STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE, NULL),
+	SDT_CONDVAR(Patches, town_layout, SLE_UINT8, 59, SL_MAX_VERSION, 0, MS, TL_ORIGINAL, TL_NO_ROADS, NUM_TLS - 1, 1, STR_CONFIG_PATCHES_TOWN_LAYOUT, CheckTownLayout),
 
 	/***************************************************************************/
 	/* Vehicle section of the GUI-configure patches window */
--- a/src/settings_gui.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/settings_gui.cpp	Wed May 09 20:22:49 2007 +0000
@@ -203,6 +203,7 @@
 			break;
 		case 24: /* Change interface language */
 			ReadLanguagePack(e->we.dropdown.index);
+			UpdateAllStationVirtCoord();
 			MarkWholeScreenDirty();
 			break;
 		case 27: /* Change resolution */
@@ -308,8 +309,8 @@
 static const GameSettingData _game_setting_info[] = {
 	{  0,   7,  1, STR_NULL},
 	{  0,   3,  1, STR_6830_IMMEDIATE},
-	{  0,   2,  1, STR_6816_LOW},
-	{  0,   3,  1, STR_26816_NONE},
+	{  0,   3,  1, STR_NUM_VERY_LOW},
+	{  0,   4,  1, STR_26816_NONE},
 	{100, 500, 50, STR_NULL},
 	{  2,   4,  1, STR_NULL},
 	{  0,   2,  1, STR_6820_LOW},
@@ -329,8 +330,8 @@
 /*
  * A: competitors
  * B: start time in months / 3
- * C: town count (2 = high, 0 = low)
- * D: industry count (3 = high, 0 = none)
+ * C: town count (2 = high, 0 = very low)
+ * D: industry count (4 = high, 0 = none)
  * E: inital loan / 1000 (in GBP)
  * F: interest rate
  * G: running costs (0 = low, 2 = high)
@@ -348,9 +349,9 @@
  */
 static const int16 _default_game_diff[3][GAME_DIFFICULTY_NUM] = { /*
 	 A, B, C, D,   E, F, G, H, I, J, K, L, M, N, O, P, Q, R*/
-	{2, 2, 1, 3, 300, 2, 0, 2, 0, 1, 2, 0, 1, 0, 0, 0, 0, 0}, ///< easy
-	{4, 1, 1, 2, 150, 3, 1, 3, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1}, ///< medium
-	{7, 0, 2, 2, 100, 4, 1, 3, 2, 2, 0, 2, 3, 2, 1, 1, 1, 2}, ///< hard
+	{2, 2, 1, 4, 300, 2, 0, 2, 0, 1, 2, 0, 1, 0, 0, 0, 0, 0}, ///< easy
+	{4, 1, 1, 3, 150, 3, 1, 3, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1}, ///< medium
+	{7, 0, 0, 2, 100, 4, 1, 3, 2, 2, 0, 2, 3, 2, 1, 1, 1, 2}, ///< hard
 };
 
 void SetDifficultyLevel(int mode, GameOptions *gm_opt)
@@ -596,6 +597,7 @@
 	 *  Since it's also able to completely disable the scrollwheel will we display it on all platforms anyway */
 	"scrollwheel_scrolling",
 	"scrollwheel_multiplier",
+	"pause_on_newgame",
 };
 
 static const char *_patches_construction[] = {
@@ -607,6 +609,7 @@
 	"drag_signals_density",
 	"oil_refinery_limit",
 	"semaphore_build_before",
+	"town_layout",
 };
 
 static const char *_patches_stations[] = {
--- a/src/ship.h	Fri May 04 23:17:26 2007 +0000
+++ b/src/ship.h	Wed May 09 20:22:49 2007 +0000
@@ -23,4 +23,28 @@
 	return IsShipInDepot(v) && v->vehstatus & VS_STOPPED;
 }
 
+
+/**
+ * This class 'wraps' Vehicle; you do not actually instantiate this class.
+ * You create a Vehicle using AllocateVehicle, so it is added to the pool
+ * and you reinitialize that to a Train using:
+ *   v = new (v) Ship();
+ *
+ * As side-effect the vehicle type is set correctly.
+ */
+struct Ship: public Vehicle {
+	/** Initializes the Vehicle to a ship */
+	Ship() { this->type = VEH_SHIP; }
+
+	/** We want to 'destruct' the right class. */
+	virtual ~Ship() {}
+
+	const char *GetTypeString() const { return "ship"; }
+	void MarkDirty();
+	void UpdateDeltaXY(Direction direction);
+	ExpensesType GetExpenseType(bool income) const { return income ? EXPENSES_SHIP_INC : EXPENSES_SHIP_RUN; }
+	WindowClass GetVehicleListWindowClass() const { return WC_SHIPS_LIST; }
+	void PlayLeaveStationSound() const;
+};
+
 #endif /* SHIP_H */
--- a/src/ship_cmd.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/ship_cmd.cpp	Wed May 09 20:22:49 2007 +0000
@@ -187,7 +187,7 @@
 
 	if (v->vehstatus & VS_STOPPED) return;
 
-	cost = ShipVehInfo(v->engine_type)->running_cost * _price.ship_running / 364;
+	cost = GetVehicleProperty(v, 0x0F, ShipVehInfo(v->engine_type)->running_cost) * _price.ship_running / 364;
 	v->profit_this_year -= cost >> 8;
 
 	SET_EXPENSES_TYPE(EXPENSES_SHIP_RUN);
@@ -229,19 +229,24 @@
 	}
 }
 
-static void MarkShipDirty(Vehicle *v)
+void Ship::MarkDirty()
 {
-	v->cur_image = GetShipImage(v, v->direction);
-	MarkAllViewportsDirty(v->left_coord, v->top_coord, v->right_coord + 1, v->bottom_coord + 1);
+	this->cur_image = GetShipImage(this, this->direction);
+	MarkAllViewportsDirty(this->left_coord, this->top_coord, this->right_coord + 1, this->bottom_coord + 1);
 }
 
-static void PlayShipSound(Vehicle *v)
+static void PlayShipSound(const Vehicle *v)
 {
 	if (!PlayVehicleSound(v, VSE_START)) {
 		SndPlayVehicleFx(ShipVehInfo(v->engine_type)->sfx, v);
 	}
 }
 
+void Ship::PlayLeaveStationSound() const
+{
+	PlayShipSound(this);
+}
+
 static void ProcessShipOrder(Vehicle *v)
 {
 	const Order *order;
@@ -300,66 +305,34 @@
 	InvalidateWindowClasses(WC_SHIPS_LIST);
 }
 
-static void HandleShipLoading(Vehicle *v)
+void Ship::UpdateDeltaXY(Direction direction)
 {
-	switch (v->current_order.type) {
-		case OT_LOADING: {
-			if (--v->load_unload_time_rem) return;
-
-			if (CanFillVehicle(v) && (
-						v->current_order.flags & OF_FULL_LOAD ||
-						(_patches.gradual_loading && !HASBIT(v->vehicle_flags, VF_LOADING_FINISHED))
-					)) {
-				SET_EXPENSES_TYPE(EXPENSES_SHIP_INC);
-				if (LoadUnloadVehicle(v, false)) {
-					InvalidateWindow(WC_SHIPS_LIST, v->owner);
-					MarkShipDirty(v);
-				}
-				return;
-			}
-			PlayShipSound(v);
-
-			Order b = v->current_order;
-			v->LeaveStation();
-			if (!(b.flags & OF_NON_STOP)) return;
-			break;
-		}
-
-		case OT_DUMMY: break;
-
-		default: return;
-	}
-
-	v->cur_order_index++;
-	InvalidateVehicleOrder(v);
-}
-
-static void UpdateShipDeltaXY(Vehicle *v, int dir)
-{
-#define MKIT(d,c,b,a) ((a&0xFF)<<24) | ((b&0xFF)<<16) | ((c&0xFF)<<8) | ((d&0xFF)<<0)
+#define MKIT(a, b, c, d) ((a & 0xFF) << 24) | ((b & 0xFF) << 16) | ((c & 0xFF) << 8) | ((d & 0xFF) << 0)
 	static const uint32 _delta_xy_table[8] = {
-		MKIT( -3,  -3,  6,  6),
-		MKIT(-16,  -3, 32,  6),
-		MKIT( -3,  -3,  6,  6),
-		MKIT( -3, -16,  6, 32),
-		MKIT( -3,  -3,  6,  6),
-		MKIT(-16,  -3, 32,  6),
-		MKIT( -3,  -3,  6,  6),
-		MKIT( -3, -16,  6, 32),
+		MKIT( 6,  6,  -3,  -3),
+		MKIT( 6, 32,  -3, -16),
+		MKIT( 6,  6,  -3,  -3),
+		MKIT(32,  6, -16,  -3),
+		MKIT( 6,  6,  -3,  -3),
+		MKIT( 6, 32,  -3, -16),
+		MKIT( 6,  6,  -3,  -3),
+		MKIT(32,  6, -16,  -3),
 	};
 #undef MKIT
-	uint32 x = _delta_xy_table[dir];
-	v->x_offs        = GB(x,  0, 8);
-	v->y_offs        = GB(x,  8, 8);
-	v->sprite_width  = GB(x, 16, 8);
-	v->sprite_height = GB(x, 24, 8);
+
+	uint32 x = _delta_xy_table[direction];
+	this->x_offs        = GB(x,  0, 8);
+	this->y_offs        = GB(x,  8, 8);
+	this->sprite_width  = GB(x, 16, 8);
+	this->sprite_height = GB(x, 24, 8);
+	this->z_height      = 6;
 }
 
 void RecalcShipStuff(Vehicle *v)
 {
-	UpdateShipDeltaXY(v, v->direction);
+	v->UpdateDeltaXY(v->direction);
 	v->cur_image = GetShipImage(v, v->direction);
-	MarkShipDirty(v);
+	v->MarkDirty();
 	InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
 }
 
@@ -428,7 +401,7 @@
 
 static int32 EstimateShipCost(EngineID engine_type)
 {
-	return ShipVehInfo(engine_type)->base_cost * (_price.ship_base>>3)>>5;
+	return GetEngineProperty(engine_type, 0x0A, ShipVehInfo(engine_type)->base_cost) * (_price.ship_base>>3)>>5;
 }
 
 static void ShipArrivesAt(const Vehicle* v, Station* st)
@@ -683,7 +656,7 @@
 	if (v->vehstatus & VS_STOPPED) return;
 
 	ProcessShipOrder(v);
-	HandleShipLoading(v);
+	v->HandleLoading();
 
 	if (v->current_order.type == OT_LOADING) return;
 
@@ -735,17 +708,8 @@
 							/* Process station in the orderlist. */
 							st = GetStation(v->current_order.dest);
 							if (st->facilities & FACIL_DOCK) { // ugly, ugly workaround for problem with ships able to drop off cargo at wrong stations
-								v->BeginLoading();
-								v->current_order.flags &= OF_FULL_LOAD | OF_UNLOAD | OF_TRANSFER;
-								v->current_order.flags |= OF_NON_STOP;
 								ShipArrivesAt(v, st);
-
-								SET_EXPENSES_TYPE(EXPENSES_SHIP_INC);
-								if (LoadUnloadVehicle(v, true)) {
-									InvalidateWindow(WC_SHIPS_LIST, v->owner);
-									MarkShipDirty(v);
-								}
-								InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
+								v->BeginLoading();
 							} else { // leave stations without docks right aways
 								v->current_order.type = OT_LEAVESTATION;
 								v->cur_order_index++;
@@ -797,7 +761,7 @@
 	v->z_pos = GetSlopeZ(gp.x, gp.y);
 
 getout:
-	UpdateShipDeltaXY(v, dir);
+	v->UpdateDeltaXY(dir);
 	v->cur_image = GetShipImage(v, dir);
 	VehiclePositionChanged(v);
 	EndVehicleMove(v);
@@ -882,11 +846,7 @@
 		v->y_pos = y;
 		v->z_pos = GetSlopeZ(x, y);
 
-		v->z_height = 6;
-		v->sprite_width = 6;
-		v->sprite_height = 6;
-		v->x_offs = -3;
-		v->y_offs = -3;
+		v->UpdateDeltaXY(v->direction);
 		v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
 
 		v->spritenum = svi->image_index;
@@ -912,7 +872,7 @@
 		v->date_of_last_service = _date;
 		v->build_year = _cur_year;
 		v->cur_image = 0x0E5E;
-		v->type = VEH_SHIP;
+		v = new (v) Ship();
 		v->random_bits = VehicleRandomBits();
 
 		v->vehicle_flags = 0;
@@ -1087,6 +1047,8 @@
  * @param p2 various bitstuffed elements
  * - p2 = (bit 0-7) - the new cargo type to refit to (p2 & 0xFF)
  * - p2 = (bit 8-15) - the new cargo subtype to refit to
+ * - p2 = (bit 16) - refit only this vehicle (ignored)
+ * @return cost of refit or error
  */
 int32 CmdRefitShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
--- a/src/smallmap_gui.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/smallmap_gui.cpp	Wed May 09 20:22:49 2007 +0000
@@ -91,72 +91,6 @@
 	MKEND()
 };
 
-static const LegendAndColour _legend_industries_normal[] = {
-	MK(0xD7, STR_00FA_COAL_MINE),
-	MK(0xB8, STR_00FB_POWER_STATION),
-	MK(0x56, STR_00FC_FOREST),
-	MK(0xC2, STR_00FD_SAWMILL),
-	MK(0xBF, STR_00FE_OIL_REFINERY),
-	MK(0x0F, STR_0105_BANK),
-
-	MS(0x30, STR_00FF_FARM),
-	MK(0xAE, STR_0100_FACTORY),
-	MK(0x98, STR_0102_OIL_WELLS),
-	MK(0x37, STR_0103_IRON_ORE_MINE),
-	MK(0x0A, STR_0104_STEEL_MILL),
-	MKEND()
-};
-
-static const LegendAndColour _legend_industries_hilly[] = {
-	MK(0xD7, STR_00FA_COAL_MINE),
-	MK(0xB8, STR_00FB_POWER_STATION),
-	MK(0x56, STR_00FC_FOREST),
-	MK(0x0A, STR_0106_PAPER_MILL),
-	MK(0xBF, STR_00FE_OIL_REFINERY),
-	MK(0x37, STR_0108_FOOD_PROCESSING_PLANT),
-	MS(0x30, STR_00FF_FARM),
-
-	MK(0xAE, STR_0101_PRINTING_WORKS),
-	MK(0x98, STR_0102_OIL_WELLS),
-	MK(0xC2, STR_0107_GOLD_MINE),
-	MK(0x0F, STR_0105_BANK),
-	MKEND()
-};
-
-static const LegendAndColour _legend_industries_desert[] = {
-	MK(0xBF, STR_00FE_OIL_REFINERY),
-	MK(0x98, STR_0102_OIL_WELLS),
-	MK(0x0F, STR_0105_BANK),
-	MK(0xB8, STR_0109_DIAMOND_MINE),
-	MK(0x37, STR_0108_FOOD_PROCESSING_PLANT),
-	MK(0x0A, STR_010A_COPPER_ORE_MINE),
-	MK(0x30, STR_00FF_FARM),
-	MS(0x56, STR_010B_FRUIT_PLANTATION),
-
-	MK(0x27, STR_010C_RUBBER_PLANTATION),
-	MK(0x25, STR_010D_WATER_SUPPLY),
-	MK(0xD0, STR_010E_WATER_TOWER),
-	MK(0xAE, STR_0100_FACTORY),
-	MK(0xC2, STR_010F_LUMBER_MILL),
-	MKEND()
-};
-
-static const LegendAndColour _legend_industries_candy[] = {
-	MK(0x30, STR_0110_COTTON_CANDY_FOREST),
-	MK(0xAE, STR_0111_CANDY_FACTORY),
-	MK(0x27, STR_0112_BATTERY_FARM),
-	MK(0x37, STR_0113_COLA_WELLS),
-	MK(0xD0, STR_0114_TOY_SHOP),
-	MK(0x0A, STR_0115_TOY_FACTORY),
-	MS(0x25, STR_0116_PLASTIC_FOUNTAINS),
-
-	MK(0xB8, STR_0117_FIZZY_DRINK_FACTORY),
-	MK(0x98, STR_0118_BUBBLE_GENERATOR),
-	MK(0xC2, STR_0119_TOFFEE_QUARRY),
-	MK(0x0F, STR_011A_SUGAR_MINE),
-	MKEND()
-};
-
 static const LegendAndColour _legend_routes[] = {
 	MK(0xD7, STR_00EB_ROADS),
 	MK(0x0A, STR_00EC_RAILROADS),
@@ -197,21 +131,40 @@
 #undef MS
 #undef MKEND
 
+/** Allow room for all industries, plus a terminator entry
+ * This is required in order to have the indutry slots all filled up */
+static LegendAndColour _legend_from_industries[NUM_INDUSTRYTYPES+1];
 
-enum { IND_OFFS = 6 };  ///< allow to "jump" to the industries corresponding to the landscape
+/**
+ * Fills an array for the industries legends.
+ */
+void BuildIndustriesLegend()
+{
+	const IndustrySpec *indsp;
+	uint j = 0;
+
+	/* Add each name */
+	for (IndustryType i = 0; i < NUM_INDUSTRYTYPES; i++) {
+		indsp = GetIndustrySpec(i);
+		if (HASBIT(indsp->climate_availability, _opt.landscape)) {
+			_legend_from_industries[j].legend = indsp->name;
+			_legend_from_industries[j].colour = indsp->map_colour;
+			_legend_from_industries[j].col_break = (j % 6) == 0;  // break is performed on the 7th item
+			_legend_from_industries[j].end = false;
+			j++;
+		}
+	}
+	/* Terminate the list */
+	_legend_from_industries[j].end = true;
+}
 
 static const LegendAndColour * const _legend_table[] = {
 	_legend_land_contours,
 	_legend_vehicles,
-	NULL,
+	_legend_from_industries,
 	_legend_routes,
 	_legend_vegetation,
 	_legend_land_owners,
-
-	_legend_industries_normal,
-	_legend_industries_hilly,
-	_legend_industries_desert,
-	_legend_industries_candy,
 };
 
 #if defined(OTTD_ALIGNMENT)
@@ -800,15 +753,23 @@
 			SetDParam(0, STR_00E5_CONTOURS + _smallmap_type);
 			DrawWindowWidgets(w);
 
-			/* draw the legend */
-			tbl = _legend_table[(_smallmap_type != 2) ? _smallmap_type : (_opt.landscape + IND_OFFS)];
+			tbl = _legend_table[_smallmap_type];
+
 			x = 4;
 			y_org = w->height - 44 - 11;
 			y = y_org;
 			for (;;) {
 				GfxFillRect(x,     y + 1, x + 8, y + 5, 0);
 				GfxFillRect(x + 1, y + 2, x + 7, y + 4, tbl->colour);
-				DrawString(x + 11, y, tbl->legend, 0);
+
+				if (_smallmap_type == 2) {
+					/* Industry name must be formated, since it's not in tiny font in the specs.
+					* So, draw with a parameter and use the STR_7065 string, which is tiny, black */
+					SetDParam(0, tbl->legend);
+					DrawString(x + 11, y, STR_7065, 0);
+				} else {
+					DrawString(x + 11, y, tbl->legend, 0);
+				}
 
 				tbl += 1;
 				y += 6;
--- a/src/station_cmd.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/station_cmd.cpp	Wed May 09 20:22:49 2007 +0000
@@ -935,7 +935,7 @@
 			int w = plat_len;
 			do {
 				byte layout = *layout_ptr++;
-				MakeRailStation(tile, st->owner, st->index, axis, layout, (RailType)GB(p2, 0, 4));
+				MakeRailStation(tile, st->owner, st->index, axis, layout & ~1, (RailType)GB(p2, 0, 4));
 				SetCustomStationSpecIndex(tile, specindex);
 				SetStationTileRandomBits(tile, GB(Random(), 0, 4));
 
@@ -943,7 +943,7 @@
 					/* Use a fixed axis for GetPlatformInfo as our platforms / numtracks are always the right way around */
 					uint32 platinfo = GetPlatformInfo(AXIS_X, 0, plat_len, numtracks_orig, plat_len - w, numtracks_orig - numtracks, false);
 					uint16 callback = GetStationCallback(CBID_STATION_TILE_LAYOUT, platinfo, 0, statspec, st, tile);
-					if (callback != CALLBACK_FAILED && callback < 8) SetStationGfx(tile, callback + axis);
+					if (callback != CALLBACK_FAILED && callback < 8) SetStationGfx(tile, (callback & ~1) + axis);
 				}
 
 				tile += tile_delta;
@@ -1025,43 +1025,77 @@
  * This allows for custom-built station with holes and weird layouts
  * @param tile tile of station piece to remove
  * @param flags operation to perform
- * @param p1 unused
+ * @param p1 start_tile
  * @param p2 unused
  */
 int32 CmdRemoveFromRailroadStation(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
+	TileIndex start = p1 == 0 ? tile : p1;
+
+	/* Count of the number of tiles removed */
+	int quantity = 0;
+
+	if (tile >= MapSize() || start >= MapSize()) return CMD_ERROR;
+
+	/* make sure sx,sy are smaller than ex,ey */
+	int ex = TileX(tile);
+	int ey = TileY(tile);
+	int sx = TileX(start);
+	int sy = TileY(start);
+	if (ex < sx) Swap(ex, sx);
+	if (ey < sy) Swap(ey, sy);
+	tile = TileXY(sx, sy);
+
+	int size_x = ex - sx + 1;
+	int size_y = ey - sy + 1;
+
 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 
-	// make sure the specified tile belongs to the current player, and that it is a railroad station.
-	if (!IsTileType(tile, MP_STATION) || !IsRailwayStation(tile) || !_patches.nonuniform_stations) return CMD_ERROR;
-	Station *st = GetStationByTile(tile);
-	if (_current_player != OWNER_WATER && (!CheckOwnership(st->owner) || !EnsureNoVehicle(tile))) return CMD_ERROR;
-
-	// if we reached here, it means we can actually delete it. do that.
-	if (flags & DC_EXEC) {
-		uint specindex = GetCustomStationSpecIndex(tile);
-		Track track = GetRailStationTrack(tile);
-		DoClearSquare(tile);
-		st->rect.AfterRemoveTile(st, tile);
-		SetSignalsOnBothDir(tile, track);
-		YapfNotifyTrackLayoutChange(tile, track);
-
-		DeallocateSpecFromStation(st, specindex);
-
-		// now we need to make the "spanned" area of the railway station smaller if we deleted something at the edges.
-		// we also need to adjust train_tile.
-		MakeRailwayStationAreaSmaller(st);
-		st->MarkTilesDirty();
-		UpdateStationSignCoord(st);
-
-		// if we deleted the whole station, delete the train facility.
-		if (st->train_tile == 0) {
-			st->facilities &= ~FACIL_TRAIN;
-			UpdateStationVirtCoordDirty(st);
-			DeleteStationIfEmpty(st);
+	/* Do the action for every tile into the area */
+	BEGIN_TILE_LOOP(tile2, size_x, size_y, tile) {
+		/* Make sure the specified tile belongs to the current player, and that it is a railroad station. */
+		if (!IsTileType(tile2, MP_STATION) || !IsRailwayStation(tile2) || !_patches.nonuniform_stations) {
+			continue;
 		}
-	}
-	return _price.remove_rail_station;
+
+		/* Check ownership of station */
+		Station *st = GetStationByTile(tile2);
+		if (_current_player != OWNER_WATER && (!CheckOwnership(st->owner) || !EnsureNoVehicle(tile2))) {
+			continue;
+		}
+
+		/* If we reached here, the tile is valid so increase the quantity of tiles we will remove */
+		quantity++;
+
+		if (flags & DC_EXEC) {
+			uint specindex = GetCustomStationSpecIndex(tile2);
+			Track track = GetRailStationTrack(tile2);
+			DoClearSquare(tile2);
+			st->rect.AfterRemoveTile(st, tile2);
+			SetSignalsOnBothDir(tile2, track);
+			YapfNotifyTrackLayoutChange(tile2, track);
+
+			DeallocateSpecFromStation(st, specindex);
+
+			// now we need to make the "spanned" area of the railway station smaller if we deleted something at the edges.
+			// we also need to adjust train_tile.
+			MakeRailwayStationAreaSmaller(st);
+			st->MarkTilesDirty();
+			UpdateStationSignCoord(st);
+
+			// if we deleted the whole station, delete the train facility.
+			if (st->train_tile == 0) {
+				st->facilities &= ~FACIL_TRAIN;
+				UpdateStationVirtCoordDirty(st);
+				DeleteStationIfEmpty(st);
+			}
+		}
+	} END_TILE_LOOP(tile2, size_x, size_y, tile)
+
+	/* If we've not removed any tiles, give an error */
+	if (quantity == 0) return CMD_ERROR;
+
+	return _price.remove_rail_station * quantity;
 }
 
 
--- a/src/table/engines.h	Fri May 04 23:17:26 2007 +0000
+++ b/src/table/engines.h	Wed May 09 20:22:49 2007 +0000
@@ -339,20 +339,25 @@
  * @param e power (hp)
  * @param f weight
  * @param g running_cost_base
- * @param h running_cost_class - engclass
+ * @param h running_cost_class
  * @param i capacity
  * @param j cargo_type
  * @param k ai_rank
  * @param l railtype
+ * @param m engclass
  * Tractive effort coefficient by default is the same as TTDPatch, 0.30*256=76
  */
-#define RVI(a, b, c, d, e, f, g, h, i, j, k, l) { a, b, c, {l}, d, e, f, g, h, h, i, j, k, 0, 0, 0, 0, 76, 0 }
+#define RVI(a, b, c, d, e, f, g, h, i, j, k, l, m) { a, b, c, {l}, d, e, f, g, h, m, i, j, k, 0, 0, 0, 0, 76, 0 }
 #define M RAILVEH_MULTIHEAD
 #define W RAILVEH_WAGON
 #define G RAILVEH_SINGLEHEAD
-#define S 0
-#define D 1
-#define E 2
+#define S EC_STEAM
+#define D EC_DIESEL
+#define E EC_ELECTRIC
+#define N EC_MONORAIL
+#define V EC_MAGLEV
+/* Wagons always have engine type 0, i.e. steam. */
+#define A EC_STEAM
 
 #define R RAILTYPE_RAIL
 #define C RAILTYPE_ELECTRIC
@@ -360,132 +365,134 @@
 #define L RAILTYPE_MAGLEV
 
 const RailVehicleInfo orig_rail_vehicle_info[NUM_TRAIN_ENGINES] = {
-	//   image_index  max_speed (kph)      running_cost_base
-	//   |  flags     |        power (hp)  |  running_cost_class & engclass
-	//   |  |    base_cost     |    weight |  |   capacity
-	//   |  |    |    |        |    |      |  |   |  cargo_type
-	//   |  |    |    |        |    |      |  |   |  |
-	RVI( 2, G,   7,  64,     300,  47,    50, S,  0, 0              ,  1, R), //   0
-	RVI(19, G,   8,  80,     600,  65,    65, D,  0, 0              ,  4, R), //   1
-	RVI( 2, G,  10,  72,     400,  85,    90, S,  0, 0              ,  7, R), //   2
-	RVI( 0, G,  15,  96,     900, 130,   130, S,  0, 0              , 19, R), //   3
-	RVI( 1, G,  19, 112,    1000, 140,   145, S,  0, 0              , 20, R), //   4
-	RVI(12, G,  16, 120,    1400,  95,   125, D,  0, 0              , 30, R), //   5
-	RVI(14, G,  20, 152,    2000, 120,   135, D,  0, 0              , 31, R), //   6
-	RVI( 3, G,  14,  88,    1100, 145,   130, S,  0, 0              , 19, R), //   7
-	RVI( 0, G,  13, 112,    1000, 131,   120, S,  0, 0              , 20, R), //   8
-	RVI( 1, G,  19, 128,    1200, 162,   140, S,  0, 0              , 21, R), //   9
-	RVI( 0, G,  22, 144,    1600, 170,   130, S,  0, 0              , 22, R), //  10
-	RVI( 8, M,  11, 112,   600/2,32/2,  85/2, D, 38, CT_PASSENGERS  , 10, R), //  11
-	RVI(10, M,  14, 120,   700/2,38/2,  70/2, D, 40, CT_PASSENGERS  , 11, R), //  12
-	RVI( 4, G,  15, 128,    1250,  72,    95, D,  0, 0              , 30, R), //  13
-	RVI( 5, G,  17, 144,    1750, 101,   120, D,  0, 0              , 31, R), //  14
-	RVI( 4, G,  18, 160,    2580, 112,   140, D,  0, 0              , 32, R), //  15
-	RVI(14, G,  23,  96,    4000, 150,   135, D,  0, 0              , 33, R), //  16
-	RVI(12, G,  16, 112,    2400, 120,   105, D,  0, 0              , 34, R), //  17
-	RVI(13, G,  30, 112,    6600, 207,   155, D,  0, 0              , 35, R), //  18
-	RVI(15, G,  18, 104,    1500, 110,   105, D,  0, 0              , 29, R), //  19
-	RVI(16, M,  35, 160,  3500/2,95/2, 205/2, D,  0, 0              , 45, R), //  20
-	RVI(18, G,  21, 104,    2200, 120,   145, D,  0, 0              , 32, R), //  21
-	RVI( 6, M,  20, 200,  4500/2,70/2, 190/2, D,  4, CT_MAIL        , 50, R), //  22
-	RVI(20, G,  26, 160,    3600,  84,   180, E,  0, 0              , 40, C), //  23
-	RVI(20, G,  30, 176,    5000,  82,   205, E,  0, 0              , 41, C), //  24
-	RVI(21, M,  40, 240,  7000/2,90/2, 240/2, E,  0, 0              , 51, C), //  25
-	RVI(23, M,  43, 264,  8000/2,95/2, 250/2, E,  0, 0              , 52, C), //  26
-	RVI(33, W, 247,   0,       0,  25,     0, 0, 40, CT_PASSENGERS  ,  0, R), //  27
-	RVI(35, W, 228,   0,       0,  21,     0, 0, 30, CT_MAIL        ,  0, R), //  28
-	RVI(34, W, 176,   0,       0,  18,     0, 0, 30, CT_COAL        ,  0, R), //  29
-	RVI(36, W, 200,   0,       0,  24,     0, 0, 30, CT_OIL         ,  0, R), //  30
-	RVI(37, W, 192,   0,       0,  20,     0, 0, 25, CT_LIVESTOCK   ,  0, R), //  31
-	RVI(38, W, 190,   0,       0,  21,     0, 0, 25, CT_GOODS       ,  0, R), //  32
-	RVI(39, W, 182,   0,       0,  19,     0, 0, 30, CT_GRAIN       ,  0, R), //  33
-	RVI(40, W, 181,   0,       0,  16,     0, 0, 30, CT_WOOD        ,  0, R), //  34
-	RVI(41, W, 179,   0,       0,  19,     0, 0, 30, CT_IRON_ORE    ,  0, R), //  35
-	RVI(42, W, 196,   0,       0,  18,     0, 0, 20, CT_STEEL       ,  0, R), //  36
-	RVI(43, W, 255,   0,       0,  30,     0, 0, 20, CT_VALUABLES   ,  0, R), //  37
-	RVI(44, W, 191,   0,       0,  22,     0, 0, 25, CT_FOOD        ,  0, R), //  38
-	RVI(45, W, 196,   0,       0,  18,     0, 0, 20, CT_PAPER       ,  0, R), //  39
-	RVI(46, W, 179,   0,       0,  19,     0, 0, 30, CT_COPPER_ORE  ,  0, R), //  40
-	RVI(47, W, 199,   0,       0,  25,     0, 0, 25, CT_WATER       ,  0, R), //  41
-	RVI(48, W, 182,   0,       0,  18,     0, 0, 25, CT_FRUIT       ,  0, R), //  42
-	RVI(49, W, 185,   0,       0,  19,     0, 0, 21, CT_RUBBER      ,  0, R), //  43
-	RVI(50, W, 176,   0,       0,  19,     0, 0, 30, CT_SUGAR       ,  0, R), //  44
-	RVI(51, W, 178,   0,       0,  20,     0, 0, 30, CT_COTTON_CANDY,  0, R), //  45
-	RVI(52, W, 192,   0,       0,  20,     0, 0, 30, CT_TOFFEE      ,  0, R), //  46
-	RVI(53, W, 190,   0,       0,  21,     0, 0, 20, CT_BUBBLES     ,  0, R), //  47
-	RVI(54, W, 182,   0,       0,  24,     0, 0, 25, CT_COLA        ,  0, R), //  48
-	RVI(55, W, 181,   0,       0,  21,     0, 0, 25, CT_CANDY       ,  0, R), //  49
-	RVI(56, W, 183,   0,       0,  21,     0, 0, 20, CT_TOYS        ,  0, R), //  50
-	RVI(57, W, 196,   0,       0,  18,     0, 0, 22, CT_BATTERIES   ,  0, R), //  51
-	RVI(58, W, 193,   0,       0,  18,     0, 0, 25, CT_FIZZY_DRINKS,  0, R), //  52
-	RVI(59, W, 191,   0,       0,  18,     0, 0, 30, CT_PLASTIC     ,  0, R), //  53
-	RVI(25, G,  52, 304,    9000,  95,   230, E,  0, 0              , 60, O), //  54
-	RVI(26, M,  60, 336, 10000/2,85/2, 240/2, E, 25, CT_PASSENGERS  , 62, O), //  55
-	RVI(26, G,  53, 320,    5000,  95,   230, E,  0, 0              , 63, O), //  56
-	RVI(60, W, 247,   0,       0,  25,     0, 0, 45, CT_PASSENGERS  ,  0, O), //  57
-	RVI(62, W, 228,   0,       0,  21,     0, 0, 35, CT_MAIL        ,  0, O), //  58
-	RVI(61, W, 176,   0,       0,  18,     0, 0, 35, CT_COAL        ,  0, O), //  59
-	RVI(63, W, 200,   0,       0,  24,     0, 0, 35, CT_OIL         ,  0, O), //  60
-	RVI(64, W, 192,   0,       0,  20,     0, 0, 30, CT_LIVESTOCK   ,  0, O), //  61
-	RVI(65, W, 190,   0,       0,  21,     0, 0, 30, CT_GOODS       ,  0, O), //  62
-	RVI(66, W, 182,   0,       0,  19,     0, 0, 35, CT_GRAIN       ,  0, O), //  63
-	RVI(67, W, 181,   0,       0,  16,     0, 0, 35, CT_WOOD        ,  0, O), //  64
-	RVI(68, W, 179,   0,       0,  19,     0, 0, 35, CT_IRON_ORE    ,  0, O), //  65
-	RVI(69, W, 196,   0,       0,  18,     0, 0, 25, CT_STEEL       ,  0, O), //  66
-	RVI(70, W, 255,   0,       0,  30,     0, 0, 25, CT_VALUABLES   ,  0, O), //  67
-	RVI(71, W, 191,   0,       0,  22,     0, 0, 30, CT_FOOD        ,  0, O), //  68
-	RVI(72, W, 196,   0,       0,  18,     0, 0, 25, CT_PAPER       ,  0, O), //  69
-	RVI(73, W, 179,   0,       0,  19,     0, 0, 35, CT_COPPER_ORE  ,  0, O), //  70
-	RVI(47, W, 199,   0,       0,  25,     0, 0, 30, CT_WATER       ,  0, O), //  71
-	RVI(48, W, 182,   0,       0,  18,     0, 0, 30, CT_FRUIT       ,  0, O), //  72
-	RVI(49, W, 185,   0,       0,  19,     0, 0, 26, CT_RUBBER      ,  0, O), //  73
-	RVI(50, W, 176,   0,       0,  19,     0, 0, 35, CT_SUGAR       ,  0, O), //  74
-	RVI(51, W, 178,   0,       0,  20,     0, 0, 35, CT_COTTON_CANDY,  0, O), //  75
-	RVI(52, W, 192,   0,       0,  20,     0, 0, 35, CT_TOFFEE      ,  0, O), //  76
-	RVI(53, W, 190,   0,       0,  21,     0, 0, 25, CT_BUBBLES     ,  0, O), //  77
-	RVI(54, W, 182,   0,       0,  24,     0, 0, 30, CT_COLA        ,  0, O), //  78
-	RVI(55, W, 181,   0,       0,  21,     0, 0, 30, CT_CANDY       ,  0, O), //  79
-	RVI(56, W, 183,   0,       0,  21,     0, 0, 25, CT_TOYS        ,  0, O), //  80
-	RVI(57, W, 196,   0,       0,  18,     0, 0, 27, CT_BATTERIES   ,  0, O), //  81
-	RVI(58, W, 193,   0,       0,  18,     0, 0, 30, CT_FIZZY_DRINKS,  0, O), //  82
-	RVI(59, W, 191,   0,       0,  18,     0, 0, 35, CT_PLASTIC     ,  0, O), //  83
-	RVI(28, G,  70, 400,   10000, 105,   250, E,  0, 0              , 70, L), //  84
-	RVI(29, G,  74, 448,   12000, 120,   253, E,  0, 0              , 71, L), //  85
-	RVI(30, G,  82, 480,   15000, 130,   254, E,  0, 0              , 72, L), //  86
-	RVI(31, M,  95, 640, 20000/2,150/2,255/2, E,  0, 0              , 73, L), //  87
-	RVI(28, G,  70, 480,   10000, 120,   250, E,  0, 0              , 74, L), //  88
-	RVI(60, W, 247,   0,       0,  25,     0, 0, 47, CT_PASSENGERS  ,  0, L), //  89
-	RVI(62, W, 228,   0,       0,  21,     0, 0, 37, CT_MAIL        ,  0, L), //  90
-	RVI(61, W, 176,   0,       0,  18,     0, 0, 37, CT_COAL        ,  0, L), //  91
-	RVI(63, W, 200,   0,       0,  24,     0, 0, 37, CT_OIL         ,  0, L), //  92
-	RVI(64, W, 192,   0,       0,  20,     0, 0, 32, CT_LIVESTOCK   ,  0, L), //  93
-	RVI(65, W, 190,   0,       0,  21,     0, 0, 32, CT_GOODS       ,  0, L), //  94
-	RVI(66, W, 182,   0,       0,  19,     0, 0, 37, CT_GRAIN       ,  0, L), //  95
-	RVI(67, W, 181,   0,       0,  16,     0, 0, 37, CT_WOOD        ,  0, L), //  96
-	RVI(68, W, 179,   0,       0,  19,     0, 0, 37, CT_IRON_ORE    ,  0, L), //  97
-	RVI(69, W, 196,   0,       0,  18,     0, 0, 27, CT_STEEL       ,  0, L), //  98
-	RVI(70, W, 255,   0,       0,  30,     0, 0, 27, CT_VALUABLES   ,  0, L), //  99
-	RVI(71, W, 191,   0,       0,  22,     0, 0, 32, CT_FOOD        ,  0, L), // 100
-	RVI(72, W, 196,   0,       0,  18,     0, 0, 27, CT_PAPER       ,  0, L), // 101
-	RVI(73, W, 179,   0,       0,  19,     0, 0, 37, CT_COPPER_ORE  ,  0, L), // 102
-	RVI(47, W, 199,   0,       0,  25,     0, 0, 32, CT_WATER       ,  0, L), // 103
-	RVI(48, W, 182,   0,       0,  18,     0, 0, 32, CT_FRUIT       ,  0, L), // 104
-	RVI(49, W, 185,   0,       0,  19,     0, 0, 28, CT_RUBBER      ,  0, L), // 105
-	RVI(50, W, 176,   0,       0,  19,     0, 0, 37, CT_SUGAR       ,  0, L), // 106
-	RVI(51, W, 178,   0,       0,  20,     0, 0, 37, CT_COTTON_CANDY,  0, L), // 107
-	RVI(52, W, 192,   0,       0,  20,     0, 0, 37, CT_TOFFEE      ,  0, L), // 108
-	RVI(53, W, 190,   0,       0,  21,     0, 0, 27, CT_BUBBLES     ,  0, L), // 109
-	RVI(54, W, 182,   0,       0,  24,     0, 0, 32, CT_COLA        ,  0, L), // 110
-	RVI(55, W, 181,   0,       0,  21,     0, 0, 32, CT_CANDY       ,  0, L), // 111
-	RVI(56, W, 183,   0,       0,  21,     0, 0, 27, CT_TOYS        ,  0, L), // 112
-	RVI(57, W, 196,   0,       0,  18,     0, 0, 29, CT_BATTERIES   ,  0, L), // 113
-	RVI(58, W, 193,   0,       0,  18,     0, 0, 32, CT_FIZZY_DRINKS,  0, L), // 114
-	RVI(59, W, 191,   0,       0,  18,     0, 0, 37, CT_PLASTIC     ,  0, L), // 115
+	//   image_index  max_speed (kph)      running_cost_base           ai_rank
+	//   |  flags     |        power (hp)  |  running_cost_class       |  railtype
+	//   |  |    base_cost     |    weight |  |   capacity             |  |
+	//   |  |    |    |        |    |      |  |   |  cargo_type        |  |  engclass
+	//   |  |    |    |        |    |      |  |   |  |                 |  |  |
+	RVI( 2, G,   7,  64,     300,  47,    50, S,  0, 0              ,  1, R, S), //   0
+	RVI(19, G,   8,  80,     600,  65,    65, D,  0, 0              ,  4, R, D), //   1
+	RVI( 2, G,  10,  72,     400,  85,    90, S,  0, 0              ,  7, R, S), //   2
+	RVI( 0, G,  15,  96,     900, 130,   130, S,  0, 0              , 19, R, S), //   3
+	RVI( 1, G,  19, 112,    1000, 140,   145, S,  0, 0              , 20, R, S), //   4
+	RVI(12, G,  16, 120,    1400,  95,   125, D,  0, 0              , 30, R, D), //   5
+	RVI(14, G,  20, 152,    2000, 120,   135, D,  0, 0              , 31, R, D), //   6
+	RVI( 3, G,  14,  88,    1100, 145,   130, S,  0, 0              , 19, R, S), //   7
+	RVI( 0, G,  13, 112,    1000, 131,   120, S,  0, 0              , 20, R, S), //   8
+	RVI( 1, G,  19, 128,    1200, 162,   140, S,  0, 0              , 21, R, S), //   9
+	RVI( 0, G,  22, 144,    1600, 170,   130, S,  0, 0              , 22, R, S), //  10
+	RVI( 8, M,  11, 112,   600/2,32/2,  85/2, D, 38, CT_PASSENGERS  , 10, R, D), //  11
+	RVI(10, M,  14, 120,   700/2,38/2,  70/2, D, 40, CT_PASSENGERS  , 11, R, D), //  12
+	RVI( 4, G,  15, 128,    1250,  72,    95, D,  0, 0              , 30, R, D), //  13
+	RVI( 5, G,  17, 144,    1750, 101,   120, D,  0, 0              , 31, R, D), //  14
+	RVI( 4, G,  18, 160,    2580, 112,   140, D,  0, 0              , 32, R, D), //  15
+	RVI(14, G,  23,  96,    4000, 150,   135, D,  0, 0              , 33, R, D), //  16
+	RVI(12, G,  16, 112,    2400, 120,   105, D,  0, 0              , 34, R, D), //  17
+	RVI(13, G,  30, 112,    6600, 207,   155, D,  0, 0              , 35, R, D), //  18
+	RVI(15, G,  18, 104,    1500, 110,   105, D,  0, 0              , 29, R, D), //  19
+	RVI(16, M,  35, 160,  3500/2,95/2, 205/2, D,  0, 0              , 45, R, D), //  20
+	RVI(18, G,  21, 104,    2200, 120,   145, D,  0, 0              , 32, R, D), //  21
+	RVI( 6, M,  20, 200,  4500/2,70/2, 190/2, D,  4, CT_MAIL        , 50, R, D), //  22
+	RVI(20, G,  26, 160,    3600,  84,   180, E,  0, 0              , 40, C, E), //  23
+	RVI(20, G,  30, 176,    5000,  82,   205, E,  0, 0              , 41, C, E), //  24
+	RVI(21, M,  40, 240,  7000/2,90/2, 240/2, E,  0, 0              , 51, C, E), //  25
+	RVI(23, M,  43, 264,  8000/2,95/2, 250/2, E,  0, 0              , 52, C, E), //  26
+	RVI(33, W, 247,   0,       0,  25,     0, 0, 40, CT_PASSENGERS  ,  0, R, A), //  27
+	RVI(35, W, 228,   0,       0,  21,     0, 0, 30, CT_MAIL        ,  0, R, A), //  28
+	RVI(34, W, 176,   0,       0,  18,     0, 0, 30, CT_COAL        ,  0, R, A), //  29
+	RVI(36, W, 200,   0,       0,  24,     0, 0, 30, CT_OIL         ,  0, R, A), //  30
+	RVI(37, W, 192,   0,       0,  20,     0, 0, 25, CT_LIVESTOCK   ,  0, R, A), //  31
+	RVI(38, W, 190,   0,       0,  21,     0, 0, 25, CT_GOODS       ,  0, R, A), //  32
+	RVI(39, W, 182,   0,       0,  19,     0, 0, 30, CT_GRAIN       ,  0, R, A), //  33
+	RVI(40, W, 181,   0,       0,  16,     0, 0, 30, CT_WOOD        ,  0, R, A), //  34
+	RVI(41, W, 179,   0,       0,  19,     0, 0, 30, CT_IRON_ORE    ,  0, R, A), //  35
+	RVI(42, W, 196,   0,       0,  18,     0, 0, 20, CT_STEEL       ,  0, R, A), //  36
+	RVI(43, W, 255,   0,       0,  30,     0, 0, 20, CT_VALUABLES   ,  0, R, A), //  37
+	RVI(44, W, 191,   0,       0,  22,     0, 0, 25, CT_FOOD        ,  0, R, A), //  38
+	RVI(45, W, 196,   0,       0,  18,     0, 0, 20, CT_PAPER       ,  0, R, A), //  39
+	RVI(46, W, 179,   0,       0,  19,     0, 0, 30, CT_COPPER_ORE  ,  0, R, A), //  40
+	RVI(47, W, 199,   0,       0,  25,     0, 0, 25, CT_WATER       ,  0, R, A), //  41
+	RVI(48, W, 182,   0,       0,  18,     0, 0, 25, CT_FRUIT       ,  0, R, A), //  42
+	RVI(49, W, 185,   0,       0,  19,     0, 0, 21, CT_RUBBER      ,  0, R, A), //  43
+	RVI(50, W, 176,   0,       0,  19,     0, 0, 30, CT_SUGAR       ,  0, R, A), //  44
+	RVI(51, W, 178,   0,       0,  20,     0, 0, 30, CT_COTTON_CANDY,  0, R, A), //  45
+	RVI(52, W, 192,   0,       0,  20,     0, 0, 30, CT_TOFFEE      ,  0, R, A), //  46
+	RVI(53, W, 190,   0,       0,  21,     0, 0, 20, CT_BUBBLES     ,  0, R, A), //  47
+	RVI(54, W, 182,   0,       0,  24,     0, 0, 25, CT_COLA        ,  0, R, A), //  48
+	RVI(55, W, 181,   0,       0,  21,     0, 0, 25, CT_CANDY       ,  0, R, A), //  49
+	RVI(56, W, 183,   0,       0,  21,     0, 0, 20, CT_TOYS        ,  0, R, A), //  50
+	RVI(57, W, 196,   0,       0,  18,     0, 0, 22, CT_BATTERIES   ,  0, R, A), //  51
+	RVI(58, W, 193,   0,       0,  18,     0, 0, 25, CT_FIZZY_DRINKS,  0, R, A), //  52
+	RVI(59, W, 191,   0,       0,  18,     0, 0, 30, CT_PLASTIC     ,  0, R, A), //  53
+	RVI(25, G,  52, 304,    9000,  95,   230, E,  0, 0              , 60, O, N), //  54
+	RVI(26, M,  60, 336, 10000/2,85/2, 240/2, E, 25, CT_PASSENGERS  , 62, O, N), //  55
+	RVI(26, G,  53, 320,    5000,  95,   230, E,  0, 0              , 63, O, N), //  56
+	RVI(60, W, 247,   0,       0,  25,     0, 0, 45, CT_PASSENGERS  ,  0, O, A), //  57
+	RVI(62, W, 228,   0,       0,  21,     0, 0, 35, CT_MAIL        ,  0, O, A), //  58
+	RVI(61, W, 176,   0,       0,  18,     0, 0, 35, CT_COAL        ,  0, O, A), //  59
+	RVI(63, W, 200,   0,       0,  24,     0, 0, 35, CT_OIL         ,  0, O, A), //  60
+	RVI(64, W, 192,   0,       0,  20,     0, 0, 30, CT_LIVESTOCK   ,  0, O, A), //  61
+	RVI(65, W, 190,   0,       0,  21,     0, 0, 30, CT_GOODS       ,  0, O, A), //  62
+	RVI(66, W, 182,   0,       0,  19,     0, 0, 35, CT_GRAIN       ,  0, O, A), //  63
+	RVI(67, W, 181,   0,       0,  16,     0, 0, 35, CT_WOOD        ,  0, O, A), //  64
+	RVI(68, W, 179,   0,       0,  19,     0, 0, 35, CT_IRON_ORE    ,  0, O, A), //  65
+	RVI(69, W, 196,   0,       0,  18,     0, 0, 25, CT_STEEL       ,  0, O, A), //  66
+	RVI(70, W, 255,   0,       0,  30,     0, 0, 25, CT_VALUABLES   ,  0, O, A), //  67
+	RVI(71, W, 191,   0,       0,  22,     0, 0, 30, CT_FOOD        ,  0, O, A), //  68
+	RVI(72, W, 196,   0,       0,  18,     0, 0, 25, CT_PAPER       ,  0, O, A), //  69
+	RVI(73, W, 179,   0,       0,  19,     0, 0, 35, CT_COPPER_ORE  ,  0, O, A), //  70
+	RVI(47, W, 199,   0,       0,  25,     0, 0, 30, CT_WATER       ,  0, O, A), //  71
+	RVI(48, W, 182,   0,       0,  18,     0, 0, 30, CT_FRUIT       ,  0, O, A), //  72
+	RVI(49, W, 185,   0,       0,  19,     0, 0, 26, CT_RUBBER      ,  0, O, A), //  73
+	RVI(50, W, 176,   0,       0,  19,     0, 0, 35, CT_SUGAR       ,  0, O, A), //  74
+	RVI(51, W, 178,   0,       0,  20,     0, 0, 35, CT_COTTON_CANDY,  0, O, A), //  75
+	RVI(52, W, 192,   0,       0,  20,     0, 0, 35, CT_TOFFEE      ,  0, O, A), //  76
+	RVI(53, W, 190,   0,       0,  21,     0, 0, 25, CT_BUBBLES     ,  0, O, A), //  77
+	RVI(54, W, 182,   0,       0,  24,     0, 0, 30, CT_COLA        ,  0, O, A), //  78
+	RVI(55, W, 181,   0,       0,  21,     0, 0, 30, CT_CANDY       ,  0, O, A), //  79
+	RVI(56, W, 183,   0,       0,  21,     0, 0, 25, CT_TOYS        ,  0, O, A), //  80
+	RVI(57, W, 196,   0,       0,  18,     0, 0, 27, CT_BATTERIES   ,  0, O, A), //  81
+	RVI(58, W, 193,   0,       0,  18,     0, 0, 30, CT_FIZZY_DRINKS,  0, O, A), //  82
+	RVI(59, W, 191,   0,       0,  18,     0, 0, 35, CT_PLASTIC     ,  0, O, A), //  83
+	RVI(28, G,  70, 400,   10000, 105,   250, E,  0, 0              , 70, L, V), //  84
+	RVI(29, G,  74, 448,   12000, 120,   253, E,  0, 0              , 71, L, V), //  85
+	RVI(30, G,  82, 480,   15000, 130,   254, E,  0, 0              , 72, L, V), //  86
+	RVI(31, M,  95, 640, 20000/2,150/2,255/2, E,  0, 0              , 73, L, V), //  87
+	RVI(28, G,  70, 480,   10000, 120,   250, E,  0, 0              , 74, L, V), //  88
+	RVI(60, W, 247,   0,       0,  25,     0, 0, 47, CT_PASSENGERS  ,  0, L, A), //  89
+	RVI(62, W, 228,   0,       0,  21,     0, 0, 37, CT_MAIL        ,  0, L, A), //  90
+	RVI(61, W, 176,   0,       0,  18,     0, 0, 37, CT_COAL        ,  0, L, A), //  91
+	RVI(63, W, 200,   0,       0,  24,     0, 0, 37, CT_OIL         ,  0, L, A), //  92
+	RVI(64, W, 192,   0,       0,  20,     0, 0, 32, CT_LIVESTOCK   ,  0, L, A), //  93
+	RVI(65, W, 190,   0,       0,  21,     0, 0, 32, CT_GOODS       ,  0, L, A), //  94
+	RVI(66, W, 182,   0,       0,  19,     0, 0, 37, CT_GRAIN       ,  0, L, A), //  95
+	RVI(67, W, 181,   0,       0,  16,     0, 0, 37, CT_WOOD        ,  0, L, A), //  96
+	RVI(68, W, 179,   0,       0,  19,     0, 0, 37, CT_IRON_ORE    ,  0, L, A), //  97
+	RVI(69, W, 196,   0,       0,  18,     0, 0, 27, CT_STEEL       ,  0, L, A), //  98
+	RVI(70, W, 255,   0,       0,  30,     0, 0, 27, CT_VALUABLES   ,  0, L, A), //  99
+	RVI(71, W, 191,   0,       0,  22,     0, 0, 32, CT_FOOD        ,  0, L, A), // 100
+	RVI(72, W, 196,   0,       0,  18,     0, 0, 27, CT_PAPER       ,  0, L, A), // 101
+	RVI(73, W, 179,   0,       0,  19,     0, 0, 37, CT_COPPER_ORE  ,  0, L, A), // 102
+	RVI(47, W, 199,   0,       0,  25,     0, 0, 32, CT_WATER       ,  0, L, A), // 103
+	RVI(48, W, 182,   0,       0,  18,     0, 0, 32, CT_FRUIT       ,  0, L, A), // 104
+	RVI(49, W, 185,   0,       0,  19,     0, 0, 28, CT_RUBBER      ,  0, L, A), // 105
+	RVI(50, W, 176,   0,       0,  19,     0, 0, 37, CT_SUGAR       ,  0, L, A), // 106
+	RVI(51, W, 178,   0,       0,  20,     0, 0, 37, CT_COTTON_CANDY,  0, L, A), // 107
+	RVI(52, W, 192,   0,       0,  20,     0, 0, 37, CT_TOFFEE      ,  0, L, A), // 108
+	RVI(53, W, 190,   0,       0,  21,     0, 0, 27, CT_BUBBLES     ,  0, L, A), // 109
+	RVI(54, W, 182,   0,       0,  24,     0, 0, 32, CT_COLA        ,  0, L, A), // 110
+	RVI(55, W, 181,   0,       0,  21,     0, 0, 32, CT_CANDY       ,  0, L, A), // 111
+	RVI(56, W, 183,   0,       0,  21,     0, 0, 27, CT_TOYS        ,  0, L, A), // 112
+	RVI(57, W, 196,   0,       0,  18,     0, 0, 29, CT_BATTERIES   ,  0, L, A), // 113
+	RVI(58, W, 193,   0,       0,  18,     0, 0, 32, CT_FIZZY_DRINKS,  0, L, A), // 114
+	RVI(59, W, 191,   0,       0,  18,     0, 0, 37, CT_PLASTIC     ,  0, L, A), // 115
 };
 #undef L
 #undef O
 #undef C
 #undef R
+#undef V
+#undef N
 #undef E
 #undef D
 #undef S
--- a/src/table/files.h	Fri May 04 23:17:26 2007 +0000
+++ b/src/table/files.h	Wed May 09 20:22:49 2007 +0000
@@ -59,7 +59,7 @@
 	{ "autorail.grf",  { 0xed, 0x44, 0x7f, 0xbb, 0x19, 0x44, 0x48, 0x4c, 0x07, 0x8a, 0xb1, 0xc1, 0x5c, 0x12, 0x3a, 0x60 } },
 	{ "canalsw.grf",   { 0x13, 0x9c, 0x98, 0xcf, 0xb8, 0x7c, 0xd7, 0x1f, 0xca, 0x34, 0xa5, 0x6b, 0x65, 0x31, 0xec, 0x0f } },
 	{ "elrailsw.grf",  { 0x4f, 0xf9, 0xac, 0x79, 0x50, 0x28, 0x9b, 0xe2, 0x15, 0x30, 0xa8, 0x1e, 0xd5, 0xfd, 0xe1, 0xda } },
-	{ "openttd.grf",   { 0x10, 0xc1, 0x68, 0x56, 0x9e, 0x1e, 0x0e, 0x85, 0x9d, 0xf8, 0x53, 0x27, 0x48, 0x7e, 0x17, 0x58 } },
+	{ "openttd.grf",   { 0x85, 0x4f, 0xf6, 0xb5, 0xd2, 0xf7, 0xbc, 0x1e, 0xb9, 0xdc, 0x44, 0xef, 0x35, 0x5f, 0x64, 0x9b } },
 	{ "trkfoundw.grf", { 0x12, 0x33, 0x3f, 0xa3, 0xd1, 0x86, 0x8b, 0x04, 0x53, 0x18, 0x9c, 0xee, 0xf9, 0x2d, 0xf5, 0x95 } },
 	{ "roadstops.grf", { 0x8c, 0xd9, 0x45, 0x21, 0x28, 0x82, 0x96, 0x45, 0x33, 0x22, 0x7a, 0xb9, 0x0d, 0xf3, 0x67, 0x4a } },
 };
--- a/src/table/sprites.h	Fri May 04 23:17:26 2007 +0000
+++ b/src/table/sprites.h	Wed May 09 20:22:49 2007 +0000
@@ -47,7 +47,7 @@
 	SPR_ASCII_SPACE_BIG   = 450,
 
 	/* Extra graphic spritenumbers */
-	OPENTTD_SPRITES_COUNT = 117, // number of gfx-sprites in openttd.grf
+	OPENTTD_SPRITES_COUNT = 116, // number of gfx-sprites in openttd.grf
 	SPR_SIGNALS_BASE  = 4896,
 	SPR_CANALS_BASE   = SPR_SIGNALS_BASE + 486,
 	SPR_SLOPES_BASE   = SPR_CANALS_BASE + 70,
@@ -62,44 +62,44 @@
 	SPR_PIN_DOWN      = SPR_OPENTTD_BASE + 56,
 	SPR_BOX_EMPTY     = SPR_OPENTTD_BASE + 59,
 	SPR_BOX_CHECKED   = SPR_OPENTTD_BASE + 60,
-	SPR_WINDOW_RESIZE = SPR_OPENTTD_BASE + 87,   // resize icon
-	SPR_HOUSE_ICON    = SPR_OPENTTD_BASE + 94,
+	SPR_WINDOW_RESIZE = SPR_OPENTTD_BASE + 86,   // resize icon
+	SPR_HOUSE_ICON    = SPR_OPENTTD_BASE + 93,
 	// arrow icons pointing in all 4 directions
-	SPR_ARROW_DOWN    = SPR_OPENTTD_BASE + 88,
-	SPR_ARROW_UP      = SPR_OPENTTD_BASE + 89,
-	SPR_ARROW_LEFT    = SPR_OPENTTD_BASE + 90,
-	SPR_ARROW_RIGHT   = SPR_OPENTTD_BASE + 91,
+	SPR_ARROW_DOWN    = SPR_OPENTTD_BASE + 87,
+	SPR_ARROW_UP      = SPR_OPENTTD_BASE + 88,
+	SPR_ARROW_LEFT    = SPR_OPENTTD_BASE + 89,
+	SPR_ARROW_RIGHT   = SPR_OPENTTD_BASE + 90,
 
 	SPR_LARGE_SMALL_WINDOW = 682,
 
 	/* Clone vehicles stuff */
-	SPR_CLONE_TRAIN    = SPR_OPENTTD_BASE + 92,
-	SPR_CLONE_ROADVEH  = SPR_OPENTTD_BASE + 109,
-	SPR_CLONE_SHIP     = SPR_OPENTTD_BASE + 111,
-	SPR_CLONE_AIRCRAFT = SPR_OPENTTD_BASE + 113,
+	SPR_CLONE_TRAIN    = SPR_OPENTTD_BASE + 91,
+	SPR_CLONE_ROADVEH  = SPR_OPENTTD_BASE + 108,
+	SPR_CLONE_SHIP     = SPR_OPENTTD_BASE + 110,
+	SPR_CLONE_AIRCRAFT = SPR_OPENTTD_BASE + 112,
 
-	SPR_SELL_TRAIN        = SPR_OPENTTD_BASE + 96,
-	SPR_SELL_ROADVEH      = SPR_OPENTTD_BASE + 97,
-	SPR_SELL_SHIP         = SPR_OPENTTD_BASE + 98,
-	SPR_SELL_AIRCRAFT     = SPR_OPENTTD_BASE + 99,
-	SPR_SELL_ALL_TRAIN    = SPR_OPENTTD_BASE + 100,
-	SPR_SELL_ALL_ROADVEH  = SPR_OPENTTD_BASE + 101,
-	SPR_SELL_ALL_SHIP     = SPR_OPENTTD_BASE + 102,
-	SPR_SELL_ALL_AIRCRAFT = SPR_OPENTTD_BASE + 103,
-	SPR_REPLACE_TRAIN     = SPR_OPENTTD_BASE + 104,
-	SPR_REPLACE_ROADVEH   = SPR_OPENTTD_BASE + 105,
-	SPR_REPLACE_SHIP      = SPR_OPENTTD_BASE + 106,
-	SPR_REPLACE_AIRCRAFT  = SPR_OPENTTD_BASE + 107,
-	SPR_SELL_CHAIN_TRAIN  = SPR_OPENTTD_BASE + 108,
+	SPR_SELL_TRAIN        = SPR_OPENTTD_BASE + 95,
+	SPR_SELL_ROADVEH      = SPR_OPENTTD_BASE + 96,
+	SPR_SELL_SHIP         = SPR_OPENTTD_BASE + 97,
+	SPR_SELL_AIRCRAFT     = SPR_OPENTTD_BASE + 98,
+	SPR_SELL_ALL_TRAIN    = SPR_OPENTTD_BASE + 99,
+	SPR_SELL_ALL_ROADVEH  = SPR_OPENTTD_BASE + 100,
+	SPR_SELL_ALL_SHIP     = SPR_OPENTTD_BASE + 101,
+	SPR_SELL_ALL_AIRCRAFT = SPR_OPENTTD_BASE + 102,
+	SPR_REPLACE_TRAIN     = SPR_OPENTTD_BASE + 103,
+	SPR_REPLACE_ROADVEH   = SPR_OPENTTD_BASE + 104,
+	SPR_REPLACE_SHIP      = SPR_OPENTTD_BASE + 105,
+	SPR_REPLACE_AIRCRAFT  = SPR_OPENTTD_BASE + 106,
+	SPR_SELL_CHAIN_TRAIN  = SPR_OPENTTD_BASE + 107,
 
-	SPR_SHARED_ORDERS_ICON = SPR_OPENTTD_BASE + 115,
+	SPR_SHARED_ORDERS_ICON = SPR_OPENTTD_BASE + 114,
 
-	SPR_WARNING_SIGN      = SPR_OPENTTD_BASE + 116, // warning sign (shown if there are any newgrf errors)
+	SPR_WARNING_SIGN      = SPR_OPENTTD_BASE + 115, // warning sign (shown if there are any newgrf errors)
 
 	/* Network GUI sprites */
 	SPR_SQUARE = SPR_OPENTTD_BASE + 20,     // colored square (used for newgrf compatibility)
 	SPR_LOCK = SPR_OPENTTD_BASE + 19,       // lock icon (for password protected servers)
-	SPR_FLAGS_BASE = SPR_OPENTTD_BASE + 83, // start of the flags block (in same order as enum NetworkLanguage)
+	SPR_FLAGS_BASE = SPR_OPENTTD_BASE + 82, // start of the flags block (in same order as enum NetworkLanguage)
 
 	SPR_AIRPORTX_BASE = SPR_OPENTTD_BASE + OPENTTD_SPRITES_COUNT, // The sprites used for other airport angles
 	SPR_NEWAIRPORT_TARMAC = SPR_AIRPORTX_BASE,
@@ -940,7 +940,6 @@
 	SPR_IMG_LEVEL_LAND      = SPR_OPENTTD_BASE + 61,
 	SPR_IMG_BUILD_CANAL     = SPR_OPENTTD_BASE + 58,
 	SPR_IMG_BUILD_LOCK      = SPR_CANALS_BASE + 69,
-	SPR_IMG_PLACE_SIGN      = SPR_OPENTTD_BASE + 63,
 	SPR_IMG_PAUSE           = 726,
 	SPR_IMG_FASTFORWARD     = SPR_OPENTTD_BASE + 54,
 	SPR_IMG_SETTINGS        = 751,
@@ -1279,10 +1278,10 @@
 	SPR_CURSOR_TRUCK_STATION  = 2726,
 	SPR_CURSOR_ROAD_TUNNEL    = 2433,
 
-	SPR_CURSOR_CLONE_TRAIN    = SPR_OPENTTD_BASE +  93,
-	SPR_CURSOR_CLONE_ROADVEH  = SPR_OPENTTD_BASE + 110,
-	SPR_CURSOR_CLONE_SHIP     = SPR_OPENTTD_BASE + 112,
-	SPR_CURSOR_CLONE_AIRPLANE = SPR_OPENTTD_BASE + 114,
+	SPR_CURSOR_CLONE_TRAIN    = SPR_OPENTTD_BASE +  92,
+	SPR_CURSOR_CLONE_ROADVEH  = SPR_OPENTTD_BASE + 109,
+	SPR_CURSOR_CLONE_SHIP     = SPR_OPENTTD_BASE + 111,
+	SPR_CURSOR_CLONE_AIRPLANE = SPR_OPENTTD_BASE + 113,
 };
 
 /// Animation macro in table/animcursors.h (_animcursors[])
--- a/src/table/water_land.h	Fri May 04 23:17:26 2007 +0000
+++ b/src/table/water_land.h	Wed May 09 20:22:49 2007 +0000
@@ -47,86 +47,86 @@
 };
 
 static const WaterDrawTileStruct _shiplift_display_seq_0[] = {
-	BEGIN(SPR_CANALS_BASE + 6),
-	{ 0,   0, 0, 0x10, 1, 0x14, SPR_CANALS_BASE + 9 + 0 + 1 },
-	{ 0, 0xF, 0, 0x10, 1, 0x14, SPR_CANALS_BASE + 9 + 4 + 1 },
+	BEGIN(1),
+	{ 0,   0, 0, 0x10, 1, 0x14, 0 + 1 },
+	{ 0, 0xF, 0, 0x10, 1, 0x14, 4 + 1 },
 	END(0)
 };
 
 static const WaterDrawTileStruct _shiplift_display_seq_1[] = {
-	BEGIN(SPR_CANALS_BASE + 5),
-	{   0, 0, 0, 1, 0x10, 0x14, SPR_CANALS_BASE + 9 + 0 },
-	{ 0xF, 0, 0, 1, 0x10, 0x14, SPR_CANALS_BASE + 9 + 4 },
+	BEGIN(0),
+	{   0, 0, 0, 1, 0x10, 0x14, 0 },
+	{ 0xF, 0, 0, 1, 0x10, 0x14, 4 },
 	END(0)
 };
 
 static const WaterDrawTileStruct _shiplift_display_seq_2[] = {
-	BEGIN(SPR_CANALS_BASE + 7),
-	{ 0,   0, 0, 0x10, 1, 0x14, SPR_CANALS_BASE + 9 + 0 + 2 },
-	{ 0, 0xF, 0, 0x10, 1, 0x14, SPR_CANALS_BASE + 9 + 4 + 2 },
+	BEGIN(2),
+	{ 0,   0, 0, 0x10, 1, 0x14, 0 + 2 },
+	{ 0, 0xF, 0, 0x10, 1, 0x14, 4 + 2 },
 	END(0)
 };
 
 static const WaterDrawTileStruct _shiplift_display_seq_3[] = {
-	BEGIN(SPR_CANALS_BASE + 8),
-	{   0, 0, 0, 1, 0x10, 0x14, SPR_CANALS_BASE + 9 + 0 + 3 },
-	{ 0xF, 0, 0, 1, 0x10, 0x14, SPR_CANALS_BASE + 9 + 4 + 3 },
+	BEGIN(3),
+	{   0, 0, 0, 1, 0x10, 0x14, 0 + 3 },
+	{ 0xF, 0, 0, 1, 0x10, 0x14, 4 + 3 },
 	END(0)
 };
 
 static const WaterDrawTileStruct _shiplift_display_seq_0b[] = {
 	BEGIN(0xFDD),
-	{ 0,   0, 0, 0x10, 1, 0x14, SPR_CANALS_BASE + 9 + 8 + 1 },
-	{ 0, 0xF, 0, 0x10, 1, 0x14, SPR_CANALS_BASE + 9 + 12 + 1 },
+	{ 0,   0, 0, 0x10, 1, 0x14, 8 + 1 },
+	{ 0, 0xF, 0, 0x10, 1, 0x14, 12 + 1 },
 	END(0)
 };
 
 static const WaterDrawTileStruct _shiplift_display_seq_1b[] = {
 	BEGIN(0xFDD),
-	{   0, 0, 0, 0x1, 0x10, 0x14, SPR_CANALS_BASE + 9 + 8 },
-	{ 0xF, 0, 0, 0x1, 0x10, 0x14, SPR_CANALS_BASE + 9 + 12 },
+	{   0, 0, 0, 0x1, 0x10, 0x14, 8 },
+	{ 0xF, 0, 0, 0x1, 0x10, 0x14, 12 },
 	END(0)
 };
 
 static const WaterDrawTileStruct _shiplift_display_seq_2b[] = {
 	BEGIN(0xFDD),
-	{ 0,   0, 0, 0x10, 1, 0x14, SPR_CANALS_BASE + 9 + 8 + 2 },
-	{ 0, 0xF, 0, 0x10, 1, 0x14, SPR_CANALS_BASE + 9 + 12 + 2 },
+	{ 0,   0, 0, 0x10, 1, 0x14, 8 + 2 },
+	{ 0, 0xF, 0, 0x10, 1, 0x14, 12 + 2 },
 	END(0)
 };
 
 static const WaterDrawTileStruct _shiplift_display_seq_3b[] = {
 	BEGIN(0xFDD),
-	{   0, 0, 0, 1, 0x10, 0x14, SPR_CANALS_BASE + 9 + 8 + 3 },
-	{ 0xF, 0, 0, 1, 0x10, 0x14, SPR_CANALS_BASE + 9 + 12 + 3 },
+	{   0, 0, 0, 1, 0x10, 0x14, 8 + 3 },
+	{ 0xF, 0, 0, 1, 0x10, 0x14, 12 + 3 },
 	END(0)
 };
 
 static const WaterDrawTileStruct _shiplift_display_seq_0t[] = {
 	BEGIN(0xFDD),
-	{ 0,   0, 0, 0x10, 1, 0x14, SPR_CANALS_BASE + 9 + 16 + 1 },
-	{ 0, 0xF, 0, 0x10, 1, 0x14, SPR_CANALS_BASE + 9 + 20 + 1 },
+	{ 0,   0, 0, 0x10, 1, 0x14, 16 + 1 },
+	{ 0, 0xF, 0, 0x10, 1, 0x14, 20 + 1 },
 	END(8)
 };
 
 static const WaterDrawTileStruct _shiplift_display_seq_1t[] = {
 	BEGIN(0xFDD),
-	{   0, 0, 0, 0x1, 0x10, 0x14, SPR_CANALS_BASE + 9 + 16 },
-	{ 0xF, 0, 0, 0x1, 0x10, 0x14, SPR_CANALS_BASE + 9 + 20 },
+	{   0, 0, 0, 0x1, 0x10, 0x14, 16 },
+	{ 0xF, 0, 0, 0x1, 0x10, 0x14, 20 },
 	END(8)
 };
 
 static const WaterDrawTileStruct _shiplift_display_seq_2t[] = {
 	BEGIN(0xFDD),
-	{ 0,   0, 0, 0x10, 1, 0x14, SPR_CANALS_BASE + 9 + 16 + 2 },
-	{ 0, 0xF, 0, 0x10, 1, 0x14, SPR_CANALS_BASE + 9 + 20 + 2 },
+	{ 0,   0, 0, 0x10, 1, 0x14, 16 + 2 },
+	{ 0, 0xF, 0, 0x10, 1, 0x14, 20 + 2 },
 	END(8)
 };
 
 static const WaterDrawTileStruct _shiplift_display_seq_3t[] = {
 	BEGIN(0xFDD),
-	{   0, 0, 0, 1, 0x10, 0x14, SPR_CANALS_BASE + 9 + 16 + 3 },
-	{ 0xF, 0, 0, 1, 0x10, 0x14, SPR_CANALS_BASE + 9 + 20 + 3 },
+	{   0, 0, 0, 1, 0x10, 0x14, 16 + 3 },
+	{ 0xF, 0, 0, 1, 0x10, 0x14, 20 + 3 },
 	END(8)
 };
 
--- a/src/terraform_gui.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/terraform_gui.cpp	Wed May 09 20:22:49 2007 +0000
@@ -267,7 +267,7 @@
 {   WWT_IMGBTN,   RESIZE_NONE,     7,  70,  91,  14,  35, SPR_IMG_DYNAMITE,        STR_018D_DEMOLISH_BUILDINGS_ETC},
 {   WWT_IMGBTN,   RESIZE_NONE,     7,  92, 113,  14,  35, SPR_IMG_BUY_LAND,        STR_0329_PURCHASE_LAND_FOR_FUTURE},
 {   WWT_IMGBTN,   RESIZE_NONE,     7, 114, 135,  14,  35, SPR_IMG_PLANTTREES,      STR_0185_PLANT_TREES_PLACE_SIGNS},
-{   WWT_IMGBTN,   RESIZE_NONE,     7, 136, 157,  14,  35, SPR_IMG_PLACE_SIGN,      STR_0289_PLACE_SIGN},
+{   WWT_IMGBTN,   RESIZE_NONE,     7, 136, 157,  14,  35, SPR_IMG_SIGN,            STR_0289_PLACE_SIGN},
 
 {   WIDGETS_END},
 };
--- a/src/town_cmd.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/town_cmd.cpp	Wed May 09 20:22:49 2007 +0000
@@ -54,6 +54,11 @@
 /* Initialize the town-pool */
 DEFINE_OLD_POOL(Town, Town, TownPoolNewBlock, NULL)
 
+/**
+ * Removes a specific town as well as all industries
+ * under its "juridiction"
+ * @param t Town to remove
+ */
 void DestroyTown(Town *t)
 {
 	Industry *i;
@@ -120,6 +125,11 @@
 	return variant;
 }
 
+/**
+ * House Tile drawing handler.
+ * Part of the tile loop process
+ * @param ti TileInfo of the tile to draw
+ */
 static void DrawTile_Town(TileInfo *ti)
 {
 	const DrawBuildingsTileStruct *dcts;
@@ -187,6 +197,12 @@
 	return SLOPE_FLAT;
 }
 
+/**
+ * Animate a tile for a town
+ * Only certain houses can be animated
+ * The newhouses animation superseeds regular ones
+ * @param tile TileIndex of the house to animate
+ */
 static void AnimateTile_Town(TileIndex tile)
 {
 	int pos, dest;
@@ -233,6 +249,12 @@
 
 static void UpdateTownRadius(Town *t);
 
+/**
+ * Determines if a town is close to a tile
+ * @param tile TileIndex of the tile to query
+ * @param dist maximum distance to be accepted
+ * @returns true if the tile correspond to the distance criteria
+ */
 static bool IsCloseToTown(TileIndex tile, uint dist)
 {
 	const Town* t;
@@ -243,6 +265,10 @@
 	return false;
 }
 
+/**
+ * Marks the town sign as needing a repaint
+ * @param t Town requesting repaint
+ */
 static void MarkTownSignDirty(Town *t)
 {
 	MarkAllViewportsDirty(
@@ -253,6 +279,11 @@
 	);
 }
 
+/**
+ * Resize the sign(label) of the town after changes in
+ * population (creation or growth or else)
+ * @param t Town to update
+ */
 void UpdateTownVirtCoord(Town *t)
 {
 	Point pt;
@@ -266,6 +297,11 @@
 	MarkTownSignDirty(t);
 }
 
+/**
+ * Change the towns population
+ * @param t Town which polulation has changed
+ * @param mod polulation change (can be positive or negative)
+ */
 static void ChangePopulation(Town *t, int mod)
 {
 	t->population += mod;
@@ -275,6 +311,11 @@
 	if (_town_sort_order & 2) _town_sort_dirty = true;
 }
 
+/**
+ * Determines the world population
+ * Basically, count population of all towns, one by one
+ * @return uint32 the calculated population of the world
+ */
 uint32 GetWorldPopulation()
 {
 	uint32 pop;
@@ -285,15 +326,22 @@
 	return pop;
 }
 
+/**
+ * Helper function for house completion stages progression
+ * @param tile TileIndex of the house (or parts of it) to "grow"
+ */
 static void MakeSingleHouseBigger(TileIndex tile)
 {
 	assert(IsTileType(tile, MP_HOUSE));
 
+	/* means it is completed, get out. */
 	if (LiftHasDestination(tile)) return;
 
+	/* progress in construction stages */
 	IncHouseConstructionTick(tile);
 	if (GetHouseConstructionTick(tile) != 0) return;
 
+	/* Check and/or  */
 	if (HASBIT(GetHouseSpecs(GetHouseType(tile))->callback_mask, CBM_CONSTRUCTION_STATE_CHANGE)) {
 		uint16 callback_res = GetHouseCallback(CBID_CONSTRUCTION_STATE_CHANGE, 0, GetHouseType(tile), GetTownByTile(tile), tile);
 		if (callback_res != CALLBACK_FAILED) ChangeHouseAnimationFrame(tile, callback_res);
@@ -307,6 +355,9 @@
 	MarkTileDirtyByTile(tile);
 }
 
+/** Make the house advances in its construction stages until completion
+ * @param tile TileIndex of house
+ */
 static void MakeTownHouseBigger(TileIndex tile)
 {
 	uint flags = GetHouseSpecs(GetHouseType(tile))->building_flags;
@@ -316,6 +367,10 @@
 	if (flags & BUILDING_HAS_4_TILES) MakeSingleHouseBigger(TILE_ADDXY(tile, 1, 1));
 }
 
+/**
+ * Periodic tic handler for houses and town
+ * @param tile been asked to do its stuff
+ */
 static void TileLoop_Town(TileIndex tile)
 {
 	Town *t;
@@ -334,7 +389,11 @@
 	}
 
 	/* If the lift has a destination, it is already an animated tile. */
-	if ((hs->building_flags & BUILDING_IS_ANIMATED) && house_id < NEW_HOUSE_OFFSET && !LiftHasDestination(tile) && CHANCE16(1, 2)) AddAnimatedTile(tile);
+	if ((hs->building_flags & BUILDING_IS_ANIMATED) &&
+			house_id < NEW_HOUSE_OFFSET &&
+			!LiftHasDestination(tile) &&
+			CHANCE16(1, 2))
+		AddAnimatedTile(tile);
 
 	t = GetTownByTile(tile);
 
@@ -362,7 +421,10 @@
 
 	_current_player = OWNER_TOWN;
 
-	if (hs->building_flags & BUILDING_HAS_1_TILE && HASBIT(t->flags12, TOWN_IS_FUNDED) && CanDeleteHouse(tile) && --t->time_until_rebuild == 0) {
+	if (hs->building_flags & BUILDING_HAS_1_TILE &&
+			HASBIT(t->flags12, TOWN_IS_FUNDED) &&
+			CanDeleteHouse(tile) &&
+			--t->time_until_rebuild == 0) {
 		t->time_until_rebuild = GB(r, 16, 8) + 192;
 
 		ClearTownHouse(t, tile);
@@ -374,6 +436,10 @@
 	_current_player = OWNER_NONE;
 }
 
+/**
+ * Unused handler
+ * @param tile unused
+ */
 static void ClickTile_Town(TileIndex tile)
 {
 	/* not used */
@@ -489,6 +555,14 @@
 	{ 0,  1}
 };
 
+/**
+ * Distance multiplyer
+ * Defines the possible distances between 2 road tiles
+ */
+enum RoadBlockTitleDistance {
+	RB_TILE_DIST1 = 1, ///< 1 tile between
+	RB_TILE_DIST2,     ///< 2 tiles between
+};
 
 static bool GrowTown(Town *t);
 
@@ -541,6 +615,23 @@
 	return r;
 }
 
+/**
+ * Check if a neighboring tile has a road
+ *
+ * @param tile curent tile
+ * @param dir target direction
+ * @param dist_multi distance multiplyer
+ * @return true if one of the neighboring tiles at the
+ *  given distance is a road tile else
+ */
+static bool NeighborIsRoadTile(TileIndex tile, int dir, RoadBlockTitleDistance dist_multi)
+{
+	return (HASBIT(GetTownRoadMask(TILE_ADD(tile, dist_multi * ToTileIndexDiff(_roadblock_tileadd[dir + 1]))), dir ^ 2) ||
+			HASBIT(GetTownRoadMask(TILE_ADD(tile, dist_multi * ToTileIndexDiff(_roadblock_tileadd[dir + 3]))), dir ^ 2) ||
+			HASBIT(GetTownRoadMask(TILE_ADD(tile, dist_multi * (ToTileIndexDiff(_roadblock_tileadd[dir + 1]) + ToTileIndexDiff(_roadblock_tileadd[dir + 2])))), dir) ||
+			HASBIT(GetTownRoadMask(TILE_ADD(tile, dist_multi * (ToTileIndexDiff(_roadblock_tileadd[dir + 3]) + ToTileIndexDiff(_roadblock_tileadd[dir + 2])))), dir));
+}
+
 static bool IsRoadAllowedHere(TileIndex tile, int dir)
 {
 	Slope k;
@@ -564,16 +655,17 @@
 		slope = GetTileSlope(tile, NULL);
 		if (slope == SLOPE_FLAT) {
 no_slope:
-			/* Tile has no slope
-			 * Disallow the road if any neighboring tile has a road. */
-			if (HASBIT(GetTownRoadMask(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[dir + 1]))), dir ^ 2) ||
-					HASBIT(GetTownRoadMask(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[dir + 3]))), dir ^ 2) ||
-					HASBIT(GetTownRoadMask(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[dir + 1]) + ToTileIndexDiff(_roadblock_tileadd[dir + 2]))), dir) ||
-					HASBIT(GetTownRoadMask(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[dir + 3]) + ToTileIndexDiff(_roadblock_tileadd[dir + 2]))), dir))
-				return false;
-
-			/* Otherwise allow */
-			return true;
+			/* Tile has no slope */
+			switch (_patches.town_layout) {
+				default: NOT_REACHED();
+
+				case TL_ORIGINAL: /* Disallow the road if any neighboring tile has a road (distance: 1) */
+					return !NeighborIsRoadTile(tile, dir, RB_TILE_DIST1);
+
+				case TL_BETTER_ROADS: /* Disallow the road if any neighboring tile has a road (distance: 1 and 2). */
+					return !(NeighborIsRoadTile(tile, dir, RB_TILE_DIST1) ||
+							NeighborIsRoadTile(tile, dir, RB_TILE_DIST2));
+			}
 		}
 
 		/* If the tile is not a slope in the right direction, then
@@ -632,6 +724,127 @@
 	}
 }
 
+/**
+ * Generate the RoadBits of a grid tile
+ *
+ * @param t current town
+ * @param tile tile in reference to the town
+ * @return the RoadBit of the current tile regarding
+ *  the selected town layout
+ */
+static RoadBits GetTownRoadGridElement(Town* t, TileIndex tile)
+{
+	/* align the grid to the downtown */
+	TileIndexDiffC grid_pos = TileIndexToTileIndexDiffC(t->xy, tile); ///< Vector from downtown to the tile
+
+	/* lx, ly description:
+	 * @li lx and ly are true  if the tile is a crossing tile.
+	 * @li lx xor ly are true  if the tile is a straight road tile.
+	 * @li lx and ly are false if the tile is a house tile.
+	 */
+	bool lx, ly;
+
+	switch (_patches.town_layout) {
+		default: NOT_REACHED();
+
+		case TL_2X2_GRID:
+			lx = ((grid_pos.x % 3) == 0);
+			ly = ((grid_pos.y % 3) == 0);
+			break;
+
+		case TL_3X3_GRID:
+			lx = ((grid_pos.x % 4) == 0);
+			ly = ((grid_pos.y % 4) == 0);
+			break;
+	}
+
+	/* generate the basic grid structure */
+	if (!lx && !ly) {         ///< It is a house tile
+		return ROAD_NONE;
+	} else if (lx && !ly) {   ///< It is a Y-dir road tile
+		return ROAD_Y;
+	} else if (!lx && ly) {   ///< It is a X-dir road tile
+		return ROAD_X;
+	} else {                  ///< It is a crossing tile
+		/* Presets for junctions on slopes
+		 * not nice :( */
+		switch (GetTileSlope(tile, NULL)) {
+			case SLOPE_W:
+				return ROAD_NW | ROAD_SW;
+			case SLOPE_S:
+				return ROAD_SE | ROAD_SW;
+			case SLOPE_SW:
+				return ROAD_Y | ROAD_SW;
+			case SLOPE_E:
+				return ROAD_NE | ROAD_SE;
+			case SLOPE_SE:
+				return ROAD_X | ROAD_SE;
+			case SLOPE_N:
+				return ROAD_NW | ROAD_NE;
+			case SLOPE_NW:
+				return ROAD_X | ROAD_NW;
+			case SLOPE_NE:
+				return ROAD_Y | ROAD_NE;
+			case SLOPE_STEEP_W:
+			case SLOPE_STEEP_N:
+				return ROAD_X;
+			case SLOPE_STEEP_S:
+			case SLOPE_STEEP_E:
+				return ROAD_Y;
+			default:
+				return ROAD_ALL;
+		}
+	}
+}
+
+/**
+ * Check there are enougth neighbor house tiles next to the current tile
+ *
+ * @param tile current tile
+ * @return true if there are more than 2 house tiles next
+ *  to the current one
+ */
+static bool NeighborsAreHouseTiles(TileIndex tile)
+{
+	uint counter = 0; ///< counts the house neighbor tiles
+
+	/* We can't look further than that. */
+	if (TileX(tile) < 1 || TileY(tile) < 1) {
+		return false;
+	}
+
+	/* Check the tiles E,N,W and S of the current tile. */
+	for (uint i = 0; i < 4; i++) {
+		if (IsTileType(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[i])), MP_HOUSE)) {
+			counter++;
+		}
+
+		/* If there are enougth neighbor's stop it here */
+		if (counter >= 3) {
+			return true;
+		}
+	}
+	return false;
+}
+
+/**
+ * Grows the given town.
+ * There are at the moment 3 possible way's for
+ * the town expansion:
+ * @li Generate a random tile and check if there is a road allowed
+ * 	@li TL_ORIGINAL
+ * 	@li TL_BETTER_ROADS
+ * @li Check if the town geometry allows a road and which one
+ * 	@li TL_2X2_GRID
+ * 	@li TL_3X3_GRID
+ * @li Forbid roads, only build houses
+ * 	@li TL_NO_ROADS
+ *
+ * @param tile_ptr current tile
+ * @param mask current tiles RoadBits
+ * @param block road block
+ * @param t1 current town
+ */
 static void GrowTownInTile(TileIndex* tile_ptr, RoadBits mask, int block, Town* t1)
 {
 	RoadBits rcmd;
@@ -654,39 +867,81 @@
 		LevelTownLand(tile);
 
 		/* Is a road allowed here? */
-		if (!IsRoadAllowedHere(tile, block)) return;
-
-		/* Randomize new road block numbers */
-		a = block;
-		b = block ^ 2;
-		if (CHANCE16(1, 4)) {
-			do {
-				a = GB(Random(), 0, 2);
-			} while (a == b);
+		switch (_patches.town_layout) {
+			default: NOT_REACHED();
+
+			case TL_NO_ROADS: /* Disallow Roads */
+				return;
+
+			case TL_3X3_GRID:
+			case TL_2X2_GRID:
+				rcmd = GetTownRoadGridElement(t1, tile);
+				if (rcmd == ROAD_NONE) {
+					return;
+				}
+				break;
+
+			case TL_BETTER_ROADS:
+			case TL_ORIGINAL:
+				if (!IsRoadAllowedHere(tile, block)) {
+					return;
+				}
+
+				/* Randomize new road block numbers */
+				a = block;
+				b = block ^ 2;
+				if (CHANCE16(1, 4)) {
+					do {
+						a = GB(Random(), 0, 2);
+					} while (a == b);
+				}
+
+				if (!IsRoadAllowedHere(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[a])), a)) {
+					/* A road is not allowed to continue the randomized road,
+					 *   return if the road we're trying to build is curved. */
+					if (a != (b ^ 2)) {
+						return;
+					}
+
+					/* Return if neither side of the new road is a house */
+					if (!IsTileType(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[a + 1])), MP_HOUSE) &&
+							!IsTileType(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[a + 3])), MP_HOUSE)) {
+						return;
+					}
+
+					/* That means that the road is only allowed if there is a house
+					 *  at any side of the new road. */
+				}
+
+				rcmd = (RoadBits)((1 << a) + (1 << b));
+				break;
 		}
 
-		if (!IsRoadAllowedHere(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[a])), a)) {
-			/* A road is not allowed to continue the randomized road,
-			 *   return if the road we're trying to build is curved. */
-			if (a != (b ^ 2)) return;
-
-			/* Return if neither side of the new road is a house */
-			if (!IsTileType(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[a + 1])), MP_HOUSE) &&
-					!IsTileType(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[a + 3])), MP_HOUSE))
-				return;
-
-			/* That means that the road is only allowed if there is a house
-			 *  at any side of the new road. */
-		}
-		rcmd = (RoadBits)((1 << a) + (1 << b));
-
 	} else if (block < 5 && !HASBIT(mask, block ^ 2)) {
 		/* Continue building on a partial road.
 		 * Always OK. */
 		_grow_town_result = 0;
-		rcmd = (RoadBits)(1 << (block ^ 2));
+
+		switch (_patches.town_layout) {
+			default: NOT_REACHED();
+
+			case TL_NO_ROADS: /* Disallow Roads */
+				return;
+
+			case TL_3X3_GRID:
+			case TL_2X2_GRID:
+			 	rcmd = GetTownRoadGridElement(t1, tile);
+				break;
+
+			case TL_BETTER_ROADS:
+			case TL_ORIGINAL:
+				rcmd = (RoadBits)(1 << (block ^ 2));
+				break;
+		}
 	} else {
 		int i;
+		bool allow_house = false;
+		TileIndex tmptile2;
 
 		/* Reached a tunnel/bridge? Then continue at the other side of it. */
 		if (IsTileType(tile, MP_TUNNELBRIDGE)) {
@@ -709,17 +964,51 @@
 		/* Don't do it if it reaches to water. */
 		if (IsClearWaterTile(tmptile)) return;
 
-		/* Build a house at the edge. 60% chance or
-		 *  always ok if no road allowed. */
-		if (!IsRoadAllowedHere(tmptile, i) || CHANCE16(6, 10)) {
-			/* But not if there already is a house there. */
+		switch (_patches.town_layout) {
+			default: NOT_REACHED();
+
+			case TL_NO_ROADS:
+				allow_house = true;
+				break;
+
+			case TL_3X3_GRID: /* Use 2x2 grid afterwards! */
+				/* Fill gap if house has enougth neighbors */
+				tmptile2 = TILE_ADD(tmptile, ToTileIndexDiff(_roadblock_tileadd[i]));
+				if (NeighborsAreHouseTiles(tmptile2) && BuildTownHouse(t1, tmptile2)) {
+					_grow_town_result = -1;
+				}
+
+			case TL_2X2_GRID:
+				rcmd = GetTownRoadGridElement(t1, tmptile);
+				allow_house = (rcmd == ROAD_NONE);
+				break;
+
+			case TL_BETTER_ROADS: /* Use original afterwards! */
+				/* Fill gap if house has enougth neighbors */
+				tmptile2 = TILE_ADD(tmptile, ToTileIndexDiff(_roadblock_tileadd[i]));
+				if (NeighborsAreHouseTiles(tmptile2) && BuildTownHouse(t1, tmptile2)) {
+					_grow_town_result = -1;
+				}
+
+			case TL_ORIGINAL:
+				 /* Allow a house at the edge. 60% chance or
+				  * always ok if no road allowed. */
+				allow_house = (!IsRoadAllowedHere(tmptile, i) || CHANCE16(6, 10));
+				break;
+		}
+
+
+		if (allow_house) {
+			/* Build a house, but not if there already is a house there. */
 			if (!IsTileType(tmptile, MP_HOUSE)) {
 				/* Level the land if possible */
 				LevelTownLand(tmptile);
 
 				/* And build a house.
 				 * Set result to -1 if we managed to build it. */
-				if (BuildTownHouse(t1, tmptile)) _grow_town_result = -1;
+				if (BuildTownHouse(t1, tmptile)) {
+					_grow_town_result = -1;
+				}
 			}
 			return;
 		}
@@ -747,6 +1036,12 @@
 			return;
 	}
 
+	/* Check if the bridge is in the right direction */
+	if ((rcmd == ROAD_X && (i == DIAGDIR_NW || i == DIAGDIR_SE)) ||
+			(rcmd == ROAD_Y && (i == DIAGDIR_NE || i == DIAGDIR_SW))) {
+		goto build_road_and_exit;
+	}
+
 	tmptile = tile;
 
 	/* Now it contains the direction of the slope */
@@ -789,8 +1084,23 @@
 
 	TILE_ASSERT(tile);
 
-	/* Number of times to search. */
-	_grow_town_result = 10 + t->num_houses * 4 / 9;
+	/* Number of times to search.
+	 * Better roads, 2X2 and 3X3 grid grow quite fast so we give
+	 * them a little handicap. */
+	switch (_patches.town_layout) {
+		case TL_BETTER_ROADS:
+			_grow_town_result = 10 + t->num_houses * 2 / 9;
+			break;
+
+		case TL_3X3_GRID:
+		case TL_2X2_GRID:
+			_grow_town_result = 10 + t->num_houses * 1 / 9;
+			break;
+
+		default:
+			_grow_town_result = 10 + t->num_houses * 4 / 9;
+			break;
+	}
 
 	do {
 		/* Get a bitmask of the road blocks on a tile */
@@ -864,6 +1174,13 @@
 		{ 0,  0}
 	};
 
+	/* Let the town be a ghost town
+	 * The player wanted it in such a way. Thus there he has it. ;)
+	 * Never reached in editor mode. */
+	if (_patches.town_layout == TL_NO_ROADS) {
+		return false;
+	}
+
 	/* Current player is a town */
 	old_player = _current_player;
 	_current_player = OWNER_TOWN;
@@ -885,7 +1202,7 @@
 	for (ptr = _town_coord_mod; ptr != endof(_town_coord_mod); ++ptr) {
 		/* Only work with plain land that not already has a house */
 		if (!IsTileType(tile, MP_HOUSE) && GetTileSlope(tile, NULL) == SLOPE_FLAT) {
-			if (!CmdFailed(DoCommand(tile, 0, 0, DC_AUTO, CMD_LANDSCAPE_CLEAR))) {
+			if (!CmdFailed(DoCommand(tile, 0, 0, DC_AUTO | DC_NO_WATER, CMD_LANDSCAPE_CLEAR))) {
 				DoCommand(tile, GenRandomRoadBits(), t->index, DC_EXEC | DC_AUTO, CMD_BUILD_ROAD);
 				_current_player = old_player;
 				return true;
@@ -1185,7 +1502,7 @@
 	return NULL;
 }
 
-static const byte _num_initial_towns[3] = {11, 23, 46};
+static const byte _num_initial_towns[4] = {5, 11, 23, 46};
 
 bool GenerateTowns()
 {
--- a/src/train.h	Fri May 04 23:17:26 2007 +0000
+++ b/src/train.h	Wed May 09 20:22:49 2007 +0000
@@ -228,4 +228,27 @@
 
 byte FreightWagonMult(CargoID cargo);
 
+/**
+ * This class 'wraps' Vehicle; you do not actually instantiate this class.
+ * You create a Vehicle using AllocateVehicle, so it is added to the pool
+ * and you reinitialize that to a Train using:
+ *   v = new (v) Train();
+ *
+ * As side-effect the vehicle type is set correctly.
+ */
+struct Train : public Vehicle {
+	/** Initializes the Vehicle to a train */
+	Train() { this->type = VEH_TRAIN; }
+
+	/** We want to 'destruct' the right class. */
+	virtual ~Train() {}
+
+	const char *GetTypeString() const { return "train"; }
+	void MarkDirty();
+	void UpdateDeltaXY(Direction direction);
+	ExpensesType GetExpenseType(bool income) const { return income ? EXPENSES_TRAIN_INC : EXPENSES_TRAIN_RUN; }
+	WindowClass GetVehicleListWindowClass() const { return WC_TRAINS_LIST; }
+	void PlayLeaveStationSound() const;
+};
+
 #endif /* TRAIN_H */
--- a/src/train_cmd.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/train_cmd.cpp	Wed May 09 20:22:49 2007 +0000
@@ -114,7 +114,7 @@
 		/* Vehicle weight is not added for articulated parts. */
 		if (!IsArticulatedPart(u)) {
 			/* vehicle weight is the sum of the weight of the vehicle and the weight of its cargo */
-			vweight += RailVehInfo(u->engine_type)->weight;
+			vweight += GetVehicleProperty(u, 0x16, RailVehInfo(u->engine_type)->weight);
 
 			/* powered wagons have extra weight added */
 			if (HASBIT(u->u.rail.flags, VRF_POWEREDWAGON))
@@ -190,7 +190,7 @@
 			}
 
 			if (rvi_v->pow_wag_power != 0 && rvi_u->railveh_type == RAILVEH_WAGON &&
-				UsesWagonOverride(u) && (u->u.rail.cached_vis_effect < 0x40)) {
+				UsesWagonOverride(u) && !HASBIT(u->u.rail.cached_vis_effect, 7)) {
 				/* wagon is powered */
 				SETBIT(u->u.rail.flags, VRF_POWEREDWAGON); // cache 'powered' status
 			} else {
@@ -535,7 +535,6 @@
 		u->x_pos = v->x_pos;
 		u->y_pos = v->y_pos;
 		u->z_pos = v->z_pos;
-		u->z_height = v->z_height;
 		u->u.rail.track = v->u.rail.track;
 		u->u.rail.railtype = v->u.rail.railtype;
 		u->build_year = v->build_year;
@@ -552,7 +551,7 @@
 		u->max_age = 0;
 		u->engine_type = engine_type;
 		u->value = 0;
-		u->type = VEH_TRAIN;
+		u = new (u) Train();
 		u->subtype = 0;
 		SetArticulatedPart(u);
 		u->cur_image = 0xAC2;
@@ -567,7 +566,7 @@
 	SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
 
 	const RailVehicleInfo *rvi = RailVehInfo(engine);
-	int32 value = (rvi->base_cost * _price.build_railwagon) >> 8;
+	int32 value = (GetEngineProperty(engine, 0x17, rvi->base_cost) * _price.build_railwagon) >> 8;
 
 	uint num_vehicles = 1 + CountArticulatedParts(engine);
 
@@ -608,7 +607,6 @@
 			v->y_pos = y;
 			v->z_pos = GetSlopeZ(x, y);
 			v->owner = _current_player;
-			v->z_height = 6;
 			v->u.rail.track = TRACK_BIT_DEPOT;
 			v->vehstatus = VS_HIDDEN | VS_DEFPAL;
 
@@ -630,7 +628,7 @@
 			v->u.rail.railtype = rvi->railtype;
 
 			v->build_year = _cur_year;
-			v->type = VEH_TRAIN;
+			v = new (v) Train();
 			v->cur_image = 0xAC2;
 			v->random_bits = VehicleRandomBits();
 
@@ -668,9 +666,9 @@
 	}
 }
 
-static int32 EstimateTrainCost(const RailVehicleInfo* rvi)
+static int32 EstimateTrainCost(EngineID engine, const RailVehicleInfo* rvi)
 {
-	return rvi->base_cost * (_price.build_railvehicle >> 3) >> 5;
+	return GetEngineProperty(engine, 0x17, rvi->base_cost) * (_price.build_railvehicle >> 3) >> 5;
 }
 
 static void AddRearEngineToMultiheadedTrain(Vehicle* v, Vehicle* u, bool building)
@@ -681,7 +679,6 @@
 	u->x_pos = v->x_pos;
 	u->y_pos = v->y_pos;
 	u->z_pos = v->z_pos;
-	u->z_height = 6;
 	u->u.rail.track = TRACK_BIT_DEPOT;
 	u->vehstatus = v->vehstatus & ~VS_STOPPED;
 	u->subtype = 0;
@@ -696,7 +693,7 @@
 	u->build_year = v->build_year;
 	if (building) v->value >>= 1;
 	u->value = v->value;
-	u->type = VEH_TRAIN;
+	u = new (u) Train();
 	u->cur_image = 0xAC2;
 	u->random_bits = VehicleRandomBits();
 	VehiclePositionChanged(u);
@@ -731,7 +728,7 @@
 
 	if (rvi->railveh_type == RAILVEH_WAGON) return CmdBuildRailWagon(p1, tile, flags);
 
-	int32 value = EstimateTrainCost(rvi);
+	int32 value = EstimateTrainCost(p1, rvi);
 
 	uint num_vehicles =
 		(rvi->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1) +
@@ -763,7 +760,6 @@
 			v->x_pos = x;
 			v->y_pos = y;
 			v->z_pos = GetSlopeZ(x, y);
-			v->z_height = 6;
 			v->u.rail.track = TRACK_BIT_DEPOT;
 			v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
 			v->spritenum = rvi->image_index;
@@ -789,7 +785,7 @@
 			v->service_interval = _patches.servint_trains;
 			v->date_of_last_service = _date;
 			v->build_year = _cur_year;
-			v->type = VEH_TRAIN;
+			v = new (v) Train();
 			v->cur_image = 0xAC2;
 			v->random_bits = VehicleRandomBits();
 
@@ -1269,7 +1265,6 @@
 			DeleteVehicleNews(p1, STR_8814_TRAIN_IS_WAITING_IN_DEPOT);
 		}
 
-		v->u.rail.days_since_order_progr = 0;
 		v->vehstatus ^= VS_STOPPED;
 		InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 		InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
@@ -1463,9 +1458,9 @@
 	return cost;
 }
 
-static void UpdateTrainDeltaXY(Vehicle *v, Direction direction)
+void Train::UpdateDeltaXY(Direction direction)
 {
-#define MKIT(a,b,c,d) ((a&0xFF)<<24) | ((b&0xFF)<<16) | ((c&0xFF)<<8) | ((d&0xFF)<<0)
+#define MKIT(a, b, c, d) ((a & 0xFF) << 24) | ((b & 0xFF) << 16) | ((c & 0xFF) << 8) | ((d & 0xFF) << 0)
 	static const uint32 _delta_xy_table[8] = {
 		MKIT(3, 3, -1, -1),
 		MKIT(3, 7, -1, -3),
@@ -1479,16 +1474,16 @@
 #undef MKIT
 
 	uint32 x = _delta_xy_table[direction];
-
-	v->x_offs        = GB(x,  0, 8);
-	v->y_offs        = GB(x,  8, 8);
-	v->sprite_width  = GB(x, 16, 8);
-	v->sprite_height = GB(x, 24, 8);
+	this->x_offs        = GB(x,  0, 8);
+	this->y_offs        = GB(x,  8, 8);
+	this->sprite_width  = GB(x, 16, 8);
+	this->sprite_height = GB(x, 24, 8);
+	this->z_height      = 6;
 }
 
 static void UpdateVarsAfterSwap(Vehicle *v)
 {
-	UpdateTrainDeltaXY(v, v->direction);
+	v->UpdateDeltaXY(v->direction);
 	v->cur_image = GetTrainImage(v, v->direction);
 	BeginVehicleMove(v);
 	VehiclePositionChanged(v);
@@ -1751,11 +1746,14 @@
  * param p2 various bitstuffed elements
  * - p2 = (bit 0-7) - the new cargo type to refit to
  * - p2 = (bit 8-15) - the new cargo subtype to refit to
+ * - p2 = (bit 16) - refit only this vehicle
+ * @return cost of refit or error
  */
 int32 CmdRefitRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	CargoID new_cid = GB(p2, 0, 8);
 	byte new_subtype = GB(p2, 8, 8);
+	bool only_this = HASBIT(p2, 16);
 
 	if (!IsValidVehicleID(p1)) return CMD_ERROR;
 
@@ -1833,7 +1831,7 @@
 				}
 			}
 		}
-	} while ((v = v->next) != NULL);
+	} while ((v = v->next) != NULL && !only_this);
 
 	_returned_refit_capacity = num;
 
@@ -1966,7 +1964,6 @@
 		if (p2 & DEPOT_DONT_CANCEL) return CMD_ERROR; // Requested no cancelation of depot orders
 		if (flags & DC_EXEC) {
 			if (HASBIT(v->current_order.flags, OFB_PART_OF_ORDERS)) {
-				v->u.rail.days_since_order_progr = 0;
 				v->cur_order_index++;
 			}
 
@@ -2029,7 +2026,6 @@
 		/* no smoke? */
 		if ((rvi->railveh_type == RAILVEH_WAGON && effect_type == 0) ||
 				disable_effect ||
-				rvi->railtype > RAILTYPE_ELECTRIC ||
 				v->vehstatus & VS_HIDDEN) {
 			continue;
 		}
@@ -2090,22 +2086,20 @@
 	static const SoundFx sfx[] = {
 		SND_04_TRAIN,
 		SND_0A_TRAIN_HORN,
-		SND_0A_TRAIN_HORN
+		SND_0A_TRAIN_HORN,
+		SND_47_MAGLEV_2,
+		SND_41_MAGLEV
 	};
 
 	if (PlayVehicleSound(v, VSE_START)) return;
 
 	EngineID engtype = v->engine_type;
-	switch (RailVehInfo(engtype)->railtype) {
-		case RAILTYPE_RAIL:
-		case RAILTYPE_ELECTRIC:
-			SndPlayVehicleFx(sfx[RailVehInfo(engtype)->engclass], v);
-			break;
-
-		case RAILTYPE_MONO: SndPlayVehicleFx(SND_47_MAGLEV_2, v); break;
-		case RAILTYPE_MAGLEV: SndPlayVehicleFx(SND_41_MAGLEV, v); break;
-		default: NOT_REACHED();
-	}
+	SndPlayVehicleFx(sfx[RailVehInfo(engtype)->engclass], v);
+}
+
+void Train::PlayLeaveStationSound() const
+{
+	TrainPlayLeaveStationSound(this);
 }
 
 static bool CheckTrainStayInDepot(Vehicle *v)
@@ -2146,7 +2140,7 @@
 	v->vehstatus &= ~VS_HIDDEN;
 	v->cur_speed = 0;
 
-	UpdateTrainDeltaXY(v, v->direction);
+	v->UpdateDeltaXY(v->direction);
 	v->cur_image = GetTrainImage(v, v->direction);
 	VehiclePositionChanged(v);
 	UpdateSignalsOnSegment(v->tile, DirToDiagDir(v->direction));
@@ -2519,62 +2513,17 @@
 	return !at_waypoint && CheckReverseTrain(v);
 }
 
-static void MarkTrainDirty(Vehicle *v)
+void Train::MarkDirty()
 {
+	Vehicle *v = this;
 	do {
 		v->cur_image = GetTrainImage(v, v->direction);
 		MarkAllViewportsDirty(v->left_coord, v->top_coord, v->right_coord + 1, v->bottom_coord + 1);
 	} while ((v = v->next) != NULL);
-}
-
-static void HandleTrainLoading(Vehicle *v, bool mode)
-{
-	switch (v->current_order.type) {
-		case OT_LOADING: {
-			if (mode) return;
-
-			/* don't mark the train as lost if we're loading on the final station. */
-			if (v->current_order.flags & OF_NON_STOP) {
-				v->u.rail.days_since_order_progr = 0;
-			}
-
-			if (--v->load_unload_time_rem) return;
-
-			if (CanFillVehicle(v) && (
-						v->current_order.flags & OF_FULL_LOAD ||
-						(_patches.gradual_loading && !HASBIT(v->vehicle_flags, VF_LOADING_FINISHED))
-					)) {
-				v->u.rail.days_since_order_progr = 0; // Prevent a train lost message for full loading trains
-				SET_EXPENSES_TYPE(EXPENSES_TRAIN_INC);
-				if (LoadUnloadVehicle(v, false)) {
-					InvalidateWindow(WC_TRAINS_LIST, v->owner);
-					MarkTrainDirty(v);
-
-					/* need to update acceleration and cached values since the goods on the train changed. */
-					TrainCargoChanged(v);
-					UpdateTrainAcceleration(v);
-				}
-				return;
-			}
-
-			TrainPlayLeaveStationSound(v);
-
-			Order b = v->current_order;
-			v->LeaveStation();
-
-			/* If this was not the final order, don't remove it from the list. */
-			if (!(b.flags & OF_NON_STOP)) return;
-			break;
-		}
-
-		case OT_DUMMY: break;
-
-		default: return;
-	}
-
-	v->u.rail.days_since_order_progr = 0;
-	v->cur_order_index++;
-	InvalidateVehicleOrder(v);
+
+	/* need to update acceleration and cached values since the goods on the train changed. */
+	TrainCargoChanged(this);
+	UpdateTrainAcceleration(this);
 }
 
 static int UpdateTrainSpeed(Vehicle *v)
@@ -2631,29 +2580,8 @@
 		);
 	}
 
-	/* Did we reach the final destination? */
-	if (v->current_order.type == OT_GOTO_STATION &&
-			v->current_order.dest == station) {
-		/* Yeah, keep the load/unload flags
-		 * Non Stop now means if the order should be increased. */
-		v->BeginLoading();
-		v->current_order.flags &= OF_FULL_LOAD | OF_UNLOAD | OF_TRANSFER;
-		v->current_order.flags |= OF_NON_STOP;
-	} else {
-		/* No, just do a simple load */
-		v->BeginLoading();
-		v->current_order.flags = 0;
-	}
+	v->BeginLoading();
 	v->current_order.dest = 0;
-
-	SET_EXPENSES_TYPE(EXPENSES_TRAIN_INC);
-	if (LoadUnloadVehicle(v, true) != 0) {
-		InvalidateWindow(WC_TRAINS_LIST, v->owner);
-		TrainCargoChanged(v);
-		UpdateTrainAcceleration(v);
-	}
-	MarkTrainDirty(v);
-	InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 }
 
 static byte AfterSetTrainPos(Vehicle *v, bool new_tile)
@@ -3078,7 +3006,7 @@
 
 		/* update image of train, as well as delta XY */
 		Direction newdir = GetNewVehicleDirection(v, gp.x, gp.y);
-		UpdateTrainDeltaXY(v, newdir);
+		v->UpdateDeltaXY(newdir);
 		if (update_image) v->cur_image = GetTrainImage(v, newdir);
 
 		v->x_pos = gp.x;
@@ -3174,7 +3102,7 @@
 		if (!(v->vehstatus & VS_HIDDEN)) {
 			v->direction = ChangeDir(v->direction, delta[GB(Random(), 0, 2)]);
 			BeginVehicleMove(v);
-			UpdateTrainDeltaXY(v, v->direction);
+			v->UpdateDeltaXY(v->direction);
 			v->cur_image = GetTrainImage(v, v->direction);
 			/* Refrain from updating the z position of the vehicle when on
 			   a bridge, because AfterSetTrainPos will put the vehicle under
@@ -3376,7 +3304,7 @@
 		return;
 	}
 
-	HandleTrainLoading(v, mode);
+	v->HandleLoading(mode);
 
 	if (v->current_order.type == OT_LOADING) return;
 
@@ -3465,6 +3393,8 @@
 		return;
 	}
 
+	if (v->current_order.type == OT_LOADING) v->LeaveStation();
+
 	v->current_order.type = OT_GOTO_DEPOT;
 	v->current_order.flags = OF_NON_STOP;
 	v->current_order.dest = depot->index;
--- a/src/transparency_gui.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/transparency_gui.cpp	Wed May 09 20:22:49 2007 +0000
@@ -23,6 +23,7 @@
 	TTW_WIDGET_BUILDINGS,    ///< Make player buildings and structures transparent
 	TTW_WIDGET_BRIDGES,      ///< Make bridges transparent
 	TTW_WIDGET_STRUCTURES,   ///< Make unmovable structures transparent
+	TTW_WIDGET_END,          ///< End of toggle buttons
 };
 
 /** Toggle the bits of the transparencies variable
@@ -41,7 +42,7 @@
 		case WE_PAINT:
 			/* must be sure that the widgets show the transparency variable changes
 			 * also when we use shortcuts */
-			for (uint i = TTW_WIDGET_SIGNS; i < TTW_WIDGET_STRUCTURES; i++) {
+			for (uint i = TTW_WIDGET_SIGNS; i < TTW_WIDGET_END; i++) {
 				SetWindowWidgetLoweredState(w, i, HASBIT(_transparent_opt, i - TTW_WIDGET_SIGNS));
 			}
 			DrawWindowWidgets(w);
@@ -63,7 +64,7 @@
 
 /* transparency widgets:
  * transparent signs, trees, houses, industries, player's buildings, bridges and unmovable structures */
-{   WWT_IMGBTN,   RESIZE_NONE,  7,   0,  21,  14,  35, SPR_IMG_PLACE_SIGN,   STR_TRANSPARENT_SIGNS_DESC},
+{   WWT_IMGBTN,   RESIZE_NONE,  7,   0,  21,  14,  35, SPR_IMG_SIGN,         STR_TRANSPARENT_SIGNS_DESC},
 {   WWT_IMGBTN,   RESIZE_NONE,  7,  22,  43,  14,  35, SPR_IMG_PLANTTREES,   STR_TRANSPARENT_TREES_DESC},
 {   WWT_IMGBTN,   RESIZE_NONE,  7,  44,  65,  14,  35, SPR_IMG_TOWN,         STR_TRANSPARENT_HOUSES_DESC},
 {   WWT_IMGBTN,   RESIZE_NONE,  7,  66,  87,  14,  35, SPR_IMG_INDUSTRY,     STR_TRANSPARENT_INDUSTRIES_DESC},
--- a/src/tunnel_map.h	Fri May 04 23:17:26 2007 +0000
+++ b/src/tunnel_map.h	Wed May 09 20:22:49 2007 +0000
@@ -10,7 +10,12 @@
 #include "map.h"
 #include "rail.h"
 
-
+/**
+ * Is this a tunnel (entrance)?
+ * @param t the tile that might be a tunnel
+ * @pre IsTileType(t, MP_TUNNELBRIDGE)
+ * @return true if and only if this tile is a tunnel (entrance)
+ */
 static inline bool IsTunnel(TileIndex t)
 {
 	assert(IsTileType(t, MP_TUNNELBRIDGE));
@@ -18,31 +23,60 @@
 }
 
 
+/**
+ * Is this a tunnel (entrance)?
+ * @param t the tile that might be a tunnel
+ * @return true if and only if this tile is a tunnel (entrance)
+ */
 static inline bool IsTunnelTile(TileIndex t)
 {
 	return IsTileType(t, MP_TUNNELBRIDGE) && IsTunnel(t);
 }
 
-
+/**
+ * Gets the direction facing out of the tunnel
+ * @param t the tile to get the tunnel facing direction of
+ * @pre IsTunnelTile(t)
+ * @return the direction the tunnel is facing
+ */
 static inline DiagDirection GetTunnelDirection(TileIndex t)
 {
 	assert(IsTunnelTile(t));
 	return (DiagDirection)GB(_m[t].m5, 0, 2);
 }
 
-
+/**
+ * Gets the transport type of the tunnel (road or rail)
+ * @param t the tunnel entrance tile to get the type of
+ * @pre IsTunnelTile(t)
+ * @return the transport type in the tunnel
+ */
 static inline TransportType GetTunnelTransportType(TileIndex t)
 {
 	assert(IsTunnelTile(t));
 	return (TransportType)GB(_m[t].m5, 2, 2);
 }
 
+/**
+ * Is this tunnel entrance in a snowy or desert area?
+ * @param t the tunnel entrance tile
+ * @pre IsTunnelTile(t)
+ * @return true if and only if the tunnel entrance is in a snowy/desert area
+ */
 static inline bool HasTunnelSnowOrDesert(TileIndex t)
 {
 	assert(IsTunnelTile(t));
 	return HASBIT(_m[t].m4, 7);
 }
 
+/**
+ * Places this tunnel entrance in a snowy or desert area,
+ * or takes it out of there.
+ * @param t the tunnel entrance tile
+ * @param snow_or_desert is the entrance in snow or desert (true), when
+ *                       not in snow and not in desert false
+ * @pre IsTunnelTile(t)
+ */
 static inline void SetTunnelSnowOrDesert(TileIndex t, bool snow_or_desert)
 {
 	assert(IsTunnelTile(t));
@@ -54,6 +88,12 @@
 bool IsTunnelInWay(TileIndex, uint z);
 
 
+/**
+ * Makes a road tunnel entrance
+ * @param t the entrance of the tunnel
+ * @param o the owner of the entrance
+ * @param d the direction facing out of the tunnel
+ */
 static inline void MakeRoadTunnel(TileIndex t, Owner o, DiagDirection d)
 {
 	SetTileType(t, MP_TUNNELBRIDGE);
@@ -64,6 +104,13 @@
 	_m[t].m5 = TRANSPORT_ROAD << 2 | d;
 }
 
+/**
+ * Makes a rail tunnel entrance
+ * @param t the entrance of the tunnel
+ * @param o the owner of the entrance
+ * @param d the direction facing out of the tunnel
+ * @param r the rail type used in the tunnel
+ */
 static inline void MakeRailTunnel(TileIndex t, Owner o, DiagDirection d, RailType r)
 {
 	SetTileType(t, MP_TUNNELBRIDGE);
--- a/src/tunnelbridge_cmd.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/tunnelbridge_cmd.cpp	Wed May 09 20:22:49 2007 +0000
@@ -638,10 +638,11 @@
 	if (!CheckAllowRemoveTunnelBridge(tile)) return CMD_ERROR;
 
 	endtile = GetOtherBridgeEnd(tile);
+	byte bridge_height = GetBridgeHeight(tile);
 
-	if (!EnsureNoVehicleOnGround(tile) ||
-			!EnsureNoVehicleOnGround(endtile) ||
-			IsVehicleOnBridge(tile, endtile, GetBridgeHeight(tile))) {
+	if (FindVehicleOnTileZ(tile, bridge_height) != NULL ||
+			FindVehicleOnTileZ(endtile, bridge_height) != NULL ||
+			IsVehicleOnBridge(tile, endtile, bridge_height)) {
 		return CMD_ERROR;
 	}
 
@@ -742,10 +743,11 @@
 		if (!CheckTileOwnership(tile)) return CMD_ERROR;
 
 		endtile = GetOtherBridgeEnd(tile);
+		byte bridge_height = GetBridgeHeight(tile);
 
-		if (!EnsureNoVehicleOnGround(tile) ||
-				!EnsureNoVehicleOnGround(endtile) ||
-				IsVehicleOnBridge(tile, endtile, GetBridgeHeight(tile))) {
+		if (FindVehicleOnTileZ(tile, bridge_height) != NULL ||
+				FindVehicleOnTileZ(endtile, bridge_height) != NULL ||
+				IsVehicleOnBridge(tile, endtile, bridge_height)) {
 			return CMD_ERROR;
 		}
 
--- a/src/variables.h	Fri May 04 23:17:26 2007 +0000
+++ b/src/variables.h	Wed May 09 20:22:49 2007 +0000
@@ -228,6 +228,10 @@
 	uint8 town_growth_rate;  ///< Town growth rate
 	uint8 larger_towns;      ///< The number of cities to build. These start off larger and grow twice as fast
 	uint8 initial_city_size; ///< Multiplier for the initial size of the cities compared to towns
+
+	bool pause_on_newgame;   ///< Whether to start new games paused or not.
+
+	TownLayoutByte town_layout;  ///< Select town layout
 };
 
 VARDEF Patches _patches;
--- a/src/vehicle.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/vehicle.cpp	Wed May 09 20:22:49 2007 +0000
@@ -40,6 +40,7 @@
 #include "newgrf_engine.h"
 #include "newgrf_sound.h"
 #include "helpers.hpp"
+#include "economy.h"
 
 #define INVALID_COORD (-0x8000)
 #define GEN_HASH(x, y) ((GB((y), 6, 6) << 6) + GB((x), 7, 6))
@@ -89,7 +90,7 @@
 	 * TODO - This is just a temporary stage, this will be removed. */
 	for (v = GetVehicle(start_item); v != NULL; v = (v->index + 1U < GetVehiclePoolSize()) ? GetVehicle(v->index + 1) : NULL) {
 		v->index = start_item++;
-		v->type  = VEH_INVALID;
+		v = new (v) InvalidVehicle();
 	}
 }
 
@@ -224,6 +225,8 @@
 	Vehicle *v;
 
 	FOR_ALL_VEHICLES(v) {
+		v->UpdateDeltaXY(v->direction);
+
 		v->first = NULL;
 		if (v->type == VEH_TRAIN) v->u.rail.first_engine = INVALID_ENGINE;
 	}
@@ -271,7 +274,7 @@
 
 	assert(v->orders == NULL);
 
-	v->type = VEH_INVALID;
+	v = new (v) InvalidVehicle();
 	v->left_coord = INVALID_COORD;
 	v->first = NULL;
 	v->next = NULL;
@@ -698,70 +701,6 @@
 	}
 }
 
-static bool CanFillVehicle_FullLoadAny(Vehicle *v)
-{
-	uint32 full = 0, not_full = 0;
-	bool keep_loading = false;
-	const GoodsEntry *ge = GetStation(v->last_station_visited)->goods;
-
-	/* special handling of aircraft */
-
-	/* if the aircraft carries passengers and is NOT full, then
-	 *continue loading, no matter how much mail is in */
-	if (v->type == VEH_AIRCRAFT &&
-			IsCargoInClass(v->cargo_type, CC_PASSENGERS) &&
-			v->cargo_cap != v->cargo_count) {
-		return true;
-	}
-
-	/* patch should return "true" to continue loading, i.e. when there is no cargo type that is fully loaded. */
-	do {
-		/* Should never happen, but just in case future additions change this */
-		assert(v->cargo_type<32);
-
-		if (v->cargo_cap != 0) {
-			uint32 mask = 1 << v->cargo_type;
-
-			if (v->cargo_cap == v->cargo_count) {
-				full |= mask;
-			} else if (GB(ge[v->cargo_type].waiting_acceptance, 0, 12) > 0 ||
-					(HASBIT(v->vehicle_flags, VF_CARGO_UNLOADING) && (ge[v->cargo_type].waiting_acceptance & 0x8000))) {
-				/* If there is any cargo waiting, or this vehicle is still unloading
-				 * and the station accepts the cargo, don't leave the station. */
-				keep_loading = true;
-			} else {
-				not_full |= mask;
-			}
-		}
-	} while ((v = v->next) != NULL);
-
-	/* continue loading if there is a non full cargo type and no cargo type that is full */
-	return keep_loading || (not_full && (full & ~not_full) == 0);
-}
-
-bool CanFillVehicle(Vehicle *v)
-{
-	TileIndex tile = v->tile;
-
-	if (IsTileType(tile, MP_STATION) ||
-			(v->type == VEH_SHIP && (
-				IsTileType(TILE_ADDXY(tile,  1,  0), MP_STATION) ||
-				IsTileType(TILE_ADDXY(tile, -1,  0), MP_STATION) ||
-				IsTileType(TILE_ADDXY(tile,  0,  1), MP_STATION) ||
-				IsTileType(TILE_ADDXY(tile,  0, -1), MP_STATION) ||
-				IsTileType(TILE_ADDXY(tile, -2,  0), MP_STATION)
-			))) {
-
-		/* If patch is active, use alternative CanFillVehicle-function */
-		if (_patches.full_load_any && v->current_order.flags & OF_FULL_LOAD) return CanFillVehicle_FullLoadAny(v);
-
-		do {
-			if (v->cargo_count != v->cargo_cap) return true;
-		} while ((v = v->next) != NULL);
-	}
-	return false;
-}
-
 /** Check if a given engine type can be refitted to a given cargo
  * @param engine_type Engine type to check
  * @param cid_to check refit to this cargo-type
@@ -1438,14 +1377,13 @@
 
 	v = ForceAllocateSpecialVehicle();
 	if (v != NULL) {
-		v->type = VEH_SPECIAL;
+		v = new (v) SpecialVehicle();
 		v->subtype = type;
 		v->x_pos = x;
 		v->y_pos = y;
 		v->z_pos = z;
-		v->z_height = v->sprite_width = v->sprite_height = 1;
-		v->x_offs = v->y_offs = 0;
 		v->tile = 0;
+		v->UpdateDeltaXY(INVALID_DIR);
 		v->vehstatus = VS_UNCLICKABLE;
 
 		_effect_init_procs[type](v);
@@ -1804,7 +1742,7 @@
 {
 	Vehicle *v_front, *v;
 	Vehicle *w_front, *w, *w_rear;
-	int cost, total_cost = 0;
+	int32 cost, total_cost = 0;
 	uint32 build_argument = 2;
 
 	if (!IsValidVehicleID(p1)) return CMD_ERROR;
@@ -1842,18 +1780,6 @@
 	v = v_front;
 
 	do {
-
-		if (!(flags & DC_EXEC)) {
-			/* Get the refit cost.
-			 * This is only needed when estimating as when the command is executed, the cost from the refit command is used.
-			 * This needs to be done for every single unit, so it should be done before checking if it's a multiheaded engine. */
-			CargoID new_cargo_type = GetEngineCargoType(v->engine_type);
-
-			if (new_cargo_type != v->cargo_type && new_cargo_type != CT_INVALID) {
-				total_cost += GetRefitCost(v->engine_type);
-			}
-		}
-
 		if (IsMultiheaded(v) && !IsTrainEngine(v)) {
 			/* we build the rear ends of multiheaded trains with the front ones */
 			continue;
@@ -1869,18 +1795,6 @@
 		if (flags & DC_EXEC) {
 			w = GetVehicle(_new_vehicle_id);
 
-			Vehicle *w2 = w;
-			Vehicle *v2 = v;
-			do {
-				if (v2->cargo_type != w2->cargo_type || v2->cargo_subtype != w2->cargo_subtype) {
-					/* We can't pay for refitting because we can't estimate refitting costs for a vehicle before it's build.
-					 * If we pay for it anyway, the cost and the estimated cost will not be the same and we will have an assert.
-					 * We need to check the whole chain if it is a train because some newgrf articulated engines can refit some units only (and not the front) */
-					total_cost += DoCommand(0, w->index, v2->cargo_type | (v2->cargo_subtype << 8), flags, GetCmdRefitVeh(v));
-					break; // We learned that the engine in question needed a refit. No need to check anymore
-				}
-			} while (v->type == VEH_TRAIN && (w2 = w2->next) != NULL && (v2 = v2->next) != NULL);
-
 			if (v->type == VEH_TRAIN && HASBIT(v->u.rail.flags, VRF_REVERSE_DIRECTION)) {
 				SETBIT(w->u.rail.flags, VRF_REVERSE_DIRECTION);
 			}
@@ -1904,6 +1818,53 @@
 		_new_vehicle_id = w_front->index;
 	}
 
+	/* Take care of refitting. */
+	w = w_front;
+	v = v_front;
+
+	/* Both building and refitting are influenced by newgrf callbacks, which
+	 * makes it impossible to accurately estimate the cloning costs. In
+	 * particular, it is possible for engines of the same type to be built with
+	 * different numbers of articulated parts, so when refitting we have to
+	 * loop over real vehicles first, and then the articulated parts of those
+	 * vehicles in a different loop. */
+	do {
+		do {
+			if (flags & DC_EXEC) {
+				assert(w != NULL);
+
+				if (w->cargo_type != v->cargo_type || w->cargo_subtype != v->cargo_type) {
+					cost = DoCommand(0, w->index, v->cargo_type | (v->cargo_subtype << 8) | 1U << 16 , flags, GetCmdRefitVeh(v));
+					if (!CmdFailed(cost)) total_cost += cost;
+				}
+
+				if (w->type == VEH_TRAIN && EngineHasArticPart(w)) {
+					w = GetNextArticPart(w);
+				} else {
+					break;
+				}
+			} else {
+				CargoID initial_cargo = GetEngineCargoType(v->engine_type);
+
+				if (v->cargo_type != initial_cargo && initial_cargo != CT_INVALID) {
+					total_cost += GetRefitCost(v->engine_type);
+				}
+			}
+		} while (v->type == VEH_TRAIN && EngineHasArticPart(v) && (v = GetNextArticPart(v)) != NULL);
+
+		if (flags & DC_EXEC) w = GetNextVehicle(w);
+	} while (v->type == VEH_TRAIN && (v = GetNextVehicle(v)) != NULL);
+
+	/* Since we can't estimate the cost of cloning a vehicle accurately we must
+	 * check whether the player has enough money manually. */
+	if (!CheckPlayerHasMoney(total_cost)) {
+		if (flags & DC_EXEC) {
+			/* The vehicle has already been bought, so now it must be sold again. */
+			DoCommand(w_front->tile, w_front->index, 1, flags, GetCmdSellVeh(w_front));
+		}
+		return CMD_ERROR;
+	}
+
 	/* Set the expense type last as refitting will make the cost go towards
 	 * running costs... */
 	SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
@@ -2221,7 +2182,6 @@
 
 		if (HASBIT(t.flags, OFB_PART_OF_ORDERS)) {
 			/* Part of orders */
-			if (v->type == VEH_TRAIN) v->u.rail.days_since_order_progr = 0;
 			v->cur_order_index++;
 		} else if (HASBIT(t.flags, OFB_HALT_IN_DEPOT)) {
 			/* Force depot visit */
@@ -2494,9 +2454,10 @@
 									scheme = LS_PASSENGER_WAGON_STEAM;
 								} else {
 									switch (RailVehInfo(parent_engine_type)->engclass) {
-										case 0: scheme = LS_PASSENGER_WAGON_STEAM; break;
-										case 1: scheme = LS_PASSENGER_WAGON_DIESEL; break;
-										case 2: scheme = LS_PASSENGER_WAGON_ELECTRIC; break;
+										default: NOT_REACHED();
+										case EC_STEAM:    scheme = LS_PASSENGER_WAGON_STEAM;    break;
+										case EC_DIESEL:   scheme = LS_PASSENGER_WAGON_DIESEL;   break;
+										case EC_ELECTRIC: scheme = LS_PASSENGER_WAGON_ELECTRIC; break;
 									}
 								}
 							} else {
@@ -2506,9 +2467,10 @@
 							bool is_mu = HASBIT(_engine_info[engine_type].misc_flags, EF_RAIL_IS_MU);
 
 							switch (rvi->engclass) {
-								case 0: scheme = LS_STEAM; break;
-								case 1: scheme = is_mu ? LS_DMU : LS_DIESEL; break;
-								case 2: scheme = is_mu ? LS_EMU : LS_ELECTRIC; break;
+								default: NOT_REACHED();
+								case EC_STEAM:    scheme = LS_STEAM; break;
+								case EC_DIESEL:   scheme = is_mu ? LS_DMU : LS_DIESEL;   break;
+								case EC_ELECTRIC: scheme = is_mu ? LS_EMU : LS_ELECTRIC; break;
 							}
 						}
 						break;
@@ -2621,13 +2583,9 @@
 	    SLE_VAR(Vehicle, z_pos,                SLE_UINT8),
 	    SLE_VAR(Vehicle, direction,            SLE_UINT8),
 
-	    SLE_VAR(Vehicle, cur_image,            SLE_UINT16),
+	SLE_CONDNULL(2,                                                         0, 57),
 	    SLE_VAR(Vehicle, spritenum,            SLE_UINT8),
-	    SLE_VAR(Vehicle, sprite_width,         SLE_UINT8),
-	    SLE_VAR(Vehicle, sprite_height,        SLE_UINT8),
-	    SLE_VAR(Vehicle, z_height,             SLE_UINT8),
-	    SLE_VAR(Vehicle, x_offs,               SLE_INT8),
-	    SLE_VAR(Vehicle, y_offs,               SLE_INT8),
+	SLE_CONDNULL(5,                                                         0, 57),
 	    SLE_VAR(Vehicle, engine_type,          SLE_UINT16),
 
 	    SLE_VAR(Vehicle, max_speed,            SLE_UINT16),
@@ -2658,17 +2616,17 @@
 	/* 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_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, type), SLE_UINT8,                 0, 4),
-	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, dest), SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
+	SLE_CONDVARX(cpp_offsetof(Vehicle, current_order) + cpp_offsetof(Order, type), SLE_UINT8,                 0, 4),
+	SLE_CONDVARX(cpp_offsetof(Vehicle, current_order) + cpp_offsetof(Order, dest), SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
 
 	/* Orders for version 5 and on */
-	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, type),  SLE_UINT8,  5, SL_MAX_VERSION),
-	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, flags), SLE_UINT8,  5, SL_MAX_VERSION),
-	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, dest),  SLE_UINT16, 5, SL_MAX_VERSION),
+	SLE_CONDVARX(cpp_offsetof(Vehicle, current_order) + cpp_offsetof(Order, type),  SLE_UINT8,  5, SL_MAX_VERSION),
+	SLE_CONDVARX(cpp_offsetof(Vehicle, current_order) + cpp_offsetof(Order, flags), SLE_UINT8,  5, SL_MAX_VERSION),
+	SLE_CONDVARX(cpp_offsetof(Vehicle, current_order) + cpp_offsetof(Order, dest),  SLE_UINT16, 5, SL_MAX_VERSION),
 
 	/* Refit in current order */
-	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, refit_cargo),    SLE_UINT8, 36, SL_MAX_VERSION),
-	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, refit_subtype),  SLE_UINT8, 36, SL_MAX_VERSION),
+	SLE_CONDVARX(cpp_offsetof(Vehicle, current_order) + cpp_offsetof(Order, refit_cargo),    SLE_UINT8, 36, SL_MAX_VERSION),
+	SLE_CONDVARX(cpp_offsetof(Vehicle, current_order) + cpp_offsetof(Order, refit_subtype),  SLE_UINT8, 36, SL_MAX_VERSION),
 
 	    SLE_REF(Vehicle, orders,               REF_ORDER),
 
@@ -2715,13 +2673,13 @@
 static const SaveLoad _train_desc[] = {
 	SLE_WRITEBYTE(Vehicle, type, VEH_TRAIN, 0), // Train type. VEH_TRAIN in mem, 0 in file.
 	SLE_INCLUDEX(0, INC_VEHICLE_COMMON),
-	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRail, crash_anim_pos),         SLE_UINT16),
-	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRail, force_proceed),          SLE_UINT8),
-	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRail, railtype),               SLE_UINT8),
-	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRail, track),                  SLE_UINT8),
-
-	SLE_CONDVARX(offsetof(Vehicle, u) + offsetof(VehicleRail, flags),                  SLE_UINT8,  2, SL_MAX_VERSION),
-	SLE_CONDVARX(offsetof(Vehicle, u) + offsetof(VehicleRail, days_since_order_progr), SLE_UINT16, 2, SL_MAX_VERSION),
+	    SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRail, crash_anim_pos),         SLE_UINT16),
+	    SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRail, force_proceed),          SLE_UINT8),
+	    SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRail, railtype),               SLE_UINT8),
+	    SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRail, track),                  SLE_UINT8),
+
+	SLE_CONDVARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRail, flags),                  SLE_UINT8,  2, SL_MAX_VERSION),
+	SLE_CONDNULL(2, 2, 59),
 
 	SLE_CONDNULL(2, 2, 19),
 	/* reserve extra space in savegame here. (currently 11 bytes) */
@@ -2733,17 +2691,17 @@
 static const SaveLoad _roadveh_desc[] = {
 	SLE_WRITEBYTE(Vehicle, type, VEH_ROAD, 1), // Road type. VEH_ROAD in mem, 1 in file.
 	SLE_INCLUDEX(0, INC_VEHICLE_COMMON),
-	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRoad, state),          SLE_UINT8),
-	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRoad, frame),          SLE_UINT8),
-	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRoad, blocked_ctr),    SLE_UINT16),
-	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRoad, overtaking),     SLE_UINT8),
-	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRoad, overtaking_ctr), SLE_UINT8),
-	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRoad, crashed_ctr),    SLE_UINT16),
-	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRoad, reverse_ctr),    SLE_UINT8),
-
-	SLE_CONDREFX(offsetof(Vehicle, u) + offsetof(VehicleRoad, slot),     REF_ROADSTOPS, 6, SL_MAX_VERSION),
+	    SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRoad, state),          SLE_UINT8),
+	    SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRoad, frame),          SLE_UINT8),
+	    SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRoad, blocked_ctr),    SLE_UINT16),
+	    SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRoad, overtaking),     SLE_UINT8),
+	    SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRoad, overtaking_ctr), SLE_UINT8),
+	    SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRoad, crashed_ctr),    SLE_UINT16),
+	    SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRoad, reverse_ctr),    SLE_UINT8),
+
+	SLE_CONDREFX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRoad, slot),     REF_ROADSTOPS, 6, SL_MAX_VERSION),
 	SLE_CONDNULL(1,                                                                     6, SL_MAX_VERSION),
-	SLE_CONDVARX(offsetof(Vehicle, u) + offsetof(VehicleRoad, slot_age), SLE_UINT8,     6, SL_MAX_VERSION),
+	SLE_CONDVARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRoad, slot_age), SLE_UINT8,     6, SL_MAX_VERSION),
 	/* reserve extra space in savegame here. (currently 16 bytes) */
 	SLE_CONDNULL(16,                                                                    2, SL_MAX_VERSION),
 
@@ -2753,7 +2711,7 @@
 static const SaveLoad _ship_desc[] = {
 	SLE_WRITEBYTE(Vehicle, type, VEH_SHIP, 2), // Ship type. VEH_SHIP in mem, 2 in file.
 	SLE_INCLUDEX(0, INC_VEHICLE_COMMON),
-	SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleShip, state), SLE_UINT8),
+	SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleShip, state), SLE_UINT8),
 
 	/* reserve extra space in savegame here. (currently 16 bytes) */
 	SLE_CONDNULL(16, 2, SL_MAX_VERSION),
@@ -2764,15 +2722,15 @@
 static const SaveLoad _aircraft_desc[] = {
 	SLE_WRITEBYTE(Vehicle, type, VEH_AIRCRAFT, 3), // Aircraft type. VEH_AIRCRAFT in mem, 3 in file.
 	SLE_INCLUDEX(0, INC_VEHICLE_COMMON),
-	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleAir, crashed_counter), SLE_UINT16),
-	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleAir, pos),             SLE_UINT8),
-
-	SLE_CONDVARX(offsetof(Vehicle, u) + offsetof(VehicleAir, targetairport),   SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
-	SLE_CONDVARX(offsetof(Vehicle, u) + offsetof(VehicleAir, targetairport),   SLE_UINT16,                5, SL_MAX_VERSION),
-
-	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleAir, state),           SLE_UINT8),
-
-	SLE_CONDVARX(offsetof(Vehicle, u) + offsetof(VehicleAir, previous_pos),    SLE_UINT8,                 2, SL_MAX_VERSION),
+	    SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleAir, crashed_counter), SLE_UINT16),
+	    SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleAir, pos),             SLE_UINT8),
+
+	SLE_CONDVARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleAir, targetairport),   SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
+	SLE_CONDVARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleAir, targetairport),   SLE_UINT16,                5, SL_MAX_VERSION),
+
+	    SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleAir, state),           SLE_UINT8),
+
+	SLE_CONDVARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleAir, previous_pos),    SLE_UINT8,                 2, SL_MAX_VERSION),
 
 	/* reserve extra space in savegame here. (currently 15 bytes) */
 	SLE_CONDNULL(15,                                                                                      2, SL_MAX_VERSION),
@@ -2795,16 +2753,12 @@
 	    SLE_VAR(Vehicle, z_pos,         SLE_UINT8),
 
 	    SLE_VAR(Vehicle, cur_image,     SLE_UINT16),
-	    SLE_VAR(Vehicle, sprite_width,  SLE_UINT8),
-	    SLE_VAR(Vehicle, sprite_height, SLE_UINT8),
-	    SLE_VAR(Vehicle, z_height,      SLE_UINT8),
-	    SLE_VAR(Vehicle, x_offs,        SLE_INT8),
-	    SLE_VAR(Vehicle, y_offs,        SLE_INT8),
+	SLE_CONDNULL(5,                                                 0, 57),
 	    SLE_VAR(Vehicle, progress,      SLE_UINT8),
 	    SLE_VAR(Vehicle, vehstatus,     SLE_UINT8),
 
-	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleSpecial, unk0), SLE_UINT16),
-	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleSpecial, unk2), SLE_UINT8),
+	    SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleSpecial, unk0), SLE_UINT16),
+	    SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleSpecial, unk2), SLE_UINT8),
 
 	/* reserve extra space in savegame here. (currently 16 bytes) */
 	SLE_CONDNULL(16, 2, SL_MAX_VERSION),
@@ -2830,23 +2784,19 @@
 	    SLE_VAR(Vehicle, z_pos,         SLE_UINT8),
 	    SLE_VAR(Vehicle, direction,     SLE_UINT8),
 
-	    SLE_VAR(Vehicle, x_offs,        SLE_INT8),
-	    SLE_VAR(Vehicle, y_offs,        SLE_INT8),
-	    SLE_VAR(Vehicle, sprite_width,  SLE_UINT8),
-	    SLE_VAR(Vehicle, sprite_height, SLE_UINT8),
-	    SLE_VAR(Vehicle, z_height,      SLE_UINT8),
+	SLE_CONDNULL(5,                                                  0, 57),
 	    SLE_VAR(Vehicle, owner,         SLE_UINT8),
 	    SLE_VAR(Vehicle, vehstatus,     SLE_UINT8),
-	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, dest), SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
-	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, dest), SLE_UINT16,                5, SL_MAX_VERSION),
+	SLE_CONDVARX(cpp_offsetof(Vehicle, current_order) + cpp_offsetof(Order, dest), SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
+	SLE_CONDVARX(cpp_offsetof(Vehicle, current_order) + cpp_offsetof(Order, dest), SLE_UINT16,                5, SL_MAX_VERSION),
 
 	    SLE_VAR(Vehicle, cur_image,     SLE_UINT16),
 	SLE_CONDVAR(Vehicle, age,           SLE_FILE_U16 | SLE_VAR_I32,  0, 30),
 	SLE_CONDVAR(Vehicle, age,           SLE_INT32,                  31, SL_MAX_VERSION),
 	    SLE_VAR(Vehicle, tick_counter,  SLE_UINT8),
 
-	   SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleDisaster, image_override), SLE_UINT16),
-	   SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleDisaster, unk2),           SLE_UINT16),
+	   SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleDisaster, image_override), SLE_UINT16),
+	   SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleDisaster, unk2),           SLE_UINT16),
 
 	/* reserve extra space in savegame here. (currently 16 bytes) */
 	SLE_CONDNULL(16,                                                 2, SL_MAX_VERSION),
@@ -2890,6 +2840,16 @@
 		v = GetVehicle(index);
 		SlObject(v, (SaveLoad*)_veh_descs[SlReadByte()]);
 
+		switch (v->type) {
+			case VEH_TRAIN:    v = new (v) Train();           break;
+			case VEH_ROAD:     v = new (v) RoadVehicle();     break;
+			case VEH_SHIP:     v = new (v) Ship();            break;
+			case VEH_AIRCRAFT: v = new (v) Aircraft();        break;
+			case VEH_SPECIAL:  v = new (v) SpecialVehicle();  break;
+			case VEH_DISASTER: v = new (v) DisasterVehicle(); break;
+			case VEH_INVALID:  v = new (v) InvalidVehicle();  break;
+		}
+
 		/* Old savegames used 'last_station_visited = 0xFF' */
 		if (CheckSavegameVersion(5) && v->last_station_visited == 0xFF)
 			v->last_station_visited = INVALID_STATION;
@@ -2927,15 +2887,87 @@
 void Vehicle::BeginLoading()
 {
 	assert(IsTileType(tile, MP_STATION) || type == VEH_SHIP);
+
+	if (this->current_order.type == OT_GOTO_STATION &&
+			this->current_order.dest == this->last_station_visited) {
+		/* Arriving at the ordered station.
+		 * Keep the load/unload flags, as we (obviously) still need them. */
+		this->current_order.flags &= OF_FULL_LOAD | OF_UNLOAD | OF_TRANSFER;
+
+		/* Furthermore add the Non Stop flag to mark that this station
+		 * is the actual destination of the vehicle, which is (for example)
+		 * necessary to be known for HandleTrainLoading to determine
+		 * whether the train is lost or not; not marking a train lost
+		 * that arrives at random stations is bad. */
+		this->current_order.flags |= OF_NON_STOP;
+	} else {
+		/* This is just an unordered intermediate stop */
+		this->current_order.flags = 0;
+	}
+
 	current_order.type = OT_LOADING;
 	GetStation(this->last_station_visited)->loading_vehicles.push_back(this);
+
+	SET_EXPENSES_TYPE(this->GetExpenseType(true));
+	VehiclePayment(this);
+
+	InvalidateWindow(this->GetVehicleListWindowClass(), this->owner);
+	InvalidateWindowWidget(WC_VEHICLE_VIEW, this->index, STATUS_BAR);
+	InvalidateWindow(WC_VEHICLE_DETAILS, this->index);
+	InvalidateWindow(WC_STATION_VIEW, this->last_station_visited);
+
+	GetStation(this->last_station_visited)->MarkTilesDirty();
+	this->MarkDirty();
 }
 
 void Vehicle::LeaveStation()
 {
-	assert(IsTileType(tile, MP_STATION) || type == VEH_SHIP);
 	assert(current_order.type == OT_LOADING);
 	current_order.type = OT_LEAVESTATION;
 	current_order.flags = 0;
 	GetStation(this->last_station_visited)->loading_vehicles.remove(this);
 }
+
+
+void Vehicle::HandleLoading(bool mode)
+{
+	switch (this->current_order.type) {
+		case OT_LOADING: {
+			/* Not the first call for this tick */
+			if (mode) return;
+
+			/* We have not waited enough time till the next round of loading/unloading */
+			if (--this->load_unload_time_rem) return;
+
+			/* Load/unload the vehicle; when it actually did something
+			 * we do not leave the station. */
+			if (LoadUnloadVehicle(this)) return;
+
+			this->PlayLeaveStationSound();
+
+			Order b = this->current_order;
+			this->LeaveStation();
+
+			/* If this was not the final order, don't remove it from the list. */
+			if (!(b.flags & OF_NON_STOP)) return;
+			break;
+		}
+
+		case OT_DUMMY: break;
+
+		default: return;
+	}
+
+	this->cur_order_index++;
+	InvalidateVehicleOrder(this);
+}
+
+
+void SpecialVehicle::UpdateDeltaXY(Direction direction)
+{
+	this->x_offs        = 0;
+	this->y_offs        = 0;
+	this->sprite_width  = 1;
+	this->sprite_height = 1;
+	this->z_height      = 1;
+}
--- a/src/vehicle.h	Fri May 04 23:17:26 2007 +0000
+++ b/src/vehicle.h	Wed May 09 20:22:49 2007 +0000
@@ -108,7 +108,6 @@
 struct VehicleRail {
 	uint16 last_speed; // NOSAVE: only used in UI
 	uint16 crash_anim_pos;
-	uint16 days_since_order_progr;
 
 	/* cached values, recalculated on load and each time a vehicle is added to/removed from the consist. */
 	uint16 cached_max_speed;  // max speed of the consist. (minimum of the max speed of all vehicles in the consist)
@@ -316,6 +315,141 @@
 
 	void BeginLoading();
 	void LeaveStation();
+
+	/**
+	 * Handle the loading of the vehicle; when not it skips through dummy
+	 * orders and does nothing in all other cases.
+	 * @param mode is the non-first call for this vehicle in this tick?
+	 */
+	void HandleLoading(bool mode = false);
+
+	/**
+	 * An overriden version of new, so you can use the vehicle instance
+	 * instead of a newly allocated piece of memory.
+	 * @param size the size of the variable (unused)
+	 * @param v    the vehicle to use as 'storage' backend
+	 * @return the memory that is 'allocated'
+	 */
+	void* operator new(size_t size, Vehicle *v) { return v; }
+
+	/**
+	 * 'Free' the memory allocated by the overriden new.
+	 * @param p the memory to 'free'
+	 * @param v the vehicle that was given to 'new' on creation.
+	 * @note This function isn't used (at the moment) and only added
+	 *       to please some compiler.
+	 */
+	void operator delete(void *p, Vehicle *v) {}
+
+	/**
+	 * 'Free' the memory allocated by the overriden new.
+	 * @param p the memory to 'free'
+	 * @note This function isn't used (at the moment) and only added
+	 *       as the above function was needed to please some compiler
+	 *       which made it necessary to add this to please yet
+	 *       another compiler...
+	 */
+	void operator delete(void *p) {}
+
+	/** We want to 'destruct' the right class. */
+	virtual ~Vehicle() {}
+
+	/**
+	 * Get a string 'representation' of the vehicle type.
+	 * @return the string representation.
+	 */
+	virtual const char* GetTypeString() const = 0;
+
+	/**
+	 * Marks the vehicles to be redrawn and updates cached variables
+	 */
+	virtual void MarkDirty() {}
+
+	/**
+	 * Updates the x and y offsets and the size of the sprite used
+	 * for this vehicle.
+	 * @param direction the direction the vehicle is facing
+	 */
+	virtual void UpdateDeltaXY(Direction direction) {}
+
+	/**
+	 * Sets the expense type associated to this vehicle type
+	 * @param income whether this is income or (running) expenses of the vehicle
+	 */
+	virtual ExpensesType GetExpenseType(bool income) const { return EXPENSES_OTHER; }
+
+	/**
+	 * Invalidates the vehicle list window of this type of vehicle
+	 */
+	virtual WindowClass GetVehicleListWindowClass() const { return WC_NONE; }
+
+	/**
+	 * Play the sound associated with leaving the station
+	 */
+	virtual void PlayLeaveStationSound() const {}
+};
+
+/**
+ * This class 'wraps' Vehicle; you do not actually instantiate this class.
+ * You create a Vehicle using AllocateVehicle, so it is added to the pool
+ * and you reinitialize that to a Train using:
+ *   v = new (v) Train();
+ *
+ * As side-effect the vehicle type is set correctly.
+ *
+ * A special vehicle is one of the following:
+ *  - smoke
+ *  - electric sparks for trains
+ *  - explosions
+ *  - bulldozer (road works)
+ *  - bubbles (industry)
+ */
+struct SpecialVehicle : public Vehicle {
+	/** Initializes the Vehicle to a special vehicle */
+	SpecialVehicle() { this->type = VEH_SPECIAL; }
+
+	/** We want to 'destruct' the right class. */
+	virtual ~SpecialVehicle() {}
+
+	const char *GetTypeString() const { return "special vehicle"; }
+	void UpdateDeltaXY(Direction direction);
+};
+
+/**
+ * This class 'wraps' Vehicle; you do not actually instantiate this class.
+ * You create a Vehicle using AllocateVehicle, so it is added to the pool
+ * and you reinitialize that to a Train using:
+ *   v = new (v) Train();
+ *
+ * As side-effect the vehicle type is set correctly.
+ */
+struct DisasterVehicle : public Vehicle {
+	/** Initializes the Vehicle to a disaster vehicle */
+	DisasterVehicle() { this->type = VEH_DISASTER; }
+
+	/** We want to 'destruct' the right class. */
+	virtual ~DisasterVehicle() {}
+
+	const char *GetTypeString() const { return "disaster vehicle"; }
+	void UpdateDeltaXY(Direction direction);
+};
+
+/**
+ * This class 'wraps' Vehicle; you do not actually instantiate this class.
+ * You create a Vehicle using AllocateVehicle, so it is added to the pool
+ * and you reinitialize that to a Train using:
+ *   v = new (v) Train();
+ *
+ * As side-effect the vehicle type is set correctly.
+ */
+struct InvalidVehicle : public Vehicle {
+	/** Initializes the Vehicle to a invalid vehicle */
+	InvalidVehicle() { this->type = VEH_INVALID; }
+
+	/** We want to 'destruct' the right class. */
+	virtual ~InvalidVehicle() {}
+
+	const char *GetTypeString() const { return "invalid vehicle"; }
 };
 
 #define is_custom_sprite(x) (x >= 0xFD)
@@ -345,7 +479,6 @@
 byte VehicleRandomBits();
 void ResetVehiclePosHash();
 
-bool CanFillVehicle(Vehicle *v);
 bool CanRefitTo(EngineID engine_type, CargoID cid_to);
 CargoID FindFirstRefittableCargo(EngineID engine_type);
 int32 GetRefitCost(EngineID engine_type);
@@ -385,7 +518,7 @@
 
 UnitID GetFreeUnitNumber(byte type);
 
-int LoadUnloadVehicle(Vehicle *v, bool just_arrived);
+bool LoadUnloadVehicle(Vehicle *v);
 
 void TrainConsistChanged(Vehicle *v);
 void TrainPowerChanged(Vehicle *v);
@@ -470,7 +603,7 @@
 static inline void DeleteVehicle(Vehicle *v)
 {
 	DestroyVehicle(v);
-	v->type = VEH_INVALID;
+	v = new (v) InvalidVehicle();
 }
 
 static inline bool IsPlayerBuildableVehicleType(byte type)
--- a/src/video/win32_v.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/video/win32_v.cpp	Wed May 09 20:22:49 2007 +0000
@@ -212,6 +212,7 @@
 static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
 	static uint32 keycode = 0;
+	static bool console = false;
 
 	switch (msg) {
 		case WM_CREATE:
@@ -363,12 +364,23 @@
 		}
 #endif /* UNICODE */
 
+		case WM_DEADCHAR:
+			console = GB(lParam, 16, 8) == 41;
+			return 0;
+
 		case WM_CHAR: {
 			/* Silently drop all non-text messages as those were handled by WM_KEYDOWN */
 			if (wParam < VK_SPACE) return 0;
 			uint scancode = GB(lParam, 16, 8);
 			uint charcode = wParam;
 
+			/* If the console key is a dead-key, we need to press it twice to get a WM_CHAR message.
+			 * But we then get two WM_CHAR messages, so ignore the first one */
+			if (console && scancode == 41) {
+				console = false;
+				return 0;
+			}
+
 #if !defined(UNICODE)
 			wchar_t w;
 			int len = MultiByteToWideChar(_codepage, 0, (char*)&charcode, 1, &w, 1);
--- a/src/viewport.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/viewport.cpp	Wed May 09 20:22:49 2007 +0000
@@ -799,7 +799,7 @@
 	Town *t;
 	int left, top, right, bottom;
 
-	if (!(_display_opt & DO_SHOW_TOWN_NAMES) || _game_mode == GM_MENU)
+	if (!HASBIT(_display_opt, DO_SHOW_TOWN_NAMES) || _game_mode == GM_MENU)
 		return;
 
 	left = dpi->left;
@@ -873,7 +873,7 @@
 	int left, top, right, bottom;
 	const Station *st;
 
-	if (!(_display_opt & DO_SHOW_STATION_NAMES) || _game_mode == GM_MENU)
+	if (!HASBIT(_display_opt, DO_SHOW_STATION_NAMES) || _game_mode == GM_MENU)
 		return;
 
 	left = dpi->left;
@@ -940,7 +940,7 @@
 	const Sign *si;
 	int left, top, right, bottom;
 
-	if (!(_display_opt & DO_SHOW_SIGNS))
+	if (!HASBIT(_display_opt, DO_SHOW_SIGNS))
 		return;
 
 	left = dpi->left;
@@ -1007,7 +1007,7 @@
 	const Waypoint *wp;
 	int left, top, right, bottom;
 
-	if (!(_display_opt & DO_WAYPOINTS))
+	if (!HASBIT(_display_opt, DO_WAYPOINTS))
 		return;
 
 	left = dpi->left;
@@ -1487,7 +1487,7 @@
 {
 	const Town *t;
 
-	if (!(_display_opt & DO_SHOW_TOWN_NAMES)) return false;
+	if (!HASBIT(_display_opt, DO_SHOW_TOWN_NAMES)) return false;
 
 	switch (vp->zoom) {
 		case 0:
@@ -1541,7 +1541,7 @@
 {
 	const Station *st;
 
-	if (!(_display_opt & DO_SHOW_STATION_NAMES)) return false;
+	if (!HASBIT(_display_opt, DO_SHOW_STATION_NAMES)) return false;
 
 	switch (vp->zoom) {
 		case 0:
@@ -1595,7 +1595,7 @@
 {
 	const Sign *si;
 
-	if (!(_display_opt & DO_SHOW_SIGNS) || _current_player == PLAYER_SPECTATOR) return false;
+	if (!HASBIT(_display_opt, DO_SHOW_SIGNS) || _current_player == PLAYER_SPECTATOR) return false;
 
 	switch (vp->zoom) {
 		case 0:
@@ -1649,7 +1649,7 @@
 {
 	const Waypoint *wp;
 
-	if (!(_display_opt & DO_WAYPOINTS)) return false;
+	if (!HASBIT(_display_opt, DO_WAYPOINTS)) return false;
 
 	switch (vp->zoom) {
 		case 0:
--- a/src/water_cmd.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/water_cmd.cpp	Wed May 09 20:22:49 2007 +0000
@@ -25,6 +25,7 @@
 #include "train.h"
 #include "water_map.h"
 #include "newgrf.h"
+#include "newgrf_canal.h"
 
 static const SpriteID _water_shore_sprites[] = {
 	0,
@@ -373,39 +374,43 @@
 {
 	uint wa;
 
+	/* Test for custom graphics, else use the default */
+	SpriteID dikes_base = GetCanalSprite(CF_DIKES, tile);
+	if (dikes_base == 0) dikes_base = SPR_CANALS_BASE + 57;
+
 	/* determine the edges around with water. */
 	wa = IsWateredTile(TILE_ADDXY(tile, -1, 0)) << 0;
 	wa += IsWateredTile(TILE_ADDXY(tile, 0, 1)) << 1;
 	wa += IsWateredTile(TILE_ADDXY(tile, 1, 0)) << 2;
 	wa += IsWateredTile(TILE_ADDXY(tile, 0, -1)) << 3;
 
-	if (!(wa & 1)) DrawGroundSprite(SPR_CANALS_BASE + 57, PAL_NONE);
-	if (!(wa & 2)) DrawGroundSprite(SPR_CANALS_BASE + 58, PAL_NONE);
-	if (!(wa & 4)) DrawGroundSprite(SPR_CANALS_BASE + 59, PAL_NONE);
-	if (!(wa & 8)) DrawGroundSprite(SPR_CANALS_BASE + 60, PAL_NONE);
+	if (!(wa & 1)) DrawGroundSprite(dikes_base,     PAL_NONE);
+	if (!(wa & 2)) DrawGroundSprite(dikes_base + 1, PAL_NONE);
+	if (!(wa & 4)) DrawGroundSprite(dikes_base + 2, PAL_NONE);
+	if (!(wa & 8)) DrawGroundSprite(dikes_base + 3, PAL_NONE);
 
 	/* right corner */
 	switch (wa & 0x03) {
-		case 0: DrawGroundSprite(SPR_CANALS_BASE + 57 + 4, PAL_NONE); break;
-		case 3: if (!IsWateredTile(TILE_ADDXY(tile, -1, 1))) DrawGroundSprite(SPR_CANALS_BASE + 57 + 8, PAL_NONE); break;
+		case 0: DrawGroundSprite(dikes_base + 4, PAL_NONE); break;
+		case 3: if (!IsWateredTile(TILE_ADDXY(tile, -1, 1))) DrawGroundSprite(dikes_base + 8, PAL_NONE); break;
 	}
 
 	/* bottom corner */
 	switch (wa & 0x06) {
-		case 0: DrawGroundSprite(SPR_CANALS_BASE + 57 + 5, PAL_NONE); break;
-		case 6: if (!IsWateredTile(TILE_ADDXY(tile, 1, 1))) DrawGroundSprite(SPR_CANALS_BASE + 57 + 9, PAL_NONE); break;
+		case 0: DrawGroundSprite(dikes_base + 5, PAL_NONE); break;
+		case 6: if (!IsWateredTile(TILE_ADDXY(tile, 1, 1))) DrawGroundSprite(dikes_base + 9, PAL_NONE); break;
 	}
 
 	/* left corner */
 	switch (wa & 0x0C) {
-		case  0: DrawGroundSprite(SPR_CANALS_BASE + 57 + 6, PAL_NONE); break;
-		case 12: if (!IsWateredTile(TILE_ADDXY(tile, 1, -1))) DrawGroundSprite(SPR_CANALS_BASE + 57 + 10, PAL_NONE); break;
+		case  0: DrawGroundSprite(dikes_base + 6, PAL_NONE); break;
+		case 12: if (!IsWateredTile(TILE_ADDXY(tile, 1, -1))) DrawGroundSprite(dikes_base + 10, PAL_NONE); break;
 	}
 
 	/* upper corner */
 	switch (wa & 0x09) {
-		case 0: DrawGroundSprite(SPR_CANALS_BASE + 57 + 7, PAL_NONE); break;
-		case 9: if (!IsWateredTile(TILE_ADDXY(tile, -1, -1))) DrawGroundSprite(SPR_CANALS_BASE + 57 + 11, PAL_NONE); break;
+		case 0: DrawGroundSprite(dikes_base + 7, PAL_NONE); break;
+		case 9: if (!IsWateredTile(TILE_ADDXY(tile, -1, -1))) DrawGroundSprite(dikes_base + 11, PAL_NONE); break;
 	}
 }
 
@@ -421,12 +426,30 @@
 	SpriteID palette, uint base
 )
 {
-	DrawGroundSprite(wdts++->image, PAL_NONE);
+	SpriteID image;
+	SpriteID water_base = GetCanalSprite(CF_WATERSLOPE, ti->tile);
+	SpriteID locks_base = GetCanalSprite(CF_LOCKS, ti->tile);
+
+	/* If no custom graphics, use defaults */
+	if (water_base == 0) water_base = SPR_CANALS_BASE + 5;
+	if (locks_base == 0) {
+		locks_base = SPR_CANALS_BASE + 9;
+	} else {
+		/* If using custom graphics, ignore the variation on height */
+		base = 0;
+	}
+
+	image = wdts++->image;
+	if (image < 4) image += water_base;
+	DrawGroundSprite(image, PAL_NONE);
 
 	for (; wdts->delta_x != 0x80; wdts++) {
-		SpriteID image = wdts->image + base;
+		SpriteID image = wdts->image;
 		SpriteID pal;
 
+		if (image < 24) image += locks_base;
+		image += base;
+
 		if (HASBIT(_transparent_opt, TO_BUILDINGS)) {
 			SETBIT(image, PALETTE_MODIFIER_TRANSPARENT);
 			pal = PALETTE_TO_TRANSPARENT;
--- a/src/window.cpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/window.cpp	Wed May 09 20:22:49 2007 +0000
@@ -682,17 +682,12 @@
 };
 
 
-static SizeRect _awap_r;
-
-static bool IsGoodAutoPlace1(int left, int top)
+static bool IsGoodAutoPlace1(int left, int top, int width, int height, Point &pos)
 {
-	int right,bottom;
 	Window* const *wz;
 
-	_awap_r.left= left;
-	_awap_r.top = top;
-	right = _awap_r.width + left;
-	bottom = _awap_r.height + top;
+	int right  = width + left;
+	int bottom = height + top;
 
 	if (left < 0 || top < 22 || right > _screen.width || bottom > _screen.height)
 		return false;
@@ -710,19 +705,15 @@
 		}
 	}
 
+	pos.x = left;
+	pos.y = top;
 	return true;
 }
 
-static bool IsGoodAutoPlace2(int left, int top)
+static bool IsGoodAutoPlace2(int left, int top, int width, int height, Point &pos)
 {
-	int width,height;
 	Window* const *wz;
 
-	_awap_r.left= left;
-	_awap_r.top = top;
-	width = _awap_r.width;
-	height = _awap_r.height;
-
 	if (left < -(width>>2) || left > _screen.width - (width>>1)) return false;
 	if (top < 22 || top > _screen.height - (height>>2)) return false;
 
@@ -739,6 +730,8 @@
 		}
 	}
 
+	pos.x = left;
+	pos.y = top;
 	return true;
 }
 
@@ -747,39 +740,36 @@
 	Window* const *wz;
 	Point pt;
 
-	_awap_r.width = width;
-	_awap_r.height = height;
-
-	if (IsGoodAutoPlace1(0, 24)) goto ok_pos;
+	if (IsGoodAutoPlace1(0, 24, width, height, pt)) return pt;
 
 	FOR_ALL_WINDOWS(wz) {
 		const Window *w = *wz;
 		if (w->window_class == WC_MAIN_WINDOW) continue;
 
-		if (IsGoodAutoPlace1(w->left+w->width+2,w->top)) goto ok_pos;
-		if (IsGoodAutoPlace1(w->left-   width-2,w->top)) goto ok_pos;
-		if (IsGoodAutoPlace1(w->left,w->top+w->height+2)) goto ok_pos;
-		if (IsGoodAutoPlace1(w->left,w->top-   height-2)) goto ok_pos;
-		if (IsGoodAutoPlace1(w->left+w->width+2,w->top+w->height-height)) goto ok_pos;
-		if (IsGoodAutoPlace1(w->left-   width-2,w->top+w->height-height)) goto ok_pos;
-		if (IsGoodAutoPlace1(w->left+w->width-width,w->top+w->height+2)) goto ok_pos;
-		if (IsGoodAutoPlace1(w->left+w->width-width,w->top-   height-2)) goto ok_pos;
+		if (IsGoodAutoPlace1(w->left + w->width + 2, w->top, width, height, pt)) return pt;
+		if (IsGoodAutoPlace1(w->left - width - 2,    w->top, width, height, pt)) return pt;
+		if (IsGoodAutoPlace1(w->left, w->top + w->height + 2, width, height, pt)) return pt;
+		if (IsGoodAutoPlace1(w->left, w->top - height - 2,    width, height, pt)) return pt;
+		if (IsGoodAutoPlace1(w->left + w->width + 2, w->top + w->height - height, width, height, pt)) return pt;
+		if (IsGoodAutoPlace1(w->left - width - 2,    w->top + w->height - height, width, height, pt)) return pt;
+		if (IsGoodAutoPlace1(w->left + w->width - width, w->top + w->height + 2, width, height, pt)) return pt;
+		if (IsGoodAutoPlace1(w->left + w->width - width, w->top - height - 2,    width, height, pt)) return pt;
 	}
 
 	FOR_ALL_WINDOWS(wz) {
 		const Window *w = *wz;
 		if (w->window_class == WC_MAIN_WINDOW) continue;
 
-		if (IsGoodAutoPlace2(w->left+w->width+2,w->top)) goto ok_pos;
-		if (IsGoodAutoPlace2(w->left-   width-2,w->top)) goto ok_pos;
-		if (IsGoodAutoPlace2(w->left,w->top+w->height+2)) goto ok_pos;
-		if (IsGoodAutoPlace2(w->left,w->top-   height-2)) goto ok_pos;
+		if (IsGoodAutoPlace2(w->left + w->width + 2, w->top, width, height, pt)) return pt;
+		if (IsGoodAutoPlace2(w->left - width - 2,    w->top, width, height, pt)) return pt;
+		if (IsGoodAutoPlace2(w->left, w->top + w->height + 2, width, height, pt)) return pt;
+		if (IsGoodAutoPlace2(w->left, w->top - height - 2,    width, height, pt)) return pt;
 	}
 
 	{
-		int left=0,top=24;
+		int left = 0, top = 24;
 
-restart:;
+restart:
 		FOR_ALL_WINDOWS(wz) {
 			const Window *w = *wz;
 
@@ -794,11 +784,6 @@
 		pt.y = top;
 		return pt;
 	}
-
-ok_pos:;
-	pt.x = _awap_r.left;
-	pt.y = _awap_r.top;
-	return pt;
 }
 
 static Window *LocalAllocateWindowDesc(const WindowDesc *desc, int window_number)
--- a/src/window.h	Fri May 04 23:17:26 2007 +0000
+++ b/src/window.h	Wed May 09 20:22:49 2007 +0000
@@ -280,6 +280,11 @@
 };
 assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(querystr_d));
 
+struct chatquerystr_d : public querystr_d {
+	int dest;
+};
+assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(chatquerystr_d));
+
 struct menu_d {
 	byte item_count;      ///< follow_vehicle
 	byte sel_index;       ///< scrollpos_x
--- a/src/yapf/yapf_destrail.hpp	Fri May 04 23:17:26 2007 +0000
+++ b/src/yapf/yapf_destrail.hpp	Wed May 09 20:22:49 2007 +0000
@@ -86,14 +86,35 @@
 public:
 	void SetDestination(Vehicle* v)
 	{
-		if (v->current_order.type == OT_GOTO_STATION) {
-			m_destTile = CalcStationCenterTile(v->current_order.dest);
-			m_dest_station_id = v->current_order.dest;
-			m_destTrackdirs = INVALID_TRACKDIR_BIT;
-		} else {
-			m_destTile = v->dest_tile;
-			m_dest_station_id = INVALID_STATION;
-			m_destTrackdirs = (TrackdirBits)(GetTileTrackStatus(v->dest_tile, TRANSPORT_RAIL) & TRACKDIR_BIT_MASK);
+		switch (v->current_order.type) {
+			case OT_GOTO_STATION:
+				m_destTile = CalcStationCenterTile(v->current_order.dest);
+				m_dest_station_id = v->current_order.dest;
+				m_destTrackdirs = INVALID_TRACKDIR_BIT;
+				break;
+
+			case OT_GOTO_WAYPOINT: {
+				Waypoint *wp = GetWaypoint(v->current_order.dest);
+				if (wp == NULL) {
+					/* Invalid waypoint in orders! */
+					DEBUG(yapf, 0, "Invalid waypoint in orders == 0x%04X (train %d, player %d)", v->current_order.dest, v->unitnumber, (PlayerID)v->owner);
+					break;
+				}
+				m_destTile = wp->xy;
+				if (m_destTile != v->dest_tile) {
+					/* Something is wrong with orders! */
+					DEBUG(yapf, 0, "Invalid v->dest_tile == 0x%04X (train %d, player %d)", v->dest_tile, v->unitnumber, (PlayerID)v->owner);
+				}
+				m_dest_station_id = INVALID_STATION;
+				m_destTrackdirs = TrackToTrackdirBits(AxisToTrack(GetWaypointAxis(wp->xy)));
+				break;
+			}
+
+			default:
+				m_destTile = v->dest_tile;
+				m_dest_station_id = INVALID_STATION;
+				m_destTrackdirs = (TrackdirBits)(GetTileTrackStatus(v->dest_tile, TRANSPORT_RAIL) & TRACKDIR_BIT_MASK);
+				break;
 		}
 		CYapfDestinationRailBase::SetDestination(v);
 	}