(svn r9816) [NoAI] -Sync with trunk r9712:9815 except r9759 (MorphOS threading) because that needs special attention.
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);
}